From 6b75319aafdf39a8a1d957536b3d8ede2a66c2ee Mon Sep 17 00:00:00 2001 From: Johan Cwiklinski Date: Sat, 15 May 2021 10:28:45 +0200 Subject: [PATCH] Fix dynamic fields replacements; refs #1545 --- galette/lib/Galette/Features/Replacements.php | 43 ++++++++++--------- tests/Galette/Entity/tests/units/PdfModel.php | 4 +- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/galette/lib/Galette/Features/Replacements.php b/galette/lib/Galette/Features/Replacements.php index b5025b15a..7385a38ef 100644 --- a/galette/lib/Galette/Features/Replacements.php +++ b/galette/lib/Galette/Features/Replacements.php @@ -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 .= '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']); } /** -- 2.39.2