Explorar o código

#3149 - Sorting for adv search more - fix

RomanL %!s(int64=4) %!d(string=hai) anos
pai
achega
203b1fbf9e

+ 14 - 15
inc/classes/BxDolSearchExtendedQuery.php

@@ -32,26 +32,25 @@ class BxDolSearchExtendedQuery extends BxDolDb
     static public function getSearchSortableFields($aObject)
     {
         $oDb = BxDolDb::getInstance();
-        
         $sQueryFields = "SELECT * FROM `sys_search_extended_sorting_fields` WHERE `object` = :object ORDER BY `order`";
         $aQueryFieldsBindings = array('object' => $aObject['object']);
         $aFields = $oDb->getAll($sQueryFields, $aQueryFieldsBindings);
-
         //--- Get fields
         if(empty($aFields) || !is_array($aFields)) {
-        
-            $aFields = BxDolContentInfo::getObjectInstance($aObject['object_content_info'])->getSortableFieldsExtended();
-            $iOrder = 0;
-            foreach($aFields as $sField => $aField) {
-                $bResult = (int)$oDb->query("INSERT INTO `sys_search_extended_sorting_fields`(`object`, `name`, `direction`, `caption`, `active`, `order`) VALUES(:object, :name, :direction, :caption, :active, :order)", array(
-                        'object' => $aObject['object'], 
-                        'name' => $aField['name'],
-                        'direction' => $aField['direction'],
-                        'caption' => isset($aField['caption']) ? $aField['caption'] : 'none',
-                        'active' => 1,
-                        'order' => $iOrder++
-                    )) > 0;
-            }
+            $mFields = BxDolContentInfo::getObjectInstance($aObject['object_content_info'])->getSortableFieldsExtended();
+            if (!empty($mFields)){
+                $iOrder = 0;
+                foreach($mFields as $sField => $aField) {
+                    $bResult = (int)$oDb->query("INSERT INTO `sys_search_extended_sorting_fields`(`object`, `name`, `direction`, `caption`, `active`, `order`) VALUES(:object, :name, :direction, :caption, :active, :order)", array(
+                            'object' => $aObject['object'], 
+                            'name' => $aField['name'],
+                            'direction' => $aField['direction'],
+                            'caption' => isset($aField['caption']) ? $aField['caption'] : 'none',
+                            'active' => 1,
+                            'order' => $iOrder++
+                        )) > 0;
+                }
+            }    
         }
         return $aFields;
     }

+ 1 - 1
modules/boonex/shopify/install/sql/enable.sql

