From 9b7de01180621ad058c52afbaf4a69d4b5f2eebb Mon Sep 17 00:00:00 2001 From: zzuutt Date: Thu, 8 Oct 2020 13:59:20 +0200 Subject: [PATCH] Fix issue #2516 loop search_in param doesn't work (#2776) * fix issue #2516 fix issue #2516 takes into account the parameter "search_in". * Improve PR - Improve efficiency with in_array instead of foreach in foreach - Add missing php doc - Fix when `$search->_or();` was added even on first search * Fix missing function Co-authored-by: Vincent Lopes-Vicente --- .../Element/StandardI18nFieldsSearchTrait.php | 21 ++++++++++++------- core/lib/Thelia/Core/Template/Loop/Brand.php | 2 +- .../Thelia/Core/Template/Loop/Category.php | 2 +- .../lib/Thelia/Core/Template/Loop/Content.php | 2 +- core/lib/Thelia/Core/Template/Loop/Folder.php | 3 +-- .../lib/Thelia/Core/Template/Loop/Product.php | 2 +- core/lib/Thelia/Core/Template/Loop/Sale.php | 2 +- 7 files changed, 20 insertions(+), 14 deletions(-) diff --git a/core/lib/Thelia/Core/Template/Element/StandardI18nFieldsSearchTrait.php b/core/lib/Thelia/Core/Template/Element/StandardI18nFieldsSearchTrait.php index a585bd374f..be459df3aa 100644 --- a/core/lib/Thelia/Core/Template/Element/StandardI18nFieldsSearchTrait.php +++ b/core/lib/Thelia/Core/Template/Element/StandardI18nFieldsSearchTrait.php @@ -25,25 +25,32 @@ trait StandardI18nFieldsSearchTrait "description", "postscriptum" ]; - + protected function getStandardI18nSearchFields() - { - return self::$standardI18nSearchFields; + { + return self::$standardI18nSearchFields; } - /** + /** * @param ModelCriteria $search * @param $searchTerm * @param $searchCriteria + * @param string[] $searchIn */ - protected function addStandardI18nSearch(&$search, $searchTerm, $searchCriteria) + protected function addStandardI18nSearch(&$search, $searchTerm, $searchCriteria, $searchIn = [ "title", "chapo", "description", "postscriptum" ]) { - foreach (self::$standardI18nSearchFields as $index => $searchInElement) { - if ($index > 0) { + $firstSearch = true; + foreach (self::$standardI18nSearchFields as $searchInElement) { + if (!in_array($searchInElement, $searchIn, true)) { + continue; + } + + if (!$firstSearch) { $search->_or(); } $this->addSearchInI18nColumn($search, strtoupper($searchInElement), $searchCriteria, $searchTerm); + $firstSearch = false; } } } diff --git a/core/lib/Thelia/Core/Template/Loop/Brand.php b/core/lib/Thelia/Core/Template/Loop/Brand.php index 8e6567e464..c1bf60ee3a 100644 --- a/core/lib/Thelia/Core/Template/Loop/Brand.php +++ b/core/lib/Thelia/Core/Template/Loop/Brand.php @@ -108,7 +108,7 @@ public function doSearch(&$search, $searchTerm, $searchIn, $searchCriteria) { $search->_and(); - $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria); + $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria, $searchIn); } public function buildModelCriteria() diff --git a/core/lib/Thelia/Core/Template/Loop/Category.php b/core/lib/Thelia/Core/Template/Loop/Category.php index 87838ee9bb..6107a4de47 100644 --- a/core/lib/Thelia/Core/Template/Loop/Category.php +++ b/core/lib/Thelia/Core/Template/Loop/Category.php @@ -126,7 +126,7 @@ public function doSearch(&$search, $searchTerm, $searchIn, $searchCriteria) { $search->_and(); - $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria); + $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria, $searchIn); } public function buildModelCriteria() diff --git a/core/lib/Thelia/Core/Template/Loop/Content.php b/core/lib/Thelia/Core/Template/Loop/Content.php index 88c3f4dafb..d30e8c892a 100644 --- a/core/lib/Thelia/Core/Template/Loop/Content.php +++ b/core/lib/Thelia/Core/Template/Loop/Content.php @@ -117,7 +117,7 @@ public function doSearch(&$search, $searchTerm, $searchIn, $searchCriteria) { $search->_and(); - $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria); + $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria, $searchIn); } public function buildModelCriteria() diff --git a/core/lib/Thelia/Core/Template/Loop/Folder.php b/core/lib/Thelia/Core/Template/Loop/Folder.php index f58e53277c..3f5a730fe7 100644 --- a/core/lib/Thelia/Core/Template/Loop/Folder.php +++ b/core/lib/Thelia/Core/Template/Loop/Folder.php @@ -109,8 +109,7 @@ public function getSearchIn() public function doSearch(&$search, $searchTerm, $searchIn, $searchCriteria) { $search->_and(); - - $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria); + $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria, $searchIn); } public function buildModelCriteria() diff --git a/core/lib/Thelia/Core/Template/Loop/Product.php b/core/lib/Thelia/Core/Template/Loop/Product.php index 5d0393d252..e7c23255cf 100644 --- a/core/lib/Thelia/Core/Template/Loop/Product.php +++ b/core/lib/Thelia/Core/Template/Loop/Product.php @@ -211,7 +211,7 @@ public function doSearch(&$search, $searchTerm, $searchIn, $searchCriteria) } } - $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria); + $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria, $searchIn); } /** diff --git a/core/lib/Thelia/Core/Template/Loop/Sale.php b/core/lib/Thelia/Core/Template/Loop/Sale.php index e01113293b..c596f2bbf7 100644 --- a/core/lib/Thelia/Core/Template/Loop/Sale.php +++ b/core/lib/Thelia/Core/Template/Loop/Sale.php @@ -119,7 +119,7 @@ public function doSearch(&$search, $searchTerm, $searchIn, $searchCriteria) } } - $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria); + $this->addStandardI18nSearch($search, $searchTerm, $searchCriteria, $searchIn); } public function buildModelCriteria()