diff --git a/src/Engine/Mod/SimpleEquationMod.php b/src/Engine/Mod/SimpleEquationMod.php index 176186f2..8d866618 100644 --- a/src/Engine/Mod/SimpleEquationMod.php +++ b/src/Engine/Mod/SimpleEquationMod.php @@ -18,9 +18,12 @@ public static function getType(): string public function __invoke(Engine $engine, array $options): void { + $operator = SqlEquationOperator::match($options['operator']) + ?? throw new \InvalidArgumentException('Invalid equation operator provided'); + $filter = SimpleEquationElement::define( equationLeft: $options['operand1'], - equationOperator: $options['operator'], + equationOperator: $operator, equationRight: $options['operand2'], ); @@ -56,4 +59,4 @@ public function configureOptions(OptionsResolver $resolver): void ?? throw new \InvalidArgumentException('Invalid equation operator provided') ); } -} \ No newline at end of file +} diff --git a/src/Engine/Projector/InteractiveProjector.php b/src/Engine/Projector/InteractiveProjector.php index 662ff34f..29edf78b 100644 --- a/src/Engine/Projector/InteractiveProjector.php +++ b/src/Engine/Projector/InteractiveProjector.php @@ -163,13 +163,11 @@ private function hydrateForm(FormInterface $form, ListSpecification $list): void } catch (OutOfBoundsException $exception) { - $filterSourceId = $filterDefinition->getDataSource()->getFilterIdentifier(); - throw new FlareException( message: 'Filter form does not contain field: ' . $filterName, previous: $exception, method: __METHOD__, - source: $filterSourceId ? \sprintf('tl_flare_filter.id=%s', $filterSourceId) : 'filter inlined' + source: $filterDefinition->getDataSource()?->getFilterIdentifier() ?? 'filter inlined' ); } diff --git a/src/FilterElement/SimpleEquationElement.php b/src/FilterElement/SimpleEquationElement.php index 2dd16704..76e71aec 100644 --- a/src/FilterElement/SimpleEquationElement.php +++ b/src/FilterElement/SimpleEquationElement.php @@ -44,7 +44,11 @@ public function __invoke(FilterInvocation $inv, FilterQueryBuilder $qb): void SqlEquationOperator::LESS_THAN_EQUALS => $qb->expr()->lte($operand, ':eq_right'), SqlEquationOperator::LIKE => $qb->expr()->like($operand, ':eq_right'), SqlEquationOperator::NOT_LIKE => $qb->expr()->notLike($operand, ':eq_right'), + SqlEquationOperator::IN => $qb->expr()->in($operand, ':eq_right'), + SqlEquationOperator::NOT_IN => $qb->expr()->notIn($operand, ':eq_right'), SqlEquationOperator::IS_NULL => $qb->expr()->isNull($operand), + // the default arm below is a runtime safety net for operators added to the enum later + // @phpstan-ignore match.alwaysTrue SqlEquationOperator::IS_NOT_NULL => $qb->expr()->isNotNull($operand), default => null, }; @@ -111,4 +115,4 @@ public static function define( return $definition; } -} \ No newline at end of file +} diff --git a/src/Model/FilterModel.php b/src/Model/FilterModel.php index 38b59ecd..1336431c 100644 --- a/src/Model/FilterModel.php +++ b/src/Model/FilterModel.php @@ -24,7 +24,7 @@ class FilterModel extends Model implements FilterDataSourceInterface, PtableInfe public function getFilterIdentifier(): string { - return (string) $this->id; + return \sprintf('%s.id=%s', static::$strTable, $this->id); } public function getFilterType(): string @@ -116,4 +116,4 @@ public function __get($strKey) default => parent::__get($strKey), }; } -} \ No newline at end of file +} diff --git a/src/Query/Executor/FilterExecutor.php b/src/Query/Executor/FilterExecutor.php index d3eaa197..0fa014bb 100644 --- a/src/Query/Executor/FilterExecutor.php +++ b/src/Query/Executor/FilterExecutor.php @@ -177,7 +177,7 @@ private function createCallbackException( return new FilterException( \sprintf('[FLARE] Query denied: %s / Callback: %s', $e->getMessage(), $errorMethod), code: $e->getCode(), previous: $e, method: $errorMethod, - source: \sprintf('tl_flare_filter.id=%s', $filter->getDataSource()->getFilterIdentifier() ?: '0'), + source: $filter->getDataSource()?->getFilterIdentifier() ?? 'filter inlined', ); } -} \ No newline at end of file +}