diff --git a/examples/media.php b/examples/media.php index 24b97de0..e1ab5de9 100644 --- a/examples/media.php +++ b/examples/media.php @@ -31,5 +31,4 @@ $logger = new \Psr\Log\NullLogger(); $feedIo = new \FeedIo\FeedIo($client, $logger); -$domDocument = $feedIo->toAtom($result->getFeed()); -echo $domDocument->saveXML(); +echo $feedIo->toAtom($feed); diff --git a/src/FeedIo/Rule/Atom/LinkNode.php b/src/FeedIo/Rule/Atom/LinkNode.php index 3dc0d222..56e33598 100644 --- a/src/FeedIo/Rule/Atom/LinkNode.php +++ b/src/FeedIo/Rule/Atom/LinkNode.php @@ -10,10 +10,10 @@ namespace FeedIo\Rule\Atom; +use FeedIo\Feed\ItemInterface; use FeedIo\Feed\NodeInterface; use FeedIo\RuleAbstract; use FeedIo\RuleSet; -use FeedIo\Rule\Media; class LinkNode extends RuleAbstract { @@ -33,7 +33,7 @@ public function __construct($nodeName = null) $mediaRule = new Media(); $mediaRule->setUrlAttributeName('href'); $this->ruleSet = new RuleSet(new Link('related')); - $this->ruleSet->add($mediaRule); + $this->ruleSet->add($mediaRule, ['media', 'enclosure']); } /** @@ -61,6 +61,14 @@ public function setProperty(NodeInterface $node, \DOMElement $element) */ public function createElement(\DomDocument $document, NodeInterface $node) { - return $this->ruleSet->getDefault()->createElement($document, $node); + $output = new \ArrayIterator(); + if ($node instanceof ItemInterface) { + foreach ($node->getMedias() as $media) { + $output->append($this->ruleSet->get('media')->createElement($document, $node)); + } + } + $output->append($this->ruleSet->getDefault()->createElement($document, $node)); + + return $output; } } diff --git a/src/FeedIo/Rule/Atom/Media.php b/src/FeedIo/Rule/Atom/Media.php new file mode 100644 index 00000000..e3ed685c --- /dev/null +++ b/src/FeedIo/Rule/Atom/Media.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace FeedIo\Rule\Atom; + +use FeedIo\Feed\Item\MediaInterface; +use FeedIo\Rule\Media as BaseMedia; + +class Media extends BaseMedia +{ + const NODE_NAME = 'link'; + + public function createMediaElement(\DomDocument $document, MediaInterface $media) + { + $element = parent::createMediaElement($document, $media); + $element->setAttribute('rel', 'enclosure'); + + return $element; + } +} diff --git a/tests/FeedIo/Rule/Atom/LinkNodeTest.php b/tests/FeedIo/Rule/Atom/LinkNodeTest.php index 3e67beb5..b18cabb8 100644 --- a/tests/FeedIo/Rule/Atom/LinkNodeTest.php +++ b/tests/FeedIo/Rule/Atom/LinkNodeTest.php @@ -63,9 +63,16 @@ public function testCreateElement() $item = new Item(); $item->setLink(self::LINK); - $element = $this->object->createElement(new \DOMDocument(), $item); - $this->assertInstanceOf('\DomElement', $element); - $this->assertEquals(self::LINK, $element->getAttribute('href')); - $this->assertEquals('link', $element->nodeName); + $elements = $this->object->createElement(new \DOMDocument(), $item); + + $count = 0; + foreach ($elements as $element) { + $count++; + $this->assertInstanceOf('\DomElement', $element); + $this->assertEquals(self::LINK, $element->getAttribute('href')); + $this->assertEquals('link', $element->nodeName); + } + + $this->assertEquals(1, $count); } }