From 60284479936d65443bd5dc14456bc0b692eab500 Mon Sep 17 00:00:00 2001 From: Jozef Selesi Date: Sat, 22 Nov 2008 18:22:53 +0000 Subject: An Atom library prototype. Its purpose is to explore the cost of us supporting Atom as the default input and output format of RESTful controllers. Only the constructs necessary for representing comment feeds and entries have been implemented. Its output are valid Atom 1.0 documents. The test contains examples of how to make feeds and entries. --- modules/atom/libraries/Atom_Base.php | 74 ++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 modules/atom/libraries/Atom_Base.php (limited to 'modules/atom/libraries/Atom_Base.php') diff --git a/modules/atom/libraries/Atom_Base.php b/modules/atom/libraries/Atom_Base.php new file mode 100644 index 00000000..62fdfea1 --- /dev/null +++ b/modules/atom/libraries/Atom_Base.php @@ -0,0 +1,74 @@ +dom = $dom; + $this->element = $dom->createElement($element_name); + } else { + $this->dom = new DOMDocument('1.0', 'utf-8'); + $this->element = $this->dom->createElementNS("http://www.w3.org/2005/Atom", $element_name); + } + $this->dom->appendChild($this->element); + $this->element_name = $element_name; + return $this; + } + + public function get_element() { + $this->add_children_to_base_element(); + return $this->element; + } + + public function as_xml() { + $this->add_children_to_base_element(); + return $this->dom->saveXML(); + } + + public function as_json() { + $this->add_children_to_base_element(); + /* Both Google and Yahoo generate their JSON from XML. We could do that, too. */ + return null; + } + + public function load_xml($xml) { + /* Load XML into our DOM. We can also validate against the RELAX NG schema from the Atom RFC. */ + } + + protected function add_child($element_type, $element_name) { + // @todo check if element_type is of Atom_Base; this can also be done with no magic + $element = new $element_type($element_name, $this->dom); + $this->children[$element_name][] = $element; + return end($this->children[$element_name]); + } + + protected function add_children_to_base_element() { + foreach ($this->children as $element_type => $elements) { + $base_element = $this->dom->getElementsByTagName($this->element_name)->item(0); + foreach ($elements as $id => $element) { + $base_element->appendChild($element->get_element()); + } + } + } +} \ No newline at end of file -- cgit v1.2.3