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
10 namespace Zend\Feed\Writer\Extension\ITunes\Renderer;
14 use Zend\Feed\Writer\Extension;
18 class Feed extends Extension\AbstractRenderer
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.
27 protected $called = false;
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);
48 $this->_appendNamespaces();
53 * Append feed namespaces
57 // @codingStandardsIgnoreStart
58 protected function _appendNamespaces()
60 // @codingStandardsIgnoreEnd
61 $this->getRootElement()->setAttribute(
63 'http://www.itunes.com/dtds/podcast-1.0.dtd'
70 * @param DOMDocument $dom
71 * @param DOMElement $root
74 // @codingStandardsIgnoreStart
75 protected function _setAuthors(DOMDocument $dom, DOMElement $root)
77 // @codingStandardsIgnoreEnd
78 $authors = $this->getDataContainer()->getItunesAuthors();
79 if (! $authors || empty($authors)) {
82 foreach ($authors as $author) {
83 $el = $dom->createElement('itunes:author');
84 $text = $dom->createTextNode($author);
85 $el->appendChild($text);
86 $root->appendChild($el);
92 * Set feed itunes block
94 * @param DOMDocument $dom
95 * @param DOMElement $root
98 // @codingStandardsIgnoreStart
99 protected function _setBlock(DOMDocument $dom, DOMElement $root)
101 // @codingStandardsIgnoreEnd
102 $block = $this->getDataContainer()->getItunesBlock();
103 if ($block === null) {
106 $el = $dom->createElement('itunes:block');
107 $text = $dom->createTextNode($block);
108 $el->appendChild($text);
109 $root->appendChild($el);
110 $this->called = true;
114 * Set feed categories
116 * @param DOMDocument $dom
117 * @param DOMElement $root
120 // @codingStandardsIgnoreStart
121 protected function _setCategories(DOMDocument $dom, DOMElement $root)
123 // @codingStandardsIgnoreEnd
124 $cats = $this->getDataContainer()->getItunesCategories();
125 if (! $cats || empty($cats)) {
128 foreach ($cats as $key => $cat) {
129 if (! is_array($cat)) {
130 $el = $dom->createElement('itunes:category');
131 $el->setAttribute('text', $cat);
132 $root->appendChild($el);
134 $el = $dom->createElement('itunes:category');
135 $el->setAttribute('text', $key);
136 $root->appendChild($el);
137 foreach ($cat as $subcat) {
138 $el2 = $dom->createElement('itunes:category');
139 $el2->setAttribute('text', $subcat);
140 $el->appendChild($el2);
144 $this->called = true;
148 * Set feed image (icon)
150 * @param DOMDocument $dom
151 * @param DOMElement $root
154 // @codingStandardsIgnoreStart
155 protected function _setImage(DOMDocument $dom, DOMElement $root)
157 // @codingStandardsIgnoreEnd
158 $image = $this->getDataContainer()->getItunesImage();
162 $el = $dom->createElement('itunes:image');
163 $el->setAttribute('href', $image);
164 $root->appendChild($el);
165 $this->called = true;
169 * Set feed cumulative duration
171 * @param DOMDocument $dom
172 * @param DOMElement $root
175 // @codingStandardsIgnoreStart
176 protected function _setDuration(DOMDocument $dom, DOMElement $root)
178 // @codingStandardsIgnoreEnd
179 $duration = $this->getDataContainer()->getItunesDuration();
183 $el = $dom->createElement('itunes:duration');
184 $text = $dom->createTextNode($duration);
185 $el->appendChild($text);
186 $root->appendChild($el);
187 $this->called = true;
193 * @param DOMDocument $dom
194 * @param DOMElement $root
197 // @codingStandardsIgnoreStart
198 protected function _setExplicit(DOMDocument $dom, DOMElement $root)
200 // @codingStandardsIgnoreEnd
201 $explicit = $this->getDataContainer()->getItunesExplicit();
202 if ($explicit === null) {
205 $el = $dom->createElement('itunes:explicit');
206 $text = $dom->createTextNode($explicit);
207 $el->appendChild($text);
208 $root->appendChild($el);
209 $this->called = true;
215 * @param DOMDocument $dom
216 * @param DOMElement $root
219 // @codingStandardsIgnoreStart
220 protected function _setKeywords(DOMDocument $dom, DOMElement $root)
222 // @codingStandardsIgnoreEnd
223 $keywords = $this->getDataContainer()->getItunesKeywords();
224 if (! $keywords || empty($keywords)) {
227 $el = $dom->createElement('itunes:keywords');
228 $text = $dom->createTextNode(implode(',', $keywords));
229 $el->appendChild($text);
230 $root->appendChild($el);
231 $this->called = true;
237 * @param DOMDocument $dom
238 * @param DOMElement $root
241 // @codingStandardsIgnoreStart
242 protected function _setNewFeedUrl(DOMDocument $dom, DOMElement $root)
244 // @codingStandardsIgnoreEnd
245 $url = $this->getDataContainer()->getItunesNewFeedUrl();
249 $el = $dom->createElement('itunes:new-feed-url');
250 $text = $dom->createTextNode($url);
251 $el->appendChild($text);
252 $root->appendChild($el);
253 $this->called = true;
259 * @param DOMDocument $dom
260 * @param DOMElement $root
263 // @codingStandardsIgnoreStart
264 protected function _setOwners(DOMDocument $dom, DOMElement $root)
266 // @codingStandardsIgnoreEnd
267 $owners = $this->getDataContainer()->getItunesOwners();
268 if (! $owners || empty($owners)) {
271 foreach ($owners as $owner) {
272 $el = $dom->createElement('itunes:owner');
273 $name = $dom->createElement('itunes:name');
274 $text = $dom->createTextNode($owner['name']);
275 $name->appendChild($text);
276 $email = $dom->createElement('itunes:email');
277 $text = $dom->createTextNode($owner['email']);
278 $email->appendChild($text);
279 $root->appendChild($el);
280 $el->appendChild($name);
281 $el->appendChild($email);
283 $this->called = true;
289 * @param DOMDocument $dom
290 * @param DOMElement $root
293 // @codingStandardsIgnoreStart
294 protected function _setSubtitle(DOMDocument $dom, DOMElement $root)
296 // @codingStandardsIgnoreEnd
297 $subtitle = $this->getDataContainer()->getItunesSubtitle();
301 $el = $dom->createElement('itunes:subtitle');
302 $text = $dom->createTextNode($subtitle);
303 $el->appendChild($text);
304 $root->appendChild($el);
305 $this->called = true;
311 * @param DOMDocument $dom
312 * @param DOMElement $root
315 // @codingStandardsIgnoreStart
316 protected function _setSummary(DOMDocument $dom, DOMElement $root)
318 // @codingStandardsIgnoreEnd
319 $summary = $this->getDataContainer()->getItunesSummary();
323 $el = $dom->createElement('itunes:summary');
324 $text = $dom->createTextNode($summary);
325 $el->appendChild($text);
326 $root->appendChild($el);
327 $this->called = true;