diff --git a/cake/libs/view/helpers/rss.php b/cake/libs/view/helpers/rss.php index b6c773d0f..ae1ab6239 100644 --- a/cake/libs/view/helpers/rss.php +++ b/cake/libs/view/helpers/rss.php @@ -315,8 +315,9 @@ class RssHelper extends AppHelper { if (!empty($namespace)) { $xml .= ' xmlns:"' . $namespace . '"'; } + $bareName = $name; if (strpos($name, ':') !== false) { - list($prefix, ) = explode(':', $name, 2); + list($prefix, $bareName) = explode(':', $name, 2); switch ($prefix) { case 'atom': $xml .= ' xmlns:atom="http://www.w3.org/2005/Atom"'; @@ -327,15 +328,17 @@ class RssHelper extends AppHelper { $content = ''; } $xml .= '>' . $content . ''; - $elem = Xml::build($xml); + $elem = Xml::build($xml, array('return' => 'domdocument')); + $nodes = $elem->getElementsByTagName($bareName); foreach ($attrib as $key => $value) { - $elem->addAttribute($key, $value); + $nodes->item(0)->setAttribute($key, $value); } - foreach ($children as $child) { - $elem->addChild($child); + foreach ($children as $k => $child) { + $child = $elem->createElement($name, $child); + $nodes->item(0)->appendChild($child); } - $xml = $elem->asXML(); + $xml = $elem->saveXml(); $xml = trim(substr($xml, strpos($xml, '?>') + 2)); return $xml; } diff --git a/cake/tests/cases/libs/view/helpers/rss.test.php b/cake/tests/cases/libs/view/helpers/rss.test.php index b61d6dd32..6b8b36887 100644 --- a/cake/tests/cases/libs/view/helpers/rss.test.php +++ b/cake/tests/cases/libs/view/helpers/rss.test.php @@ -35,7 +35,7 @@ class RssHelperTest extends CakeTestCase { * @return void */ function setUp() { - $controller = null; + parent::setUp(); $this->View = new View($controller); $this->Rss = new RssHelper($this->View); } @@ -47,6 +47,7 @@ class RssHelperTest extends CakeTestCase { * @return void */ function tearDown() { + parent::tearDown(); unset($this->Rss); } @@ -65,15 +66,6 @@ class RssHelperTest extends CakeTestCase { ); $this->assertTags($result, $expected); - $result = $this->Rss->document(array('contrived' => 'parameter')); - $expected = array( - 'rss' => array( - 'version' => '2.0' - ), - 'assertTags($result, $expected); - $result = $this->Rss->document(null, 'content'); $expected = array( 'rss' => array( @@ -173,6 +165,7 @@ class RssHelperTest extends CakeTestCase { ); $this->assertTags($result, $expected); } + function testChannelElementAttributes() { $attrib = array(); $elements = array( @@ -288,15 +281,9 @@ class RssHelperTest extends CakeTestCase { $this->assertTags($result, $expected); $item = array( - 'title' => array( - 'value' => 'My Title', - 'cdata' => true, - ), + 'title' => 'My Title', 'link' => 'http://www.example.com/1', - 'description' => array( - 'value' => 'descriptive words', - 'cdata' => true, - ), + 'description' => 'descriptive words', 'pubDate' => '2008-05-31 12:00:00', 'guid' => 'http://www.example.com/1' ); @@ -305,13 +292,13 @@ class RssHelperTest extends CakeTestCase { $expected = array( 'assertTags($result, $expected); $item = array( - 'title' => array( - 'value' => 'My Title & more', - 'cdata' => true - ) + 'title' => 'My Title & more' + ); + $result = $this->Rss->item(null, $item); + $expected = array( + 'assertTags($result, $expected); + + $item = array( + 'title' => 'Foo bar', + 'link' => array( + 'url' => 'http://example.com/foo?a=1&b=2', + 'convertEntities' => false + ), + 'description' => array( + 'value' => 'descriptive words', + 'cdata' => true, + ), + 'pubDate' => '2008-05-31 12:00:00' ); $result = $this->Rss->item(null, $item); $expected = array( 'assertTags($result, $expected); + } +/** + * test item() with cdata blocks. + * + * @return void + */ + function testItemCdata() { $item = array( 'title' => array( 'value' => 'My Title & more', @@ -360,7 +383,7 @@ class RssHelperTest extends CakeTestCase { 'category' => array( 'value' => 'CakePHP', 'cdata' => true, - 'domain' => 'http://www.cakephp.org' + 'domain' => 'http://www.cakephp.org', ) ); $result = $this->Rss->item(null, $item); @@ -454,40 +477,6 @@ class RssHelperTest extends CakeTestCase { '/item' ); $this->assertTags($result, $expected); - - $item = array( - 'title' => 'Foo bar', - 'link' => array( - 'url' => 'http://example.com/foo?a=1&b=2', - 'convertEntities' => false - ), - 'description' => array( - 'value' => 'descriptive words', - 'cdata' => true, - ), - 'pubDate' => '2008-05-31 12:00:00' - ); - $result = $this->Rss->item(null, $item); - $expected = array( - 'assertTags($result, $expected); } /**