Author: as Date: Thu Nov 15 16:13:38 2007 New Revision: 6740 Log: - Added support for the type attribute of entry/title in ATOM.
Added: trunk/Feed/tests/atom/regression/generate/entry/title/ trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.in trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.out trunk/Feed/tests/atom/regression/generate/entry/title/type_html.in trunk/Feed/tests/atom/regression/generate/entry/title/type_html.out trunk/Feed/tests/atom/regression/generate/entry/title/type_text.in trunk/Feed/tests/atom/regression/generate/entry/title/type_text.out trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.in trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.out trunk/Feed/tests/atom/regression/parse/entry/title/ trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.in trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.out trunk/Feed/tests/atom/regression/parse/entry/title/type_html.in trunk/Feed/tests/atom/regression/parse/entry/title/type_html.out trunk/Feed/tests/atom/regression/parse/entry/title/type_text.in trunk/Feed/tests/atom/regression/parse/entry/title/type_text.out trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.in trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.out Modified: trunk/Feed/src/processors/atom.php Modified: trunk/Feed/src/processors/atom.php ============================================================================== --- trunk/Feed/src/processors/atom.php [iso-8859-1] (original) +++ trunk/Feed/src/processors/atom.php [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -263,7 +263,7 @@ $dataNode->set( date( "c", (int)$dataNode->get() ) ); break; } - $this->generateNode( $this->channel, $element, $dataNode ); + $this->generateNode( $this->channel, $element, null, $dataNode ); } } @@ -359,14 +359,14 @@ } - $this->generateNode( $this->channel, $element, $dataNode ); + $this->generateNode( $this->channel, $element, null, $dataNode ); } break; default: foreach ( $data as $dataNode ) { - $this->generateNode( $this->channel, $element, $dataNode ); + $this->generateNode( $this->channel, $element, null, $dataNode ); } break; } @@ -379,18 +379,27 @@ * * @param DOMNode $root The root in which to create the node $element * @param string $element The name of the node to create + * @param string $parent The name of the parent node which contains the node $element * @param array(string=>mixed) $dataNode The data for the node to create * @ignore */ - protected function generateNode( DOMNode $root, $element, $dataNode ) + protected function generateNode( DOMNode $root, $element, $parent = null, $dataNode ) { $elementTag = $this->xml->createElement( $element ); $root->appendChild( $elementTag ); + $subElement = $parent; + + if ( $parent !== null ) + { + $subElement = $element; + $element = $parent; + } + $attributes = array(); - $required = $this->schema->getRequiredAttributes( $element ); - - foreach ( $this->schema->getAttributes( $element ) as $attribute => $type ) + $required = $this->schema->getRequiredAttributes( $element, $subElement ); + + foreach ( $this->schema->getAttributes( $element, $subElement ) as $attribute => $type ) { if ( isset( $dataNode->$attribute ) ) { @@ -433,7 +442,7 @@ } } - if ( !$this->schema->isEmpty( $element ) ) + if ( !$this->schema->isEmpty( $element, $subElement ) ) { $elementTag->nodeValue = $dataNode; } @@ -504,9 +513,18 @@ switch ( $element ) { case 'id': + $dataNode = $data; + $this->generateNode( $entryTag, $element, null, $dataNode ); + break; + case 'title': $dataNode = $data; - $this->generateNode( $entryTag, $element, $dataNode ); + if ( is_array( $data ) ) + { + $dataNode = $data[0]; + } + + $this->generateNode( $entryTag, $element, $parent, $dataNode ); break; case 'updated': @@ -514,7 +532,7 @@ // Sample date: 2003-12-13T18:30:02-05:00 $dataNode->set( date( "c", (int)$dataNode->get() ) ); - $this->generateNode( $entryTag, $element, $dataNode ); + $this->generateNode( $entryTag, $element, null, $dataNode ); break; } } @@ -559,7 +577,7 @@ } - $this->generateNode( $entryTag, $element, $dataNode ); + $this->generateNode( $entryTag, $element, null, $dataNode ); } break; } @@ -711,8 +729,39 @@ switch ( $tagName ) { case 'id': + $element->$tagName = $itemChild->textContent; + break; + case 'title': - $element->$tagName = $itemChild->textContent; + $type = ezcFeedTools::getAttribute( $itemChild, 'type' ); + + switch ( $type ) + { + case 'xhtml': + $nodes = $itemChild->childNodes; + if ( $nodes instanceof DOMNodeList ) + { + $contentNode = $nodes->item( 1 ); + $element->$tagName = $contentNode->nodeValue; + } + $element->$tagName->type = $type; + break; + + case 'html': + $element->$tagName = $itemChild->textContent; + $element->$tagName->type = $type; + break; + + case 'text': + $element->$tagName = $itemChild->textContent; + $element->$tagName->type = $type; + break; + + default: + $element->$tagName = $itemChild->textContent; + break; + } + break; case 'updated': Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.in (added) +++ trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.in [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,9 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title' ) ), + 'updated' => 'Feed updated', + 'author' => array( array( 'name' => 'Author name' ) ), + 'item' => array( array( 'id' => 'Entry id', + 'title' => array( array( '#' => 'Entry title' ) ), + 'updated' => 'Entry updated' ) ) ); +?> Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.out (added) +++ trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.out [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>Feed id</id> + <title>Feed title</title> + <updated>XXX</updated> + <author> + <name>Author name</name> + </author> + <entry> + <id>Entry id</id> + <title>Entry title</title> + <updated>XXX</updated> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_html.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/title/type_html.in (added) +++ trunk/Feed/tests/atom/regression/generate/entry/title/type_html.in [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,10 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title' ) ), + 'updated' => 'Feed updated', + 'author' => array( array( 'name' => 'Author name' ) ), + 'item' => array( array( 'id' => 'Entry id', + 'title' => array( array( '#' => 'Entry title', + 'type' => 'html' ) ), + 'updated' => 'Entry updated' ) ) ); +?> Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_html.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/title/type_html.out (added) +++ trunk/Feed/tests/atom/regression/generate/entry/title/type_html.out [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>Feed id</id> + <title>Feed title</title> + <updated>XXX</updated> + <author> + <name>Author name</name> + </author> + <entry> + <id>Entry id</id> + <title type="html">Entry title</title> + <updated>XXX</updated> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_text.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/title/type_text.in (added) +++ trunk/Feed/tests/atom/regression/generate/entry/title/type_text.in [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,10 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title' ) ), + 'updated' => 'Feed updated', + 'author' => array( array( 'name' => 'Author name' ) ), + 'item' => array( array( 'id' => 'Entry id', + 'title' => array( array( '#' => 'Entry title', + 'type' => 'text' ) ), + 'updated' => 'Entry updated' ) ) ); +?> Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_text.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/title/type_text.out (added) +++ trunk/Feed/tests/atom/regression/generate/entry/title/type_text.out [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>Feed id</id> + <title>Feed title</title> + <updated>XXX</updated> + <author> + <name>Author name</name> + </author> + <entry> + <id>Entry id</id> + <title type="text">Entry title</title> + <updated>XXX</updated> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.in (added) +++ trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.in [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,10 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title' ) ), + 'updated' => 'Feed updated', + 'author' => array( array( 'name' => 'Author name' ) ), + 'item' => array( array( 'id' => 'Entry id', + 'title' => array( array( '#' => 'Entry title', + 'type' => 'xhtml' ) ), + 'updated' => 'Entry updated' ) ) ); +?> Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.out (added) +++ trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.out [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>Feed id</id> + <title>Feed title</title> + <updated>XXX</updated> + <author> + <name>Author name</name> + </author> + <entry> + <id>Entry id</id> + <title type="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"> + <xhtml:div>Entry title</xhtml:div> + </title> + <updated>XXX</updated> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.in ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.in (added) +++ trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.in [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>Feed id</id> + <title type="text">Feed title</title> + <updated>Feed updated</updated> + <entry> + <id>Entry id</id> + <title>Entry title</title> + <updated>2007-11-14T16:23:40+01:00</updated> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.out ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.out (added) +++ trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.out [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,15 @@ +<?php +$feed = new ezcFeed( 'atom' ); + +$feed->id = 'Feed id'; +$feed->title = 'Feed title'; +$feed->title->type = 'text'; +$feed->updated = 'Feed updated'; + +$entry = $feed->add( 'entry' ); +$entry->id = 'Entry id'; +$entry->title = 'Entry title'; +$entry->updated = 1195053820; + +return $feed; +?> Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_html.in ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/title/type_html.in (added) +++ trunk/Feed/tests/atom/regression/parse/entry/title/type_html.in [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>Feed id</id> + <title type="text">Feed title</title> + <updated>Feed updated</updated> + <entry> + <id>Entry id</id> + <title type="html">Entry title</title> + <updated>2007-11-14T16:23:40+01:00</updated> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_html.out ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/title/type_html.out (added) +++ trunk/Feed/tests/atom/regression/parse/entry/title/type_html.out [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,16 @@ +<?php +$feed = new ezcFeed( 'atom' ); + +$feed->id = 'Feed id'; +$feed->title = 'Feed title'; +$feed->title->type = 'text'; +$feed->updated = 'Feed updated'; + +$entry = $feed->add( 'entry' ); +$entry->id = 'Entry id'; +$entry->title = 'Entry title'; +$entry->title->type = 'html'; +$entry->updated = 1195053820; + +return $feed; +?> Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_text.in ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/title/type_text.in (added) +++ trunk/Feed/tests/atom/regression/parse/entry/title/type_text.in [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>Feed id</id> + <title type="text">Feed title</title> + <updated>Feed updated</updated> + <entry> + <id>Entry id</id> + <title type="text">Entry title</title> + <updated>2007-11-14T16:23:40+01:00</updated> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_text.out ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/title/type_text.out (added) +++ trunk/Feed/tests/atom/regression/parse/entry/title/type_text.out [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,16 @@ +<?php +$feed = new ezcFeed( 'atom' ); + +$feed->id = 'Feed id'; +$feed->title = 'Feed title'; +$feed->title->type = 'text'; +$feed->updated = 'Feed updated'; + +$entry = $feed->add( 'entry' ); +$entry->id = 'Entry id'; +$entry->title = 'Entry title'; +$entry->title->type = 'text'; +$entry->updated = 1195053820; + +return $feed; +?> Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.in ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.in (added) +++ trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.in [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>Feed id</id> + <title type="text">Feed title</title> + <updated>Feed updated</updated> + <entry> + <id>Entry id</id> + <title type="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"> + <xhtml:div>Entry title</xhtml:div> + </title> + <updated>2007-11-14T16:23:40+01:00</updated> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.out ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.out (added) +++ trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.out [iso-8859-1] Thu Nov 15 16:13:38 2007 @@ -1,0 +1,16 @@ +<?php +$feed = new ezcFeed( 'atom' ); + +$feed->id = 'Feed id'; +$feed->title = 'Feed title'; +$feed->title->type = 'text'; +$feed->updated = 'Feed updated'; + +$entry = $feed->add( 'entry' ); +$entry->id = 'Entry id'; +$entry->title = 'Entry title'; +$entry->title->type = 'xhtml'; +$entry->updated = 1195053820; + +return $feed; +?> -- svn-components mailing list svn-components@lists.ez.no http://lists.ez.no/mailman/listinfo/svn-components