root / drupal7 / sites / all / modules / ctools / ctools.api.php @ 6e3ce7c2
1 |
<?php
|
---|---|
2 |
|
3 |
/**
|
4 |
* @file
|
5 |
* Hooks provided by the Chaos Tool Suite.
|
6 |
*
|
7 |
* This file is divided into static hooks (hooks with string literal names) and
|
8 |
* dynamic hooks (hooks with pattern-derived string names).
|
9 |
*/
|
10 |
|
11 |
/**
|
12 |
* @addtogroup hooks
|
13 |
* @{
|
14 |
*/
|
15 |
|
16 |
/**
|
17 |
* Inform CTools about plugin types.
|
18 |
*
|
19 |
* @return array
|
20 |
* An array of plugin types, keyed by the type name.
|
21 |
* See the advanced help topic 'plugins-creating' for details of the array
|
22 |
* properties.
|
23 |
*/
|
24 |
function hook_ctools_plugin_type() { |
25 |
$plugins['my_type'] = array( |
26 |
'load themes' => TRUE, |
27 |
); |
28 |
|
29 |
return $plugins; |
30 |
} |
31 |
|
32 |
/**
|
33 |
* Tells CTools where to find module-defined plugins.
|
34 |
*
|
35 |
* This hook is used to inform the CTools plugin system about the location of a
|
36 |
* directory that should be searched for files containing plugins of a
|
37 |
* particular type. CTools invokes this same hook for all plugins, using the
|
38 |
* two passed parameters to indicate the specific type of plugin for which it
|
39 |
* is searching.
|
40 |
*
|
41 |
* The $plugin_type parameter is self-explanatory - it is the string name of the
|
42 |
* plugin type (e.g., Panels' 'layouts' or 'styles'). The $owner parameter is
|
43 |
* necessary because CTools internally namespaces plugins by the module that
|
44 |
* owns them. This is an extension of Drupal best practices on avoiding global
|
45 |
* namespace pollution by prepending your module name to all its functions.
|
46 |
* Consequently, it is possible for two different modules to create a plugin
|
47 |
* type with exactly the same name and have them operate in harmony. In fact,
|
48 |
* this system renders it impossible for modules to encroach on other modules'
|
49 |
* plugin namespaces.
|
50 |
*
|
51 |
* Given this namespacing, it is important that implementations of this hook
|
52 |
* check BOTH the $owner and $plugin_type parameters before returning a path.
|
53 |
* If your module does not implement plugins for the requested module/plugin
|
54 |
* combination, it is safe to return nothing at all (or NULL). As a convenience,
|
55 |
* it is also safe to return a path that does not exist for plugins your module
|
56 |
* does not implement - see form 2 for a use case.
|
57 |
*
|
58 |
* Note that modules implementing a plugin also must implement this hook to
|
59 |
* instruct CTools as to the location of the plugins. See form 3 for a use case.
|
60 |
*
|
61 |
* The conventional structure to return is "plugins/$plugin_type" - that is, a
|
62 |
* 'plugins' subdirectory in your main module directory, with individual
|
63 |
* directories contained therein named for the plugin type they contain.
|
64 |
*
|
65 |
* @param string $owner
|
66 |
* The system name of the module owning the plugin type for which a base
|
67 |
* directory location is being requested.
|
68 |
* @param string $plugin_type
|
69 |
* The name of the plugin type for which a base directory is being requested.
|
70 |
*
|
71 |
* @return string
|
72 |
* The path where CTools' plugin system should search for plugin files,
|
73 |
* relative to your module's root. Omit leading and trailing slashes.
|
74 |
*/
|
75 |
function hook_ctools_plugin_directory($owner, $plugin_type) { |
76 |
// Form 1 - for a module implementing only the 'content_types' plugin owned
|
77 |
// by CTools, this would cause the plugin system to search the
|
78 |
// <moduleroot>/plugins/content_types directory for .inc plugin files.
|
79 |
if ($owner == 'ctools' && $plugin_type == 'content_types') { |
80 |
return 'plugins/content_types'; |
81 |
} |
82 |
|
83 |
// Form 2 - if your module implements only Panels plugins, and has 'layouts'
|
84 |
// and 'styles' plugins but no 'cache' or 'display_renderers', it is OK to be
|
85 |
// lazy and return a directory for a plugin you don't actually implement (so
|
86 |
// long as that directory doesn't exist). This lets you avoid ugly in_array()
|
87 |
// logic in your conditional, and also makes it easy to add plugins of those
|
88 |
// types later without having to change this hook implementation.
|
89 |
if ($owner == 'panels') { |
90 |
return "plugins/$plugin_type"; |
91 |
} |
92 |
|
93 |
// Form 3 - CTools makes no assumptions about where your plugins are located,
|
94 |
// so you still have to implement this hook even for plugins created by your
|
95 |
// own module.
|
96 |
if ($owner == 'mymodule') { |
97 |
// Yes, this is exactly like Form 2 - just a different reasoning for it.
|
98 |
return "plugins/$plugin_type"; |
99 |
} |
100 |
// Finally, if nothing matches, it's safe to return nothing at all (== NULL).
|
101 |
} |
102 |
|
103 |
/**
|
104 |
* Alter a plugin before it has been processed.
|
105 |
*
|
106 |
* This hook is useful for altering flags or other information that will be
|
107 |
* used or possibly overriden by the process hook if defined.
|
108 |
*
|
109 |
* @param array $plugin
|
110 |
* An associative array defining a plugin.
|
111 |
* @param array $info
|
112 |
* An associative array of plugin type info.
|
113 |
*/
|
114 |
function hook_ctools_plugin_pre_alter(array &$plugin, array &$info) { |
115 |
// Override a function defined by the plugin.
|
116 |
if ($info['type'] == 'my_type') { |
117 |
$plugin['my_flag'] = 'new_value'; |
118 |
} |
119 |
} |
120 |
|
121 |
/**
|
122 |
* Alter a plugin after it has been processed.
|
123 |
*
|
124 |
* This hook is useful for overriding the final values for a plugin after it
|
125 |
* has been processed.
|
126 |
*
|
127 |
* @param array $plugin
|
128 |
* An associative array defining a plugin.
|
129 |
* @param array $info
|
130 |
* An associative array of plugin type info.
|
131 |
*/
|
132 |
function hook_ctools_plugin_post_alter(array &$plugin, array &$info) { |
133 |
// Override a function defined by the plugin.
|
134 |
if ($info['type'] == 'my_type') { |
135 |
$plugin['my_function'] = 'new_function'; |
136 |
} |
137 |
} |
138 |
|
139 |
/**
|
140 |
* Alter the list of modules/themes which implement a certain api.
|
141 |
*
|
142 |
* The hook named here is just an example, as the real existing hooks are named
|
143 |
* for example 'hook_views_api_alter'.
|
144 |
*
|
145 |
* @param array $list
|
146 |
* An array of informations about the implementors of a certain api.
|
147 |
* The key of this array are the module names/theme names.
|
148 |
*/
|
149 |
function hook_ctools_api_hook_alter(array &$list) { |
150 |
// Alter the path of the node implementation.
|
151 |
$list['node']['path'] = drupal_get_path('module', 'node'); |
152 |
} |
153 |
|
154 |
/**
|
155 |
* Alter the available functions to be used in ctools math expression api.
|
156 |
*
|
157 |
* One use case would be to create your own function in your module and
|
158 |
* allow to use it in the math expression api.
|
159 |
*
|
160 |
* @param array $functions
|
161 |
* An array which has the functions as value.
|
162 |
* @param array $context
|
163 |
* An array containing an item 'final' whose value is a reference to the
|
164 |
* definitions for multiple-arg functions. Use this to add in functions that
|
165 |
* require more than one arg.
|
166 |
*/
|
167 |
function hook_ctools_math_expression_functions_alter(array &$functions, array $context) { |
168 |
// Allow to convert from degrees to radians.
|
169 |
$functions[] = 'deg2rad'; |
170 |
|
171 |
$multiarg = $context['final']; |
172 |
$multiarg['pow'] = array( |
173 |
'function' => 'pow', |
174 |
'arguments' => 2, |
175 |
); |
176 |
} |
177 |
|
178 |
/**
|
179 |
* Alter the available functions to be used in ctools math expression api.
|
180 |
*
|
181 |
* One usecase would be to create your own function in your module and
|
182 |
* allow to use it in the math expression api.
|
183 |
*
|
184 |
* @param array $constants
|
185 |
* An array of name:value pairs, one for each named constant. Values added
|
186 |
* to this array become read-only variables with the value assigned here.
|
187 |
*/
|
188 |
function hook_ctools_math_expression_constants_alter(array &$constants) { |
189 |
// Add the speed of light as constant 'c':
|
190 |
$constants['c'] = 299792458; |
191 |
} |
192 |
|
193 |
/**
|
194 |
* Alter everything.
|
195 |
*
|
196 |
* @param array $info
|
197 |
* An associative array containing the following keys:
|
198 |
* - content: The rendered content.
|
199 |
* - title: The content's title.
|
200 |
* - no_blocks: A boolean to decide if blocks should be displayed.
|
201 |
* @param bool $page
|
202 |
* If TRUE then this renderer owns the page and can use theme('page')
|
203 |
* for no blocks; if false, output is returned regardless of any no
|
204 |
* blocks settings.
|
205 |
* @param array $context
|
206 |
* An associative array containing the following keys:
|
207 |
* - args: The raw arguments behind the contexts.
|
208 |
* - contexts: The context objects in use.
|
209 |
* - task: The task object in use.
|
210 |
* - subtask: The subtask object in use.
|
211 |
* - handler: The handler object in use.
|
212 |
*/
|
213 |
function hook_ctools_render_alter(array &$info, &$page, array &$context) { |
214 |
if ($context['handler']->name == 'my_handler') { |
215 |
ctools_add_css('my_module.theme', 'my_module'); |
216 |
} |
217 |
} |
218 |
|
219 |
/**
|
220 |
* Alter a content plugin subtype.
|
221 |
*
|
222 |
* While content types can be altered via hook_ctools_plugin_pre_alter() or
|
223 |
* hook_ctools_plugin_post_alter(), the subtypes that content types rely on
|
224 |
* are special and require their own hook.
|
225 |
*
|
226 |
* This hook can be used to add things like 'render last' or change icons
|
227 |
* or categories or to rename content on specific sites.
|
228 |
*/
|
229 |
function hook_ctools_content_subtype_alter($subtype, $plugin) { |
230 |
// Force a particular subtype of a particular plugin to render last.
|
231 |
if ($plugin['module'] === 'some_plugin_module' |
232 |
&& $plugin['name'] === 'some_plugin_name' |
233 |
&& $subtype['subtype_id'] === 'my_subtype_id' |
234 |
) { |
235 |
$subtype['render last'] = TRUE; |
236 |
} |
237 |
} |
238 |
|
239 |
/**
|
240 |
* Alter the definition of an entity context plugin.
|
241 |
*
|
242 |
* @param array $plugin
|
243 |
* An associative array defining a plugin.
|
244 |
* @param array $entity
|
245 |
* The entity info array of a specific entity type.
|
246 |
* @param string $plugin_id
|
247 |
* The plugin ID, in the format NAME:KEY.
|
248 |
*/
|
249 |
function hook_ctools_entity_context_alter(array &$plugin, array &$entity, $plugin_id) { |
250 |
ctools_include('context');
|
251 |
switch ($plugin_id) { |
252 |
case 'entity_id:taxonomy_term': |
253 |
$plugin['no ui'] = TRUE; |
254 |
case 'entity:user': |
255 |
$plugin = ctools_get_context('user'); |
256 |
unset($plugin['no ui']); |
257 |
unset($plugin['no required context ui']); |
258 |
break;
|
259 |
} |
260 |
} |
261 |
|
262 |
/**
|
263 |
* Alter the conversion of context items by ctools context plugin convert()s.
|
264 |
*
|
265 |
* @param ctools_context $context
|
266 |
* The current context plugin object. If this implemented a 'convert'
|
267 |
* function, the value passed in has been processed by that function.
|
268 |
* @param string $converter
|
269 |
* A string associated with the plugin type, identifying the operation.
|
270 |
* @param string $value
|
271 |
* The value being converted; this is the only return from the function.
|
272 |
* @param array $converter_options
|
273 |
* Array of key-value pairs to pass to a converter function from higher
|
274 |
* levels.
|
275 |
*
|
276 |
* @see ctools_context_convert_context()
|
277 |
*/
|
278 |
function hook_ctools_context_converter_alter(ctools_context $context, $converter, &$value, array $converter_options) { |
279 |
if ($converter === 'mystring') { |
280 |
$value = 'fixed'; |
281 |
} |
282 |
} |
283 |
|
284 |
/**
|
285 |
* Alter the definition of entity context plugins.
|
286 |
*
|
287 |
* @param array $plugins
|
288 |
* An associative array of plugin definitions, keyed by plugin ID.
|
289 |
*
|
290 |
* @see hook_ctools_entity_context_alter()
|
291 |
*/
|
292 |
function hook_ctools_entity_contexts_alter(array &$plugins) { |
293 |
$plugins['entity_id:taxonomy_term']['no ui'] = TRUE; |
294 |
} |
295 |
|
296 |
/**
|
297 |
* Change cleanstring settings.
|
298 |
*
|
299 |
* @param array $settings
|
300 |
* An associative array of cleanstring settings.
|
301 |
*
|
302 |
* @see ctools_cleanstring()
|
303 |
*/
|
304 |
function hook_ctools_cleanstring_alter(array &$settings) { |
305 |
// Convert all strings to lower case.
|
306 |
$settings['lower case'] = TRUE; |
307 |
} |
308 |
|
309 |
/**
|
310 |
* Change cleanstring settings for a specific clean ID.
|
311 |
*
|
312 |
* @param array $settings
|
313 |
* An associative array of cleanstring settings.
|
314 |
*
|
315 |
* @see ctools_cleanstring()
|
316 |
*/
|
317 |
function hook_ctools_cleanstring_CLEAN_ID_alter(array &$settings) { |
318 |
// Convert all strings to lower case.
|
319 |
$settings['lower case'] = TRUE; |
320 |
} |
321 |
|
322 |
/**
|
323 |
* Let other modules modify the context handler before it is rendered.
|
324 |
*
|
325 |
* @param object $handler
|
326 |
* A handler for a current task and subtask.
|
327 |
* @param array $contexts
|
328 |
* An associative array of contexts.
|
329 |
* @param array $args
|
330 |
* An array for current args.
|
331 |
*
|
332 |
* @see ctools_context_handler_pre_render()
|
333 |
*/
|
334 |
function ctools_context_handler_pre_render($handler, array $contexts, array $args) { |
335 |
$handler->conf['css_id'] = 'my-id'; |
336 |
} |
337 |
|
338 |
/**
|
339 |
* @} End of "addtogroup hooks".
|
340 |
*/
|