From d2a421e3cbaa782748840fc19afad4ac65f044b8 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 25 Dec 2012 10:02:08 +0400 Subject: more work on user-selectable plugins; properly process system and user plugins --- classes/plugin.php | 15 ++++++++++++++- classes/pluginhost.php | 42 +++++++++++++++++++++++++++++------------- classes/pref/prefs.php | 6 +++--- 3 files changed, 46 insertions(+), 17 deletions(-) (limited to 'classes') 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]) { -- cgit v1.2.3