]> git.agnieray.net Git - galette.git/commitdiff
Drop extra if, send required and disabled fields to dynamics
authorJohan Cwiklinski <johan@x-tnd.be>
Mon, 3 Aug 2020 05:13:55 +0000 (07:13 +0200)
committerJohan Cwiklinski <johan@x-tnd.be>
Mon, 3 Aug 2020 05:13:55 +0000 (07:13 +0200)
galette/lib/Galette/Entity/Adherent.php
galette/lib/Galette/Entity/Contribution.php
galette/lib/Galette/Entity/DynamicsTrait.php
galette/lib/Galette/Entity/Transaction.php

index 3c5e2e0ed2664436a57c6412498d0b9df527c98c..ac80591b94e9f590a75c37ea8d8b3d2755b2fadb 100644 (file)
@@ -1082,7 +1082,7 @@ class Adherent
             $this->_parent = null;
         }
 
-        $this->dynamicsCheck($values);
+        $this->dynamicsCheck($values, $required, $disabled);
 
         if (count($this->errors) > 0) {
             Analog::log(
index b73ae726e5f79a87838579d4f714410fad30e52c..d1af0b1ce3e44599942041222545fc4a93841454 100644 (file)
@@ -484,7 +484,7 @@ class Contribution
             }
         }
 
