summaryrefslogtreecommitdiff
path: root/classes/pluginhost.php
diff options
context:
space:
mode:
Diffstat (limited to 'classes/pluginhost.php')
-rw-r--r--classes/pluginhost.php71
1 files changed, 71 insertions, 0 deletions
diff --git a/classes/pluginhost.php b/classes/pluginhost.php
new file mode 100644
index 000000000..4274ec37b
--- /dev/null
+++ b/classes/pluginhost.php
@@ -0,0 +1,71 @@
+<?php
+class PluginHost {
+ private $link;
+ private $hooks = array();
+ private $plugins = array();
+
+ const HOOK_ARTICLE_BUTTON = 1;
+ const HOOK_ARTICLE_FILTER = 2;
+
+ function __construct($link) {
+ $this->link = $link;
+ }
+
+ private function register_plugin($name, $plugin) {
+ //array_push($this->plugins, $plugin);
+ $this->plugins[$name] = $plugin;
+ }
+
+ function get_link() {
+ return $this->link;
+ }
+
+ function get_plugins() {
+ return $this->plugins;
+ }
+
+ function get_plugin($name) {
+ return $this->plugins[$name];
+ }
+
+ function add_hook($type, $sender) {
+ if (!is_array($this->hooks[$type])) {
+ $this->hooks[$type] = array();
+ }
+
+ array_push($this->hooks[$type], $sender);
+ }
+
+ function del_hook($type, $sender) {
+ if (is_array($this->hooks[$type])) {
+ $key = array_Search($this->hooks[$type], $sender);
+ if ($key !== FALSE) {
+ unset($this->hooks[$type][$key]);
+ }
+ }
+ }
+
+ function get_hooks($type) {
+ return $this->hooks[$type];
+ }
+
+ function load($classlist) {
+ $plugins = explode(",", $classlist);
+
+ foreach ($plugins as $class) {
+ $class = trim($class);
+ $class_file = str_replace("_", "/", strtolower(basename($class)));
+ $file = dirname(__FILE__)."/../plugins/$class_file/$class_file.php";
+
+ if (file_exists($file)) require_once $file;
+
+ if (class_exists($class)) {
+ $plugin = new $class($this);
+
+ $this->register_plugin($class, $plugin);
+ }
+ }
+ }
+
+}
+?>