Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/FilterService/FilterType/AbstractFilterType.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ abstract class AbstractFilterType
{
const EMPTY_STRING = '$$EMPTY$$';

public const PREFIX_PRECONDITION = 'PRECONDITION_';

protected TranslatorInterface $translator;

protected EngineInterface $templatingEngine;
Expand Down Expand Up @@ -68,6 +70,11 @@ protected function getField(AbstractFilterDefinitionType $filterDefinition): str
return $field;
}

protected function getConditionField(string $field, bool $isPrecondition): string
{
return $isPrecondition ? self::PREFIX_PRECONDITION . $field : $field;
}

protected function getTemplate(AbstractFilterDefinitionType $filterDefinition): ?string
{
$template = $this->template;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
$currentFilter[$field] = $value;

if (!empty($value)) {
$productList->addRelationCondition($field, $value);
$productList->addRelationCondition($this->getConditionField($field, $isPrecondition), $value);
}

return $currentFilter;
Expand Down
2 changes: 1 addition & 1 deletion src/FilterService/FilterType/Findologic/NumberRange.php
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
} else {
$v['max'] = 9999999999999999; // findologic won't accept only one of max or min, always needs both
}
$productList->addCondition($v, $field);
$productList->addCondition($v, $this->getConditionField($field, $isPrecondition));
}

return $currentFilter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
} else {
$v['max'] = 9999999999999999; // findologic won't accept only one of max or min, always needs both
}
$productList->addCondition($v, $field);
$productList->addCondition($v, $this->getConditionField($field, $isPrecondition));
}

return $currentFilter;
Expand Down
2 changes: 1 addition & 1 deletion src/FilterService/FilterType/Findologic/Select.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
$currentFilter[$field] = $value;

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

return $currentFilter;
Expand Down
2 changes: 1 addition & 1 deletion src/FilterService/FilterType/Findologic/SelectRelation.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
$currentFilter[$field] = $value;

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

return $currentFilter;
Expand Down
9 changes: 4 additions & 5 deletions src/FilterService/FilterType/Input.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,10 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro

if (!empty($value)) {
$db = Db::get();
if ($isPrecondition) {
$productList->addCondition('TRIM(`' . $field . '`) LIKE ' . $db->quote('%' . $value . '%'), 'PRECONDITION_' . $field);
} else {
$productList->addCondition('TRIM(`' . $field . '`) LIKE ' . $db->quote('%' . $value . '%'), $field);
}
$productList->addCondition(
'TRIM(`' . $field . '`) LIKE ' . $db->quote('%' . $value . '%'),
$this->getConditionField($field, $isPrecondition)
);
}

return $currentFilter;
Expand Down
18 changes: 8 additions & 10 deletions src/FilterService/FilterType/MultiSelect.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,18 +81,16 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro

if ($filterDefinition->getUseAndCondition()) {
foreach ($quotedValues as $value) {
if ($isPrecondition) {
$productList->addCondition($field . ' = ' . $value, 'PRECONDITION_' . $field);
} else {
$productList->addCondition($field . ' = ' . $value, $field);
}
$productList->addCondition(
$field . ' = ' . $value,
$this->getConditionField($field, $isPrecondition)
);
}
} else {
if ($isPrecondition) {
$productList->addCondition($field . ' IN (' . implode(',', $quotedValues) . ')', 'PRECONDITION_' . $field);
} else {
$productList->addCondition($field . ' IN (' . implode(',', $quotedValues) . ')', $field);
}
$productList->addCondition(
$field . ' IN (' . implode(',', $quotedValues) . ')',
$this->getConditionField($field, $isPrecondition)
);
}
}
}
Expand Down
13 changes: 5 additions & 8 deletions src/FilterService/FilterType/MultiSelectCategory.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ public function getFilterValues(AbstractFilterDefinitionType $filterDefinition,

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

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

$currentFilter[$filterDefinition->getField()] = $value;
$currentFilter[$field] = $value;

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

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

$conditions[] = $filterDefinition->getField() . ' LIKE ' . $db->quote($category);
$conditions[] = $field . ' LIKE ' . $db->quote($category);
}
}

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

if ($isPrecondition) {
$productList->addCondition($conditions, 'PRECONDITION_' . $filterDefinition->getField());
} else {
$productList->addCondition($conditions, $filterDefinition->getField());
}
$productList->addCondition($conditions, $this->getConditionField($field, $isPrecondition));
}