@@ -380,7 +380,7 @@ INSERT INTO `sys_objects_metatags` (`object`, `module`, `table_keywords`, `table
 
 -- CATEGORY
 INSERT INTO `sys_objects_category` (`object`, `module`, `search_object`, `form_object`, `list_name`, `table`, `field`, `join`, `where`, `override_class_name`, `override_class_file`) VALUES
-('bx_shopify_cats', 'bx_shopify', 'bx_shopify' , 'bx_shopify', 'bx_shopify_cats', 'bx_shopify_entries', 'cat', 'INNER JOIN `sys_profiles` ON (`sys_profiles`.`id` = `bx_shopify_entries`.`author`)', 'AND `sys_profiles`.`status` = ''active''', '', '');
+('bx_shopify_cats', 'bx_shopify', 'bx_shopify', 'bx_shopify', 'bx_shopify_cats', 'bx_shopify_entries', 'cat', 'INNER JOIN `sys_profiles` ON (`sys_profiles`.`id` = `bx_shopify_entries`.`author`)', 'AND `sys_profiles`.`status` = ''active''', '', '');
 
 
 -- STATS

+ 84 - 0
studio/js/forms_sortable_fields.js

@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaStudio UNA Studio
+ * @{
+ */
+function BxDolStudioFormsSearchFields(oOptions) {
+	this.sActionsUrl = oOptions.sActionUrl;
+	this.sPageUrl = oOptions.sPageUrl;
+	this.sObjNameGrid = oOptions.sObjNameGrid;
+    this.sObjName = oOptions.sObjName == undefined ? 'oBxDolStudioFormsSearchFields' : oOptions.sObjName;
+    this.sAnimationEffect = oOptions.sAnimationEffect == undefined ? 'fade' : oOptions.sAnimationEffect;
+    this.iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
+    this.sParamsDivider = oOptions.sParamsDivider == undefined ? '#-#' : oOptions.sParamsDivider;
+
+    this.sTextSearchInput = oOptions.sTextSearchInput == undefined ? '' : oOptions.sTextSearchInput;
+}
+
+BxDolStudioFormsSearchFields.prototype.onChangeModule = function() {
+	var $this = this;
+	var oDate = new Date();
+	var sModule = $('#bx-grid-module-' + this.sObjNameGrid).val();
+
+	this.reloadGrid();
+
+	bx_loading($('body'), true);
+
+	$.post(
+		this.sPageUrl,
+		{
+			form_action: 'get_search_forms',
+			form_module: sModule,
+			_t: oDate.getTime()
+		},
+		function(oData) {
+			bx_loading($('body'), false);
+
+			if(oData.code != 0) {
+				bx_alert(oData.message);
+				return;
+			}
+
+			$('#' + $(oData.content).attr('id')).replaceWith(oData.content);
+		},
+		'json'
+	);
+};
+
+BxDolStudioFormsSearchFields.prototype.onChangeForm = function() {
+	this.reloadGrid($('#bx-grid-module-' + this.sObjNameGrid).val(), $('#bx-grid-form-' + this.sObjNameGrid).val());
+};
+
+BxDolStudioFormsSearchFields.prototype.reloadGrid = function(sModule, sObject) {
+	var bReload = false;
+
+	if(!sModule) 
+		sObject = '';
+
+	var oSearch = $('#bx-form-element-keyword');
+	var oActions = $("[bx_grid_action_independent]");
+	if(!sObject) {
+		oSearch.hide();
+		oActions.addClass('bx-btn-disabled');
+	}
+	else {
+		oSearch.show();
+		oActions.removeClass('bx-btn-disabled');
+	}
+
+	if(glGrids[this.sObjNameGrid]._oQueryAppend['module'] != sModule) {
+		glGrids[this.sObjNameGrid]._oQueryAppend['module'] = sModule;
+		bReload = true;
+	}
+
+	if(glGrids[this.sObjNameGrid]._oQueryAppend['form'] != sObject) {
+		glGrids[this.sObjNameGrid]._oQueryAppend['form'] = sObject;
+		bReload = true;
+	}
+	if(bReload)
+		glGrids[this.sObjNameGrid].reload(0);
+};
+
+/** @} */

+ 14 - 0
studio/template/scripts/BxBaseStudioForms.php

@@ -116,6 +116,15 @@ class BxBaseStudioForms extends BxDolStudioForms
         $sModule = bx_process_input($sModule);
         return array('code' => 0, 'message' => '', 'content' => $this->getSearchFieldsObject()->getFormsSelector($sModule));
     }
+    
+    function actionGetSearchSortableForms()
+    {
+        if(($sModule = bx_get('form_module')) === false)
+            return array('code' => 2, 'message' => _t('_adm_form_err_missing_params'));
+
+        $sModule = bx_process_input($sModule);
+        return array('code' => 0, 'message' => '', 'content' => $this->getSearchSortableFieldsObject()->getFormsSelector($sModule));
+    }
 
     function actionGetLabels()
     {
@@ -195,6 +204,11 @@ class BxBaseStudioForms extends BxDolStudioForms
     {
         return $this->getGridObject($this->aGridObjects['search_fields']);
     }
+    
+    protected function getSearchSortableFieldsObject()
+    {
+        return $this->getGridObject($this->aGridObjects['search_sortable_fields']);
+    }
 
     protected function getLabels()
     {