From 2164c0761623ac0dcd8e4c216a27e0ca17f2d23b Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Fri, 6 Apr 2018 10:58:56 +1000 Subject: [PATCH 1/2] Preserve multi field types with trigger use Refs #3195 Refs #2861 Refs https://github.com/daftspunk/oc-test-plugin/pull/41 --- modules/backend/classes/FormField.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/backend/classes/FormField.php b/modules/backend/classes/FormField.php index f2812da00..896ee07f8 100644 --- a/modules/backend/classes/FormField.php +++ b/modules/backend/classes/FormField.php @@ -467,6 +467,7 @@ class FormField $triggerField = array_get($this->trigger, 'field'); $triggerCondition = array_get($this->trigger, 'condition'); $triggerForm = $this->arrayName; + $triggerMulti = ''; // Apply these to container if (in_array($triggerAction, ['hide', 'show']) && $position != 'container') { @@ -485,11 +486,18 @@ class FormField $triggerForm = HtmlHelper::reduceFieldNameHierarchy($triggerForm, $triggerFieldParentLevel); } + // Preserve multi field types + if (Str::endsWith($triggerField, '[]')) { + $triggerField = substr($triggerField, 0, -2); + $triggerMulti = '[]'; + } + + // Final compilation if ($this->arrayName) { - $fullTriggerField = $triggerForm.'['.implode('][', HtmlHelper::nameToArray($triggerField)).']'; + $fullTriggerField = $triggerForm.'['.implode('][', HtmlHelper::nameToArray($triggerField)).']'.$triggerMulti; } else { - $fullTriggerField = $triggerField; + $fullTriggerField = $triggerField.$triggerMulti; } $newAttributes = [ From ba4eba183d122046dfe7c17e363d60b491861540 Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Fri, 6 Apr 2018 11:05:31 +1000 Subject: [PATCH 2/2] Keep the good unit test from #3195 --- tests/unit/backend/widgets/FormTest.php | 41 +++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/unit/backend/widgets/FormTest.php diff --git a/tests/unit/backend/widgets/FormTest.php b/tests/unit/backend/widgets/FormTest.php new file mode 100644 index 000000000..8fdaa7e4c --- /dev/null +++ b/tests/unit/backend/widgets/FormTest.php @@ -0,0 +1,41 @@ + new FormTestModel, + 'arrayName' => 'array', + 'fields' => [ + 'trigger' => [ + 'type' => 'checkboxlist', + 'options' => [ + '1' => 'Value One' + ] + ], + 'triggered' => [ + 'type' => 'text', + 'trigger' => [ + 'field' => 'trigger[]', + 'action' => 'show', + 'condition' => 'value[1]' + ] + ] + ] + ]); + + $form->render(); + + $attributes = $form->getField('triggered')->getAttributes('container', false); + $this->assertEquals('[name="array[trigger][]"]', array_get($attributes, 'data-trigger')); + } +}