Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace DrupalCodeGenerator\Command\Drupal_8;
|
Chris@0
|
4
|
Chris@0
|
5 use DrupalCodeGenerator\Command\BaseGenerator;
|
Chris@0
|
6 use DrupalCodeGenerator\Utils;
|
Chris@0
|
7 use Symfony\Component\Console\Input\InputInterface;
|
Chris@0
|
8 use Symfony\Component\Console\Output\OutputInterface;
|
Chris@0
|
9 use Symfony\Component\Console\Question\Question;
|
Chris@0
|
10
|
Chris@0
|
11 /**
|
Chris@0
|
12 * Implements d8:hook command.
|
Chris@0
|
13 */
|
Chris@0
|
14 class Hook extends BaseGenerator {
|
Chris@0
|
15
|
Chris@0
|
16 protected $name = 'd8:hook';
|
Chris@0
|
17 protected $description = 'Generates a hook';
|
Chris@0
|
18 protected $alias = 'hook';
|
Chris@0
|
19
|
Chris@0
|
20 /**
|
Chris@0
|
21 * {@inheritdoc}
|
Chris@0
|
22 */
|
Chris@0
|
23 protected function interact(InputInterface $input, OutputInterface $output) {
|
Chris@0
|
24 $questions = Utils::defaultQuestions();
|
Chris@0
|
25 $questions['hook_name'] = new Question('Hook name');
|
Chris@0
|
26 $questions['hook_name']->setValidator(function ($value) {
|
Chris@0
|
27 if (!in_array($value, $this->supportedHooks())) {
|
Chris@0
|
28 throw new \UnexpectedValueException('The value is not correct class name.');
|
Chris@0
|
29 }
|
Chris@0
|
30 return $value;
|
Chris@0
|
31 });
|
Chris@0
|
32 $questions['hook_name']->setAutocompleterValues($this->supportedHooks());
|
Chris@0
|
33
|
Chris@0
|
34 $vars = $this->collectVars($input, $output, $questions);
|
Chris@0
|
35
|
Chris@0
|
36 // Most Drupal hooks are situated in a module file but some are not.
|
Chris@0
|
37 $special_hooks = [
|
Chris@0
|
38 'install' => [
|
Chris@0
|
39 'install',
|
Chris@0
|
40 'uninstall',
|
Chris@0
|
41 'schema',
|
Chris@0
|
42 'requirements',
|
Chris@0
|
43 'update_N',
|
Chris@0
|
44 'update_last_removed',
|
Chris@0
|
45 ],
|
Chris@0
|
46 // See views_hook_info().
|
Chris@0
|
47 'views.inc' => [
|
Chris@0
|
48 'views_data',
|
Chris@0
|
49 'views_data_alter',
|
Chris@0
|
50 'views_analyze',
|
Chris@0
|
51 'views_invalidate_cache',
|
Chris@0
|
52 'field_views_data',
|
Chris@0
|
53 'field_views_data_alter',
|
Chris@0
|
54 // See \Drupal\views\views::$plugins.
|
Chris@0
|
55 'views_plugins_access_alter',
|
Chris@0
|
56 'views_plugins_area_alter',
|
Chris@0
|
57 'views_plugins_argument_alter',
|
Chris@0
|
58 'views_plugins_argument_default_alter',
|
Chris@0
|
59 'views_plugins_argument_validator_alter',
|
Chris@0
|
60 'views_plugins_cache_alter',
|
Chris@0
|
61 'views_plugins_display_extender_alter',
|
Chris@0
|
62 'views_plugins_display_alter',
|
Chris@0
|
63 'views_plugins_exposed_form_alter',
|
Chris@0
|
64 'views_plugins_field_alter',
|
Chris@0
|
65 'views_plugins_filter_alter',
|
Chris@0
|
66 'views_plugins_join_alter',
|
Chris@0
|
67 'views_plugins_pager_alter',
|
Chris@0
|
68 'views_plugins_query_alter',
|
Chris@0
|
69 'views_plugins_relationship_alter',
|
Chris@0
|
70 'views_plugins_row_alter',
|
Chris@0
|
71 'views_plugins_sort_alter',
|
Chris@0
|
72 'views_plugins_style_alter',
|
Chris@0
|
73 'views_plugins_wizard_alter',
|
Chris@0
|
74 ],
|
Chris@0
|
75 'views_execution.inc' => [
|
Chris@0
|
76 'views_query_substitutions',
|
Chris@0
|
77 'views_form_substitutions',
|
Chris@0
|
78 'views_pre_view',
|
Chris@0
|
79 'views_pre_build',
|
Chris@0
|
80 'views_post_build',
|
Chris@0
|
81 'views_pre_execute',
|
Chris@0
|
82 'views_post_execute',
|
Chris@0
|
83 'views_pre_render',
|
Chris@0
|
84 'views_post_render',
|
Chris@0
|
85 'views_query_alter',
|
Chris@0
|
86 ],
|
Chris@0
|
87 // See system_hook_info().
|
Chris@0
|
88 'tokens.inc' => [
|
Chris@0
|
89 'token_info',
|
Chris@0
|
90 'token_info_alter',
|
Chris@0
|
91 'tokens',
|
Chris@0
|
92 'tokens_alter',
|
Chris@0
|
93 ],
|
Chris@0
|
94 'post_update.php' => [
|
Chris@0
|
95 'post_update_N',
|
Chris@0
|
96 ],
|
Chris@0
|
97 ];
|
Chris@0
|
98
|
Chris@0
|
99 $file_type = 'module';
|
Chris@0
|
100 foreach ($special_hooks as $group => $hooks) {
|
Chris@0
|
101 if (in_array($vars['hook_name'], $hooks)) {
|
Chris@0
|
102 $file_type = $group;
|
Chris@0
|
103 break;
|
Chris@0
|
104 }
|
Chris@0
|
105 }
|
Chris@0
|
106
|
Chris@0
|
107 $this->addFile()
|
Chris@0
|
108 ->path('{machine_name}.' . $file_type)
|
Chris@0
|
109 ->headerTemplate("d8/file-docs/$file_type.twig")
|
Chris@0
|
110 ->template('d8/hook/' . $vars['hook_name'] . '.twig')
|
Chris@0
|
111 ->action('append')
|
Chris@0
|
112 ->headerSize(7);
|
Chris@0
|
113 }
|
Chris@0
|
114
|
Chris@0
|
115 /**
|
Chris@0
|
116 * Returns list of supported hooks.
|
Chris@0
|
117 */
|
Chris@0
|
118 protected function supportedHooks() {
|
Chris@0
|
119 return array_map(function ($file) {
|
Chris@0
|
120 return pathinfo($file, PATHINFO_FILENAME);
|
Chris@0
|
121 }, array_diff(scandir($this->templatePath . '/d8/hook'), ['.', '..']));
|
Chris@0
|
122 }
|
Chris@0
|
123
|
Chris@0
|
124 }
|