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

Reply via email to