Plugin.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. declare(strict_types=1);
  3. namespace SixShop\Core;
  4. use Composer\InstalledVersions;
  5. class Plugin
  6. {
  7. public const string EXTENSION_TYPE = 'sixshop-extension';
  8. public const string CACHE_TAG = 'sixshop_extensions';
  9. public static array $installedSixShopExtensions = [];
  10. /**
  11. * @return array{root: array{reference: string}, versions: array<string, array>}
  12. */
  13. public static function getInstalledSixShopExtensions(): array
  14. {
  15. if (self::$installedSixShopExtensions) {
  16. return self::$installedSixShopExtensions;
  17. }
  18. $versions = [];
  19. $referenceMap = [];
  20. foreach (InstalledVersions::getInstalledPackagesByType(self::EXTENSION_TYPE) as $name) {
  21. $versions[$name] = [
  22. 'name' => $name,
  23. 'version' => InstalledVersions::getPrettyVersion($name) ?? 'dev-main',
  24. 'reference' => InstalledVersions::getReference($name),
  25. 'install_path' => InstalledVersions::getInstallPath($name),
  26. ];
  27. $referenceMap[$name] = InstalledVersions::getReference($name) ?: $versions[$name]['version'];
  28. }
  29. return self::$installedSixShopExtensions = [
  30. 'root' => ['reference' => hash('md5', json_encode($referenceMap))],
  31. 'versions' => $versions,
  32. ];
  33. }
  34. }