[TASK] Move CompilableInterface to each condition ViewHelper 25/48725/2
authorClaus Due <claus@namelesscoder.net>
Wed, 29 Jun 2016 15:47:30 +0000 (17:47 +0200)
committerJan Helke <typo3@helke.de>
Mon, 11 Jul 2016 09:17:39 +0000 (11:17 +0200)
This change moves the CompilableInterface away from the abstract
condition ViewHelper class, over to each of the implementations.
This is done in order to prevent incompatible third party
ViewHelpers from incorrectly evaluating conditions - instead,
such ViewHelpers will now be uncompilable but function correctly.

Any third party ViewHelper can opt-in to being compilable by
implementing the CompilableInterface and ensuring that the
``evaluateCondition`` method is available (and is at least of
``protected`` visibility).

Change-Id: If2dac75debe2ce5872a79d8e54037bb338240f27
Resolves: #73565
Releases: 7.6
Reviewed-on: https://review.typo3.org/48725
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Jigal van Hemert <jigal.van.hemert@typo3.org>
Reviewed-by: Jan Helke <typo3@helke.de>
Tested-by: Jan Helke <typo3@helke.de>
typo3/sysext/core/Documentation/Changelog/7.6/Important-73565-AbstractConditionViewHelperNoLongerAutomaticallyCompilable.rst [new file with mode: 0644]
typo3/sysext/fluid/Classes/Core/ViewHelper/AbstractConditionViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Be/Security/IfAuthenticatedViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Be/Security/IfHasRoleViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/IfViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Security/IfAuthenticatedViewHelper.php
typo3/sysext/fluid/Classes/ViewHelpers/Security/IfHasRoleViewHelper.php

diff --git a/typo3/sysext/core/Documentation/Changelog/7.6/Important-73565-AbstractConditionViewHelperNoLongerAutomaticallyCompilable.rst b/typo3/sysext/core/Documentation/Changelog/7.6/Important-73565-AbstractConditionViewHelperNoLongerAutomaticallyCompilable.rst
new file mode 100644 (file)
index 0000000..8502d5d
--- /dev/null
@@ -0,0 +1,22 @@
+==================================================================================
+Important: #73565 - AbstractConditionViewHelper no longer automatically compilable
+==================================================================================
+
+Description
+===========
+
+CompilableInterface is removed from the abstract AbstractConditionViewHelper and
+is now implemented by each of the condition ViewHelpers. The base class still provides
+every method it did before but third-party ViewHelpers must now indicate that they are
+compilable by implementing the required interface.
+
+The change is related to a previous change which made ``evaluateCondition`` the API
+to evaluate the input argument conditions in any condition ViewHelper. The change
+is done as a preventative measure, preventing issues when third-party condition
+ViewHelpers were compiled but did not implement the ``evaluateCondition`` method.
+Now, such ViewHelpers will prevent compiling entirely until the author of the class
+has implemented CompilableInterface and the ``evaluateCondition`` method.
+
+Making such third-party ViewHelpers no longer compilable (and thus decreasing performance
+when they are used) is chosen in favor of preserving the current behavior where such
+ViewHelpers would be completely unable to correctly evaluate the condition at all.
index 347aa4e..9b79836 100644 (file)
@@ -34,7 +34,7 @@ use TYPO3\CMS\Fluid\ViewHelpers\ThenViewHelper;
  *
  * @api
  */
-abstract class AbstractConditionViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper implements \TYPO3\CMS\Fluid\Core\ViewHelper\Facets\ChildNodeAccessInterface, \TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface
+abstract class AbstractConditionViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper implements \TYPO3\CMS\Fluid\Core\ViewHelper\Facets\ChildNodeAccessInterface
 {
     /**
      * An array containing child nodes
index 8d11518..c6e2404 100644 (file)
@@ -51,7 +51,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Be\Security;
  *
  * @api
  */
-class IfAuthenticatedViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper
+class IfAuthenticatedViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper implements \TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface
 {
     /**
      * This method decides if the condition is TRUE or FALSE. It can be overriden in extending viewhelpers to adjust functionality.
index 9a110f5..47814b4 100644 (file)
@@ -60,7 +60,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Be\Security;
  *
  * @api
  */
-class IfHasRoleViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper
+class IfHasRoleViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper implements \TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface
 {
     /**
      * Initializes the "role" argument.
index 8105307..9fc6df3 100644 (file)
@@ -79,7 +79,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers;
  *
  * @api
  */
-class IfViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper
+class IfViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper implements \TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface
 {
     /**
      * @return void
index 9663e7f..fd9959e 100644 (file)
@@ -51,7 +51,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Security;
  *
  * @api
  */
-class IfAuthenticatedViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper
+class IfAuthenticatedViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper implements \TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface
 {
     /**
      * This method decides if the condition is TRUE or FALSE. It can be overriden in extending viewhelpers to adjust functionality.
index ab0a277..f67063a 100644 (file)
@@ -60,7 +60,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Security;
  *
  * @api
  */
-class IfHasRoleViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper
+class IfHasRoleViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper implements \TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface
 {
     /**
      * Initializes the "role" argument.