[BUGFIX] Do not try to download extensions in composer mode 07/56607/6
authorHelmut Hummel <typo3@helhum.io>
Fri, 6 Apr 2018 10:55:08 +0000 (12:55 +0200)
committerHelmut Hummel <typo3@helhum.io>
Tue, 10 Apr 2018 12:39:44 +0000 (14:39 +0200)
Upgrade wizards that download extensions from TER must
no do so in composer mode as they would create an unusable
system.

But in case the extension is found, in the system, these wizards
still activate them.

Resolves: #82318
Releases: master, 8.7
Change-Id: I5ad1fdfeb81ad809497d8a88db32325639cd236b
Reviewed-on: https://review.typo3.org/56607
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Helmut Hummel <typo3@helhum.io>
Tested-by: Helmut Hummel <typo3@helhum.io>
typo3/sysext/install/Classes/Updates/AbstractDownloadExtensionUpdate.php
typo3/sysext/install/Classes/Updates/Compatibility6ExtractionUpdate.php
typo3/sysext/install/Classes/Updates/Compatibility7ExtractionUpdate.php
typo3/sysext/install/Classes/Updates/DbalAndAdodbExtractionUpdate.php
typo3/sysext/install/Classes/Updates/FormLegacyExtractionUpdate.php
typo3/sysext/install/Classes/Updates/MediaceExtractionUpdate.php
typo3/sysext/install/Classes/Updates/OpenidExtractionUpdate.php
typo3/sysext/install/Classes/Updates/RteHtmlAreaExtractionUpdate.php

index 45be31f..00fdb42 100644 (file)
@@ -14,6 +14,7 @@ namespace TYPO3\CMS\Install\Updates;
  * The TYPO3 project - inspiring people to share!
  */
 
+use TYPO3\CMS\Core\Core\Bootstrap;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Extensionmanager\Utility\Connection\TerUtility;
@@ -58,15 +59,15 @@ abstract class AbstractDownloadExtensionUpdate extends AbstractUpdate
 
         /** @var $extensionListUtility ListUtility */
         $extensionListUtility = $objectManager->get(ListUtility::class);
-
         $availableExtensions = $extensionListUtility->getAvailableExtensions();
-        $availableAndInstalledExtensions = $extensionListUtility->getAvailableAndInstalledExtensions($availableExtensions);
+        $extensionDetails = $this->getExtensionDetails($extensionKey);
+
+        $isExtensionAvailable = !empty($availableExtensions[$extensionKey]);
+        $isComposerMode = Bootstrap::usesComposerClassLoading();
 
-        // Extension is not downloaded yet.
-        if (!is_array($availableAndInstalledExtensions[$extensionKey])) {
+        if (!$isComposerMode && !$isExtensionAvailable) {
             /** @var $extensionTerUtility TerUtility */
             $extensionTerUtility = $objectManager->get(TerUtility::class);
-            $extensionDetails = $this->getExtensionDetails($extensionKey);
             if (empty($extensionDetails)) {
                 $updateSuccessful = false;
                 $customMessage .= 'No version information for extension ' . $extensionKey . ' found. Can not install the extension.';
@@ -90,11 +91,20 @@ abstract class AbstractDownloadExtensionUpdate extends AbstractUpdate
             $extensionListUtility->reloadAvailableExtensions();
         }
 
-        if ($updateSuccessful !== false) {
+        if ($isComposerMode && !$isExtensionAvailable) {
+            $updateSuccessful = false;
+            $customMessage .= 'The extension ' . $extensionKey . ' can not be downloaded since ' .
+              'Composer is used for package management. Please require this ' .
+              'extension as package via Composer: ' .
+              '"composer require ' . $extensionDetails['composerName'] . ':^' . $extensionDetails['versionString'] . '"';
+        }
+
+        if ($updateSuccessful) {
             /** @var $extensionInstallUtility InstallUtility */
             $extensionInstallUtility = $objectManager->get(InstallUtility::class);
             $extensionInstallUtility->install($extensionKey);
         }
+
         return $updateSuccessful;
     }
 
index 07a31db..9ed83b9 100644 (file)
@@ -39,7 +39,8 @@ class Compatibility6ExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'Compatibility Mode for TYPO3 CMS 6.x',
             'description' => 'Provides an additional backwards-compatibility layer with legacy functionality for sites that haven\'t fully migrated to TYPO3 v7 yet.',
             'versionString' => '7.6.4',
-        ]
+            'composerName' => 'friendsoftypo3/compatibility6',
+        ],
     ];
 
     /**
index 189bd91..b6aa71b 100644 (file)
@@ -39,7 +39,8 @@ class Compatibility7ExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'Compatibility Mode for TYPO3 v7',
             'description' => 'Provides an additional backwards-compatibility layer with legacy functionality for sites that haven\'t fully migrated to TYPO3 v8 yet.',
             'versionString' => '8.7.1',
-        ]
+            'composerName' => 'friendsoftypo3/compatibility7',
+        ],
     ];
 
     /**
index 906d0c7..3e0fb79 100644 (file)
@@ -34,12 +34,14 @@ class DbalAndAdodbExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'ADOdb',
             'description' => 'Adds ADOdb to TYPO3',
             'versionString' => '8.4.0',
+            'composerName' => 'friendsoftypo3/adodb',
         ],
         'dbal' => [
             'title' => 'dbal',
             'description' => 'Adds old database abstraction layer to TYPO3',
             'versionString' => '8.4.0',
-        ]
+            'composerName' => 'friendsoftypo3/dbal',
+        ],
     ];
 
     /**
index 6aeb780..11c9f35 100644 (file)
@@ -42,7 +42,8 @@ class FormLegacyExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'Legacy form extension for TYPO3 v7 compatibility',
             'description' => 'Provides an additional backwards-compatibility layer with legacy functionality for sites that used the form extension in TYPO3 v7.',
             'versionString' => '8.7.0',
-        ]
+            'composerName' => 'friendsoftypo3/form-legacy',
+        ],
     ];
 
     /**
index 39ba906..e86a110 100644 (file)
@@ -44,7 +44,8 @@ class MediaceExtractionUpdate extends AbstractDownloadExtensionUpdate
             'description' => 'The media functionality from TYPO3 6.2 and earlier can be found here.'
                 . ' This extension provides ContentObjects and Content Elements.',
             'versionString' => '7.6.3',
-        ]
+            'composerName' => 'friendsoftypo3/mediace',
+        ],
     ];
 
     /**
index f83c2cd..c9cd5d3 100644 (file)
@@ -40,7 +40,8 @@ class OpenidExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'OpenID authentication',
             'description' => 'Adds OpenID authentication to TYPO3',
             'versionString' => '7.6.4',
-        ]
+            'composerName' => 'friendsoftypo3/openid',
+        ],
     ];
 
     /**
index 0237106..e1604d2 100644 (file)
@@ -39,7 +39,8 @@ class RteHtmlAreaExtractionUpdate extends AbstractDownloadExtensionUpdate
             'title' => 'RTE HTMLArea for TYPO3',
             'description' => 'Provides the well-known RTE used in previous TYPO3 versions, if handling of images or custom configurations are necessary.',
             'versionString' => '8.7.0',
-        ]
+            'composerName' => 'friendsoftypo3/rtehtmlarea',
+        ],
     ];
 
     /**