aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>2008-06-20 09:45:55 +0000
committermarcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>2008-06-20 09:45:55 +0000
commit5e010074580898b22d5080cfc22f94869133657d (patch)
treef4b0002d9eb39a259dacb0252a62999306cd9cda
parentc25dcd4533ec98c7e58c647e4b2c08169c6b7dc4 (diff)
downloadelgg-5e010074580898b22d5080cfc22f94869133657d.tar.gz
elgg-5e010074580898b22d5080cfc22f94869133657d.tar.bz2
Closes #61: Enable plugins to store site specific configurations
git-svn-id: https://code.elgg.org/elgg/trunk@1012 36083f99-b078-4883-b0ff-0f9b5a30f544
-rw-r--r--engine/lib/plugins.php186
1 files changed, 149 insertions, 37 deletions
diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php
index b3c5169a3..46b42f929 100644
--- a/engine/lib/plugins.php
+++ b/engine/lib/plugins.php
@@ -1,25 +1,55 @@
<?php
- /**
- * Elgg plugins library
- * Contains functions for managing plugins
- *
- * @package Elgg
- * @subpackage Core
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008
- * @link http://elgg.org/
- */
+ /**
+ * Elgg plugins library
+ * Contains functions for managing plugins
+ *
+ * @package Elgg
+ * @subpackage Core
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd
+ * @copyright Curverider Ltd 2008
+ * @link http://elgg.org/
+ */
+
+ /**
+ * PluginException
+ *
+ * A plugin Exception, thrown when an Exception occurs relating to the plugin mechanism. Subclass for specific plugin Exceptions.
+ *
+ * @package Elgg
+ * @subpackage Exceptions
+ */
+ class PluginException extends Exception {}
+
+ /**
+ * @class ElggPlugin Object representing a plugin's settings for a given site.
+ * This class is currently a stub, allowing a plugin to saving settings in an object's metadata for each site.
+ * @author Marcus Povey
+ */
+ class ElggPlugin extends ElggObject
+ {
+ protected function initialise_attributes()
+ {
+ parent::initialise_attributes();
+
+ $this->attributes['subtype'] = "plugin";
+ }
+
+ public function __construct($guid = null)
+ {
+ parent::__construct($guid);
+ }
+ }
- /**
- * For now, loads plugins directly
- *
- * @todo Add proper plugin handler that launches plugins in an admin-defined order and activates them on admin request
- * @package Elgg
- * @subpackage Core
- */
+ /**
+ * For now, loads plugins directly
+ *
+ * @todo Add proper plugin handler that launches plugins in an admin-defined order and activates them on admin request
+ * @package Elgg
+ * @subpackage Core
+ */
function load_plugins() {
global $CONFIG;
@@ -44,14 +74,14 @@
}
- /**
- * Get the name of the most recent plugin to be called in the call stack (or the plugin that owns the current page, if any).
- *
- * i.e., if the last plugin was in /mod/foobar/, get_plugin_name would return foo_bar.
- *
- * @param boolean $mainfilename If set to true, this will instead determine the context from the main script filename called by the browser. Default = false.
- * @return string|false Plugin name, or false if no plugin name was called
- */
+ /**
+ * Get the name of the most recent plugin to be called in the call stack (or the plugin that owns the current page, if any).
+ *
+ * i.e., if the last plugin was in /mod/foobar/, get_plugin_name would return foo_bar.
+ *
+ * @param boolean $mainfilename If set to true, this will instead determine the context from the main script filename called by the browser. Default = false.
+ * @return string|false Plugin name, or false if no plugin name was called
+ */
function get_plugin_name($mainfilename = false) {
if (!$mainfilename) {
if ($backtrace = debug_backtrace()) {
@@ -120,16 +150,98 @@
'website' => $website,
'copyright' => $copyright
));
- }
- /**
- * PluginException
- *
- * A plugin Exception, thrown when an Exception occurs relating to the plugin mechanism. Subclass for specific plugin Exceptions.
- *
- * @package Elgg
- * @subpackage Exceptions
- */
+ }
+
+ /**
+ * Shorthand function for finding the plugin settings.
+ */
+ function find_plugin_settings()
+ {
+ $plugins = get_entities('object', 'plugin');
+ $plugin_name = get_plugin_name();
+
+ if ($plugins)
+ {
+ foreach ($plugins as $plugins)
+ if (strcmp($plugin->title, $plugin_name)==0)
+ return $plugin;
+ }
+
+ return false;
+ }
+
+ /**
+ * Set a setting for a plugin.
+ *
+ * @param string $name The name - note, can't be "title".
+ * @param mixed $value The value.
+ */
+ function set_plugin_setting($name, $value)
+ {
+ $plugin = find_plugin_settings();
+
+ if (!$plugin)
+ $plugin = new ElggPlugin();
+
+ if ($name!='title')
+ {
+ $plugin->$name = $value;
+
+ $plugin->save();
+ }
+
+ return false;
+ }
+
+ /**
+ * Get setting for a plugin.
+ *
+ * @param string $name The name.
+ */
+ function get_plugin_setting($name)
+ {
+ $plugin = find_plugin_settings();
+
+ if ($plugin)
+ return $plugin->$name;
+
+ return false;
+ }
+
+ /**
+ * Clear a plugin setting.
+ *
+ * @param string $name The name.
+ */
+ function clear_plugin_setting($name)
+ {
+ $plugin = find_plugin_settings();
+
+ if ($plugin)
+ return $plugin->clearMetaData($name);
+
+ return false;
+ }
- class PluginException extends Exception {}
-
+ /**
+ * Run once and only once.
+ */
+ function plugin_run_once()
+ {
+ // Register a class
+ add_subtype("object", "plugin", "ElggPlugin");
+ }
+
+ /**
+ * Initialise the file modules.
+ * Listens to system boot and registers any appropriate file types and classes
+ */
+ function plugin_init()
+ {
+ // Now run this stuff, but only once
+ run_function_once("plugin_run_once");
+ }
+
+ // Register a startup event
+ register_elgg_event_handler('init','system','plugin_init');
?> \ No newline at end of file