Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Command / Generate / PluginTypeAnnotationCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\Generate\PluginTypeAnnotationCommand.
6  */
7
8 namespace Drupal\Console\Command\Generate;
9
10 use Drupal\Console\Generator\PluginTypeAnnotationGenerator;
11 use Drupal\Console\Utils\Validator;
12 use Symfony\Component\Console\Input\InputInterface;
13 use Symfony\Component\Console\Input\InputOption;
14 use Symfony\Component\Console\Output\OutputInterface;
15 use Drupal\Console\Command\Shared\ServicesTrait;
16 use Drupal\Console\Command\Shared\ModuleTrait;
17 use Drupal\Console\Core\Command\Command;
18 use Drupal\Console\Extension\Manager;
19 use Drupal\Console\Core\Utils\StringConverter;
20
21 /**
22  * Class PluginTypeAnnotationCommand
23  *
24  * @package Drupal\Console\Command\Generate
25  */
26 class PluginTypeAnnotationCommand extends Command
27 {
28     use ServicesTrait;
29     use ModuleTrait;
30
31     /**
32  * @var Manager
33 */
34     protected $extensionManager;
35
36     /**
37  * @var PluginTypeAnnotationGenerator
38 */
39     protected $generator;
40
41     /**
42      * @var StringConverter
43      */
44     protected $stringConverter;
45
46     /**
47      * @var Validator
48      */
49     protected $validator;
50
51     /**
52      * PluginTypeAnnotationCommand constructor.
53      *
54      * @param Manager                       $extensionManager
55      * @param PluginTypeAnnotationGenerator $generator
56      * @param StringConverter               $stringConverter
57      * @param Validator                     $validator
58      */
59     public function __construct(
60         Manager $extensionManager,
61         PluginTypeAnnotationGenerator $generator,
62         StringConverter $stringConverter,
63         Validator $validator
64     ) {
65         $this->extensionManager = $extensionManager;
66         $this->generator = $generator;
67         $this->stringConverter = $stringConverter;
68         $this->validator = $validator;
69         parent::__construct();
70     }
71
72     protected function configure()
73     {
74         $this
75             ->setName('generate:plugin:type:annotation')
76             ->setDescription($this->trans('commands.generate.plugin.type.annotation.description'))
77             ->setHelp($this->trans('commands.generate.plugin.type.annotation.help'))
78             ->addOption(
79                 'module',
80                 null,
81                 InputOption::VALUE_REQUIRED,
82                 $this->trans('commands.common.options.module')
83             )
84             ->addOption(
85                 'class',
86                 null,
87                 InputOption::VALUE_OPTIONAL,
88                 $this->trans('commands.generate.plugin.type.annotation.options.class')
89             )
90             ->addOption(
91                 'machine-name',
92                 null,
93                 InputOption::VALUE_OPTIONAL,
94                 $this->trans('commands.generate.plugin.type.annotation.options.plugin-id')
95             )
96             ->addOption(
97                 'label',
98                 null,
99                 InputOption::VALUE_OPTIONAL,
100                 $this->trans('commands.generate.plugin.type.annotation.options.label')
101             )
102             ->setAliases(['gpta']);
103     }
104
105     /**
106      * {@inheritdoc}
107      */
108     protected function execute(InputInterface $input, OutputInterface $output)
109     {
110         $module = $input->getOption('module');
111         $class_name = $this->validator->validateClassName($input->getOption('class'));
112         $machine_name = $input->getOption('machine-name');
113         $label = $input->getOption('label');
114
115         $this->generator->generate([
116             'module' => $module,
117             'class_name' => $class_name,
118             'machine_name' => $machine_name,
119             'label' => $label,
120         ]);
121     }
122
123     protected function interact(InputInterface $input, OutputInterface $output)
124     {
125         // --module option
126         $this->getModuleOption();
127
128         // --class option
129         $class_name = $input->getOption('class');
130         if (!$class_name) {
131             $class_name = $this->getIo()->ask(
132                 $this->trans('commands.generate.plugin.type.annotation.options.class'),
133                 'ExamplePlugin',
134                 function ($class_name) {
135                     return $this->validator->validateClassName($class_name);
136                 }
137             );
138             $input->setOption('class', $class_name);
139         }
140
141         // --machine-name option
142         $machine_name = $input->getOption('machine-name');
143         if (!$machine_name) {
144             $machine_name = $this->getIo()->ask(
145                 $this->trans('commands.generate.plugin.type.annotation.options.machine-name'),
146                 $this->stringConverter->camelCaseToUnderscore($class_name)
147             );
148             $input->setOption('machine-name', $machine_name);
149         }
150
151         // --label option
152         $label = $input->getOption('label');
153         if (!$label) {
154             $label = $this->getIo()->ask(
155                 $this->trans('commands.generate.plugin.type.annotation.options.label'),
156                 $this->stringConverter->camelCaseToHuman($class_name)
157             );
158             $input->setOption('label', $label);
159         }
160     }
161 }