Author: as
Date: Thu Nov  1 13:47:19 2007
New Revision: 6658

Log:
- Added support for 'item' RSS1 feed element in feed generating.

Added:
    
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description+item.in
    
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description+item.out
    
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description.in
    
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description.out
    trunk/Feed/tests/rss1/regression/generate/incomplete/title+link.in
    trunk/Feed/tests/rss1/regression/generate/incomplete/title+link.out
    trunk/Feed/tests/rss1/regression/generate/item/item_about+title+link.in
    trunk/Feed/tests/rss1/regression/generate/item/item_about+title+link.out
    trunk/Feed/tests/rss1/regression/generate/item/item_about+title.in
    trunk/Feed/tests/rss1/regression/generate/item/item_about+title.out
    trunk/Feed/tests/rss1/regression/generate/item/item_about.in
    trunk/Feed/tests/rss1/regression/generate/item/item_about.out
    trunk/Feed/tests/rss1/regression/generate/item/item_empty.in
    trunk/Feed/tests/rss1/regression/generate/item/item_empty.out
    trunk/Feed/tests/rss1/regression/generate/item/item_multiple.in
    trunk/Feed/tests/rss1/regression/generate/item/item_multiple.out
Modified:
    trunk/Feed/src/processors/rss1.php

Modified: trunk/Feed/src/processors/rss1.php
==============================================================================
--- trunk/Feed/src/processors/rss1.php [iso-8859-1] (original)
+++ trunk/Feed/src/processors/rss1.php [iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -69,7 +69,7 @@
         'textInput'    => array( '#'          => 'string',
                                  'ATTRIBUTES' => array( 'resource' => 'string' 
) ),
 
-        'REQUIRED'     => array( 'title', 'link', 'description', 'item' ),
+        'REQUIRED'     => array( 'title', 'link', 'description' ),
         'OPTIONAL'     => array( 'image', 'textinput' ),
 
         'MULTI'        => array( 'items'      => 'item' ),
@@ -99,9 +99,8 @@
         $this->xml->formatOutput = 1;
         $this->createRootElement( '2.0' );
 
-        $this->generateRequired();
-        $this->generateOptional();
-        //$this->generateItems();
+        $this->generateChannel();
+        $this->generateItems();
 
         return $this->xml->saveXML();
     }
@@ -137,7 +136,7 @@
      *
      * @ignore
      */
-    protected function generateRequired()
+    protected function generateChannel()
     {
         foreach ( $this->schema->getRequired() as $element )
         {
@@ -155,105 +154,69 @@
                     $attributes[$attribute] = $data->$attribute;
                 }
             }
