372ee42936d861bcf8d8ad6c32f7b713fb22e9cb
[yaffs-website] / vendor / drupal / console / src / Command / Generate / PluginConditionCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\PluginConditionCommand.
6  */
7
8 namespace Drupal\Console\Command\Generate;
9
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;
23
24 /**
25  * Class PluginConditionCommand
26  *
27  * @package Drupal\Console\Command\Generate
28  */
29 class PluginConditionCommand extends Command
30 {
31     use CommandTrait;
32     use ModuleTrait;
33     use ConfirmationTrait;
34
35     /**
36  * @var Manager
37 */
38     protected $extensionManager;
39
40     /**
41  * @var PluginConditionGenerator
42 */
43     protected $generator;
44
45     /**
46      * @var ChainQueue
47      */
48     protected $chainQueue;
49
50     /**
51      * @var StringConverter
52      */
53     protected $stringConverter;
54
55
56     /**
57      * PluginConditionCommand constructor.
58      *
59      * @param Manager                  $extensionManager
60      * @param PluginConditionGenerator $generator
61      * @param ChainQueue               $chainQueue
62      * @param EntityTypeRepository     $entitytyperepository
63      * @param StringConverter          $stringConverter
64      */
65     public function __construct(
66         Manager $extensionManager,
67         PluginConditionGenerator $generator,
68         ChainQueue $chainQueue,
69         EntityTypeRepository $entitytyperepository,
70         StringConverter $stringConverter
71     ) {
72         $this->extensionManager = $extensionManager;
73         $this->generator = $generator;
74         $this->chainQueue = $chainQueue;
75         $this->entitytyperepository = $entitytyperepository;
76         $this->stringConverter = $stringConverter;
77         parent::__construct();
78     }
79
80     protected function configure()
81     {
82         $this
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'))
87             ->addOption(
88                 'class',
89                 '',
90                 InputOption::VALUE_REQUIRED,
91                 $this->trans('commands.generate.plugin.condition.options.class')
92             )
93             ->addOption(
94                 'label',
95                 '',
96                 InputOption::VALUE_REQUIRED,
97                 $this->trans('commands.generate.plugin.condition.options.label')
98             )
99             ->addOption(
100                 'plugin-id',
101                 '',
102                 InputOption::VALUE_REQUIRED,
103                 $this->trans('commands.generate.plugin.condition.options.plugin-id')
104             )
105             ->addOption(
106                 'context-definition-id',
107                 '',
108                 InputOption::VALUE_REQUIRED,
109                 $this->trans('commands.generate.plugin.condition.options.context-definition-id')
110             )
111             ->addOption(
112                 'context-definition-label',
113                 '',
114                 InputOption::VALUE_REQUIRED,
115                 $this->trans('commands.generate.plugin.condition.options.context-definition-label')
116             )
117             ->addOption(
118                 'context-definition-required',
119                 '',
120                 InputOption::VALUE_OPTIONAL,
121                 $this->trans('commands.generate.plugin.condition.options.context-definition-required')
122             );
123     }
124
125     /**
126      * {@inheritdoc}
127      */
128     protected function execute(InputInterface $input, OutputInterface $output)
129     {
130         $io = new DrupalStyle($input, $output);
131
132         // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmGeneration
133         if (!$this->confirmGeneration($io)) {
134             return;
135         }
136
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';
144
145         $this
146             ->generator
147             ->generate($module, $class_name, $label, $plugin_id, $context_definition_id, $context_definition_label, $context_definition_required);
148
149         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
150     }
151
152     protected function interact(InputInterface $input, OutputInterface $output)
153     {
154         $io = new DrupalStyle($input, $output);
155
156         $entityTypeRepository = $this->entitytyperepository;
157
158         $entity_types = $entityTypeRepository->getEntityTypeLabels(true);
159
160         // --module option
161         $module = $input->getOption('module');
162         if (!$module) {
163             // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
164             $module = $this->moduleQuestion($io);
165         }
166         $input->setOption('module', $module);
167
168         // --class option
169         $class = $input->getOption('class');
170         if (!$class) {
171             $class = $io->ask(
172                 $this->trans('commands.generate.plugin.condition.questions.class'),
173                 'ExampleCondition'
174             );
175             $input->setOption('class', $class);
176         }
177
178         // --plugin label option
179         $label = $input->getOption('label');
180         if (!$label) {
181             $label = $io->ask(
182                 $this->trans('commands.generate.plugin.condition.questions.label'),
183                 $this->stringConverter->camelCaseToHuman($class)
184             );
185             $input->setOption('label', $label);
186         }
187
188         // --plugin-id option
189         $pluginId = $input->getOption('plugin-id');
190         if (!$pluginId) {
191             $pluginId = $io->ask(
192                 $this->trans('commands.generate.plugin.condition.questions.plugin-id'),
193                 $this->stringConverter->camelCaseToUnderscore($class)
194             );
195             $input->setOption('plugin-id', $pluginId);
196         }
197
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)
204             );
205             $context_type_sel = array_search($context_type_sel, $context_type);
206
207             if ($context_type_sel == 'language') {
208                 $context_definition_id = $context_type_sel;
209                 $context_definition_id_value = ucfirst($context_type_sel);
210             } else {
211                 $content_entity_types_sel = $io->choice(
212                     $this->trans('commands.generate.plugin.condition.questions.context-entity-type'),
213                     array_keys($entity_types)
214                 );
215
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)
220                 );
221
222                 $context_definition_id_value = array_search(
223                     $context_definition_id_sel,
224                     $contextDefinitionIdList
225                 );
226
227                 $context_definition_id = 'entity:' . $context_definition_id_value;
228             }
229             $input->setOption('context-definition-id', $context_definition_id);
230         }
231
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
237             );
238             $input->setOption('context-definition-label', $context_definition_label);
239         }
240
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'),
245                 true
246             );
247             $input->setOption('context-definition-required', $context_definition_required);
248         }
249     }
250 }