5 * Contains \Drupal\Console\Command\Generate\PluginFieldTypeCommand.
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\Generator\PluginFieldTypeGenerator;
14 use Drupal\Console\Command\Shared\ModuleTrait;
15 use Drupal\Console\Command\Shared\ConfirmationTrait;
16 use Symfony\Component\Console\Command\Command;
17 use Drupal\Console\Core\Style\DrupalStyle;
18 use Drupal\Console\Extension\Manager;
19 use Drupal\Console\Core\Command\Shared\CommandTrait;
20 use Drupal\Console\Core\Utils\StringConverter;
21 use Drupal\Console\Core\Utils\ChainQueue;
22 use Drupal\Core\Field\FieldTypePluginManager;
25 * Class PluginFieldTypeCommand
27 * @package Drupal\Console\Command\Generate
29 class PluginFieldTypeCommand extends Command
32 use ConfirmationTrait;
38 protected $extensionManager;
41 * @var PluginFieldTypeGenerator
46 * @var StringConverter
48 protected $stringConverter;
53 protected $chainQueue;
57 * PluginFieldTypeCommand constructor.
59 * @param Manager $extensionManager
60 * @param PluginFieldTypeGenerator $generator
61 * @param StringConverter $stringConverter
62 * @param ChainQueue $chainQueue
64 public function __construct(
65 Manager $extensionManager,
66 PluginFieldTypeGenerator $generator,
67 StringConverter $stringConverter,
68 ChainQueue $chainQueue
70 $this->extensionManager = $extensionManager;
71 $this->generator = $generator;
72 $this->stringConverter = $stringConverter;
73 $this->chainQueue = $chainQueue;
74 parent::__construct();
77 protected function configure()
80 ->setName('generate:plugin:fieldtype')
81 ->setDescription($this->trans('commands.generate.plugin.fieldtype.description'))
82 ->setHelp($this->trans('commands.generate.plugin.fieldtype.help'))
83 ->addOption('module', null, InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
87 InputOption::VALUE_REQUIRED,
88 $this->trans('commands.generate.plugin.fieldtype.options.class')
93 InputOption::VALUE_OPTIONAL,
94 $this->trans('commands.generate.plugin.fieldtype.options.label')
99 InputOption::VALUE_OPTIONAL,
100 $this->trans('commands.generate.plugin.fieldtype.options.plugin-id')
105 InputOption::VALUE_OPTIONAL,
106 $this->trans('commands.generate.plugin.fieldtype.options.description')
111 InputOption::VALUE_OPTIONAL,
112 $this->trans('commands.generate.plugin.fieldtype.options.default-widget')
117 InputOption::VALUE_OPTIONAL,
118 $this->trans('commands.generate.plugin.fieldtype.options.default-formatter')
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 $description = $input->getOption('description');
139 $default_widget = $input->getOption('default-widget');
140 $default_formatter = $input->getOption('default-formatter');
143 ->generate($module, $class_name, $label, $plugin_id, $description, $default_widget, $default_formatter);
145 $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery'], false);
150 protected function interact(InputInterface $input, OutputInterface $output)
152 $io = new DrupalStyle($input, $output);
155 $module = $input->getOption('module');
157 // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
158 $module = $this->moduleQuestion($io);
159 $input->setOption('module', $module);
163 $class_name = $input->getOption('class');
165 $class_name = $io->ask(
166 $this->trans('commands.generate.plugin.fieldtype.questions.class'),
169 $input->setOption('class', $class_name);
173 $label = $input->getOption('label');
176 $this->trans('commands.generate.plugin.fieldtype.questions.label'),
177 $this->stringConverter->camelCaseToHuman($class_name)
179 $input->setOption('label', $label);
182 // --plugin-id option
183 $plugin_id = $input->getOption('plugin-id');
185 $plugin_id = $io->ask(
186 $this->trans('commands.generate.plugin.fieldtype.questions.plugin-id'),
187 $this->stringConverter->camelCaseToUnderscore($class_name)
189 $input->setOption('plugin-id', $plugin_id);
192 // --description option
193 $description = $input->getOption('description');
195 $description = $io->ask(
196 $this->trans('commands.generate.plugin.fieldtype.questions.description'),
199 $input->setOption('description', $description);
202 // --default-widget option
203 $default_widget = $input->getOption('default-widget');
204 if (!$default_widget) {
205 $default_widget = $io->askEmpty(
206 $this->trans('commands.generate.plugin.fieldtype.questions.default-widget')
208 $input->setOption('default-widget', $default_widget);
211 // --default-formatter option
212 $default_formatter = $input->getOption('default-formatter');
213 if (!$default_formatter) {
214 $default_formatter = $io->askEmpty(
215 $this->trans('commands.generate.plugin.fieldtype.questions.default-formatter')
217 $input->setOption('default-formatter', $default_formatter);