2 namespace TYPO3\CMS\Install\Updates;
33 protected $title =
'Install an Extension from the Extension Repository';
54 protected function installExtension($extensionKey, &$customMessages)
56 $updateSuccessful =
true;
61 $extensionListUtility = $objectManager->get(ListUtility::class);
63 $availableExtensions = $extensionListUtility->getAvailableExtensions();
64 $availableAndInstalledExtensions = $extensionListUtility->getAvailableAndInstalledExtensions($availableExtensions);
67 if (!is_array($availableAndInstalledExtensions[$extensionKey])) {
69 $extensionTerUtility = $objectManager->get(TerUtility::class);
72 $updateSuccessful =
false;
73 $customMessages .=
'No version information for extension ' . $extensionKey .
' found. Can not install the extension.';
76 if (empty($t3xContent)) {
77 $updateSuccessful =
false;
78 $customMessages .=
'The extension ' . $extensionKey .
' could not be downloaded.';
80 $t3xExtracted = $extensionTerUtility->decodeExchangeData($t3xContent);
81 if (empty($t3xExtracted) || !is_array($t3xExtracted) || empty($t3xExtracted[
'extKey'])) {
82 $updateSuccessful =
false;
83 $customMessages .=
'The extension ' . $extensionKey .
' could not be extracted.';
87 $extensionFileHandlingUtility = $objectManager->get(FileHandlingUtility::class);
88 $extensionFileHandlingUtility->unpackExtensionFromExtensionDataArray($t3xExtracted);
91 $extensionListUtility->reloadAvailableExtensions();
94 if ($updateSuccessful !==
false) {
96 $extensionInstallUtility = $objectManager->get(InstallUtility::class);
97 $extensionInstallUtility->install($extensionKey);
99 return $updateSuccessful;
111 if (array_key_exists($extensionKey, $this->extensionDetails)) {
112 return $this->extensionDetails[$extensionKey];
129 if (empty($extensionKey) || empty($version)) {
130 throw new \InvalidArgumentException(
'No extension key for fetching an extension was given.',
134 $filename = $extensionKey[0] .
'/' . $extensionKey[1] .
'/' . $extensionKey .
'_' . $version .
'.t3x';
135 $url = str_replace(
'@filename',
$filename, $this->repositoryUrl);
155 throw new \InvalidArgumentException(
'No URL for downloading an extension given.',
162 if ($fileContent ===
false) {
163 throw new \RuntimeException(
'Can not fetch URL "' .
$url .
'". Possible reasons are network problems or misconfiguration.',