From 9b47cfa886a391296641dad6509f92c17fdc572d Mon Sep 17 00:00:00 2001 From: marcus Date: Fri, 20 Jun 2008 11:43:39 +0000 Subject: Closes #60: Enable/disable plugins on a site by site basis git-svn-id: https://code.elgg.org/elgg/trunk@1017 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/metadata.php | 2 +- engine/lib/plugins.php | 87 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) (limited to 'engine') diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php index d01ce0985..610288f90 100644 --- a/engine/lib/metadata.php +++ b/engine/lib/metadata.php @@ -399,7 +399,7 @@ if ($meta_value!="") $where[] = "m.value_id='$meta_v'"; if ($site_guid > 0) - $where[] = "e.site_guid = {$site_guid}"; + $where[] = "m.entity_guid = {$site_guid}"; $query = "SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where"; foreach ($where as $w) diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php index 0d19bc049..8ead863a1 100644 --- a/engine/lib/plugins.php +++ b/engine/lib/plugins.php @@ -230,6 +230,93 @@ return false; } + + /** + * Enable a plugin for a site (default current site) + * + * @param string $plugin The plugin name. + * @param int $site_guid The site id, if not specified then this is detected. + */ + function enable_plugin($plugin, $site_guid = 0) + { + global $CONFIG; + + $site_guid = (int) $site_guid; + if ($site_guid == 0) + $site_guid = $CONFIG->site_guid; + + $site = get_entity($site_guid); + if (!($site instanceof ElggSite)) + throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $site_guid, "ElggSite")); + + $enabled = $site->getMetaData('enabled_plugins'); + $new_enabled = array(); + if ($enabled) + { + if (!is_array($enabled)) + $new_enabled[] = $enabled; + else + $new_enabled = $enabled; + } + $new_enabled[] = $plugin; + $new_enabled = array_unique($new_enabled); + + return $site->setMetaData('enabled_plugins', $new_enabled); + } + + /** + * Disable a plugin for a site (default current site) + * + * @param string $plugin The plugin name. + * @param int $site_guid The site id, if not specified then this is detected. + */ + function disable_plugin($plugin, $site_guid = 0) + { + global $CONFIG; + + $site_guid = (int) $site_guid; + if ($site_guid == 0) + $site_guid = $CONFIG->site_guid; + + $site = get_entity($site_guid); + if (!($site instanceof ElggSite)) + throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $site_guid, "ElggSite")); + + $enabled = $site->getMetaData('enabled_plugins'); + $new_enabled = array(); + + foreach ($enabled as $plug) + if ($plugin != $plug) + $new_enabled[] = $plug; + + return $site->setMetaData('enabled_plugins', $new_enabled); + } + + /** + * Return whether a plugin is enabled or not. + * + * @param string $plugin The plugin name. + * @param int $site_guid The site id, if not specified then this is detected. + * @return bool + */ + function is_plugin_enabled($plugin, $site_guid = 0) + { + global $CONFIG; + + $site_guid = (int) $site_guid; + if ($site_guid == 0) + $site_guid = $CONFIG->site_guid; + + $site = get_entity($site_guid); + if (!($site instanceof ElggSite)) + throw new InvalidClassException(sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $site_guid, "ElggSite")); + + $enabled = find_metadata("enabled_plugins", $plugin, "site", "", 10, 0, "", $site_guid); + if ($enabled) + return true; + + return false; + } /** * Run once and only once. -- cgit v1.2.3