comparison core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 namespace Drupal\Core\Extension;
4
5 /**
6 * Interface for classes that manage a set of enabled modules.
7 *
8 * Classes implementing this interface work with a fixed list of modules and are
9 * responsible for loading module files and maintaining information about module
10 * dependencies and hook implementations.
11 */
12 interface ModuleHandlerInterface {
13
14 /**
15 * Includes a module's .module file.
16 *
17 * This prevents including a module more than once.
18 *
19 * @param string $name
20 * The name of the module to load.
21 *
22 * @return bool
23 * TRUE if the item is loaded or has already been loaded.
24 */
25 public function load($name);
26
27 /**
28 * Loads all enabled modules.
29 */
30 public function loadAll();
31
32 /**
33 * Returns whether all modules have been loaded.
34 *
35 * @return bool
36 * A Boolean indicating whether all modules have been loaded. This means all
37 * modules; the load status of bootstrap modules cannot be checked.
38 */
39 public function isLoaded();
40
41 /**
42 * Reloads all enabled modules.
43 */
44 public function reload();
45
46 /**
47 * Returns the list of currently active modules.
48 *
49 * @return \Drupal\Core\Extension\Extension[]
50 * An associative array whose keys are the names of the modules and whose
51 * values are Extension objects.
52 */
53 public function getModuleList();
54
55 /**
56 * Returns a module extension object from the currently active modules list.
57 *
58 * @param string $name
59 * The name of the module to return.
60 *
61 * @return \Drupal\Core\Extension\Extension
62 * An extension object.
63 *
64 * @throws \InvalidArgumentException
65 * Thrown when the requested module does not exist.
66 */
67 public function getModule($name);
68
69 /**
70 * Sets an explicit list of currently active modules.
71 *
72 * @param \Drupal\Core\Extension\Extension[] $module_list
73 * An associative array whose keys are the names of the modules and whose
74 * values are Extension objects.
75 */
76 public function setModuleList(array $module_list = []);
77
78 /**
79 * Adds a module to the list of currently active modules.
80 *
81 * @param string $name
82 * The module name; e.g., 'node'.
83 * @param string $path
84 * The module path; e.g., 'core/modules/node'.
85 */
86 public function addModule($name, $path);
87
88 /**
89 * Adds an installation profile to the list of currently active modules.
90 *
91 * @param string $name
92 * The profile name; e.g., 'standard'.
93 * @param string $path
94 * The profile path; e.g., 'core/profiles/standard'.
95 */
96 public function addProfile($name, $path);
97
98 /**
99 * Determines which modules require and are required by each module.
100 *
101 * @param array $modules
102 * An array of module objects keyed by module name. Each object contains
103 * information discovered during a Drupal\Core\Extension\ExtensionDiscovery
104 * scan.
105 *
106 * @return
107 * The same array with the new keys for each module:
108 * - requires: An array with the keys being the modules that this module
109 * requires.
110 * - required_by: An array with the keys being the modules that will not work
111 * without this module.
112 *
113 * @see \Drupal\Core\Extension\ExtensionDiscovery
114 */
115 public function buildModuleDependencies(array $modules);
116
117 /**
118 * Determines whether a given module is enabled.
119 *
120 * @param string $module
121 * The name of the module (without the .module extension).
122 *
123 * @return bool
124 * TRUE if the module is both installed and enabled.
125 */
126 public function moduleExists($module);
127
128 /**
129 * Loads an include file for each enabled module.
130 *
131 * @param string $type
132 * The include file's type (file extension).
133 * @param string $name
134 * (optional) The base file name (without the $type extension). If omitted,
135 * each module's name is used; i.e., "$module.$type" by default.
136 */
137 public function loadAllIncludes($type, $name = NULL);
138
139 /**
140 * Loads a module include file.
141 *
142 * Examples:
143 * @code
144 * // Load node.admin.inc from the node module.
145 * $this->loadInclude('node', 'inc', 'node.admin');
146 * // Load content_types.inc from the node module.
147 * $this->loadInclude('node', 'inc', 'content_types');
148 * @endcode
149 *
150 * @param string $module
151 * The module to which the include file belongs.
152 * @param string $type
153 * The include file's type (file extension).
154 * @param string $name
155 * (optional) The base file name (without the $type extension). If omitted,
156 * $module is used; i.e., resulting in "$module.$type" by default.
157 *
158 * @return string|false
159 * The name of the included file, if successful; FALSE otherwise.
160 */
161 public function loadInclude($module, $type, $name = NULL);
162
163 /**
164 * Retrieves a list of hooks that are declared through hook_hook_info().
165 *
166 * @return array
167 * An associative array whose keys are hook names and whose values are an
168 * associative array containing a group name. The structure of the array
169 * is the same as the return value of hook_hook_info().
170 *
171 * @see hook_hook_info()
172 */
173 public function getHookInfo();
174
175 /**
176 * Determines which modules are implementing a hook.
177 *
178 * @param string $hook
179 * The name of the hook (e.g. "help" or "menu").
180 *
181 * @return array
182 * An array with the names of the modules which are implementing this hook.
183 */
184 public function getImplementations($hook);
185
186 /**
187 * Write the hook implementation info to the cache.
188 */
189 public function writeCache();
190
191 /**
192 * Resets the cached list of hook implementations.
193 */
194 public function resetImplementations();
195
196 /**
197 * Returns whether a given module implements a given hook.
198 *
199 * @param string $module
200 * The name of the module (without the .module extension).
201 * @param string $hook
202 * The name of the hook (e.g. "help" or "menu").
203 *
204 * @return bool
205 * TRUE if the module is both installed and enabled, and the hook is
206 * implemented in that module.
207 */
208 public function implementsHook($module, $hook);
209
210 /**
211 * Invokes a hook in a particular module.
212 *
213 * @param string $module
214 * The name of the module (without the .module extension).
215 * @param string $hook
216 * The name of the hook to invoke.
217 * @param array $args
218 * Arguments to pass to the hook implementation.
219 *
220 * @return mixed
221 * The return value of the hook implementation.
222 */
223 public function invoke($module, $hook, array $args = []);
224
225 /**
226 * Invokes a hook in all enabled modules that implement it.
227 *
228 * @param string $hook
229 * The name of the hook to invoke.
230 * @param array $args
231 * Arguments to pass to the hook.
232 *
233 * @return array
234 * An array of return values of the hook implementations. If modules return
235 * arrays from their implementations, those are merged into one array
236 * recursively. Note: integer keys in arrays will be lost, as the merge is
237 * done using array_merge_recursive().
238 */
239 public function invokeAll($hook, array $args = []);
240
241 /**
242 * Passes alterable variables to specific hook_TYPE_alter() implementations.
243 *
244 * This dispatch function hands off the passed-in variables to type-specific
245 * hook_TYPE_alter() implementations in modules. It ensures a consistent
246 * interface for all altering operations.
247 *
248 * A maximum of 2 alterable arguments is supported. In case more arguments need
249 * to be passed and alterable, modules provide additional variables assigned by
250 * reference in the last $context argument:
251 * @code
252 * $context = array(
253 * 'alterable' => &$alterable,
254 * 'unalterable' => $unalterable,
255 * 'foo' => 'bar',
256 * );
257 * $this->alter('mymodule_data', $alterable1, $alterable2, $context);
258 * @endcode
259 *
260 * Note that objects are always passed by reference in PHP5. If it is absolutely
261 * required that no implementation alters a passed object in $context, then an
262 * object needs to be cloned:
263 * @code
264 * $context = array(
265 * 'unalterable_object' => clone $object,
266 * );
267 * $this->alter('mymodule_data', $data, $context);
268 * @endcode
269 *
270 * @param string|array $type
271 * A string describing the type of the alterable $data. 'form', 'links',
272 * 'node_content', and so on are several examples. Alternatively can be an
273 * array, in which case hook_TYPE_alter() is invoked for each value in the
274 * array, ordered first by module, and then for each module, in the order of
275 * values in $type. For example, when Form API is using $this->alter() to
276 * execute both hook_form_alter() and hook_form_FORM_ID_alter()
277 * implementations, it passes array('form', 'form_' . $form_id) for $type.
278 * @param mixed $data
279 * The variable that will be passed to hook_TYPE_alter() implementations to be
280 * altered. The type of this variable depends on the value of the $type
281 * argument. For example, when altering a 'form', $data will be a structured
282 * array. When altering a 'profile', $data will be an object.
283 * @param mixed $context1
284 * (optional) An additional variable that is passed by reference.
285 * @param mixed $context2
286 * (optional) An additional variable that is passed by reference. If more
287 * context needs to be provided to implementations, then this should be an
288 * associative array as described above.
289 */
290 public function alter($type, &$data, &$context1 = NULL, &$context2 = NULL);
291
292 /**
293 * Returns an array of directories for all enabled modules. Useful for
294 * tasks such as finding a file that exists in all module directories.
295 *
296 * @return array
297 */
298 public function getModuleDirectories();
299
300 /**
301 * Gets the human readable name of a given module.
302 *
303 * @param string $module
304 * The machine name of the module which title should be shown.
305 *
306 * @return string
307 * Returns the human readable name of the module or the machine name passed
308 * in if no matching module is found.
309 */
310 public function getName($module);
311
312 }