From a3a798a8525394d43c4b01d9e963ca2f8e146ce5 Mon Sep 17 00:00:00 2001 From: Rohit Joshi Date: Fri, 9 Feb 2018 10:47:55 +0530 Subject: [PATCH 1/7] Adding command to generate data parser migrate plugin. --- config/services/generate.yml | 5 + config/services/generator.yml | 5 + .../PluginMigrateDataParserCommand.php | 156 ++++++++++++++++++ .../PluginMigrateDataParserGenerator.php | 45 +++++ .../data_parser/data_parser.php.twig | 38 +++++ 5 files changed, 249 insertions(+) create mode 100644 src/Command/Generate/PluginMigrateDataParserCommand.php create mode 100644 src/Generator/PluginMigrateDataParserGenerator.php create mode 100644 templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig diff --git a/config/services/generate.yml b/config/services/generate.yml index 189db63e0..c5e787f80 100644 --- a/config/services/generate.yml +++ b/config/services/generate.yml @@ -114,6 +114,11 @@ services: arguments: [ '@console.plugin_migrate_process_generator', '@console.chain_queue', '@console.extension_manager', '@console.string_converter', '@console.validator'] tags: - { name: drupal.command } + console.generate_plugin_migrate_data_parser: + class: Drupal\Console\Command\Generate\PluginMigrateDataParserCommand + arguments: [ '@console.plugin_migrate_data_parser_generator', '@console.chain_queue', '@console.extension_manager', '@console.string_converter', '@console.validator'] + tags: + - { name: drupal.command } console.generate_plugin_rest_resource: class: Drupal\Console\Command\Generate\PluginRestResourceCommand arguments: ['@console.extension_manager', '@console.plugin_rest_resource_generator','@console.string_converter', '@console.validator', '@console.chain_queue'] diff --git a/config/services/generator.yml b/config/services/generator.yml index d38bac2b5..024d81826 100644 --- a/config/services/generator.yml +++ b/config/services/generator.yml @@ -111,6 +111,11 @@ services: arguments: ['@console.extension_manager'] tags: - { name: drupal.generator } + console.plugin_migrate_data_parser_generator: + class: Drupal\Console\Generator\PluginMigrateDataParserGenerator + arguments: ['@console.extension_manager'] + tags: + - { name: drupal.generator } console.plugin_rest_resource_generator: class: Drupal\Console\Generator\PluginRestResourceGenerator arguments: ['@console.extension_manager'] diff --git a/src/Command/Generate/PluginMigrateDataParserCommand.php b/src/Command/Generate/PluginMigrateDataParserCommand.php new file mode 100644 index 000000000..378d44a16 --- /dev/null +++ b/src/Command/Generate/PluginMigrateDataParserCommand.php @@ -0,0 +1,156 @@ +generator = $generator; + $this->chainQueue = $chainQueue; + $this->extensionManager = $extensionManager; + $this->stringConverter = $stringConverter; + $this->validator = $validator; + parent::__construct(); + } + + protected function configure() + { + $this + ->setName('generate:plugin:migrate:data_parser') + ->setDescription($this->trans('commands.generate.plugin.migrate.data_parser.description')) + ->setHelp($this->trans('commands.generate.plugin.migrate.data_parser.help')) + ->addOption( + 'module', + null, + InputOption::VALUE_REQUIRED, + $this->trans('commands.common.options.module') + ) + ->addOption( + 'class', + null, + InputOption::VALUE_OPTIONAL, + $this->trans('commands.generate.plugin.migrate.data_parser.options.class') + ) + ->addOption( + 'plugin-id', + null, + InputOption::VALUE_OPTIONAL, + $this->trans('commands.generate.plugin.migrate.data_parser.options.plugin-id') + )->setAliases(['gpmdp']); + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation + if (!$this->confirmOperation()) { + return 1; + } + + $module = $input->getOption('module'); + $class_name = $this->validator->validateClassName($input->getOption('class')); + $plugin_id = $input->getOption('plugin-id'); + + $this->generator->generate([ + 'module' => $module, + 'class_name' => $class_name, + 'plugin_id' => $plugin_id, + ]); + + $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']); + } + + /** + * {@inheritdoc} + */ + protected function interact(InputInterface $input, OutputInterface $output) + { + // 'module-name' option. + $module = $this->getModuleOption(); + + // 'class-name' option + $class = $input->getOption('class'); + if (!$class) { + $class = $this->getIo()->ask( + $this->trans('commands.generate.plugin.migrate.data_parser.questions.class'), + ucfirst($this->stringConverter->underscoreToCamelCase($module)), + function ($class) { + return $this->validator->validateClassName($class); + } + ); + $input->setOption('class', $class); + } + + // 'plugin-id' option. + $pluginId = $input->getOption('plugin-id'); + if (!$pluginId) { + $pluginId = $this->getIo()->ask( + $this->trans('commands.generate.plugin.migrate.data_parser.questions.plugin-id'), + $this->stringConverter->camelCaseToUnderscore($class) + ); + $input->setOption('plugin-id', $pluginId); + } + } +} diff --git a/src/Generator/PluginMigrateDataParserGenerator.php b/src/Generator/PluginMigrateDataParserGenerator.php new file mode 100644 index 000000000..28aae0f6c --- /dev/null +++ b/src/Generator/PluginMigrateDataParserGenerator.php @@ -0,0 +1,45 @@ +extensionManager = $extensionManager; + } + + /** + * {@inheritdoc} + */ + public function generate(array $parameters) + { + $module = $parameters['module']; + $class_name = $parameters['class_name']; + + $this->renderFile( + 'module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig', + $this->extensionManager->getPluginPath($module, 'migrate_plus') . '/data_parser/' . $class_name . '.php', + $parameters + ); + } +} diff --git a/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig b/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig new file mode 100644 index 000000000..5f5489536 --- /dev/null +++ b/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig @@ -0,0 +1,38 @@ +{% extends "base/class.php.twig" %} + +{% block file_path %} + \Drupal\{{module}}\Plugin\migrate_plus\data_parser\{{class_name}}. +{% endblock %} + +{% block namespace_class %} + namespace Drupal\{{module}}\Plugin\migrate_plus\data_parser; +{% endblock %} + +{% block use_class %} + use Drupal\migrate_plus\DataParserPluginBase; +{% endblock %} + +{% block class_declaration %} + /** + * Provides a '{{class_name}}' migrate_plus data parser plugin. + * + * @DataParser( + * id = "{{plugin_id}}" + * ) + */ + class {{class_name}} extends DataParserPluginBase {% endblock %} +{% block class_methods %} + /** + * {@inheritdoc} + */ + protected function openSourceUrl($url) { + // Plugin logic goes here. + } + + /** + * {@inheritdoc} + */ + protected function fetchNextRow() { + // Plugin logic goes here. + } +{% endblock %} From fc750f91476067ceeb3786f2f2091ea86ae0a55a Mon Sep 17 00:00:00 2001 From: Rohit Joshi Date: Fri, 9 Feb 2018 11:29:34 +0530 Subject: [PATCH 2/7] Updating code styling in twig. --- .../data_parser/data_parser.php.twig | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig b/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig index 5f5489536..0aabc3aba 100644 --- a/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig +++ b/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig @@ -1,38 +1,38 @@ {% extends "base/class.php.twig" %} {% block file_path %} - \Drupal\{{module}}\Plugin\migrate_plus\data_parser\{{class_name}}. +\Drupal\{{module}}\Plugin\migrate_plus\data_parser\{{class_name}}. {% endblock %} {% block namespace_class %} - namespace Drupal\{{module}}\Plugin\migrate_plus\data_parser; +namespace Drupal\{{module}}\Plugin\migrate_plus\data_parser; {% endblock %} {% block use_class %} - use Drupal\migrate_plus\DataParserPluginBase; +use Drupal\migrate_plus\DataParserPluginBase; {% endblock %} {% block class_declaration %} - /** - * Provides a '{{class_name}}' migrate_plus data parser plugin. - * - * @DataParser( - * id = "{{plugin_id}}" - * ) - */ - class {{class_name}} extends DataParserPluginBase {% endblock %} +/** +* Provides a '{{class_name}}' data parser plugin. +* +* @DataParser( +* id = "{{plugin_id}}" +* ) +*/ +class {{class_name}} extends DataParserPluginBase {% endblock %} {% block class_methods %} /** * {@inheritdoc} */ protected function openSourceUrl($url) { - // Plugin logic goes here. + // Plugin logic goes here. } /** * {@inheritdoc} */ protected function fetchNextRow() { - // Plugin logic goes here. + // Plugin logic goes here. } {% endblock %} From 50ee3e1c436835cadd987fc8ea4f1685c9cdba70 Mon Sep 17 00:00:00 2001 From: Rohit Joshi Date: Fri, 9 Feb 2018 11:35:00 +0530 Subject: [PATCH 3/7] Updating code styling in twig. --- .../data_parser/data_parser.php.twig | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig b/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig index 0aabc3aba..24ed0fe15 100644 --- a/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig +++ b/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig @@ -22,17 +22,17 @@ use Drupal\migrate_plus\DataParserPluginBase; */ class {{class_name}} extends DataParserPluginBase {% endblock %} {% block class_methods %} - /** - * {@inheritdoc} - */ - protected function openSourceUrl($url) { - // Plugin logic goes here. - } + /** + * {@inheritdoc} + */ + protected function openSourceUrl($url) { + // Plugin logic goes here. + } - /** - * {@inheritdoc} - */ - protected function fetchNextRow() { - // Plugin logic goes here. - } + /** + * {@inheritdoc} + */ + protected function fetchNextRow() { + // Plugin logic goes here. + } {% endblock %} From dc13fe4af1bbd0a7a29126e2271f4ca7f1e73135 Mon Sep 17 00:00:00 2001 From: Rohit Joshi Date: Fri, 9 Feb 2018 11:42:42 +0530 Subject: [PATCH 4/7] Removing unwanted dependency from container. --- config/services/generate.yml | 2 +- .../PluginMigrateDataParserCommand.php | 21 ++++++------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/config/services/generate.yml b/config/services/generate.yml index c5e787f80..473ade057 100644 --- a/config/services/generate.yml +++ b/config/services/generate.yml @@ -116,7 +116,7 @@ services: - { name: drupal.command } console.generate_plugin_migrate_data_parser: class: Drupal\Console\Command\Generate\PluginMigrateDataParserCommand - arguments: [ '@console.plugin_migrate_data_parser_generator', '@console.chain_queue', '@console.extension_manager', '@console.string_converter', '@console.validator'] + arguments: [ '@console.plugin_migrate_data_parser_generator', '@console.chain_queue', '@console.string_converter', '@console.validator'] tags: - { name: drupal.command } console.generate_plugin_rest_resource: diff --git a/src/Command/Generate/PluginMigrateDataParserCommand.php b/src/Command/Generate/PluginMigrateDataParserCommand.php index 378d44a16..fd06f740a 100644 --- a/src/Command/Generate/PluginMigrateDataParserCommand.php +++ b/src/Command/Generate/PluginMigrateDataParserCommand.php @@ -15,7 +15,6 @@ use Drupal\Console\Generator\PluginMigrateDataParserGenerator; use Drupal\Console\Command\Shared\ModuleTrait; use Drupal\Console\Command\Shared\ConfirmationTrait; -use Drupal\Console\Extension\Manager; use Drupal\Console\Core\Utils\StringConverter; use Drupal\Console\Core\Utils\ChainQueue; @@ -34,11 +33,6 @@ class PluginMigrateDataParserCommand extends ContainerAwareCommand */ protected $chainQueue; - /** - * @var Manager - */ - protected $extensionManager; - /** * @var StringConverter */ @@ -53,21 +47,18 @@ class PluginMigrateDataParserCommand extends ContainerAwareCommand * PluginMigrateDataParserGenerator constructor. * * @param PluginMigrateDataParserGenerator $generator - * @param ChainQueue $chainQueue - * @param Manager $extensionManager - * @param StringConverter $stringConverter - * @param Validator $validator + * @param ChainQueue $chainQueue + * @param StringConverter $stringConverter + * @param Validator $validator */ public function __construct( PluginMigrateDataParserGenerator $generator, - ChainQueue $chainQueue, - Manager $extensionManager, - StringConverter $stringConverter, - Validator $validator + ChainQueue $chainQueue, + StringConverter $stringConverter, + Validator $validator ) { $this->generator = $generator; $this->chainQueue = $chainQueue; - $this->extensionManager = $extensionManager; $this->stringConverter = $stringConverter; $this->validator = $validator; parent::__construct(); From 3a4eeed5d0b9d67c92361e69b8c04bcbd7703736 Mon Sep 17 00:00:00 2001 From: Rohit Joshi Date: Fri, 9 Feb 2018 11:49:58 +0530 Subject: [PATCH 5/7] Adding option for plugin title, --- .../PluginMigrateDataParserCommand.php | 18 ++++++++++++++++++ .../data_parser/data_parser.php.twig | 1 + 2 files changed, 19 insertions(+) diff --git a/src/Command/Generate/PluginMigrateDataParserCommand.php b/src/Command/Generate/PluginMigrateDataParserCommand.php index fd06f740a..c39a93ba5 100644 --- a/src/Command/Generate/PluginMigrateDataParserCommand.php +++ b/src/Command/Generate/PluginMigrateDataParserCommand.php @@ -87,6 +87,12 @@ protected function configure() null, InputOption::VALUE_OPTIONAL, $this->trans('commands.generate.plugin.migrate.data_parser.options.plugin-id') + ) + ->addOption( + 'plugin-title', + null, + InputOption::VALUE_OPTIONAL, + $this->trans('commands.generate.plugin.migrate.data_parser.options.plugin-title') )->setAliases(['gpmdp']); } @@ -103,11 +109,13 @@ protected function execute(InputInterface $input, OutputInterface $output) $module = $input->getOption('module'); $class_name = $this->validator->validateClassName($input->getOption('class')); $plugin_id = $input->getOption('plugin-id'); + $plugin_title = $input->getOption('plugin-title'); $this->generator->generate([ 'module' => $module, 'class_name' => $class_name, 'plugin_id' => $plugin_id, + 'plugin_title' => $plugin_title, ]); $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']); @@ -143,5 +151,15 @@ function ($class) { ); $input->setOption('plugin-id', $pluginId); } + + // 'plugin-title' option. + $pluginTitle = $input->getOption('plugin-title'); + if (!$pluginTitle) { + $pluginTitle = $this->getIo()->ask( + $this->trans('commands.generate.plugin.migrate.data_parser.questions.plugin-title'), + $this->stringConverter->camelCaseToUnderscore($class) + ); + $input->setOption('plugin-title', $pluginTitle); + } } } diff --git a/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig b/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig index 24ed0fe15..9028dc710 100644 --- a/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig +++ b/templates/module/src/Plugin/migrate_plus/data_parser/data_parser.php.twig @@ -18,6 +18,7 @@ use Drupal\migrate_plus\DataParserPluginBase; * * @DataParser( * id = "{{plugin_id}}" +* title = @Translation("{{plugin_title}}") * ) */ class {{class_name}} extends DataParserPluginBase {% endblock %} From 6550fcd26666e687411a9eb9df71ae4a888428fb Mon Sep 17 00:00:00 2001 From: Rohit Joshi Date: Fri, 9 Feb 2018 11:55:56 +0530 Subject: [PATCH 6/7] Adding dependency of extension manager. --- config/services/generate.yml | 2 +- src/Command/Generate/PluginMigrateDataParserCommand.php | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/config/services/generate.yml b/config/services/generate.yml index 473ade057..c5e787f80 100644 --- a/config/services/generate.yml +++ b/config/services/generate.yml @@ -116,7 +116,7 @@ services: - { name: drupal.command } console.generate_plugin_migrate_data_parser: class: Drupal\Console\Command\Generate\PluginMigrateDataParserCommand - arguments: [ '@console.plugin_migrate_data_parser_generator', '@console.chain_queue', '@console.string_converter', '@console.validator'] + arguments: [ '@console.plugin_migrate_data_parser_generator', '@console.chain_queue', '@console.extension_manager', '@console.string_converter', '@console.validator'] tags: - { name: drupal.command } console.generate_plugin_rest_resource: diff --git a/src/Command/Generate/PluginMigrateDataParserCommand.php b/src/Command/Generate/PluginMigrateDataParserCommand.php index c39a93ba5..660f27c4f 100644 --- a/src/Command/Generate/PluginMigrateDataParserCommand.php +++ b/src/Command/Generate/PluginMigrateDataParserCommand.php @@ -14,6 +14,7 @@ use Drupal\Console\Core\Command\ContainerAwareCommand; use Drupal\Console\Generator\PluginMigrateDataParserGenerator; use Drupal\Console\Command\Shared\ModuleTrait; +use Drupal\Console\Extension\Manager; use Drupal\Console\Command\Shared\ConfirmationTrait; use Drupal\Console\Core\Utils\StringConverter; use Drupal\Console\Core\Utils\ChainQueue; @@ -33,6 +34,11 @@ class PluginMigrateDataParserCommand extends ContainerAwareCommand */ protected $chainQueue; + /** + * @var Manager + */ + protected $extensionManager; + /** * @var StringConverter */ @@ -48,17 +54,20 @@ class PluginMigrateDataParserCommand extends ContainerAwareCommand * * @param PluginMigrateDataParserGenerator $generator * @param ChainQueue $chainQueue + * @param Manager $extensionManager * @param StringConverter $stringConverter * @param Validator $validator */ public function __construct( PluginMigrateDataParserGenerator $generator, ChainQueue $chainQueue, + Manager $extensionManager, StringConverter $stringConverter, Validator $validator ) { $this->generator = $generator; $this->chainQueue = $chainQueue; + $this->extensionManager = $extensionManager; $this->stringConverter = $stringConverter; $this->validator = $validator; parent::__construct(); From b18260dda6aa0c83d52c625b20ad42ab33ca1c53 Mon Sep 17 00:00:00 2001 From: Rohit Joshi Date: Tue, 20 Feb 2018 15:22:15 +0530 Subject: [PATCH 7/7] Changing the command name. --- .../PluginMigrateDataParserCommand.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Command/Generate/PluginMigrateDataParserCommand.php b/src/Command/Generate/PluginMigrateDataParserCommand.php index 660f27c4f..242cc7dd2 100644 --- a/src/Command/Generate/PluginMigrateDataParserCommand.php +++ b/src/Command/Generate/PluginMigrateDataParserCommand.php @@ -76,9 +76,9 @@ public function __construct( protected function configure() { $this - ->setName('generate:plugin:migrate:data_parser') - ->setDescription($this->trans('commands.generate.plugin.migrate.data_parser.description')) - ->setHelp($this->trans('commands.generate.plugin.migrate.data_parser.help')) + ->setName('generate:plugin:migrate:dataparser') + ->setDescription($this->trans('commands.generate.plugin.migrate.dataparser.description')) + ->setHelp($this->trans('commands.generate.plugin.migrate.dataparser.help')) ->addOption( 'module', null, @@ -89,19 +89,19 @@ protected function configure() 'class', null, InputOption::VALUE_OPTIONAL, - $this->trans('commands.generate.plugin.migrate.data_parser.options.class') + $this->trans('commands.generate.plugin.migrate.dataparser.options.class') ) ->addOption( 'plugin-id', null, InputOption::VALUE_OPTIONAL, - $this->trans('commands.generate.plugin.migrate.data_parser.options.plugin-id') + $this->trans('commands.generate.plugin.migrate.dataparser.options.plugin-id') ) ->addOption( 'plugin-title', null, InputOption::VALUE_OPTIONAL, - $this->trans('commands.generate.plugin.migrate.data_parser.options.plugin-title') + $this->trans('commands.generate.plugin.migrate.dataparser.options.plugin-title') )->setAliases(['gpmdp']); } @@ -142,7 +142,7 @@ protected function interact(InputInterface $input, OutputInterface $output) $class = $input->getOption('class'); if (!$class) { $class = $this->getIo()->ask( - $this->trans('commands.generate.plugin.migrate.data_parser.questions.class'), + $this->trans('commands.generate.plugin.migrate.dataparser.questions.class'), ucfirst($this->stringConverter->underscoreToCamelCase($module)), function ($class) { return $this->validator->validateClassName($class); @@ -155,7 +155,7 @@ function ($class) { $pluginId = $input->getOption('plugin-id'); if (!$pluginId) { $pluginId = $this->getIo()->ask( - $this->trans('commands.generate.plugin.migrate.data_parser.questions.plugin-id'), + $this->trans('commands.generate.plugin.migrate.dataparser.questions.plugin-id'), $this->stringConverter->camelCaseToUnderscore($class) ); $input->setOption('plugin-id', $pluginId); @@ -165,7 +165,7 @@ function ($class) { $pluginTitle = $input->getOption('plugin-title'); if (!$pluginTitle) { $pluginTitle = $this->getIo()->ask( - $this->trans('commands.generate.plugin.migrate.data_parser.questions.plugin-title'), + $this->trans('commands.generate.plugin.migrate.dataparser.questions.plugin-title'), $this->stringConverter->camelCaseToUnderscore($class) ); $input->setOption('plugin-title', $pluginTitle);