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