]> git.wh0rd.org Git - tt-rss.git/blob - classes/pluginhost.php
add HOOK_UPDATE_TASK
[tt-rss.git] / classes / pluginhost.php
1 <?php
2 class PluginHost {
3         private $link;
4         private $hooks = array();
5         private $plugins = array();
6         private $handlers = array();
7         private $commands = array();
8
9         const HOOK_ARTICLE_BUTTON = 1;
10         const HOOK_ARTICLE_FILTER = 2;
11         const HOOK_PREFS_TAB = 3;
12         const HOOK_PREFS_SECTION = 4;
13         const HOOK_PREFS_TABS = 5;
14         const HOOK_FEED_PARSED = 6;
15         const HOOK_UPDATE_TASK = 7;
16
17         function __construct($link) {
18                 $this->link = $link;
19         }
20
21         private function register_plugin($name, $plugin) {
22                 //array_push($this->plugins, $plugin);
23                 $this->plugins[$name] = $plugin;
24         }
25
26         function get_link() {
27                 return $this->link;
28         }
29
30         function get_plugins() {
31                 return $this->plugins;
32         }
33
34         function get_plugin($name) {
35                 return $this->plugins[$name];
36         }
37
38         function run_hooks($type, $method, $args) {
39                 foreach ($this->get_hooks($type) as $hook) {
40                         $hook->$method($args);
41                 }
42         }
43
44         function add_hook($type, $sender) {
45                 if (!is_array($this->hooks[$type])) {
46                         $this->hooks[$type] = array();
47                 }
48
49                 array_push($this->hooks[$type], $sender);
50         }
51
52         function del_hook($type, $sender) {
53                 if (is_array($this->hooks[$type])) {
54                         $key = array_Search($this->hooks[$type], $sender);
55                         if ($key !== FALSE) {
56                                 unset($this->hooks[$type][$key]);
57                         }
58                 }
59         }
60
61         function get_hooks($type) {
62                 if (isset($this->hooks[$type])) {
63                         return $this->hooks[$type];
64                 } else {
65                         return array();
66                 }
67         }
68
69         function load($classlist) {
70                 $plugins = explode(",", $classlist);
71
72                 foreach ($plugins as $class) {
73                         $class = trim($class);
74                         $class_file = strtolower(basename($class));
75                         $file = dirname(__FILE__)."/../plugins/$class_file/$class_file.php";
76
77                         if (file_exists($file)) require_once $file;
78
79                         if (class_exists($class) && is_subclass_of($class, "Plugin")) {
80                                 $plugin = new $class($this);
81
82                                 $this->register_plugin($class, $plugin);
83                         }
84                 }
85         }
86
87         function add_handler($handler, $method, $sender) {
88                 $handler = str_replace("-", "_", strtolower($handler));
89                 $method = strtolower($method);
90
91                 if (!is_array($this->handlers[$handler])) {
92                         $this->handlers[$handler] = array();
93                 }
94
95                 $this->handlers[$handler][$method] = $sender;
96         }
97
98         function del_handler($handler, $method) {
99                 $handler = str_replace("-", "_", strtolower($handler));
100                 $method = strtolower($method);
101
102                 unset($this->handlers[$handler][$method]);
103         }
104
105         function lookup_handler($handler, $method) {
106                 $handler = str_replace("-", "_", strtolower($handler));
107                 $method = strtolower($method);
108
109                 if (is_array($this->handlers[$handler])) {
110                         if (isset($this->handlers[$handler]["*"])) {
111                                 return $this->handlers[$handler]["*"];
112                         } else {
113                                 return $this->handlers[$handler][$method];
114                         }
115                 }
116
117                 return false;
118         }
119
120         function add_command($command, $description, $sender) {
121                 $command = "-" . str_replace("-", "_", strtolower($command));
122
123                 $this->commands[$command] = array("description" => $description,
124                         "class" => $sender);
125         }
126
127         function del_command($command) {
128                 $command = "-" . strtolower($command);
129
130                 unset($this->commands[$command]);
131         }
132
133         function lookup_command($command) {
134                 $command = "-" . strtolower($command);
135
136                 if (is_array($this->commands[$command])) {
137                         return $this->commands[$command]["class"];
138                 } else {
139                         return false;
140                 }
141
142                 return false;
143         }
144
145         function get_commands() {
146                 return $this->commands;
147         }
148
149         function run_commands($args) {
150                 foreach ($this->get_commands() as $command => $data) {
151                         if (in_array($command, $args)) {
152                                 $command = str_replace("-", "", $command);
153                                 $data["class"]->$command($args);
154                         }
155                 }
156         }
157
158 }
159 ?>