From 63511fbf181f4a3747be572210631cde97667330 Mon Sep 17 00:00:00 2001
From: Christian Kuhn <lolli@schwarzbu.ch>
Date: Wed, 15 Dec 2021 18:57:23 +0100
Subject: [PATCH] [TASK] Avoid extending view helpers in ext:extensionmanager
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

ext:extensionmanager has a couple of view helpers that
extend ActionViewHelper for no apparent reason. Change
those to extend AbstractTagBasedViewHelper instead.

Resolves: #96361
Releases: main, 11.5
Change-Id: Iedab908a30df0418a7c86d073d97a47548a87ab4
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/72665
Tested-by: Stefan Bürk <stefan@buerk.tech>
Tested-by: Benni Mack <benni@typo3.org>
Tested-by: core-ci <typo3@b13.com>
Tested-by: Oliver Bartsch <bo@cedev.de>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Stefan Bürk <stefan@buerk.tech>
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 .../ViewHelpers/ReloadSqlDataViewHelper.php   | 15 ++++++++----
 .../ViewHelpers/RemoveExtensionViewHelper.php | 23 ++++++++++---------
 ...leExtensionInstallationStateViewHelper.php | 15 ++++++------
 .../Private/Templates/List/Index.html         |  2 +-
 4 files changed, 32 insertions(+), 23 deletions(-)

diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ReloadSqlDataViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ReloadSqlDataViewHelper.php
index 452452045d83..7745e3a4a301 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ReloadSqlDataViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ReloadSqlDataViewHelper.php
@@ -22,22 +22,25 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Core\Utility\PathUtility;
 use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
 use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
-use TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper;
+use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
 
 /**
  * ViewHelper for update script link
  * @internal
  */
-class ReloadSqlDataViewHelper extends ActionViewHelper
+class ReloadSqlDataViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
      */
-    protected static $registryNamespace = 'extensionDataImport';
+    protected $tagName = 'a';
+
+    protected static string $registryNamespace = 'extensionDataImport';
 
     public function initializeArguments()
     {
         parent::initializeArguments();
+        $this->registerUniversalTagAttributes();
         $this->registerArgument('extension', 'array', 'Extension key', true);
     }
 
@@ -79,7 +82,11 @@ class ReloadSqlDataViewHelper extends ActionViewHelper
         $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
         $uriBuilder->setRequest($this->renderingContext->getRequest());
         $uriBuilder->reset();
-        $uri = $uriBuilder->uriFor('reloadExtensionData', ['extension' => $extension['key']], 'Action');
+        $uri = $uriBuilder->uriFor(
+            'reloadExtensionData',
+            ['extension' => $extension['key']],
+            'Action'
+        );
         $this->tag->addAttribute('href', $uri);
         $this->tag->addAttribute('title', LocalizationUtility::translate($languageKey, 'extensionmanager'));
         $this->tag->setContent($iconFactory->getIcon($iconIdentifier, Icon::SIZE_SMALL)->render());
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/RemoveExtensionViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/RemoveExtensionViewHelper.php
index c2172bad211b..2d9543f6173c 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/RemoveExtensionViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/RemoveExtensionViewHelper.php
@@ -22,22 +22,23 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
 use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
 use TYPO3\CMS\Extensionmanager\Domain\Model\Extension;
-use TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper;
+use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
 
 /**
  * ViewHelper for displaying a remove extension link
  * @internal
  */
