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 | * This hook is used to inform the CTools plugin system about the location of a |
---|
18 | * directory that should be searched for files containing plugins of a |
---|
19 | * particular type. CTools invokes this same hook for all plugins, using the |
---|
20 | * two passed parameters to indicate the specific type of plugin for which it |
---|
21 | * is searching. |
---|
22 | * |
---|
23 | * The $plugin_type parameter is self-explanatory - it is the string name of the |
---|
24 | * plugin type (e.g., Panels' 'layouts' or 'styles'). The $owner parameter is |
---|
25 | * necessary because CTools internally namespaces plugins by the module that |
---|
26 | * owns them. This is an extension of Drupal best practices on avoiding global |
---|
27 | * namespace pollution by prepending your module name to all its functions. |
---|
28 | * Consequently, it is possible for two different modules to create a plugin |
---|
29 | * type with exactly the same name and have them operate in harmony. In fact, |
---|
30 | * this system renders it impossible for modules to encroach on other modules' |
---|
31 | * plugin namespaces. |
---|
32 | * |
---|
33 | * Given this namespacing, it is important that implementations of this hook |
---|
34 | * check BOTH the $owner and $plugin_type parameters before returning a path. |
---|
35 | * If your module does not implement plugins for the requested module/plugin |
---|
36 | * combination, it is safe to return nothing at all (or NULL). As a convenience, |
---|
37 | * it is also safe to return a path that does not exist for plugins your module |
---|
38 | * does not implement - see form 2 for a use case. |
---|
39 | * |
---|
40 | * Note that modules implementing a plugin also must implement this hook to |
---|
41 | * instruct CTools as to the location of the plugins. See form 3 for a use case. |
---|
42 | * |
---|
43 | * The conventional structure to return is "plugins/$plugin_type" - that is, a |
---|
44 | * 'plugins' subdirectory in your main module directory, with individual |
---|
45 | * directories contained therein named for the plugin type they contain. |
---|
46 | * |
---|
47 | * @param string $owner |
---|
48 | * The system name of the module owning the plugin type for which a base |
---|
49 | * directory location is being requested. |
---|
50 | * @param string $plugin_type |
---|
51 | * The name of the plugin type for which a base directory is being requested. |
---|
52 | * @return string |
---|
53 | * The path where CTools' plugin system should search for plugin files, |
---|
54 | * relative to your module's root. Omit leading and trailing slashes. |
---|
55 | */ |
---|
56 | function hook_ctools_plugin_directory($owner, $plugin_type) { |
---|
57 | // Form 1 - for a module implementing only the 'content_types' plugin owned |
---|
58 | // by CTools, this would cause the plugin system to search the |
---|
59 | // <moduleroot>/plugins/content_types directory for .inc plugin files. |
---|
60 | if ($owner == 'ctools' && $plugin_type == 'content_types') { |
---|
61 | return 'plugins/content_types'; |
---|
62 | } |
---|
63 | |
---|
64 | // Form 2 - if your module implements only Panels plugins, and has 'layouts' |
---|
65 | // and 'styles' plugins but no 'cache' or 'display_renderers', it is OK to be |
---|
66 | // lazy and return a directory for a plugin you don't actually implement (so |
---|
67 | // long as that directory doesn't exist). This lets you avoid ugly in_array() |
---|
68 | // logic in your conditional, and also makes it easy to add plugins of those |
---|
69 | // types later without having to change this hook implementation. |
---|
70 | if ($owner == 'panels') { |
---|
71 | return "plugins/$plugin_type"; |
---|
72 | } |
---|
73 | |
---|
74 | // Form 3 - CTools makes no assumptions about where your plugins are located, |
---|
75 | // so you still have to implement this hook even for plugins created by your |
---|
76 | // own module. |
---|
77 | if ($owner == 'mymodule') { |
---|
78 | // Yes, this is exactly like Form 2 - just a different reasoning for it. |
---|
79 | return "plugins/$plugin_type"; |
---|
80 | } |
---|
81 | // Finally, if nothing matches, it's safe to return nothing at all (or NULL). |
---|
82 | } |
---|
83 | |
---|
84 | /** |
---|
85 | * Alter the available functions to be used in ctools math expression api. |
---|
86 | * |
---|
87 | * One usecase would be to create your own function in your module and |
---|
88 | * allow to use it in the math expression api. |
---|
89 | * |
---|
90 | * @param $functions |
---|
91 | * An array which has the functions as value. |
---|
92 | */ |
---|
93 | function hook_ctools_math_expression_functions_alter(&$functions) { |
---|
94 | // Allow to convert from degrees to radiant. |
---|
95 | $functions[] = 'deg2rad'; |
---|
96 | } |
---|
97 | |
---|
98 | /** |
---|
99 | * @} End of "addtogroup hooks". |
---|
100 | */ |
---|