Skip to content
This repository was archived by the owner on Apr 20, 2026. It is now read-only.

Commit 4a67c08

Browse files
[Improvement]: Distinguish relation conditions applied as preconditions (#249)
* distinguish relation conditions applied as preconditions * distinguish Findologic conditions applied as preconditions * distinguish search index conditions applied as preconditions * fix addRelationCondition method's condition * fix code quality issues Ref: https://sonarcloud.io/summary/new_code?id=pimcore_ecommerce-framework-bundle&pullRequest=249 * Apply suggestions from code review - typecast quote() * Update 01_Upgrade_Notes.md --------- Co-authored-by: JiaJia Ji <kingjia90@gmail.com>
1 parent 002c962 commit 4a67c08

30 files changed

Lines changed: 156 additions & 105 deletions

doc/03_Installation/01_Upgrade_Notes.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# Upgrade Notes
2+
#### v2.1.0
3+
Added the possibility to distinguish relations conditions applied as preconditions.
24

35
#### v2.0.0
46
Added `bool` as possible type to `$condition` parameter of `addCondition` function in `ProductListInterface` (and all implementing classes).
@@ -8,4 +10,4 @@ Added `bool` as possible type to `$condition` parameter of `addCondition` functi
810
please check if custom CSS/JS code added by `pimcore_head_script` and `pimcore_head_link` is still working.
911

1012
#### v2.0.0
11-
- `AbstractOfferToolProduct` now only accepts int as the `$id` parameter.
13+
- `AbstractOfferToolProduct` now only accepts int as the `$id` parameter.

src/FilterService/FilterType/AbstractFilterType.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ abstract class AbstractFilterType
2626
{
2727
const EMPTY_STRING = '$$EMPTY$$';
2828

29+
public const PREFIX_PRECONDITION = 'PRECONDITION_';
30+
2931
protected TranslatorInterface $translator;
3032

3133
protected EngineInterface $templatingEngine;
@@ -68,6 +70,11 @@ protected function getField(AbstractFilterDefinitionType $filterDefinition): str
6870
return $field;
6971
}
7072

73+
protected function getConditionField(string $field, bool $isPrecondition): string
74+
{
75+
return $isPrecondition ? self::PREFIX_PRECONDITION . $field : $field;
76+
}
77+
7178
protected function getTemplate(AbstractFilterDefinitionType $filterDefinition): ?string
7279
{
7380
$template = $this->template;

src/FilterService/FilterType/Findologic/MultiSelectRelation.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
121121
$currentFilter[$field] = $value;
122122

123123
if (!empty($value)) {
124-
$productList->addRelationCondition($field, $value);
124+
$productList->addRelationCondition($this->getConditionField($field, $isPrecondition), $value);
125125
}
126126

127127
return $currentFilter;

src/FilterService/FilterType/Findologic/NumberRange.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
100100
} else {
101101
$v['max'] = 9999999999999999; // findologic won't accept only one of max or min, always needs both
102102
}
103-
$productList->addCondition($v, $field);
103+
$productList->addCondition($v, $this->getConditionField($field, $isPrecondition));
104104
}
105105

106106
return $currentFilter;

src/FilterService/FilterType/Findologic/NumberRangeSelection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
123123
} else {
124124
$v['max'] = 9999999999999999; // findologic won't accept only one of max or min, always needs both
125125
}
126-
$productList->addCondition($v, $field);
126+
$productList->addCondition($v, $this->getConditionField($field, $isPrecondition));
127127
}
128128

129129
return $currentFilter;

src/FilterService/FilterType/Findologic/Select.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
4747
$currentFilter[$field] = $value;
4848

4949
if (!empty($value)) {
50-
$productList->addCondition([$value], $field);
50+
$productList->addCondition([$value], $this->getConditionField($field, $isPrecondition));
5151
}
5252

5353
return $currentFilter;

src/FilterService/FilterType/Findologic/SelectRelation.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
8686
$currentFilter[$field] = $value;
8787

