5 * Contains \Drupal\Console\Command\PluginConditionCommand.
8 namespace Drupal\Console\Command\Generate;
10 use Drupal\Console\Utils\Validator;
11 use Symfony\Component\Console\Input\InputInterface;
12 use Symfony\Component\Console\Input\InputOption;
13 use Symfony\Component\Console\Output\OutputInterface;
14 use Drupal\Console\Core\Command\Command;
15 use Drupal\Core\Entity\EntityTypeRepository;
16 use Drupal\Console\Generator\PluginConditionGenerator;
17 use Drupal\Console\Command\Shared\ModuleTrait;
18 use Drupal\Console\Command\Shared\ConfirmationTrait;
19 use Drupal\Console\Extension\Manager;
20 use Drupal\Console\Core\Utils\ChainQueue;
21 use Drupal\Console\Core\Utils\StringConverter;
24 * Class PluginConditionCommand
26 * @package Drupal\Console\Command\Generate
28 class PluginConditionCommand extends Command
31 use ConfirmationTrait;
36 protected $extensionManager;
39 * @var PluginConditionGenerator
46 protected $chainQueue;
49 * @var StringConverter
51 protected $stringConverter;
60 * PluginConditionCommand constructor.
62 * @param Manager $extensionManager
63 * @param PluginConditionGenerator $generator
64 * @param ChainQueue $chainQueue
65 * @param EntityTypeRepository $entitytyperepository
66 * @param StringConverter $stringConverter
67 * @param Validator $validator
69 public function __construct(
70 Manager $extensionManager,
71 PluginConditionGenerator $generator,
72 ChainQueue $chainQueue,
73 EntityTypeRepository $entitytyperepository,
74 StringConverter $stringConverter,
77 $this->extensionManager = $extensionManager;
78 $this->generator = $generator;
79 $this->chainQueue = $chainQueue;
80 $this->entitytyperepository = $entitytyperepository;
81 $this->stringConverter = $stringConverter;
82 $this->validator = $validator;
83 parent::__construct();
86 protected function configure()
89 ->setName('generate:plugin:condition')
90 ->setDescription($this->trans('commands.generate.plugin.condition.description'))
91 ->setHelp($this->trans('commands.generate.plugin.condition.help'))
95 InputOption::VALUE_REQUIRED,
96 $this->trans('commands.common.options.module')
101 InputOption::VALUE_REQUIRED,
102 $this->trans('commands.generate.plugin.condition.options.class')
107 InputOption::VALUE_REQUIRED,
108 $this->trans('commands.generate.plugin.condition.options.label')
113 InputOption::VALUE_REQUIRED,
114 $this->trans('commands.generate.plugin.condition.options.plugin-id')
117 'context-definition-id',
119 InputOption::VALUE_REQUIRED,
120 $this->trans('commands.generate.plugin.condition.options.context-definition-id')
123 'context-definition-label',
125 InputOption::VALUE_REQUIRED,
126 $this->trans('commands.generate.plugin.condition.options.context-definition-label')
129 'context-definition-required',
131 InputOption::VALUE_OPTIONAL,
132 $this->trans('commands.generate.plugin.condition.options.context-definition-required')
134 ->setAliases(['gpco']);
140 protected function execute(InputInterface $input, OutputInterface $output)
142 // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
143 if (!$this->confirmOperation()) {
147 $module = $input->getOption('module');
148 $class_name = $this->validator->validateClassName($input->getOption('class'));
149 $label = $input->getOption('label');
150 $plugin_id = $input->getOption('plugin-id');
151 $context_definition_id = $input->getOption('context-definition-id');
152 $context_definition_label = $input->getOption('context-definition-label');
153 $context_definition_required = $input->getOption('context-definition-required')?'TRUE':'FALSE';
155 $this->generator->generate([
157 'class_name' => $class_name,
159 'plugin_id' => $plugin_id,
160 'context_definition_id' => $context_definition_id,
161 'context_definition_label' => $context_definition_label,
162 'context_definition_required' => $context_definition_required,
165 $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
170 protected function interact(InputInterface $input, OutputInterface $output)
172 $entityTypeRepository = $this->entitytyperepository;
174 $entity_types = $entityTypeRepository->getEntityTypeLabels(true);
177 $this->getModuleOption();
180 $class = $input->getOption('class');
182 $class = $this->getIo()->ask(
183 $this->trans('commands.generate.plugin.condition.questions.class'),
186 return $this->validator->validateClassName($class);
189 $input->setOption('class', $class);
192 // --plugin label option
193 $label = $input->getOption('label');
195 $label = $this->getIo()->ask(
196 $this->trans('commands.generate.plugin.condition.questions.label'),
197 $this->stringConverter->camelCaseToHuman($class)
199 $input->setOption('label', $label);
202 // --plugin-id option
203 $pluginId = $input->getOption('plugin-id');
205 $pluginId = $this->getIo()->ask(
206 $this->trans('commands.generate.plugin.condition.questions.plugin-id'),
207 $this->stringConverter->camelCaseToUnderscore($class)
209 $input->setOption('plugin-id', $pluginId);
212 $context_definition_id = $input->getOption('context-definition-id');
213 if (!$context_definition_id) {
214 $context_type = ['language' => 'Language', "entity" => "Entity"];
215 $context_type_sel = $this->getIo()->choice(
216 $this->trans('commands.generate.plugin.condition.questions.context-type'),
217 array_values($context_type)
219 $context_type_sel = array_search($context_type_sel, $context_type);
221 if ($context_type_sel == 'language') {
222 $context_definition_id = $context_type_sel;
223 $context_definition_id_value = ucfirst($context_type_sel);
225 $content_entity_types_sel = $this->getIo()->choice(
226 $this->trans('commands.generate.plugin.condition.questions.context-entity-type'),
227 array_keys($entity_types)
230 $contextDefinitionIdList = $entity_types[$content_entity_types_sel];
231 $context_definition_id_sel = $this->getIo()->choice(
232 $this->trans('commands.generate.plugin.condition.questions.context-definition-id'),
233 array_values($contextDefinitionIdList)
236 $context_definition_id_value = array_search(
237 $context_definition_id_sel,
238 $contextDefinitionIdList
241 $context_definition_id = 'entity:' . $context_definition_id_value;
243 $input->setOption('context-definition-id', $context_definition_id);
246 $context_definition_label = $input->getOption('context-definition-label');
247 if (!$context_definition_label) {
248 $context_definition_label = $this->getIo()->ask(
249 $this->trans('commands.generate.plugin.condition.questions.context-definition-label'),
250 $context_definition_id_value?:null
252 $input->setOption('context-definition-label', $context_definition_label);
255 $context_definition_required = $input->getOption('context-definition-required');
256 if (empty($context_definition_required)) {
257 $context_definition_required = $this->getIo()->confirm(
258 $this->trans('commands.generate.plugin.condition.questions.context-definition-required'),
261 $input->setOption('context-definition-required', $context_definition_required);