return $currentFilter;
Expand Down
6 changes: 1 addition & 5 deletions src/FilterService/FilterType/MultiSelectFromMultiSelect.php
Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
}
$quotedValues = '('.$quotedValues.')';

if ($isPrecondition) {
$productList->addCondition($quotedValues, 'PRECONDITION_' . $field);
} else {
$productList->addCondition($quotedValues, $field);
}
$productList->addCondition($quotedValues, $this->getConditionField($field, $isPrecondition));
}

return $currentFilter;
Expand Down
10 changes: 8 additions & 2 deletions src/FilterService/FilterType/MultiSelectRelation.php
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,16 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
if (!empty($quotedValues)) {
if ($filterDefinition->getUseAndCondition()) {
foreach ($quotedValues as $value) {
$productList->addRelationCondition($field, 'dest = ' . $value);
$productList->addRelationCondition(
$this->getConditionField($field, $isPrecondition),
'dest = ' . $value
);
}
} else {
$productList->addRelationCondition($field, 'dest IN (' . implode(',', $quotedValues) . ')');
$productList->addRelationCondition(
$this->getConditionField($field, $isPrecondition),
'dest IN (' . implode(',', $quotedValues) . ')'
);
}
}
}
Expand Down
25 changes: 13 additions & 12 deletions src/FilterService/FilterType/NumberRange.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,19 +47,20 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro

$db = Db::get();

