summaryrefslogtreecommitdiffstats
path: root/inc/hook.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'inc/hook.inc.php')
-rw-r--r--inc/hook.inc.php43
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;
+ }
+
+}