From 4cbf5cd655ae6cde9c712e0dd878a521de96c20c Mon Sep 17 00:00:00 2001 From: Anees Khan Date: Tue, 3 Aug 2021 00:12:49 +0300 Subject: [PATCH 1/3] Added accepted_if validation rule --- .../Concerns/ValidatesAttributes.php | 26 +++++++++++++ src/Illuminate/Validation/Validator.php | 2 + tests/Validation/ValidationValidatorTest.php | 39 +++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index 8860dcbc97c6..f9fcc0696603 100644 --- a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -41,6 +41,32 @@ public function validateAccepted($attribute, $value) return $this->validateRequired($attribute, $value) && in_array($value, $acceptable, true); } + /** + * Validate that an attribute was "accepted" when another attribute has a given value + * + * This validation rule implies the attribute is "required". + * + * @param string $attribute + * @param mixed $value + * @param mixed $parameters + * @return bool + */ + public function validateAcceptedIf($attribute, $value, $parameters) + { + + $acceptable = ['yes', 'on', '1', 1, true, 'true']; + + $this->requireParameterCount(2, $parameters, 'accepted_if'); + + [$values, $other] = $this->parseDependentRuleParameters($parameters); + + if (in_array($other, $values, is_bool($other) || is_null($other))) { + return $this->validateRequired($attribute, $value) && in_array($value, $acceptable, true); + } + + return true; + } + /** * Validate that an attribute is an active URL. * diff --git a/src/Illuminate/Validation/Validator.php b/src/Illuminate/Validation/Validator.php index f5f1a8fbf8eb..6fe9a609b87f 100755 --- a/src/Illuminate/Validation/Validator.php +++ b/src/Illuminate/Validation/Validator.php @@ -201,6 +201,7 @@ class Validator implements ValidatorContract */ protected $implicitRules = [ 'Accepted', + 'AcceptedIf', 'Filled', 'Present', 'Required', @@ -231,6 +232,7 @@ class Validator implements ValidatorContract 'Gte', 'Lt', 'Lte', + 'AcceptedIf', 'RequiredIf', 'RequiredUnless', 'RequiredWith', diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index 876756d97c6c..1fa1df65fb5c 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -1771,6 +1771,45 @@ public function testValidateAccepted() $this->assertTrue($v->passes()); } + public function testValidateAcceptedIf() + { + + $trans = $this->getIlluminateArrayTranslator(); + $v = new Validator($trans, ['foo' => 'no', 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => null, 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 0, 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => false, 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 'false', 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 'yes', 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => 'on', 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => '1', 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => 1, 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => true, 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => 'true', 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); + $this->assertTrue($v->passes()); + + } + public function testValidateEndsWith() { $trans = $this->getIlluminateArrayTranslator(); From efc236b393eb01715d64e70dff3f5a54dc9f2c1d Mon Sep 17 00:00:00 2001 From: Anees Khan <30714223+aneeskhan47@users.noreply.github.com> Date: Tue, 3 Aug 2021 00:26:22 +0300 Subject: [PATCH 2/3] Update ValidatesAttributes.php --- src/Illuminate/Validation/Concerns/ValidatesAttributes.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index f9fcc0696603..7821d0e88686 100644 --- a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -42,9 +42,7 @@ public function validateAccepted($attribute, $value) } /** - * Validate that an attribute was "accepted" when another attribute has a given value - * - * This validation rule implies the attribute is "required". + * Validate that an attribute was "accepted" when another attribute has a given value. * * @param string $attribute * @param mixed $value From 177463aa1638e76bb9b1c9ddc0c90364ebb5615f Mon Sep 17 00:00:00 2001 From: Anees Khan <30714223+aneeskhan47@users.noreply.github.com> Date: Tue, 3 Aug 2021 00:39:34 +0300 Subject: [PATCH 3/3] fix style --- tests/Validation/ValidationValidatorTest.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index 1fa1df65fb5c..cca810a5d61d 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -1806,8 +1806,7 @@ public function testValidateAcceptedIf() $this->assertTrue($v->passes()); $v = new Validator($trans, ['foo' => 'true', 'bar' => 'aaa'], ['foo' => 'accepted_if:bar,aaa']); - $this->assertTrue($v->passes()); - + $this->assertTrue($v->passes()); } public function testValidateEndsWith()