if (!empty($value['from'])) {
if ($isPrecondition) {
$productList->addCondition($this->getField($filterDefinition) . ' >= ' . $db->quote($value['from']), 'PRECONDITION_' . $this->getField($filterDefinition));
} elseif ($value['from'] != AbstractFilterType::EMPTY_STRING) {
$productList->addCondition($this->getField($filterDefinition) . ' >= ' . $db->quote($value['from']), $this->getField($filterDefinition));
}
$from = $value['from'] ?? null;
$to = $value['to'] ?? null;

if ($from && $from !== AbstractFilterType::EMPTY_STRING) {
$productList->addCondition(
$field . ' >= ' . $db->quote($from),
$this->getConditionField($field, $isPrecondition)
);
}
if (!empty($value['to'])) {
if ($isPrecondition) {
$productList->addCondition($this->getField($filterDefinition) . ' <= ' . $db->quote($value['to']), 'PRECONDITION_' . $this->getField($filterDefinition));
} elseif ($value['to'] != AbstractFilterType::EMPTY_STRING) {
$productList->addCondition($this->getField($filterDefinition) . ' <= ' . $db->quote($value['to']), $this->getField($filterDefinition));
}
if ($to && $to !== AbstractFilterType::EMPTY_STRING) {
$productList->addCondition(
$field . ' <= ' . $db->quote($to),
$this->getConditionField($field, $isPrecondition)
);
}

return $currentFilter;
Expand Down
18 changes: 8 additions & 10 deletions src/FilterService/FilterType/NumberRangeSelection.php
Original file line number Diff line number Diff line change
Expand Up @@ -122,18 +122,16 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro

if (!empty($value)) {
if (!empty($value['from'])) {
if ($isPrecondition) {
$productList->addCondition($field . ' >= ' . $db->quote($value['from']), 'PRECONDITION_' . $field);
} else {
$productList->addCondition($field . ' >= ' . $db->quote($value['from']), $field);
}
$productList->addCondition(
$field . ' >= ' . $db->quote($value['from']),
$this->getConditionField($field, $isPrecondition)
);
}
if (!empty($value['to'])) {
if ($isPrecondition) {
$productList->addCondition($field . ' <= ' . $db->quote($value['to']), 'PRECONDITION_' . $field);
} else {
$productList->addCondition($field . ' < ' . $db->quote($value['to']), $field);
}
$productList->addCondition(
$field . ' < ' . $db->quote($value['to']),
$this->getConditionField($field, $isPrecondition)
);
}
}

Expand Down
5 changes: 4 additions & 1 deletion src/FilterService/FilterType/SearchIndex/Input.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,10 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro

if (!empty($value)) {
$value = '.*"' . $value . '".*';
$productList->addCondition(['regexp' => ['attributes.' . $field => $value]], $field);
$productList->addCondition(
['regexp' => ['attributes.' . $field => $value]],
$this->getConditionField($field, $isPrecondition)
);
}

return $currentFilter;
Expand Down
7 changes: 5 additions & 2 deletions src/FilterService/FilterType/SearchIndex/MultiSelect.php
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,13 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
if (!empty($quotedValues)) {
if ($filterDefinition->getUseAndCondition()) {
foreach ($quotedValues as $value) {
$productList->addCondition($value, $field);
$productList->addCondition($value, $this->getConditionField($field, $isPrecondition));
}
} else {
$productList->addCondition(['terms' => ['attributes.' . $field => $quotedValues]], $field);
$productList->addCondition(
['terms' => ['attributes.' . $field => $quotedValues]],
$this->getConditionField($field, $isPrecondition)
);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,15 +72,21 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro

if ($filterDefinition->getUseAndCondition()) {
foreach ($value as $entry) {
$productList->addCondition(['term' => ['attributes.' . $field => $entry]], $field);
$productList->addCondition(
['term' => ['attributes.' . $field => $entry]],
$this->getConditionField($field, $isPrecondition)
);
}
} else {
$boolArray = [];
foreach ($value as $entry) {
$boolArray[] = ['term' => ['attributes.' . $field => $entry]];
}

$productList->addCondition(['bool' => ['should' => $boolArray, 'minimum_should_match' => 1]], $field);
$productList->addCondition(
['bool' => ['should' => $boolArray, 'minimum_should_match' => 1]],
$this->getConditionField($field, $isPrecondition)
);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,13 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
if (!empty($quotedValues)) {
if ($filterDefinition->getUseAndCondition()) {
foreach ($quotedValues as $value) {
$productList->addRelationCondition($field, $value);
$productList->addRelationCondition($this->getConditionField($field, $isPrecondition), $value);
}
} else {
$productList->addRelationCondition($field, ['terms' => ['relations.' . $field => $quotedValues]]);
$productList->addRelationCondition(
$this->getConditionField($field, $isPrecondition),
['terms' => ['relations.' . $field => $quotedValues]]
);
}
}
}
Expand Down
5 changes: 4 additions & 1 deletion src/FilterService/FilterType/SearchIndex/NumberRange.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,10 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
if (strlen($value['to']) > 0) {
$range['lte'] = $value['to'];
}
$productList->addCondition(['range' => ['attributes.' . $field => $range]], $field);
$productList->addCondition(
['range' => ['attributes.' . $field => $range]],
$this->getConditionField($field, $isPrecondition),
);
}

return $currentFilter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,10 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
if (!empty($value['to'])) {
$range['lte'] = $value['to'];
}
$productList->addCondition(['range' => ['attributes.' . $field => $range]], $field);
$productList->addCondition(
['range' => ['attributes.' . $field => $range]],
$this->getConditionField($field, $isPrecondition)
);
}

return $currentFilter;
Expand Down
2 changes: 1 addition & 1 deletion src/FilterService/FilterType/SearchIndex/Select.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
$currentFilter[$field] = $value;

if (!empty($value)) {
$productList->addCondition(trim($value), $field);
$productList->addCondition(trim($value), $this->getConditionField($field, $isPrecondition));
}

return $currentFilter;
Expand Down
7 changes: 4 additions & 3 deletions src/FilterService/FilterType/SearchIndex/SelectCategory.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ public function getFilterValues(AbstractFilterDefinitionType $filterDefinition,

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

if ($value == AbstractFilterType::EMPTY_STRING) {
Expand All @@ -67,11 +68,11 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
}
}

$currentFilter[$filterDefinition->getField()] = $value;
$currentFilter[$field] = $value;

if (!empty($value)) {
$value = trim((string)$value);
$productList->addCondition($value, $filterDefinition->getField());
$productList->addCondition($value, $this->getConditionField($field, $isPrecondition));
}

return $currentFilter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
$currentFilter[$field][$keyId] = $filterValue;

$valueField = $nestedPath . '.' . $keyId . '.keyword';
$productList->addCondition($filterValue, $valueField);
$productList->addCondition($filterValue, $this->getConditionField($valueField, $isPrecondition));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,10 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
$currentFilter[$field] = $value;

if (!empty($value)) {
$productList->addCondition(['term' => ['attributes.' . $field => $value]], $field);
$productList->addCondition(
['term' => ['attributes.' . $field => $value]],
$this->getConditionField($field, $isPrecondition)
);
}

return $currentFilter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public function addCondition(AbstractFilterDefinitionType $filterDefinition, Pro
$currentFilter[$field] = $value;

if (!empty($value)) {
$productList->addRelationCondition($field, $value);
$productList->addRelationCondition($this->getConditionField($field, $isPrecondition), $value);
}

return $currentFilter;
Expand Down
Loading
Loading