summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-12-23 23:05:51 +0400
committerAndrew Dolgov <[email protected]>2012-12-23 23:05:51 +0400
commit8dcb2b47628346226b18940b5cde7849f7a24687 (patch)
treeca3ee70e34095455614f4c2c7f9d69ce9f1ed27c /classes
parent5cedb389d24861a94c1183d1562900dbe59ee3fb (diff)
implement plugin routing masks, add example plugin
Diffstat (limited to 'classes')
-rw-r--r--classes/handler.php2
-rw-r--r--classes/ihandler.php7
-rw-r--r--classes/pluginhost.php31
3 files changed, 38 insertions, 2 deletions
diff --git a/classes/handler.php b/classes/handler.php
index e00b36aa3..68b16eac1 100644
--- a/classes/handler.php
+++ b/classes/handler.php
@@ -1,5 +1,5 @@
<?php
-class Handler {
+class Handler implements IHandler {
protected $link;
protected $args;
diff --git a/classes/ihandler.php b/classes/ihandler.php
new file mode 100644
index 000000000..e3c8a535f
--- /dev/null
+++ b/classes/ihandler.php
@@ -0,0 +1,7 @@
+<?php
+interface IHandler {
+ function csrf_ignore($method);
+ function before($method);
+ function after();
+}
+?>
diff --git a/classes/pluginhost.php b/classes/pluginhost.php
index d7926fa4e..b28d2511d 100644
--- a/classes/pluginhost.php
+++ b/classes/pluginhost.php
@@ -3,6 +3,7 @@ class PluginHost {
private $link;
private $hooks = array();
private $plugins = array();
+ private $handlers = array();
const HOOK_ARTICLE_BUTTON = 1;
const HOOK_ARTICLE_FILTER = 2;
@@ -62,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;
@@ -75,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;
+ }
}
?>