From a76d51c3bb6b30e4f783338b619dfa035cd95347 Mon Sep 17 00:00:00 2001 From: Nick Wilde Date: Mon, 26 Dec 2016 17:49:53 -0800 Subject: [PATCH] database:add command (#3037) * database:add command * Switch order of default and custom Much more frequent to want $databases['custom']['default'] than the other way around - for exampale with the migrate drush commands. --- config/services/drupal-console/database.yml | 5 + config/services/drupal-console/generator.yml | 5 + src/Command/Database/AddCommand.php | 172 +++++++++++++++++++ src/Generator/DatabaseSettingsGenerator.php | 49 ++++++ templates/database/add.php.twig | 10 ++ 5 files changed, 241 insertions(+) create mode 100644 src/Command/Database/AddCommand.php create mode 100644 src/Generator/DatabaseSettingsGenerator.php create mode 100644 templates/database/add.php.twig diff --git a/config/services/drupal-console/database.yml b/config/services/drupal-console/database.yml index 348f5d394..65327cec7 100644 --- a/config/services/drupal-console/database.yml +++ b/config/services/drupal-console/database.yml @@ -1,4 +1,9 @@ services: + console.database_add: + class: Drupal\Console\Command\Database\AddCommand + arguments: ['@console.database_settings_generator'] + tags: + - { name: drupal.command } console.database_client: class: Drupal\Console\Command\Database\ClientCommand tags: diff --git a/config/services/drupal-console/generator.yml b/config/services/drupal-console/generator.yml index bcd4fdc5a..877cfd78b 100644 --- a/config/services/drupal-console/generator.yml +++ b/config/services/drupal-console/generator.yml @@ -166,6 +166,11 @@ services: arguments: ['@console.extension_manager'] tags: - { name: drupal.generator } + console.database_settings_generator: + class: Drupal\Console\Generator\DatabaseSettingsGenerator + arguments: ['@kernel'] + tags: + - { name: drupal.generator } console.entitycontent_generator: class: Drupal\Console\Generator\EntityContentGenerator arguments: ['@console.extension_manager', '@console.site', '@console.renderer'] diff --git a/src/Command/Database/AddCommand.php b/src/Command/Database/AddCommand.php new file mode 100644 index 000000000..19412cce1 --- /dev/null +++ b/src/Command/Database/AddCommand.php @@ -0,0 +1,172 @@ +generator = $generator; + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->setName('database:add') + ->setDescription($this->trans('commands.database.add.description')) + ->addOption( + 'database', + '', + InputOption::VALUE_REQUIRED, + $this->trans('commands.database.add.options.database') + ) + ->addOption( + 'username', + '', + InputOption::VALUE_REQUIRED, + $this->trans('commands.database.add.options.username') + ) + ->addOption( + 'password', + '', + InputOption::VALUE_REQUIRED, + $this->trans('commands.database.add.options.password') + ) + ->addOption( + 'prefix', + '', + InputOption::VALUE_OPTIONAL, + $this->trans('commands.database.add.options.prefix') + ) + ->addOption( + 'host', + '', + InputOption::VALUE_OPTIONAL, + $this->trans('commands.database.add.options.host') + ) + ->addOption( + 'port', + '', + InputOption::VALUE_OPTIONAL, + $this->trans('commands.database.add.options.port') + ) + ->addOption( + 'driver', + '', + InputOption::VALUE_OPTIONAL, + $this->trans('commands.database.add.options.driver') + ) + ->setHelp($this->trans('commands.database.add.help')); + } + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + $io = new DrupalStyle($input, $output); + $result = $this + ->generator + ->generate($input->getOptions()); + if (!$result) { + $io->error($this->trans('commands.database.add.error')); + } + } + + /** + * {@inheritdoc} + */ + protected function interact(InputInterface $input, OutputInterface $output) + { + $io = new DrupalStyle($input, $output); + + $database = $input->getOption('database'); + if (!$database) { + $database = $io->ask( + $this->trans('commands.database.add.questions.database'), + 'migrate_db' + ); + } + $input->setOption('database', $database); + $username = $input->getOption('username'); + if (!$username) { + $username = $io->ask( + $this->trans('commands.database.add.questions.username'), + '' + ); + } + $input->setOption('username', $username); + $password = $input->getOption('password'); + if (!$password) { + $password = $io->ask( + $this->trans('commands.database.add.questions.password'), + '' + ); + } + $input->setOption('password', $password); + $prefix = $input->getOption('prefix'); + if (!$prefix) { + $prefix = $io->ask( + $this->trans('commands.database.add.questions.prefix'), + FALSE + ); + } + $input->setOption('prefix', $prefix); + $host = $input->getOption('host'); + if (!$host) { + $host = $io->ask( + $this->trans('commands.database.add.questions.host'), + 'localhost' + ); + } + $input->setOption('host', $host); + $port = $input->getOption('port'); + if (!$port) { + $port = $io->ask( + $this->trans('commands.database.add.questions.port'), + 3306 + ); + } + $input->setOption('port', $port); + $driver = $input->getOption('driver'); + if (!$driver) { + $driver = $io->ask( + $this->trans('commands.database.add.questions.driver'), + 'mysql' + ); + } + $input->setOption('driver', $driver); + } +} \ No newline at end of file diff --git a/src/Generator/DatabaseSettingsGenerator.php b/src/Generator/DatabaseSettingsGenerator.php new file mode 100644 index 000000000..617f842e4 --- /dev/null +++ b/src/Generator/DatabaseSettingsGenerator.php @@ -0,0 +1,49 @@ +kernel = $kernel; + } + + + /** + * Generator Plugin Block. + * + * @param $parameters + */ + public function generate($parameters) + { + $settingsFile = $this->kernel->getSitePath().'/settings.php'; + if (!is_writable($settingsFile)) { + return false; + } + return $this->renderFile( + 'database/add.php.twig', + $settingsFile, + $parameters, + FILE_APPEND + ); + } +} \ No newline at end of file diff --git a/templates/database/add.php.twig b/templates/database/add.php.twig new file mode 100644 index 000000000..c279c9fbd --- /dev/null +++ b/templates/database/add.php.twig @@ -0,0 +1,10 @@ + +$databases['{{ database }}']['default'] = [ + 'database' => '{{ database }}', + 'username' => '{{ username }}', + 'password' => '{{ password }}', + 'host' => '{{ host }}', + 'port' => '{{ port }}', + 'driver' => '{{ driver }}', + 'prefix' => '{{ prefix }}', +];