diff --git a/src/module-elasticsuite-catalog-optimizer/Model/Optimizer/Limitation/ReadHandler.php b/src/module-elasticsuite-catalog-optimizer/Model/Optimizer/Limitation/ReadHandler.php
index 0e217f14b..af27a2d65 100644
--- a/src/module-elasticsuite-catalog-optimizer/Model/Optimizer/Limitation/ReadHandler.php
+++ b/src/module-elasticsuite-catalog-optimizer/Model/Optimizer/Limitation/ReadHandler.php
@@ -64,10 +64,10 @@ public function execute($entity, $arguments = [])
*/
private function setCategoryLimitation($entity, $searchContainers)
{
- $applyTo = (bool) ($searchContainers['catalog_view_container'] ?? false);
+ $applyTo = ((int) $searchContainers['catalog_view_container'] ?? 0);
if ($applyTo) {
- $containerData = ['apply_to' => (int) true];
+ $containerData = ['apply_to' => $applyTo];
$categoryIds = $this->resource->getCategoryIdsByOptimizer($entity);
if (!empty($categoryIds)) {
$containerData['category_ids'] = $categoryIds;
diff --git a/src/module-elasticsuite-catalog-optimizer/Model/Optimizer/Preview.php b/src/module-elasticsuite-catalog-optimizer/Model/Optimizer/Preview.php
index c70d0a9cb..27decb7b8 100644
--- a/src/module-elasticsuite-catalog-optimizer/Model/Optimizer/Preview.php
+++ b/src/module-elasticsuite-catalog-optimizer/Model/Optimizer/Preview.php
@@ -204,9 +204,14 @@ private function canApply() : bool
}
} elseif ($canApply && $this->containerConfiguration->getName() === 'catalog_view_container') {
$config = $this->optimizer->getCatalogViewContainer();
- if ((int) ($config['apply_to'] ?? 0) === 1 && !empty($config['category_ids'])) {
+ $applyTo = (int) $config['apply_to'] ?? 0;
+ if (($applyTo > 0) && !empty($config['category_ids'])) {
$categoryIds = array_filter($config['category_ids']);
$canApply = in_array($this->category->getId(), $categoryIds, true);
+
+ if ($applyTo > 1) {
+ $canApply = !$canApply;
+ }
}
}
diff --git a/src/module-elasticsuite-catalog-optimizer/Model/ResourceModel/Optimizer.php b/src/module-elasticsuite-catalog-optimizer/Model/ResourceModel/Optimizer.php
index 0556580e7..b15be3896 100644
--- a/src/module-elasticsuite-catalog-optimizer/Model/ResourceModel/Optimizer.php
+++ b/src/module-elasticsuite-catalog-optimizer/Model/ResourceModel/Optimizer.php
@@ -159,7 +159,7 @@ private function saveSearchContainerRelation(\Magento\Framework\Model\AbstractMo
$searchContainerName = 'quick_search_container';
}
$searchContainerData = $object->getData($searchContainerName);
- $applyTo = is_array($searchContainerData) ? ((bool) $searchContainerData['apply_to'] ?? false) : false;
+ $applyTo = is_array($searchContainerData) ? ($searchContainerData['apply_to'] ?? 0) : 0;
$searchContainerLinks[(string) $searchContainer] = [
OptimizerInterface::OPTIMIZER_ID => (int) $object->getId(),
OptimizerInterface::SEARCH_CONTAINER => (string) $searchContainer,
diff --git a/src/module-elasticsuite-catalog-optimizer/Model/ResourceModel/Optimizer/Limitation.php b/src/module-elasticsuite-catalog-optimizer/Model/ResourceModel/Optimizer/Limitation.php
index 2fb2eb2c3..5655155ef 100644
--- a/src/module-elasticsuite-catalog-optimizer/Model/ResourceModel/Optimizer/Limitation.php
+++ b/src/module-elasticsuite-catalog-optimizer/Model/ResourceModel/Optimizer/Limitation.php
@@ -162,7 +162,8 @@ private function getApplicationData($container, $column, $idValue)
->where($this->getConnection()->quoteInto("osc.search_container = ?", (string) $container))
->where(
$this->getConnection()->quoteInto(
- "osc.apply_to = 0 OR (osc.apply_to = 1 AND main_table.{$column} = ?)",
+ "osc.apply_to = 0 OR (osc.apply_to = 1 AND main_table.{$column} = ?) OR
+ (osc.apply_to = 2 AND main_table.{$column} != ?)",
(int) $idValue
)
)
diff --git a/src/module-elasticsuite-catalog-optimizer/Ui/Component/Optimizer/Form/Modifier/Limitation.php b/src/module-elasticsuite-catalog-optimizer/Ui/Component/Optimizer/Form/Modifier/Limitation.php
index cebb431fa..6af32a2f8 100644
--- a/src/module-elasticsuite-catalog-optimizer/Ui/Component/Optimizer/Form/Modifier/Limitation.php
+++ b/src/module-elasticsuite-catalog-optimizer/Ui/Component/Optimizer/Form/Modifier/Limitation.php
@@ -59,9 +59,9 @@ public function modifyData(array $data)
$data[$optimizer->getId()]['search_container'] = array_keys($searchContainers);
- $applyToCategories = (bool) ($searchContainers['catalog_view_container'] ?? false);
+ $applyToCategories = (int) ($searchContainers['catalog_view_container'] ?? 0);
if ($applyToCategories) {
- $containerData = ['apply_to' => (int) true];
+ $containerData = ['apply_to' => $applyToCategories];
$categoryIds = $this->resource->getCategoryIdsByOptimizer($optimizer);
if (!empty($categoryIds)) {
$containerData['category_ids'] = $categoryIds;
diff --git a/src/module-elasticsuite-catalog-optimizer/i18n/en_US.csv b/src/module-elasticsuite-catalog-optimizer/i18n/en_US.csv
index c0ec104a1..f4969c714 100644
--- a/src/module-elasticsuite-catalog-optimizer/i18n/en_US.csv
+++ b/src/module-elasticsuite-catalog-optimizer/i18n/en_US.csv
@@ -52,8 +52,9 @@ Actions,Actions
Cancel,Cancel
"Add Selected Terms","Add Selected Terms"
"Category Product View","Category Product View"
-"All Categories","All Categories"
+"All Categories","All categories"
"Selected categories","Selected categories"
+"All except selected categories","All except selected categories"
"Apply to categories","Apply to categories"
Configuration,Configuration
"Boost value (%)","Boost value (%)"
diff --git a/src/module-elasticsuite-catalog-optimizer/i18n/fr_FR.csv b/src/module-elasticsuite-catalog-optimizer/i18n/fr_FR.csv
index c16b9e8d3..5c7511b56 100644
--- a/src/module-elasticsuite-catalog-optimizer/i18n/fr_FR.csv
+++ b/src/module-elasticsuite-catalog-optimizer/i18n/fr_FR.csv
@@ -54,6 +54,7 @@ Cancel,Annuler
"Category Product View","Navigation Catalogue"
"All Categories","Toutes les catégories"
"Selected categories","Catégories sélectionnées"
+"All except selected categories","Toutes les catégories sauf celles sélectionnées"
"Apply to categories","Appliquer aux catégories"
Configuration,Configuration
"Boost value (%)","Valeur du boost (%)"
diff --git a/src/module-elasticsuite-catalog-optimizer/view/adminhtml/ui_component/smile_elasticsuite_catalog_optimizer_form.xml b/src/module-elasticsuite-catalog-optimizer/view/adminhtml/ui_component/smile_elasticsuite_catalog_optimizer_form.xml
index e9bee3fe9..559a100e7 100644
--- a/src/module-elasticsuite-catalog-optimizer/view/adminhtml/ui_component/smile_elasticsuite_catalog_optimizer_form.xml
+++ b/src/module-elasticsuite-catalog-optimizer/view/adminhtml/ui_component/smile_elasticsuite_catalog_optimizer_form.xml
@@ -565,6 +565,10 @@
- 1
- Selected categories
+ -
+
- 2
+ - All except selected categories
+
-
- text
@@ -596,6 +600,15 @@
+
+ 2
+
+
+ smile_elasticsuite_catalog_optimizer_form.smile_elasticsuite_catalog_optimizer_form.catalog_view_container.category_ids
+ show
+
+
+
true