diff options
Diffstat (limited to 'engine/classes')
| -rw-r--r-- | engine/classes/ElggPlugin.php | 74 | ||||
| -rw-r--r-- | engine/classes/ElggPluginPackage.php | 4 | 
2 files changed, 53 insertions, 25 deletions
diff --git a/engine/classes/ElggPlugin.php b/engine/classes/ElggPlugin.php index 20a8673de..eb911455a 100644 --- a/engine/classes/ElggPlugin.php +++ b/engine/classes/ElggPlugin.php @@ -9,8 +9,8 @@   * @subpackage Plugins.Settings   */  class ElggPlugin extends ElggObject { -	public $package; -	public $manifest; +	private $package; +	private $manifest;  	private $path;  	private $pluginID; @@ -76,18 +76,6 @@ class ElggPlugin extends ElggObject {  			// load the rest of the plugin  			parent::__construct($existing_guid);  		} - -		// We have to let the entity load so we can manipulate it with the API. -		// If the path is wrong or would cause an exception, catch it, -		// disable the plugin, and emit an error. -		try { -			$this->package = new ElggPluginPackage($this->path, false); -			$this->manifest = $this->package->getManifest(); -		} catch (Exception $e) { -			// we always have to allow the entity to load. -			elgg_log("Failed to load $this->guid as a plugin. " . $e->getMessage(), 'WARNING'); -			$this->errorMsg = $e->getmessage(); -		}  	}  	/** @@ -152,7 +140,7 @@ class ElggPlugin extends ElggObject {  	 * @return array  	 */  	public function getAvailableTextFiles() { -		$filenames = $this->package->getTextFilenames(); +		$filenames = $this->getPackage()->getTextFilenames();  		$files = array();  		foreach ($filenames as $filename) { @@ -562,13 +550,13 @@ class ElggPlugin extends ElggObject {  			return false;  		} -		if (!$this->package instanceof ElggPluginPackage) { +		if (!$this->getPackage() instanceof ElggPluginPackage) {  			$this->errorMsg = elgg_echo('ElggPlugin:NoPluginPackagePackage', array($this->getID(), $this->guid));  			return false;  		} -		if (!$this->package->isValid()) { -			$this->errorMsg = $this->package->getError(); +		if (!$this->getPackage()->isValid()) { +			$this->errorMsg = $this->getPackage()->getError();  			return false;  		} @@ -607,8 +595,8 @@ class ElggPlugin extends ElggObject {  	 * @return bool  	 */  	public function canActivate($site_guid = null) { -		if ($this->package) { -			return $this->package->isValid() && $this->package->checkDependencies(); +		if ($this->getPackage()) { +			return $this->getPackage()->isValid() && $this->getPackage()->checkDependencies();  		}  		return false; @@ -708,9 +696,9 @@ class ElggPlugin extends ElggObject {  	 * @throws PluginException  	 */  	public function start($flags) { -		if (!$this->canActivate()) { -			return false; -		} +//		if (!$this->canActivate()) { +//			return false; +//		}  		// include start file  		if ($flags & ELGG_PLUGIN_INCLUDE_START) { @@ -958,4 +946,44 @@ class ElggPlugin extends ElggObject {  	public function getError() {  		return $this->errorMsg;  	} + +	/** +	 * Returns this plugin's ElggPluginManifest object +	 * +	 * @return ElggPluginManifest +	 */ +	public function getManifest() { +		if ($this->manifest instanceof ElggPluginManifest) { +			return $this->manifest; +		} + +		try { +			$this->manifest = $this->getPackage()->getManifest(); +		} catch (Exception $e) { +			elgg_log("Failed to load manifest for plugin $this->guid. " . $e->getMessage(), 'WARNING'); +			$this->errorMsg = $e->getmessage(); +		} + +		return $this->manifest; +	} + +	/** +	 * Returns this plugin's ElggPluginPackage object +	 * +	 * @return ElggPluginPackage +	 */ +	public function getPackage() { +		if ($this->package instanceof ElggPluginPackage) { +			return $this->package; +		} + +		try { +			$this->package = new ElggPluginPackage($this->path, false); +		} catch (Exception $e) { +			elgg_log("Failed to load package for $this->guid. " . $e->getMessage(), 'WARNING'); +			$this->errorMsg = $e->getmessage(); +		} + +		return $this->package; +	}  } diff --git a/engine/classes/ElggPluginPackage.php b/engine/classes/ElggPluginPackage.php index 4daab381e..bad99362f 100644 --- a/engine/classes/ElggPluginPackage.php +++ b/engine/classes/ElggPluginPackage.php @@ -334,13 +334,13 @@ class ElggPluginPackage {  		// first, check if any active plugin conflicts with us.  		foreach ($enabled_plugins as $plugin) { -			$temp_conflicts = $plugin->manifest->getConflicts(); +			$temp_conflicts = $plugin->getManifest()->getConflicts();  			foreach ($temp_conflicts as $conflict) {  				if ($conflict['type'] == 'plugin' && $conflict['name'] == $this_id) {  					$result = $this->checkDepPlugin($conflict, $enabled_plugins, false);  					// rewrite the conflict to show the originating plugin -					$conflict['name'] = $plugin->manifest->getName(); +					$conflict['name'] = $plugin->getManifest()->getName();  					if (!$full_report && !$result['status']) {  						return $result['status'];  | 
