diff options
| -rw-r--r-- | engine/lib/plugins.php | 62 | 
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;  | 
