diff --git a/Classes/Form/Decorator/AbstractFormDefinitionDecorator.php b/Classes/Form/Decorator/AbstractFormDefinitionDecorator.php index a7985dbd..8b99dac8 100644 --- a/Classes/Form/Decorator/AbstractFormDefinitionDecorator.php +++ b/Classes/Form/Decorator/AbstractFormDefinitionDecorator.php @@ -11,7 +11,6 @@ namespace FriendsOfTYPO3\Headless\Form\Decorator; -use function count; use function in_array; abstract class AbstractFormDefinitionDecorator implements DefinitionDecoratorInterface @@ -55,8 +54,8 @@ protected function handleRenderables(array $renderables): array { foreach ($renderables as &$element) { if (in_array($element['type'], ['Fieldset', 'GridRow'], true) && - is_array($element['renderables']) && - count($element['renderables'])) { + is_array($element['renderables'] ?? []) && + ($element['renderables'] ?? []) !== []) { $element['elements'] = $this->handleRenderables($element['renderables']); unset($element['renderables']); } else { diff --git a/Classes/Form/Translator.php b/Classes/Form/Translator.php index 54f58f04..2373992e 100644 --- a/Classes/Form/Translator.php +++ b/Classes/Form/Translator.php @@ -73,17 +73,22 @@ public function translate(array $formDefinition, array $renderingOptions, array */ private function translateRenderables(array $renderables, array $formRuntime, array $sentValues): array { - foreach ($renderables as &$element) { + $translated = []; + + foreach ($renderables as $element) { $properties = []; if (isset($element['renderables']) && is_array($element['renderables'])) { $element['renderables'] = $this->translateRenderables($element['renderables'], $formRuntime, $sentValues); } + $validators = []; + if (isset($element['validators']) && is_array($element['validators'])) { - foreach ($element['validators'] as &$validator) { + foreach ($element['validators'] as $validator) { if (!isset($validator['errorMessage'])) { + $validators[] = $validator; continue; } @@ -93,7 +98,11 @@ private function translateRenderables(array $renderables, array $formRuntime, ar $formRuntime, is_array($validator['options'] ?? null) ? $validator['options'] : [] ); + + $validators[] = $validator; } + + $element['validators'] = $validators; } if (isset($element['properties']) && is_array($element['properties'])) { @@ -118,6 +127,7 @@ private function translateRenderables(array $renderables, array $formRuntime, ar $error['code'], $formRuntime ), + 'customMessage' => $error['message'], ]; } } @@ -137,8 +147,10 @@ private function translateRenderables(array $renderables, array $formRuntime, ar $element['defaultValue'] = $translatedDefaultValue !== '' && $translatedDefaultValue !== null ? $translatedDefaultValue : ($element['defaultValue'] ?? ''); $element['value'] = $sentValues[$element['identifier']] ?? null; $element['properties'] = $properties; + + $translated[] = $element; } - return $renderables; + return $translated; } } diff --git a/Tests/Unit/Form/TranslatorTest.php b/Tests/Unit/Form/TranslatorTest.php index f533d20a..9d014a0a 100644 --- a/Tests/Unit/Form/TranslatorTest.php +++ b/Tests/Unit/Form/TranslatorTest.php @@ -46,7 +46,7 @@ public function test(): void 'properties' => [ 'validationErrorMessages' => [ ['code' => 111, 'message' => 'translateMe'], - ] + ], ], 'value' => null, ], @@ -81,7 +81,7 @@ public function test(): void 'identifier' => 'RegularExpression', 'options' => ['regularExpression' => '/a-b/'], 'FERegularExpression' => '/a-z/', - ] + ], ], 'value' => null, ], @@ -99,8 +99,8 @@ public function test(): void 'label' => 'Upload image', 'properties' => ['saveToFileMount' => '/upload-dir'], 'value' => null, - ] - ] + ], + ], ], 1 => [], ], @@ -126,9 +126,9 @@ public function test(): void 'identifier' => 'testfield', 'label' => 'translatedValue', 'properties' => [ - 'validationErrorMessages' => [ - ['code' => 111, 'message' => 'translatedError'], - ] + 'validationErrorMessages' => [ + ['code' => 111, 'message' => 'translatedError', 'customMessage' => 'translateMe'], + ], ], 'value' => null, 'defaultValue' => 'translatedValue', @@ -167,7 +167,7 @@ public function test(): void 'identifier' => 'RegularExpression', 'options' => ['regularExpression' => '/a-b/'], 'FERegularExpression' => '/a-z/', - ] + ], ], 'value' => null, 'defaultValue' => 'translatedValue', @@ -188,12 +188,12 @@ public function test(): void 'properties' => ['saveToFileMount' => 'translatedValue'], 'value' => null, 'defaultValue' => 'translatedValue', - ] + ], ], 'label' => 'translatedValue', ], - ] + ], ], $translator->translate($formDefinition, [])); } }