diff options
Diffstat (limited to 'engine/classes/ElggPluginManifestParser18.php')
| -rw-r--r-- | engine/classes/ElggPluginManifestParser18.php | 97 | 
1 files changed, 97 insertions, 0 deletions
| diff --git a/engine/classes/ElggPluginManifestParser18.php b/engine/classes/ElggPluginManifestParser18.php new file mode 100644 index 000000000..3b753f17b --- /dev/null +++ b/engine/classes/ElggPluginManifestParser18.php @@ -0,0 +1,97 @@ +<?php +/** + * Plugin manifest.xml parser for Elgg 1.8 and above. + * + * @package    Elgg.Core + * @subpackage Plugins + * @since      1.8 + */ +class ElggPluginManifestParser18 extends ElggPluginManifestParser { +	/** +	 * The valid top level attributes and defaults for a 1.8 manifest array. +	 * +	 * @var array +	 */ +	protected $validAttributes = array( +		'name', 'author', 'version', 'blurb', 'description','website', +		'repository', 'bugtracker', 'donations', 'copyright', 'license', +		'requires', 'suggests', 'conflicts', 'provides', +		'screenshot', 'category', 'activate_on_install' +	); + +	/** +	 * Required attributes for a valid 1.8 manifest +	 * +	 * @var array +	 */ +	protected $requiredAttributes = array( +		'name', 'author', 'version', 'description', 'requires' +	); + +	/** +	 * Parse a manifest object from 1.8 and later +	 * +	 * @return void +	 */ +	public function parse() { +		$parsed = array(); +		foreach ($this->manifestObject->children as $element) { +			switch ($element->name) { +				// single elements +				case 'blurb': +				case 'description': +				case 'name': +				case 'author': +				case 'version': +				case 'website': +				case 'copyright': +				case 'license': +				case 'repository': +				case 'bugtracker': +				case 'donations': +				case 'activate_on_install': +					$parsed[$element->name] = $element->content; +					break; + +				// arrays +				case 'category': +					$parsed[$element->name][] = $element->content; +					break; + +				// 3d arrays +				case 'screenshot': +				case 'provides': +				case 'conflicts': +				case 'requires': +				case 'suggests': +					if (!isset($element->children)) { +						return false; +					} + +					$info = array(); +					foreach ($element->children as $child_element) { +						$info[$child_element->name] = $child_element->content; +					} + +					$parsed[$element->name][] = $info; +					break; +			} +		} + +		// check we have all the required fields +		foreach ($this->requiredAttributes as $attr) { +			if (!array_key_exists($attr, $parsed)) { +				throw new PluginException(elgg_echo('PluginException:ParserErrorMissingRequiredAttribute', +							array($attr, $this->caller->getPluginID()))); +			} +		} + +		$this->manifest = $parsed; + +		if (!$this->manifest) { +			return false; +		} + +		return true; +	} +} | 
