Yaffs site version 1.1
[yaffs-website] / vendor / drupal / console / src / Command / Generate / CommandCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\Generate\CommandCommand.
6  */
7
8 namespace Drupal\Console\Command\Generate;
9
10 use Drupal\Console\Command\Shared\ExtensionTrait;
11 use Drupal\Console\Command\Shared\ServicesTrait;
12 use Symfony\Component\Console\Input\InputInterface;
13 use Symfony\Component\Console\Output\OutputInterface;
14 use Symfony\Component\Console\Input\InputOption;
15 use Symfony\Component\Console\Command\Command;
16 use Drupal\Console\Core\Command\Shared\ContainerAwareCommandTrait;
17 use Drupal\Console\Command\Shared\ConfirmationTrait;
18 use Drupal\Console\Command\Shared\ModuleTrait;
19 use Drupal\Console\Generator\CommandGenerator;
20 use Drupal\Console\Core\Utils\StringConverter;
21 use Drupal\Console\Extension\Manager;
22 use Drupal\Console\Core\Style\DrupalStyle;
23 use Drupal\Console\Utils\Validator;
24 use Drupal\Console\Utils\Site;
25
26 class CommandCommand extends Command
27 {
28     use ContainerAwareCommandTrait;
29     use ConfirmationTrait;
30     use ServicesTrait;
31     use ModuleTrait;
32     use ExtensionTrait;
33
34     /**
35      * @var CommandGenerator
36      */
37     protected $generator;
38
39     /**
40      * @var Manager
41      */
42     protected $extensionManager;
43
44     /**
45      * @var Validator
46      */
47     protected $validator;
48
49     /**
50      * @var StringConverter
51      */
52     protected $stringConverter;
53
54     /**
55      * @var Site
56      */
57     protected $site;
58
59     /**
60      * CommandCommand constructor.
61      *
62      * @param CommandGenerator $generator
63      * @param Manager          $extensionManager
64      * @param Validator        $validator
65      * @param StringConverter  $stringConverter
66      * @param Site             $site
67      */
68     public function __construct(
69         CommandGenerator $generator,
70         Manager $extensionManager,
71         Validator $validator,
72         StringConverter $stringConverter,
73         Site  $site
74     ) {
75         $this->generator = $generator;
76         $this->extensionManager = $extensionManager;
77         $this->validator = $validator;
78         $this->stringConverter = $stringConverter;
79         $this->site = $site;
80         parent::__construct();
81     }
82
83     /**
84      * {@inheritdoc}
85      */
86     protected function configure()
87     {
88         $this
89             ->setName('generate:command')
90             ->setDescription($this->trans('commands.generate.command.description'))
91             ->setHelp($this->trans('commands.generate.command.help'))
92             ->addOption(
93                 'extension',
94                 null,
95                 InputOption::VALUE_REQUIRED,
96                 $this->trans('commands.common.options.extension')
97             )
98             ->addOption(
99                 'extension-type',
100                 null,
101                 InputOption::VALUE_REQUIRED,
102                 $this->trans('commands.common.options.extension-type')
103             )
104             ->addOption(
105                 'class',
106                 null,
107                 InputOption::VALUE_REQUIRED,
108                 $this->trans('commands.generate.command.options.class')
109             )
110             ->addOption(
111                 'name',
112                 null,
113                 InputOption::VALUE_REQUIRED,
114                 $this->trans('commands.generate.command.options.name')
115             )
116             ->addOption(
117                 'container-aware',
118                 null,
119                 InputOption::VALUE_NONE,
120                 $this->trans('commands.generate.command.options.container-aware')
121             )
122             ->addOption(
123                 'services',
124                 null,
125                 InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY,
126                 $this->trans('commands.common.options.services')
127             );
128     }
129
130     /**
131      * {@inheritdoc}
132      */
133     protected function execute(InputInterface $input, OutputInterface $output)
134     {
135         $io = new DrupalStyle($input, $output);
136
137         $extension = $input->getOption('extension');
138         $extensionType = $input->getOption('extension-type');
139         $class = $input->getOption('class');
140         $name = $input->getOption('name');
141         $containerAware = $input->getOption('container-aware');
142         $services = $input->getOption('services');
143         $yes = $input->hasOption('yes')?$input->getOption('yes'):false;
144
145         // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmGeneration
146         if (!$this->confirmGeneration($io, $yes)) {
147             return 1;
148         }
149
150         // @see use Drupal\Console\Command\Shared\ServicesTrait::buildServices
151         $build_services = $this->buildServices($services);
152
153         $this->generator->generate(
154             $extension,
155             $extensionType,
156             $name,
157             $class,
158             $containerAware,
159             $build_services
160         );
161
162         $this->site->removeCachedServicesFile();
163
164         return 0;
165     }
166
167     /**
168      * {@inheritdoc}
169      */
170     protected function interact(InputInterface $input, OutputInterface $output)
171     {
172         $io = new DrupalStyle($input, $output);
173
174         $extension = $input->getOption('extension');
175         if (!$extension) {
176             $extension = $this->extensionQuestion($io, true, true);
177             $input->setOption('extension', $extension->getName());
178             $input->setOption('extension-type', $extension->getType());
179         }
180
181         $extensionType = $input->getOption('extension-type');
182         if (!$extensionType) {
183             $extensionType = $this->extensionTypeQuestion($io);
184             $input->setOption('extension-type', $extensionType);
185         }
186
187         $name = $input->getOption('name');
188         if (!$name) {
189             $name = $io->ask(
190                 $this->trans('commands.generate.command.questions.name'),
191                 sprintf('%s:default', $extension->getName())
192             );
193             $input->setOption('name', $name);
194         }
195
196         $class = $input->getOption('class');
197         if (!$class) {
198             $class = $io->ask(
199                 $this->trans('commands.generate.command.questions.class'),
200                 'DefaultCommand',
201                 function ($class) {
202                     return $this->validator->validateCommandName($class);
203                 }
204             );
205             $input->setOption('class', $class);
206         }
207
208         $containerAware = $input->getOption('container-aware');
209         if (!$containerAware) {
210             $containerAware = $io->confirm(
211                 $this->trans('commands.generate.command.questions.container-aware'),
212                 false
213             );
214             $input->setOption('container-aware', $containerAware);
215         }
216
217         if (!$containerAware) {
218             // @see use Drupal\Console\Command\Shared\ServicesTrait::servicesQuestion
219             $services = $this->servicesQuestion($io);
220             $input->setOption('services', $services);
221         }
222     }
223 }