composer package updates
[openemr.git] / vendor / zendframework / zend-feed / src / Writer / Extension / ITunes / Renderer / Feed.php
blob6614e3ffbd3525c53c1e3b2922779084a2f0a4cc
1 <?php
2 /**
3 * Zend Framework (http://framework.zend.com/)
5 * @link http://github.com/zendframework/zf2 for the canonical source repository
6 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7 * @license http://framework.zend.com/license/new-bsd New BSD License
8 */
10 namespace Zend\Feed\Writer\Extension\ITunes\Renderer;
12 use DOMDocument;
13 use DOMElement;
14 use Zend\Feed\Writer\Extension;
16 /**
18 class Feed extends Extension\AbstractRenderer
20 /**
21 * Set to TRUE if a rendering method actually renders something. This
22 * is used to prevent premature appending of a XML namespace declaration
23 * until an element which requires it is actually appended.
25 * @var bool
27 protected $called = false;
29 /**
30 * Render feed
32 * @return void
34 public function render()
36 $this->_setAuthors($this->dom, $this->base);
37 $this->_setBlock($this->dom, $this->base);
38 $this->_setCategories($this->dom, $this->base);
39 $this->_setImage($this->dom, $this->base);
40 $this->_setDuration($this->dom, $this->base);
41 $this->_setExplicit($this->dom, $this->base);
42 $this->_setKeywords($this->dom, $this->base);
43 $this->_setNewFeedUrl($this->dom, $this->base);
44 $this->_setOwners($this->dom, $this->base);
45 $this->_setSubtitle($this->dom, $this->base);
46 $this->_setSummary($this->dom, $this->base);
47 $this->_setType($this->dom, $this->base);
48 $this->_setComplete($this->dom, $this->base);
49 if ($this->called) {
50 $this->_appendNamespaces();
54 /**
55 * Append feed namespaces
57 * @return void
59 // @codingStandardsIgnoreStart
60 protected function _appendNamespaces()
62 // @codingStandardsIgnoreEnd
63 $this->getRootElement()->setAttribute(
64 'xmlns:itunes',
65 'http://www.itunes.com/dtds/podcast-1.0.dtd'
69 /**
70 * Set feed authors
72 * @param DOMDocument $dom
73 * @param DOMElement $root
74 * @return void
76 // @codingStandardsIgnoreStart
77 protected function _setAuthors(DOMDocument $dom, DOMElement $root)
79 // @codingStandardsIgnoreEnd
80 $authors = $this->getDataContainer()->getItunesAuthors();
81 if (! $authors || empty($authors)) {
82 return;
84 foreach ($authors as $author) {
85 $el = $dom->createElement('itunes:author');
86 $text = $dom->createTextNode($author);
87 $el->appendChild($text);
88 $root->appendChild($el);
90 $this->called = true;
93 /**
94 * Set feed itunes block
96 * @param DOMDocument $dom
97 * @param DOMElement $root
98 * @return void
100 // @codingStandardsIgnoreStart
101 protected function _setBlock(DOMDocument $dom, DOMElement $root)
103 // @codingStandardsIgnoreEnd
104 $block = $this->getDataContainer()->getItunesBlock();
105 if ($block === null) {
106 return;
108 $el = $dom->createElement('itunes:block');
109 $text = $dom->createTextNode($block);
110 $el->appendChild($text);
111 $root->appendChild($el);
112 $this->called = true;
116 * Set feed categories
118 * @param DOMDocument $dom
119 * @param DOMElement $root
120 * @return void
122 // @codingStandardsIgnoreStart
123 protected function _setCategories(DOMDocument $dom, DOMElement $root)
125 // @codingStandardsIgnoreEnd
126 $cats = $this->getDataContainer()->getItunesCategories();
127 if (! $cats || empty($cats)) {
128 return;
130 foreach ($cats as $key => $cat) {
131 if (! is_array($cat)) {
132 $el = $dom->createElement('itunes:category');
133 $el->setAttribute('text', $cat);
134 $root->appendChild($el);
135 } else {
136 $el = $dom->createElement('itunes:category');
137 $el->setAttribute('text', $key);
138 $root->appendChild($el);
139 foreach ($cat as $subcat) {
140 $el2 = $dom->createElement('itunes:category');
141 $el2->setAttribute('text', $subcat);
142 $el->appendChild($el2);
146 $this->called = true;
150 * Set feed image (icon)
152 * @param DOMDocument $dom
153 * @param DOMElement $root
154 * @return void
156 // @codingStandardsIgnoreStart
157 protected function _setImage(DOMDocument $dom, DOMElement $root)
159 // @codingStandardsIgnoreEnd
160 $image = $this->getDataContainer()->getItunesImage();
161 if (! $image) {
162 return;
164 $el = $dom->createElement('itunes:image');
165 $el->setAttribute('href', $image);
166 $root->appendChild($el);
167 $this->called = true;
171 * Set feed cumulative duration
173 * @param DOMDocument $dom
174 * @param DOMElement $root
175 * @return void
177 // @codingStandardsIgnoreStart
178 protected function _setDuration(DOMDocument $dom, DOMElement $root)
180 // @codingStandardsIgnoreEnd
181 $duration = $this->getDataContainer()->getItunesDuration();
182 if (! $duration) {
183 return;
185 $el = $dom->createElement('itunes:duration');
186 $text = $dom->createTextNode($duration);
187 $el->appendChild($text);
188 $root->appendChild($el);
189 $this->called = true;
193 * Set explicit flag
195 * @param DOMDocument $dom
196 * @param DOMElement $root
197 * @return void
199 // @codingStandardsIgnoreStart
200 protected function _setExplicit(DOMDocument $dom, DOMElement $root)
202 // @codingStandardsIgnoreEnd
203 $explicit = $this->getDataContainer()->getItunesExplicit();
204 if ($explicit === null) {
205 return;
207 $el = $dom->createElement('itunes:explicit');
208 $text = $dom->createTextNode($explicit);
209 $el->appendChild($text);
210 $root->appendChild($el);
211 $this->called = true;
215 * Set feed keywords
217 * @param DOMDocument $dom
218 * @param DOMElement $root
219 * @return void
221 // @codingStandardsIgnoreStart
222 protected function _setKeywords(DOMDocument $dom, DOMElement $root)
224 // @codingStandardsIgnoreEnd
225 $keywords = $this->getDataContainer()->getItunesKeywords();
226 if (! $keywords || empty($keywords)) {
227 return;
229 $el = $dom->createElement('itunes:keywords');
230 $text = $dom->createTextNode(implode(',', $keywords));
231 $el->appendChild($text);
232 $root->appendChild($el);
233 $this->called = true;
237 * Set feed's new URL
239 * @param DOMDocument $dom
240 * @param DOMElement $root
241 * @return void
243 // @codingStandardsIgnoreStart
244 protected function _setNewFeedUrl(DOMDocument $dom, DOMElement $root)
246 // @codingStandardsIgnoreEnd
247 $url = $this->getDataContainer()->getItunesNewFeedUrl();
248 if (! $url) {
249 return;
251 $el = $dom->createElement('itunes:new-feed-url');
252 $text = $dom->createTextNode($url);
253 $el->appendChild($text);
254 $root->appendChild($el);
255 $this->called = true;
259 * Set feed owners
261 * @param DOMDocument $dom
262 * @param DOMElement $root
263 * @return void
265 // @codingStandardsIgnoreStart
266 protected function _setOwners(DOMDocument $dom, DOMElement $root)
268 // @codingStandardsIgnoreEnd
269 $owners = $this->getDataContainer()->getItunesOwners();
270 if (! $owners || empty($owners)) {
271 return;
273 foreach ($owners as $owner) {
274 $el = $dom->createElement('itunes:owner');
275 $name = $dom->createElement('itunes:name');
276 $text = $dom->createTextNode($owner['name']);
277 $name->appendChild($text);
278 $email = $dom->createElement('itunes:email');
279 $text = $dom->createTextNode($owner['email']);
280 $email->appendChild($text);
281 $root->appendChild($el);
282 $el->appendChild($name);
283 $el->appendChild($email);
285 $this->called = true;
289 * Set feed subtitle
291 * @param DOMDocument $dom
292 * @param DOMElement $root
293 * @return void
295 // @codingStandardsIgnoreStart
296 protected function _setSubtitle(DOMDocument $dom, DOMElement $root)
298 // @codingStandardsIgnoreEnd
299 $subtitle = $this->getDataContainer()->getItunesSubtitle();
300 if (! $subtitle) {
301 return;
303 $el = $dom->createElement('itunes:subtitle');
304 $text = $dom->createTextNode($subtitle);
305 $el->appendChild($text);
306 $root->appendChild($el);
307 $this->called = true;
311 * Set feed summary
313 * @param DOMDocument $dom
314 * @param DOMElement $root
315 * @return void
317 // @codingStandardsIgnoreStart
318 protected function _setSummary(DOMDocument $dom, DOMElement $root)
320 // @codingStandardsIgnoreEnd
321 $summary = $this->getDataContainer()->getItunesSummary();
322 if (! $summary) {
323 return;
325 $el = $dom->createElement('itunes:summary');
326 $text = $dom->createTextNode($summary);
327 $el->appendChild($text);
328 $root->appendChild($el);
329 $this->called = true;
333 * Set podcast type
335 * @param DOMDocument $dom
336 * @param DOMElement $root
337 * @return void
339 // @codingStandardsIgnoreStart
340 protected function _setType(DOMDocument $dom, DOMElement $root)
342 // @codingStandardsIgnoreEnd
343 $type = $this->getDataContainer()->getItunesType();
344 if (! $type) {
345 return;
347 $el = $dom->createElement('itunes:type');
348 $text = $dom->createTextNode($type);
349 $el->appendChild($text);
350 $root->appendChild($el);
351 $this->called = true;
355 * Set complete status
357 * @param DOMDocument $dom
358 * @param DOMElement $root
359 * @return void
361 // @codingStandardsIgnoreStart
362 protected function _setComplete(DOMDocument $dom, DOMElement $root)
364 // @codingStandardsIgnoreEnd
365 $status = $this->getDataContainer()->getItunesComplete();
366 if (! $status) {
367 return;
369 $el = $dom->createElement('itunes:complete');
370 $text = $dom->createTextNode('Yes');
371 $el->appendChild($text);
372 $root->appendChild($el);
373 $this->called = true;