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;
|
Chris@0
|
11
|
Chris@0
|
12 use DOMDocument;
|
Chris@0
|
13 use DOMElement;
|
Chris@0
|
14 use Zend\Feed\Writer;
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 */
|
Chris@0
|
18 class AbstractRenderer
|
Chris@0
|
19 {
|
Chris@0
|
20 /**
|
Chris@0
|
21 * Extensions
|
Chris@0
|
22 * @var array
|
Chris@0
|
23 */
|
Chris@0
|
24 protected $extensions = [];
|
Chris@0
|
25
|
Chris@0
|
26 /**
|
Chris@0
|
27 * @var Writer\AbstractFeed
|
Chris@0
|
28 */
|
Chris@0
|
29 protected $container = null;
|
Chris@0
|
30
|
Chris@0
|
31 /**
|
Chris@0
|
32 * @var DOMDocument
|
Chris@0
|
33 */
|
Chris@0
|
34 protected $dom = null;
|
Chris@0
|
35
|
Chris@0
|
36 /**
|
Chris@0
|
37 * @var bool
|
Chris@0
|
38 */
|
Chris@0
|
39 protected $ignoreExceptions = false;
|
Chris@0
|
40
|
Chris@0
|
41 /**
|
Chris@0
|
42 * @var array
|
Chris@0
|
43 */
|
Chris@0
|
44 protected $exceptions = [];
|
Chris@0
|
45
|
Chris@0
|
46 /**
|
Chris@0
|
47 * Encoding of all text values
|
Chris@0
|
48 *
|
Chris@0
|
49 * @var string
|
Chris@0
|
50 */
|
Chris@0
|
51 protected $encoding = 'UTF-8';
|
Chris@0
|
52
|
Chris@0
|
53 /**
|
Chris@0
|
54 * Holds the value "atom" or "rss" depending on the feed type set when
|
Chris@0
|
55 * when last exported.
|
Chris@0
|
56 *
|
Chris@0
|
57 * @var string
|
Chris@0
|
58 */
|
Chris@0
|
59 protected $type = null;
|
Chris@0
|
60
|
Chris@0
|
61 /**
|
Chris@0
|
62 * @var DOMElement
|
Chris@0
|
63 */
|
Chris@0
|
64 protected $rootElement = null;
|
Chris@0
|
65
|
Chris@0
|
66 /**
|
Chris@0
|
67 * Constructor
|
Chris@0
|
68 *
|
Chris@0
|
69 * @param Writer\AbstractFeed $container
|
Chris@0
|
70 */
|
Chris@0
|
71 public function __construct($container)
|
Chris@0
|
72 {
|
Chris@0
|
73 $this->container = $container;
|
Chris@0
|
74 $this->setType($container->getType());
|
Chris@0
|
75 $this->_loadExtensions();
|
Chris@0
|
76 }
|
Chris@0
|
77
|
Chris@0
|
78 /**
|
Chris@0
|
79 * Save XML to string
|
Chris@0
|
80 *
|
Chris@0
|
81 * @return string
|
Chris@0
|
82 */
|
Chris@0
|
83 public function saveXml()
|
Chris@0
|
84 {
|
Chris@12
|
85 return $this->getDomDocument()->saveXML();
|
Chris@0
|
86 }
|
Chris@0
|
87
|
Chris@0
|
88 /**
|
Chris@0
|
89 * Get DOM document
|
Chris@0
|
90 *
|
Chris@0
|
91 * @return DOMDocument
|
Chris@0
|
92 */
|
Chris@0
|
93 public function getDomDocument()
|
Chris@0
|
94 {
|
Chris@0
|
95 return $this->dom;
|
Chris@0
|
96 }
|
Chris@0
|
97
|
Chris@0
|
98 /**
|
Chris@0
|
99 * Get document element from DOM
|
Chris@0
|
100 *
|
Chris@0
|
101 * @return DOMElement
|
Chris@0
|
102 */
|
Chris@0
|
103 public function getElement()
|
Chris@0
|
104 {
|
Chris@0
|
105 return $this->getDomDocument()->documentElement;
|
Chris@0
|
106 }
|
Chris@0
|
107
|
Chris@0
|
108 /**
|
Chris@0
|
109 * Get data container of items being rendered
|
Chris@0
|
110 *
|
Chris@0
|
111 * @return Writer\AbstractFeed
|
Chris@0
|
112 */
|
Chris@0
|
113 public function getDataContainer()
|
Chris@0
|
114 {
|
Chris@0
|
115 return $this->container;
|
Chris@0
|
116 }
|
Chris@0
|
117
|
Chris@0
|
118 /**
|
Chris@0
|
119 * Set feed encoding
|
Chris@0
|
120 *
|
Chris@0
|
121 * @param string $enc
|
Chris@0
|
122 * @return AbstractRenderer
|
Chris@0
|
123 */
|
Chris@0
|
124 public function setEncoding($enc)
|
Chris@0
|
125 {
|
Chris@0
|
126 $this->encoding = $enc;
|
Chris@0
|
127 return $this;
|
Chris@0
|
128 }
|
Chris@0
|
129
|
Chris@0
|
130 /**
|
Chris@0
|
131 * Get feed encoding
|
Chris@0
|
132 *
|
Chris@0
|
133 * @return string
|
Chris@0
|
134 */
|
Chris@0
|
135 public function getEncoding()
|
Chris@0
|
136 {
|
Chris@0
|
137 return $this->encoding;
|
Chris@0
|
138 }
|
Chris@0
|
139
|
Chris@0
|
140 /**
|
Chris@0
|
141 * Indicate whether or not to ignore exceptions
|
Chris@0
|
142 *
|
Chris@0
|
143 * @param bool $bool
|
Chris@0
|
144 * @return AbstractRenderer
|
Chris@0
|
145 * @throws Writer\Exception\InvalidArgumentException
|
Chris@0
|
146 */
|
Chris@0
|
147 public function ignoreExceptions($bool = true)
|
Chris@0
|
148 {
|
Chris@12
|
149 if (! is_bool($bool)) {
|
Chris@12
|
150 throw new Writer\Exception\InvalidArgumentException(
|
Chris@12
|
151 'Invalid parameter: $bool. Should be TRUE or FALSE (defaults to TRUE if null)'
|
Chris@12
|
152 );
|
Chris@0
|
153 }
|
Chris@0
|
154 $this->ignoreExceptions = $bool;
|
Chris@0
|
155 return $this;
|
Chris@0
|
156 }
|
Chris@0
|
157
|
Chris@0
|
158 /**
|
Chris@0
|
159 * Get exception list
|
Chris@0
|
160 *
|
Chris@0
|
161 * @return array
|
Chris@0
|
162 */
|
Chris@0
|
163 public function getExceptions()
|
Chris@0
|
164 {
|
Chris@0
|
165 return $this->exceptions;
|
Chris@0
|
166 }
|
Chris@0
|
167
|
Chris@0
|
168 /**
|
Chris@0
|
169 * Set the current feed type being exported to "rss" or "atom". This allows
|
Chris@0
|
170 * other objects to gracefully choose whether to execute or not, depending
|
Chris@0
|
171 * on their appropriateness for the current type, e.g. renderers.
|
Chris@0
|
172 *
|
Chris@0
|
173 * @param string $type
|
Chris@0
|
174 */
|
Chris@0
|
175 public function setType($type)
|
Chris@0
|
176 {
|
Chris@0
|
177 $this->type = $type;
|
Chris@0
|
178 }
|
Chris@0
|
179
|
Chris@0
|
180 /**
|
Chris@0
|
181 * Retrieve the current or last feed type exported.
|
Chris@0
|
182 *
|
Chris@0
|
183 * @return string Value will be "rss" or "atom"
|
Chris@0
|
184 */
|
Chris@0
|
185 public function getType()
|
Chris@0
|
186 {
|
Chris@0
|
187 return $this->type;
|
Chris@0
|
188 }
|
Chris@0
|
189
|
Chris@0
|
190 /**
|
Chris@0
|
191 * Sets the absolute root element for the XML feed being generated. This
|
Chris@0
|
192 * helps simplify the appending of namespace declarations, but also ensures
|
Chris@0
|
193 * namespaces are added to the root element - not scattered across the entire
|
Chris@0
|
194 * XML file - may assist namespace unsafe parsers and looks pretty ;).
|
Chris@0
|
195 *
|
Chris@0
|
196 * @param DOMElement $root
|
Chris@0
|
197 */
|
Chris@0
|
198 public function setRootElement(DOMElement $root)
|
Chris@0
|
199 {
|
Chris@0
|
200 $this->rootElement = $root;
|
Chris@0
|
201 }
|
Chris@0
|
202
|
Chris@0
|
203 /**
|
Chris@0
|
204 * Retrieve the absolute root element for the XML feed being generated.
|
Chris@0
|
205 *
|
Chris@0
|
206 * @return DOMElement
|
Chris@0
|
207 */
|
Chris@0
|
208 public function getRootElement()
|
Chris@0
|
209 {
|
Chris@0
|
210 return $this->rootElement;
|
Chris@0
|
211 }
|
Chris@0
|
212
|
Chris@0
|
213 /**
|
Chris@0
|
214 * Load extensions from Zend\Feed\Writer\Writer
|
Chris@0
|
215 *
|
Chris@0
|
216 * @return void
|
Chris@0
|
217 */
|
Chris@12
|
218 // @codingStandardsIgnoreStart
|
Chris@0
|
219 protected function _loadExtensions()
|
Chris@0
|
220 {
|
Chris@12
|
221 // @codingStandardsIgnoreEnd
|
Chris@0
|
222 Writer\Writer::registerCoreExtensions();
|
Chris@0
|
223 $manager = Writer\Writer::getExtensionManager();
|
Chris@0
|
224 $all = Writer\Writer::getExtensions();
|
Chris@16
|
225 $exts = stripos(get_class($this), 'entry')
|
Chris@16
|
226 ? $all['entryRenderer']
|
Chris@16
|
227 : $all['feedRenderer'];
|
Chris@0
|
228 foreach ($exts as $extension) {
|
Chris@0
|
229 $plugin = $manager->get($extension);
|
Chris@0
|
230 $plugin->setDataContainer($this->getDataContainer());
|
Chris@0
|
231 $plugin->setEncoding($this->getEncoding());
|
Chris@0
|
232 $this->extensions[$extension] = $plugin;
|
Chris@0
|
233 }
|
Chris@0
|
234 }
|
Chris@0
|
235 }
|