5 * Contains \Drupal\Console\Command\Generate\PluginFieldFormatterCommand.
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\PluginFieldFormatterGenerator;
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\Core\Field\FieldTypePluginManager;
19 use Drupal\Console\Extension\Manager;
20 use Drupal\Console\Core\Command\Shared\CommandTrait;
21 use Drupal\Console\Core\Utils\StringConverter;
22 use Drupal\Console\Core\Utils\ChainQueue;
25 * Class PluginFieldFormatterCommand
27 * @package Drupal\Console\Command\Generate
29 class PluginFieldFormatterCommand extends Command
32 use ConfirmationTrait;
38 protected $extensionManager;
41 * @var PluginFieldFormatterGenerator
46 * @var StringConverter
48 protected $stringConverter;
51 * @var FieldTypePluginManager
53 protected $fieldTypePluginManager;
58 protected $chainQueue;
62 * PluginImageFormatterCommand constructor.
64 * @param Manager $extensionManager
65 * @param PluginFieldFormatterGenerator $generator
66 * @param StringConverter $stringConverter
67 * @param FieldTypePluginManager $fieldTypePluginManager
68 * @param ChainQueue $chainQueue
70 public function __construct(
71 Manager $extensionManager,
72 PluginFieldFormatterGenerator $generator,
73 StringConverter $stringConverter,
74 FieldTypePluginManager $fieldTypePluginManager,
75 ChainQueue $chainQueue
77 $this->extensionManager = $extensionManager;
78 $this->generator = $generator;
79 $this->stringConverter = $stringConverter;
80 $this->fieldTypePluginManager = $fieldTypePluginManager;
81 $this->chainQueue = $chainQueue;
82 parent::__construct();
85 protected function configure()
88 ->setName('generate:plugin:fieldformatter')
89 ->setDescription($this->trans('commands.generate.plugin.fieldformatter.description'))
90 ->setHelp($this->trans('commands.generate.plugin.fieldformatter.help'))
91 ->addOption('module', null, InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
95 InputOption::VALUE_REQUIRED,
96 $this->trans('commands.generate.plugin.fieldformatter.options.class')
101 InputOption::VALUE_OPTIONAL,
102 $this->trans('commands.generate.plugin.fieldformatter.options.label')
107 InputOption::VALUE_OPTIONAL,
108 $this->trans('commands.generate.plugin.fieldformatter.options.plugin-id')
113 InputOption::VALUE_OPTIONAL,
114 $this->trans('commands.generate.plugin.fieldformatter.options.field-type')
121 protected function execute(InputInterface $input, OutputInterface $output)
123 $io = new DrupalStyle($input, $output);
125 // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmGeneration
126 if (!$this->confirmGeneration($io)) {
130 $module = $input->getOption('module');
131 $class_name = $input->getOption('class');
132 $label = $input->getOption('label');
133 $plugin_id = $input->getOption('plugin-id');
134 $field_type = $input->getOption('field-type');
136 $this->generator->generate($module, $class_name, $label, $plugin_id, $field_type);
138 $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
143 protected function interact(InputInterface $input, OutputInterface $output)
145 $io = new DrupalStyle($input, $output);
148 $module = $input->getOption('module');
150 // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
151 $module = $this->moduleQuestion($io);
152 $input->setOption('module', $module);
156 $class = $input->getOption('class');
159 $this->trans('commands.generate.plugin.fieldformatter.questions.class'),
160 'ExampleFieldFormatter'
162 $input->setOption('class', $class);
165 // --plugin label option
166 $label = $input->getOption('label');
169 $this->trans('commands.generate.plugin.fieldformatter.questions.label'),
170 $this->stringConverter->camelCaseToHuman($class)
172 $input->setOption('label', $label);
176 $plugin_id = $input->getOption('plugin-id');
178 $plugin_id = $io->ask(
179 $this->trans('commands.generate.plugin.fieldformatter.questions.plugin-id'),
180 $this->stringConverter->camelCaseToUnderscore($class)
182 $input->setOption('plugin-id', $plugin_id);
185 // --field type option
186 $field_type = $input->getOption('field-type');
188 // Gather valid field types.
189 $field_type_options = [];
190 foreach ($this->fieldTypePluginManager->getGroupedDefinitions($this->fieldTypePluginManager->getUiDefinitions()) as $category => $field_types) {
191 foreach ($field_types as $name => $field_type) {
192 $field_type_options[] = $name;
196 $field_type = $io->choice(
197 $this->trans('commands.generate.plugin.fieldwidget.questions.field-type'),
201 $input->setOption('field-type', $field_type);