aboutsummaryrefslogtreecommitdiff
path: root/engine/lib/opendd.php
diff options
context:
space:
mode:
Diffstat (limited to 'engine/lib/opendd.php')
-rw-r--r--engine/lib/opendd.php691
1 files changed, 352 insertions, 339 deletions
diff --git a/engine/lib/opendd.php b/engine/lib/opendd.php
index 4917120fd..16d5b4671 100644
--- a/engine/lib/opendd.php
+++ b/engine/lib/opendd.php
@@ -1,372 +1,385 @@
<?php
+/**
+ * OpenDD PHP Library.
+ *
+ * @package Elgg
+ * @subpackage Core
+ * @author Curverider Ltd
+ * @version 0.4
+ * @link http://elgg.org/
+ */
+
+include_once("xml.php");
+
+/**
+ * @class ODDDocument ODD Document container.
+ * This class is used during import and export to construct.
+ * @author Curverider Ltd
+ */
+class ODDDocument implements Iterator {
/**
- * OpenDD PHP Library.
- *
- * @package Elgg
- * @subpackage Core
- * @author Curverider Ltd
- * @version 0.4
- * @link http://elgg.org/
+ * ODD Version
+ *
+ * @var string
*/
-
- include_once("xml.php");
-
+ private $ODDSupportedVersion = "1.0";
+
/**
- * @class ODDDocument ODD Document container.
- * This class is used during import and export to construct.
- * @author Curverider Ltd
+ * Elements of the document.
*/
- class ODDDocument implements Iterator
- {
- /**
- * ODD Version
- *
- * @var string
- */
- private $ODDSupportedVersion = "1.0";
-
- /**
- * Elements of the document.
- */
- private $elements;
-
- /**
- * Optional wrapper factory.
- */
- private $wrapperfactory;
-
- 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; }
-
- public function getNumElements() { return count($this->elements); }
-
- public function addElement(ODD $element) { if (!is_array($this->elements)) $this->elements = array(); $this->elements[] = $element; }
- public function addElements(array $elements)
- {
- foreach ($elements as $element)
- $this->addElement($element);
- }
-
- public function getElements() { return $this->elements; }
-
- /**
- * Set an optional wrapper factory to optionally embed the ODD document in another format.
- */
- public function setWrapperFactory(ODDWrapperFactory $factory) { $this->wrapperfactory = $factory; }
-
- /**
- * Magic function to generate valid ODD XML for this item.
- */
- 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";
+ private $elements;
+
+ /**
+ * Optional wrapper factory.
+ */
+ private $wrapperfactory;
+
+ public function __construct(array $elements = NULL) {
+ if ($elements) {
+ if (is_array($elements)) {
+ $this->elements = $elements;
+ } else {
+ $this->addElement($elements);
}
-
- return $xml;
+ } else {
+ $this->elements = array();
}
-
- // 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;
-
- function rewind()
- {
- $this->valid = (FALSE !== reset($this->elements));
- }
-
- function current()
- {
- return current($this->elements);
- }
-
- function key()
- {
- return key($this->elements);
- }
-
- function next()
- {
- $this->valid = (FALSE !== next($this->elements));
- }
-
- function valid()
- {
- return $this->valid;
- }
}
-
+
/**
- * Open Data Definition (ODD) superclass.
- * @package Elgg
- * @subpackage Core
- * @author Curverider Ltd
+ * Return the version of ODD being used.
+ *
+ * @return string
*/
- abstract class ODD
- {
- /**
- * Attributes.
- */
- private $attributes = array();
-
- /**
- * Optional body.
- */
- private $body;
-
- /**
- * Construct an ODD document with initial values.
- */
- public function __construct()
- {
- $this->body = "";
- }
-
- public function getAttributes() { return $this->attributes; }
- public function setAttribute($key, $value) { $this->attributes[$key] = $value; }
- public function getAttribute($key)
- {
- if (isset($this->attributes[$key]))
- return $this->attributes[$key];
-
- return NULL;
- }
- public function setBody($value) { $this->body = $value; }
- public function getBody() { return $this->body; }
-
- /**
- * Set the published time.
- *
- * @param int $time Unix timestamp
- */
- public function setPublished($time)
- {
- $this->attributes['published'] = date("r", $time);
+ public function getVersion() {
+ return $this->ODDSupportedVersion;
+ }
+
+ public function getNumElements() {
+ return count($this->elements);
+ }
+
+ public function addElement(ODD $element) {
+ if (!is_array($this->elements)) {
+ $this->elements = array();
+ $this->elements[] = $element;
}
-
- /**
- * Return the published time as a unix timestamp.
- *
- * @return int or false on failure.
- */
- public function getPublishedAsTime() { return strtotime($this->attributes['published']); }
-
- /**
- * For serialisation, implement to return a string name of the tag eg "header" or "metadata".
- * @return string
- */
- abstract protected function getTagName();
-
- /**
- * Magic function to generate valid ODD XML for this item.
- */
- public function __toString()
- {
- // Construct attributes
- $attr = "";
- foreach ($this->attributes as $k => $v)
- $attr .= ($v!="") ? "$k=\"$v\" " : "";
-
- $body = $this->getBody();
- $tag = $this->getTagName();
-
- $end = "/>";
- if ($body!="")
- $end = "><![CDATA[$body]]></{$tag}>";
-
- return "<{$tag} $attr" . $end . "\n";
+ }
+
+ public function addElements(array $elements) {
+ foreach ($elements as $element) {
+ $this->addElement($element);
}
-
}
-
+
+ public function getElements() {
+ return $this->elements;
+ }
+
/**
- * ODD Entity class.
- * @package Elgg
- * @subpackage Core
- * @author Curverider Ltd
+ * Set an optional wrapper factory to optionally embed the ODD document in another format.
*/
- class ODDEntity extends ODD
- {
- function __construct($uuid, $class, $subclass = "")
- {
- parent::__construct();
-
- $this->setAttribute('uuid', $uuid);
- $this->setAttribute('class', $class);
- $this->setAttribute('subclass', $subclass);
- }
-
- protected function getTagName() { return "entity"; }
+ public function setWrapperFactory(ODDWrapperFactory $factory) {
+ $this->wrapperfactory = $factory;
}
-
+
/**
- * ODD Metadata class.
- * @package Elgg
- * @subpackage Core
- * @author Curverider Ltd
+ * Magic function to generate valid ODD XML for this item.
*/
- class ODDMetaData extends ODD
- {
- function __construct($uuid, $entity_uuid, $name, $value, $type = "", $owner_uuid = "")
- {
- parent::__construct();
-
- $this->setAttribute('uuid', $uuid);
- $this->setAttribute('entity_uuid', $entity_uuid);
- $this->setAttribute('name', $name);
- $this->setAttribute('type', $type);
- $this->setAttribute('owner_uuid', $owner_uuid);
- $this->setBody($value);
+ 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";
}
-
- protected function getTagName() { return "metadata"; }
+
+ return $xml;
}
-
- /**
- * ODD Relationship class.
- * @package Elgg
- * @subpackage Core
- * @author Curverider Ltd
+
+ // 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
*/
- class ODDRelationship extends ODD
- {
- function __construct($uuid1, $type, $uuid2)
- {
- parent::__construct();
-
- $this->setAttribute('uuid1', $uuid1);
- $this->setAttribute('type', $type);
- $this->setAttribute('uuid2', $uuid2);
- }
-
- protected function getTagName() { return "relationship"; }
+
+ private $valid = FALSE;
+
+ function rewind() {
+ $this->valid = (FALSE !== reset($this->elements));
}
-
+
+ function current() {
+ return current($this->elements);
+ }
+
+ function key() {
+ return key($this->elements);
+ }
+
+ function next() {
+ $this->valid = (FALSE !== next($this->elements));
+ }
+
+ function valid() {
+ return $this->valid;
+ }
+}
+
+/**
+ * Open Data Definition (ODD) superclass.
+ * @package Elgg
+ * @subpackage Core
+ * @author Curverider Ltd
+ */
+abstract class ODD {
/**
- * Attempt to construct an ODD object out of a XmlElement or sub-elements.
- *
- * @param XmlElement $element The element(s)
- * @return mixed An ODD object if the element can be handled, or false.
+ * Attributes.
*/
- function ODD_factory(XmlElement $element)
- {
- $name = $element->name;
- $odd = false;
-
- switch ($name)
- {
- case 'entity' : $odd = new ODDEntity("","",""); break;
- case 'metadata' : $odd = new ODDMetaData("","","",""); break;
- case 'relationship' : $odd = new ODDRelationship("","",""); break;
- }
-
- // Now populate values
- if ($odd)
- {
- // Attributes
- foreach ($element->attributes as $k => $v)
- $odd->setAttribute($k,$v);
-
- // Body
- $body = $element->content;
- $a = stripos($body, "<![CDATA");
- $b = strripos($body, "]]>");
- if (($body) && ($a!==false) && ($b!==false))
- $body = substr($body, $a+8, $b-($a+8));
-
- $odd->setBody($body);
+ private $attributes = array();
+
+ /**
+ * Optional body.
+ */
+ private $body;
+
+ /**
+ * Construct an ODD document with initial values.
+ */
+ public function __construct() {
+ $this->body = "";
+ }
+
+ public function getAttributes() {
+ return $this->attributes;
+ }
+
+ public function setAttribute($key, $value) {
+ $this->attributes[$key] = $value;
+ }
+
+ public function getAttribute($key) {
+ if (isset($this->attributes[$key])) {
+ return $this->attributes[$key];
}
-
- return $odd;
+
+ return NULL;
+ }
+
+ public function setBody($value) {
+ $this->body = $value;
}
-
+
+ public function getBody() {
+ return $this->body;
+ }
+
/**
- * Import an ODD document.
- *
- * @param string $xml The XML ODD.
- * @return ODDDocument
+ * Set the published time.
+ *
+ * @param int $time Unix timestamp
*/
- function ODD_Import($xml)
- {
- // Parse XML to an array
- $elements = xml_2_object($xml);
-
- // Sanity check 1, was this actually XML?
- if ((!$elements) || (!$elements->children))
- return false;
-
- // Create ODDDocument
- $document = new ODDDocument();
-
- // Itterate through array of elements and construct ODD document
- $cnt = 0;
-
- foreach ($elements->children as $child)
- {
- $odd = ODD_factory($child);
-
- if ($odd) {
- $document->addElement($odd);
- $cnt++;
- }
- }
-
- // Check that we actually found something
- if ($cnt == 0)
- return false;
-
- return $document;
+ public function setPublished($time) {
+ $this->attributes['published'] = date("r", $time);
}
-
+
/**
- * Export an ODD Document.
+ * Return the published time as a unix timestamp.
*
- * @param ODDDocument $document The Document.
- * @param ODDWrapperFactory $wrapper Optional wrapper permitting the export process to embed ODD in other document formats.
+ * @return int or false on failure.
+ */
+ public function getPublishedAsTime() {
+ return strtotime($this->attributes['published']);
+ }
+
+ /**
+ * For serialisation, implement to return a string name of the tag eg "header" or "metadata".
+ * @return string
*/
- function ODD_Export(ODDDocument $document)
- {
- return "$document";
+ abstract protected function getTagName();
+
+ /**
+ * Magic function to generate valid ODD XML for this item.
+ */
+ public function __toString() {
+ // Construct attributes
+ $attr = "";
+ foreach ($this->attributes as $k => $v) {
+ $attr .= ($v!="") ? "$k=\"$v\" " : "";
+ }
+
+ $body = $this->getBody();
+ $tag = $this->getTagName();
+
+ $end = "/>";
+ if ($body!="") {
+ $end = "><![CDATA[$body]]></{$tag}>";
+ }
+
+ return "<{$tag} $attr" . $end . "\n";
+ }
+}
+
+/**
+ * ODD Entity class.
+ * @package Elgg
+ * @subpackage Core
+ * @author Curverider Ltd
+ */
+class ODDEntity extends ODD {
+ function __construct($uuid, $class, $subclass = "") {
+ parent::__construct();
+
+ $this->setAttribute('uuid', $uuid);
+ $this->setAttribute('class', $class);
+ $this->setAttribute('subclass', $subclass);
+ }
+
+ protected function getTagName() { return "entity"; }
+}
+
+/**
+ * ODD Metadata class.
+ * @package Elgg
+ * @subpackage Core
+ * @author Curverider Ltd
+ */
+class ODDMetaData extends ODD {
+ function __construct($uuid, $entity_uuid, $name, $value, $type = "", $owner_uuid = "") {
+ parent::__construct();
+
+ $this->setAttribute('uuid', $uuid);
+ $this->setAttribute('entity_uuid', $entity_uuid);
+ $this->setAttribute('name', $name);
+ $this->setAttribute('type', $type);
+ $this->setAttribute('owner_uuid', $owner_uuid);
+ $this->setBody($value);
}
-
-?> \ No newline at end of file
+
+ protected function getTagName() {
+ return "metadata";
+ }
+}
+
+/**
+ * ODD Relationship class.
+ * @package Elgg
+ * @subpackage Core
+ * @author Curverider Ltd
+ */
+class ODDRelationship extends ODD {
+ function __construct($uuid1, $type, $uuid2) {
+ parent::__construct();
+
+ $this->setAttribute('uuid1', $uuid1);
+ $this->setAttribute('type', $type);
+ $this->setAttribute('uuid2', $uuid2);
+ }
+
+ protected function getTagName() { return "relationship"; }
+}
+
+/**
+ * Attempt to construct an ODD object out of a XmlElement or sub-elements.
+ *
+ * @param XmlElement $element The element(s)
+ * @return mixed An ODD object if the element can be handled, or false.
+ */
+function ODD_factory(XmlElement $element) {
+ $name = $element->name;
+ $odd = false;
+
+ switch ($name) {
+ case 'entity' :
+ $odd = new ODDEntity("","","");
+ break;
+ case 'metadata' :
+ $odd = new ODDMetaData("","","","");
+ break;
+ case 'relationship' :
+ $odd = new ODDRelationship("","","");
+ break;
+ }
+
+ // Now populate values
+ if ($odd) {
+ // Attributes
+ foreach ($element->attributes as $k => $v) {
+ $odd->setAttribute($k,$v);
+ }
+
+ // Body
+ $body = $element->content;
+ $a = stripos($body, "<![CDATA");
+ $b = strripos($body, "]]>");
+ if (($body) && ($a!==false) && ($b!==false)) {
+ $body = substr($body, $a+8, $b-($a+8));
+ }
+
+ $odd->setBody($body);
+ }
+
+ return $odd;
+}
+
+/**
+ * Import an ODD document.
+ *
+ * @param string $xml The XML ODD.
+ * @return ODDDocument
+ */
+function ODD_Import($xml) {
+ // Parse XML to an array
+ $elements = xml_2_object($xml);
+
+ // Sanity check 1, was this actually XML?
+ if ((!$elements) || (!$elements->children)) {
+ return false;
+ }
+
+ // Create ODDDocument
+ $document = new ODDDocument();
+
+ // Itterate through array of elements and construct ODD document
+ $cnt = 0;
+
+ foreach ($elements->children as $child) {
+ $odd = ODD_factory($child);
+
+ if ($odd) {
+ $document->addElement($odd);
+ $cnt++;
+ }
+ }
+
+ // Check that we actually found something
+ if ($cnt == 0) {
+ return false;
+ }
+
+ return $document;
+}
+
+/**
+ * Export an ODD Document.
+ *
+ * @param ODDDocument $document The Document.
+ * @param ODDWrapperFactory $wrapper Optional wrapper permitting the export process to embed ODD in other document formats.
+ */
+function ODD_Export(ODDDocument $document) {
+ return "$document";
+} \ No newline at end of file