2 namespace TYPO3\CMS\Extensionmanager\Utility;
21 use TYPO3\CMS\Extensionmanager\Exception;
130 $this->availableExtensions = $this->listUtility->getAvailableExtensions();
148 public function checkDependencies(
Extension $extension)
150 $this->dependencyErrors = array();
151 $dependencies = $extension->getDependencies();
152 foreach ($dependencies as $dependency) {
154 $identifier = strtolower($dependency->getIdentifier());
157 if (!$this->skipDependencyCheck) {
158 $methodName =
'check' . ucfirst($identifier) .
'Dependency';
159 $this->{$methodName}($dependency);
162 if ($dependency->getType() ===
'depends') {
166 }
catch (Exception\UnresolvedDependencyException $e) {
170 $extensionKey = $identifier;
172 if (!isset($this->dependencyErrors[$extensionKey])) {
173 $this->dependencyErrors[$extensionKey] = array();
175 $this->dependencyErrors[$extensionKey][] = array(
176 'code' => $e->getCode(),
177 'message' => $e->getMessage()
190 return !empty($this->dependencyErrors);
212 $lowerCaseIdentifier = strtolower($dependency->
getIdentifier());
213 if ($lowerCaseIdentifier ===
'typo3') {
216 'Your TYPO3 version is lower than this extension requires. It requires TYPO3 versions ' . $dependency->
getLowestVersion() .
' - ' . $dependency->
getHighestVersion(),
222 'Your TYPO3 version is higher than this extension requires. It requires TYPO3 versions ' . $dependency->
getLowestVersion() .
' - ' . $dependency->
getHighestVersion(),
228 'checkTypo3Dependency can only check TYPO3 dependencies. Found dependency with identifier "' . $dependency->
getIdentifier() .
'"',
244 $lowerCaseIdentifier = strtolower($dependency->
getIdentifier());
245 if ($lowerCaseIdentifier ===
'php') {
248 'Your PHP version is lower than necessary. You need at least PHP version ' . $dependency->
getLowestVersion(),
260 'checkPhpDependency can only check PHP dependencies. Found dependency with identifier "' . $dependency->
getIdentifier() .
'"',
283 if ($extensionIsLoaded ===
true) {
285 if ($isLoadedVersionCompatible ===
true || $this->skipDependencyCheck) {
288 $extension = $this->listUtility->getExtension($extensionKey);
289 $loadedVersion = $extension->getPackageMetaData()->
getVersion();
295 'The extension ' . $extensionKey .
' is installed in version ' . $loadedVersion
302 'The extension ' . $extensionKey .
' is installed in version ' . $loadedVersion .
309 if ($extensionIsAvailable ===
true) {
311 if ($isAvailableVersionCompatible) {
313 $this->managementService->markExtensionForInstallation($extensionKey);
314 $this->dependencyErrors = array_merge($unresolvedDependencyErrors, $this->dependencyErrors);
316 $extension = $this->listUtility->getExtension($extensionKey);
317 $availableVersion = $extension->getPackageMetaData()->
getVersion();
318 if (version_compare($availableVersion, $dependency->
getHighestVersion()) === -1) {
322 if (!$this->skipDependencyCheck) {
324 'The extension ' . $extensionKey .
' is available in version ' . $availableVersion
331 if (!$this->skipDependencyCheck) {
333 'The extension ' . $extensionKey .
' is available in version ' . $availableVersion
343 $this->dependencyErrors = array_merge($unresolvedDependencyErrors, $this->dependencyErrors);
375 if ($this->localExtensionStorage !==
'' && is_dir($this->localExtensionStorage)) {
376 $extList = \TYPO3\CMS\Core\Utility\GeneralUtility::get_dirs($this->localExtensionStorage);
377 if (in_array($extensionKey, $extList)) {
378 $this->managementService->markExtensionForCopy($extensionKey, $this->localExtensionStorage);
397 if (!$isExtensionDownloadableFromTer) {
398 if (!$this->skipDependencyCheck) {
399 if ($this->extensionRepository->countAll() > 0) {
401 'The extension ' . $extensionKey .
' is not available from TER.',
406 'The extension ' . $extensionKey .
' could not be checked. Please update your Extension-List from TYPO3 Extension Repository (TER).',
415 if (!$isDownloadableVersionCompatible) {
416 if (!$this->skipDependencyCheck) {
418 'No compatible version found for extension ' . $extensionKey,
426 if (!$latestCompatibleExtensionByIntegerVersionDependency instanceof
Extension) {
427 if (!$this->skipDependencyCheck) {
429 'Could not resolve dependency for "' . $dependency->
getIdentifier() .
'"',
437 $this->managementService->markExtensionForUpdate($latestCompatibleExtensionByIntegerVersionDependency);
439 $this->managementService->markExtensionForDownload($latestCompatibleExtensionByIntegerVersionDependency);
488 return array_key_exists($extensionKey, $this->availableExtensions);
500 $extensionData = $this->emConfUtility->includeEmConf($this->availableExtensions[$dependency->
getIdentifier()]);
512 return $this->extensionRepository->countByExtensionKey($extensionKey) > 0;
524 $count = $this->extensionRepository->countByVersionRangeAndExtensionKey(
525 $dependency->
getIdentifier(), $versions[
'lowestIntegerVersion'], $versions[
'highestIntegerVersion']
527 return !empty($count);
540 $compatibleDataSets = $this->extensionRepository->findByVersionRangeAndExtensionKeyOrderedByVersion(
542 $versions[
'lowestIntegerVersion'],
543 $versions[
'highestIntegerVersion']
545 return $compatibleDataSets->getFirst();
561 'lowestIntegerVersion' => $lowestVersionInteger,
562 'highestIntegerVersion' => $highestVersionInteger
572 $availableAndInstalledExtensions = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation();
573 $dependentExtensions = array();
574 foreach ($availableAndInstalledExtensions as $availableAndInstalledExtensionKey => $availableAndInstalledExtension) {
575 if (isset($availableAndInstalledExtension[
'installed']) && $availableAndInstalledExtension[
'installed'] ===
true) {
576 if (is_array($availableAndInstalledExtension[
'constraints']) && is_array($availableAndInstalledExtension[
'constraints'][
'depends']) && array_key_exists($extensionKey, $availableAndInstalledExtension[
'constraints'][
'depends'])) {
577 $dependentExtensions[] = $availableAndInstalledExtensionKey;
581 return $dependentExtensions;
590 public function getExtensionsSuitableForTypo3Version($extensions)
592 $suitableExtensions = array();
594 foreach ($extensions as $extension) {
596 foreach ($extension->getDependencies() as $dependency) {
597 if ($dependency->getIdentifier() ===
'typo3') {
600 array_push($suitableExtensions, $extension);
602 }
catch (Exception\UnresolvedTypo3DependencyException $e) {
608 return $suitableExtensions;