5 * Contains \Drupal\Console\Command\Generate\PluginMailCommand.
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 Drupal\Console\Command\Shared\ServicesTrait;
14 use Drupal\Console\Command\Shared\ModuleTrait;
15 use Drupal\Console\Command\Shared\FormTrait;
16 use Drupal\Console\Command\Shared\ConfirmationTrait;
17 use Drupal\Console\Generator\PluginMailGenerator;
18 use Symfony\Component\Console\Command\Command;
19 use Drupal\Console\Core\Style\DrupalStyle;
20 use Drupal\Console\Extension\Manager;
21 use Drupal\Console\Core\Command\Shared\ContainerAwareCommandTrait;
22 use Drupal\Console\Core\Utils\StringConverter;
23 use Drupal\Console\Utils\Validator;
24 use Drupal\Console\Core\Utils\ChainQueue;
27 * Class PluginMailCommand
29 * @package Drupal\Console\Command\Generate
31 class PluginMailCommand extends Command
36 use ConfirmationTrait;
37 use ContainerAwareCommandTrait;
42 protected $extensionManager;
45 * @var PluginMailGenerator
50 * @var StringConverter
52 protected $stringConverter;
62 protected $chainQueue;
66 * PluginMailCommand constructor.
68 * @param Manager $extensionManager
69 * @param PluginMailGenerator $generator
70 * @param StringConverter $stringConverter
71 * @param Validator $validator
72 * @param ChainQueue $chainQueue
74 public function __construct(
75 Manager $extensionManager,
76 PluginMailGenerator $generator,
77 StringConverter $stringConverter,
79 ChainQueue $chainQueue
81 $this->extensionManager = $extensionManager;
82 $this->generator = $generator;
83 $this->stringConverter = $stringConverter;
84 $this->validator = $validator;
85 $this->chainQueue = $chainQueue;
86 parent::__construct();
89 protected function configure()
92 ->setName('generate:plugin:mail')
93 ->setDescription($this->trans('commands.generate.plugin.mail.description'))
94 ->setHelp($this->trans('commands.generate.plugin.mail.help'))
95 ->addOption('module', null, InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
99 InputOption::VALUE_OPTIONAL,
100 $this->trans('commands.generate.plugin.mail.options.class')
105 InputOption::VALUE_OPTIONAL,
106 $this->trans('commands.generate.plugin.mail.options.label')
111 InputOption::VALUE_OPTIONAL,
112 $this->trans('commands.generate.plugin.mail.options.plugin-id')
117 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
118 $this->trans('commands.common.options.services')
125 protected function execute(InputInterface $input, OutputInterface $output)
127 $io = new DrupalStyle($input, $output);
129 // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmGeneration
130 if (!$this->confirmGeneration($io)) {
134 $module = $input->getOption('module');
135 $class_name = $input->getOption('class');
136 $label = $input->getOption('label');
137 $plugin_id = $input->getOption('plugin-id');
138 $services = $input->getOption('services');
140 // @see use Drupal\Console\Command\Shared\ServicesTrait::buildServices
141 $build_services = $this->buildServices($services);
143 $this->generator->generate($module, $class_name, $label, $plugin_id, $build_services);
145 $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
148 protected function interact(InputInterface $input, OutputInterface $output)
150 $io = new DrupalStyle($input, $output);
153 $module = $input->getOption('module');
155 // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
156 $module = $this->moduleQuestion($io);
157 $input->setOption('module', $module);
161 $class = $input->getOption('class');
164 $this->trans('commands.generate.plugin.mail.options.class'),
167 return $this->validator->validateClassName($class);
170 $input->setOption('class', $class);
174 $label = $input->getOption('label');
177 $this->trans('commands.generate.plugin.mail.options.label'),
178 $this->stringConverter->camelCaseToHuman($class)
180 $input->setOption('label', $label);
183 // --plugin-id option
184 $pluginId = $input->getOption('plugin-id');
186 $pluginId = $io->ask(
187 $this->trans('commands.generate.plugin.mail.options.plugin-id'),
188 $this->stringConverter->camelCaseToUnderscore($class)
190 $input->setOption('plugin-id', $pluginId);
194 // @see Drupal\Console\Command\Shared\ServicesTrait::servicesQuestion
195 $services = $this->servicesQuestion($io);
196 $input->setOption('services', $services);