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