8888
if (!empty($value)) {
89-
$productList->addCondition([$value], $field);
89+
$productList->addCondition([$value], $this->getConditionField($field, $isPrecondition));
9090
}
9191

9292
return $currentFilter;

src/FilterService/FilterType/Input.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,10 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
5151

5252
if (!empty($value)) {
5353
$db = Db::get();
54-
if ($isPrecondition) {
55-
$productList->addCondition('TRIM(`' . $field . '`) LIKE ' . $db->quote('%' . $value . '%'), 'PRECONDITION_' . $field);
56-
} else {
57-
$productList->addCondition('TRIM(`' . $field . '`) LIKE ' . $db->quote('%' . $value . '%'), $field);
58-
}
54+
$productList->addCondition(
55+
'TRIM(`' . $field . '`) LIKE ' . $db->quote('%' . $value . '%'),
56+
$this->getConditionField($field, $isPrecondition)
57+
);
5958
}
6059

6160
return $currentFilter;

src/FilterService/FilterType/MultiSelect.php

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,16 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
8181

8282
if ($filterDefinition->getUseAndCondition()) {
8383
foreach ($quotedValues as $value) {
84-
if ($isPrecondition) {
85-
$productList->addCondition($field . ' = ' . $value, 'PRECONDITION_' . $field);
86-
} else {
87-
$productList->addCondition($field . ' = ' . $value, $field);
88-
}
84+
$productList->addCondition(
85+
$field . ' = ' . $value,
86+
$this->getConditionField($field, $isPrecondition)
87+
);
8988
}
9089
} else {
91-
if ($isPrecondition) {
92-
$productList->addCondition($field . ' IN (' . implode(',', $quotedValues) . ')', 'PRECONDITION_' . $field);
93-
} else {
94-
$productList->addCondition($field . ' IN (' . implode(',', $quotedValues) . ')', $field);
95-
}
90+
$productList->addCondition(
91+
$field . ' IN (' . implode(',', $quotedValues) . ')',
92+
$this->getConditionField($field, $isPrecondition)
93+
);
9694
}
9795
}
9896
}

src/FilterService/FilterType/MultiSelectCategory.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ public function getFilterValues(AbstractFilterDefinitionType $filterDefinition,
6969

7070
public function addCondition(AbstractFilterDefinitionType $filterDefinition, ProductListInterface $productList, array $currentFilter, array $params, bool $isPrecondition = false): array
7171
{
72-
$value = $params[$filterDefinition->getField()] ?? null;
72+
$field = $this->getField($filterDefinition);
73+
$value = $params[$field] ?? null;
7374
$isReload = $params['is_reload'] ?? null;
7475

7576
if ($value == AbstractFilterType::EMPTY_STRING) {
@@ -83,7 +84,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
8384
$value = $preSelect;
8485
}
8586

86-
$currentFilter[$filterDefinition->getField()] = $value;
87+
$currentFilter[$field] = $value;
8788

8889
$conditions = [];
8990
if (!empty($value)) {
@@ -95,7 +96,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
9596

9697
$category = '%,' . trim((string)$category) . ',%';
9798

98-
$conditions[] = $filterDefinition->getField() . ' LIKE ' . $db->quote($category);
99+
$conditions[] = $field . ' LIKE ' . $db->quote($category);
99100
}
100101
}
101102

@@ -111,11 +112,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
111112
$conditions = '(' . implode(' OR ', $conditions) . ')';
112113
}
113114

114-
if ($isPrecondition) {
115-
$productList->addCondition($conditions, 'PRECONDITION_' . $filterDefinition->getField());
116-
} else {
117-
$productList->addCondition($conditions, $filterDefinition->getField());
118-
}
115+
$productList->addCondition($conditions, $this->getConditionField($field, $isPrecondition));
119116
}
120117

121118
return $currentFilter;

0 commit comments

Comments
 (0)