From 4c34cce82e573b671480c436e9d5602de157c5b9 Mon Sep 17 00:00:00 2001 From: Frank Dekker Date: Sun, 13 Oct 2024 22:11:10 +0200 Subject: [PATCH 1/5] feat(filter): Allow for comma-separated values in NumericFilter --- src/Doctrine/Common/Filter/NumericFilterTrait.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Doctrine/Common/Filter/NumericFilterTrait.php b/src/Doctrine/Common/Filter/NumericFilterTrait.php index 242a627531d..c5ddc0f783a 100644 --- a/src/Doctrine/Common/Filter/NumericFilterTrait.php +++ b/src/Doctrine/Common/Filter/NumericFilterTrait.php @@ -81,6 +81,11 @@ protected function isNumericField(string $property, string $resourceClass): bool protected function normalizeValues($value, string $property): ?array { + // Allow CSV format for multiple values. + if (\is_string($value) && \str_contains($value, ',')) { + $value = \explode(',', $value); + } + if (!is_numeric($value) && (!\is_array($value) || !$this->isNumericArray($value))) { $this->getLogger()->notice('Invalid filter ignored', [ 'exception' => new InvalidArgumentException(\sprintf('Invalid numeric value for "%s" property', $property)), From 0721d0a4ae4ed1edb666e3d420aec868aa740b09 Mon Sep 17 00:00:00 2001 From: Frank Dekker Date: Sun, 13 Oct 2024 22:43:17 +0200 Subject: [PATCH 2/5] feat(filter): Allow for comma-separated values in NumericFilter add testcase --- .../Orm/Tests/Filter/NumericFilterTestTrait.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Doctrine/Orm/Tests/Filter/NumericFilterTestTrait.php b/src/Doctrine/Orm/Tests/Filter/NumericFilterTestTrait.php index 3941852784c..659888db059 100644 --- a/src/Doctrine/Orm/Tests/Filter/NumericFilterTestTrait.php +++ b/src/Doctrine/Orm/Tests/Filter/NumericFilterTestTrait.php @@ -100,6 +100,16 @@ private static function provideApplyTestArguments(): array 'dummyPrice' => '21', ], ], + 'comma-separated numberic string (positive integer)' => [ + [ + 'id' => null, + 'name' => null, + 'dummyPrice' => null, + ], + [ + 'dummyPrice' => '21,22', + ], + ], 'multiple numeric string (positive integer)' => [ [ 'id' => null, From c93dd783f3008b464afe3b6ae7bc69409eae9ba7 Mon Sep 17 00:00:00 2001 From: Frank Dekker Date: Sun, 13 Oct 2024 22:11:10 +0200 Subject: [PATCH 3/5] feat(doctrine): allow for comma-separated values in numeric-filter --- src/Doctrine/Common/Filter/NumericFilterTrait.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Doctrine/Common/Filter/NumericFilterTrait.php b/src/Doctrine/Common/Filter/NumericFilterTrait.php index 242a627531d..c5ddc0f783a 100644 --- a/src/Doctrine/Common/Filter/NumericFilterTrait.php +++ b/src/Doctrine/Common/Filter/NumericFilterTrait.php @@ -81,6 +81,11 @@ protected function isNumericField(string $property, string $resourceClass): bool protected function normalizeValues($value, string $property): ?array { + // Allow CSV format for multiple values. + if (\is_string($value) && \str_contains($value, ',')) { + $value = \explode(',', $value); + } + if (!is_numeric($value) && (!\is_array($value) || !$this->isNumericArray($value))) { $this->getLogger()->notice('Invalid filter ignored', [ 'exception' => new InvalidArgumentException(\sprintf('Invalid numeric value for "%s" property', $property)), From 1484521318a3794bf5a068ea8aa14a73507eb7e0 Mon Sep 17 00:00:00 2001 From: Frank Dekker Date: Sun, 13 Oct 2024 22:43:17 +0200 Subject: [PATCH 4/5] feat(doctrine): allow for comma-separated values in numeric-filter add testcase --- .../Orm/Tests/Filter/NumericFilterTestTrait.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Doctrine/Orm/Tests/Filter/NumericFilterTestTrait.php b/src/Doctrine/Orm/Tests/Filter/NumericFilterTestTrait.php index 3941852784c..659888db059 100644 --- a/src/Doctrine/Orm/Tests/Filter/NumericFilterTestTrait.php +++ b/src/Doctrine/Orm/Tests/Filter/NumericFilterTestTrait.php @@ -100,6 +100,16 @@ private static function provideApplyTestArguments(): array 'dummyPrice' => '21', ], ], + 'comma-separated numberic string (positive integer)' => [ + [ + 'id' => null, + 'name' => null, + 'dummyPrice' => null, + ], + [ + 'dummyPrice' => '21,22', + ], + ], 'multiple numeric string (positive integer)' => [ [ 'id' => null, From 86b3e51d71d72501602b421df2b5eaf9c7582f9e Mon Sep 17 00:00:00 2001 From: Frank Dekker Date: Sun, 13 Oct 2024 23:42:31 +0200 Subject: [PATCH 5/5] feat(doctrine): allow for comma-separated values in numeric-filter --- src/Doctrine/Common/Filter/NumericFilterTrait.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Doctrine/Common/Filter/NumericFilterTrait.php b/src/Doctrine/Common/Filter/NumericFilterTrait.php index c5ddc0f783a..135e3bfb4cc 100644 --- a/src/Doctrine/Common/Filter/NumericFilterTrait.php +++ b/src/Doctrine/Common/Filter/NumericFilterTrait.php @@ -82,8 +82,8 @@ protected function isNumericField(string $property, string $resourceClass): bool protected function normalizeValues($value, string $property): ?array { // Allow CSV format for multiple values. - if (\is_string($value) && \str_contains($value, ',')) { - $value = \explode(',', $value); + if (\is_string($value) && str_contains($value, ',')) { + $value = explode(',', $value); } if (!is_numeric($value) && (!\is_array($value) || !$this->isNumericArray($value))) {