Chris@0
|
1 <?php
|
Chris@0
|
2 /**
|
Chris@0
|
3 * Zend Framework (http://framework.zend.com/)
|
Chris@0
|
4 *
|
Chris@0
|
5 * @link http://github.com/zendframework/zf2 for the canonical source repository
|
Chris@0
|
6 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
|
Chris@0
|
7 * @license http://framework.zend.com/license/new-bsd New BSD License
|
Chris@0
|
8 */
|
Chris@0
|
9
|
Chris@0
|
10 namespace Zend\Feed\Writer\Renderer\Feed;
|
Chris@0
|
11
|
Chris@0
|
12 use DOMDocument;
|
Chris@0
|
13 use Zend\Feed\Writer;
|
Chris@0
|
14 use Zend\Feed\Writer\Renderer;
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 */
|
Chris@0
|
18 class Atom extends AbstractAtom implements Renderer\RendererInterface
|
Chris@0
|
19 {
|
Chris@0
|
20 /**
|
Chris@0
|
21 * Constructor
|
Chris@0
|
22 *
|
Chris@0
|
23 * @param Writer\Feed $container
|
Chris@0
|
24 */
|
Chris@0
|
25 public function __construct(Writer\Feed $container)
|
Chris@0
|
26 {
|
Chris@0
|
27 parent::__construct($container);
|
Chris@0
|
28 }
|
Chris@0
|
29
|
Chris@0
|
30 /**
|
Chris@0
|
31 * Render Atom feed
|
Chris@0
|
32 *
|
Chris@0
|
33 * @return Atom
|
Chris@0
|
34 */
|
Chris@0
|
35 public function render()
|
Chris@0
|
36 {
|
Chris@12
|
37 if (! $this->container->getEncoding()) {
|
Chris@0
|
38 $this->container->setEncoding('UTF-8');
|
Chris@0
|
39 }
|
Chris@0
|
40 $this->dom = new DOMDocument('1.0', $this->container->getEncoding());
|
Chris@0
|
41 $this->dom->formatOutput = true;
|
Chris@0
|
42 $root = $this->dom->createElementNS(
|
Chris@0
|
43 Writer\Writer::NAMESPACE_ATOM_10,
|
Chris@0
|
44 'feed'
|
Chris@0
|
45 );
|
Chris@0
|
46 $this->setRootElement($root);
|
Chris@0
|
47 $this->dom->appendChild($root);
|
Chris@0
|
48 $this->_setLanguage($this->dom, $root);
|
Chris@0
|
49 $this->_setBaseUrl($this->dom, $root);
|
Chris@0
|
50 $this->_setTitle($this->dom, $root);
|
Chris@0
|
51 $this->_setDescription($this->dom, $root);
|
Chris@0
|
52 $this->_setImage($this->dom, $root);
|
Chris@0
|
53 $this->_setDateCreated($this->dom, $root);
|
Chris@0
|
54 $this->_setDateModified($this->dom, $root);
|
Chris@0
|
55 $this->_setGenerator($this->dom, $root);
|
Chris@0
|
56 $this->_setLink($this->dom, $root);
|
Chris@0
|
57 $this->_setFeedLinks($this->dom, $root);
|
Chris@0
|
58 $this->_setId($this->dom, $root);
|
Chris@0
|
59 $this->_setAuthors($this->dom, $root);
|
Chris@0
|
60 $this->_setCopyright($this->dom, $root);
|
Chris@0
|
61 $this->_setCategories($this->dom, $root);
|
Chris@0
|
62 $this->_setHubs($this->dom, $root);
|
Chris@0
|
63
|
Chris@0
|
64 foreach ($this->extensions as $ext) {
|
Chris@0
|
65 $ext->setType($this->getType());
|
Chris@0
|
66 $ext->setRootElement($this->getRootElement());
|
Chris@12
|
67 $ext->setDomDocument($this->getDomDocument(), $root);
|
Chris@0
|
68 $ext->render();
|
Chris@0
|
69 }
|
Chris@0
|
70
|
Chris@0
|
71 foreach ($this->container as $entry) {
|
Chris@0
|
72 if ($this->getDataContainer()->getEncoding()) {
|
Chris@0
|
73 $entry->setEncoding($this->getDataContainer()->getEncoding());
|
Chris@0
|
74 }
|
Chris@0
|
75 if ($entry instanceof Writer\Entry) {
|
Chris@0
|
76 $renderer = new Renderer\Entry\Atom($entry);
|
Chris@0
|
77 } else {
|
Chris@12
|
78 if (! $this->dom->documentElement->hasAttribute('xmlns:at')) {
|
Chris@0
|
79 $this->dom->documentElement->setAttribute(
|
Chris@0
|
80 'xmlns:at',
|
Chris@0
|
81 'http://purl.org/atompub/tombstones/1.0'
|
Chris@0
|
82 );
|
Chris@0
|
83 }
|
Chris@0
|
84 $renderer = new Renderer\Entry\AtomDeleted($entry);
|
Chris@0
|
85 }
|
Chris@0
|
86 if ($this->ignoreExceptions === true) {
|
Chris@0
|
87 $renderer->ignoreExceptions();
|
Chris@0
|
88 }
|
Chris@0
|
89 $renderer->setType($this->getType());
|
Chris@0
|
90 $renderer->setRootElement($this->dom->documentElement);
|
Chris@0
|
91 $renderer->render();
|
Chris@0
|
92 $element = $renderer->getElement();
|
Chris@0
|
93 $deep = version_compare(PHP_VERSION, '7', 'ge') ? 1 : true;
|
Chris@0
|
94 $imported = $this->dom->importNode($element, $deep);
|
Chris@0
|
95 $root->appendChild($imported);
|
Chris@0
|
96 }
|
Chris@0
|
97 return $this;
|
Chris@0
|
98 }
|
Chris@0
|
99 }
|