From 5be51703c01402deaef5f42c6cf4b0543c47f411 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Wed, 13 Dec 2023 15:55:14 +0000 Subject: [PATCH 1/6] Filter out any nulls from checkboxes --- src/Http/Requests/FrontendFormRequest.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Http/Requests/FrontendFormRequest.php b/src/Http/Requests/FrontendFormRequest.php index 19df613aafb..e8af07b99bc 100644 --- a/src/Http/Requests/FrontendFormRequest.php +++ b/src/Http/Requests/FrontendFormRequest.php @@ -100,7 +100,7 @@ private function getFormFields() $this->assets = $this->normalizeAssetsValues($fields); - $values = array_merge($this->all(), $this->assets); + $values = array_merge($this->removeNullsFromCheckboxes($this->all()), $this->assets); return $this->cachedFields = $fields->addValues($values); } @@ -114,6 +114,15 @@ private function normalizeAssetsValues($fields) ->all(); } + private function removeNullsFromCheckboxes($fields, $values) + { + $fields->all() + ->filter(fn ($field) => $field->fieldtype()->handle() === 'checkboxes') + ->each(fn ($field) => Arr::set($values, $field->handle(), collect(Arr::get($values, $field->handle(), []))->reject(fn ($value) => $value === null)->all())); + + return $values; + } + public function validateResolved() { $site = Site::findByUrl(URL::previous()) ?? Site::default(); From ff67ebf45f1446b2f41c2eb4937a17706bfb9bd7 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Wed, 13 Dec 2023 16:06:35 +0000 Subject: [PATCH 2/6] Doh --- src/Http/Requests/FrontendFormRequest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Requests/FrontendFormRequest.php b/src/Http/Requests/FrontendFormRequest.php index e8af07b99bc..d9dfd7e1c00 100644 --- a/src/Http/Requests/FrontendFormRequest.php +++ b/src/Http/Requests/FrontendFormRequest.php @@ -100,7 +100,7 @@ private function getFormFields() $this->assets = $this->normalizeAssetsValues($fields); - $values = array_merge($this->removeNullsFromCheckboxes($this->all()), $this->assets); + $values = array_merge($this->removeNullsFromCheckboxes($fields, $this->all()), $this->assets); return $this->cachedFields = $fields->addValues($values); } From 814552b448854b5d1ece2f6ff0c2193bacb7980f Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Thu, 14 Dec 2023 09:46:55 +0000 Subject: [PATCH 3/6] null --- src/Http/Requests/FrontendFormRequest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Requests/FrontendFormRequest.php b/src/Http/Requests/FrontendFormRequest.php index d9dfd7e1c00..01537ce00a8 100644 --- a/src/Http/Requests/FrontendFormRequest.php +++ b/src/Http/Requests/FrontendFormRequest.php @@ -118,7 +118,7 @@ private function removeNullsFromCheckboxes($fields, $values) { $fields->all() ->filter(fn ($field) => $field->fieldtype()->handle() === 'checkboxes') - ->each(fn ($field) => Arr::set($values, $field->handle(), collect(Arr::get($values, $field->handle(), []))->reject(fn ($value) => $value === null)->all())); + ->each(fn ($field) => Arr::set($values, $field->handle(), collect(Arr::get($values, $field->handle(), []))->reject(fn ($value) => $value === 'null')->all())); return $values; } From 7b57c9024f92eb4d42042f77a22e401285e74251 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Thu, 14 Dec 2023 10:48:09 +0000 Subject: [PATCH 4/6] fixes --- src/Http/Requests/FrontendFormRequest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Requests/FrontendFormRequest.php b/src/Http/Requests/FrontendFormRequest.php index 01537ce00a8..03e312be3f2 100644 --- a/src/Http/Requests/FrontendFormRequest.php +++ b/src/Http/Requests/FrontendFormRequest.php @@ -118,7 +118,7 @@ private function removeNullsFromCheckboxes($fields, $values) { $fields->all() ->filter(fn ($field) => $field->fieldtype()->handle() === 'checkboxes') - ->each(fn ($field) => Arr::set($values, $field->handle(), collect(Arr::get($values, $field->handle(), []))->reject(fn ($value) => $value === 'null')->all())); + ->each(fn ($field) => Arr::set($values, $field->handle(), collect(Arr::get($values, $field->handle(), []))->filter(fn ($value) => $value !== null)->values())); return $values; } From a45117f427b041771a013c513562a2253c29cdd0 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Fri, 15 Dec 2023 07:24:28 +0000 Subject: [PATCH 5/6] Strip out `null` values from front end form checkboxes --- src/Http/Controllers/FormController.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Http/Controllers/FormController.php b/src/Http/Controllers/FormController.php index b7ab366f735..1304e1c3b49 100644 --- a/src/Http/Controllers/FormController.php +++ b/src/Http/Controllers/FormController.php @@ -28,7 +28,15 @@ public function submit(FrontendFormRequest $request, $form) $site = Site::findByUrl(URL::previous()) ?? Site::default(); $fields = $form->blueprint()->fields(); $this->validateContentType($request, $form); - $values = array_merge($request->all(), $assets = $request->assets()); + $values = $request->all(); + + $fields->all() + ->filter(fn ($field) => $field->fieldtype()->handle() === 'checkboxes') + ->each(function ($field) use (&$values) { + return Arr::set($values, $field->handle(), collect(Arr::get($values, $field->handle(), []))->filter(fn ($value) => $value !== null)->values()->all()); + }); + + $values = array_merge($values, $assets = $request->assets()); $params = collect($request->all())->filter(function ($value, $key) { return Str::startsWith($key, '_'); })->all(); From 6feddb88fbfeb33dd03c7a82afe0d63a76c43ef0 Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Fri, 15 Dec 2023 07:25:26 +0000 Subject: [PATCH 6/6] Revert changes to front end form request --- src/Http/Requests/FrontendFormRequest.php | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/Http/Requests/FrontendFormRequest.php b/src/Http/Requests/FrontendFormRequest.php index 03e312be3f2..19df613aafb 100644 --- a/src/Http/Requests/FrontendFormRequest.php +++ b/src/Http/Requests/FrontendFormRequest.php @@ -100,7 +100,7 @@ private function getFormFields() $this->assets = $this->normalizeAssetsValues($fields); - $values = array_merge($this->removeNullsFromCheckboxes($fields, $this->all()), $this->assets); + $values = array_merge($this->all(), $this->assets); return $this->cachedFields = $fields->addValues($values); } @@ -114,15 +114,6 @@ private function normalizeAssetsValues($fields) ->all(); } - private function removeNullsFromCheckboxes($fields, $values) - { - $fields->all() - ->filter(fn ($field) => $field->fieldtype()->handle() === 'checkboxes') - ->each(fn ($field) => Arr::set($values, $field->handle(), collect(Arr::get($values, $field->handle(), []))->filter(fn ($value) => $value !== null)->values())); - - return $values; - } - public function validateResolved() { $site = Site::findByUrl(URL::previous()) ?? Site::default();