94 $this->availableExtensions = $this->listUtility->getAvailableExtensions();
102 $this->skipSystemDependencyCheck = $skipSpecialDependencyCheck;
111 public function checkDependencies(
Extension $extension) {
112 $this->dependencyErrors = array();
113 $dependencies = $extension->getDependencies();
114 foreach ($dependencies as $dependency) {
116 $identifier = strtolower($dependency->getIdentifier());
119 if (!$this->skipSystemDependencyCheck) {
120 $methodName =
'check' . ucfirst($identifier) .
'Dependency';
121 $this->{$methodName}($dependency);
124 if ($dependency->getType() ===
'depends') {
132 $extensionKey = $identifier;
134 if (!isset($this->dependencyErrors[$extensionKey])) {
135 $this->dependencyErrors[$extensionKey] = array();
137 $this->dependencyErrors[$extensionKey][] = array(
138 'code' => $e->getCode(),
139 'message' => $e->getMessage()
151 return !empty($this->dependencyErrors);
171 $lowerCaseIdentifier = strtolower($dependency->
getIdentifier());
172 if ($lowerCaseIdentifier ===
'typo3') {
175 'Your TYPO3 version is lower than this extension requires. It requires TYPO3 versions ' . $dependency->
getLowestVersion() .
' - ' . $dependency->
getHighestVersion(),
181 'Your TYPO3 version is higher than this extension requires. It requires TYPO3 versions ' . $dependency->
getLowestVersion() .
' - ' . $dependency->
getHighestVersion(),
187 'checkTypo3Dependency can only check TYPO3 dependencies. Found dependency with identifier "' . $dependency->
getIdentifier() .
'"',
202 $lowerCaseIdentifier = strtolower($dependency->
getIdentifier());
203 if ($lowerCaseIdentifier ===
'php') {
206 'Your PHP version is lower than necessary. You need at least PHP version ' . $dependency->
getLowestVersion(),
218 'checkPhpDependency can only check PHP dependencies. Found dependency with identifier "' . $dependency->
getIdentifier() .
'"',
240 if ($extensionIsLoaded === TRUE) {
242 if ($isLoadedVersionCompatible === TRUE) {
245 $extension = $this->listUtility->getExtension($extensionKey);
246 $loadedVersion = $extension->getPackageMetaData()->
getVersion();
252 'The extension ' . $extensionKey .
' is installed in version ' . $loadedVersion
259 'The extension ' . $extensionKey .
' is installed in version ' . $loadedVersion .
266 if ($extensionIsAvailable === TRUE) {
268 if ($isAvailableVersionCompatible) {
270 $this->managementService->markExtensionForInstallation($extensionKey);
271 $this->dependencyErrors = array_merge($unresolvedDependencyErrors, $this->dependencyErrors);
273 $extension = $this->listUtility->getExtension($extensionKey);
274 $availableVersion = $extension->getPackageMetaData()->
getVersion();
275 if (version_compare($availableVersion, $dependency->
getHighestVersion()) === -1) {
280 'The extension ' . $extensionKey .
' is available in version ' . $availableVersion
287 'The extension ' . $extensionKey .
' is available in version ' . $availableVersion
296 $this->dependencyErrors = array_merge($unresolvedDependencyErrors, $this->dependencyErrors);
325 if ($this->localExtensionStorage !==
'' && is_dir($this->localExtensionStorage)) {
327 if (in_array($extensionKey, $extList)) {
328 $this->managementService->markExtensionForCopy($extensionKey, $this->localExtensionStorage);
346 if (!$isExtensionDownloadableFromTer) {
347 if (!$this->skipSystemDependencyCheck) {
348 if ($this->extensionRepository->countAll() > 0) {
350 'The extension ' . $extensionKey .
' is not available from TER.',
355 'The extension ' . $extensionKey .
' could not be checked. Please update your Extension-List from TYPO3 Extension Repository (TER).',
364 if (!$isDownloadableVersionCompatible) {
365 if (!$this->skipSystemDependencyCheck) {
367 'No compatible version found for extension ' . $extensionKey,
375 if (!$latestCompatibleExtensionByIntegerVersionDependency instanceof
Extension) {
376 if (!$this->skipSystemDependencyCheck) {
378 'Could not resolve dependency for "' . $dependency->
getIdentifier() .
'"',
386 $this->managementService->markExtensionForUpdate($latestCompatibleExtensionByIntegerVersionDependency);
388 $this->managementService->markExtensionForDownload($latestCompatibleExtensionByIntegerVersionDependency);
433 return array_key_exists($extensionKey, $this->availableExtensions);
444 $extensionData = $this->emConfUtility->includeEmConf($this->availableExtensions[$dependency->
getIdentifier()]);
455 return $this->extensionRepository->countByExtensionKey($extensionKey) > 0;
466 $count = $this->extensionRepository->countByVersionRangeAndExtensionKey(
467 $dependency->
getIdentifier(), $versions[
'lowestIntegerVersion'], $versions[
'highestIntegerVersion']
469 return !empty($count);
481 $compatibleDataSets = $this->extensionRepository->findByVersionRangeAndExtensionKeyOrderedByVersion(
483 $versions[
'lowestIntegerVersion'],
484 $versions[
'highestIntegerVersion']
486 return $compatibleDataSets->getFirst();
501 'lowestIntegerVersion' => $lowestVersionInteger,
502 'highestIntegerVersion' => $highestVersionInteger
507 $availableAndInstalledExtensions = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation();
508 $dependentExtensions = array();
509 foreach ($availableAndInstalledExtensions as $availableAndInstalledExtensionKey => $availableAndInstalledExtension) {
510 if (isset($availableAndInstalledExtension[
'installed']) && $availableAndInstalledExtension[
'installed'] === TRUE) {
511 if (is_array($availableAndInstalledExtension[
'constraints']) && is_array($availableAndInstalledExtension[
'constraints'][
'depends']) && array_key_exists($extensionKey, $availableAndInstalledExtension[
'constraints'][
'depends'])) {
512 $dependentExtensions[] = $availableAndInstalledExtensionKey;
516 return $dependentExtensions;
getExtensionFromRepository($extensionKey, Dependency $dependency)
isDownloadableVersionCompatible(Dependency $dependency)
checkPhpDependency(Dependency $dependency)
checkTypo3Dependency(Dependency $dependency)
getExtensionFromTer($extensionKey, Dependency $dependency)
setSkipSystemDependencyCheck($skipSpecialDependencyCheck)
checkExtensionDependency(Dependency $dependency)
isDependentExtensionAvailable($extensionKey)
getLowestAndHighestIntegerVersions(Dependency $dependency)
$skipSystemDependencyCheck
getExtensionFromInExtensionRepository($extensionKey)
isDependentExtensionLoaded($extensionKey)
isAvailableVersionCompatible(Dependency $dependency)
setLocalExtensionStorage($localExtensionStorage)
isExtensionDownloadableFromTer($extensionKey)
static getExtensionVersion($key)
static isLoaded($key, $exitOnError=FALSE)
isVersionCompatible($version, Dependency $dependency)
static convertVersionNumberToInteger($versionNumber)
findInstalledExtensionsThatDependOnMe($extensionKey)
isLoadedVersionCompatible(Dependency $dependency)
static $specialDependencies
getLatestCompatibleExtensionByIntegerVersionDependency(Dependency $dependency)
static getNumericTypo3Version()