ソースを参照

#1519 Location improvements: refactoring

Alex Trofimov 5 年 前
親
コミット
be4afd3621

+ 2 - 41
inc/classes/BxDolEmbed.php

@@ -36,23 +36,8 @@
  * @endcode
  *
  */
-class BxDolEmbed extends BxDolFactory implements iBxDolFactoryObject
+class BxDolEmbed extends BxDolFactoryObject
 {
-    protected $_sObject;
-    protected $_aObject;
-
-    /**
-     * Constructor
-     * @param $aObject array of editor options
-     */
-    protected function __construct($aObject)
-    {
-        parent::__construct();
-
-        $this->_sObject = $aObject['object'];
-        $this->_aObject = $aObject;
-    }
-
     /**
      * Get editor object instance by object name
      * @param $sObject object name
@@ -63,31 +48,7 @@ class BxDolEmbed extends BxDolFactory implements iBxDolFactoryObject
         if (!$sObject)
             $sObject = getParam('sys_embed_default');
 
-        if (isset($GLOBALS['bxDolClasses']['BxDolEmbed!'.$sObject]))
-            return $GLOBALS['bxDolClasses']['BxDolEmbed!'.$sObject];
-
-        $aObject = BxDolEmbedQuery::getObject($sObject);
-        if (!$aObject || !is_array($aObject))
-            return false;
-
-        if (empty($aObject['override_class_name']))
-            return false;
-
-        $sClass = $aObject['override_class_name'];
-        if (!empty($aObject['override_class_file']))
-            require_once(BX_DIRECTORY_PATH_ROOT . $aObject['override_class_file']);
-
-        $o = new $sClass($aObject, $oTemplate);
-
-        return ($GLOBALS['bxDolClasses']['BxDolEmbed!'.$sObject] = $o);
-    }
-
-    /**
-     * Get object name
-     */
-    public function getObjectName ()
-    {
-        return $this->_sObject;
+        return parent::getObjectInstanceByClassNames($sObject, $oTemplate, 'BxDolEmbed', 'BxDolEmbedQuery');
     }
 
     /**

+ 4 - 22
inc/classes/BxDolEmbedQuery.php

@@ -11,34 +11,16 @@
  * Database queries for embed objects.
  * @see BxDolEmbed
  */
-class BxDolEmbedQuery extends BxDolDb
+class BxDolEmbedQuery extends BxDolFactoryObjectQuery
 {
-    protected $_aObject;
-
-    public function __construct($aObject)
-    {
-        parent::__construct();
-        $this->_aObject = $aObject;
-    }
-
-    static public function getObject ($sObject)
+    static public function getObject($sObject)
     {
-        $oDb = BxDolDb::getInstance();
-        $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_embeds` WHERE `object` = ?", $sObject);
-        $aObject = $oDb->getRow($sQuery);
-        if (!$aObject || !is_array($aObject))
-            return false;
-
-        return $aObject;
+        return parent::getObjectFromTable($sObject, 'sys_objects_embeds');
     }
 
     static public function getObjects ()
     {
-        $aObjects = BxDolDb::getInstance()->getAll("SELECT * FROM `sys_objects_embeds` WHERE 1");
-        if(empty($aObjects) || !is_array($aObjects))
-            return array();
-
-        return $aObjects;
+        return parent::getObjectsFromTable('sys_objects_embeds');
     }
 }
 

+ 65 - 0
inc/classes/BxDolFactoryObject.php

@@ -0,0 +1,65 @@
+<?php defined('BX_DOL') or defined('BX_DOL_INSTALL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaCore UNA Core
+ * @{
+ */
+
+/**
+ * Base class for classes with implement object instance 
+ */
+abstract class BxDolFactoryObject extends BxDolFactory implements iBxDolFactoryObject
+{
+	protected $_oDb;
+    protected $_oTemplate;
+	protected $_sObject;
+    protected $_aObject;
+
+    protected function __construct($aObject, $oTemplate = null, $sDbClassName = '')
+    {
+        parent::__construct();
+
+        $this->_aObject = $aObject;
+        $this->_sObject = $aObject['object'];
+        $this->_oTemplate = $oTemplate ? $oTemplate : BxDolTemplate::getInstance();
+        if ($sDbClassName)
+            $this->_oDb = new $sDbClassName($this->_aObject);
+    }
+
+   /**
+     * Get object instance by object name
+     * @param $sObject object name
+     * @return object instance or false on error
+     */
+    public static function getObjectInstanceByClassNames($sObject, $oTemplate, $sClassName, $sDbClassName)
+    {
+        if(isset($GLOBALS['bxDolClasses'][$sClassName . '!' . $sObject]))
+            return $GLOBALS['bxDolClasses'][$sClassName . '!' . $sObject];
+
+        $aObject = $sDbClassName::getObject($sObject);
+        if (!$aObject || !is_array($aObject))
+            return false;
+
+        $sClass = $sClassName;
+        if(!empty($aObject['class_name'])) {
+            $sClass = $aObject['class_name'];
+            if(!empty($aObject['class_file']))
+                require_once(BX_DIRECTORY_PATH_ROOT . $aObject['class_file']);
+        }        
+
+        $o = new $sClass($aObject, $oTemplate);
+        return ($GLOBALS['bxDolClasses'][$sClassName . '!' . $sObject] = $o);
+    }
+
+    /**
+     * Get current object name
+     */
+    public function getObjectName()
+    {
+        return $this->_aObject['object'];
+    }
+}
+
+/** @} */

+ 46 - 0
inc/classes/BxDolFactoryObjectQuery.php

@@ -0,0 +1,46 @@
+<?php defined('BX_DOL') or defined('BX_DOL_INSTALL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaCore UNA Core
+ * @{
+ */
+
+/**
+ * Base class for DB classes associated with object instance 
+ */
+class BxDolFactoryObjectQuery extends BxDolDb
+{
+    protected $_aObject;
+
+    public function __construct($aObject = array())
+    {
+        parent::__construct();
+        $this->_aObject = $aObject;
+    }
+
+    static public function getObjectFromTable($sObject, $sTable)
+    {
+        $oDb = BxDolDb::getInstance();
+
+        $sQuery = $oDb->prepare("SELECT * FROM `$sTable` WHERE `object` = ?", $sObject);
+
+        $aObject = $oDb->getRow($sQuery);
+        if(!$aObject || !is_array($aObject))
+            return false;
+
+        return $aObject;
+    }
+
+    static public function getObjectsFromTable ($sTable)
+    {
+        $aObjects = BxDolDb::getInstance()->getAll("SELECT * FROM `$sTable`");
+        if(empty($aObjects) || !is_array($aObjects))
+            return array();
+
+        return $aObjects;
+    }
+}
+
+/** @} */

+ 6 - 23
inc/classes/BxDolLocationField.php

@@ -17,23 +17,11 @@
  * - class_name: user defined class name which is derived from BxDolLocationField.
  * - class_file: the location of the user defined class, leave it empty if class is located in system folders.
  */
-class BxDolLocationField extends BxDolFactory implements iBxDolFactoryObject
+class BxDolLocationField extends BxDolFactoryObject
 {
-	protected $_oDb;
-	protected $_sObject;
-    protected $_aObject;
-
-    /**
-     * Constructor
-     */
     protected function __construct($aObject)
     {
-        parent::__construct();
-
-        $this->_aObject = $aObject;
-        $this->_sObject = $aObject['object'];
-
-        $this->_oDb = new BxDolLocationFieldQuery($this->_aObject);
+        parent::__construct($aObject, null, 'BxDolLocationFieldQuery');
     }
 
    /**
@@ -43,6 +31,8 @@ class BxDolLocationField extends BxDolFactory implements iBxDolFactoryObject
      */
     public static function getObjectInstance($sObject)
     {
+        return parent::getObjectInstanceByClassNames($sObject, null, 'BxDolLocationField', 'BxDolLocationFieldQuery');
+/*
         if(isset($GLOBALS['bxDolClasses']['BxDolLocationField!' . $sObject]))
             return $GLOBALS['bxDolClasses']['BxDolLocationField!' . $sObject];
 
@@ -59,14 +49,7 @@ class BxDolLocationField extends BxDolFactory implements iBxDolFactoryObject
 
         $o = new $sClass($aObject);
         return ($GLOBALS['bxDolClasses']['BxDolLocationField!' . $sObject] = $o);
-    }
-
-    /**
-     * Get current object name
-     */
-    public function getObjectName()
-    {
-        return $this->_aObject['object'];
+*/
     }
 
     public function genInputLocation (&$aInput, $oForm)
@@ -103,7 +86,7 @@ class BxDolLocationField extends BxDolFactory implements iBxDolFactoryObject
                 'location_string' => $sLocationString,
             );
 
-            $sRet = $oForm->getTemplate()->parseHtmlByName('form_field_location_plain_auto.html', $aVars);
+            $sRet = $oForm->getTemplate()->parseHtmlByName('location_field_plain_auto.html', $aVars);
         }
         else {
             $aFields = array(

+ 1 - 1
inc/classes/BxDolLocationFieldGoogle.php

@@ -12,7 +12,7 @@ class BxDolLocationFieldGoogle extends BxDolLocationField
     public function genInputLocation (&$aInput, $oForm)
     {
         $aVars = $this->_getInputLocationVars($aInput, $oForm);
-        return $oForm->getTemplate()->parseHtmlByName('form_field_location_google.html', $aVars);
+        return $oForm->getTemplate()->parseHtmlByName('location_field_google.html', $aVars);
     }
 
     protected function _getInputLocationVars(&$aInput, $oForm)

+ 4 - 23
inc/classes/BxDolLocationFieldQuery.php

@@ -7,35 +7,16 @@
  * @{
  */
 
-class BxDolLocationFieldQuery extends BxDolDb
+class BxDolLocationFieldQuery extends BxDolFactoryObjectQuery
 {
-
-    public function __construct($aObject = array())
-    {
-        parent::__construct();
-        $this->_aObject = $aObject;
-    }
-
-    static public function getLocationFieldObject($sObject)
+    static public function getObject($sObject)
     {
-        $oDb = BxDolDb::getInstance();
-
-        $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_location_field` WHERE `object` = ?", $sObject);
-
-        $aObject = $oDb->getRow($sQuery);
-        if(!$aObject || !is_array($aObject))
-            return false;
-
-        return $aObject;
+        return parent::getObjectFromTable($sObject, 'sys_objects_location_field');
     }
 
     static public function getObjects ()
     {
-        $aObjects = BxDolDb::getInstance()->getAll("SELECT * FROM `sys_objects_location_field`");
-        if(empty($aObjects) || !is_array($aObjects))
-            return array();
-
-        return $aObjects;
+        return parent::getObjectsFromTable('sys_objects_location_field');
     }
 }
 

+ 3 - 39
inc/classes/BxDolLocationMap.php

@@ -17,24 +17,11 @@
  * - class_name: user defined class name which is derived from BxDolLocationField.
  * - class_file: the location of the user defined class, leave it empty if class is located in system folders.
  */
-class BxDolLocationMap extends BxDolFactory implements iBxDolFactoryObject
+class BxDolLocationMap extends BxDolFactoryObject
 {
-	protected $_oDb;
-	protected $_sObject;
-    protected $_aObject;
-    protected $_oTemplate;
-
-    /**
-     * Constructor
-     */
     protected function __construct($aObject, $oTemplate = null)
     {
-        parent::__construct();
-
-        $this->_aObject = $aObject;
-        $this->_sObject = $aObject['object'];
-        $this->_oTemplate = $oTemplate ? $oTemplate : BxDolTemplate::getInstance();
-        $this->_oDb = new BxDolLocationMapQuery($this->_aObject);
+        parent::__construct($aObject, $oTemplate, 'BxDolLocationFieldQuery');
     }
 
    /**
@@ -44,30 +31,7 @@ class BxDolLocationMap extends BxDolFactory implements iBxDolFactoryObject
      */
     public static function getObjectInstance($sObject, $oTemplate = null)
     {
-        if(isset($GLOBALS['bxDolClasses']['BxDolLocationMap!' . $sObject]))
-            return $GLOBALS['bxDolClasses']['BxDolLocationMap!' . $sObject];
-
-        $aObject = BxDolLocationMapQuery::getLocationMapObject($sObject);
-        if (!$aObject || !is_array($aObject))
-            return false;
-
-        $sClass = 'BxDolLocationMap';
-        if(!empty($aObject['class_name'])) {
-            $sClass = $aObject['class_name'];
-            if(!empty($aObject['class_file']))
-                require_once(BX_DIRECTORY_PATH_ROOT . $aObject['class_file']);
-        }        
-
-        $o = new $sClass($aObject, $oTemplate);
-        return ($GLOBALS['bxDolClasses']['BxDolLocationMap!' . $sObject] = $o);
-    }
-
-    /**
-     * Get current object name
-     */
-    public function getObjectName()
-    {
-        return $this->_aObject['object'];
+        return parent::getObjectInstanceByClassNames($sObject, $oTemplate, 'BxDolLocationMap', 'BxDolLocationMapQuery');
     }
 
     /**

+ 4 - 23
inc/classes/BxDolLocationMapQuery.php

@@ -7,35 +7,16 @@
  * @{
  */
 
-class BxDolLocationMapQuery extends BxDolDb
+class BxDolLocationMapQuery extends BxDolFactoryObjectQuery
 {
-
-    public function __construct($aObject = array())
-    {
-        parent::__construct();
-        $this->_aObject = $aObject;
-    }
-
-    static public function getLocationMapObject($sObject)
+    static public function getObject($sObject)
     {
-        $oDb = BxDolDb::getInstance();
-
-        $sQuery = $oDb->prepare("SELECT * FROM `sys_objects_location_map` WHERE `object` = ?", $sObject);
-
-        $aObject = $oDb->getRow($sQuery);
-        if(!$aObject || !is_array($aObject))
-            return false;
-
-        return $aObject;
+        return parent::getObjectFromTable($sObject, 'sys_objects_location_map');
     }
 
     static public function getObjects ()
     {
-        $aObjects = BxDolDb::getInstance()->getAll("SELECT * FROM `sys_objects_location_map`");
-        if(empty($aObjects) || !is_array($aObjects))
-            return array();
-
-        return $aObjects;
+        return parent::getObjectsFromTable('sys_objects_location_map');
     }
 }
 

+ 15 - 2
inc/classes/BxDolMetatags.php

@@ -571,6 +571,8 @@ class BxDolMetatags extends BxDolFactory implements iBxDolFactoryObject
      */
     public function locationsAdd($iId, $sLatitude, $sLongitude, $sCountryCode, $sState, $sCity, $sZip = '', $sStreet = '', $sStreetNumber = '') 
     {
+        // TODO: if lat & lng aren't defined then perform geocoding automatically, or maybe leverage this on client side ?
+
         return $this->_oQuery->locationsAdd($iId, $sLatitude, $sLongitude, $sCountryCode, $sState, $sCity, $sZip, $sStreet, $sStreetNumber);
     }
 
@@ -692,11 +694,22 @@ class BxDolMetatags extends BxDolFactory implements iBxDolFactoryObject
      * @return string with links to country and city
      */
     public function locationsString($iId, $bHTML = true, $aParams = array())
+    {
+        bx_import('BxDolForm');        
+        $aLocation = $this->locationGet($iId);
+        return $this->locationsStringFromArray($aLocation, $bHTML, $aParams);
+    }
+
+    /**
+     * Get locations string with links
+     * @param $aLocation location array
+     * @return string with links to country and city
+     */
+    public function locationsStringFromArray($aLocation, $bHTML = true, $aParams = array())
     {
         $s = '';
-        bx_import('BxDolForm');
         $aCountries = BxDolFormQuery::getDataItems('Country');
-        $aLocation = $this->locationGet($iId);
+
         if(!$aLocation || !$aLocation['country'] || !isset($aCountries[$aLocation['country']])) {
             if (!empty($aLocation['lat']) || !empty($aLocation['lng']))
                 $s = _t('_sys_location_country', $aLocation['lat'] . ', ' . $aLocation['lng']);

+ 0 - 0
template/form_field_location_google.html → template/location_field_google.html


+ 0 - 0
template/form_field_location_plain_auto.html → template/location_field_plain_auto.html