diff options
Diffstat (limited to 'engine/classes/ODD.php')
-rw-r--r-- | engine/classes/ODD.php | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/engine/classes/ODD.php b/engine/classes/ODD.php new file mode 100644 index 000000000..fa5b616fc --- /dev/null +++ b/engine/classes/ODD.php @@ -0,0 +1,131 @@ +<?php +/** + * Open Data Definition (ODD) superclass. + * + * @package Elgg.Core + * @subpackage ODD + */ +abstract class ODD { + /** + * Attributes. + */ + private $attributes = array(); + + /** + * Optional body. + */ + private $body; + + /** + * Construct an ODD document with initial values. + */ + public function __construct() { + $this->body = ""; + } + + /** + * Returns an array of attributes + * + * @return array + */ + public function getAttributes() { + return $this->attributes; + } + + /** + * Sets an attribute + * + * @param string $key Name + * @param mixed $value Value + * + * @return void + */ + public function setAttribute($key, $value) { + $this->attributes[$key] = $value; + } + + /** + * Returns an attribute + * + * @param string $key Name + * + * @return mixed + */ + public function getAttribute($key) { + if (isset($this->attributes[$key])) { + return $this->attributes[$key]; + } + + return NULL; + } + + /** + * Sets the body of the ODD. + * + * @param mixed $value Value + * + * @return void + */ + public function setBody($value) { + $this->body = $value; + } + + /** + * Gets the body of the ODD. + * + * @return mixed + */ + public function getBody() { + return $this->body; + } + + /** + * Set the published time. + * + * @param int $time Unix timestamp + * + * @return void + */ + public function setPublished($time) { + $this->attributes['published'] = date("r", $time); + } + + /** + * 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. + * + * @return string + */ + 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"; + } +} |