Skip to content
Snippets Groups Projects
Commit 79f9bef7 authored by Andrew Dolgov's avatar Andrew Dolgov
Browse files

add support for plugins adding API methods

parent 5e725f9c
No related branches found
No related tags found
No related merge requests found
......@@ -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() {
......
......@@ -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];
}
}
?>
<?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()));
}
}
?>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment