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', '', 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']);
152 protected function interact(InputInterface $input, OutputInterface $output)
154 $io = new DrupalStyle($input, $output);
156 $entityTypeRepository = $this->entitytyperepository;
158 $entity_types = $entityTypeRepository->getEntityTypeLabels(true);
161 $module = $input->getOption('module');
163 // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
164 $module = $this->moduleQuestion($io);
166 $input->setOption('module', $module);
169 $class = $input->getOption('class');
172 $this->trans('commands.generate.plugin.condition.questions.class'),
175 $input->setOption('class', $class);
178 // --plugin label option
179 $label = $input->getOption('label');
182 $this->trans('commands.generate.plugin.condition.questions.label'),
183 $this->stringConverter->camelCaseToHuman($class)
185 $input->setOption('label', $label);
188 // --plugin-id option
189 $pluginId = $input->getOption('plugin-id');
191 $pluginId = $io->ask(
192 $this->trans('commands.generate.plugin.condition.questions.plugin-id'),
193 $this->stringConverter->camelCaseToUnderscore($class)
195 $input->setOption('plugin-id', $pluginId);
198 $context_definition_id = $input->getOption('context-definition-id');
199 if (!$context_definition_id) {
200 $context_type = ['language' => 'Language', "entity" => "Entity"];
201 $context_type_sel = $io->choice(
202 $this->trans('commands.generate.plugin.condition.questions.context-type'),
203 array_values($context_type)
205 $context_type_sel = array_search($context_type_sel, $context_type);
207 if ($context_type_sel == 'language') {
208 $context_definition_id = $context_type_sel;
209 $context_definition_id_value = ucfirst($context_type_sel);
211 $content_entity_types_sel = $io->choice(
212 $this->trans('commands.generate.plugin.condition.questions.context-entity-type'),
213 array_keys($entity_types)
216 $contextDefinitionIdList = $entity_types[$content_entity_types_sel];
217 $context_definition_id_sel = $io->choice(
218 $this->trans('commands.generate.plugin.condition.questions.context-definition-id'),
219 array_values($contextDefinitionIdList)
222 $context_definition_id_value = array_search(
223 $context_definition_id_sel,
224 $contextDefinitionIdList
227 $context_definition_id = 'entity:' . $context_definition_id_value;
229 $input->setOption('context-definition-id', $context_definition_id);
232 $context_definition_label = $input->getOption('context-definition-label');
233 if (!$context_definition_label) {
234 $context_definition_label = $io->ask(
235 $this->trans('commands.generate.plugin.condition.questions.context-definition-label'),
236 $context_definition_id_value?:null
238 $input->setOption('context-definition-label', $context_definition_label);
241 $context_definition_required = $input->getOption('context-definition-required');
242 if (empty($context_definition_required)) {
243 $context_definition_required = $io->confirm(
244 $this->trans('commands.generate.plugin.condition.questions.context-definition-required'),
247 $input->setOption('context-definition-required', $context_definition_required);