From 68ec77ec4bd784fd61a53789b3fd1edb884f12fe Mon Sep 17 00:00:00 2001 From: mondrake Date: Mon, 20 May 2019 21:58:09 +0200 Subject: [PATCH 1/6] 1 --- src/Command/Site/InstallCommand.php | 39 ++++++++++++++++------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/Command/Site/InstallCommand.php b/src/Command/Site/InstallCommand.php index f99e5960c..4f08bd13a 100644 --- a/src/Command/Site/InstallCommand.php +++ b/src/Command/Site/InstallCommand.php @@ -228,12 +228,17 @@ function ($profile) { if (empty($database['default'])) { // --db-url argument - $db_url = $input->getArgument('db-url'); - $valuesFromUrl = parse_url($db_url); + if ($db_url = $input->getArgument('db-url')) { + try { + $valuesFromUrl = Database::convertDbUrlToConnectionInfo($db_url, $this->appRoot); + } catch (Exception $e) { + $this->getIo()->warning($e->getMessage()); + $db_url = null; + } + } - $input->setOption('db-prefix', ''); // --db-type option - $dbType = $db_url?$valuesFromUrl['scheme']:$input->getOption('db-type'); + $dbType = $db_url?$valuesFromUrl['driver']:$input->getOption('db-type'); if (!$dbType) { $databases = $this->site->getDatabaseTypes(); $dbType = $this->getIo()->choice( @@ -251,7 +256,7 @@ function ($profile) { if ($dbType === 'sqlite') { // --db-file option - $dbFile = $input->getOption('db-file'); + $dbFile = $db_url?$valuesFromUrl['database']:$input->getOption('db-file'); if (!$dbFile) { $dbFile = $this->getIo()->ask( $this->trans('commands.migrate.execute.questions.db-file'), @@ -264,41 +269,41 @@ function ($profile) { $dbHost = $db_url?$valuesFromUrl['host']:$input->getOption('db-host'); if (!$dbHost) { $dbHost = $this->dbHostQuestion(); - $input->setOption('db-host', $dbHost); } + $input->setOption('db-host', $dbHost); // --db-name option - $dbName = $db_url?ltrim($valuesFromUrl['path'], "/"):$input->getOption('db-name'); + $dbName = $db_url?$valuesFromUrl['database']:$input->getOption('db-name'); if (!$dbName) { $dbName = $this->dbNameQuestion(); - $input->setOption('db-name', $dbName); } + $input->setOption('db-name', $dbName); // --db-user option - $dbUser = $db_url?$valuesFromUrl['user']:$input->getOption('db-user'); + $dbUser = $db_url && isset($valuesFromUrl['username'])?$valuesFromUrl['username']:$input->getOption('db-user'); if (!$dbUser) { $dbUser = $this->dbUserQuestion(); - $input->setOption('db-user', $dbUser); } + $input->setOption('db-user', $dbUser); // --db-pass option - $dbPass = $db_url?$valuesFromUrl['pass']:$input->getOption('db-pass'); + $dbPass = $db_url && isset($valuesFromUrl['password'])?$valuesFromUrl['password']:$input->getOption('db-pass'); if (!$dbPass) { $dbPass = $this->dbPassQuestion(); - $input->setOption('db-pass', $dbPass); } + $input->setOption('db-pass', $dbPass); // --db-port prefix - $dbPort = $db_url?$valuesFromUrl['port']:$input->getOption('db-port'); + $dbPort = $db_url && isset($valuesFromUrl['port'])?$valuesFromUrl['port']:$input->getOption('db-port'); if (!$dbPort) { $dbPort = $this->dbPortQuestion(); - $input->setOption('db-port', $dbPort); } + $input->setOption('db-port', $dbPort); } // --db-prefix option - $dbPrefix = $input->getOption('db-prefix'); - if ($dbPrefix === null) { + $dbPrefix = $db_url && isset($valuesFromUrl['prefix']['default'])?$valuesFromUrl['prefix']['default']:$input->getOption('db-prefix'); + if (!$dbPrefix) { $dbPrefix = $this->dbPrefixQuestion(); } $input->setOption('db-prefix', $dbPrefix); @@ -625,4 +630,4 @@ private function validateUrlConnection($url) { } return 1; } -} \ No newline at end of file +} From 3cecf122cfa4c9ad990e314a3040f53b19b689b3 Mon Sep 17 00:00:00 2001 From: mondrake Date: Tue, 21 May 2019 15:18:34 +0200 Subject: [PATCH 2/6] 2 --- src/Command/Site/InstallCommand.php | 89 ++++++++++++++++------------- 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/src/Command/Site/InstallCommand.php b/src/Command/Site/InstallCommand.php index 4f08bd13a..0f997aabe 100644 --- a/src/Command/Site/InstallCommand.php +++ b/src/Command/Site/InstallCommand.php @@ -223,23 +223,45 @@ function ($profile) { $input->setOption('langcode', $langcode); } + $is_database_info_set = false; + // Use default database setting if is available $database = Database::getConnectionInfo(); - if (empty($database['default'])) { - - // --db-url argument - if ($db_url = $input->getArgument('db-url')) { - try { - $valuesFromUrl = Database::convertDbUrlToConnectionInfo($db_url, $this->appRoot); - } catch (Exception $e) { - $this->getIo()->warning($e->getMessage()); - $db_url = null; - } + if (!empty($database['default'])) { + $this->getIo()->info( + sprintf( + $this->trans('commands.site.install.messages.using-current-database'), + $database['default']['driver'], + $database['default']['database'], + $database['default']['username'] + ) + ); + $is_database_info_set = true; + } + + // Use the --db-url argument if it is entered and valid + if (!$is_database_info_set && !empty($input->getArgument('db-url'))) { + try { + $database = Database::convertDbUrlToConnectionInfo($input->getArgument('db-url'), $this->appRoot); + $this->getIo()->info( + sprintf( + $this->trans('commands.site.install.messages.using-current-database'), + $database['driver'], + $database['database'], + $database['username'] + ) + ); + $is_database_info_set = true; + } catch (Exception $e) { + $this->getIo()->warning('Invalid --db-url argument: ' . $e->getMessage()); } + } + + // Interact if database info is still not available + if (!$is_database_info_set) { // --db-type option - $dbType = $db_url?$valuesFromUrl['driver']:$input->getOption('db-type'); - if (!$dbType) { + if (!$input->getOption('db-type')) { $databases = $this->site->getDatabaseTypes(); $dbType = $this->getIo()->choice( $this->trans('commands.migrate.setup.questions.db-type'), @@ -256,57 +278,44 @@ function ($profile) { if ($dbType === 'sqlite') { // --db-file option - $dbFile = $db_url?$valuesFromUrl['database']:$input->getOption('db-file'); - if (!$dbFile) { + if (!$input->getOption('db-file')) { $dbFile = $this->getIo()->ask( $this->trans('commands.migrate.execute.questions.db-file'), 'sites/default/files/.ht.sqlite' ); + $input->setOption('db-file', $dbFile); } - $input->setOption('db-file', $dbFile); } else { // --db-host option - $dbHost = $db_url?$valuesFromUrl['host']:$input->getOption('db-host'); - if (!$dbHost) { - $dbHost = $this->dbHostQuestion(); + if (!$input->getOption('db-host')) { + $input->setOption('db-host', $this->dbHostQuestion()); } - $input->setOption('db-host', $dbHost); // --db-name option - $dbName = $db_url?$valuesFromUrl['database']:$input->getOption('db-name'); - if (!$dbName) { - $dbName = $this->dbNameQuestion(); + if (!$input->getOption('db-name')) { + $input->setOption('db-name', $this->dbNameQuestion()); } - $input->setOption('db-name', $dbName); // --db-user option - $dbUser = $db_url && isset($valuesFromUrl['username'])?$valuesFromUrl['username']:$input->getOption('db-user'); - if (!$dbUser) { - $dbUser = $this->dbUserQuestion(); + if (!$input->getOption('db-user')) { + $input->setOption('db-user', $this->dbUserQuestion()); } - $input->setOption('db-user', $dbUser); // --db-pass option - $dbPass = $db_url && isset($valuesFromUrl['password'])?$valuesFromUrl['password']:$input->getOption('db-pass'); - if (!$dbPass) { - $dbPass = $this->dbPassQuestion(); + if (!$input->getOption('db-pass')) { + $input->setOption('db-pass', $this->dbPassQuestion()); } - $input->setOption('db-pass', $dbPass); - // --db-port prefix - $dbPort = $db_url && isset($valuesFromUrl['port'])?$valuesFromUrl['port']:$input->getOption('db-port'); - if (!$dbPort) { - $dbPort = $this->dbPortQuestion(); + // --db-port option + if (!$input->getOption('db-port')) { + $input->setOption('db-port', $this->dbPortQuestion()); } - $input->setOption('db-port', $dbPort); } // --db-prefix option - $dbPrefix = $db_url && isset($valuesFromUrl['prefix']['default'])?$valuesFromUrl['prefix']['default']:$input->getOption('db-prefix'); - if (!$dbPrefix) { - $dbPrefix = $this->dbPrefixQuestion(); + if (!$input->getOption('db-prefix')) { + $input->setOption('db-prefix', $this->dbPrefixQuestion()); } - $input->setOption('db-prefix', $dbPrefix); } // --site-name option From 9a795e6eb815f727a1b904f2c040a0b58ee0e0e6 Mon Sep 17 00:00:00 2001 From: mondrake Date: Tue, 21 May 2019 15:56:24 +0200 Subject: [PATCH 3/6] 3 --- src/Command/Site/InstallCommand.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Command/Site/InstallCommand.php b/src/Command/Site/InstallCommand.php index 0f997aabe..b1f910c44 100644 --- a/src/Command/Site/InstallCommand.php +++ b/src/Command/Site/InstallCommand.php @@ -226,7 +226,8 @@ function ($profile) { $is_database_info_set = false; // Use default database setting if is available - $database = Database::getConnectionInfo(); + //$database = Database::getConnectionInfo(); + $database = null; if (!empty($database['default'])) { $this->getIo()->info( sprintf( From 55e8113ced6e1c514af3bd47851958397f8a624b Mon Sep 17 00:00:00 2001 From: mondrake Date: Tue, 21 May 2019 15:59:07 +0200 Subject: [PATCH 4/6] 4 --- src/Command/Site/InstallCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Command/Site/InstallCommand.php b/src/Command/Site/InstallCommand.php index b1f910c44..6d4569677 100644 --- a/src/Command/Site/InstallCommand.php +++ b/src/Command/Site/InstallCommand.php @@ -253,7 +253,7 @@ function ($profile) { ) ); $is_database_info_set = true; - } catch (Exception $e) { + } catch (\Exception $e) { $this->getIo()->warning('Invalid --db-url argument: ' . $e->getMessage()); } } From 8175d391e7c3eb2e26f36fea4537e7ec61e6abdd Mon Sep 17 00:00:00 2001 From: mondrake Date: Tue, 21 May 2019 16:06:01 +0200 Subject: [PATCH 5/6] 5 --- src/Command/Site/InstallCommand.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Command/Site/InstallCommand.php b/src/Command/Site/InstallCommand.php index 6d4569677..e3c1bfb64 100644 --- a/src/Command/Site/InstallCommand.php +++ b/src/Command/Site/InstallCommand.php @@ -226,8 +226,7 @@ function ($profile) { $is_database_info_set = false; // Use default database setting if is available - //$database = Database::getConnectionInfo(); - $database = null; + $database = Database::getConnectionInfo(); if (!empty($database['default'])) { $this->getIo()->info( sprintf( From 86aceca044606d7bfc5475390e4e94a555b1a5c9 Mon Sep 17 00:00:00 2001 From: mondrake Date: Tue, 21 May 2019 19:40:21 +0200 Subject: [PATCH 6/6] 10 --- src/Command/Site/InstallCommand.php | 134 ++++++++-------------------- 1 file changed, 39 insertions(+), 95 deletions(-) diff --git a/src/Command/Site/InstallCommand.php b/src/Command/Site/InstallCommand.php index e3c1bfb64..5474a2358 100644 --- a/src/Command/Site/InstallCommand.php +++ b/src/Command/Site/InstallCommand.php @@ -388,108 +388,58 @@ protected function execute(InputInterface $input, OutputInterface $output) $_SERVER['HTTP_HOST'] = $uri; } - $database = Database::getConnectionInfo(); + $database_install = null; // If a database connection is already defined we must use that. + $database = Database::getConnectionInfo(); if (!empty($database['default'])) { - $dbUrl = sprintf( - '%s://%s:%s@%s:%s/%s', - $database['default']['driver'], - $database['default']['username'], - $database['default']['password'], - $database['default']['host'], - $database['default']['port'], - $database['default']['database'] - ); - $input->setArgument('db-url', $dbUrl); - $input->setOption('db-prefix', $database['default']['prefix']['default']); - - if ($database['default']['driver'] === 'sqlite' && file_exists($database['default']['database'])) { - $input->setOption('db-type', $database['default']['driver']); - $input->setOption('db-file', $database['default']['database']); - $input->setArgument('db-url', ''); - } - $this->getIo()->info( - sprintf( - $this->trans('commands.site.install.messages.using-current-database'), - $database['default']['driver'], - $database['default']['database'], - $database['default']['username'] - ) - ); + $database_install = $database['default']; } - // Database option defaults. - $dbType = $input->getOption('db-type')?:'mysql'; - $dbFile = $input->getOption('db-file'); - $dbHost = $input->getOption('db-host')?:'127.0.0.1'; - $dbName = $input->getOption('db-name')?:'drupal_'.time(); - $dbUser = $input->getOption('db-user')?:'root'; - $dbPass = $input->getOption('db-pass'); - $dbPrefix = $input->getOption('db-prefix'); - $dbPort = $input->getOption('db-port')?:'3306'; - $force = $input->getOption('force'); - - //Check if there is a url to db connection - $db_url = $input->getArgument('db-url'); - if ($db_url) { - $valuesFromUrl = parse_url($db_url); - $dbType = $valuesFromUrl['scheme']; - if($this->validateUrlConnection($valuesFromUrl)){ - $this->getIo()->error($this->trans('commands.site.install.messages.invalid-db-url')); + // Use the --db-url argument if it is entered and valid + if (!$database_install && !empty($input->getArgument('db-url'))) { + try { + $database_install = Database::convertDbUrlToConnectionInfo($input->getArgument('db-url'), $this->appRoot); + } catch (\Exception $e) { + $this->getIo()->error('Invalid --db-url argument: ' . $e->getMessage()); return 1; } + } - if($dbType === 'sqlite'){ - $this->getIo()->error($this->trans('commands.site.install.messages.invalid-url-driver')); - return 1; - } + // Go for the options passed in if still not defined + if (!$database_install) { + $database_install = [ + 'database' => $input->getOption('db-name')?:'drupal_'.time(), + 'username' => $input->getOption('db-user')?:'root', + 'password' => $input->getOption('db-pass'), + 'prefix' => $input->getOption('db-prefix'), + 'port' => $input->getOption('db-port')?:'3306', + 'host' => $input->getOption('db-host')?:'127.0.0.1', + 'driver' => $input->getOption('db-type')?:'mysql', + ]; - $dbHost = $valuesFromUrl['host']; - $dbName = ltrim($valuesFromUrl['path'], "/"); - $dbUser = $valuesFromUrl['user']; - $dbPass = $valuesFromUrl['pass']; - $dbPort = $valuesFromUrl['port']?:$dbPort; - - // Set null options if a db url is provided - $input->setOption('db-type', ''); - $input->setOption('db-host', ''); - $input->setOption('db-name', ''); - $input->setOption('db-user', ''); - $input->setOption('db-pass', ''); - $input->setOption('db-port', ''); + if ($database_install['driver'] === 'sqlite') { + $database_install['database'] = $input->getOption('db-file'); + unset( + $database_install['username'], + $database_install['password'], + $database_install['port'], + $database_install['host'], + ); + } } - $databases = $this->site->getDatabaseTypes(); - - if ($dbType === 'sqlite') { - $database = [ - 'database' => $dbFile, - 'prefix' => $dbPrefix, - 'namespace' => $databases[$dbType]['namespace'], - 'driver' => $dbType, - ]; - if ($force && Database::isActiveConnection()) { - $tables = Database::getConnection()->query('SELECT name FROM sqlite_master WHERE type = "table" AND name NOT LIKE "sqlite_%";') + // Database option defaults. + if ($input->getOption('force') && Database::isActiveConnection()) { + $connection = Database::getConnection(); + if ($connection->driver() === 'sqlite') { + $tables = $connection->query('SELECT name FROM sqlite_master WHERE type = "table" AND name NOT LIKE "sqlite_%";') ->fetchAllAssoc('name'); foreach (array_keys($tables) as $table) { - Database::getConnection()->schema()->dropTable($table); + $connection->schema()->dropTable($table); } - } - } else { - $database = [ - 'database' => $dbName, - 'username' => $dbUser, - 'password' => $dbPass, - 'prefix' => $dbPrefix, - 'port' => $dbPort, - 'host' => $dbHost, - 'namespace' => $databases[$dbType]['namespace'], - 'driver' => $dbType, - ]; - - if ($force && Database::isActiveConnection()) { - $schema = Database::getConnection()->schema(); + } else { + $schema = $connection->schema(); $tables = $schema->findTables('%'); foreach ($tables as $table) { $schema->dropTable($table); @@ -500,7 +450,7 @@ protected function execute(InputInterface $input, OutputInterface $output) try { $drupalFinder = new DrupalFinder(); $drupalFinder->locateRoot(getcwd()); - $this->runInstaller($database, $uri); + $this->runInstaller($database_install, $uri); $autoload = $this->container->get('class_loader'); $drupal = new Drupal( @@ -633,10 +583,4 @@ protected function runInstaller($database, $uri) { return 0; } - private function validateUrlConnection($url) { - if($url['host'] && $url['path'] && $url['user'] && $url['pass']) { - return 0; - } - return 1; - } }