]> git.wh0rd.org - tt-rss.git/blobdiff - classes/pluginhost.php
implement plugin routing masks, add example plugin
[tt-rss.git] / classes / pluginhost.php
index f4e01178b5ebce2f04b4eedc95a68eca0e2fe520..b28d2511d7423c391d2d649e77fba41bce0a2295 100644 (file)
@@ -3,9 +3,12 @@ class PluginHost {
        private $link;
        private $hooks = array();
        private $plugins = array();
+       private $handlers = array();
 
        const HOOK_ARTICLE_BUTTON = 1;
        const HOOK_ARTICLE_FILTER = 2;
+       const HOOK_PREFS_TAB = 3;
+       const HOOK_PREFS_SECTION = 4;
 
        function __construct($link) {
                $this->link = $link;
@@ -28,6 +31,12 @@ class PluginHost {
                return $this->plugins[$name];
        }
 
+       function run_hooks($type, $method, $args) {
+               foreach ($this->get_hooks($type) as $hook) {
+                       $hook->$method($args);
+               }
+       }
+
        function add_hook($type, $sender) {
                if (!is_array($this->hooks[$type])) {
                        $this->hooks[$type] = array();
@@ -54,7 +63,7 @@ class PluginHost {
 
                foreach ($plugins as $class) {
                        $class = trim($class);
-                       $class_file = str_replace("_", "/", strtolower(basename($class)));
+                       $class_file = strtolower(basename($class));
                        $file = dirname(__FILE__)."/../plugins/$class_file/$class_file.php";
 
                        if (file_exists($file)) require_once $file;
@@ -67,5 +76,33 @@ class PluginHost {
                }
        }
 
+       function add_handler($handler, $method, $sender) {
+               $handler = strtolower($handler);
+               $method = strtolower($method);
+
+               if (!is_array($this->handlers[$handler])) {
+                       $this->handlers[$handler] = array();
+               }
+
+               $this->handlers[$handler][$method] = $sender;
+       }
+
+       function del_handler($handler, $method) {
+               $handler = strtolower($handler);
+               $method = strtolower($method);
+
+               unset($this->handlers[$handler][$method]);
+       }
+
+       function lookup_handler($handler, $method) {
+               $handler = strtolower($handler);
+               $method = strtolower($method);
+
+               if (is_array($this->handlers[$handler])) {
+                       return $this->handlers[$handler][$method];
+               }
+
+               return false;
+       }
 }
 ?>