]> git.agnieray.net Git - galette.git/commitdiff
Fix dynamic fields replacements; refs #1545
authorJohan Cwiklinski <johan@x-tnd.be>
Sat, 15 May 2021 08:28:45 +0000 (10:28 +0200)
committerJohan Cwiklinski <johan@x-tnd.be>
Sat, 15 May 2021 08:28:45 +0000 (10:28 +0200)
galette/lib/Galette/Features/Replacements.php
tests/Galette/Entity/tests/units/PdfModel.php

index b5025b15ab15eb66713279e0b530c321cbd54db8..7385a38ef147e415ce9dc2481f4c8275b76b5823 100644 (file)
@@ -96,16 +96,13 @@ trait Replacements
     /**
      * Get dynamic patterns
      *
-     * @param string $form_name Dynamic form name
+     * @param string  $form_name Dynamic form name
+     * @param boolean $legacy    Whether to load legacy patterns
      *
      * @return array
      */
-    public function getDynamicPatterns(string $form_name): array
+    public function getDynamicPatterns(string $form_name, bool $legacy = true): array
     {
-        if (isset($this->dynamic_patterns[$form_name])) {
-            return $this->dynamic_patterns[$form_name];
-        }
-
         $fields = new DynamicFieldsSet($this->zdb, $this->login);
         $dynamic_fields = $fields->getList($form_name);
 
@@ -116,24 +113,30 @@ trait Replacements
                 'LABEL',
                 ''
             ];
-            if ($dynamic_field instanceof Choice) {
+            if ($legacy === true || $dynamic_field instanceof Choice) {
                 $capabilities[] = 'INPUT';
             }
             foreach ($capabilities as $capability) {
-                if (empty($capability)) {
-                    $skey = $key;
-                } else {
-                    $skey = sprintf('%s_%s', $capability, $key);
+                $skey = sprintf('%s_%s', $capability, $key);
+                switch ($capability) {
+                    case 'LABEL':
+                        $title = _T('Label for dynamic field "%s"');
+                        break;
+                    case 'INPUT':
+                        $title = _T('Form entry for dynamic field "%s"');
+                        break;
+                    case '':
+                    case 'VALUE':
+                        $skey = $key;
+                        $title = _T('Value for dynamic field "%s"');
+                        break;
                 }
                 $dynamic_patterns[strtolower($skey)] = [
                     'title' => sprintf(
-                        ($capability == 'LABEL' ? _T('Label for dynamic field "%s"')
-                        : ($capability == 'INPUT' ? _T('Form entry for dynamic field "%s"') :
-                            _T('Value for dynamic field "%s"'))
-                        ),
+                        $title,
                         $dynamic_field->getName()
                     ),
-                    'pattern'   => sprintf('{%s}', $skey)
+                    'pattern'   => sprintf('/{%s}/', $skey)
                 ];
             }
         }
@@ -235,7 +238,7 @@ trait Replacements
      */
     protected function getMemberPatterns(bool $legacy = true): array
     {
-        $dynamic_patterns = $this->getDynamicPatterns('adh');
+        $dynamic_patterns = $this->getDynamicPatterns('adh', $legacy);
         $m_patterns = [
             'adh_title'         => [
                 'title'     => _('Title'),
@@ -372,7 +375,7 @@ trait Replacements
      */
     protected function getContributionPatterns($legacy = true): array
     {
-        $dynamic_patterns = $this->getDynamicPatterns('contrib');
+        $dynamic_patterns = $this->getDynamicPatterns('contrib', $legacy);
 
         $c_patterns = [
             'contrib_label'     => [
@@ -674,7 +677,7 @@ trait Replacements
             }
             if (preg_match("/^{(INPUT_|VALUE_)?DYNFIELD_([0-9]+)_$uform_name}$/", $pattern, $match)) {
                 /** dynamic field value */
-                $capacity = $match[1];
+                $capacity = trim('_', $match[1]);
                 $field_id    = $match[2];
                 $field_name  = $dynamic_fields[$field_id]->getName();
                 $field_type  = $dynamic_fields[$field_id]->getType();
@@ -690,7 +693,7 @@ trait Replacements
 
                 switch ($field_type) {
                     case DynamicField::CHOICE:
-                        if ($capacity == 'INPUT_') {
+                        if ($capacity == 'INPUT') {
                             $choice_values = $dynamic_fields[$field_id]->getValues();
                             foreach ($choice_values as $choice_idx => $choice_value) {
                                 $value .= '<input type="radio" class="box" name="' . $field_name . '" value="' . $field_id . '"';
index f6c32378c669b841a42170c62d65652db8fb8ef4..f222aeb6f3f4976eb3636d29163d2acb80a7b783 100644 (file)
@@ -382,10 +382,10 @@ Au milieu
         $this->array($legend['main']['patterns'])->hasSize(8);
         $this->array($legend['member']['patterns'])
             ->hasSize(26)
-            ->hasKeys(['label_dynfield_' . $adf->getId() . '_adh', 'input_dynfield_' . $adf->getId() . '_adh']);
+            ->hasKeys(['label_dynfield_' . $adf->getId() . '_adh', 'dynfield_' . $adf->getId() . '_adh']);
         $this->array($legend['contribution']['patterns'])
             ->hasSize(13)
-            ->hasKeys(['label_dynfield_' . $cdf->getId() . '_contrib', 'input_dynfield_' . $cdf->getId() . '_contrib']);
+            ->hasKeys(['label_dynfield_' . $cdf->getId() . '_contrib', 'dynfield_' . $cdf->getId() . '_contrib']);
     }
 
     /**