5 * Contains \Drupal\Console\Command\PluginConditionCommand.
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\Core\Entity\EntityTypeRepository;
15 use Drupal\Console\Core\Command\Shared\CommandTrait;
16 use Drupal\Console\Generator\PluginConditionGenerator;
17 use Drupal\Console\Command\Shared\ModuleTrait;
18 use Drupal\Console\Command\Shared\ConfirmationTrait;
19 use Drupal\Console\Core\Style\DrupalStyle;
20 use Drupal\Console\Extension\Manager;
21 use Drupal\Console\Core\Utils\ChainQueue;
22 use Drupal\Console\Core\Utils\StringConverter;
25 * Class PluginConditionCommand
27 * @package Drupal\Console\Command\Generate
29 class PluginConditionCommand extends Command
33 use ConfirmationTrait;
38 protected $extensionManager;
41 * @var PluginConditionGenerator
48 protected $chainQueue;
51 * @var StringConverter
53 protected $stringConverter;
57 * PluginConditionCommand constructor.
59 * @param Manager $extensionManager
60 * @param PluginConditionGenerator $generator
61 * @param ChainQueue $chainQueue
62 * @param EntityTypeRepository $entitytyperepository
63 * @param StringConverter $stringConverter
65 public function __construct(
66 Manager $extensionManager,
67 PluginConditionGenerator $generator,
68 ChainQueue $chainQueue,
69 EntityTypeRepository $entitytyperepository,
70 StringConverter $stringConverter
72 $this->extensionManager = $extensionManager;
73 $this->generator = $generator;
74 $this->chainQueue = $chainQueue;
75 $this->entitytyperepository = $entitytyperepository;
76 $this->stringConverter = $stringConverter;
77 parent::__construct();
80 protected function configure()
83 ->setName('generate:plugin:condition')
84 ->setDescription($this->trans('commands.generate.plugin.condition.description'))
85 ->setHelp($this->trans('commands.generate.plugin.condition.help'))
86 ->addOption('module', null, InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
90 InputOption::VALUE_REQUIRED,
91 $this->trans('commands.generate.plugin.condition.options.class')
96 InputOption::VALUE_REQUIRED,
97 $this->trans('commands.generate.plugin.condition.options.label')
102 InputOption::VALUE_REQUIRED,
103 $this->trans('commands.generate.plugin.condition.options.plugin-id')
106 'context-definition-id',
108 InputOption::VALUE_REQUIRED,
109 $this->trans('commands.generate.plugin.condition.options.context-definition-id')
112 'context-definition-label',
114 InputOption::VALUE_REQUIRED,
115 $this->trans('commands.generate.plugin.condition.options.context-definition-label')
118 'context-definition-required',
120 InputOption::VALUE_OPTIONAL,
121 $this->trans('commands.generate.plugin.condition.options.context-definition-required')
128 protected function execute(InputInterface $input, OutputInterface $output)
130 $io = new DrupalStyle($input, $output);
132 // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmGeneration
133 if (!$this->confirmGeneration($io)) {
137 $module = $input->getOption('module');
138 $class_name = $input->getOption('class');
139 $label = $input->getOption('label');
140 $plugin_id = $input->getOption('plugin-id');
141 $context_definition_id = $input->getOption('context-definition-id');
142 $context_definition_label = $input->getOption('context-definition-label');
143 $context_definition_required = $input->getOption('context-definition-required')?'TRUE':'FALSE';
147 ->generate($module, $class_name, $label, $plugin_id, $context_definition_id, $context_definition_label, $context_definition_required);
149 $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
154 protected function interact(InputInterface $input, OutputInterface $output)
156 $io = new DrupalStyle($input, $output);
158 $entityTypeRepository = $this->entitytyperepository;
160 $entity_types = $entityTypeRepository->getEntityTypeLabels(true);
163 $module = $input->getOption('module');
165 // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
166 $module = $this->moduleQuestion($io);
168 $input->setOption('module', $module);
171 $class = $input->getOption('class');
174 $this->trans('commands.generate.plugin.condition.questions.class'),
177 $input->setOption('class', $class);
180 // --plugin label option
181 $label = $input->getOption('label');
184 $this->trans('commands.generate.plugin.condition.questions.label'),
185 $this->stringConverter->camelCaseToHuman($class)
187 $input->setOption('label', $label);
190 // --plugin-id option
191 $pluginId = $input->getOption('plugin-id');
193 $pluginId = $io->ask(
194 $this->trans('commands.generate.plugin.condition.questions.plugin-id'),
195 $this->stringConverter->camelCaseToUnderscore($class)
197 $input->setOption('plugin-id', $pluginId);
200 $context_definition_id = $input->getOption('context-definition-id');
201 if (!$context_definition_id) {
202 $context_type = ['language' => 'Language', "entity" => "Entity"];
203 $context_type_sel = $io->choice(
204 $this->trans('commands.generate.plugin.condition.questions.context-type'),
205 array_values($context_type)
207 $context_type_sel = array_search($context_type_sel, $context_type);
209 if ($context_type_sel == 'language') {
210 $context_definition_id = $context_type_sel;
211 $context_definition_id_value = ucfirst($context_type_sel);
213 $content_entity_types_sel = $io->choice(
214 $this->trans('commands.generate.plugin.condition.questions.context-entity-type'),
215 array_keys($entity_types)
218 $contextDefinitionIdList = $entity_types[$content_entity_types_sel];
219 $context_definition_id_sel = $io->choice(
220 $this->trans('commands.generate.plugin.condition.questions.context-definition-id'),
221 array_values($contextDefinitionIdList)
224 $context_definition_id_value = array_search(
225 $context_definition_id_sel,
226 $contextDefinitionIdList
229 $context_definition_id = 'entity:' . $context_definition_id_value;
231 $input->setOption('context-definition-id', $context_definition_id);
234 $context_definition_label = $input->getOption('context-definition-label');
235 if (!$context_definition_label) {
236 $context_definition_label = $io->ask(
237 $this->trans('commands.generate.plugin.condition.questions.context-definition-label'),
238 $context_definition_id_value?:null
240 $input->setOption('context-definition-label', $context_definition_label);
243 $context_definition_required = $input->getOption('context-definition-required');
244 if (empty($context_definition_required)) {
245 $context_definition_required = $io->confirm(
246 $this->trans('commands.generate.plugin.condition.questions.context-definition-required'),
249 $input->setOption('context-definition-required', $context_definition_required);