Просмотр исходного кода

Zend_Feed_Writer: Changes namespace additions to output, so that only namespaces actually required are appended instead of all of them. Makes feeds look a bit neater though the old behaviour was harmless ;).

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20325 44c647ce-9c0f-0410-b52a-842ac1e357ba
padraic 16 лет назад
Родитель
Сommit
bdef839ae4

+ 15 - 1
library/Zend/Feed/Writer/Extension/Atom/Renderer/Feed.php

@@ -33,6 +33,16 @@ require_once 'Zend/Feed/Writer/Extension/RendererAbstract.php';
 class Zend_Feed_Writer_Extension_Atom_Renderer_Feed
     extends Zend_Feed_Writer_Extension_RendererAbstract
 {
+
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $_called = false;
+    
     /**
      * Render feed
      * 
@@ -47,9 +57,11 @@ class Zend_Feed_Writer_Extension_Atom_Renderer_Feed
         if (strtolower($this->getType()) == 'atom') {
             return;
         }
-        $this->_appendNamespaces();
         $this->_setFeedLinks($this->_dom, $this->_base);
         $this->_setHubs($this->_dom, $this->_base);
+        if ($this->_called) {
+            $this->_appendNamespaces();
+        }
     }
     
     /**
@@ -84,6 +96,7 @@ class Zend_Feed_Writer_Extension_Atom_Renderer_Feed
             $flink->setAttribute('type', $mime);
             $flink->setAttribute('href', $href);
         }
+        $this->_called = true;
     }
     
     /**
@@ -105,5 +118,6 @@ class Zend_Feed_Writer_Extension_Atom_Renderer_Feed
             $hub->setAttribute('href', $hubUrl);
             $root->appendChild($hub);
         }
+        $this->_called = true;
     }
 }

+ 14 - 1
library/Zend/Feed/Writer/Extension/Content/Renderer/Entry.php

@@ -33,6 +33,16 @@ require_once 'Zend/Feed/Writer/Extension/RendererAbstract.php';
 class Zend_Feed_Writer_Extension_Content_Renderer_Entry
     extends Zend_Feed_Writer_Extension_RendererAbstract
 {
+
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $_called = false;
+    
     /**
      * Render entry
      * 
@@ -43,8 +53,10 @@ class Zend_Feed_Writer_Extension_Content_Renderer_Entry
         if (strtolower($this->getType()) == 'atom') {
             return;
         }
-        $this->_appendNamespaces();
         $this->_setContent($this->_dom, $this->_base);
+        if ($this->_called) {
+            $this->_appendNamespaces();
+        }
     }
     
     /**
@@ -75,5 +87,6 @@ class Zend_Feed_Writer_Extension_Content_Renderer_Entry
         $root->appendChild($element);
         $cdata = $dom->createCDATASection($content);
         $element->appendChild($cdata);
+        $this->_called = true;
     }
 }

+ 14 - 1
library/Zend/Feed/Writer/Extension/DublinCore/Renderer/Entry.php

@@ -33,6 +33,16 @@ require_once 'Zend/Feed/Writer/Extension/RendererAbstract.php';
 class Zend_Feed_Writer_Extension_DublinCore_Renderer_Entry
     extends Zend_Feed_Writer_Extension_RendererAbstract
 {
+
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $_called = false;
+    
     /**
      * Render entry
      * 
@@ -43,8 +53,10 @@ class Zend_Feed_Writer_Extension_DublinCore_Renderer_Entry
         if (strtolower($this->getType()) == 'atom') {
             return;
         }
-        $this->_appendNamespaces();
         $this->_setAuthors($this->_dom, $this->_base);
+        if ($this->_called) {
+            $this->_appendNamespaces();
+        }
     }
     
     /**
@@ -79,5 +91,6 @@ class Zend_Feed_Writer_Extension_DublinCore_Renderer_Entry
                 $root->appendChild($author);   
             }
         }
+        $this->_called = true;
     }
 }

+ 14 - 1
library/Zend/Feed/Writer/Extension/DublinCore/Renderer/Feed.php

@@ -33,6 +33,16 @@ require_once 'Zend/Feed/Writer/Extension/RendererAbstract.php';
 class Zend_Feed_Writer_Extension_DublinCore_Renderer_Feed
     extends Zend_Feed_Writer_Extension_RendererAbstract
 {
+
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $_called = false;
+    
     /**
      * Render feed
      * 
@@ -43,8 +53,10 @@ class Zend_Feed_Writer_Extension_DublinCore_Renderer_Feed
         if (strtolower($this->getType()) == 'atom') {
             return;
         }
-        $this->_appendNamespaces();
         $this->_setAuthors($this->_dom, $this->_base);
+        if ($this->_called) {
+            $this->_appendNamespaces();
+        }
     }
     
     /**
@@ -79,5 +91,6 @@ class Zend_Feed_Writer_Extension_DublinCore_Renderer_Feed
                 $root->appendChild($author);  
             }
         }
+        $this->_called = true;
     }
 }

+ 19 - 1
library/Zend/Feed/Writer/Extension/ITunes/Renderer/Entry.php

@@ -34,13 +34,21 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Entry
     extends Zend_Feed_Writer_Extension_RendererAbstract
 {
     /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $_called = false;
+    
+    /**
      * Render entry
      * 
      * @return void
      */
     public function render()
     {
-        $this->_appendNamespaces();
         $this->_setAuthors($this->_dom, $this->_base);
         $this->_setBlock($this->_dom, $this->_base);
         $this->_setDuration($this->_dom, $this->_base);
@@ -48,6 +56,9 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Entry
         $this->_setKeywords($this->_dom, $this->_base);
         $this->_setSubtitle($this->_dom, $this->_base);
         $this->_setSummary($this->_dom, $this->_base);
+        if ($this->_called) {
+            $this->_appendNamespaces();
+        }
     }
     
     /**
@@ -79,6 +90,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Entry
             $text = $dom->createTextNode($author);
             $el->appendChild($text);
             $root->appendChild($el);
+            $this->_called = true;
         }
     }
     
@@ -99,6 +111,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Entry
         $text = $dom->createTextNode($block);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -118,6 +131,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Entry
         $text = $dom->createTextNode($duration);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -137,6 +151,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Entry
         $text = $dom->createTextNode($explicit);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -156,6 +171,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Entry
         $text = $dom->createTextNode(implode(',', $keywords));
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -175,6 +191,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Entry
         $text = $dom->createTextNode($subtitle);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -194,5 +211,6 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Entry
         $text = $dom->createTextNode($summary);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
 }

+ 24 - 1
library/Zend/Feed/Writer/Extension/ITunes/Renderer/Feed.php

@@ -33,6 +33,16 @@ require_once 'Zend/Feed/Writer/Extension/RendererAbstract.php';
 class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
     extends Zend_Feed_Writer_Extension_RendererAbstract
 {
+    
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $_called = false;
+    
     /**
      * Render feed
      * 
@@ -40,7 +50,6 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
      */
     public function render()
     {
-        $this->_appendNamespaces();
         $this->_setAuthors($this->_dom, $this->_base);
         $this->_setBlock($this->_dom, $this->_base);
         $this->_setCategories($this->_dom, $this->_base);
@@ -52,6 +61,9 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
         $this->_setOwners($this->_dom, $this->_base);
         $this->_setSubtitle($this->_dom, $this->_base);
         $this->_setSummary($this->_dom, $this->_base);
+        if ($this->_called) {
+            $this->_appendNamespaces();
+        }
     }
     
     /**
@@ -84,6 +96,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
             $el->appendChild($text);
             $root->appendChild($el);
         }
+        $this->_called = true;
     }
     
     /**
@@ -103,6 +116,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
         $text = $dom->createTextNode($block);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -134,6 +148,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
                 }
             }
         }
+        $this->_called = true;
     }
     
     /**
@@ -152,6 +167,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
         $el = $dom->createElement('itunes:image');
         $el->setAttribute('href', $image);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -171,6 +187,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
         $text = $dom->createTextNode($duration);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -190,6 +207,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
         $text = $dom->createTextNode($explicit);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -209,6 +227,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
         $text = $dom->createTextNode(implode(',', $keywords));
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -228,6 +247,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
         $text = $dom->createTextNode($url);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -255,6 +275,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
             $el->appendChild($name);
             $el->appendChild($email);
         }
+        $this->_called = true;
     }
     
     /**
@@ -274,6 +295,7 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
         $text = $dom->createTextNode($subtitle);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
     
     /**
@@ -293,5 +315,6 @@ class Zend_Feed_Writer_Extension_ITunes_Renderer_Feed
         $text = $dom->createTextNode($summary);
         $el->appendChild($text);
         $root->appendChild($el);
+        $this->_called = true;
     }
 }

+ 14 - 1
library/Zend/Feed/Writer/Extension/Slash/Renderer/Entry.php

@@ -33,6 +33,16 @@ require_once 'Zend/Feed/Writer/Extension/RendererAbstract.php';
 class Zend_Feed_Writer_Extension_Slash_Renderer_Entry
     extends Zend_Feed_Writer_Extension_RendererAbstract
 {
+
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $_called = false;
+    
     /**
      * Render entry
      * 
@@ -43,8 +53,10 @@ class Zend_Feed_Writer_Extension_Slash_Renderer_Entry
         if (strtolower($this->getType()) == 'atom') {
             return; // RSS 2.0 only
         }
-        $this->_appendNamespaces();
         $this->_setCommentCount($this->_dom, $this->_base);
+        if ($this->_called) {
+            $this->_appendNamespaces();
+        }
     }
     
     /**
@@ -74,5 +86,6 @@ class Zend_Feed_Writer_Extension_Slash_Renderer_Entry
         $tcount = $this->_dom->createElement('slash:comments');
         $tcount->nodeValue = $count;
         $root->appendChild($tcount);
+        $this->_called = true;
     }
 }

+ 16 - 1
library/Zend/Feed/Writer/Extension/Threading/Renderer/Entry.php

@@ -33,6 +33,16 @@ require_once 'Zend/Feed/Writer/Extension/RendererAbstract.php';
 class Zend_Feed_Writer_Extension_Threading_Renderer_Entry
     extends Zend_Feed_Writer_Extension_RendererAbstract
 {
+
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $_called = false;
+    
     /**
      * Render entry
      * 
@@ -43,10 +53,12 @@ class Zend_Feed_Writer_Extension_Threading_Renderer_Entry
         if (strtolower($this->getType()) == 'rss') {
             return; // Atom 1.0 only
         }
-        $this->_appendNamespaces();
         $this->_setCommentLink($this->_dom, $this->_base);
         $this->_setCommentFeedLinks($this->_dom, $this->_base);
         $this->_setCommentCount($this->_dom, $this->_base);
+        if ($this->_called) {
+            $this->_appendNamespaces();
+        }
     }
     
     /**
@@ -82,6 +94,7 @@ class Zend_Feed_Writer_Extension_Threading_Renderer_Entry
             $clink->setAttribute('thr:count', $count);
         }
         $root->appendChild($clink);
+        $this->_called = true;
     }
     
     /**
@@ -107,6 +120,7 @@ class Zend_Feed_Writer_Extension_Threading_Renderer_Entry
                 $flink->setAttribute('thr:count', $count);
             }
             $root->appendChild($flink);
+            $this->_called = true;
         }
     }
 
@@ -126,5 +140,6 @@ class Zend_Feed_Writer_Extension_Threading_Renderer_Entry
         $tcount = $this->_dom->createElement('thr:total');
         $tcount->nodeValue = $count;
         $root->appendChild($tcount);
+        $this->_called = true;
     }
 }

+ 14 - 1
library/Zend/Feed/Writer/Extension/WellFormedWeb/Renderer/Entry.php

@@ -33,6 +33,16 @@ require_once 'Zend/Feed/Writer/Extension/RendererAbstract.php';
 class Zend_Feed_Writer_Extension_WellFormedWeb_Renderer_Entry
     extends Zend_Feed_Writer_Extension_RendererAbstract
 {
+
+    /**
+     * Set to TRUE if a rendering method actually renders something. This
+     * is used to prevent premature appending of a XML namespace declaration
+     * until an element which requires it is actually appended.
+     *
+     * @var bool
+     */
+    protected $_called = false;
+    
     /**
      * Render entry
      * 
@@ -43,8 +53,10 @@ class Zend_Feed_Writer_Extension_WellFormedWeb_Renderer_Entry
         if (strtolower($this->getType()) == 'atom') {
             return; // RSS 2.0 only
         }
-        $this->_appendNamespaces();
         $this->_setCommentFeedLinks($this->_dom, $this->_base);
+        if ($this->_called) {
+            $this->_appendNamespaces();
+        }
     }
     
     /**
@@ -79,5 +91,6 @@ class Zend_Feed_Writer_Extension_WellFormedWeb_Renderer_Entry
                 $root->appendChild($flink);
             }
         }
+        $this->_called = true;
     }
 }