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