diff --git a/app/AppKernel.php b/app/AppKernel.php index 7770ffd50..9212be758 100644 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -94,7 +94,6 @@ class AppKernel extends Kernel private function loadEnvVarsFromParameters(ContainerBuilder $container) { - $this->setEnvVarFromParameter($container, 'DATABASE_DRIVER', 'database_driver'); $this->setEnvVarFromParameter($container, 'DATABASE_HOST', 'database_host'); $this->setEnvVarFromParameter($container, 'DATABASE_PORT', 'database_port'); $this->setEnvVarFromParameter($container, 'DATABASE_NAME', 'database_name'); diff --git a/app/config/services.yml b/app/config/services.yml index 24082bb66..e13bb92bb 100644 --- a/app/config/services.yml +++ b/app/config/services.yml @@ -269,7 +269,7 @@ services: Wallabag\Command\InstallCommand: arguments: - $databaseDriver: '%env(DATABASE_DRIVER)%' + $databaseUrl: '%env(DATABASE_URL)%' $defaultSettings: '%wallabag.default_internal_settings%' $defaultIgnoreOriginInstanceRules: '%wallabag.default_ignore_origin_instance_rules%' diff --git a/src/Command/InstallCommand.php b/src/Command/InstallCommand.php index b9a2590dc..8f6c76187 100644 --- a/src/Command/InstallCommand.php +++ b/src/Command/InstallCommand.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Exception\DriverException; use Doctrine\DBAL\Platforms\MySQLPlatform; use Doctrine\DBAL\Platforms\PostgreSQLPlatform; use Doctrine\DBAL\Platforms\SqlitePlatform; +use Doctrine\DBAL\Tools\DsnParser; use Doctrine\Migrations\Metadata\Storage\TableMetadataStorageConfiguration; use Doctrine\ORM\EntityManagerInterface; use FOS\UserBundle\Event\UserEvent; @@ -41,17 +42,17 @@ class InstallCommand extends Command private EventDispatcherInterface $dispatcher; private UserManagerInterface $userManager; private TableMetadataStorageConfiguration $tableMetadataStorageConfiguration; - private string $databaseDriver; + private string $databaseUrl; private array $defaultSettings; private array $defaultIgnoreOriginInstanceRules; - public function __construct(EntityManagerInterface $entityManager, EventDispatcherInterface $dispatcher, UserManagerInterface $userManager, TableMetadataStorageConfiguration $tableMetadataStorageConfiguration, string $databaseDriver, array $defaultSettings, array $defaultIgnoreOriginInstanceRules) + public function __construct(EntityManagerInterface $entityManager, EventDispatcherInterface $dispatcher, UserManagerInterface $userManager, TableMetadataStorageConfiguration $tableMetadataStorageConfiguration, string $databaseUrl, array $defaultSettings, array $defaultIgnoreOriginInstanceRules) { $this->entityManager = $entityManager; $this->dispatcher = $dispatcher; $this->userManager = $userManager; $this->tableMetadataStorageConfiguration = $tableMetadataStorageConfiguration; - $this->databaseDriver = $databaseDriver; + $this->databaseUrl = $databaseUrl; $this->defaultSettings = $defaultSettings; $this->defaultIgnoreOriginInstanceRules = $defaultIgnoreOriginInstanceRules; @@ -103,13 +104,24 @@ class InstallCommand extends Command $status = 'OK!'; $help = ''; - if (!\extension_loaded($this->databaseDriver)) { + /** @see \Doctrine\DBAL\DriverManager::$driverSchemeAliases */ + $params = (new DsnParser([ + 'mysql' => 'pdo_mysql', + 'mysql2' => 'pdo_mysql', // Amazon RDS, for some weird reason + 'postgres' => 'pdo_pgsql', + 'postgresql' => 'pdo_pgsql', + 'pgsql' => 'pdo_pgsql', + 'sqlite' => 'pdo_sqlite', + 'sqlite3' => 'pdo_sqlite', + ]))->parse($this->databaseUrl); + + if (!\extension_loaded($params['driver'])) { $fulfilled = false; $status = 'ERROR!'; - $help = 'Database driver "' . $this->databaseDriver . '" is not installed.'; + $help = 'Database driver "' . $params['driver'] . '" is not installed.'; } - $rows[] = [\sprintf($label, $this->databaseDriver), $status, $help]; + $rows[] = [\sprintf($label, $params['driver']), $status, $help]; // testing if connection to the database can be established $label = 'Database connection';