-class RemoveExtensionViewHelper extends ActionViewHelper
+class RemoveExtensionViewHelper extends AbstractTagBasedViewHelper
 {
     /**
-     * Initialize arguments
-     *
-     * @throws \TYPO3Fluid\Fluid\Core\ViewHelper\Exception
+     * @var string
      */
+    protected $tagName = 'a';
+
     public function initializeArguments()
     {
         parent::initializeArguments();
+        $this->registerUniversalTagAttributes();
         $this->registerArgument('extension', 'array', '', true);
     }
 
@@ -62,15 +63,15 @@ class RemoveExtensionViewHelper extends ActionViewHelper
         /** @var UriBuilder $uriBuilder */
         $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
         $uriBuilder->setRequest($this->renderingContext->getRequest());
-        $action = 'removeExtension';
         $uriBuilder->reset();
         $uriBuilder->setFormat('json');
-        $uri = $uriBuilder->uriFor($action, [
-            'extension' => $extension['key'],
-        ], 'Action');
+        $uri = $uriBuilder->uriFor(
+            'removeExtension',
+            ['extension' => $extension['key']],
+            'Action'
+        );
         $this->tag->addAttribute('href', $uri);
-        $cssClass = 'removeExtension btn btn-default';
-        $this->tag->addAttribute('class', $cssClass);
+        $this->tag->addAttribute('class', $this->arguments['class']);
         $this->tag->addAttribute('title', LocalizationUtility::translate('extensionList.remove', 'extensionmanager'));
         $this->tag->setContent($iconFactory->getIcon('actions-edit-delete', Icon::SIZE_SMALL)->render());
         return $this->tag->render();
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ToggleExtensionInstallationStateViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ToggleExtensionInstallationStateViewHelper.php
index 781b21e623db..dbc7921b135b 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ToggleExtensionInstallationStateViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ToggleExtensionInstallationStateViewHelper.php
@@ -22,13 +22,13 @@ use TYPO3\CMS\Core\Package\PackageManager;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
 use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
-use TYPO3\CMS\Fluid\ViewHelpers\Link\ActionViewHelper;
+use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
 
 /**
  * Display a deactivate / activate link
  * @internal
  */
-class ToggleExtensionInstallationStateViewHelper extends ActionViewHelper
+class ToggleExtensionInstallationStateViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
@@ -41,6 +41,7 @@ class ToggleExtensionInstallationStateViewHelper extends ActionViewHelper
     public function initializeArguments()
     {
         parent::initializeArguments();
+        $this->registerUniversalTagAttributes();
         $this->registerArgument('extension', 'array', '', true);
     }
 
@@ -68,16 +69,16 @@ class ToggleExtensionInstallationStateViewHelper extends ActionViewHelper
 
         $uriBuilder = GeneralUtility::makeInstance(UriBuilder::class);
         $uriBuilder->setRequest($this->renderingContext->getRequest());
-        $action = 'toggleExtensionInstallationState';
-        $uri = $uriBuilder->reset()->uriFor($action, [
-            'extensionKey' => $extension['key'],
-        ], 'Action');
+        $uri = $uriBuilder->reset()->uriFor(
+            'toggleExtensionInstallationState',
+            ['extensionKey' => $extension['key']],
+            'Action'
+        );
         $this->tag->addAttribute('href', $uri);
         $label = $extension['installed'] ? 'deactivate' : 'activate';
         $this->tag->addAttribute('title', LocalizationUtility::translate('extensionList.' . $label, 'extensionmanager'));
         $icon = $extension['installed'] ? 'uninstall' : 'install';
         $this->tag->addAttribute('class', 'onClickMaskExtensionManager btn btn-default');
-
         $iconFactory = GeneralUtility::makeInstance(IconFactory::class);
         $this->tag->setContent($iconFactory->getIcon('actions-system-extension-' . $icon, Icon::SIZE_SMALL)->render());
         return $this->tag->render();
diff --git a/typo3/sysext/extensionmanager/Resources/Private/Templates/List/Index.html b/typo3/sysext/extensionmanager/Resources/Private/Templates/List/Index.html
index 8b26f7042907..9e52e9debaf9 100644
--- a/typo3/sysext/extensionmanager/Resources/Private/Templates/List/Index.html
+++ b/typo3/sysext/extensionmanager/Resources/Private/Templates/List/Index.html
@@ -125,7 +125,7 @@
                         <div class="btn-group">
                             <em:processAvailableActions extension="{extension}">
                                 <f:if condition="!{isComposerMode}">
-                                    <em:removeExtension class="btn btn-default" extension="{extension}" />
+                                    <em:removeExtension class="removeExtension btn btn-default" extension="{extension}" />
                                     <f:link.action action="downloadExtensionZip" controller="Action" arguments="{extension:extension.key}" title="{f:translate(key:'extensionList.downloadzip')}" class="btn btn-default">
                                         <core:icon identifier="actions-system-extension-download" />
                                     </f:link.action>
-- 
GitLab