-            if ( count( $attributes ) >= 1 )
-            {
-                if ( in_array( $element, array( 'item' ) ) )
+            $this->generateMetaDataWithAttributes( $this->channel, $element, 
$data, $attributes );
+        }
+
+        $items = $this->get( 'items' );
+        if ( count( $items ) === 0 )
+        {
+            throw new ezcFeedRequiredMetaDataMissingException( 'item' );
+        }
+
+        $itemsTag = $this->xml->createElement( 'items' );
+        $this->channel->appendChild( $itemsTag );
+        $seqTag = $this->xml->createElement( 'rdf:Seq' );
+        $itemsTag->appendChild( $seqTag );
+
+        foreach ( $this->get( 'items' ) as $item )
+        {
+            $about = $item->about;
+            $liTag = $this->xml->createElement( 'rdf:li' );
+            $resourceAttr = $this->xml->createAttribute( 'resource' );
+            $resourceVal = $this->xml->createTextNode( $about );
+            $resourceAttr->appendChild( $resourceVal );
+            $liTag->appendChild( $resourceAttr );
+            $seqTag->appendChild( $liTag );
+        }
+    }
+
+    /**
+     * Adds the feed items to the XML document being generated.
+     *
+     * @ignore
+     */
+    protected function generateItems()
+    {
+        foreach ( $this->get( 'items' ) as $element )
+        {
+            $itemTag = $this->xml->createElement( 'item' );
+            $this->root->appendChild( $itemTag );
+
+            $data = $element->about;
+            if ( is_null( $data ) )
+            {
+                throw new ezcFeedRequiredMetaDataMissingException( 'about' );
+            }
+
+            $aboutAttr = $this->xml->createAttribute( 'rdf:about' );
+            $aboutVal = $this->xml->createTextNode( $data );
+            $aboutAttr->appendChild( $aboutVal );
+            $itemTag->appendChild( $aboutAttr );
+
+            foreach ( $this->schema->getRequired( 'item' ) as $attribute )
+            {
+                $data = $element->$attribute;
+
+                if ( is_null( $data ) )
                 {
-                    $this->generateMetaDataWithAttributes( $this->root, 
$element, $data, $attributes );
+                    throw new ezcFeedRequiredMetaDataMissingException( 
$attribute );
                 }
-                else
-                {
-                    $this->generateMetaDataWithAttributes( $this->channel, 
$element, $data, $attributes );
-                }
-            }
-            else
-            {
-                $this->generateMetaData( $this->channel, $element, $data );
-            }
-        }
-    }
-
-    /**
-     * Adds the optional feed elements to the XML document being generated.
-     *
-     * @ignore
-     */
-    protected function generateOptional()
-    {
-        foreach ( $this->schema->getOptional() as $attribute )
-        {
-            $normalizedAttribute = ezcFeedTools::normalizeName( $attribute, 
$this->schema->getElementsMap() );
-            $data = $this->schema->isMulti( $attribute ) ? $this->get( 
$this->schema->getMulti( $attribute ) ) : $this->get( $attribute );
-
-            if ( !is_null( $data ) )
-            {
-                // @todo Add hooks
-                switch ( $attribute )
-                {
-                    case 'published':
-                    case 'updated':
-                        $this->generateMetaData( $this->channel, 
$normalizedAttribute, date( 'D, d M Y H:i:s O', $data ) );
-                        break;
-
-                    default:
-                        $this->generateMetaData( $this->channel, 
$normalizedAttribute, $data );
-                }
-            }
-        }
-    }
-
-    /**
-     * Adds the feed items to the XML document being generated.
-     *
-     * @ignore
-     */
-    protected function generateItems()
-    {
-        foreach ( $this->get( 'items' ) as $item )
-        {
-            $itemTag = $this->xml->createElement( 'item' );
-            $this->channel->appendChild( $itemTag );
-
-            $atLeastOneRequiredFeedItemPresent = false;
-            foreach ( $this->schema->getAtLeastOne( 'item' ) as $attribute )
-            {
-                $data = $this->schema->isMulti( 'item', $attribute ) ? 
$this->get( $this->schema->getMulti( 'item', $attribute ) ) : $item->$attribute;
-                if ( !is_null( $data ) )
-                {
-                    $atLeastOneRequiredFeedItemPresent = true;
-                    break;
-                }
-            }
-
-            if ( $atLeastOneRequiredFeedItemPresent === false )
-            {
-                throw new ezcFeedAtLeastOneItemDataRequiredException( 
$this->schema->getAtLeastOne( 'item' ) );
-            }
-
-            foreach ( $this->schema->getOptional( 'item' ) as $attribute )
-            {
+
+                $data = ( $data instanceof ezcFeedElement ) ? 
$data->__toString() : $data;
                 $normalizedAttribute = ezcFeedTools::normalizeName( 
$attribute, $this->schema->getItemsMap() );
 
-                $metaData = $this->schema->isMulti( 'item', $attribute ) ? 
$this->get( $this->schema->getMulti( 'item', $attribute ) ) : $item->$attribute;
-
-                if ( !is_null( $metaData ) )
-                {
-                    // @todo Add hooks
-                    switch ( $attribute )
-                    {
-                        case 'guid':
-                            $permalink = substr( $metaData, 0, 7 ) === 
'http://' ? "true" : "false";
-                            $this->generateItemDataWithAttributes( $itemTag, 
$normalizedAttribute, $metaData, array( 'isPermaLink' => $permalink ) );
-                            break;
-
-                        case 'published':
-                            $this->generateItemData( $itemTag, 
$normalizedAttribute, date( 'D, d M Y H:i:s O', $metaData ) );
-                            break;
-
-                        default:
-                            $this->generateItemData( $itemTag, 
$normalizedAttribute, $metaData );
-                    }
-                }
+                $attributes = array();
+                $this->generateMetaData( $itemTag, $attribute, $data );
             }
         }
     }

