Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / vendor / chi-teck / drupal-code-generator / src / Command / Drupal_8 / Module / Standard.php
1 <?php
2
3 namespace DrupalCodeGenerator\Command\Drupal_8\Module;
4
5 use DrupalCodeGenerator\Command\BaseGenerator;
6 use DrupalCodeGenerator\Utils;
7 use Symfony\Component\Console\Input\InputInterface;
8 use Symfony\Component\Console\Output\OutputInterface;
9 use Symfony\Component\Console\Question\ConfirmationQuestion;
10 use Symfony\Component\Console\Question\Question;
11
12 /**
13  * Implements d8:module:standard command.
14  */
15 class Standard extends BaseGenerator {
16
17   protected $name = 'd8:module:standard';
18   protected $description = 'Generates standard Drupal 8 module';
19   protected $alias = 'module';
20   protected $destination = 'modules';
21
22   /**
23    * {@inheritdoc}
24    */
25   protected function interact(InputInterface $input, OutputInterface $output) {
26     $questions = Utils::defaultQuestions();
27     $questions['description'] = new Question('Module description', 'The description.');
28     $questions['package'] = new Question('Package', 'Custom');
29     $questions['dependencies'] = new Question('Dependencies (comma separated)');
30
31     $vars = &$this->collectVars($input, $output, $questions);
32
33     if ($vars['dependencies']) {
34       $vars['dependencies'] = array_map('trim', explode(',', strtolower($vars['dependencies'])));
35     }
36
37     $prefix = $vars['machine_name'] . '/' . $vars['machine_name'];
38
39     $this->addFile()
40       ->path($prefix . '.info.yml')
41       ->template('d8/yml/module-info.twig');
42
43     $this->addFile()
44       ->path($prefix . '.module')
45       ->template('d8/module.twig');
46
47     $class_prefix = Utils::camelize($vars['name']);
48
49     // Additional files.
50     $option_questions['install_file'] = new ConfirmationQuestion('Would you like to create install file?', TRUE);
51     $option_questions['libraries.yml'] = new ConfirmationQuestion('Would you like to create libraries.yml file?', TRUE);
52     $option_questions['permissions.yml'] = new ConfirmationQuestion('Would you like to create permissions.yml file?', TRUE);
53     $option_questions['event_subscriber'] = new ConfirmationQuestion('Would you like to create event subscriber?', TRUE);
54     $option_questions['block_plugin'] = new ConfirmationQuestion('Would you like to create block plugin?', TRUE);
55     $option_questions['controller'] = new ConfirmationQuestion('Would you like to create a controller?', TRUE);
56     $option_questions['settings_form'] = new ConfirmationQuestion('Would you like to create settings form?', TRUE);
57
58     $options = $this->collectVars($input, $output, $option_questions);
59
60     if ($options['install_file']) {
61       $this->addFile()
62         ->path($prefix . '.install')
63         ->template('d8/install.twig');
64     }
65
66     if ($options['libraries.yml']) {
67       $this->addFile()
68         ->path($prefix . '.libraries.yml')
69         ->template('d8/yml/module-libraries.twig');
70     }
71
72     if ($options['permissions.yml']) {
73       $this->addFile()
74         ->path($prefix . '.permissions.yml')
75         ->template('d8/yml/permissions.twig');
76     }
77
78     if ($options['event_subscriber']) {
79       $subscriber_class = $class_prefix . 'Subscriber';
80
81       $this->addFile()
82         ->path("{machine_name}/src/EventSubscriber/$subscriber_class.php")
83         ->template('d8/service/event-subscriber.twig')
84         ->vars($vars + ['class' => $subscriber_class]);
85
86       $this->addFile()
87         ->path($prefix . '.services.yml')
88         ->template('d8/service/event-subscriber.services.twig')
89         ->vars($vars + ['class' => $subscriber_class]);
90     }
91
92     if ($options['block_plugin']) {
93       $block_vars['plugin_label'] = 'Example';
94       $block_vars['plugin_id'] = $vars['machine_name'] . '_' . Utils::human2machine($block_vars['plugin_label']);
95       $block_vars['category'] = $vars['name'];
96       $block_vars['class'] = 'ExampleBlock';
97
98       $this->addFile()
99         ->path('{machine_name}/src/Plugin/Block/' . $block_vars['class'] . '.php')
100         ->template('d8/plugin/block.twig')
101         ->vars($block_vars + $vars);
102     }
103
104     if ($options['controller']) {
105       $controller_class = $class_prefix . 'Controller';
106
107       $controller_vars = [
108         'class' => $controller_class,
109         'services' => [],
110       ];
111
112       $this->addFile()
113         ->path("{machine_name}/src/Controller/$controller_class.php")
114         ->template('d8/controller.twig')
115         ->vars($controller_vars + $vars);
116
117       $routing_vars = [
118         'route_name' => $vars['machine_name'] . '.example',
119         'route_path' => '/' . str_replace('_', '-', $vars['machine_name']) . '/example',
120         'route_title' => 'Example',
121         'route_permission' => 'access content',
122         'class' => $controller_class,
123       ];
124
125       $this->addFile()
126         ->path($prefix . '.routing.yml')
127         ->template('d8/controller-route.twig')
128         ->vars($routing_vars + $vars)
129         ->action('append');
130     }
131
132     if ($options['settings_form']) {
133       $form_class = 'SettingsForm';
134
135       $form_vars = [
136         'form_id' => $vars['machine_name'] . '_settings',
137         'class' => $form_class,
138       ];
139       $this->addFile()
140         ->path('{machine_name}/src/Form/SettingsForm.php')
141         ->template('d8/form/config.twig')
142         ->vars($form_vars + $vars);
143
144       $routing_vars = [
145         'route_name' => $vars['machine_name'] . '.settings_form',
146         'route_path' => '/admin/config/system/' . str_replace('_', '-', $vars['machine_name']),
147         'route_title' => $vars['name'] . ' settings',
148         'route_permission' => 'administer ' . $vars['machine_name'] . ' configuration',
149         'class' => $form_class,
150       ];
151       $this->addFile()
152         ->path($prefix . '.routing.yml')
153         ->template('d8/form/route.twig')
154         ->vars($routing_vars + $vars)
155         ->action('append');
156     }
157
158   }
159
160 }