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

Reply via email to