summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2013-04-12 08:18:43 +0400
committerAndrew Dolgov <[email protected]>2013-04-12 08:18:43 +0400
commit79f9bef767ba0e0a35c8bf8411bb90feac35a551 (patch)
treec2a0fc927f6738ff27e26d8b08ea612ae9aad117
parent5e725f9c8cde3d283ff15bc7e2d75d69b0cfb193 (diff)
add support for plugins adding API methods
-rw-r--r--classes/api.php15
-rw-r--r--classes/pluginhost.php10
-rw-r--r--plugins/example_api/init.php31
3 files changed, 54 insertions, 2 deletions
diff --git a/classes/api.php b/classes/api.php
index aaeb86dcf..0fcd65eb3 100644
--- a/classes/api.php
+++ b/classes/api.php
@@ -464,8 +464,19 @@ class API extends Handler {
}
- function index() {
- print $this->wrap(self::STATUS_ERR, array("error" => 'UNKNOWN_METHOD'));
+ function index($method) {
+ global $pluginhost;
+
+ $plugin = $pluginhost->get_api_method(strtolower($method));
+
+ if ($plugin && method_exists($plugin, $method)) {
+ $reply = $plugin->$method();
+
+ print $this->wrap($reply[0], $reply[1]);
+
+ } else {
+ print $this->wrap(self::STATUS_ERR, array("error" => 'UNKNOWN_METHOD', "method" => $method));
+ }
}
function shareToPublished() {
diff --git a/classes/pluginhost.php b/classes/pluginhost.php
index 9ae7b809e..7c6fab9a0 100644
--- a/classes/pluginhost.php
+++ b/classes/pluginhost.php
@@ -7,6 +7,7 @@ class PluginHost {
private $commands = array();
private $storage = array();
private $feeds = array();
+ private $api_methods = array();
private $owner_uid;
private $debug;
@@ -347,5 +348,14 @@ class PluginHost {
return PLUGIN_FEED_BASE_INDEX - 1 + abs($feed);
}
+ function add_api_method($name, $sender) {
+ if ($this->is_system($sender)) {
+ $this->api_methods[strtolower($name)] = $sender;
+ }
+ }
+
+ function get_api_method($name) {
+ return $this->api_methods[$name];
+ }
}
?>
diff --git a/plugins/example_api/init.php b/plugins/example_api/init.php
new file mode 100644
index 000000000..a5f34b865
--- /dev/null
+++ b/plugins/example_api/init.php
@@ -0,0 +1,31 @@
+<?php
+class Example_Api extends Plugin {
+
+ // Demonstrates adding a method to the API
+ // Plugin methods return an array containint
+ // 1. status (STATUS_OK or STATUS_ERR)
+ // 2. arbitrary payload
+
+ private $link;
+ private $host;
+
+ function about() {
+ return array(1.0,
+ "Example plugin adding an API method",
+ "fox",
+ true,
+ "http://tt-rss.org/");
+ }
+
+ function init($host) {
+ $this->link = $host->get_link();
+ $this->host = $host;
+
+ $host->add_api_method("example_testmethod", $this);
+ }
+
+ function example_testmethod() {
+ return array(API::STATUS_OK, array("current_time" => time()));
+ }
+}
+?>