Пример #1
0
 /**
  * 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());
 }
Пример #2
0
 /**
  * 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);
 }
Пример #3
0
 /**
  * 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);
 }
Пример #6
0
 /**
  * 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;
 }
Пример #7
0
 /**
  * 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;
 }