Author: as Date: Wed Oct 31 10:28:20 2007 New Revision: 6639 Log: - Added support for multiple 'item/category' in RSS2 feeds.
Added: trunk/Feed/tests/rss2/regression/generate/item/category/ trunk/Feed/tests/rss2/regression/generate/item/category/category.in trunk/Feed/tests/rss2/regression/generate/item/category/category.out trunk/Feed/tests/rss2/regression/generate/item/category/category_domain.in trunk/Feed/tests/rss2/regression/generate/item/category/category_domain.out trunk/Feed/tests/rss2/regression/generate/item/category/category_empty.in trunk/Feed/tests/rss2/regression/generate/item/category/category_empty.out trunk/Feed/tests/rss2/regression/generate/item/category/category_multiple.in trunk/Feed/tests/rss2/regression/generate/item/category/category_multiple.out trunk/Feed/tests/rss2/regression/parse/item/category/ trunk/Feed/tests/rss2/regression/parse/item/category/category.in trunk/Feed/tests/rss2/regression/parse/item/category/category.out trunk/Feed/tests/rss2/regression/parse/item/category/category_domain.in trunk/Feed/tests/rss2/regression/parse/item/category/category_domain.out trunk/Feed/tests/rss2/regression/parse/item/category/category_empty.in trunk/Feed/tests/rss2/regression/parse/item/category/category_empty.out trunk/Feed/tests/rss2/regression/parse/item/category/category_multiple.in trunk/Feed/tests/rss2/regression/parse/item/category/category_multiple.out Modified: trunk/Feed/src/processors/rss2.php trunk/Feed/tests/regression_test.php Modified: trunk/Feed/src/processors/rss2.php ============================================================================== --- trunk/Feed/src/processors/rss2.php [iso-8859-1] (original) +++ trunk/Feed/src/processors/rss2.php [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -92,7 +92,10 @@ 'description' => array( '#' => 'string' ), 'author' => array( '#' => 'string' ), - 'category' => array( '#' => 'string' ), + 'category' => array( '#' => 'string', + 'ATTRIBUTES' => array( 'domain' => 'string' ), + 'MULTI' => 'categories' ), + 'comments' => array( '#' => 'string' ), 'enclosure' => array( '#' => 'none', 'ATTRIBUTES' => array( 'url' => 'string', @@ -421,7 +424,7 @@ { $normalizedAttribute = ezcFeedTools::normalizeName( $attribute, $this->schema->getItemsMap() ); - $metaData = $this->schema->isMulti( 'item', $attribute ) ? $this->get( $this->schema->getMulti( 'item', $attribute ), $attribute ) : $item->$attribute; + $metaData = $item->$attribute; if ( !is_null( $metaData ) ) { @@ -439,6 +442,29 @@ // $permaLink = substr( $metaData[0]->__toString(), 0, 7 ) === 'http://' ? "true" : "false"; $this->generateMetaDataWithAttributes( $itemTag, $normalizedAttribute, $metaData, $attributes ); + break; + + case 'category': + foreach ( $metaData as $dataNode ) + { + $attributes = array(); + foreach ( $this->schema->getAttributes( 'item', $attribute ) as $key => $type ) + { + if ( isset( $dataNode->$key ) ) + { + $attributes[$key] = $dataNode->$key; + } + } + + if ( count( $attributes ) >= 1 ) + { + $this->generateMetaDataWithAttributes( $itemTag, $normalizedAttribute, $dataNode, $attributes ); + } + else + { + $this->generateMetaData( $itemTag, $normalizedAttribute, $dataNode ); + } + } break; case 'pubDate': Modified: trunk/Feed/tests/regression_test.php ============================================================================== --- trunk/Feed/tests/regression_test.php [iso-8859-1] (original) +++ trunk/Feed/tests/regression_test.php [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -138,7 +138,11 @@ { if ( is_array( $subValue ) ) { - $subElement = $element->add( $subKey ); + if ( count( $subValue ) === 0 || !isset( $subValue[0] ) ) + { + $subElement = $element->add( $subKey ); + } + foreach ( $subValue as $subSubKey => $subSubValue ) { if ( $subSubKey === '#' ) @@ -147,7 +151,25 @@ } else { - $subElement->$subSubKey = $subSubValue; + if ( is_array( $subSubValue ) ) + { + $subElement = $element->add( $subKey ); + foreach ( $subSubValue as $subSubSubKey => $subSubSubValue ) + { + if ( $subSubSubKey === '#' ) + { + $subElement->set( $subSubSubValue ); + } + else + { + $subElement->$subSubSubKey = $subSubSubValue; + } + } + } + else + { + $subElement->$subSubKey = $subSubValue; + } } } } Added: trunk/Feed/tests/rss2/regression/generate/item/category/category.in ============================================================================== --- trunk/Feed/tests/rss2/regression/generate/item/category/category.in (added) +++ trunk/Feed/tests/rss2/regression/generate/item/category/category.in [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,10 @@ +<?php +return array( 'title' => 'Feed title', + 'link' => array( 'Feed link' ), + 'description' => 'Feed description', + 'item' => array( array( 'title' => 'Item title', + 'link' => 'Item link', + 'description' => 'Item description', + 'category' => array( array( '#' => 'Item category' ) ) ), ), + ); +?> Added: trunk/Feed/tests/rss2/regression/generate/item/category/category.out ============================================================================== --- trunk/Feed/tests/rss2/regression/generate/item/category/category.out (added) +++ trunk/Feed/tests/rss2/regression/generate/item/category/category.out [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0"> + <channel> + <title>Feed title</title> + <link>Feed link</link> + <description>Feed description</description> + <pubDate>XXX</pubDate> + <generator>eZ Components</generator> + <docs>http://www.rssboard.org/rss-specification</docs> + <item> + <title>Item title</title> + <link>Item link</link> + <description>Item description</description> + <category>Item category</category> + </item> + </channel> +</rss> Added: trunk/Feed/tests/rss2/regression/generate/item/category/category_domain.in ============================================================================== --- trunk/Feed/tests/rss2/regression/generate/item/category/category_domain.in (added) +++ trunk/Feed/tests/rss2/regression/generate/item/category/category_domain.in [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,11 @@ +<?php +return array( 'title' => 'Feed title', + 'link' => array( 'Feed link' ), + 'description' => 'Feed description', + 'item' => array( array( 'title' => 'Item title', + 'link' => 'Item link', + 'description' => 'Item description', + 'category' => array( array( '#' => 'Item category', + 'domain' => 'Category domain' ) ) ), ), + ); +?> Added: trunk/Feed/tests/rss2/regression/generate/item/category/category_domain.out ============================================================================== --- trunk/Feed/tests/rss2/regression/generate/item/category/category_domain.out (added) +++ trunk/Feed/tests/rss2/regression/generate/item/category/category_domain.out [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0"> + <channel> + <title>Feed title</title> + <link>Feed link</link> + <description>Feed description</description> + <pubDate>XXX</pubDate> + <generator>eZ Components</generator> + <docs>http://www.rssboard.org/rss-specification</docs> + <item> + <title>Item title</title> + <link>Item link</link> + <description>Item description</description> + <category domain="Category domain">Item category</category> + </item> + </channel> +</rss> Added: trunk/Feed/tests/rss2/regression/generate/item/category/category_empty.in ============================================================================== --- trunk/Feed/tests/rss2/regression/generate/item/category/category_empty.in (added) +++ trunk/Feed/tests/rss2/regression/generate/item/category/category_empty.in [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,10 @@ +<?php +return array( 'title' => 'Feed title', + 'link' => array( 'Feed link' ), + 'description' => 'Feed description', + 'item' => array( array( 'title' => 'Item title', + 'link' => 'Item link', + 'description' => 'Item description', + 'category' => array( ) ), ), + ); +?> Added: trunk/Feed/tests/rss2/regression/generate/item/category/category_empty.out ============================================================================== --- trunk/Feed/tests/rss2/regression/generate/item/category/category_empty.out (added) +++ trunk/Feed/tests/rss2/regression/generate/item/category/category_empty.out [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0"> + <channel> + <title>Feed title</title> + <link>Feed link</link> + <description>Feed description</description> + <pubDate>XXX</pubDate> + <generator>eZ Components</generator> + <docs>http://www.rssboard.org/rss-specification</docs> + <item> + <title>Item title</title> + <link>Item link</link> + <description>Item description</description> + <category></category> + </item> + </channel> +</rss> Added: trunk/Feed/tests/rss2/regression/generate/item/category/category_multiple.in ============================================================================== --- trunk/Feed/tests/rss2/regression/generate/item/category/category_multiple.in (added) +++ trunk/Feed/tests/rss2/regression/generate/item/category/category_multiple.in [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,13 @@ +<?php +return array( 'title' => 'Feed title', + 'link' => array( 'Feed link' ), + 'description' => 'Feed description', + 'item' => array( array( 'title' => 'Item title', + 'link' => 'Item link', + 'description' => 'Item description', + 'category' => array( array( '#' => 'Item category 1', + 'domain' => 'Category domain 1' ), + array( '#' => 'Item category 2', + 'domain' => 'Category domain 2' ) ) ), ), + ); +?> Added: trunk/Feed/tests/rss2/regression/generate/item/category/category_multiple.out ============================================================================== --- trunk/Feed/tests/rss2/regression/generate/item/category/category_multiple.out (added) +++ trunk/Feed/tests/rss2/regression/generate/item/category/category_multiple.out [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0"> + <channel> + <title>Feed title</title> + <link>Feed link</link> + <description>Feed description</description> + <pubDate>XXX</pubDate> + <generator>eZ Components</generator> + <docs>http://www.rssboard.org/rss-specification</docs> + <item> + <title>Item title</title> + <link>Item link</link> + <description>Item description</description> + <category domain="Category domain 1">Item category 1</category> + <category domain="Category domain 2">Item category 2</category> + </item> + </channel> +</rss> Added: trunk/Feed/tests/rss2/regression/parse/item/category/category.in ============================================================================== --- trunk/Feed/tests/rss2/regression/parse/item/category/category.in (added) +++ trunk/Feed/tests/rss2/regression/parse/item/category/category.in [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0"> + <channel> + <title>Feed title</title> + <link>Feed link</link> + <description>Feed description</description> + <item> + <title>Item title</title> + <link>Item link</link> + <description>Item description</description> + <category>Item category</category> + </item> + </channel> +</rss> Added: trunk/Feed/tests/rss2/regression/parse/item/category/category.out ============================================================================== --- trunk/Feed/tests/rss2/regression/parse/item/category/category.out (added) +++ trunk/Feed/tests/rss2/regression/parse/item/category/category.out [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,19 @@ +<?php +$feed = new ezcFeed( 'rss2' ); +$feed->title = 'Feed title'; + +$link = $feed->add( 'link' ); +$link->set( 'Feed link' ); + +$feed->description = 'Feed description'; + +$item = $feed->add( 'item' ); +$item->title = 'Item title'; +$item->link = 'Item link'; +$item->description = 'Item description'; + +$category = $item->add( 'category' ); +$category->set( 'Item category' ); + +return $feed; +?> Added: trunk/Feed/tests/rss2/regression/parse/item/category/category_domain.in ============================================================================== --- trunk/Feed/tests/rss2/regression/parse/item/category/category_domain.in (added) +++ trunk/Feed/tests/rss2/regression/parse/item/category/category_domain.in [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0"> + <channel> + <title>Feed title</title> + <link>Feed link</link> + <description>Feed description</description> + <item> + <title>Item title</title> + <link>Item link</link> + <description>Item description</description> + <category domain="Category domain">Item category</category> + </item> + </channel> +</rss> Added: trunk/Feed/tests/rss2/regression/parse/item/category/category_domain.out ============================================================================== --- trunk/Feed/tests/rss2/regression/parse/item/category/category_domain.out (added) +++ trunk/Feed/tests/rss2/regression/parse/item/category/category_domain.out [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,20 @@ +<?php +$feed = new ezcFeed( 'rss2' ); +$feed->title = 'Feed title'; + +$link = $feed->add( 'link' ); +$link->set( 'Feed link' ); + +$feed->description = 'Feed description'; + +$item = $feed->add( 'item' ); +$item->title = 'Item title'; +$item->link = 'Item link'; +$item->description = 'Item description'; + +$category = $item->add( 'category' ); +$category->set( 'Item category' ); +$category->domain = 'Category domain'; + +return $feed; +?> Added: trunk/Feed/tests/rss2/regression/parse/item/category/category_empty.in ============================================================================== --- trunk/Feed/tests/rss2/regression/parse/item/category/category_empty.in (added) +++ trunk/Feed/tests/rss2/regression/parse/item/category/category_empty.in [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0"> + <channel> + <title>Feed title</title> + <link>Feed link</link> + <description>Feed description</description> + <item> + <title>Item title</title> + <link>Item link</link> + <description>Item description</description> + <category/> + </item> + </channel> +</rss> Added: trunk/Feed/tests/rss2/regression/parse/item/category/category_empty.out ============================================================================== --- trunk/Feed/tests/rss2/regression/parse/item/category/category_empty.out (added) +++ trunk/Feed/tests/rss2/regression/parse/item/category/category_empty.out [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,19 @@ +<?php +$feed = new ezcFeed( 'rss2' ); +$feed->title = 'Feed title'; + +$link = $feed->add( 'link' ); +$link->set( 'Feed link' ); + +$feed->description = 'Feed description'; + +$item = $feed->add( 'item' ); +$item->title = 'Item title'; +$item->link = 'Item link'; +$item->description = 'Item description'; + +$category = $item->add( 'category' ); +$category->set( null ); + +return $feed; +?> Added: trunk/Feed/tests/rss2/regression/parse/item/category/category_multiple.in ============================================================================== --- trunk/Feed/tests/rss2/regression/parse/item/category/category_multiple.in (added) +++ trunk/Feed/tests/rss2/regression/parse/item/category/category_multiple.in [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0"> + <channel> + <title>Feed title</title> + <link>Feed link</link> + <description>Feed description</description> + <item> + <title>Item title</title> + <link>Item link</link> + <description>Item description</description> + <category domain="Category domain 1">Item category 1</category> + <category domain="Category domain 2">Item category 2</category> + </item> + </channel> +</rss> Added: trunk/Feed/tests/rss2/regression/parse/item/category/category_multiple.out ============================================================================== --- trunk/Feed/tests/rss2/regression/parse/item/category/category_multiple.out (added) +++ trunk/Feed/tests/rss2/regression/parse/item/category/category_multiple.out [iso-8859-1] Wed Oct 31 10:28:20 2007 @@ -1,0 +1,24 @@ +<?php +$feed = new ezcFeed( 'rss2' ); +$feed->title = 'Feed title'; + +$link = $feed->add( 'link' ); +$link->set( 'Feed link' ); + +$feed->description = 'Feed description'; + +$item = $feed->add( 'item' ); +$item->title = 'Item title'; +$item->link = 'Item link'; +$item->description = 'Item description'; + +$category = $item->add( 'category' ); +$category->set( 'Item category 1' ); +$category->domain = 'Category domain 1'; + +$category = $item->add( 'category' ); +$category->set( 'Item category 2' ); +$category->domain = 'Category domain 2'; + +return $feed; +?> -- svn-components mailing list svn-components@lists.ez.no http://lists.ez.no/mailman/listinfo/svn-components