]> git.agnieray.net Git - galette.git/commitdiff
Few fixes, populate on set, more simple code
authorJohan Cwiklinski <johan@x-tnd.be>
Mon, 3 Aug 2020 05:01:44 +0000 (07:01 +0200)
committerJohan Cwiklinski <johan@x-tnd.be>
Mon, 3 Aug 2020 05:02:18 +0000 (07:02 +0200)
galette/lib/Galette/Entity/DynamicFieldsHandle.php
galette/lib/Galette/Entity/DynamicsTrait.php

index c78d9731b0c9d62cca6e5b5ac6fc712350da7153..2b9d249b934d2a3eeeae6e97b41cc6fe4fc314f9 100644 (file)
@@ -140,7 +140,7 @@ class DynamicFieldsHandle
                         $field = $this->dynamic_fields[$f->{DynamicField::PK}];
                         if ($field->hasFixedValues()) {
                             $choices = $field->getValues();
-                            $f['text_val'] = $choices[$f->field_val];
+                            $f->text_val = $choices[$f->field_val];
                         }
                         $this->current_values[$f->{DynamicField::PK}][] = array_filter(
                             (array)$f,
@@ -201,9 +201,9 @@ class DynamicFieldsHandle
     {
         if (!isset($this->current_values[$field])) {
             $this->current_values[$field][] = [
-                'item_id'       => '',
+                'item_id'       => $this->item_id,
                 'field_form'    => $this->dynamic_fields[$field]->getForm(),
-                'val_index'     => '',
+                'val_index'     => 1,
                 'field_val'     => '',
                 'is_new'        => true
             ];
@@ -224,17 +224,18 @@ class DynamicFieldsHandle
     public function setValue($item, $field, $index, $value)
     {
         $idx = $index - 1;
-        if (isset($this->current_values[$field][$idx])) {
-            $this->current_values[$field][$idx]['field_val'] = $value;
-        } else {
-            $this->current_values[$field][$idx] = [
-                'item_id'       => $item,
-                'field_form'    => $this->dynamic_fields[$field]->getForm(),
-                'val_index'     => $index,
-                'field_val'     => $value,
-                'is_new'        => true
-            ];
+        $input = [
+            'item_id'       => $item,
+            'field_form'    => $this->dynamic_fields[$field]->getForm(),
+            'val_index'     => $index,
+            'field_val'     => $value,
+        ];
+
+        if (!isset($this->current_values[$field][$idx])) {
+            $input['is_new'] = true;
         }
+
+        $this->current_values[$field][$idx] = $input;
     }
 
     /**
@@ -291,8 +292,8 @@ class DynamicFieldsHandle
                             'val_index' => $value['val_index'],
                             'where1'    => $value['item_id'],
                             'where2'    => $value['field_id'],
-                            'where3'    => $value['field_form'],
-                            'where4'    => $value['old_val_index'] ?? $value['val_index']
+                            'where3'    => $value['field_form'], //:val_index
+                            'where4'    => $value['old_val_index'] ?? $value['val_index'] //:old_val_index
                         ];
                         $this->getUpdateStatement()->execute($params);
                         $this->has_changed = true;
@@ -359,7 +360,7 @@ class DynamicFieldsHandle
                 'item_id'       => ':item_id',
                 'field_id'      => ':field_id',
                 'field_form'    => ':field_form',
-                'val_index'     => ':val_index'
+                'val_index'     => ':old_val_index'
             ]);
             $this->update_stmt = $this->zdb->sql->prepareStatementForSqlObject($update);
         }
index 3c3a048664f55bca20bf0d4d515cc138841248e7..2d7be72c6049def66171024945df20f27c155def 100644 (file)
@@ -55,6 +55,10 @@ use Galette\DynamicFields\Date;
 
 trait DynamicsTrait
 {
+    /** @var string */
+    protected $name_pattern = 'info_field_';
+
+    /** @var array */
     protected $dynamics;
 
     /**
@@ -106,70 +110,71 @@ trait DynamicsTrait
             foreach ($post as $key => $value) {
                 // if the field is enabled, check it
                 if (!isset($disabled[$key])) {
-                    if (substr($key, 0, 11) == 'info_field_') {
-                        list($field_id, $val_index) = explode('_', substr($key, 11));
-                        if (
-                            is_numeric($field_id)
-                            && is_numeric($val_index)
-                        ) {
-                            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 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) {
-                                                    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!")
-                                            );
+                    if (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;
+                    }
+
+                    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 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) {
+                                            throw new \Exception('Incorrect format');
                                         }
                                     }
-                                    //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);
-                                    }
+                                } 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);
+                            }
                         }
                     }
                 }
@@ -227,11 +232,11 @@ trait DynamicsTrait
                 continue;
             }
 
-            if (substr($key, 0, 11) != 'info_field_') {
+            if (substr($key, 0, 11) != $this->name_pattern) {
                 continue;
             }
 
-            list($field_id, $val_index) = explode('_', substr($key, 11));
+            list($field_id, $val_index) = explode('_', str_replace($this->name_pattern, '', $key));
             if (!is_numeric($field_id) || !is_numeric($val_index)) {
                 continue;
             }
@@ -341,7 +346,7 @@ trait DynamicsTrait
     {
         $dfields = [];
         foreach ($values as $key => $value) {
-            $dfields[str_replace($prefix, 'info_field_', $key)] = $value;
+            $dfields[str_replace($prefix, $this->name_pattern, $key)] = $value;
         }
         return $this->dynamicsCheck($dfields);
     }