Yaffs site version 1.1
[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 Symfony\Component\Console\Input\InputInterface;
12 use Symfony\Component\Console\Input\InputOption;
13 use Symfony\Component\Console\Output\OutputInterface;
14 use Drupal\Console\Command\Shared\ServicesTrait;
15 use Drupal\Console\Command\Shared\ModuleTrait;
16 use Drupal\Console\Command\Shared\FormTrait;
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 PluginTypeYamlCommand
27  *
28  * @package Drupal\Console\Command\Generate
29  */
30 class PluginTypeYamlCommand 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 PluginTypeYamlGenerator
45 */
46     protected $generator;
47
48     /**
49      * @var StringConverter
50      */
51     protected $stringConverter;
52
53     /**
54      * PluginTypeYamlCommand constructor.
55      *
56      * @param Manager                 $extensionManager
57      * @param PluginTypeYamlGenerator $generator
58      * @param StringConverter         $stringConverter
59      */
60     public function __construct(
61         Manager $extensionManager,
62         PluginTypeYamlGenerator $generator,
63         StringConverter $stringConverter
64     ) {
65         $this->extensionManager = $extensionManager;
66         $this->generator = $generator;
67         $this->stringConverter = $stringConverter;
68         parent::__construct();
69     }
70
71     protected function configure()
72     {
73         $this
74             ->setName('generate:plugin:type:yaml')
75             ->setDescription($this->trans('commands.generate.plugin.type.yaml.description'))
76             ->setHelp($this->trans('commands.generate.plugin.type.yaml.help'))
77             ->addOption('module', null, InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
78             ->addOption(
79                 'class',
80                 null,
81                 InputOption::VALUE_OPTIONAL,
82                 $this->trans('commands.generate.plugin.type.yaml.options.class')
83             )
84             ->addOption(
85                 'plugin-name',
86                 null,
87                 InputOption::VALUE_OPTIONAL,
88                 $this->trans('commands.generate.plugin.type.yaml.options.plugin-name')
89             )
90             ->addOption(
91                 'plugin-file-name',
92                 null,
93                 InputOption::VALUE_OPTIONAL,
94                 $this->trans('commands.generate.plugin.type.yaml.options.plugin-file-name')
95             );
96     }
97
98     /**
99      * {@inheritdoc}
100      */
101     protected function execute(InputInterface $input, OutputInterface $output)
102     {
103         $module = $input->getOption('module');
104         $class_name = $input->getOption('class');
105         $plugin_name = $input->getOption('plugin-name');
106         $plugin_file_name = $input->getOption('plugin-file-name');
107
108         $this->generator->generate($module, $class_name, $plugin_name, $plugin_file_name);
109     }
110
111     protected function interact(InputInterface $input, OutputInterface $output)
112     {
113         $io = new DrupalStyle($input, $output);
114
115         // --module option
116         $module = $input->getOption('module');
117         if (!$module) {
118             // @see Drupal\Console\Command\Shared\ModuleTrait::moduleQuestion
119             $module = $this->moduleQuestion($io);
120             $input->setOption('module', $module);
121         }
122
123         // --class option
124         $class_name = $input->getOption('class');
125         if (!$class_name) {
126             $class_name = $io->ask(
127                 $this->trans('commands.generate.plugin.type.yaml.options.class'),
128                 'ExamplePlugin'
129             );
130             $input->setOption('class', $class_name);
131         }
132
133         // --plugin-name option
134         $plugin_name = $input->getOption('plugin-name');
135         if (!$plugin_name) {
136             $plugin_name = $io->ask(
137                 $this->trans('commands.generate.plugin.type.yaml.options.plugin-name'),
138                 $this->stringConverter->camelCaseToUnderscore($class_name)
139             );
140             $input->setOption('plugin-name', $plugin_name);
141         }
142
143         // --plugin-file-name option
144         $plugin_file_name = $input->getOption('plugin-file-name');
145         if (!$plugin_file_name) {
146             $plugin_file_name = $io->ask(
147                 $this->trans('commands.generate.plugin.type.yaml.options.plugin-file-name'),
148                 strtr($plugin_name, '_-', '..')
149             );
150             $input->setOption('plugin-file-name', $plugin_file_name);
151         }
152     }
153 }