‪TYPO3CMS  10.4
DependencyUtility.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
32 
38 {
42  protected ‪$extensionRepository;
43 
47  protected ‪$listUtility;
48 
52  protected ‪$emConfUtility;
53 
58 
62  protected ‪$availableExtensions = [];
63 
67  protected ‪$localExtensionStorage = '';
68 
72  protected ‪$dependencyErrors = [];
73 
77  protected ‪$skipDependencyCheck = false;
78 
83  {
84  $this->extensionRepository = ‪$extensionRepository;
85  }
86 
91  {
92  $this->listUtility = ‪$listUtility;
93  }
94 
98  public function ‪injectEmConfUtility(EmConfUtility ‪$emConfUtility)
99  {
100  $this->emConfUtility = ‪$emConfUtility;
101  }
102 
107  {
108  $this->managementService = ‪$managementService;
109  }
110 
115  {
116  $this->localExtensionStorage = ‪$localExtensionStorage;
117  }
118 
123  protected function ‪setAvailableExtensions()
124  {
125  $this->availableExtensions = $this->listUtility->getAvailableExtensions();
126  }
127 
132  {
133  $this->skipDependencyCheck = ‪$skipDependencyCheck;
134  }
135 
141  public function ‪checkDependencies(‪Extension $extension)
142  {
143  $this->dependencyErrors = [];
144  $dependencies = $extension->‪getDependencies();
145  foreach ($dependencies as $dependency) {
147  $identifier = strtolower($dependency->getIdentifier());
148  try {
149  if (in_array($identifier, ‪Dependency::$specialDependencies)) {
150  if (!$this->skipDependencyCheck) {
151  $methodName = 'check' . ucfirst($identifier) . 'Dependency';
152  $this->{$methodName}($dependency);
153  }
154  } else {
155  if ($dependency->getType() === 'depends') {
156  $this->‪checkExtensionDependency($dependency);
157  }
158  }
159  } catch (‪UnresolvedDependencyException $e) {
160  if (in_array($identifier, ‪Dependency::$specialDependencies)) {
161  $extensionKey = $extension->‪getExtensionKey();
162  } else {
163  $extensionKey = $identifier;
164  }
165  if (!isset($this->dependencyErrors[$extensionKey])) {
166  $this->dependencyErrors[$extensionKey] = [];
167  }
168  $this->dependencyErrors[$extensionKey][] = [
169  'code' => $e->getCode(),
170  'message' => $e->getMessage()
171  ];
172  }
173  }
174  }
175 
181  public function ‪hasDependencyErrors()
182  {
183  return !empty($this->dependencyErrors);
184  }
185 
191  public function ‪getDependencyErrors()
192  {
194  }
195 
203  protected function ‪checkTypo3Dependency(‪Dependency $dependency)
204  {
205  $lowerCaseIdentifier = strtolower($dependency->‪getIdentifier());
206  if ($lowerCaseIdentifier === 'typo3') {
207  if (!($dependency->‪getLowestVersion() === '') && version_compare(‪VersionNumberUtility::getNumericTypo3Version(), $dependency->‪getLowestVersion()) === -1) {
209  'Your TYPO3 version is lower than this extension requires. It requires TYPO3 versions ' . $dependency->‪getLowestVersion() . ' - ' . $dependency->‪getHighestVersion(),
210  1399144499
211  );
212  }
213  if (!($dependency->‪getHighestVersion() === '') && version_compare($dependency->‪getHighestVersion(), ‪VersionNumberUtility::getNumericTypo3Version()) === -1) {
215  'Your TYPO3 version is higher than this extension requires. It requires TYPO3 versions ' . $dependency->‪getLowestVersion() . ' - ' . $dependency->‪getHighestVersion(),
216  1399144521
217  );
218  }
219  } else {
221  'checkTypo3Dependency can only check TYPO3 dependencies. Found dependency with identifier "' . $dependency->‪getIdentifier() . '"',
222  1399144551
223  );
224  }
225  return true;
226  }
227 
235  protected function ‪checkPhpDependency(‪Dependency $dependency)
236  {
237  $lowerCaseIdentifier = strtolower($dependency->‪getIdentifier());
238  if ($lowerCaseIdentifier === 'php') {
239  if (!($dependency->‪getLowestVersion() === '') && version_compare(PHP_VERSION, $dependency->‪getLowestVersion()) === -1) {
241  'Your PHP version is lower than necessary. You need at least PHP version ' . $dependency->‪getLowestVersion(),
242  1377977857
243  );
244  }
245  if (!($dependency->‪getHighestVersion() === '') && version_compare($dependency->‪getHighestVersion(), PHP_VERSION) === -1) {
247  'Your PHP version is higher than allowed. You can use PHP versions ' . $dependency->‪getLowestVersion() . ' - ' . $dependency->‪getHighestVersion(),
248  1377977856
249  );
250  }
251  } else {
253  'checkPhpDependency can only check PHP dependencies. Found dependency with identifier "' . $dependency->‪getIdentifier() . '"',
254  1377977858
255  );
256  }
257  return true;
258  }
259 
272  protected function ‪checkExtensionDependency(‪Dependency $dependency)
273  {
274  $extensionKey = $dependency->‪getIdentifier();
275  $extensionIsLoaded = $this->‪isDependentExtensionLoaded($extensionKey);
276  if ($extensionIsLoaded === true) {
277  $isLoadedVersionCompatible = $this->‪isLoadedVersionCompatible($dependency);
278  if ($isLoadedVersionCompatible === true || $this->skipDependencyCheck) {
279  return true;
280  }
281  $extension = $this->listUtility->getExtension($extensionKey);
282  $loadedVersion = $extension->getPackageMetaData()->getVersion();
283  if (version_compare($loadedVersion, $dependency->‪getHighestVersion()) === -1) {
284  try {
285  $this->‪getExtensionFromRepository($extensionKey, $dependency);
286  } catch (UnresolvedDependencyException $e) {
287  throw new MissingVersionDependencyException(
288  'The extension ' . $extensionKey . ' is installed in version ' . $loadedVersion
289  . ' but needed in version ' . $dependency->‪getLowestVersion() . ' - ' . $dependency->‪getHighestVersion() . ' and could not be fetched from TER',
290  1396302624
291  );
292  }
293  } else {
294  throw new MissingVersionDependencyException(
295  'The extension ' . $extensionKey . ' is installed in version ' . $loadedVersion .
296  ' but needed in version ' . $dependency->‪getLowestVersion() . ' - ' . $dependency->‪getHighestVersion(),
297  1430561927
298  );
299  }
300  } else {
301  $extensionIsAvailable = $this->‪isDependentExtensionAvailable($extensionKey);
302  if ($extensionIsAvailable === true) {
303  $isAvailableVersionCompatible = $this->‪isAvailableVersionCompatible($dependency);
304  if ($isAvailableVersionCompatible) {
305  $unresolvedDependencyErrors = ‪$this->dependencyErrors;
306  $this->managementService->markExtensionForInstallation($extensionKey);
307  $this->dependencyErrors = array_merge($unresolvedDependencyErrors, $this->dependencyErrors);
308  } else {
309  $extension = $this->listUtility->getExtension($extensionKey);
310  $availableVersion = $extension->getPackageMetaData()->getVersion();
311  if (version_compare($availableVersion, $dependency->‪getHighestVersion()) === -1) {
312  try {
313  $this->‪getExtensionFromRepository($extensionKey, $dependency);
314  } catch (MissingExtensionDependencyException $e) {
315  if (!$this->skipDependencyCheck) {
316  throw new MissingVersionDependencyException(
317  'The extension ' . $extensionKey . ' is available in version ' . $availableVersion
318  . ' but is needed in version ' . $dependency->‪getLowestVersion() . ' - ' . $dependency->‪getHighestVersion() . ' and could not be fetched from TER',
319  1430560390
320  );
321  }
322  }
323  } else {
324  if (!$this->skipDependencyCheck) {
325  throw new MissingVersionDependencyException(
326  'The extension ' . $extensionKey . ' is available in version ' . $availableVersion
327  . ' but is needed in version ' . $dependency->‪getLowestVersion() . ' - ' . $dependency->‪getHighestVersion(),
328  1430562374
329  );
330  }
331  // Dependency check is skipped and the local version has to be installed
332  $this->managementService->markExtensionForInstallation($extensionKey);
333  }
334  }
335  } else {
336  $unresolvedDependencyErrors = ‪$this->dependencyErrors;
337  $this->‪getExtensionFromRepository($extensionKey, $dependency);
338  $this->dependencyErrors = array_merge($unresolvedDependencyErrors, $this->dependencyErrors);
339  }
340  }
341 
342  return false;
343  }
344 
353  protected function ‪getExtensionFromRepository($extensionKey, Dependency $dependency)
354  {
355  if (!$this->‪getExtensionFromInExtensionRepository($extensionKey)) {
356  $this->‪getExtensionFromTer($extensionKey, $dependency);
357  }
358  }
359 
367  protected function ‪getExtensionFromInExtensionRepository($extensionKey)
368  {
369  if ($this->localExtensionStorage !== '' && is_dir($this->localExtensionStorage)) {
370  $extList = ‪GeneralUtility::get_dirs($this->localExtensionStorage);
371  $extList = is_array($extList) ? $extList : [];
372  if (in_array($extensionKey, $extList)) {
373  $this->managementService->markExtensionForCopy($extensionKey, $this->localExtensionStorage);
374  return true;
375  }
376  }
377  return false;
378  }
379 
388  protected function ‪getExtensionFromTer($extensionKey, ‪Dependency $dependency)
389  {
390  $isExtensionDownloadableFromTer = $this->‪isExtensionDownloadableFromTer($extensionKey);
391  if (!$isExtensionDownloadableFromTer) {
392  if (!$this->skipDependencyCheck) {
393  if ($this->extensionRepository->countAll() > 0) {
395  'The extension ' . $extensionKey . ' is not available from TER.',
396  1399161266
397  );
398  }
399  throw new MissingExtensionDependencyException(
400  'The extension ' . $extensionKey . ' could not be checked. Please update your Extension-List from TYPO3 Extension Repository (TER).',
401  1430580308
402  );
403  }
404  return;
405  }
406 
407  $isDownloadableVersionCompatible = $this->‪isDownloadableVersionCompatible($dependency);
408  if (!$isDownloadableVersionCompatible) {
409  if (!$this->skipDependencyCheck) {
410  throw new MissingVersionDependencyException(
411  'No compatible version found for extension ' . $extensionKey,
412  1399161284
413  );
414  }
415  return;
416  }
417 
418  $latestCompatibleExtensionByIntegerVersionDependency = $this->‪getLatestCompatibleExtensionByIntegerVersionDependency($dependency);
419  if (!$latestCompatibleExtensionByIntegerVersionDependency instanceof Extension) {
420  if (!$this->skipDependencyCheck) {
421  throw new MissingExtensionDependencyException(
422  'Could not resolve dependency for "' . $dependency->‪getIdentifier() . '"',
423  1399161302
424  );
425  }
426  return;
427  }
428 
429  if ($this->‪isDependentExtensionLoaded($extensionKey)) {
430  $this->managementService->markExtensionForUpdate($latestCompatibleExtensionByIntegerVersionDependency);
431  } else {
432  $this->managementService->markExtensionForDownload($latestCompatibleExtensionByIntegerVersionDependency);
433  }
434  }
435 
440  protected function ‪isDependentExtensionLoaded($extensionKey)
441  {
442  return ‪ExtensionManagementUtility::isLoaded($extensionKey);
443  }
444 
449  protected function ‪isLoadedVersionCompatible(‪Dependency $dependency)
450  {
451  $extensionVersion = ‪ExtensionManagementUtility::getExtensionVersion($dependency->‪getIdentifier());
452  return $this->‪isVersionCompatible($extensionVersion, $dependency);
453  }
454 
460  protected function ‪isVersionCompatible($version, ‪Dependency $dependency)
461  {
462  if (!($dependency->‪getLowestVersion() === '') && version_compare($version, $dependency->‪getLowestVersion()) === -1) {
463  return false;
464  }
465  if (!($dependency->‪getHighestVersion() === '') && version_compare($dependency->‪getHighestVersion(), $version) === -1) {
466  return false;
467  }
468  return true;
469  }
470 
478  protected function ‪isDependentExtensionAvailable($extensionKey)
479  {
480  $this->‪setAvailableExtensions();
481  return array_key_exists($extensionKey, $this->availableExtensions);
482  }
483 
490  protected function ‪isAvailableVersionCompatible(‪Dependency $dependency)
491  {
492  $this->‪setAvailableExtensions();
493  $extensionData = $this->emConfUtility->includeEmConf(
494  $dependency->‪getIdentifier(),
495  $this->availableExtensions[$dependency->‪getIdentifier()]
496  );
497  return $this->‪isVersionCompatible($extensionData['version'], $dependency);
498  }
499 
506  protected function ‪isExtensionDownloadableFromTer($extensionKey)
507  {
508  return $this->extensionRepository->countByExtensionKey($extensionKey) > 0;
509  }
510 
517  protected function ‪isDownloadableVersionCompatible(‪Dependency $dependency)
518  {
519  $versions = $this->‪getLowestAndHighestIntegerVersions($dependency);
520  $count = $this->extensionRepository->countByVersionRangeAndExtensionKey(
521  $dependency->‪getIdentifier(),
522  $versions['lowestIntegerVersion'],
523  $versions['highestIntegerVersion']
524  );
525  return !empty($count);
526  }
527 
535  protected function ‪getCompatibleExtension(iterable $extensions): ?‪Extension
536  {
537  foreach ($extensions as $extension) {
539  $this->‪checkDependencies($extension);
540  $extensionKey = $extension->getExtensionKey();
541 
542  if (isset($this->dependencyErrors[$extensionKey])) {
543  // reset dependencyErrors and continue with next version
544  unset($this->dependencyErrors[$extensionKey]);
545  continue;
546  }
547 
548  return $extension;
549  }
550 
551  return null;
552  }
553 
562  {
563  $versions = $this->‪getLowestAndHighestIntegerVersions($dependency);
564  $compatibleDataSets = $this->extensionRepository->findByVersionRangeAndExtensionKeyOrderedByVersion(
565  $dependency->‪getIdentifier(),
566  $versions['lowestIntegerVersion'],
567  $versions['highestIntegerVersion']
568  );
569  return $this->‪getCompatibleExtension($compatibleDataSets);
570  }
571 
578  protected function ‪getLowestAndHighestIntegerVersions(‪Dependency $dependency)
579  {
580  $lowestVersion = $dependency->‪getLowestVersion();
581  $lowestVersionInteger = $lowestVersion ? ‪VersionNumberUtility::convertVersionNumberToInteger($lowestVersion) : 0;
582  $highestVersion = $dependency->‪getHighestVersion();
583  $highestVersionInteger = $highestVersion ? ‪VersionNumberUtility::convertVersionNumberToInteger($highestVersion) : 0;
584  return [
585  'lowestIntegerVersion' => $lowestVersionInteger,
586  'highestIntegerVersion' => $highestVersionInteger
587  ];
588  }
589 
594  public function ‪findInstalledExtensionsThatDependOnMe($extensionKey)
595  {
596  $availableAndInstalledExtensions = $this->listUtility->getAvailableAndInstalledExtensionsWithAdditionalInformation();
597  $dependentExtensions = [];
598  foreach ($availableAndInstalledExtensions as $availableAndInstalledExtensionKey => $availableAndInstalledExtension) {
599  if (isset($availableAndInstalledExtension['installed']) && $availableAndInstalledExtension['installed'] === true) {
600  if (is_array($availableAndInstalledExtension['constraints']) && is_array($availableAndInstalledExtension['constraints']['depends']) && array_key_exists($extensionKey, $availableAndInstalledExtension['constraints']['depends'])) {
601  $dependentExtensions[] = $availableAndInstalledExtensionKey;
602  }
603  }
604  }
605  return $dependentExtensions;
606  }
607 
614  public function ‪getExtensionsSuitableForTypo3Version($extensions)
615  {
616  $suitableExtensions = [];
618  foreach ($extensions as $extension) {
620  foreach ($extension->getDependencies() as $dependency) {
621  if ($dependency->getIdentifier() === 'typo3') {
622  try {
623  if ($this->‪checkTypo3Dependency($dependency)) {
624  $suitableExtensions[] = $extension;
625  }
627  }
628  break;
629  }
630  }
631  }
632  return $suitableExtensions;
633  }
634 
645  public function ‪filterYoungestVersionOfExtensionList(array $extensions, $showUnsuitable)
646  {
647  if (!$showUnsuitable) {
648  $extensions = $this->‪getExtensionsSuitableForTypo3Version($extensions);
649  }
650  $filteredExtensions = [];
651  foreach ($extensions as $extension) {
652  $extensionKey = $extension->getExtensionKey();
653  if (!array_key_exists($extensionKey, $filteredExtensions)) {
654  $filteredExtensions[$extensionKey] = $extension;
655  continue;
656  }
657  $currentVersion = $filteredExtensions[$extensionKey]->getVersion();
658  $newVersion = $extension->getVersion();
659  if (version_compare($newVersion, $currentVersion, '>')) {
660  $filteredExtensions[$extensionKey] = $extension;
661  }
662  }
663  return $filteredExtensions;
664  }
665 }
‪TYPO3\CMS\Extensionmanager\Domain\Model\Extension\getDependencies
‪SplObjectStorage getDependencies()
Definition: Extension.php:509
‪TYPO3\CMS\Core\Utility\VersionNumberUtility
Definition: VersionNumberUtility.php:25
‪TYPO3\CMS\Extensionmanager\Domain\Model\Dependency
Definition: Dependency.php:26
‪TYPO3\CMS\Extensionmanager\Domain\Model\Dependency\getLowestVersion
‪string getLowestVersion()
Definition: Dependency.php:101
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\getExtensionsSuitableForTypo3Version
‪array getExtensionsSuitableForTypo3Version($extensions)
Definition: DependencyUtility.php:606
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\isDependentExtensionAvailable
‪bool isDependentExtensionAvailable($extensionKey)
Definition: DependencyUtility.php:470
‪TYPO3\CMS\Core\Utility\VersionNumberUtility\getNumericTypo3Version
‪static string getNumericTypo3Version()
Definition: VersionNumberUtility.php:107
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\getDependencyErrors
‪array getDependencyErrors()
Definition: DependencyUtility.php:183
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\getExtensionFromRepository
‪getExtensionFromRepository($extensionKey, Dependency $dependency)
Definition: DependencyUtility.php:345
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\getLatestCompatibleExtensionByIntegerVersionDependency
‪Extension getLatestCompatibleExtensionByIntegerVersionDependency(Dependency $dependency)
Definition: DependencyUtility.php:553
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\injectListUtility
‪injectListUtility(ListUtility $listUtility)
Definition: DependencyUtility.php:82
‪TYPO3\CMS\Extensionmanager\Utility
‪TYPO3\CMS\Extensionmanager\Domain\Model\Extension
Definition: Extension.php:29
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\getExtensionFromTer
‪getExtensionFromTer($extensionKey, Dependency $dependency)
Definition: DependencyUtility.php:380
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\injectEmConfUtility
‪injectEmConfUtility(EmConfUtility $emConfUtility)
Definition: DependencyUtility.php:90
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\$extensionRepository
‪ExtensionRepository $extensionRepository
Definition: DependencyUtility.php:41
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\getCompatibleExtension
‪Extension null getCompatibleExtension(iterable $extensions)
Definition: DependencyUtility.php:527
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\setLocalExtensionStorage
‪setLocalExtensionStorage($localExtensionStorage)
Definition: DependencyUtility.php:106
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\checkExtensionDependency
‪bool checkExtensionDependency(Dependency $dependency)
Definition: DependencyUtility.php:264
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\$availableExtensions
‪array $availableExtensions
Definition: DependencyUtility.php:57
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\$emConfUtility
‪EmConfUtility $emConfUtility
Definition: DependencyUtility.php:49
‪TYPO3\CMS\Extensionmanager\Exception
Definition: DependencyConfigurationNotFoundException.php:16
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\$managementService
‪ExtensionManagementService $managementService
Definition: DependencyUtility.php:53
‪TYPO3\CMS\Extensionmanager\Exception\MissingVersionDependencyException
Definition: MissingVersionDependencyException.php:22
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\hasDependencyErrors
‪bool hasDependencyErrors()
Definition: DependencyUtility.php:173
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\isDownloadableVersionCompatible
‪bool isDownloadableVersionCompatible(Dependency $dependency)
Definition: DependencyUtility.php:509
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\isDependentExtensionLoaded
‪bool isDependentExtensionLoaded($extensionKey)
Definition: DependencyUtility.php:432
‪TYPO3\CMS\Extensionmanager\Exception\UnresolvedTypo3DependencyException
Definition: UnresolvedTypo3DependencyException.php:22
‪TYPO3\CMS\Extensionmanager\Utility\ListUtility
Definition: ListUtility.php:41
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\setSkipDependencyCheck
‪setSkipDependencyCheck($skipDependencyCheck)
Definition: DependencyUtility.php:123
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\injectManagementService
‪injectManagementService(ExtensionManagementService $managementService)
Definition: DependencyUtility.php:98
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\getLowestAndHighestIntegerVersions
‪array getLowestAndHighestIntegerVersions(Dependency $dependency)
Definition: DependencyUtility.php:570
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\injectExtensionRepository
‪injectExtensionRepository(ExtensionRepository $extensionRepository)
Definition: DependencyUtility.php:74
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\filterYoungestVersionOfExtensionList
‪Extension[] filterYoungestVersionOfExtensionList(array $extensions, $showUnsuitable)
Definition: DependencyUtility.php:637
‪TYPO3\CMS\Core\Utility\GeneralUtility\get_dirs
‪static string[] string null get_dirs($path)
Definition: GeneralUtility.php:2170
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:43
‪TYPO3\CMS\Core\Utility\VersionNumberUtility\convertVersionNumberToInteger
‪static int convertVersionNumberToInteger($versionNumber)
Definition: VersionNumberUtility.php:32
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\isExtensionDownloadableFromTer
‪bool isExtensionDownloadableFromTer($extensionKey)
Definition: DependencyUtility.php:498
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\isAvailableVersionCompatible
‪bool isAvailableVersionCompatible(Dependency $dependency)
Definition: DependencyUtility.php:482
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\getExtensionVersion
‪static string getExtensionVersion($key)
Definition: ExtensionManagementUtility.php:157
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\$listUtility
‪ListUtility $listUtility
Definition: DependencyUtility.php:45
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility
Definition: DependencyUtility.php:38
‪TYPO3\CMS\Extensionmanager\Exception\MissingExtensionDependencyException
Definition: MissingExtensionDependencyException.php:22
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\checkDependencies
‪checkDependencies(Extension $extension)
Definition: DependencyUtility.php:133
‪TYPO3\CMS\Extensionmanager\Domain\Repository\ExtensionRepository
Definition: ExtensionRepository.php:35
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\isVersionCompatible
‪bool isVersionCompatible($version, Dependency $dependency)
Definition: DependencyUtility.php:452
‪TYPO3\CMS\Extensionmanager\Domain\Model\Extension\getExtensionKey
‪string getExtensionKey()
Definition: Extension.php:270
‪TYPO3\CMS\Extensionmanager\Domain\Model\Dependency\getIdentifier
‪string getIdentifier()
Definition: Dependency.php:85
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\setAvailableExtensions
‪setAvailableExtensions()
Definition: DependencyUtility.php:115
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\isLoadedVersionCompatible
‪bool isLoadedVersionCompatible(Dependency $dependency)
Definition: DependencyUtility.php:441
‪TYPO3\CMS\Extensionmanager\Service\ExtensionManagementService
Definition: ExtensionManagementService.php:33
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\checkTypo3Dependency
‪bool checkTypo3Dependency(Dependency $dependency)
Definition: DependencyUtility.php:195
‪TYPO3\CMS\Extensionmanager\Domain\Model\Dependency\$specialDependencies
‪static array $specialDependencies
Definition: Dependency.php:53
‪TYPO3\CMS\Core\SingletonInterface
Definition: SingletonInterface.php:23
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\findInstalledExtensionsThatDependOnMe
‪array findInstalledExtensionsThatDependOnMe($extensionKey)
Definition: DependencyUtility.php:586
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\$localExtensionStorage
‪string $localExtensionStorage
Definition: DependencyUtility.php:61
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\$dependencyErrors
‪array $dependencyErrors
Definition: DependencyUtility.php:65
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\getExtensionFromInExtensionRepository
‪bool getExtensionFromInExtensionRepository($extensionKey)
Definition: DependencyUtility.php:359
‪TYPO3\CMS\Extensionmanager\Exception\UnresolvedPhpDependencyException
Definition: UnresolvedPhpDependencyException.php:22
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\$skipDependencyCheck
‪bool $skipDependencyCheck
Definition: DependencyUtility.php:69
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\isLoaded
‪static bool isLoaded($key)
Definition: ExtensionManagementUtility.php:114
‪TYPO3\CMS\Extensionmanager\Exception\UnresolvedDependencyException
Definition: UnresolvedDependencyException.php:22
‪TYPO3\CMS\Extensionmanager\Utility\DependencyUtility\checkPhpDependency
‪bool checkPhpDependency(Dependency $dependency)
Definition: DependencyUtility.php:227
‪TYPO3\CMS\Extensionmanager\Domain\Model\Dependency\getHighestVersion
‪string getHighestVersion()
Definition: Dependency.php:69