dfc7ce1eeadecd4d9b5db80b5afc755a556c1f8c
[yaffs-website] / vendor / drupal / console / src / Command / Generate / PluginRestResourceCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\Generate\PluginRestResourceCommand.
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 Drupal\Console\Command\Shared\ServicesTrait;
14 use Drupal\Console\Command\Shared\ModuleTrait;
15 use Drupal\Console\Command\Shared\FormTrait;
16 use Drupal\Console\Generator\PluginRestResourceGenerator;
17 use Drupal\Console\Command\Shared\ConfirmationTrait;
18 use Symfony\Component\Console\Command\Command;
19 use Drupal\Console\Core\Style\DrupalStyle;
20 use Drupal\Console\Extension\Manager;
21 use Drupal\Console\Core\Command\Shared\CommandTrait;
22 use Drupal\Console\Core\Utils\StringConverter;
23 use Drupal\Console\Core\Utils\ChainQueue;
24
25 /**
26  * Class PluginRestResourceCommand
27  *
28  * @package Drupal\Console\Command\Generate
29  */
30 class PluginRestResourceCommand extends Command
31 {
32     use ServicesTrait;
33     use ModuleTrait;
34     use FormTrait;
35     use ConfirmationTrait;
36     use CommandTrait;
37
38     /**
39  * @var Manager
40 */
41     protected $extensionManager;
42
43     /**
44  * @var PluginRestResourceGenerator
45 */
46     protected $generator;
47
48     /**
49      * @var StringConverter
50      */
51     protected $stringConverter;
52
53     /**
54      * @var ChainQueue
55      */
56     protected $chainQueue;
57
58
59     /**
60      * PluginRestResourceCommand constructor.
61      *
62      * @param Manager                     $extensionManager
63      * @param PluginRestResourceGenerator $generator
64      * @param StringConverter             $stringConverter
65      * @param ChainQueue                  $chainQueue
66      */
67     public function __construct(
68         Manager $extensionManager,
69         PluginRestResourceGenerator $generator,
70         StringConverter $stringConverter,
71         ChainQueue $chainQueue
72     ) {
73         $this->extensionManager = $extensionManager;
74         $this->generator = $generator;
75         $this->stringConverter = $stringConverter;
76         $this->chainQueue = $chainQueue;
77         parent::__construct();
78     }
79
80     protected function configure()
81     {
82         $this
83             ->setName('generate:plugin:rest:resource')
84             ->setDescription($this->trans('commands.generate.plugin.rest.resource.description'))
85             ->setHelp($this->trans('commands.generate.plugin.rest.resource.help'))
86             ->addOption('module', null, InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
87             ->addOption(
88                 'class',
89                 null,
90                 InputOption::VALUE_OPTIONAL,
91                 $this->trans('commands.generate.plugin.rest.resource.options.class')
92             )
93             ->addOption(
94                 'name',
95                 null,
96                 InputOption::VALUE_OPTIONAL,
97                 $this->trans('commands.generate.service.options.name')
98             )
99             ->addOption(
100                 'plugin-id',
101                 null,
102                 InputOption::VALUE_OPTIONAL,
103                 $this->trans('commands.generate.plugin.rest.resource.options.plugin-id')
104             )
105             ->addOption(
106                 'plugin-label',
107                 null,
108                 InputOption::VALUE_OPTIONAL,
109                 $this->trans('commands.generate.plugin.rest.resource.options.plugin-label')
110             )
111             ->addOption(
112                 'plugin-url',
113                 null,
114                 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
115                 $this->trans('commands.generate.plugin.rest.resource.options.plugin-url')
116             )
117             ->addOption(
118                 'plugin-states',
119                 null,
120                 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
121                 $this->trans('commands.generate.plugin.rest.resource.options.plugin-states')
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 1;
135         }
136
137         $module = $input->getOption('module');
138         $class_name = $input->getOption('class');
139         $plugin_id = $input->getOption('plugin-id');
140         $plugin_label = $input->getOption('plugin-label');
141         $plugin_url = $input->getOption('plugin-url');
142         $plugin_states = $input->getOption('plugin-states');
143
144         $this->generator->generate($module, $class_name, $plugin_label, $plugin_id, $plugin_url, $plugin_states);
145
146         $this->chainQueue->addCommand('cache:rebuild', ['cache' => 'discovery']);
147
148         return 0;
149     }
150
151     protected function interact(InputInterface $input, OutputInterface $output)
152     {
153         $io = new DrupalStyle($input, $output);
154
155         // --module option
156         $module = $input->getOption('module');
157         if (!$module) {
158             // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
159             $module = $this->moduleQuestion($io);
160             $input->setOption('module', $module);
161         }
162
163         // --class option
164         $class_name = $input->getOption('class');
165         if (!$class_name) {
166             $stringUtils = $this->stringConverter;
167             $class_name = $io->ask(
168                 $this->trans('commands.generate.plugin.rest.resource.questions.class'),
169                 'DefaultRestResource',
170                 function ($class_name) use ($stringUtils) {
171                     if (!strlen(trim($class_name))) {
172                         throw new \Exception('The Class name can not be empty');
173                     }
174
175                     return $stringUtils->humanToCamelCase($class_name);
176                 }
177             );
178             $input->setOption('class', $class_name);
179         }
180
181         // --plugin-id option
182         $plugin_id = $input->getOption('plugin-id');
183         if (!$plugin_id) {
184             $plugin_id = $io->ask(
185                 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-id'),
186                 $this->stringConverter->camelCaseToUnderscore($class_name)
187             );
188             $input->setOption('plugin-id', $plugin_id);
189         }
190
191         // --plugin-label option
192         $plugin_label = $input->getOption('plugin-label');
193         if (!$plugin_label) {
194             $plugin_label = $io->ask(
195                 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-label'),
196                 $this->stringConverter->camelCaseToHuman($class_name)
197             );
198             $input->setOption('plugin-label', $plugin_label);
199         }
200
201         // --plugin-url option
202         $plugin_url = $input->getOption('plugin-url');
203         if (!$plugin_url) {
204             $plugin_url = $io->ask(
205                 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-url')
206             );
207             $input->setOption('plugin-url', $plugin_url);
208         }
209
210         // --plugin-states option
211         $plugin_states = $input->getOption('plugin-states');
212         if (!$plugin_states) {
213             $states = ['GET', 'PUT', 'POST', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'];
214             $plugin_states = $io->choice(
215                 $this->trans('commands.generate.plugin.rest.resource.questions.plugin-states'),
216                 $states,
217                 null,
218                 true
219             );
220
221             $input->setOption('plugin-states', $plugin_states);
222         }
223     }
224 }