diff options
author | Simon Rettberg | 2017-03-02 16:00:32 +0100 |
---|---|---|
committer | Simon Rettberg | 2017-03-02 16:00:32 +0100 |
commit | 627d18ede199339ad3a5bc8b85c0cc71616a6868 (patch) | |
tree | 01a848080084495ee914844d78ac9b3959f19642 /inc | |
parent | Merge branch 'statistics_reporting' (diff) | |
download | slx-admin-627d18ede199339ad3a5bc8b85c0cc71616a6868.tar.gz slx-admin-627d18ede199339ad3a5bc8b85c0cc71616a6868.tar.xz slx-admin-627d18ede199339ad3a5bc8b85c0cc71616a6868.zip |
[inc/Hook] New helper for loading hooks
Diffstat (limited to 'inc')
-rw-r--r-- | inc/hook.inc.php | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/inc/hook.inc.php b/inc/hook.inc.php new file mode 100644 index 00000000..bed81aeb --- /dev/null +++ b/inc/hook.inc.php @@ -0,0 +1,43 @@ +<?php + +/** + * Generic helper for getting and executing hooks. + */ +class Hook +{ + + /** + * Get list of all known and enabled modules for given hook. + * Internally, this scans for "modules/<*>/hooks/$hookName.inc.php" + * and optionally checks if the module's dependencies are fulfilled, + * then returns a list of all matching modules. + * @param string $hookName Name of hook to search for. + * @param bool $filterBroken if true, modules that have a hook but have missing deps will not be returned + * @return \Hook[] list of modules with requested hooks + */ + public static function load($hookName, $filterBroken = true) + { + $retval = array(); + foreach (glob('modules/*/hooks/' . $hookName . '.inc.php', GLOB_NOSORT) as $file) { + preg_match('#^modules/([^/]+)/#', $file, $out); + if ($filterBroken && !Module::isAvailable($out[1])) + continue; + $retval[] = new Hook($out[1], $file); + } + return $retval; + } + + /* + * + */ + + public $moduleId; + public $file; + + private function __construct($module, $hookFile) + { + $this->moduleId = $module; + $this->file = $hookFile; + } + +} |