From 3019b2e06ef9bd883e295af1cad1085bf2ca7cac Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 15 Feb 2024 20:21:46 +0530 Subject: [PATCH] Use new fields list keys --- .../orders/helpers/list/list_header.tpl | 71 +++++++++++-------- classes/controller/AdminController.php | 18 +++-- classes/helper/HelperList.php | 22 +++--- controllers/admin/AdminOrdersController.php | 6 +- 4 files changed, 71 insertions(+), 46 deletions(-) diff --git a/admin/themes/default/template/controllers/orders/helpers/list/list_header.tpl b/admin/themes/default/template/controllers/orders/helpers/list/list_header.tpl index e81a8cbeb..edfb1b68d 100644 --- a/admin/themes/default/template/controllers/orders/helpers/list/list_header.tpl +++ b/admin/themes/default/template/controllers/orders/helpers/list/list_header.tpl @@ -136,21 +136,23 @@ {/if} - {else if $params.type == 'select'} - - {$params['title']|escape:'html':'UTF-8'}: {$params['list'][$params['value']]|escape:'html':'UTF-8'} - - - {else if $params.type == 'select_multiple_or'} - - {$params['title']|escape:'html':'UTF-8'}: - - {foreach from=$params.value item=option name=foreachInfo} - {$params.list[$option]}{if !$smarty.foreach.foreachInfo.last} | {/if} - {/foreach} + {elseif $params.type == 'select'} + {if isset($params.multiple) && $params.multiple} + + {$params['title']|escape:'html':'UTF-8'}: + + {foreach from=$params.value item=option name=foreachInfo} + {$params.list[$option]}{if !$smarty.foreach.foreachInfo.last}{if $params.operator == 'or'} | {else}, {/if}{/if} + {/foreach} + + - - + {else} + + {$params['title']|escape:'html':'UTF-8'}: {$params['list'][$params['value']]|replace: ' ' : ''} + + + {/if} {else} {$params['title']|escape:'html':'UTF-8'}: {$params['value']|escape:'html':'UTF-8'} @@ -176,7 +178,7 @@ - {else if $params.type == 'bool'} + {elseif $params.type == 'bool'} - + {if isset($params.multiple) && $params.multiple} + - {/if} - {elseif $params.type == 'select_multiple_or'} - + + {if isset($params.list) && is_array($params.list)} + {foreach $params.list AS $option_value => $option_display} + + {/foreach} + {/if} + {/if} - + {/if} {else} {/if} @@ -314,7 +318,7 @@ $('#list_filters_panel').find('[name*="'+$(this).parent().data('filter_key')+'"]').val(''); } else if (type == 'range') { $('#list_filters_panel').find('[name*="orderFilter_'+$(this).parent().data('filter_key')+'"]').val(''); - } else if (type == 'select' || type == 'select_multiple_or') { + } else if (type == 'select') { $('#list_filters_panel').find('select[name*="orderFilter_'+$(this).parent().data('filter_key')+'"] option:selected').prop('selected', false); } else { $('#list_filters_panel').find('input[name="orderFilter_'+$(this).parent().data('filter_key')+'"]').val(''); @@ -329,6 +333,17 @@ form.submit(); }); + + $('#form-order').submit(function () { + let form = $(this); + $(form).find('select[multiple]').each(function (i, selectElement) { + if ($(selectElement).val() == null) { + $(form).append(''); + } + }); + + return true; + }); }); function updateRoomTypeFilter() { diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index 00f54f28e..2d89a07ba 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -875,7 +875,9 @@ class AdminControllerCore extends Controller if ($field = $this->filterToField($key, $filter)) { $type = (array_key_exists('filter_type', $field) ? $field['filter_type'] : (array_key_exists('type', $field) ? $field['type'] : false)); - if ((in_array($type, array('date', 'datetime', 'range', 'select_multiple_and', 'select_multiple_or'))) && is_string($value)) { + if ((($type == 'date' || $type == 'datetime' || $type == 'range') || ($type == 'select' && (isset($field['multiple']) && $field['multiple']))) + && is_string($value) + ) { $value = json_decode($value, true); } $key = isset($tmp_tab[1]) ? $tmp_tab[0].'.`'.$tmp_tab[1].'`' : '`'.$tmp_tab[0].'`'; @@ -893,13 +895,15 @@ class AdminControllerCore extends Controller } else { $sql_filter = & $this->_filter; } - /* Only for date filtering (from, to) */ + if (is_array($value)) { - if ($type == 'select_multiple_and') { - $sql_filter .= ' AND '.pSQL($key).' IN ('.pSQL(implode(',', $value)).')'; - $this->_filterHaving .= ' AND COUNT(DISTINCT '.pSQL($key).') = '.(int) count($value); - } elseif ($type == 'select_multiple_or') { - $sql_filter .= ' AND '.pSQL($key).' IN ('.pSQL(implode(',', $value)).')'; + if ($type == 'select' && (isset($field['multiple']) && $field['multiple']) && isset($field['operator'])) { + if ($field['operator'] == 'and') { + $sql_filter .= ' AND '.pSQL($key).' IN ('.pSQL(implode(',', $value)).')'; + $this->_filterHaving .= ' AND COUNT(DISTINCT '.pSQL($key).') = '.(int) count($value); + } elseif ($field['operator'] == 'or') { + $sql_filter .= ' AND '.pSQL($key).' IN ('.pSQL(implode(',', $value)).')'; + } } elseif ($type == 'range') { if (isset($value[0]) && !empty($value[0])) { if (!Validate::isUnsignedInt($value[0])) { diff --git a/classes/helper/HelperList.php b/classes/helper/HelperList.php index c1f944ff3..306d6c1c3 100644 --- a/classes/helper/HelperList.php +++ b/classes/helper/HelperList.php @@ -672,20 +672,22 @@ class HelperListCore extends Helper break; case 'select': - foreach ($params['list'] as $option_value => $option_display) { - if (isset(Context::getContext()->cookie->{$prefix.$this->list_id.'Filter_'.$params['filter_key']}) - && Context::getContext()->cookie->{$prefix.$this->list_id.'Filter_'.$params['filter_key']} == $option_value - && Context::getContext()->cookie->{$prefix.$this->list_id.'Filter_'.$params['filter_key']} != '') { - $this->fields_list[$key]['select'][$option_value]['selected'] = 'selected'; + if (isset($params['multiple']) && $params['multiple']) { + if (!isset($params['operator'])) { + $params['operator'] = 'or'; + } + $value = json_decode($value, true); + } else { + foreach ($params['list'] as $option_value => $option_display) { + if (isset(Context::getContext()->cookie->{$prefix.$this->list_id.'Filter_'.$params['filter_key']}) + && Context::getContext()->cookie->{$prefix.$this->list_id.'Filter_'.$params['filter_key']} == $option_value + && Context::getContext()->cookie->{$prefix.$this->list_id.'Filter_'.$params['filter_key']} != '') { + $this->fields_list[$key]['select'][$option_value]['selected'] = 'selected'; + } } } break; - case 'select_multiple_and': - case 'select_multiple_or': - $value = json_decode($value, true); - break; - case 'text': if (!Validate::isCleanHtml($value)) { $value = ''; diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index f6bde0780..e57662606 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -248,7 +248,9 @@ class AdminOrdersControllerCore extends AdminController ), 'osname' => array( 'title' => $this->l('Status'), - 'type' => 'select_multiple_or', + 'type' => 'select', + 'multiple' => true, + 'operator' => 'or', 'color' => 'color', 'list' => $this->statuses_array, 'filter_key' => 'os!id_order_state', @@ -573,6 +575,8 @@ class AdminOrdersControllerCore extends AdminController $this->tpl_list_vars['POST'] = $_POST; } + $this->tpl_list_vars['title'] = $this->l('Orders'); + return parent::renderList(); }