[BUGFIX] ExtensionManager: Make viewhelpers compatible with PHP 7.0 17/45217/5
authorMorton Jonuschat <m.jonuschat@mojocode.de>
Fri, 11 Dec 2015 20:34:52 +0000 (21:34 +0100)
committerAlexander Opitz <opitz.alexander@googlemail.com>
Mon, 14 Dec 2015 17:06:17 +0000 (18:06 +0100)
This patch changes viewhelpers that inherit from the fluid
ActionViewHelper but have a different method signature for render() to
inherit from a base viewhelper that doesn't have a default render()
method, removing the incompatibilities.

Resolves: #72183
Releases: master
Change-Id: Ifb3479b39d972056c2cf8c431f6dc580f5b2630c
Reviewed-on: https://review.typo3.org/45217
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Andreas Fernandez <typo3@scripting-base.de>
Reviewed-by: Alexander Opitz <opitz.alexander@googlemail.com>
Tested-by: Alexander Opitz <opitz.alexander@googlemail.com>
typo3/sysext/extensionmanager/Classes/ViewHelpers/ConfigureExtensionViewHelper.php
typo3/sysext/extensionmanager/Classes/ViewHelpers/DownloadExtensionDataViewHelper.php
typo3/sysext/extensionmanager/Classes/ViewHelpers/DownloadExtensionViewHelper.php
typo3/sysext/extensionmanager/Classes/ViewHelpers/Link/ActionViewHelper.php [new file with mode: 0644]
typo3/sysext/extensionmanager/Classes/ViewHelpers/ProcessAvailableActionsViewHelper.php
typo3/sysext/extensionmanager/Classes/ViewHelpers/RemoveExtensionViewHelper.php
typo3/sysext/extensionmanager/Classes/ViewHelpers/ShowExtensionVersionsViewHelper.php
typo3/sysext/extensionmanager/Classes/ViewHelpers/ToggleExtensionInstallationStateViewHelper.php
typo3/sysext/extensionmanager/Classes/ViewHelpers/UpdateScriptViewHelper.php

index daace43..ea71065 100644 (file)
@@ -17,19 +17,15 @@ namespace TYPO3\CMS\Extensionmanager\ViewHelpers;
 use TYPO3\CMS\Core\Imaging\Icon;
 use TYPO3\CMS\Core\Imaging\IconFactory;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
 
 /**
  * View helper for configure extension link
  * @internal
  */
