summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-12-25 10:02:08 +0400
committerAndrew Dolgov <[email protected]>2012-12-25 10:02:08 +0400
commitd2a421e3cbaa782748840fc19afad4ac65f044b8 (patch)
treefed3583a4f855c5c0c7c7a9d6c3f8effc94932d6 /classes
parentde612e7a3850d3053c7038e94098c0681d46983b (diff)
more work on user-selectable plugins; properly process system and user plugins
Diffstat (limited to 'classes')
-rw-r--r--classes/plugin.php15
-rw-r--r--classes/pluginhost.php42
-rw-r--r--classes/pref/prefs.php6
3 files changed, 46 insertions, 17 deletions
diff --git a/classes/plugin.php b/classes/plugin.php
index 59cb64f53..e655a2062 100644
--- a/classes/plugin.php
+++ b/classes/plugin.php
@@ -3,9 +3,22 @@ class Plugin {
private $link;
private $host;
- function __construct($host) {
+ function init($host) {
$this->link = $host->get_link();
$this->host = $host;
}
+
+ function about() {
+ // version, name, description, author, is_system
+ return array(1.0, "plugin", "No description", "No author", false);
+ }
+
+ function get_js() {
+ return "";
+ }
+
+ function get_prefs_js() {
+ return "";
+ }
}
?>
diff --git a/classes/pluginhost.php b/classes/pluginhost.php
index d8df6db49..ee56886f4 100644
--- a/classes/pluginhost.php
+++ b/classes/pluginhost.php
@@ -14,6 +14,10 @@ class PluginHost {
const HOOK_FEED_PARSED = 6;
const HOOK_UPDATE_TASK = 7;
+ const KIND_ALL = 1;
+ const KIND_SYSTEM = 2;
+ const KIND_USER = 3;
+
function __construct($link) {
$this->link = $link;
}
@@ -65,12 +69,12 @@ class PluginHost {
return array();
}
}
- function load_all() {
+ function load_all($kind) {
$plugins = array_map("basename", glob("plugins/*"));
- $this->load(join(",", $plugins));
+ $this->load(join(",", $plugins), $kind);
}
- function load($classlist) {
+ function load($classlist, $kind) {
$plugins = explode(",", $classlist);
foreach ($plugins as $class) {
@@ -84,14 +88,31 @@ class PluginHost {
if (class_exists($class) && is_subclass_of($class, "Plugin")) {
$plugin = new $class($this);
- $this->register_plugin($class, $plugin);
+ switch ($kind) {
+ case $this::KIND_SYSTEM:
+ if ($this->is_system($plugin)) {
+ $plugin->init($this);
+ $this->register_plugin($class, $plugin);
+ }
+ break;
+ case $this::KIND_USER:
+ if (!$this->is_system($plugin)) {
+ $plugin->init($this);
+ $this->register_plugin($class, $plugin);
+ }
+ break;
+ case $this::KIND_ALL:
+ $plugin->init($this);
+ $this->register_plugin($class, $plugin);
+ break;
+ }
}
}
}
}
function is_system($plugin) {
- $about = $plugin->_about();
+ $about = $plugin->about();
return @$about[3];
}
@@ -134,22 +155,17 @@ class PluginHost {
return false;
}
- // only system plugins are allowed to modify commands
function add_command($command, $description, $sender) {
$command = "-" . str_replace("-", "_", strtolower($command));
- if ($this->is_system($sender)) {
- $this->commands[$command] = array("description" => $description,
- "class" => $sender);
- }
+ $this->commands[$command] = array("description" => $description,
+ "class" => $sender);
}
function del_command($command) {
$command = "-" . strtolower($command);
- if ($this->is_system($sender)) {
- unset($this->commands[$command]);
- }
+ unset($this->commands[$command]);
}
function lookup_command($command) {
diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php
index bb1b44ece..ce17af278 100644
--- a/classes/pref/prefs.php
+++ b/classes/pref/prefs.php
@@ -670,10 +670,10 @@ class Pref_Prefs extends Handler_Protected {
$user_enabled = array_map("trim", explode(",", get_pref($this->link, "_ENABLED_PLUGINS")));
$tmppluginhost = new PluginHost($link);
- $tmppluginhost->load_all();
+ $tmppluginhost->load_all($tmppluginhost::KIND_ALL);
foreach ($tmppluginhost->get_plugins() as $name => $plugin) {
- $about = $plugin->_about();
+ $about = $plugin->about();
if ($about[3]) {
if (in_array($name, $system_enabled)) {
@@ -709,7 +709,7 @@ class Pref_Prefs extends Handler_Protected {
foreach ($tmppluginhost->get_plugins() as $name => $plugin) {
- $about = $plugin->_about();
+ $about = $plugin->about();
if (!$about[3]) {