vendor/shopware/core/Framework/Plugin/KernelPluginLoader/DbalKernelPluginLoader.php line 8

  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Framework\Plugin\KernelPluginLoader;
  3. use Composer\Autoload\ClassLoader;
  4. use Doctrine\DBAL\Connection;
  5. use Shopware\Core\Framework\Log\Package;
  6. /**
  7.  * @phpstan-import-type PluginInfo from KernelPluginLoader
  8.  */
  9. #[Package('core')]
  10. class DbalKernelPluginLoader extends KernelPluginLoader
  11. {
  12.     public function __construct(
  13.         ClassLoader $classLoader,
  14.         ?string $pluginDir,
  15.         private readonly Connection $connection
  16.     ) {
  17.         parent::__construct($classLoader$pluginDir);
  18.     }
  19.     protected function loadPluginInfos(): void
  20.     {
  21.         $sql = <<<'SQL'
  22.         # dbal-plugin-loader
  23.         SELECT
  24.                `name`,
  25.                `base_class` AS baseClass,
  26.                IF(`active` = 1 AND `installed_at` IS NOT NULL, 1, 0) AS active,
  27.                `path`,
  28.                `version`,
  29.                `autoload`,
  30.                `managed_by_composer` AS managedByComposer,
  31.                composer_name as composerName
  32.         FROM `plugin`
  33.         ORDER BY `installed_at`;
  34. SQL;
  35.         $plugins $this->connection->executeQuery($sql)->fetchAllAssociative();
  36.         /** @var array<int, PluginInfo> $result */
  37.         $result = [];
  38.         /** @var array{baseClass: string, name: string, active: int, path: string, version: string|null, autoload: string, managedByComposer: int, composerName: string } $plugin */
  39.         foreach ($plugins as $plugin) {
  40.             $result[] = [
  41.                 'baseClass' => $plugin['baseClass'],
  42.                 'name' => $plugin['name'],
  43.                 'active' => (bool) $plugin['active'],
  44.                 'path' => $plugin['path'],
  45.                 'version' => $plugin['version'],
  46.                 'autoload' => json_decode((string) $plugin['autoload'], true512\JSON_THROW_ON_ERROR),
  47.                 'managedByComposer' => (bool) $plugin['managedByComposer'],
  48.                 'composerName' => $plugin['composerName'],
  49.             ];
  50.         }
  51.         $this->pluginInfos $result;
  52.     }
  53. }