5 * Contains \Drupal\Console\Command\Generate\PluginBlockCommand.
8 namespace Drupal\Console\Command\Generate;
10 use Symfony\Component\Console\Input\InputInterface;
11 use Symfony\Component\Console\Input\InputOption;
12 use Symfony\Component\Console\Output\OutputInterface;
13 use Symfony\Component\Console\Command\Command;
14 use Drupal\Console\Generator\PluginMigrateSourceGenerator;
15 use Drupal\Console\Command\Shared\ModuleTrait;
16 use Drupal\Console\Command\Shared\ConfirmationTrait;
17 use Drupal\Console\Core\Command\Shared\ContainerAwareCommandTrait;
18 use Drupal\Console\Extension\Manager;
19 use Drupal\Console\Utils\Validator;
20 use Drupal\Console\Core\Utils\StringConverter;
21 use Drupal\Console\Core\Style\DrupalStyle;
22 use Drupal\Console\Core\Utils\ChainQueue;
23 use Drupal\Core\Config\ConfigFactory;
24 use Drupal\Core\Entity\EntityTypeManagerInterface;
25 use Drupal\Core\Render\ElementInfoManagerInterface;
27 class PluginMigrateSourceCommand extends Command
30 use ConfirmationTrait;
31 use ContainerAwareCommandTrait;
36 protected $configFactory;
41 protected $chainQueue;
44 * @var PluginMigrateSourceGenerator
49 * @var EntityTypeManagerInterface
51 protected $entityTypeManager;
56 protected $extensionManager;
64 * @var StringConverter
66 protected $stringConverter;
69 * @var ElementInfoManagerInterface
71 protected $elementInfoManager;
74 * PluginBlockCommand constructor.
76 * @param ConfigFactory $configFactory
77 * @param ChainQueue $chainQueue
78 * @param PluginBlockGenerator $generator
79 * @param EntityTypeManagerInterface $entityTypeManager
80 * @param Manager $extensionManager
81 * @param Validator $validator
82 * @param StringConverter $stringConverter
83 * @param ElementInfoManagerInterface $elementInfoManager
85 public function __construct(
86 ConfigFactory $configFactory,
87 ChainQueue $chainQueue,
88 PluginMigrateSourceGenerator $generator,
89 EntityTypeManagerInterface $entityTypeManager,
90 Manager $extensionManager,
92 StringConverter $stringConverter,
93 ElementInfoManagerInterface $elementInfoManager
95 $this->configFactory = $configFactory;
96 $this->chainQueue = $chainQueue;
97 $this->generator = $generator;
98 $this->entityTypeManager = $entityTypeManager;
99 $this->extensionManager = $extensionManager;
100 $this->validator = $validator;
101 $this->stringConverter = $stringConverter;
102 $this->elementInfoManager = $elementInfoManager;
103 parent::__construct();
106 protected function configure()
109 ->setName('generate:plugin:migrate:source')
110 ->setDescription($this->trans('commands.generate.plugin.migrate.source.description'))
111 ->setHelp($this->trans('commands.generate.plugin.migrate.source.help'))
112 ->addOption('module', '', InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
116 InputOption::VALUE_OPTIONAL,
117 $this->trans('commands.generate.plugin.migrate.source.options.class')
122 InputOption::VALUE_OPTIONAL,
123 $this->trans('commands.generate.plugin.migrate.source.options.plugin-id')
128 InputOption::VALUE_OPTIONAL,
129 $this->trans('commands.generate.plugin.migrate.source.options.table')
134 InputOption::VALUE_OPTIONAL,
135 $this->trans('commands.generate.plugin.migrate.source.options.alias')
140 InputOption::VALUE_OPTIONAL,
141 $this->trans('commands.generate.plugin.migrate.source.options.group-by')
146 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
147 $this->trans('commands.generate.plugin.migrate.source.options.fields')
154 protected function execute(InputInterface $input, OutputInterface $output)
156 $io = new DrupalStyle($input, $output);
158 // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmGeneration
159 if (!$this->confirmGeneration($io)) {
163 $module = $input->getOption('module');
164 $class_name = $input->getOption('class');
165 $plugin_id = $input->getOption('plugin-id');
166 $table = $input->getOption('table');
167 $alias = $input->getOption('alias');
168 $group_by = $input->getOption('group-by');
169 $fields = $input->getOption('fields');
182 $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
185 protected function interact(InputInterface $input, OutputInterface $output)
187 $io = new DrupalStyle($input, $output);
189 $module = $input->getOption('module');
191 // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
192 $module = $this->moduleQuestion($io);
193 $input->setOption('module', $module);
196 $class = $input->getOption('class');
199 $this->trans('commands.generate.plugin.migrate.source.questions.class'),
200 ucfirst($this->stringConverter->underscoreToCamelCase($module)),
202 return $this->validator->validateClassName($class);
205 $input->setOption('class', $class);
208 $pluginId = $input->getOption('plugin-id');
210 $pluginId = $io->ask(
211 $this->trans('commands.generate.plugin.migrate.source.questions.plugin-id'),
212 $this->stringConverter->camelCaseToUnderscore($class)
214 $input->setOption('plugin-id', $pluginId);
217 $table = $input->getOption('table');
220 $this->trans('commands.generate.plugin.migrate.source.questions.table'),
223 $input->setOption('table', $table);
226 $alias = $input->getOption('alias');
229 $this->trans('commands.generate.plugin.migrate.source.questions.alias'),
232 $input->setOption('alias', $alias);
235 $groupBy = $input->getOption('group-by');
236 if ($groupBy == '') {
238 $this->trans('commands.generate.plugin.migrate.source.questions.group-by'),
241 $input->setOption('group-by', $groupBy);
244 $fields = $input->getOption('fields');
249 $this->trans('commands.generate.plugin.migrate.source.questions.fields.id'),
255 $description = $io->ask(
256 $this->trans('commands.generate.plugin.migrate.source.questions.fields.description'),
261 'description' => $description,
264 $input->setOption('fields', $fields);