-class ConfigureExtensionViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper
+class ConfigureExtensionViewHelper extends Link\ActionViewHelper
 {
     /**
-     * @var string
-     */
-    protected $tagName = 'a';
-
-    /**
      * Renders a configure extension link if the extension has configuration options
      *
      * @param array $extension Extension configuration array with extension information
@@ -50,9 +46,9 @@ class ConfigureExtensionViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Link\Act
             );
             if ($showDescription) {
                 $title = $extension['description'] . PHP_EOL .
-                    \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('extensionList.clickToConfigure', 'extensionmanager');
+                    LocalizationUtility::translate('extensionList.clickToConfigure', 'extensionmanager');
             } else {
-                $title = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('extensionList.configure', 'extensionmanager');
+                $title = LocalizationUtility::translate('extensionList.configure', 'extensionmanager');
             }
             $this->tag->addAttribute('href', $uri);
             $this->tag->addAttribute('title', $title);
index b36714f..036d4f4 100644 (file)
@@ -22,14 +22,9 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  * view helper for displaying a download extension data link
  * @internal
  */
-class DownloadExtensionDataViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper
+class DownloadExtensionDataViewHelper extends Link\ActionViewHelper
 {
     /**
-     * @var string
-     */
-    protected $tagName = 'a';
-
-    /**
      * Renders an install link
      *
      * @param array $extension
index 823f4ea..cf84d13 100644 (file)
@@ -20,7 +20,7 @@ use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
  * view helper
  * @internal
  */
-class DownloadExtensionViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper
+class DownloadExtensionViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewHelper
 {
     /**
      * @var string
@@ -33,6 +33,19 @@ class DownloadExtensionViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\FormViewH
     protected $configurationUtility;
 
     /**
+     * @var \TYPO3\CMS\Extbase\Service\ExtensionService
+     */
+    protected $extensionService;
+
+    /**
+     * @param \TYPO3\CMS\Extbase\Service\ExtensionService $extensionService
+     */
+    public function injectExtensionService(\TYPO3\CMS\Extbase\Service\ExtensionService $extensionService)
+    {
+        $this->extensionService = $extensionService;
+    }
+
+    /**
      * @param \TYPO3\CMS\Extensionmanager\Utility\ConfigurationUtility $configurationUtility
      */
     public function injectConfigurationUtility(\TYPO3\CMS\Extensionmanager\Utility\ConfigurationUtility $configurationUtility)
@@ -41,6 +54,21 @@ class DownloadExtensionViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\FormViewH
     }
 
     /**
+     * Initialize arguments.
+     *
+     * @return void
+     */
+    public function initializeArguments()
+    {
+        $this->registerTagAttribute('enctype', 'string', 'MIME type with which the form is submitted');
+        $this->registerTagAttribute('method', 'string', 'Transfer type (GET or POST)');
+        $this->registerTagAttribute('name', 'string', 'Name of form');
+        $this->registerTagAttribute('onreset', 'string', 'JavaScript: On reset of the form');
+        $this->registerTagAttribute('onsubmit', 'string', 'JavaScript: On submit of the form');
+        $this->registerUniversalTagAttributes();
+    }
+
+    /**
      * Renders a download link
      *
      * @param \TYPO3\CMS\Extensionmanager\Domain\Model\Extension $extension
@@ -55,7 +83,7 @@ class DownloadExtensionViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\FormViewH
         $pathSelector = '<ul class="is-hidden">';
         foreach ($installPaths as $installPathType => $installPath) {
             $pathSelector .= '<li>
-                               <input type="radio" id="' . htmlspecialchars($extension->getExtensionKey()) . '-downloadPath-' . htmlspecialchars($installPathType) . '" name="' . htmlspecialchars($this->getFieldNamePrefix('downloadPath')) . '[downloadPath]" class="downloadPath" value="' . htmlspecialchars($installPathType) . '"' . ($installPathType == 'Local' ? ' checked="checked"' : '') . '/>
+                               <input type="radio" id="' . htmlspecialchars($extension->getExtensionKey()) . '-downloadPath-' . htmlspecialchars($installPathType) . '" name="' . htmlspecialchars($this->getFieldNamePrefix()) . '[downloadPath]" class="downloadPath" value="' . htmlspecialchars($installPathType) . '" ' . ($installPathType == 'Local' ? 'checked="checked"' : '') . ' />
                                <label for="' . htmlspecialchars($extension->getExtensionKey()) . '-downloadPath-' . htmlspecialchars($installPathType) . '">' . htmlspecialchars($installPathType) . '</label>
                        </li>';
         }
@@ -87,4 +115,43 @@ class DownloadExtensionViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\FormViewH
         $this->tag->addAttribute('class', 'download');
         return '<div id="' . htmlspecialchars($extension->getExtensionKey()) . '-downloadFromTer" class="downloadFromTer">' . $this->tag->render() . '</div>';
     }
+
+    /**
+     * Get the field name prefix
+     *
+     * @return string
+     */
+    protected function getFieldNamePrefix()
+    {
+        if ($this->hasArgument('fieldNamePrefix')) {
+            return $this->arguments['fieldNamePrefix'];
+        } else {
+            return $this->getDefaultFieldNamePrefix();
+        }
+    }
+
+    /**
+     * Retrieves the default field name prefix for this form
+     *
+     * @return string default field name prefix
+     */
+    protected function getDefaultFieldNamePrefix()
+    {
+        $request = $this->controllerContext->getRequest();
+        if ($this->hasArgument('extensionName')) {
+            $extensionName = $this->arguments['extensionName'];
+        } else {
+            $extensionName = $request->getControllerExtensionName();
+        }
+        if ($this->hasArgument('pluginName')) {
+            $pluginName = $this->arguments['pluginName'];
+        } else {
+            $pluginName = $request->getPluginName();
+        }
+        if ($extensionName !== null && $pluginName != null) {
+            return $this->extensionService->getPluginNamespace($extensionName, $pluginName);
+        } else {
+            return '';
+        }
+    }
 }
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/Link/ActionViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/Link/ActionViewHelper.php
new file mode 100644 (file)
index 0000000..9c4cf82
--- /dev/null
@@ -0,0 +1,43 @@
+<?php
+namespace TYPO3\CMS\Extensionmanager\ViewHelpers\Link;
+
+/*
+ * This file is part of the TYPO3 CMS project.
+ *
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
+ *
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
+ *
+ * The TYPO3 project - inspiring people to share!
+ */
+
+/**
+ * A view helper for creating links to extensionmanager actions
+ *
+ * @internal
+ */
+class ActionViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper
+{
+    /**
+     * @var string
+     */
+    protected $tagName = 'a';
+
+    /**
+     * Arguments initialization
+     *
+     * @return void
+     */
+    public function initializeArguments()
+    {
+        $this->registerUniversalTagAttributes();
+        $this->registerTagAttribute('name', 'string', 'Specifies the name of an anchor');
+        $this->registerTagAttribute('rel', 'string', 'Specifies the relationship between the current document and the linked document');
+        $this->registerTagAttribute('rev', 'string', 'Specifies the relationship between the linked document and the current document');
+        $this->registerTagAttribute('target', 'string', 'Specifies where to open the linked document');
+    }
+
+}
index c97d2df..9e6ecc8 100644 (file)
@@ -19,7 +19,7 @@ namespace TYPO3\CMS\Extensionmanager\ViewHelpers;
  * actions for a given extension.
  * @internal
  */
-class ProcessAvailableActionsViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper
+class ProcessAvailableActionsViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper
 {
     const SIGNAL_ProcessActions = 'processActions';
 
index c40f3fa..83625d9 100644 (file)
@@ -22,14 +22,9 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  * view helper for displaying a remove extension link
  * @internal
  */
-class RemoveExtensionViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper
+class RemoveExtensionViewHelper extends Link\ActionViewHelper
 {
     /**
-     * @var string
-     */
-    protected $tagName = 'a';
-
-    /**
      * Renders an install link
      *
      * @param array $extension
index 9119abe..c0522d6 100644 (file)
@@ -18,7 +18,7 @@ namespace TYPO3\CMS\Extensionmanager\ViewHelpers;
  * Display a link to show all versions of an extension
  * @internal
  */
-class ShowExtensionVersionsViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper
+class ShowExtensionVersionsViewHelper extends Link\ActionViewHelper
 {
     /**
      * @var string
index 6f65bba..12409c8 100644 (file)
@@ -19,13 +19,12 @@ use TYPO3\CMS\Core\Imaging\IconFactory;
 use TYPO3\CMS\Core\Package\PackageManager;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
-use TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper;
 
 /**
  * Display a deactivate / activate link
  * @internal
  */
-class ToggleExtensionInstallationStateViewHelper extends ActionViewHelper
+class ToggleExtensionInstallationStateViewHelper extends Link\ActionViewHelper
 {
     /**
      * @var string
@@ -36,25 +35,9 @@ class ToggleExtensionInstallationStateViewHelper extends ActionViewHelper
      * Renders an install link
      *
      * @param array $extension
-     * @param array $arguments Arguments
-     * @param string $controller Target controller. If NULL current controllerName is used
-     * @param string $extensionName Target Extension Name (without "tx_" prefix and no underscores). If NULL the current extension name is used
-     * @param string $pluginName Target plugin. If empty, the current plugin name is used
-     * @param int $pageUid target page. See TypoLink destination
-     * @param int $pageType type of the target page. See typolink.parameter
-     * @param bool $noCache set this to disable caching for the target page. You should not need this.
-     * @param bool $noCacheHash set this to suppress the cHash query parameter created by TypoLink. You should not need this.
-     * @param string $section the anchor to be added to the URI
-     * @param string $format The requested format, e.g. ".html
-     * @param bool $linkAccessRestrictedPages If set, links pointing to access restricted pages will still link to the page even though the page cannot be accessed.
-     * @param array $additionalParams additional query parameters that won't be prefixed like $arguments (overrule $arguments)
-     * @param bool $absolute If set, the URI of the rendered link is absolute
-     * @param bool $addQueryString If set, the current query parameters will be kept in the URI
-     * @param array $argumentsToBeExcludedFromQueryString arguments to be removed from the URI. Only active if $addQueryString = TRUE
-     * @param string $addQueryStringMethod Set which parameters will be kept. Only active if $addQueryString = TRUE
      * @return string the rendered a tag
      */
-    public function render($extension = null, array $arguments = array(), $controller = null, $extensionName = null, $pluginName = null, $pageUid = null, $pageType = 0, $noCache = false, $noCacheHash = false, $section = '', $format = '', $linkAccessRestrictedPages = false, array $additionalParams = array(), $absolute = false, $addQueryString = false, array $argumentsToBeExcludedFromQueryString = array(), $addQueryStringMethod = null)
+    public function render($extension)
     {
         // Early return if package is protected or is a runtime actived package and can not be unloaded
         /** @var $packageManager \TYPO3\CMS\Core\Package\PackageManager */
index 07e6f63..4bc77a9 100644 (file)
@@ -22,7 +22,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  * View helper for update script link
  * @internal
  */
-class UpdateScriptViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper
+class UpdateScriptViewHelper extends Link\ActionViewHelper
 {
     /**
      * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
@@ -30,11 +30,6 @@ class UpdateScriptViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Link\ActionVie
     protected $objectManager;
 
     /**
-     * @var string
-     */
-    protected $tagName = 'a';
-
-    /**
      * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
      */
     public function injectObjectManager(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager)