diff --git a/e107_handlers/admin_ui.php b/e107_handlers/admin_ui.php index be673edc1..e3b09a2d5 100755 --- a/e107_handlers/admin_ui.php +++ b/e107_handlers/admin_ui.php @@ -2786,6 +2786,19 @@ class e_admin_controller_ui extends e_admin_controller */ protected $filterQry; + /** + * Custom sorting of the filter list. + * @var array + */ + protected $filterSort = array(); + + + /** + * Custom sorting of the batch list. + * @var array + */ + protected $batchSort = array(); + /** * @var boolean */ @@ -2939,6 +2952,21 @@ class e_admin_controller_ui extends e_admin_controller return $this->eventName; } + /** + * @return array + */ + public function getFilterSort() + { + return $this->filterSort; + } + + /** + * @return array + */ + public function getBatchSort() + { + return $this->batchSort; + } /** * @return string @@ -6152,6 +6180,16 @@ class e_admin_ui extends e_admin_controller_ui $this->getTreeModel()->setMessages(); } + protected function handleGridSearchfieldFilter($selected) + { + return $this->handleListSearchfieldFilter($selected); + } + + protected function handleGridDeleteBatch($selected) + { + return $this->handleListDeleteBatch($selected); + } + /** * Method to generate "Search in Field" query. @@ -8182,6 +8220,25 @@ class e_admin_form_ui extends e_form return $text; } + private function sortFieldsByPriority(array $fields, array $priorityKeys) + { + // Separate fields into priority and non-priority arrays + $priorityFields = []; + $remainingFields = $fields; + + foreach ($priorityKeys as $key) + { + // If the key exists in the fields array, move it to the priorityFields array + if (isset($fields[$key])) + { + $priorityFields[$key] = $fields[$key]; + unset($remainingFields[$key]); // Remove from remaining fields + } + } + + // Merge priorityFields at the top with remainingFields retaining their original order + return $priorityFields + $remainingFields; + } /** * Render Batch and Filter Dropdown options. @@ -8192,16 +8249,22 @@ class e_admin_form_ui extends e_form public function renderBatchFilter($type='batch', $selected = '') // Common function used for both batches and filters. { $optdiz = array('batch' => LAN_BATCH_LABEL_PREFIX.' ', 'filter'=> LAN_FILTER_LABEL_PREFIX.' '); - $table = $this->getController()->getTableName(); + $obj = $this->getController(); + $table = $obj->getTableName(); $text = ''; $textsingle = ''; $searchFieldOpts = array(); - $fieldList = $this->getController()->getFields(); - + $fieldList = $obj->getFields(); + $fieldSort = ($type ==='batch') ? $obj->getBatchSort() : $obj->getFilterSort(); + if(!empty($fieldSort)) + { + e107::getMessage()->addDebug("Filtering by custom sort field: ".print_r($fieldSort,true)); + $fieldList = $this->sortFieldsByPriority($fieldList, $fieldSort); + } foreach($fieldList as $key=>$val) { @@ -8603,6 +8666,7 @@ class e_admin_form_ui extends e_form if(!empty($option)) { $text .= "\t".$this->optgroup_open($optdiz[$type].defset($val['title'], $val['title']), varset($disabled))."\n"; + foreach($option as $okey=>$oval) { $text .= $this->option($oval, $okey, $selected == $okey)."\n"; @@ -8611,22 +8675,23 @@ class e_admin_form_ui extends e_form } } + $text2 = ''; if(!empty($searchFieldOpts) && $type !== 'batch') { - $text .= "\t".$this->optgroup_open(defset('LAN_UI_FILTER_SEARCH_IN_FIELD', 'Search in Field'))."\n"; + $text2 .= "\t".$this->optgroup_open(defset('LAN_UI_FILTER_SEARCH_IN_FIELD', 'Search in Field'))."\n"; foreach($searchFieldOpts as $key=>$val) { - $text .= $this->option($val, $key, $selected == $key)."\n"; + $text2 .= $this->option($val, $key, $selected == $key)."\n"; } - $text .= "\t".$this->optgroup_close()."\n"; + $text2 .= "\t".$this->optgroup_close()."\n"; } - return $textsingle.$text; + return $textsingle.$text2.$text; } diff --git a/e107_handlers/e_pluginbuilder_class.php b/e107_handlers/e_pluginbuilder_class.php index 283e650a9..4763c9cdc 100644 --- a/e107_handlers/e_pluginbuilder_class.php +++ b/e107_handlers/e_pluginbuilder_class.php @@ -2010,7 +2010,11 @@ class " . $table . " extends e_admin_ui protected \$fields = " . $FIELDS . "; protected \$fieldpref = array(" . implode(", ", $FIELDPREF) . "); - + + // protected \$filterSort = ['field_key_5', 'field_key_7']; // Display these fields first in the filter drop-down. + + // protected \$batchSort = ['field_key_5', 'field_key_7'];; // Display these fields first in the batch drop-down. + ";