Author: as Date: Fri Nov 2 16:49:21 2007 New Revision: 6674 Log: - Added support for the 'type' attribute of 'title' RSS1 feed element (generate).
Added: trunk/Feed/tests/atom/regression/generate/optional/ trunk/Feed/tests/atom/regression/generate/required/ trunk/Feed/tests/atom/regression/generate/required/title/ trunk/Feed/tests/atom/regression/generate/required/title/type_empty.in trunk/Feed/tests/atom/regression/generate/required/title/type_empty.out trunk/Feed/tests/atom/regression/generate/required/title/type_html.in trunk/Feed/tests/atom/regression/generate/required/title/type_html.out trunk/Feed/tests/atom/regression/generate/required/title/type_text.in trunk/Feed/tests/atom/regression/generate/required/title/type_text.out trunk/Feed/tests/atom/regression/generate/required/title/type_xhtml.in trunk/Feed/tests/atom/regression/generate/required/title/type_xhtml.out Modified: trunk/Feed/src/interfaces/processor.php trunk/Feed/src/processors/atom.php Modified: trunk/Feed/src/interfaces/processor.php ============================================================================== --- trunk/Feed/src/interfaces/processor.php [iso-8859-1] (original) +++ trunk/Feed/src/interfaces/processor.php [iso-8859-1] Fri Nov 2 16:49:21 2007 @@ -144,6 +144,21 @@ } /** + * Adds an attribute to the XML node $node. + * + * @param DOMNode $node The node to add the attribute to + * @param string $attribute The name of the attribute to add + * @param mixed $value The value of the attribute + */ + public function addAttribute( DOMNode $node, $attribute, $value ) + { + $attr = $this->xml->createAttribute( $attribute ); + $val = $this->xml->createTextNode( $value ); + $attr->appendChild( $val ); + $node->appendChild( $attr ); + } + + /** * Sets the value of element $name to $value based on the feed schema. * * @param string $name The element name 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] Fri Nov 2 16:49:21 2007 @@ -32,38 +32,45 @@ * @ignore */ protected static $atomSchema = array( - 'id' => array( '#' => 'string' ), - 'title' => array( '#' => 'string' ), - 'updated' => array( '#' => 'string' ), - - 'author' => array( '#' => 'string' ), - 'link' => array( '#' => 'string' ), - 'category' => array( '#' => 'string' ), - 'contributor' => array( '#' => 'none', - 'NODES' => array( - 'name' => 'string' - ), - - 'MULTI' => 'contributors' ), - - 'generator' => array( '#' => 'string', - 'ATTRIBUTES' => array( 'uri' => 'string', - 'version' => 'string' ), ), - - 'icon' => array( '#' => 'string' ), - 'logo' => array( '#' => 'string' ), - 'rights' => array( '#' => 'string' ), - 'subtitle' => array( '#' => 'string' ), - - 'REQUIRED' => array( 'id', 'title', 'updated' ), - 'OPTIONAL' => array( 'author', 'link', 'category', - 'contributor', 'generator', 'icon', - 'logo', 'rights', 'subtitle' ), - - 'ELEMENTS_MAP' => array( 'image' => 'logo', - 'copyright' => 'rights', - 'description' => 'subtitle', - 'item' => 'entry' ), + 'id' => array( '#' => 'string' ), + 'title' => array( '#' => 'string', + 'ATTRIBUTES' => array( 'type' => 'string' ), ), + + 'updated' => array( '#' => 'string' ), + + 'author' => array( '#' => 'string' ), + 'link' => array( '#' => 'string' ), + 'category' => array( '#' => 'string' ), + 'contributor' => array( '#' => 'none', + 'NODES' => array( + 'name' => 'string', + 'email' => 'string', + 'uri' => 'string', + ), + + 'REQUIRED' => array( 'name' ), + 'OPTIONAL' => array( 'email', 'uri' ), + + 'MULTI' => 'contributors' ), + + 'generator' => array( '#' => 'string', + 'ATTRIBUTES' => array( 'uri' => 'string', + 'version' => 'string' ), ), + + 'icon' => array( '#' => 'string' ), + 'logo' => array( '#' => 'string' ), + 'rights' => array( '#' => 'string' ), + 'subtitle' => array( '#' => 'string' ), + + 'REQUIRED' => array( 'id', 'title', 'updated' ), + 'OPTIONAL' => array( 'author', 'link', 'category', + 'contributor', 'generator', 'icon', + 'logo', 'rights', 'subtitle' ), + + 'ELEMENTS_MAP' => array( 'image' => 'logo', + 'copyright' => 'rights', + 'description' => 'subtitle', + 'item' => 'entry' ), ); /** @@ -126,9 +133,62 @@ foreach ( $data as $dataNode ) { - $this->generateMetaData( $this->channel, $element, $dataNode ); + $this->generateNode( $this->channel, $element, $dataNode ); + } } + } + + /** + * Creates an XML node in the XML document being generated. + * + * @param DOMNode $root The root in which to create the node $element + * @param string $element The name of the node to create + * @param array(string=>mixed) $dataNode The data for the node to create + * @ignore + */ + protected function generateNode( DOMNode $root, $element, $dataNode ) + { + $elementTag = $this->xml->createElement( $element ); + $root->appendChild( $elementTag ); + + $attributes = array(); + foreach ( $this->schema->getAttributes( $element ) as $attribute => $type ) + { + if ( isset( $dataNode->$attribute ) ) + { + $val = $dataNode->$attribute; + if ( $attribute === 'type' ) + { + switch ( $val ) + { + case 'html': + $dataNode->set( htmlspecialchars( $dataNode ) ); + $this->addAttribute( $elementTag, 'type', $val ); + break; + + case 'xhtml': + $this->addAttribute( $elementTag, 'type', $val ); + $this->addAttribute( $elementTag, 'xmlns:xhtml', 'http://www.w3.org/1999/xhtml' ); + $xhtmlTag = $this->xml->createElement( 'xhtml:div', $dataNode->__toString() ); + $elementTag->appendChild( $xhtmlTag ); + $elementTag = $xhtmlTag; + break; + + case 'text': + default: + $val = 'text'; + $this->addAttribute( $elementTag, 'type', $val ); + break; + + } + } + + + } + } + + $elementTag->nodeValue = $dataNode; } /** Added: trunk/Feed/tests/atom/regression/generate/required/title/type_empty.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/required/title/type_empty.in (added) +++ trunk/Feed/tests/atom/regression/generate/required/title/type_empty.in [iso-8859-1] Fri Nov 2 16:49:21 2007 @@ -1,0 +1,6 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title', + 'type' => '' ) ), + 'updated' => 'Feed updated' ); +?> Added: trunk/Feed/tests/atom/regression/generate/required/title/type_empty.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/required/title/type_empty.out (added) +++ trunk/Feed/tests/atom/regression/generate/required/title/type_empty.out [iso-8859-1] Fri Nov 2 16:49:21 2007 @@ -1,0 +1,6 @@ +<?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> +</feed> Added: trunk/Feed/tests/atom/regression/generate/required/title/type_html.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/required/title/type_html.in (added) +++ trunk/Feed/tests/atom/regression/generate/required/title/type_html.in [iso-8859-1] Fri Nov 2 16:49:21 2007 @@ -1,0 +1,6 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title', + 'type' => 'html' ) ), + 'updated' => 'Feed updated' ); +?> Added: trunk/Feed/tests/atom/regression/generate/required/title/type_html.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/required/title/type_html.out (added) +++ trunk/Feed/tests/atom/regression/generate/required/title/type_html.out [iso-8859-1] Fri Nov 2 16:49:21 2007 @@ -1,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>Feed id</id> + <title type="html">Feed title</title> + <updated>Feed updated</updated> +</feed> Added: trunk/Feed/tests/atom/regression/generate/required/title/type_text.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/required/title/type_text.in (added) +++ trunk/Feed/tests/atom/regression/generate/required/title/type_text.in [iso-8859-1] Fri Nov 2 16:49:21 2007 @@ -1,0 +1,6 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title', + 'type' => 'text' ) ), + 'updated' => 'Feed updated' ); +?> Added: trunk/Feed/tests/atom/regression/generate/required/title/type_text.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/required/title/type_text.out (added) +++ trunk/Feed/tests/atom/regression/generate/required/title/type_text.out [iso-8859-1] Fri Nov 2 16:49:21 2007 @@ -1,0 +1,6 @@ +<?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> +</feed> Added: trunk/Feed/tests/atom/regression/generate/required/title/type_xhtml.in ============================================================================== --- trunk/Feed/tests/atom/regression/generate/required/title/type_xhtml.in (added) +++ trunk/Feed/tests/atom/regression/generate/required/title/type_xhtml.in [iso-8859-1] Fri Nov 2 16:49:21 2007 @@ -1,0 +1,6 @@ +<?php +return array( 'id' => 'Feed id', + 'title' => array( array( '#' => 'Feed title', + 'type' => 'xhtml' ) ), + 'updated' => 'Feed updated' ); +?> Added: trunk/Feed/tests/atom/regression/generate/required/title/type_xhtml.out ============================================================================== --- trunk/Feed/tests/atom/regression/generate/required/title/type_xhtml.out (added) +++ trunk/Feed/tests/atom/regression/generate/required/title/type_xhtml.out [iso-8859-1] Fri Nov 2 16:49:21 2007 @@ -1,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>Feed id</id> + <title type="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"> + <xhtml:div>Feed title</xhtml:div> + </title> + <updated>Feed updated</updated> +</feed> -- svn-components mailing list svn-components@lists.ez.no http://lists.ez.no/mailman/listinfo/svn-components