Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Command / Generate / PluginTypeYamlCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\Generate\PluginTypeYamlCommand.
6  */
7
8 namespace Drupal\Console\Command\Generate;
9
10 use Drupal\Console\Generator\PluginTypeYamlGenerator;
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 PluginTypeYamlCommand
23  *
24  * @package Drupal\Console\Command\Generate
25  */
26 class PluginTypeYamlCommand extends Command
27 {
28     use ServicesTrait;
29     use ModuleTrait;
30
31     /**
32      * @var Manager
33      */
34     protected $extensionManager;
35
36     /**
37      * @var PluginTypeYamlGenerator
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      * PluginTypeYamlCommand constructor.
53      *
54      * @param Manager                 $extensionManager
55      * @param PluginTypeYamlGenerator $generator
56      * @param StringConverter         $stringConverter
57      * @param Validator               $validator
58      */
59     public function __construct(
60         Manager $extensionManager,
61         PluginTypeYamlGenerator $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:yaml')
76             ->setDescription($this->trans('commands.generate.plugin.type.yaml.description'))
77             ->setHelp($this->trans('commands.generate.plugin.type.yaml.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.yaml.options.class')
89             )
90             ->addOption(
91                 'plugin-name',
92                 null,
93                 InputOption::VALUE_OPTIONAL,
94                 $this->trans('commands.generate.plugin.type.yaml.options.plugin-name')
95             )
96             ->addOption(
97                 'plugin-file-name',
98                 null,
99                 InputOption::VALUE_OPTIONAL,
100                 $this->trans('commands.generate.plugin.type.yaml.options.plugin-file-name')
101             )
102             ->setAliases(['gpty']);
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         $plugin_name = $input->getOption('plugin-name');
113         $plugin_file_name = $input->getOption('plugin-file-name');
114
115         $this->generator->generate([
116             'module' => $module,
117             'class_name' => $class_name,
118             'plugin_name' => $plugin_name,
119             'plugin_file_name' => $plugin_file_name,
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.yaml.options.class'),
133                 'ExamplePlugin',
134                 function ($class) {
135                     return $this->validator->validateClassName($class);
136                 }
137             );
138             $input->setOption('class', $class_name);
139         }
140
141         // --plugin-name option
142         $plugin_name = $input->getOption('plugin-name');
143         if (!$plugin_name) {
144             $plugin_name = $this->getIo()->ask(
145                 $this->trans('commands.generate.plugin.type.yaml.options.plugin-name'),
146                 $this->stringConverter->camelCaseToUnderscore($class_name)
147             );
148             $input->setOption('plugin-name', $plugin_name);
149         }
150
151         // --plugin-file-name option
152         $plugin_file_name = $input->getOption('plugin-file-name');
153         if (!$plugin_file_name) {
154             $plugin_file_name = $this->getIo()->ask(
155                 $this->trans('commands.generate.plugin.type.yaml.options.plugin-file-name'),
156                 strtr($plugin_name, '_-', '..')
157             );
158             $input->setOption('plugin-file-name', $plugin_file_name);
159         }
160     }
161 }