[TASK] Add helper method to deprecate ViewHelper attributes 07/51707/9
authorFrank Naegler <frank.naegler@typo3.org>
Wed, 15 Feb 2017 17:38:56 +0000 (18:38 +0100)
committerMarkus Klein <markus.klein@typo3.org>
Tue, 28 Feb 2017 12:17:57 +0000 (13:17 +0100)
This patch introduce a new helper method for deprecations in ViewHelper
classes. The new method can detect the template path and log the path.

Resolve: #79840
Releases: master
Change-Id: Id3f9392e115db846fbfab8daa8158931a5e51d16
Reviewed-on: https://review.typo3.org/51707
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Johannes Kasberger <johannes.kasberger@reelworx.at>
Tested-by: Johannes Kasberger <johannes.kasberger@reelworx.at>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
typo3/sysext/core/Classes/Utility/GeneralUtility.php
typo3/sysext/fluid/Classes/ViewHelpers/CaseViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/TranslateViewHelper.php

index 5d8eb7c..9852ca8 100644 (file)
@@ -23,6 +23,7 @@ use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Http\RequestFactory;
 use TYPO3\CMS\Core\Service\OpcodeCacheService;
 use TYPO3\CMS\Core\SingletonInterface;
+use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
 
 /**
  * The legendary "t3lib_div" class - Miscellaneous functions for general purpose.
@@ -4422,6 +4423,45 @@ class GeneralUtility
     }
 
     /**
+     * Logs the usage of a deprecated fluid ViewHelper argument.
+     * The log message will be generated automatically and contains the template path.
+     * With the third argument of this method it is possible to append some text to the log message.
+     *
+     * example usage:
+     *  if ($htmlEscape !== null) {
+     *      GeneralUtility::logDeprecatedViewHelperAttribute(
+     *          'htmlEscape',
+     *          $renderingContext,
+     *          'Please wrap the view helper in <f:format.raw> if you want to disable HTML escaping, which is enabled by default now.'
+     *      );
+     *  }
+     *
+     * The example above will create this deprecation log message:
+     * 15-02-17 23:12: [typo3/sysext/backend/Resources/Private/Templates/ToolbarItems/HelpToolbarItemDropDown.html]
+     *   The property "htmlEscape" has been deprecated.
+     *   Please wrap the view helper in <f:format.raw> if you want to disable HTML escaping,
+     *   which is enabled by default now.
+     *
+     * @param string $property
+     * @param RenderingContextInterface $renderingContext
+     * @param string $additionalMessage
+     */
+    public static function logDeprecatedViewHelperAttribute(string $property, RenderingContextInterface $renderingContext, string $additionalMessage = '')
+    {
+        $template = $renderingContext->getTemplatePaths()->resolveTemplateFileForControllerAndActionAndFormat(
+            $renderingContext->getControllerName(),
+            $renderingContext->getControllerAction()
+        );
+        $template = str_replace(PATH_site, '', $template);
+        $message = [];
+        $message[] = '[' . $template . ']';
+        $message[] = 'The property "' . $property . '" has been marked as deprecated.';
+        $message[] = $additionalMessage;
+        $message[] = 'Please check also your partial and layout files of this template';
+        self::deprecationLog(implode(' ', $message));
+    }
+
+    /**
      * Gets the absolute path to the deprecation log file.
      *
      * @return string Absolute path to the deprecation log file
index b9d4586..6b92a94 100644 (file)
@@ -73,7 +73,11 @@ class CaseViewHelper extends AbstractViewHelper
         $default = (bool)$arguments['default'];
         $viewHelperVariableContainer = $renderingContext->getViewHelperVariableContainer();
         if ($default !== false) {
-            GeneralUtility::deprecationLog('Argument "default" on f:case is deprecated - use f:defaultCase instead');
+            GeneralUtility::logDeprecatedViewHelperAttribute(
+                'default',
+                $renderingContext,
+                'Argument "default" on f:case is deprecated - use f:defaultCase instead'
+            );
         }
         if ($value === null && $default === false) {
             throw new Exception('The case View helper must have either value or default argument', 1382867521);
index 1a840c7..736685b 100644 (file)
@@ -128,7 +128,11 @@ class TranslateViewHelper extends AbstractViewHelper
         $arguments = $arguments['arguments'];
 
         if ($htmlEscape !== null) {
-            GeneralUtility::deprecationLog('htmlEscape argument has been deprecated and has no functionality any more. Please wrap the view helper in <f:format.raw> if you want to disable HTML escaping, which is enabled by default now.');
+            GeneralUtility::logDeprecatedViewHelperAttribute(
+                'htmlEscape',
+                $renderingContext,
+                'Please wrap the view helper in <f:format.raw> if you want to disable HTML escaping, which is enabled by default now.'
+            );
         }
 
         // Wrapper including a compatibility layer for TYPO3 Flow Translation