]> git.agnieray.net Git - galette.git/commitdiff
Uncheck dynamic booleans; closes #1472
authorJohan Cwiklinski <johan@x-tnd.be>
Mon, 3 Aug 2020 08:07:23 +0000 (10:07 +0200)
committerJohan Cwiklinski <johan@x-tnd.be>
Mon, 3 Aug 2020 08:07:23 +0000 (10:07 +0200)
galette/lib/Galette/Entity/DynamicsTrait.php

index aa9e76b86ceee0146bc642f060760a7e554f482a..addb84c72ba3dad629c14793015b755556ad45ed 100644 (file)
@@ -39,6 +39,7 @@ namespace Galette\Entity;
 use Analog\Analog;
 use Galette\DynamicFields\File;
 use Galette\DynamicFields\Date;
+use Galette\DynamicFields\Boolean;
 
 /**
  * Dynamics fields trait
@@ -109,8 +110,10 @@ trait DynamicsTrait
             $valid = true;
             $fields = $this->dynamics->getFields();
 
+            $dynamic_fields = [];
+            //posted fields
             foreach ($post as $key => $value) {
-                // if the field is enabled, and matche patterns check it
+                // if the field is enabled, and match patterns check it
                 if (isset($disabled[$key]) || substr($key, 0, 11) != $this->name_pattern) {
                     continue;
                 }
@@ -120,6 +123,30 @@ trait DynamicsTrait
                     continue;
                 }
 
+                $dynamic_fields[$key] = [
+                    'value'     => $value,
+                    'field_id'  => $field_id,
+                    'val_index' => $val_index
+                ];
+            }
+
+            //some fields may be mising in posted values (checkboxes)
+            foreach ($fields as $field) {
+                $pattern = '/' . $this->name_pattern . $field->getId() . '_(\d)/';
+                if ($field instanceof Boolean && !preg_grep($pattern, array_keys($dynamic_fields))) {
+                    $dynamic_fields[$this->name_pattern . $field->getId() . '_1'] = [
+                        'value'     => '',
+                        'field_id'  => $field->getId(),
+                        'val_index' => 1
+                    ];
+                }
+            }
+
+            foreach ($dynamic_fields as $key => $dfield_values) {
+                $field_id = $dfield_values['field_id'];
+                $value = $dfield_values['value'];
+                $val_index = $dfield_values['val_index'];
+
                 if ($fields[$field_id]->isRequired() && (trim($value) === '' || $value == null)) {
                     $this->errors[] = str_replace(
                         '%field',