From 401e0da98db9ab599a581fb428d01c3ea6631772 Mon Sep 17 00:00:00 2001 From: Michael-Macbook Date: Sun, 13 Apr 2025 18:51:38 +1200 Subject: [PATCH 1/5] Remove validation logic from preProcessValidatable method in Date fieldtype --- src/Fieldtypes/Date.php | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/Fieldtypes/Date.php b/src/Fieldtypes/Date.php index 481873d0d4..cdab372217 100644 --- a/src/Fieldtypes/Date.php +++ b/src/Fieldtypes/Date.php @@ -4,14 +4,12 @@ use Carbon\Exceptions\InvalidFormatException; use Illuminate\Support\Carbon; -use Illuminate\Support\Facades\Validator; use InvalidArgumentException; use Statamic\Facades\GraphQL; use Statamic\Fields\Fieldtype; use Statamic\GraphQL\Fields\DateField; use Statamic\GraphQL\Types\DateRangeType; use Statamic\Query\Scopes\Filters\Fields\Date as DateFilter; -use Statamic\Rules\DateFieldtype as ValidationRule; use Statamic\Statamic; use Statamic\Support\DateFormat; @@ -371,11 +369,6 @@ public function secondsEnabled() public function preProcessValidatable($value) { - Validator::make( - [$this->field->handle() => $value], - [$this->field->handle() => [new ValidationRule($this)]], - )->validate(); - if ($value === null) { return null; } From 7ccca251449de72f3b20e4a50b04b85271edd0cf Mon Sep 17 00:00:00 2001 From: Michael-Macbook Date: Sun, 13 Apr 2025 19:11:22 +1200 Subject: [PATCH 2/5] only validate date if it is not in a parent field --- src/Fieldtypes/Date.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Fieldtypes/Date.php b/src/Fieldtypes/Date.php index cdab372217..5f214e1e37 100644 --- a/src/Fieldtypes/Date.php +++ b/src/Fieldtypes/Date.php @@ -4,12 +4,14 @@ use Carbon\Exceptions\InvalidFormatException; use Illuminate\Support\Carbon; +use Illuminate\Support\Facades\Validator; use InvalidArgumentException; use Statamic\Facades\GraphQL; use Statamic\Fields\Fieldtype; use Statamic\GraphQL\Fields\DateField; use Statamic\GraphQL\Types\DateRangeType; use Statamic\Query\Scopes\Filters\Fields\Date as DateFilter; +use Statamic\Rules\DateFieldtype as ValidationRule; use Statamic\Statamic; use Statamic\Support\DateFormat; @@ -369,6 +371,13 @@ public function secondsEnabled() public function preProcessValidatable($value) { + if(!$this->field->parentField()){ + Validator::make( + [$this->field->handle() => $value], + [$this->field->handle() => [new ValidationRule($this)]], + )->validate(); + } + if ($value === null) { return null; } From c911f915fb89880b4d4245eee05c85ce9d8b911b Mon Sep 17 00:00:00 2001 From: Michael-Macbook Date: Sun, 13 Apr 2025 19:40:45 +1200 Subject: [PATCH 3/5] fix style & add test --- src/Fieldtypes/Date.php | 2 +- tests/Fieldtypes/DateTest.php | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Fieldtypes/Date.php b/src/Fieldtypes/Date.php index 5f214e1e37..b53bf5e52f 100644 --- a/src/Fieldtypes/Date.php +++ b/src/Fieldtypes/Date.php @@ -371,7 +371,7 @@ public function secondsEnabled() public function preProcessValidatable($value) { - if(!$this->field->parentField()){ + if (! $this->field->parentField()) { Validator::make( [$this->field->handle() => $value], [$this->field->handle() => [new ValidationRule($this)]], diff --git a/tests/Fieldtypes/DateTest.php b/tests/Fieldtypes/DateTest.php index 7d6f358bc0..5956af32ba 100644 --- a/tests/Fieldtypes/DateTest.php +++ b/tests/Fieldtypes/DateTest.php @@ -577,6 +577,16 @@ public function it_validates($config, $input, $expected) $this->assertEquals($expected, $messages); } + #[Test] + public function it_does_not_validate_if_in_a_parent_field() + { + $field = $this->fieldtype(['time_enabled' => true])->field(); + $replicator = (new Field('a', ['type' => 'replicator'])); + $field->setParentField($replicator, 0); + $fields = (new Fields)->setFields(collect([$field]))->addValues(['test' => ['date' => '2012-01-29']]); + $this->assertEquals($fields->validate(), ["test" => new Carbon('2012-01-29 00:00:00')]); + } + public static function validationProvider() { return [ From c2cc2c42ea2e4b1cc6607f952db1272c8869f744 Mon Sep 17 00:00:00 2001 From: Michael-Macbook Date: Sun, 13 Apr 2025 19:48:59 +1200 Subject: [PATCH 4/5] code format --- tests/Fieldtypes/DateTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Fieldtypes/DateTest.php b/tests/Fieldtypes/DateTest.php index 5956af32ba..e6ddfb2e72 100644 --- a/tests/Fieldtypes/DateTest.php +++ b/tests/Fieldtypes/DateTest.php @@ -584,7 +584,7 @@ public function it_does_not_validate_if_in_a_parent_field() $replicator = (new Field('a', ['type' => 'replicator'])); $field->setParentField($replicator, 0); $fields = (new Fields)->setFields(collect([$field]))->addValues(['test' => ['date' => '2012-01-29']]); - $this->assertEquals($fields->validate(), ["test" => new Carbon('2012-01-29 00:00:00')]); + $this->assertEquals($fields->validate(), ['test' => new Carbon('2012-01-29 00:00:00')]); } public static function validationProvider() From 5697c8577442e5b2b5be711e771344a546f0a943 Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Thu, 17 Apr 2025 11:14:24 -0400 Subject: [PATCH 5/5] wip --- src/Fieldtypes/Date.php | 11 ++++++++--- tests/Fieldtypes/DateTest.php | 10 ---------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/Fieldtypes/Date.php b/src/Fieldtypes/Date.php index b53bf5e52f..7af05db445 100644 --- a/src/Fieldtypes/Date.php +++ b/src/Fieldtypes/Date.php @@ -5,6 +5,7 @@ use Carbon\Exceptions\InvalidFormatException; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Validator; +use Illuminate\Validation\ValidationException; use InvalidArgumentException; use Statamic\Facades\GraphQL; use Statamic\Fields\Fieldtype; @@ -371,11 +372,15 @@ public function secondsEnabled() public function preProcessValidatable($value) { - if (! $this->field->parentField()) { + try { Validator::make( - [$this->field->handle() => $value], - [$this->field->handle() => [new ValidationRule($this)]], + ['field' => $value], + ['field' => [new ValidationRule($this)]], + [], + ['field' => $this->field->display()], )->validate(); + } catch (ValidationException $e) { + throw ValidationException::withMessages([$this->field->fieldPathPrefix() => $e->errors()['field']]); } if ($value === null) { diff --git a/tests/Fieldtypes/DateTest.php b/tests/Fieldtypes/DateTest.php index e6ddfb2e72..7d6f358bc0 100644 --- a/tests/Fieldtypes/DateTest.php +++ b/tests/Fieldtypes/DateTest.php @@ -577,16 +577,6 @@ public function it_validates($config, $input, $expected) $this->assertEquals($expected, $messages); } - #[Test] - public function it_does_not_validate_if_in_a_parent_field() - { - $field = $this->fieldtype(['time_enabled' => true])->field(); - $replicator = (new Field('a', ['type' => 'replicator'])); - $field->setParentField($replicator, 0); - $fields = (new Fields)->setFields(collect([$field]))->addValues(['test' => ['date' => '2012-01-29']]); - $this->assertEquals($fields->validate(), ['test' => new Carbon('2012-01-29 00:00:00')]); - } - public static function validationProvider() { return [