Mercurial > hg > rr-repo
comparison sites/all/modules/ctools/ctools.api.php @ 0:ff03f76ab3fe
initial version
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Wed, 21 Aug 2013 18:51:11 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:ff03f76ab3fe |
---|---|
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 * This hook is used to inform the CTools plugin system about the location of a | |
34 * directory that should be searched for files containing plugins of a | |
35 * particular type. CTools invokes this same hook for all plugins, using the | |
36 * two passed parameters to indicate the specific type of plugin for which it | |
37 * is searching. | |
38 * | |
39 * The $plugin_type parameter is self-explanatory - it is the string name of the | |
40 * plugin type (e.g., Panels' 'layouts' or 'styles'). The $owner parameter is | |
41 * necessary because CTools internally namespaces plugins by the module that | |
42 * owns them. This is an extension of Drupal best practices on avoiding global | |
43 * namespace pollution by prepending your module name to all its functions. | |
44 * Consequently, it is possible for two different modules to create a plugin | |
45 * type with exactly the same name and have them operate in harmony. In fact, | |
46 * this system renders it impossible for modules to encroach on other modules' | |
47 * plugin namespaces. | |
48 * | |
49 * Given this namespacing, it is important that implementations of this hook | |
50 * check BOTH the $owner and $plugin_type parameters before returning a path. | |
51 * If your module does not implement plugins for the requested module/plugin | |
52 * combination, it is safe to return nothing at all (or NULL). As a convenience, | |
53 * it is also safe to return a path that does not exist for plugins your module | |
54 * does not implement - see form 2 for a use case. | |
55 * | |
56 * Note that modules implementing a plugin also must implement this hook to | |
57 * instruct CTools as to the location of the plugins. See form 3 for a use case. | |
58 * | |
59 * The conventional structure to return is "plugins/$plugin_type" - that is, a | |
60 * 'plugins' subdirectory in your main module directory, with individual | |
61 * directories contained therein named for the plugin type they contain. | |
62 * | |
63 * @param string $owner | |
64 * The system name of the module owning the plugin type for which a base | |
65 * directory location is being requested. | |
66 * @param string $plugin_type | |
67 * The name of the plugin type for which a base directory is being requested. | |
68 * @return string | |
69 * The path where CTools' plugin system should search for plugin files, | |
70 * relative to your module's root. Omit leading and trailing slashes. | |
71 */ | |
72 function hook_ctools_plugin_directory($owner, $plugin_type) { | |
73 // Form 1 - for a module implementing only the 'content_types' plugin owned | |
74 // by CTools, this would cause the plugin system to search the | |
75 // <moduleroot>/plugins/content_types directory for .inc plugin files. | |
76 if ($owner == 'ctools' && $plugin_type == 'content_types') { | |
77 return 'plugins/content_types'; | |
78 } | |
79 | |
80 // Form 2 - if your module implements only Panels plugins, and has 'layouts' | |
81 // and 'styles' plugins but no 'cache' or 'display_renderers', it is OK to be | |
82 // lazy and return a directory for a plugin you don't actually implement (so | |
83 // long as that directory doesn't exist). This lets you avoid ugly in_array() | |
84 // logic in your conditional, and also makes it easy to add plugins of those | |
85 // types later without having to change this hook implementation. | |
86 if ($owner == 'panels') { | |
87 return "plugins/$plugin_type"; | |
88 } | |
89 | |
90 // Form 3 - CTools makes no assumptions about where your plugins are located, | |
91 // so you still have to implement this hook even for plugins created by your | |
92 // own module. | |
93 if ($owner == 'mymodule') { | |
94 // Yes, this is exactly like Form 2 - just a different reasoning for it. | |
95 return "plugins/$plugin_type"; | |
96 } | |
97 // Finally, if nothing matches, it's safe to return nothing at all (or NULL). | |
98 } | |
99 | |
100 /** | |
101 * Alter a plugin before it has been processed. | |
102 * | |
103 * This hook is useful for altering flags or other information that will be | |
104 * used or possibly overriden by the process hook if defined. | |
105 * | |
106 * @param $plugin | |
107 * An associative array defining a plugin. | |
108 * @param $info | |
109 * An associative array of plugin type info. | |
110 */ | |
111 function hook_ctools_plugin_pre_alter(&$plugin, &$info) { | |
112 // Override a function defined by the plugin. | |
113 if ($info['type'] == 'my_type') { | |
114 $plugin['my_flag'] = 'new_value'; | |
115 } | |
116 } | |
117 | |
118 /** | |
119 * Alter a plugin after it has been processed. | |
120 * | |
121 * This hook is useful for overriding the final values for a plugin after it | |
122 * has been processed. | |
123 * | |
124 * @param $plugin | |
125 * An associative array defining a plugin. | |
126 * @param $info | |
127 * An associative array of plugin type info. | |
128 */ | |
129 function hook_ctools_plugin_post_alter(&$plugin, &$info) { | |
130 // Override a function defined by the plugin. | |
131 if ($info['type'] == 'my_type') { | |
132 $plugin['my_function'] = 'new_function'; | |
133 } | |
134 } | |
135 | |
136 /** | |
137 * Alter the list of modules/themes which implement a certain api. | |
138 * | |
139 * The hook named here is just an example, as the real existing hooks are named | |
140 * for example 'hook_views_api_alter'. | |
141 * | |
142 * @param array $list | |
143 * An array of informations about the implementors of a certain api. | |
144 * The key of this array are the module names/theme names. | |
145 */ | |
146 function hook_ctools_api_hook_alter(&$list) { | |
147 // Alter the path of the node implementation. | |
148 $list['node']['path'] = drupal_get_path('module', 'node'); | |
149 } | |
150 | |
151 /** | |
152 * Alter the available functions to be used in ctools math expression api. | |
153 * | |
154 * One usecase would be to create your own function in your module and | |
155 * allow to use it in the math expression api. | |
156 * | |
157 * @param $functions | |
158 * An array which has the functions as value. | |
159 */ | |
160 function hook_ctools_math_expression_functions_alter(&$functions) { | |
161 // Allow to convert from degrees to radiant. | |
162 $functions[] = 'deg2rad'; | |
163 } | |
164 | |
165 /** | |
166 * Alter everything. | |
167 * | |
168 * @param $info | |
169 * An associative array containing the following keys: | |
170 * - content: The rendered content. | |
171 * - title: The content's title. | |
172 * - no_blocks: A boolean to decide if blocks should be displayed. | |
173 * @param $page | |
174 * If TRUE then this renderer owns the page and can use theme('page') | |
175 * for no blocks; if false, output is returned regardless of any no | |
176 * blocks settings. | |
177 * @param $context | |
178 * An associative array containing the following keys: | |
179 * - args: The raw arguments behind the contexts. | |
180 * - contexts: The context objects in use. | |
181 * - task: The task object in use. | |
182 * - subtask: The subtask object in use. | |
183 * - handler: The handler object in use. | |
184 */ | |
185 function hook_ctools_render_alter(&$info, &$page, &$context) { | |
186 if ($context['handler']->name == 'my_handler') { | |
187 ctools_add_css('my_module.theme', 'my_module'); | |
188 } | |
189 } | |
190 | |
191 /** | |
192 * Alter a content plugin subtype. | |
193 * | |
194 * While content types can be altered via hook_ctools_plugin_pre_alter() or | |
195 * hook_ctools_plugin_post_alter(), the subtypes that content types rely on | |
196 * are special and require their own hook. | |
197 * | |
198 * This hook can be used to add things like 'render last' or change icons | |
199 * or categories or to rename content on specific sites. | |
200 */ | |
201 function hook_ctools_content_subtype_alter($subtype, $plugin) { | |
202 $subtype['render last'] = TRUE; | |
203 } | |
204 | |
205 /** | |
206 * Alter the definition of an entity context plugin. | |
207 * | |
208 * @param array $plugin | |
209 * An associative array defining a plugin. | |
210 * @param array $entity | |
211 * The entity info array of a specific entity type. | |
212 * @param string $plugin_id | |
213 * The plugin ID, in the format NAME:KEY. | |
214 */ | |
215 function hook_ctools_entity_context_alter(&$plugin, &$entity, $plugin_id) { | |
216 ctools_include('context'); | |
217 switch ($plugin_id) { | |
218 case 'entity_id:taxonomy_term': | |
219 $plugin['no ui'] = TRUE; | |
220 case 'entity:user': | |
221 $plugin = ctools_get_context('user'); | |
222 unset($plugin['no ui']); | |
223 unset($plugin['no required context ui']); | |
224 break; | |
225 } | |
226 } | |
227 | |
228 /** | |
229 * Alter the definition of entity context plugins. | |
230 * | |
231 * @param array $plugins | |
232 * An associative array of plugin definitions, keyed by plugin ID. | |
233 * | |
234 * @see hook_ctools_entity_context_alter() | |
235 */ | |
236 function hook_ctools_entity_contexts_alter(&$plugins) { | |
237 $plugins['entity_id:taxonomy_term']['no ui'] = TRUE; | |
238 } | |
239 | |
240 /** | |
241 * Change cleanstring settings. | |
242 * | |
243 * @param array $settings | |
244 * An associative array of cleanstring settings. | |
245 * | |
246 * @see ctools_cleanstring() | |
247 */ | |
248 function hook_ctools_cleanstring_alter(&$settings) { | |
249 // Convert all strings to lower case. | |
250 $settings['lower case'] = TRUE; | |
251 } | |
252 | |
253 /** | |
254 * Change cleanstring settings for a specific clean ID. | |
255 * | |
256 * @param array $settings | |
257 * An associative array of cleanstring settings. | |
258 * | |
259 * @see ctools_cleanstring() | |
260 */ | |
261 function hook_ctools_cleanstring_CLEAN_ID_alter(&$settings) { | |
262 // Convert all strings to lower case. | |
263 $settings['lower case'] = TRUE; | |
264 } | |
265 | |
266 /** | |
267 * @} End of "addtogroup hooks". | |
268 */ |