/** * Shows a list of unresolved dependency errors with the possibility to bypass the dependency check * * @param string $extensionKey * @throws ExtensionManagerException * @return void */ public function unresolvedDependenciesAction($extensionKey) { $availableExtensions = $this->listUtility->getAvailableExtensions(); if (isset($availableExtensions[$extensionKey])) { $extensionArray = $this->listUtility->enrichExtensionsWithEmConfAndTerInformation(array($extensionKey => $availableExtensions[$extensionKey])); /** @var ExtensionModelUtility $extensionModelUtility */ $extensionModelUtility = $this->objectManager->get('TYPO3\\CMS\\Extensionmanager\\Utility\\ExtensionModelUtility'); $extension = $extensionModelUtility->mapExtensionArrayToModel($extensionArray[$extensionKey]); } else { throw new ExtensionManagerException('Extension ' . $extensionKey . ' is not available', 1402421007); } $this->dependencyUtility->checkDependencies($extension); $this->view->assign('extension', $extension); $this->view->assign('unresolvedDependencies', $this->dependencyUtility->getDependencyErrors()); }
/** * Action for listing all possible distributions * * @param bool $showUnsuitableDistributions * @return void */ public function distributionsAction($showUnsuitableDistributions = false) { $this->addComposerModeNotification(); $importExportInstalled = ExtensionManagementUtility::isLoaded('impexp'); if ($importExportInstalled) { try { /** @var $repositoryHelper Helper */ $repositoryHelper = $this->objectManager->get(Helper::class); // Check if a TER update has been done at all, if not, fetch it directly // Repository needs an update, but not because of the extension hash has changed $isExtListUpdateNecessary = $repositoryHelper->isExtListUpdateNecessary(); if ($isExtListUpdateNecessary > 0 && ($isExtListUpdateNecessary & $repositoryHelper::PROBLEM_EXTENSION_HASH_CHANGED) === 0) { $repositoryHelper->updateExtList(); } } catch (ExtensionManagerException $e) { $this->addFlashMessage($e->getMessage(), $e->getCode(), FlashMessage::ERROR); } $officialDistributions = $this->extensionRepository->findAllOfficialDistributions(); $communityDistributions = $this->extensionRepository->findAllCommunityDistributions(); if (!$showUnsuitableDistributions) { $suitableOfficialDistributions = $this->dependencyUtility->getExtensionsSuitableForTypo3Version($officialDistributions); $this->view->assign('officialDistributions', $suitableOfficialDistributions); $suitableCommunityDistributions = $this->dependencyUtility->getExtensionsSuitableForTypo3Version($communityDistributions); $this->view->assign('communityDistributions', $suitableCommunityDistributions); } else { $this->view->assign('officialDistributions', $officialDistributions); $this->view->assign('communityDistributions', $communityDistributions); } } $this->view->assign('enableDistributionsView', $importExportInstalled); $this->view->assign('showUnsuitableDistributions', $showUnsuitableDistributions); }
/** * Helper function to uninstall an extension * * @param string $extensionKey * @throws \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException * @return void */ public function uninstall($extensionKey) { $dependentExtensions = $this->dependencyUtility->findInstalledExtensionsThatDependOnMe($extensionKey); if (is_array($dependentExtensions) && count($dependentExtensions) > 0) { throw new \TYPO3\CMS\Extensionmanager\Exception\ExtensionManagerException('Cannot deactivate extension ' . $extensionKey . ' - The extension(s) ' . implode(',', $dependentExtensions) . ' depend on it', 1342554622); } else { $this->unloadExtension($extensionKey); } }
/** * Get and resolve dependencies * * @param \TYPO3\CMS\Extensionmanager\Domain\Model\Extension $extension * @return array */ public function getAndResolveDependencies(\TYPO3\CMS\Extensionmanager\Domain\Model\Extension $extension) { $this->dependencyUtility->buildExtensionDependenciesTree($extension); $installQueue = $this->downloadQueue->getExtensionInstallStorage(); if (is_array($installQueue) && count($installQueue) > 0) { $installQueue = array('install' => $installQueue); } return array_merge($this->downloadQueue->getExtensionQueue(), $installQueue); }
/** * Get and resolve dependencies * * @param Extension $extension * @return array */ public function getAndResolveDependencies(Extension $extension) { $this->dependencyUtility->setSkipDependencyCheck($this->skipDependencyCheck); $this->dependencyUtility->checkDependencies($extension); $installQueue = $this->downloadQueue->getExtensionInstallStorage(); if (is_array($installQueue) && !empty($installQueue)) { $installQueue = array('install' => $installQueue); } return array_merge($this->downloadQueue->getExtensionQueue(), $installQueue); }
/** * Returns the updateable version for an extension which also resolves dependencies. * * @internal * @param Extension $extensionData * @return bool|Extension FALSE if no update available otherwise latest possible update */ public function getUpdateableVersion(Extension $extensionData) { // Only check for update for TER extensions $version = $extensionData->getIntegerVersion(); /** @var $extensionUpdates[] \TYPO3\CMS\Extensionmanager\Domain\Model\Extension */ $extensionUpdates = $this->extensionRepository->findByVersionRangeAndExtensionKeyOrderedByVersion($extensionData->getExtensionKey(), $version + 1); if ($extensionUpdates->count() > 0) { foreach ($extensionUpdates as $extensionUpdate) { $this->dependencyUtility->checkDependencies($extensionUpdate); if (!$this->dependencyUtility->hasDependencyErrors()) { return $extensionUpdate; } } } return FALSE; }
/** * Checks if an update for an extension is available * * @internal * @param \TYPO3\CMS\Extensionmanager\Domain\Model\Extension $extensionData * @return boolean */ public function isUpdateAvailable(\TYPO3\CMS\Extensionmanager\Domain\Model\Extension $extensionData) { $isUpdateAvailable = FALSE; // Only check for update for TER extensions $version = $extensionData->getIntegerVersion(); /** @var $highestTerVersionExtension \TYPO3\CMS\Extensionmanager\Domain\Model\Extension */ $highestTerVersionExtension = $this->extensionRepository->findHighestAvailableVersion($extensionData->getExtensionKey()); if ($highestTerVersionExtension instanceof \TYPO3\CMS\Extensionmanager\Domain\Model\Extension) { $highestVersion = $highestTerVersionExtension->getIntegerVersion(); if ($highestVersion > $version) { $this->dependencyUtility->checkDependencies($highestTerVersionExtension); if (!$this->dependencyUtility->hasDependencyErrors()) { $isUpdateAvailable = TRUE; } } } return $isUpdateAvailable; }