aboutsummaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/lib/plugins.php62
1 files changed, 45 insertions, 17 deletions
diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php
index d5cd4fe76..127d4bf8e 100644
--- a/engine/lib/plugins.php
+++ b/engine/lib/plugins.php
@@ -107,6 +107,7 @@ function elgg_generate_plugin_entities() {
$old_access = access_get_show_hidden_status();
access_show_hidden_entities(true);
$known_plugins = elgg_get_entities_from_relationship($options);
+ _elgg_add_plugin_ids_mapping($known_plugins);
if (!$known_plugins) {
$known_plugins = array();
@@ -151,6 +152,7 @@ function elgg_generate_plugin_entities() {
// priority is force to last in save() if not set.
$plugin = new ElggPlugin($plugin_id);
$plugin->save();
+ _elgg_add_plugin_ids_mapping(array($plugin));
}
}
@@ -176,6 +178,25 @@ function elgg_generate_plugin_entities() {
}
/**
+ * Registers given plugins in plugin_id to entity mapping data structure
+ *
+ * @param array $plugins ElggPlugin instances to be registered
+ *
+ * @access private
+ */
+function _elgg_add_plugin_ids_mapping($plugins) {
+ global $CONFIG;
+ if (!is_array($CONFIG->plugin_ids_mapping)) {
+ $CONFIG->plugin_ids_mapping = array();
+ }
+ foreach ($plugins as $plugin) {
+ if ($plugin instanceof ElggPlugin) {
+ $CONFIG->plugin_ids_mapping[$plugin->getID()] = $plugin;
+ }
+ }
+}
+
+/**
* Returns an ElggPlugin object with the path $path.
*
* @param string $plugin_id The id (dir name) of the plugin. NOT the guid.
@@ -183,24 +204,30 @@ function elgg_generate_plugin_entities() {
* @since 1.8.0
*/
function elgg_get_plugin_from_id($plugin_id) {
- $plugin_id = sanitize_string($plugin_id);
- $db_prefix = get_config('dbprefix');
-
- $options = array(
- 'type' => 'object',
- 'subtype' => 'plugin',
- 'joins' => array("JOIN {$db_prefix}objects_entity oe on oe.guid = e.guid"),
- 'wheres' => array("oe.title = '$plugin_id'"),
- 'limit' => 1
- );
-
- $plugins = elgg_get_entities($options);
-
- if ($plugins) {
- return $plugins[0];
+ global $CONFIG;
+ if (isset($CONFIG->plugin_ids_mapping[$plugin_id])) {
+ return $CONFIG->plugin_ids_mapping[$plugin_id];
+ } else {
+ $plugin_id = sanitize_string($plugin_id);
+ $db_prefix = get_config('dbprefix');
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'plugin',
+ 'joins' => array("JOIN {$db_prefix}objects_entity oe on oe.guid = e.guid"),
+ 'wheres' => array("oe.title = '$plugin_id'"),
+ 'limit' => 1
+ );
+
+ $plugins = elgg_get_entities($options);
+
+ if ($plugins) {
+ _elgg_add_plugin_ids_mapping($plugins);
+ return $plugins[0];
+ }
+
+ return false;
}
-
- return false;
}
/**
@@ -390,6 +417,7 @@ function elgg_get_plugins($status = 'active', $site_guid = null) {
$old_ia = elgg_set_ignore_access(true);
$plugins = elgg_get_entities_from_relationship($options);
+ _elgg_add_plugin_ids_mapping($plugins);
elgg_set_ignore_access($old_ia);
return $plugins;