diff options
Diffstat (limited to 'engine/classes/ElggPluginManifestParser17.php')
| -rw-r--r-- | engine/classes/ElggPluginManifestParser17.php | 82 | 
1 files changed, 82 insertions, 0 deletions
| diff --git a/engine/classes/ElggPluginManifestParser17.php b/engine/classes/ElggPluginManifestParser17.php new file mode 100644 index 000000000..5658ee804 --- /dev/null +++ b/engine/classes/ElggPluginManifestParser17.php @@ -0,0 +1,82 @@ +<?php +/** + * Plugin manifest.xml parser for Elgg 1.7 and lower. + * + * @package    Elgg.Core + * @subpackage Plugins + * @since      1.8 + */ +class ElggPluginManifestParser17 extends ElggPluginManifestParser { +	/** +	 * The valid top level attributes and defaults for a 1.7 manifest +	 */ +	protected $validAttributes = array( +		'author', 'version', 'description', 'website', +		'copyright', 'license', 'licence', 'elgg_version', + +		// were never really used and not enforced in code. +		'requires', 'recommends', 'conflicts', + +		// not a 1.7 field, but we need it +		'name', +	); + +	/** +	 * Parse a manifest object from 1.7 or earlier. +	 * +	 * @return void +	 */ +	public function parse() { +		if (!isset($this->manifestObject->children)) { +			return false; +		} + +		$elements = array(); + +		foreach ($this->manifestObject->children as $element) { +			$key = $element->attributes['key']; +			$value = $element->attributes['value']; + +			// create arrays if multiple fields are set +			if (array_key_exists($key, $elements)) { +				if (!is_array($elements[$key])) { +					$orig = $elements[$key]; +					$elements[$key] = array($orig); +				} + +				$elements[$key][] = $value; +			} else { +				$elements[$key] = $value; +			} +		} + +		if ($elements && !array_key_exists('name', $elements)) { +			$elements['name'] = $this->caller->getName(); +		} + +		$this->manifest = $elements; + +		if (!$this->manifest) { +			return false; +		} + +		return true; +	} + +	/** +	 * Return an attribute in the manifest. +	 * +	 * Overrides ElggPluginManifestParser::getAttribute() because before 1.8 +	 * there were no rules...weeeeeeeee! +	 * +	 * @param string $name Attribute name +	 * @return mixed +	 */ +	public function getAttribute($name) { +		if (isset($this->manifest[$name])) { +			return $this->manifest[$name]; +		} + +		return false; +	} +} | 
