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