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\ConfirmationTrait;
16 use Drupal\Console\Generator\PluginMailGenerator;
17 use Drupal\Console\Core\Command\ContainerAwareCommand;
18 use Drupal\Console\Extension\Manager;
19 use Drupal\Console\Core\Utils\StringConverter;
20 use Drupal\Console\Utils\Validator;
21 use Drupal\Console\Core\Utils\ChainQueue;
24 * Class PluginMailCommand
26 * @package Drupal\Console\Command\Generate
28 class PluginMailCommand extends ContainerAwareCommand
32 use ConfirmationTrait;
37 protected $extensionManager;
40 * @var PluginMailGenerator
45 * @var StringConverter
47 protected $stringConverter;
57 protected $chainQueue;
61 * PluginMailCommand constructor.
63 * @param Manager $extensionManager
64 * @param PluginMailGenerator $generator
65 * @param StringConverter $stringConverter
66 * @param Validator $validator
67 * @param ChainQueue $chainQueue
69 public function __construct(
70 Manager $extensionManager,
71 PluginMailGenerator $generator,
72 StringConverter $stringConverter,
74 ChainQueue $chainQueue
76 $this->extensionManager = $extensionManager;
77 $this->generator = $generator;
78 $this->stringConverter = $stringConverter;
79 $this->validator = $validator;
80 $this->chainQueue = $chainQueue;
81 parent::__construct();
84 protected function configure()
87 ->setName('generate:plugin:mail')
88 ->setDescription($this->trans('commands.generate.plugin.mail.description'))
89 ->setHelp($this->trans('commands.generate.plugin.mail.help'))
93 InputOption::VALUE_REQUIRED,
94 $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')
119 )->setAliases(['gpm']);
125 protected function execute(InputInterface $input, OutputInterface $output)
127 // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
128 if (!$this->confirmOperation()) {
132 $module = $input->getOption('module');
133 $class_name = $this->validator->validateClassName($input->getOption('class'));
134 $label = $input->getOption('label');
135 $plugin_id = $input->getOption('plugin-id');
136 $services = $input->getOption('services');
138 // @see use Drupal\Console\Command\Shared\ServicesTrait::buildServices
139 $build_services = $this->buildServices($services);
141 $this->generator->generate([
143 'class_name' => $class_name,
145 'plugin_id' => $plugin_id,
146 'services' => $build_services,
149 $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
152 protected function interact(InputInterface $input, OutputInterface $output)
155 $this->getModuleOption();
158 $class = $input->getOption('class');
160 $class = $this->getIo()->ask(
161 $this->trans('commands.generate.plugin.mail.options.class'),
164 return $this->validator->validateClassName($class);
167 $input->setOption('class', $class);
171 $label = $input->getOption('label');
173 $label = $this->getIo()->ask(
174 $this->trans('commands.generate.plugin.mail.options.label'),
175 $this->stringConverter->camelCaseToHuman($class)
177 $input->setOption('label', $label);
180 // --plugin-id option
181 $pluginId = $input->getOption('plugin-id');
183 $pluginId = $this->getIo()->ask(
184 $this->trans('commands.generate.plugin.mail.options.plugin-id'),
185 $this->stringConverter->camelCaseToUnderscore($class)
187 $input->setOption('plugin-id', $pluginId);
191 // @see Drupal\Console\Command\Shared\ServicesTrait::servicesQuestion
192 $services = $this->servicesQuestion();
193 $input->setOption('services', $services);