Author: as
Date: Thu Nov 15 16:13:38 2007
New Revision: 6740

Log:
- Added support for the type attribute of entry/title in ATOM.

Added:
    trunk/Feed/tests/atom/regression/generate/entry/title/
    trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.in
    trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.out
    trunk/Feed/tests/atom/regression/generate/entry/title/type_html.in
    trunk/Feed/tests/atom/regression/generate/entry/title/type_html.out
    trunk/Feed/tests/atom/regression/generate/entry/title/type_text.in
    trunk/Feed/tests/atom/regression/generate/entry/title/type_text.out
    trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.in
    trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.out
    trunk/Feed/tests/atom/regression/parse/entry/title/
    trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.in
    trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.out
    trunk/Feed/tests/atom/regression/parse/entry/title/type_html.in
    trunk/Feed/tests/atom/regression/parse/entry/title/type_html.out
    trunk/Feed/tests/atom/regression/parse/entry/title/type_text.in
    trunk/Feed/tests/atom/regression/parse/entry/title/type_text.out
    trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.in
    trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.out
Modified:
    trunk/Feed/src/processors/atom.php

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] Thu Nov 15 16:13:38 2007
@@ -263,7 +263,7 @@
                         $dataNode->set( date( "c", (int)$dataNode->get() ) );
                         break;
                 }
-                $this->generateNode( $this->channel, $element, $dataNode );
+                $this->generateNode( $this->channel, $element, null, $dataNode 
);
 
             }
         }
@@ -359,14 +359,14 @@
 
                             }
 
-                            $this->generateNode( $this->channel, $element, 
$dataNode );
+                            $this->generateNode( $this->channel, $element, 
null, $dataNode );
                         }
                         break;
 
                     default:
                         foreach ( $data as $dataNode )
                         {
-                            $this->generateNode( $this->channel, $element, 
$dataNode );
+                            $this->generateNode( $this->channel, $element, 
null, $dataNode );
                         }
                         break;
                 }
@@ -379,18 +379,27 @@
      *
      * @param DOMNode $root The root in which to create the node $element
      * @param string $element The name of the node to create
+     * @param string $parent The name of the parent node which contains the 
node $element
      * @param array(string=>mixed) $dataNode The data for the node to create
      * @ignore
      */
-    protected function generateNode( DOMNode $root, $element, $dataNode )
+    protected function generateNode( DOMNode $root, $element, $parent = null, 
$dataNode )
     {
         $elementTag = $this->xml->createElement( $element );
         $root->appendChild( $elementTag );
 
+        $subElement = $parent;
+
+        if ( $parent !== null )
+        {
+            $subElement = $element;
+            $element = $parent;
+        }
+
         $attributes = array();
-        $required = $this->schema->getRequiredAttributes( $element );
-
-        foreach ( $this->schema->getAttributes( $element ) as $attribute => 
$type )
+        $required = $this->schema->getRequiredAttributes( $element, 
$subElement );
+
+        foreach ( $this->schema->getAttributes( $element, $subElement ) as 
$attribute => $type )
         {
             if ( isset( $dataNode->$attribute ) )
             {
@@ -433,7 +442,7 @@
             }
         }
 
-        if ( !$this->schema->isEmpty( $element ) )
+        if ( !$this->schema->isEmpty( $element, $subElement ) )
         {
             $elementTag->nodeValue = $dataNode;
         }
@@ -504,9 +513,18 @@
                 switch ( $element )
                 {
                     case 'id':
+                        $dataNode = $data;
+                        $this->generateNode( $entryTag, $element, null, 
$dataNode );
+                        break;
+
                     case 'title':
                         $dataNode = $data;
-                        $this->generateNode( $entryTag, $element, $dataNode );
+                        if ( is_array( $data ) )
+                        {
+                            $dataNode = $data[0];
+                        }
+
+                        $this->generateNode( $entryTag, $element, $parent, 
$dataNode );
                         break;
 
                     case 'updated':
@@ -514,7 +532,7 @@
 
                         // Sample date: 2003-12-13T18:30:02-05:00
                         $dataNode->set( date( "c", (int)$dataNode->get() ) );
-                        $this->generateNode( $entryTag, $element, $dataNode );
+                        $this->generateNode( $entryTag, $element, null, 
$dataNode );
                         break;
                 }
             }
@@ -559,7 +577,7 @@
 
                                 }
 
-                                $this->generateNode( $entryTag, $element, 
$dataNode );
+                                $this->generateNode( $entryTag, $element, 
null, $dataNode );
                             }
                             break;
                 }