-        $this->dynamicsCheck($values);
+        $this->dynamicsCheck($values, $required, $disabled);
 
         if (count($this->errors) > 0) {
             Analog::log(
index 2d7be72c6049def66171024945df20f27c155def..aa9e76b86ceee0146bc642f060760a7e554f482a 100644 (file)
@@ -58,7 +58,7 @@ trait DynamicsTrait
     /** @var string */
     protected $name_pattern = 'info_field_';
 
-    /** @var array */
+    /** @var DynamicFieldsHandle */
     protected $dynamics;
 
     /**
@@ -89,11 +89,13 @@ trait DynamicsTrait
     /**
      * Extract posted values for dynamic fields
      *
-     * @param array $post Posted values
+     * @param array $post     Posted values
+     * @param array $required Array of required fields
+     * @param array $disabled Array of disabled fields
      *
      * @return boolean
      */
-    protected function dynamicsCheck($post)
+    protected function dynamicsCheck(array $post, array $required, array $disabled)
     {
         if ($this->dynamics === null) {
             Analog::log(
@@ -108,73 +110,71 @@ trait DynamicsTrait
             $fields = $this->dynamics->getFields();
 
             foreach ($post as $key => $value) {
-                // if the field is enabled, check it
-                if (!isset($disabled[$key])) {
-                    if (substr($key, 0, 11) != $this->name_pattern) {
-                        continue;
-                    }
+                // if the field is enabled, and matche patterns check it
+                if (isset($disabled[$key]) || substr($key, 0, 11) != $this->name_pattern) {
+                    continue;
+                }
 
-                    list($field_id, $val_index) = explode('_', str_replace($this->name_pattern, '', $key));
-                    if (!is_numeric($field_id) || !is_numeric($val_index)) {
-                        continue;
-                    }
+                list($field_id, $val_index) = explode('_', str_replace($this->name_pattern, '', $key));
+                if (!is_numeric($field_id) || !is_numeric($val_index)) {
+                    continue;
+                }
 
-                    if ($fields[$field_id]->isRequired() && (trim($value) === '' || $value == null)) {
-                        $this->errors[] = str_replace(
-                            '%field',
-                            $fields[$field_id]->getName(),
-                            _T('Missing required field %field')
+                if ($fields[$field_id]->isRequired() && (trim($value) === '' || $value == null)) {
+                    $this->errors[] = str_replace(
+                        '%field',
+                        $fields[$field_id]->getName(),
+                        _T('Missing required field %field')
+                    );
+                } else {
+                    if ($fields[$field_id] instanceof File) {
+                        //delete checkbox
+                        $filename = sprintf(
+                            'member_%d_field_%d_value_%d',
+                            $this->id,
+                            $field_id,
+                            $val_index
                         );
+                        unlink(GALETTE_FILES_PATH . $filename);
+                        $this->dynamics->setValue($this->id, $field_id, $val_index, '');
                     } else {
-                        if ($fields[$field_id] instanceof File) {
-                            //delete checkbox
-                            $filename = sprintf(
-                                'member_%d_field_%d_value_%d',
-                                $this->id,
-                                $field_id,
-                                $val_index
-                            );
-                            unlink(GALETTE_FILES_PATH . $filename);
-                            $this->dynamics->setValue($this->id, $field_id, $val_index, '');
-                        } else {
-                            if ($fields[$field_id] instanceof Date && !empty(trim($value))) {
-                                //check date format
-                                try {
-                                    $d = \DateTime::createFromFormat(__("Y-m-d"), $value);
+                        if ($fields[$field_id] instanceof Date && !empty(trim($value))) {
+                            //check date format
+                            try {
+                                $d = \DateTime::createFromFormat(__("Y-m-d"), $value);
+                                if ($d === false) {
+                                    //try with non localized date
+                                    $d = \DateTime::createFromFormat("Y-m-d", $value);
                                     if ($d === false) {
-                                        //try with non localized date
-                                        $d = \DateTime::createFromFormat("Y-m-d", $value);
-                                        if ($d === false) {
-                                            throw new \Exception('Incorrect format');
-                                        }
+                                        throw new \Exception('Incorrect format');
                                     }
-                                } catch (\Exception $e) {
-                                    $valid = false;
-                                    Analog::log(
-                                        'Wrong date format. field: ' . $field_id .
-                                        ', value: ' . $value . ', expected fmt: ' .
-                                        __("Y-m-d") . ' | ' . $e->getMessage(),
-                                        Analog::INFO
-                                    );
-                                    $this->errors[] = str_replace(
-                                        array(
-                                            '%date_format',
-                                            '%field'
-                                        ),
-                                        array(
-                                            __("Y-m-d"),
-                                            $fields[$field_id]->getName()
-                                        ),
-                                        _T("- Wrong date format (%date_format) for %field!")
-                                    );
                                 }
+                            } catch (\Exception $e) {
+                                $valid = false;
+                                Analog::log(
+                                    'Wrong date format. field: ' . $field_id .
+                                    ', value: ' . $value . ', expected fmt: ' .
+                                    __("Y-m-d") . ' | ' . $e->getMessage(),
+                                    Analog::INFO
+                                );
+                                $this->errors[] = str_replace(
+                                    array(
+                                        '%date_format',
+                                        '%field'
+                                    ),
+                                    array(
+                                        __("Y-m-d"),
+                                        $fields[$field_id]->getName()
+                                    ),
+                                    _T("- Wrong date format (%date_format) for %field!")
+                                );
                             }
-                            //actual field value
-                            if ($value !== null && trim($value) !== '') {
-                                $this->dynamics->setValue($this->id, $field_id, $val_index, $value);
-                            } else {
-                                $this->dynamics->unsetValue($this->id, $field_id, $val_index);
-                            }
+                        }
+                        //actual field value
+                        if ($value !== null && trim($value) !== '') {
+                            $this->dynamics->setValue($this->id, $field_id, $val_index, $value);
+                        } else {
+                            $this->dynamics->unsetValue($this->id, $field_id, $val_index);
                         }
                     }
                 }
@@ -348,6 +348,6 @@ trait DynamicsTrait
         foreach ($values as $key => $value) {
             $dfields[str_replace($prefix, $this->name_pattern, $key)] = $value;
         }
-        return $this->dynamicsCheck($dfields);
+        return $this->dynamicsCheck($dfields, [], []);
     }
 }
index a7079b3bdba9f67353ee4db171c3664d091fe01e..24b9cd56cc5a49a7d1da234848edd5249e98227c 100644 (file)
@@ -345,7 +345,7 @@ class Transaction
             }
         }
 
-        $this->dynamicsCheck($values);
+        $this->dynamicsCheck($values, $required, $disabled);
 
         if (count($this->errors) > 0) {
             Analog::log(