1<?php
2
3/**
4 * @see       https://github.com/laminas/laminas-feed for the canonical source repository
5 * @copyright https://github.com/laminas/laminas-feed/blob/master/COPYRIGHT.md
6 * @license   https://github.com/laminas/laminas-feed/blob/master/LICENSE.md New BSD License
7 */
8
9namespace Laminas\Feed\Writer\Renderer\Feed\Atom;
10
11use DOMDocument;
12use DOMElement;
13use Laminas\Feed\Writer;
14use Laminas\Feed\Writer\Renderer;
15
16class Source extends AbstractAtom implements Renderer\RendererInterface
17{
18    public function __construct(Writer\Source $container)
19    {
20        parent::__construct($container);
21    }
22
23    /**
24     * Render Atom Feed Metadata (Source element)
25     *
26     * @return $this
27     */
28    public function render()
29    {
30        if (! $this->container->getEncoding()) {
31            $this->container->setEncoding('UTF-8');
32        }
33        $this->dom               = new DOMDocument('1.0', $this->container->getEncoding());
34        $this->dom->formatOutput = true;
35        $root                    = $this->dom->createElement('source');
36        $this->setRootElement($root);
37        $this->dom->appendChild($root);
38        $this->_setLanguage($this->dom, $root);
39        $this->_setBaseUrl($this->dom, $root);
40        $this->_setTitle($this->dom, $root);
41        $this->_setDescription($this->dom, $root);
42        $this->_setDateCreated($this->dom, $root);
43        $this->_setDateModified($this->dom, $root);
44        $this->_setGenerator($this->dom, $root);
45        $this->_setLink($this->dom, $root);
46        $this->_setFeedLinks($this->dom, $root);
47        $this->_setId($this->dom, $root);
48        $this->_setAuthors($this->dom, $root);
49        $this->_setCopyright($this->dom, $root);
50        $this->_setCategories($this->dom, $root);
51
52        foreach ($this->extensions as $ext) {
53            $ext->setType($this->getType());
54            $ext->setRootElement($this->getRootElement());
55            $ext->setDomDocument($this->getDomDocument(), $root);
56            $ext->render();
57        }
58        return $this;
59    }
60
61    /**
62     * Set feed generator string
63     *
64     * @param  DOMDocument $dom
65     * @param  DOMElement $root
66     * @return void
67     */
68    // @codingStandardsIgnoreStart
69    protected function _setGenerator(DOMDocument $dom, DOMElement $root)
70    {
71        // @codingStandardsIgnoreEnd
72        if (! $this->getDataContainer()->getGenerator()) {
73            return;
74        }
75
76        $gdata     = $this->getDataContainer()->getGenerator();
77        $generator = $dom->createElement('generator');
78        $root->appendChild($generator);
79        $text = $dom->createTextNode($gdata['name']);
80        $generator->appendChild($text);
81        if (array_key_exists('uri', $gdata)) {
82            $generator->setAttribute('uri', $gdata['uri']);
83        }
84        if (array_key_exists('version', $gdata)) {
85            $generator->setAttribute('version', $gdata['version']);
86        }
87    }
88}
89