Author: as Date: Wed Nov 14 16:17:32 2007 New Revision: 6729 Log: - Added support for 'entry' ATOM feed elements (accessed as 'item' through ezcFeed). # Support for all entry child elements will follow soon.
Added: trunk/Feed/tests/atom/regression/generate/entry/ trunk/Feed/tests/atom/regression/generate/entry/entry_empty.in trunk/Feed/tests/atom/regression/generate/entry/entry_empty.out trunk/Feed/tests/atom/regression/generate/entry/entry_id+title+updated.in trunk/Feed/tests/atom/regression/generate/entry/entry_id+title+updated.out trunk/Feed/tests/atom/regression/generate/entry/entry_id+title.in trunk/Feed/tests/atom/regression/generate/entry/entry_id+title.out trunk/Feed/tests/atom/regression/generate/entry/entry_id.in trunk/Feed/tests/atom/regression/generate/entry/entry_id.out trunk/Feed/tests/atom/regression/parse/entry/ trunk/Feed/tests/atom/regression/parse/entry/entry_empty.in trunk/Feed/tests/atom/regression/parse/entry/entry_empty.out trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated.in trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated.out trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated_wrong_date.in trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated_wrong_date.out trunk/Feed/tests/atom/regression/parse/entry/entry_id+title.in trunk/Feed/tests/atom/regression/parse/entry/entry_id+title.out trunk/Feed/tests/atom/regression/parse/entry/entry_id.in trunk/Feed/tests/atom/regression/parse/entry/entry_id.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] Wed Nov 14 16:17:32 2007 @@ -95,6 +95,87 @@ 'subtitle' => array( '#' => 'string', 'ATTRIBUTES' => array( 'type' => 'string' ), ), + 'entry' => array( '#' => 'none', + 'NODES' => array( + 'id' => array( '#' => 'string' ), + 'title' => array( '#' => 'string', + 'ATTRIBUTES' => array( 'type' => 'string' ), ), + + 'updated' => array( '#' => 'string' ), + + 'author' => array( '#' => 'none', + 'NODES' => array( + 'name' => array( '#' => 'string' ), + 'email' => array( '#' => 'string' ), + 'uri' => array( '#' => 'string' ), + + 'REQUIRED' => array( 'name' ), + 'OPTIONAL' => array( 'email', 'uri' ), + ), + + 'MULTI' => 'authors' ), + + 'content' => array( '#' => 'string', + 'ATTRIBUTES' => array( 'type' => 'string' ), ), + + 'link' => array( '#' => 'none', + 'ATTRIBUTES' => array( 'href' => 'string', + 'rel' => 'string', + 'type' => 'string', + 'hreflang' => 'string', + 'title' => 'string', + 'length' => 'string' ), + + 'REQUIRED_ATTRIBUTES' => array( 'href' ), + + 'MULTI' => 'links' ), + + 'summary' => array( '#' => 'string', + 'ATTRIBUTES' => array( 'type' => 'string' ), ), + + 'category' => array( '#' => 'none', + 'ATTRIBUTES' => array( 'term' => 'string', + 'scheme' => 'string', + 'label' => 'string' ), + + 'REQUIRED_ATTRIBUTES' => array( 'term' ), + + 'MULTI' => 'categories' ), + + 'contributor' => array( '#' => 'none', + 'NODES' => array( + 'name' => array( '#' => 'string' ), + 'email' => array( '#' => 'string' ), + 'uri' => array( '#' => 'string' ), + + 'REQUIRED' => array( 'name' ), + 'OPTIONAL' => array( 'email', 'uri' ), + ), + + 'MULTI' => 'contributors' ), + + 'published' => array( '#' => 'string' ), + + 'source' => array( '#' => 'none', + 'COPY' => array( 'id', 'title', 'updated', + 'author', 'link', 'category', + 'contributor', 'rights' ), ), + + 'rights' => array( '#' => 'string', + 'ATTRIBUTES' => array( 'type' => 'string' ), ), + + 'REQUIRED' => array( 'id', 'title', 'updated' ), + + 'OPTIONAL' => array( 'author', 'content', 'link', 'summary', + 'category', 'contributor', 'published', 'rights', + 'source' ), + + ), + + 'ITEMS_MAP' => array( 'copyright' => 'rights', ), + + 'MULTI' => 'entries' ), + 'REQUIRED' => array( 'id', 'title', 'updated' ), 'OPTIONAL' => array( 'author', 'link', 'category', 'contributor', 'generator', 'icon', @@ -132,6 +213,7 @@ $this->generateRequired(); $this->generateAtLeastOne(); $this->generateOptional(); + $this->generateItems(); return $this->xml->saveXML(); } @@ -381,6 +463,55 @@ } /** + * Adds the feed entry elements to the XML document being generated. + * + * @ignore + */ + protected function generateItems() + { + $entries = $this->get( 'entries' ); + if ( $entries === null ) + { + return; + } + + $parent = 'entry'; + foreach ( $entries as $entry ) + { + $entryTag = $this->xml->createElement( $parent ); + $this->channel->appendChild( $entryTag ); + + foreach ( $this->schema->getRequired( $parent ) as $element ) + { + $data = $this->schema->isMulti( $parent, $element ) ? $this->get( $this->schema->getMulti( $parent, $element ) ) : $entry->$element; + + if ( is_null( $data ) ) + { + throw new ezcFeedRequiredMetaDataMissingException( $element ); + } + + if ( !is_array( $data ) ) + { + $data = array( $data ); + } + + foreach ( $data as $dataNode ) + { + switch ( $element ) + { + case 'updated': + // Sample date: 2003-12-13T18:30:02-05:00 + $dataNode->set( date( "c", (int)$dataNode->get() ) ); + break; + } + $this->generateNode( $entryTag, $element, $dataNode ); + + } + } + } + } + + /** * Returns true if the parser can parse the provided XML document object, * false otherwise. * @@ -478,6 +609,11 @@ $this->parsePerson( $feed, $element, $channelChild, $tagName ); break; + case 'item': + $element = $feed->add( $tagName ); + $this->parseItem( $feed, $element, $channelChild ); + break; + default: // check if it's part of a known module/namespace } @@ -510,6 +646,25 @@ */ protected function parseItem( ezcFeed $feed, ezcFeedElement $element, DOMElement $xml ) { + foreach ( $xml->childNodes as $itemChild ) + { + if ( $itemChild->nodeType === XML_ELEMENT_NODE ) + { + $tagName = $itemChild->tagName; + + switch ( $tagName ) + { + case 'id': + case 'title': + $element->$tagName = $itemChild->textContent; + break; + + case 'updated': + $element->$tagName = ezcFeedTools::prepareDate( $itemChild->textContent ); + break; + } + } + } } /** Added: trunk/Feed/tests/atom/regression/generate/entry/entry_empty.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/entry_empty.in (added) +++ trunk/Feed/tests/atom/regression/generate/entry/entry_empty.in [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,8 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title', + 'type' => '' ) ), + 'updated' => 'Feed updated', + 'author' => array( array( 'name' => 'Author name' ) ), + 'item' => array( array() ) ); +?> Added: trunk/Feed/tests/atom/regression/generate/entry/entry_empty.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/entry_empty.out (added) +++ trunk/Feed/tests/atom/regression/generate/entry/entry_empty.out [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,1 @@ +There was no data submitted for required channel attribute 'id'. Added: trunk/Feed/tests/atom/regression/generate/entry/entry_id+title+updated.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/entry_id+title+updated.in (added) +++ trunk/Feed/tests/atom/regression/generate/entry/entry_id+title+updated.in [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,10 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title', + 'type' => '' ) ), + 'updated' => 'Feed updated', + 'author' => array( array( 'name' => 'Author name' ) ), + 'item' => array( array( 'id' => 'Entry id', + 'title' => 'Entry title', + 'updated' => 'Entry updated' ) ) ); +?> Added: trunk/Feed/tests/atom/regression/generate/entry/entry_id+title+updated.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/entry_id+title+updated.out (added) +++ trunk/Feed/tests/atom/regression/generate/entry/entry_id+title+updated.out [iso-8859-1] Wed Nov 14 16:17:32 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 type="text">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/entry_id+title.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/entry_id+title.in (added) +++ trunk/Feed/tests/atom/regression/generate/entry/entry_id+title.in [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,9 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title', + 'type' => '' ) ), + 'updated' => 'Feed updated', + 'author' => array( array( 'name' => 'Author name' ) ), + 'item' => array( array( 'id' => 'Entry id', + 'title' => 'Entry title' ) ) ); +?> Added: trunk/Feed/tests/atom/regression/generate/entry/entry_id+title.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/entry_id+title.out (added) +++ trunk/Feed/tests/atom/regression/generate/entry/entry_id+title.out [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,1 @@ +There was no data submitted for required channel attribute 'updated'. Added: trunk/Feed/tests/atom/regression/generate/entry/entry_id.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/entry_id.in (added) +++ trunk/Feed/tests/atom/regression/generate/entry/entry_id.in [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,8 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title', + 'type' => '' ) ), + 'updated' => 'Feed updated', + 'author' => array( array( 'name' => 'Author name' ) ), + 'item' => array( array( 'id' => 'Entry id' ) ) ); +?> Added: trunk/Feed/tests/atom/regression/generate/entry/entry_id.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/entry/entry_id.out (added) +++ trunk/Feed/tests/atom/regression/generate/entry/entry_id.out [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,1 @@ +There was no data submitted for required channel attribute 'title'. Added: trunk/Feed/tests/atom/regression/parse/entry/entry_empty.in ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/entry_empty.in (added) +++ trunk/Feed/tests/atom/regression/parse/entry/entry_empty.in [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,7 @@ +<?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/> +</feed> Added: trunk/Feed/tests/atom/regression/parse/entry/entry_empty.out ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/entry_empty.out (added) +++ trunk/Feed/tests/atom/regression/parse/entry/entry_empty.out [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,12 @@ +<?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' ); + +return $feed; +?> Added: trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated.in ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated.in (added) +++ trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated.in [iso-8859-1] Wed Nov 14 16:17:32 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/entry_id+title+updated.out ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated.out (added) +++ trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated.out [iso-8859-1] Wed Nov 14 16:17:32 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/entry_id+title+updated_wrong_date.in ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated_wrong_date.in (added) +++ trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated_wrong_date.in [iso-8859-1] Wed Nov 14 16:17:32 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>Feed updated</updated> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated_wrong_date.out ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated_wrong_date.out (added) +++ trunk/Feed/tests/atom/regression/parse/entry/entry_id+title+updated_wrong_date.out [iso-8859-1] Wed Nov 14 16:17:32 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 = time(); + +return $feed; +?> Added: trunk/Feed/tests/atom/regression/parse/entry/entry_id+title.in ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/entry_id+title.in (added) +++ trunk/Feed/tests/atom/regression/parse/entry/entry_id+title.in [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,10 @@ +<?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> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/parse/entry/entry_id+title.out ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/entry_id+title.out (added) +++ trunk/Feed/tests/atom/regression/parse/entry/entry_id+title.out [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,14 @@ +<?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'; + +return $feed; +?> Added: trunk/Feed/tests/atom/regression/parse/entry/entry_id.in ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/entry_id.in (added) +++ trunk/Feed/tests/atom/regression/parse/entry/entry_id.in [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,9 @@ +<?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> + </entry> +</feed> Added: trunk/Feed/tests/atom/regression/parse/entry/entry_id.out ============================================================================== --- trunk/Feed/tests/atom/regression/parse/entry/entry_id.out (added) +++ trunk/Feed/tests/atom/regression/parse/entry/entry_id.out [iso-8859-1] Wed Nov 14 16:17:32 2007 @@ -1,0 +1,13 @@ +<?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'; + +return $feed; +?> -- svn-components mailing list svn-components@lists.ez.no http://lists.ez.no/mailman/listinfo/svn-components