diff options
Diffstat (limited to 'engine/classes/ODDDocument.php')
| -rw-r--r-- | engine/classes/ODDDocument.php | 202 | 
1 files changed, 202 insertions, 0 deletions
| diff --git a/engine/classes/ODDDocument.php b/engine/classes/ODDDocument.php new file mode 100644 index 000000000..540c35a3b --- /dev/null +++ b/engine/classes/ODDDocument.php @@ -0,0 +1,202 @@ +<?php +/** + * This class is used during import and export to construct. + * + * @package    Elgg.Core + * @subpackage ODD + */ +class ODDDocument implements Iterator { +	/** +	 * ODD Version +	 * +	 * @var string +	 */ +	private $ODDSupportedVersion = "1.0"; + +	/** +	 * Elements of the document. +	 */ +	private $elements; + +	/** +	 * Optional wrapper factory. +	 */ +	private $wrapperfactory; + +	/** +	 * Create a new ODD Document. +	 * +	 * @param array $elements Elements to add +	 * +	 * @return void +	 */ +	public function __construct(array $elements = NULL) { +		if ($elements) { +			if (is_array($elements)) { +				$this->elements = $elements; +			} else { +				$this->addElement($elements); +			} +		} else { +			$this->elements = array(); +		} +	} + +	/** +	 * Return the version of ODD being used. +	 * +	 * @return string +	 */ +	public function getVersion() { +		return $this->ODDSupportedVersion; +	} + +	/** +	 * Returns the number of elements +	 * +	 * @return int +	 */ +	public function getNumElements() { +		return count($this->elements); +	} + +	/** +	 * Add an element +	 * +	 * @param ODD $element An ODD element +	 * +	 * @return void +	 */ +	public function addElement(ODD $element) { +		if (!is_array($this->elements)) { +			$this->elements = array(); +		} +		$this->elements[] = $element; +	} + +	/** +	 * Add multiple elements at once +	 * +	 * @param array $elements Array of ODD elements +	 * +	 * @return void +	 */ +	public function addElements(array $elements) { +		foreach ($elements as $element) { +			$this->addElement($element); +		} +	} + +	/** +	 * Return all elements +	 * +	 * @return array +	 */ +	public function getElements() { +		return $this->elements; +	} + +	/** +	 * Set an optional wrapper factory to optionally embed the ODD document in another format. +	 * +	 * @param ODDWrapperFactory $factory The factory +	 * +	 * @return void +	 */ +	public function setWrapperFactory(ODDWrapperFactory $factory) { +		$this->wrapperfactory = $factory; +	} + +	/** +	 * Magic function to generate valid ODD XML for this item. +	 * +	 * @return string +	 */ +	public function __toString() { +		$xml = ""; + +		if ($this->wrapperfactory) { +			// A wrapper has been provided +			$wrapper = $this->wrapperfactory->getElementWrapper($this); // Get the wrapper for this element + +			$xml = $wrapper->wrap($this); // Wrap this element (and subelements) +		} else { +			// Output begin tag +			$generated = date("r"); +			$xml .= "<odd version=\"{$this->ODDSupportedVersion}\" generated=\"$generated\">\n"; + +			// Get XML for elements +			foreach ($this->elements as $element) { +				$xml .= "$element"; +			} + +			// Output end tag +			$xml .= "</odd>\n"; +		} + +		return $xml; +	} + +	// ITERATOR INTERFACE ////////////////////////////////////////////////////////////// +	/* +	 * This lets an entity's attributes be displayed using foreach as a normal array. +	 * Example: http://www.sitepoint.com/print/php5-standard-library +	 */ + +	private $valid = FALSE; + +	/** +	 * Iterator interface +	 * +	 * @see Iterator::rewind() +	 * +	 * @return void +	 */ +	function rewind() { +		$this->valid = (FALSE !== reset($this->elements)); +	} + +	/** +	 * Iterator interface +	 * +	 * @see Iterator::current() +	 * +	 * @return void +	 */ +	function current() { +		return current($this->elements); +	} + +	/** +	 * Iterator interface +	 * +	 * @see Iterator::key() +	 * +	 * @return void +	 */ +	function key() { +		return key($this->elements); +	} + +	/** +	 * Iterator interface +	 * +	 * @see Iterator::next() +	 * +	 * @return void +	 */ +	function next() { +		$this->valid = (FALSE !== next($this->elements)); +	} + +	/** +	 * Iterator interface +	 * +	 * @see Iterator::valid() +	 * +	 * @return void +	 */ +	function valid() { +		return $this->valid; +	} +} | 
