From ef904c9083bb2ffb5279cde40448df9a1c5c557a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Gaillard?= Date: Mon, 14 Jan 2013 12:08:12 +0100 Subject: [PATCH] [-] BO: Fix #PSCFV-5930 #PSCFV-5939 the filters are handled as the same between tabs which can cause sql errors --- classes/controller/AdminController.php | 37 +++++++++----------------- classes/helper/HelperList.php | 9 ++++--- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index 78bb412a2..3c03a518b 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -419,41 +419,28 @@ class AdminControllerCore extends Controller */ public function processFilter() { + $prefix = str_replace(array('admin', 'controller'), '', Tools::strtolower(get_class($this))); // Filter memorization if (isset($_POST) && !empty($_POST) && isset($this->table)) foreach ($_POST as $key => $value) { - if (is_array($this->table)) - { - foreach ($this->table as $table) - if (stripos($key, $table.'Filter_') === 0 || stripos($key, 'submitFilter') === 0) - $this->context->cookie->$key = !is_array($value) ? $value : serialize($value); - } - elseif (stripos($key, $this->table.'Filter_') === 0 || stripos($key, 'submitFilter') === 0) + if (stripos($key, $this->table.'Filter_') === 0) + $this->context->cookie->{$prefix.$key} = !is_array($value) ? $value : serialize($value); + elseif(stripos($key, 'submitFilter') === 0) $this->context->cookie->$key = !is_array($value) ? $value : serialize($value); } if (isset($_GET) && !empty($_GET) && isset($this->table)) foreach ($_GET as $key => $value) - { - if (is_array($this->table)) - { - foreach ($this->table as $table) - if (stripos($key, $table.'OrderBy') === 0 || stripos($key, $table.'Orderway') === 0) - $this->context->cookie->$key = $value; - } - elseif (stripos($key, $this->table.'OrderBy') === 0 || stripos($key, $this->table.'Orderway') === 0) + if (stripos($key, $this->table.'OrderBy') === 0 || stripos($key, $this->table.'Orderway') === 0) $this->context->cookie->$key = $value; - } - - $filters = $this->context->cookie->getFamily($this->table.'Filter_'); - + $filters = $this->context->cookie->getFamily($prefix.$this->table.'Filter_'); foreach ($filters as $key => $value) { /* Extracting filters from $_POST on key filter_ */ - if ($value != null && !strncmp($key, $this->table.'Filter_', 7 + Tools::strlen($this->table))) + if ($value != null && !strncmp($key, $prefix.$this->table.'Filter_', 7 + Tools::strlen($prefix.$this->table))) { - $key = Tools::substr($key, 7 + Tools::strlen($this->table)); + $key = Tools::substr($key, 7 + Tools::strlen($prefix.$this->table)); /* Table alias could be specified using a ! eg. alias!field */ $tmp_tab = explode('!', $key); $filter = count($tmp_tab) > 1 ? $tmp_tab[1] : $tmp_tab[0]; @@ -835,11 +822,12 @@ class AdminControllerCore extends Controller */ public function processResetFilters() { - $filters = $this->context->cookie->getFamily($this->table.'Filter_'); + $prefix = str_replace(array('admin', 'controller'), '', Tools::strtolower(get_class($this))); + $filters = $this->context->cookie->getFamily($prefix.$this->table.'Filter_'); foreach ($filters as $cookie_key => $filter) - if (strncmp($cookie_key, $this->table.'Filter_', 7 + Tools::strlen($this->table)) == 0) + if (strncmp($cookie_key, $prefix.$this->table.'Filter_', 7 + Tools::strlen($prefix.$this->table)) == 0) { - $key = substr($cookie_key, 7 + Tools::strlen($this->table)); + $key = substr($cookie_key, 7 + Tools::strlen($prefix.$this->table)); /* Table alias could be specified using a ! eg. alias!field */ $tmp_tab = explode('!', $key); $key = (count($tmp_tab) > 1 ? $tmp_tab[1] : $tmp_tab[0]); @@ -1592,6 +1580,7 @@ class AdminControllerCore extends Controller $helper->multiple_fieldsets = $this->multiple_fieldsets; $helper->row_hover = $this->row_hover; $helper->position_identifier = $this->position_identifier; + $helper->controller_name = $this->controller_name; // For each action, try to add the corresponding skip elements list $helper->list_skip_actions = $this->list_skip_actions; diff --git a/classes/helper/HelperList.php b/classes/helper/HelperList.php index f0f206606..142fd1214 100644 --- a/classes/helper/HelperList.php +++ b/classes/helper/HelperList.php @@ -530,11 +530,12 @@ class HelperListCore extends Helper if ($this->position_identifier && ($this->orderBy == 'position' && $this->orderWay != 'DESC')) $table_dnd = true; + $prefix = str_replace(array('admin', 'controller'), '', Tools::strtolower($this->controller_name)); foreach ($this->fields_list as $key => $params) { if (!isset($params['type'])) $params['type'] = 'text'; - $value = Context::getContext()->cookie->{$this->table.'Filter_'.(array_key_exists('filter_key', $params) ? $params['filter_key'] : $key)}; + $value = Context::getContext()->cookie->{$prefix.$this->table.'Filter_'.(array_key_exists('filter_key', $params) ? $params['filter_key'] : $key)}; switch ($params['type']) { case 'bool': @@ -558,9 +559,9 @@ class HelperListCore extends Helper case 'select': foreach ($params['list'] as $option_value => $option_display) { - if (isset(Context::getContext()->cookie->{$this->table.'Filter_'.$params['filter_key']}) - && Context::getContext()->cookie->{$this->table.'Filter_'.$params['filter_key']} == $option_value - && Context::getContext()->cookie->{$this->table.'Filter_'.$params['filter_key']} != '') + if (isset(Context::getContext()->cookie->{$prefix.$this->table.'Filter_'.$params['filter_key']}) + && Context::getContext()->cookie->{$prefix.$this->table.'Filter_'.$params['filter_key']} == $option_value + && Context::getContext()->cookie->{$prefix.$this->table.'Filter_'.$params['filter_key']} != '') $this->fields_list[$key]['select'][$option_value]['selected'] = 'selected'; } break;