From 84b03aa5a71210cd047ddf92bb53a4d72a5e8849 Mon Sep 17 00:00:00 2001 From: Kevin Appelt <kevin.appelt@icloud.com> Date: Wed, 23 Feb 2022 15:41:24 +0100 Subject: [PATCH] [TASK] Allow extension scanner reporting for dirs outside typo3conf Resolves: #97008 Releases: main, 11.5 Change-Id: I00e34e4d43d1babd085435d096af773876480e49 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/73679 Tested-by: core-ci <typo3@b13.com> Tested-by: Helmut Hummel <typo3@helhum.io> Tested-by: Simon Gilli <typo3@gilbertsoft.org> Tested-by: Benni Mack <benni@typo3.org> Reviewed-by: Jan Helke <jh@f7.de> Reviewed-by: Simon Gilli <typo3@gilbertsoft.org> Reviewed-by: Benni Mack <benni@typo3.org> --- .../Classes/Controller/UpgradeController.php | 33 ++++++++++++++----- .../Private/Templates/Upgrade/Cards.html | 4 +-- .../Templates/Upgrade/ExtensionScanner.html | 8 ++--- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/typo3/sysext/install/Classes/Controller/UpgradeController.php b/typo3/sysext/install/Classes/Controller/UpgradeController.php index b04a5b99b404..7b2630c2b53e 100644 --- a/typo3/sysext/install/Classes/Controller/UpgradeController.php +++ b/typo3/sysext/install/Classes/Controller/UpgradeController.php @@ -193,11 +193,18 @@ class UpgradeController extends AbstractController public function cardsAction(ServerRequestInterface $request): ResponseInterface { $view = $this->initializeView($request); - $installedExtensions = 0; - if (is_dir(Environment::getExtensionsPath())) { - $installedExtensions = (new Finder())->directories()->in(Environment::getExtensionsPath())->depth(0)->count(); + $hasExtensions = false; + + foreach ($this->packageManager->getAvailablePackages() as $package) { + if (!$package->getPackageMetaData()->isExtensionType() || $package->getPackageMetaData()->isFrameworkType()) { + continue; + } + + $hasExtensions = true; + break; } - $view->assign('extensionFoldersInTypo3conf', $installedExtensions); + + $view->assign('hasExtensions', $hasExtensions); return new JsonResponse([ 'success' => true, 'html' => $view->render('Upgrade/Cards'), @@ -621,11 +628,19 @@ class UpgradeController extends AbstractController */ public function extensionScannerGetDataAction(ServerRequestInterface $request): ResponseInterface { - $extensionsInTypo3conf = (new Finder())->directories()->in(Environment::getExtensionsPath())->depth(0)->sortByName(); + $extensions = []; + foreach ($this->packageManager->getAvailablePackages() as $package) { + if (!$package->getPackageMetaData()->isExtensionType() || $package->getPackageMetaData()->isFrameworkType()) { + continue; + } + + $extensions[] = $package->getPackageKey(); + } + sort($extensions); $view = $this->initializeView($request); $formProtection = FormProtectionFactory::get(InstallToolFormProtection::class); $view->assignMultiple([ - 'extensionScannerExtensionList' => $extensionsInTypo3conf, + 'extensionScannerExtensionList' => $extensions, 'extensionScannerFilesToken' => $formProtection->generateToken('installTool', 'extensionScannerFiles'), 'extensionScannerScanFileToken' => $formProtection->generateToken('installTool', 'extensionScannerScanFile'), 'extensionScannerMarkFullyScannedRestFilesToken' => $formProtection->generateToken('installTool', 'extensionScannerMarkFullyScannedRestFiles'), @@ -652,7 +667,7 @@ class UpgradeController extends AbstractController { // Get and validate path $extension = $request->getParsedBody()['install']['extension']; - $extensionBasePath = Environment::getExtensionsPath() . '/' . $extension; + $extensionBasePath = $this->packageManager->getPackage($extension)->getPackagePath(); if (empty($extension) || !GeneralUtility::isAllowedAbsPath($extensionBasePath)) { throw new \RuntimeException( 'Path to extension ' . $extension . ' not allowed.', @@ -741,7 +756,7 @@ class UpgradeController extends AbstractController { // Get and validate path and file $extension = $request->getParsedBody()['install']['extension']; - $extensionBasePath = Environment::getExtensionsPath() . '/' . $extension; + $extensionBasePath = $this->packageManager->getPackage($extension)->getPackagePath(); if (empty($extension) || !GeneralUtility::isAllowedAbsPath($extensionBasePath)) { throw new \RuntimeException( 'Path to extension ' . $extension . ' not allowed.', @@ -755,7 +770,7 @@ class UpgradeController extends AbstractController ); } $file = $request->getParsedBody()['install']['file']; - $absoluteFilePath = $extensionBasePath . '/' . $file; + $absoluteFilePath = $extensionBasePath . $file; if (empty($file) || !GeneralUtility::isAllowedAbsPath($absoluteFilePath)) { throw new \RuntimeException( 'Path to file ' . $file . ' of extension ' . $extension . ' not allowed.', diff --git a/typo3/sysext/install/Resources/Private/Templates/Upgrade/Cards.html b/typo3/sysext/install/Resources/Private/Templates/Upgrade/Cards.html index 7b65ef06227a..a41b9e5d7261 100644 --- a/typo3/sysext/install/Resources/Private/Templates/Upgrade/Cards.html +++ b/typo3/sysext/install/Resources/Private/Templates/Upgrade/Cards.html @@ -68,12 +68,12 @@ <button type="button" class="btn btn-default" data-import="@typo3/install/module/upgrade/tca-migrations-check.js">Check TCA Migrations</button> </div> </div> - <div class="card card-size-fixed-small {f:if(condition:'!{extensionFoldersInTypo3conf}', then: 'card-disabled')}"> + <div class="card card-size-fixed-small {f:if(condition:'!{hasExtensions}', then: 'card-disabled')}"> <f:render partial="Card/Header" arguments="{ title: 'Scan Extension Files', subtitle: 'Extensions', icon: 'EXT:install/Resources/Public/Icons/modules/install-scan-extensions.svg'}" /> <div class="card-body"> <p class="card-text">Scan extensions for usage of deprecated or outdated TYPO3 API calls.</p> </div> - <f:if condition="{extensionFoldersInTypo3conf}"> + <f:if condition="{hasExtensions}"> <f:then> <div class="card-footer"> <button type="button" class="btn btn-default" data-import="@typo3/install/module/upgrade/extension-scanner.js">Scan Extension Files</button> diff --git a/typo3/sysext/install/Resources/Private/Templates/Upgrade/ExtensionScanner.html b/typo3/sysext/install/Resources/Private/Templates/Upgrade/ExtensionScanner.html index 9f703a143af7..1b2ce172ba95 100644 --- a/typo3/sysext/install/Resources/Private/Templates/Upgrade/ExtensionScanner.html +++ b/typo3/sysext/install/Resources/Private/Templates/Upgrade/ExtensionScanner.html @@ -68,10 +68,10 @@ <h2>Extensions</h2> <div class="panel-group panel-group-flat panel-group-scanner-extensions"> - <f:for each="{extensionScannerExtensionList}" as="extensionInTypo3conf" iteration="iterator"> + <f:for each="{extensionScannerExtensionList}" as="extension" iteration="iterator"> <div - class="panel panel-default panel-flat t3js-extensionScanner-extension t3js-extensionScanner-extension-{extensionInTypo3conf.filename}" - data-extension="{extensionInTypo3conf.filename}"> + class="panel panel-default panel-flat t3js-extensionScanner-extension t3js-extensionScanner-extension-{extension}" + data-extension="{extension}"> <div class="panel-progress"> <div class="panel-progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0;"><span class="sr-only"></span></div> </div> @@ -79,7 +79,7 @@ <h2 class="panel-title"> <a href="#extension-{iterator.index}" class="collapsed" data-bs-toggle="collapse"> <span class="caret"></span> - Extension: <strong>{extensionInTypo3conf.filename}</strong> + Extension: <strong>{extension}</strong> <span class="pull-right t3js-extensionScanner-number-of-files"></span> </a> </h2> -- GitLab