commit 4a27ee86fdbbab5f738ce7a912a983729c7d883b Author: fago Date: Mon Jul 29 20:55:32 2013 +0200 Allow modules to expose directories for other modules. diff --git a/includes/rules.core.inc b/includes/rules.core.inc index c512ba3..668cfa5 100644 --- a/includes/rules.core.inc +++ b/includes/rules.core.inc @@ -1766,9 +1766,16 @@ abstract class RulesAbstractPlugin extends RulesPlugin { module_load_include('inc', $module, $name); } } + $dirs = array(); foreach (module_implements('rules_directory') as $module) { // Include all files once, so the discovery can find them. - $directory = module_invoke($module, 'rules_directory'); + $result = module_invoke($module, 'rules_directory'); + if (!is_array($result)) { + $result = array($module => $result); + } + $dirs += $result; + } + foreach ($dirs as $module => $directory) { foreach (glob(drupal_get_path('module', $module) . "/$directory/*.{inc,php}", GLOB_BRACE) as $filename) { include_once $filename; } diff --git a/rules.api.php b/rules.api.php index 1361007..c9a2524 100644 --- a/rules.api.php +++ b/rules.api.php @@ -181,11 +181,13 @@ function hook_rules_file_info() { * the files containing the classes during discovery - see * rules_discover_plugins(). * - * @return string + * @return string|array * A directory relative to the module directory, which holds the files - * containing rules plugin handlers. All files in those directory having - * a 'php' or 'inc' file extension will be loaded during discovery. - * Optionally, wildcards ('*') may be used to match multiple directories. + * containing rules plugin handlers, or multiple directories keyed by the + * module the directory is contained in. + * All files in those directories having a 'php' or 'inc' file extension will + * be loaded during discovery. Optionally, wildcards ('*') may be used to + * match multiple directories. * * @see rules_discover_plugins() */