@@ -711,8 +729,39 @@
                 switch ( $tagName )
                 {
                     case 'id':
+                        $element->$tagName = $itemChild->textContent;
+                        break;
+
                     case 'title':
-                        $element->$tagName = $itemChild->textContent;
+                        $type = ezcFeedTools::getAttribute( $itemChild, 'type' 
);
+
+                        switch ( $type )
+                        {
+                            case 'xhtml':
+                                $nodes = $itemChild->childNodes;
+                                if ( $nodes instanceof DOMNodeList )
+                                {
+                                    $contentNode = $nodes->item( 1 );
+                                    $element->$tagName = 
$contentNode->nodeValue;
+                                }
+                                $element->$tagName->type = $type;
+                                break;
+
+                            case 'html':
+                                $element->$tagName = $itemChild->textContent;
+                                $element->$tagName->type = $type;
+                                break;
+
+                            case 'text':
+                                $element->$tagName = $itemChild->textContent;
+                                $element->$tagName->type = $type;
+                                break;
+
+                            default:
+                                $element->$tagName = $itemChild->textContent;
+                                break;
+                        }
+
                         break;
 
                     case 'updated':

Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.in
==============================================================================
--- trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.in (added)
+++ trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.in 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,9 @@
+<?php
+return array( 'id' => 'Feed id',
+              'title' => array( array( '#' => 'Feed title' ) ),
+              'updated' => 'Feed updated',
+              'author' => array( array( 'name' => 'Author name' ) ),
+              'item' => array( array( 'id' => 'Entry id',
+                                      'title' => array( array( '#' => 'Entry 
title' ) ),
+                                      'updated' => 'Entry updated' ) ) );
+?>

Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.out
==============================================================================
--- trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.out 
(added)
+++ trunk/Feed/tests/atom/regression/generate/entry/title/type_absent.out 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom";>
+  <id>Feed id</id>
+  <title>Feed title</title>
+  <updated>XXX</updated>
+  <author>
+    <name>Author name</name>
+  </author>
+  <entry>
+    <id>Entry id</id>
+    <title>Entry title</title>
+    <updated>XXX</updated>
+  </entry>
+</feed> 

Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_html.in
==============================================================================
--- trunk/Feed/tests/atom/regression/generate/entry/title/type_html.in (added)
+++ trunk/Feed/tests/atom/regression/generate/entry/title/type_html.in 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,10 @@
+<?php
+return array( 'id' => 'Feed id',
+              'title' => array( array( '#' => 'Feed title' ) ),
+              'updated' => 'Feed updated',
+              'author' => array( array( 'name' => 'Author name' ) ),
+              'item' => array( array( 'id' => 'Entry id',
+                                      'title' => array( array( '#' => 'Entry 
title',
+                                                               'type' => 
'html' ) ),
+                                      'updated' => 'Entry updated' ) ) );
+?>

Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_html.out
==============================================================================
--- trunk/Feed/tests/atom/regression/generate/entry/title/type_html.out (added)
+++ trunk/Feed/tests/atom/regression/generate/entry/title/type_html.out 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom";>
+  <id>Feed id</id>
+  <title>Feed title</title>
+  <updated>XXX</updated>
+  <author>
+    <name>Author name</name>
+  </author>
+  <entry>
+    <id>Entry id</id>
+    <title type="html">Entry title</title>
+    <updated>XXX</updated>
+  </entry>
+</feed> 

Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_text.in
==============================================================================
--- trunk/Feed/tests/atom/regression/generate/entry/title/type_text.in (added)
+++ trunk/Feed/tests/atom/regression/generate/entry/title/type_text.in 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,10 @@
+<?php
+return array( 'id' => 'Feed id',
+              'title' => array( array( '#' => 'Feed title' ) ),
+              'updated' => 'Feed updated',
+              'author' => array( array( 'name' => 'Author name' ) ),
+              'item' => array( array( 'id' => 'Entry id',
+                                      'title' => array( array( '#' => 'Entry 
title',
+                                                               'type' => 
'text' ) ),
+                                      'updated' => 'Entry updated' ) ) );
+?>

Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_text.out
==============================================================================
--- trunk/Feed/tests/atom/regression/generate/entry/title/type_text.out (added)
+++ trunk/Feed/tests/atom/regression/generate/entry/title/type_text.out 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom";>
+  <id>Feed id</id>
+  <title>Feed title</title>
+  <updated>XXX</updated>
+  <author>
+    <name>Author name</name>
+  </author>
+  <entry>
+    <id>Entry id</id>
+    <title type="text">Entry title</title>
+    <updated>XXX</updated>
+  </entry>
+</feed> 

Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.in
==============================================================================
--- trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.in (added)
+++ trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.in 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,10 @@
+<?php
+return array( 'id' => 'Feed id',
+              'title' => array( array( '#' => 'Feed title' ) ),
+              'updated' => 'Feed updated',
+              'author' => array( array( 'name' => 'Author name' ) ),
+              'item' => array( array( 'id' => 'Entry id',
+                                      'title' => array( array( '#' => 'Entry 
title',
+                                                               'type' => 
'xhtml' ) ),
+                                      'updated' => 'Entry updated' ) ) );
+?>

Added: trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.out
==============================================================================
--- trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.out (added)
+++ trunk/Feed/tests/atom/regression/generate/entry/title/type_xhtml.out 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom";>
+  <id>Feed id</id>
+  <title>Feed title</title>
+  <updated>XXX</updated>
+  <author>
+    <name>Author name</name>
+  </author>
+  <entry>
+    <id>Entry id</id>
+    <title type="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml";>
+      <xhtml:div>Entry title</xhtml:div>
+    </title>
+    <updated>XXX</updated>
+  </entry>
+</feed> 

Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.in
==============================================================================
--- trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.in (added)
+++ trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.in 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,11 @@
+<?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>
+  <entry>
+    <id>Entry id</id>
+    <title>Entry title</title>
+    <updated>2007-11-14T16:23:40+01:00</updated>
+  </entry>
+</feed>

Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.out
==============================================================================
--- trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.out (added)
+++ trunk/Feed/tests/atom/regression/parse/entry/title/type_absent.out 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,15 @@
+<?php
+$feed = new ezcFeed( 'atom' );
+
+$feed->id = 'Feed id';
+$feed->title = 'Feed title';
+$feed->title->type = 'text';
+$feed->updated = 'Feed updated';
+
+$entry = $feed->add( 'entry' );
+$entry->id = 'Entry id';
+$entry->title = 'Entry title';
+$entry->updated = 1195053820;
+
+return $feed;
+?>

Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_html.in
==============================================================================
--- trunk/Feed/tests/atom/regression/parse/entry/title/type_html.in (added)
+++ trunk/Feed/tests/atom/regression/parse/entry/title/type_html.in 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,11 @@
+<?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>
+  <entry>
+    <id>Entry id</id>
+    <title type="html">Entry title</title>
+    <updated>2007-11-14T16:23:40+01:00</updated>
+  </entry>
+</feed>

Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_html.out
==============================================================================
--- trunk/Feed/tests/atom/regression/parse/entry/title/type_html.out (added)
+++ trunk/Feed/tests/atom/regression/parse/entry/title/type_html.out 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,16 @@
+<?php
+$feed = new ezcFeed( 'atom' );
+
+$feed->id = 'Feed id';
+$feed->title = 'Feed title';
+$feed->title->type = 'text';
+$feed->updated = 'Feed updated';
+
+$entry = $feed->add( 'entry' );
+$entry->id = 'Entry id';
+$entry->title = 'Entry title';
+$entry->title->type = 'html';
+$entry->updated = 1195053820;
+
+return $feed;
+?>

Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_text.in
==============================================================================
--- trunk/Feed/tests/atom/regression/parse/entry/title/type_text.in (added)
+++ trunk/Feed/tests/atom/regression/parse/entry/title/type_text.in 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,11 @@
+<?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>
+  <entry>
+    <id>Entry id</id>
+    <title type="text">Entry title</title>
+    <updated>2007-11-14T16:23:40+01:00</updated>
+  </entry>
+</feed>

Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_text.out
==============================================================================
--- trunk/Feed/tests/atom/regression/parse/entry/title/type_text.out (added)
+++ trunk/Feed/tests/atom/regression/parse/entry/title/type_text.out 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,16 @@
+<?php
+$feed = new ezcFeed( 'atom' );
+
+$feed->id = 'Feed id';
+$feed->title = 'Feed title';
+$feed->title->type = 'text';
+$feed->updated = 'Feed updated';
+
+$entry = $feed->add( 'entry' );
+$entry->id = 'Entry id';
+$entry->title = 'Entry title';
+$entry->title->type = 'text';
+$entry->updated = 1195053820;
+
+return $feed;
+?>

Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.in
==============================================================================
--- trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.in (added)
+++ trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.in 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,13 @@
+<?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>
+  <entry>
+    <id>Entry id</id>
+    <title type="xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml";>
+      <xhtml:div>Entry title</xhtml:div>
+    </title>
+    <updated>2007-11-14T16:23:40+01:00</updated>
+  </entry>
+</feed>

Added: trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.out
==============================================================================
--- trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.out (added)
+++ trunk/Feed/tests/atom/regression/parse/entry/title/type_xhtml.out 
[iso-8859-1] Thu Nov 15 16:13:38 2007
@@ -1,0 +1,16 @@
+<?php
+$feed = new ezcFeed( 'atom' );
+
+$feed->id = 'Feed id';
+$feed->title = 'Feed title';
+$feed->title->type = 'text';
+$feed->updated = 'Feed updated';
+
+$entry = $feed->add( 'entry' );
+$entry->id = 'Entry id';
+$entry->title = 'Entry title';
+$entry->title->type = 'xhtml';
+$entry->updated = 1195053820;
+
+return $feed;
+?>


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

Reply via email to