From 0cb7f86d93ed7019d6fa10c440e0260e80f8ff54 Mon Sep 17 00:00:00 2001 From: Julien Nahum Date: Wed, 29 May 2024 11:53:09 +0200 Subject: [PATCH] D4310 new input section (#427) * wip: validation condition input * form custom validation condition * Default message on form condition validation * field validation condition test * fix linting * update tests, add pass test * Polish UI * Re-order validation + fix logic issue * Move custom validation after default validation --------- Co-authored-by: Frank --- app/Http/Requests/AnswerFormRequest.php | 10 +++++----- app/Service/Forms/FormLogicConditionChecker.php | 5 ++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/Http/Requests/AnswerFormRequest.php b/app/Http/Requests/AnswerFormRequest.php index 3ba1caae..4057c9bc 100644 --- a/app/Http/Requests/AnswerFormRequest.php +++ b/app/Http/Requests/AnswerFormRequest.php @@ -87,11 +87,6 @@ class AnswerFormRequest extends FormRequest $rules[] = 'nullable'; } - // User custom validation - if(!(Str::of($property['type'])->startsWith('nf-')) && isset($property['validation'])) { - $rules[] = (new CustomFieldValidationRule($property['validation'], $data)); - } - // Clean id to escape "." $propertyId = $property['id']; if (in_array($property['type'], ['multi_select'])) { @@ -101,6 +96,11 @@ class AnswerFormRequest extends FormRequest $rules = array_merge($rules, $this->getPropertyRules($property)); } + // User custom validation + if(!(Str::of($property['type'])->startsWith('nf-')) && isset($property['validation'])) { + $rules[] = (new CustomFieldValidationRule($property['validation'], $data)); + } + $this->requestRules[$propertyId] = $rules; } diff --git a/app/Service/Forms/FormLogicConditionChecker.php b/app/Service/Forms/FormLogicConditionChecker.php index a7573859..dac6a900 100644 --- a/app/Service/Forms/FormLogicConditionChecker.php +++ b/app/Service/Forms/FormLogicConditionChecker.php @@ -84,7 +84,10 @@ class FormLogicConditionChecker private function checkContains($condition, $fieldValue): bool { - return ($fieldValue && is_array($fieldValue)) ? in_array($condition['value'], $fieldValue) : false; + if (is_array($fieldValue)) { + return in_array($condition['value'], $fieldValue); + } + return \Str::contains($fieldValue, $condition['value']); } private function checkListContains($condition, $fieldValue): bool