Added: 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description+item.in
==============================================================================
--- 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description+item.in
 (added)
+++ 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description+item.in
 [iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,7 @@
+<?php
+return array( 'title' => 'Feed title',
+              'link' => 'Feed link',
+              'description' => 'Feed description',
+                         'item' => array( array( 'title' => 'Item title' ) ),
+            );
+?>

Added: 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description+item.out
==============================================================================
--- 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description+item.out
 (added)
+++ 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description+item.out
 [iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,1 @@
+There was no data submitted for required channel attribute 'about'.

Added: 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description.in
==============================================================================
--- 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description.in 
(added)
+++ 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description.in 
[iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,6 @@
+<?php
+return array( 'title' => 'Feed title',
+              'link' => 'Feed link',
+              'description' => 'Feed description',
+            );
+?>

Added: 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description.out
==============================================================================
--- 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description.out 
(added)
+++ 
trunk/Feed/tests/rss1/regression/generate/incomplete/title+link+description.out 
[iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,1 @@
+There was no data submitted for required channel attribute 'item'.

Added: trunk/Feed/tests/rss1/regression/generate/incomplete/title+link.in
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/incomplete/title+link.in (added)
+++ trunk/Feed/tests/rss1/regression/generate/incomplete/title+link.in 
[iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,5 @@
+<?php
+return array( 'title' => 'Feed title',
+              'link' => 'Feed link',
+            );
+?>

Added: trunk/Feed/tests/rss1/regression/generate/incomplete/title+link.out
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/incomplete/title+link.out (added)
+++ trunk/Feed/tests/rss1/regression/generate/incomplete/title+link.out 
[iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,1 @@
+There was no data submitted for required channel attribute 'description'.

Added: trunk/Feed/tests/rss1/regression/generate/item/item_about+title+link.in
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/item/item_about+title+link.in 
(added)
+++ trunk/Feed/tests/rss1/regression/generate/item/item_about+title+link.in 
[iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,9 @@
+<?php
+return array( 'title' => 'Feed title',
+              'link' => 'Feed link',
+              'description' => 'Feed description',
+                         'item' => array( array( 'about' => 'Item about',
+                                      'title' => 'Item title',
+                                      'link' => 'Item link' ) ),
+            );
+?>

Added: trunk/Feed/tests/rss1/regression/generate/item/item_about+title+link.out
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/item/item_about+title+link.out 
(added)
+++ trunk/Feed/tests/rss1/regression/generate/item/item_about+title+link.out 
[iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";>
+  <channel>
+    <title>Feed title</title>
+    <link>Feed link</link>
+    <description>Feed description</description>
+    <items>
+      <rdf:Seq>
+        <rdf:li resource="Item about"/>
+      </rdf:Seq>
+    </items>
+  </channel>
+  <item rdf:about="Item about">
+    <title>Item title</title>
+    <link>Item link</link>
+  </item>
+</rdf:RDF>

Added: trunk/Feed/tests/rss1/regression/generate/item/item_about+title.in
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/item/item_about+title.in (added)
+++ trunk/Feed/tests/rss1/regression/generate/item/item_about+title.in 
[iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,8 @@
+<?php
+return array( 'title' => 'Feed title',
+              'link' => 'Feed link',
+              'description' => 'Feed description',
+                         'item' => array( array( 'about' => 'Item about',
+                                      'title' => 'Item title' ) ),
+            );
+?>

Added: trunk/Feed/tests/rss1/regression/generate/item/item_about+title.out
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/item/item_about+title.out (added)
+++ trunk/Feed/tests/rss1/regression/generate/item/item_about+title.out 
[iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,1 @@
+There was no data submitted for required channel attribute 'link'.

Added: trunk/Feed/tests/rss1/regression/generate/item/item_about.in
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/item/item_about.in (added)
+++ trunk/Feed/tests/rss1/regression/generate/item/item_about.in [iso-8859-1] 
Thu Nov  1 13:47:19 2007
@@ -1,0 +1,7 @@
+<?php
+return array( 'title' => 'Feed title',
+              'link' => 'Feed link',
+              'description' => 'Feed description',
+                         'item' => array( array( 'about' => 'Item about' ) ),
+            );
+?>

Added: trunk/Feed/tests/rss1/regression/generate/item/item_about.out
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/item/item_about.out (added)
+++ trunk/Feed/tests/rss1/regression/generate/item/item_about.out [iso-8859-1] 
Thu Nov  1 13:47:19 2007
@@ -1,0 +1,1 @@
+There was no data submitted for required channel attribute 'title'.

Added: trunk/Feed/tests/rss1/regression/generate/item/item_empty.in
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/item/item_empty.in (added)
+++ trunk/Feed/tests/rss1/regression/generate/item/item_empty.in [iso-8859-1] 
Thu Nov  1 13:47:19 2007
@@ -1,0 +1,7 @@
+<?php
+return array( 'title' => 'Feed title',
+              'link' => 'Feed link',
+              'description' => 'Feed description',
+                         'item' => array( array() ),
+            );
+?>

Added: trunk/Feed/tests/rss1/regression/generate/item/item_empty.out
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/item/item_empty.out (added)
+++ trunk/Feed/tests/rss1/regression/generate/item/item_empty.out [iso-8859-1] 
Thu Nov  1 13:47:19 2007
@@ -1,0 +1,1 @@
+There was no data submitted for required channel attribute 'about'.

Added: trunk/Feed/tests/rss1/regression/generate/item/item_multiple.in
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/item/item_multiple.in (added)
+++ trunk/Feed/tests/rss1/regression/generate/item/item_multiple.in 
[iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,12 @@
+<?php
+return array( 'title' => 'Feed title',
+              'link' => 'Feed link',
+              'description' => 'Feed description',
+                         'item' => array( array( 'about' => 'Item about 1',
+                                      'title' => 'Item title 1',
+                                      'link' => 'Item link 1' ),
+                               array( 'about' => 'Item about 2',
+                                      'title' => 'Item title 2',
+                                      'link' => 'Item link 2' ), ),
+            );
+?>

Added: trunk/Feed/tests/rss1/regression/generate/item/item_multiple.out
==============================================================================
--- trunk/Feed/tests/rss1/regression/generate/item/item_multiple.out (added)
+++ trunk/Feed/tests/rss1/regression/generate/item/item_multiple.out 
[iso-8859-1] Thu Nov  1 13:47:19 2007
@@ -1,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";>
+  <channel>
+    <title>Feed title</title>
+    <link>Feed link</link>
+    <description>Feed description</description>
+    <items>
+      <rdf:Seq>
+        <rdf:li resource="Item about 1"/>
+        <rdf:li resource="Item about 2"/>
+      </rdf:Seq>
+    </items>
+  </channel>
+  <item rdf:about="Item about 1">
+    <title>Item title 1</title>
+    <link>Item link 1</link>
+  </item>
+  <item rdf:about="Item about 2">
+    <title>Item title 2</title>
+    <link>Item link 2</link>
+  </item>
+</rdf:RDF>


-- 
svn-components mailing list
svn-components@lists.ez.no
http://lists.ez.no/mailman/listinfo/svn-components

Reply via email to