[BUGFIX] EXT:form - add compatibility for issue #82210 06/55306/5
authorRalf Zimmermann <ralf.zimmermann@tritum.de>
Tue, 9 Jan 2018 13:07:14 +0000 (14:07 +0100)
committerOliver Hader <oliver.hader@typo3.org>
Mon, 5 Feb 2018 13:56:36 +0000 (14:56 +0100)
The fix for issue #82210 implies a breaking change within a minor
release (template changes) and was never documented.

This bugfix adds some compatibility code for integrators who are using
their own templates for RadioButton and/ or MultiCheckbox form elements.

In addition, a deprecation warning is thrown and the corresponding rst
file has been added.

A different patchset adds the appropriate breaking rst file for v9.

Resolves: #83403
Related: #82210
Releases: 8.7
Change-Id: I496886631b4506f2a370cc56473de414d4c3f359
Reviewed-on: https://review.typo3.org/55306
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Tobi Kretschmann <tobi@tobishome.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Oliver Hader <oliver.hader@typo3.org>
Tested-by: Oliver Hader <oliver.hader@typo3.org>
typo3/sysext/core/Documentation/Changelog/8.7.x/Deprecation-83403-ExtFormTranslationForOptionsPropertiesAsString.rst [new file with mode: 0644]
typo3/sysext/form/Classes/ViewHelpers/TranslateElementPropertyViewHelper.php

diff --git a/typo3/sysext/core/Documentation/Changelog/8.7.x/Deprecation-83403-ExtFormTranslationForOptionsPropertiesAsString.rst b/typo3/sysext/core/Documentation/Changelog/8.7.x/Deprecation-83403-ExtFormTranslationForOptionsPropertiesAsString.rst
new file mode 100644 (file)
index 0000000..f4d9b73
--- /dev/null
@@ -0,0 +1,46 @@
+.. include:: ../../Includes.txt
+
+==============================================================================
+Deprecation: #83403 - EXT:form - deprecate translation for "options" as string
+==============================================================================
+
+See :issue:`83403`
+
+Description
+===========
+
+The templates for RadioButton and MultiCheckbox form elements have been changed. This was necessary
+to allow dots and special chars within labels and values for the "options" property of the
+aforementioned elements.
+For compatibility reasons, the old template syntax is still supported but is deprecated and will be
+removed with TYPO3 v9.
+
+Impact
+======
+
+If a user utilizes his own templates for MultiCheckbox and/ or RadioButton form elements and
+translates the "options" property in the following way, a deprecation warning will be thrown.
+
+.. code-block:: html
+
+   {formvh:translateElementProperty(element: element, property: 'options.{value}')}
+
+Affected Installations
+======================
+
+Any installation which uses ext:form and own templates for MultiCheckbox and/ or RadioButton form
+elements.
+
+
+Migration
+=========
+
+Use
+
+.. code-block:: html
+
+   {formvh:translateElementProperty(element: element, property: '{0: \'options\', 1: value}')}
+
+to translate the "options" property within MultiCheckbox and RadioButton form element templates.
+
+.. index:: Frontend, ext:form
\ No newline at end of file
index e3544ed..6d61659 100644 (file)
@@ -15,6 +15,7 @@ namespace TYPO3\CMS\Form\ViewHelpers;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
 use TYPO3\CMS\Form\Domain\Model\Renderable\RootRenderableInterface;
 use TYPO3\CMS\Form\Domain\Runtime\FormRuntime;
@@ -73,7 +74,22 @@ class TranslateElementPropertyViewHelper extends AbstractViewHelper
         } elseif (is_array($property)) {
             $propertyParts = $property;
         } else {
-            $propertyParts = [$property];
+            $propertyParts = explode('.', $property);
+            if (count($propertyParts) > 1 && $propertyParts[0] === 'options') {
+                GeneralUtility::deprecationLog(
+                    'EXT:form - translations for form element "options" with a string property path like ' .
+                    '"{formvh:translateElementProperty(element: element, property: \'options.{value}\')}" ' .
+                    'are deprecated since TYPO3 v8 and will be removed in TYPO3 v9. Use an array like ' .
+                    '"{formvh:translateElementProperty(element: element, property: {0: \'options\', 1: \'value\'})}" instead.'
+                );
+                array_shift($propertyParts);
+                $propertyParts = [
+                    'options',
+                    htmlspecialchars_decode(implode('.', $propertyParts), ENT_QUOTES)
+                ];
+            } else {
+                $propertyParts = [$property];
+            }
         }
 
         /** @var FormRuntime $formRuntime */