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\Reader\Extension\Podcast;
|
Chris@0
|
11
|
Chris@0
|
12 use DOMText;
|
Chris@0
|
13 use Zend\Feed\Reader\Extension;
|
Chris@0
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 */
|
Chris@0
|
17 class Feed extends Extension\AbstractFeed
|
Chris@0
|
18 {
|
Chris@0
|
19 /**
|
Chris@0
|
20 * Get the entry author
|
Chris@0
|
21 *
|
Chris@0
|
22 * @return string
|
Chris@0
|
23 */
|
Chris@0
|
24 public function getCastAuthor()
|
Chris@0
|
25 {
|
Chris@0
|
26 if (isset($this->data['author'])) {
|
Chris@0
|
27 return $this->data['author'];
|
Chris@0
|
28 }
|
Chris@0
|
29
|
Chris@0
|
30 $author = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:author)');
|
Chris@0
|
31
|
Chris@12
|
32 if (! $author) {
|
Chris@0
|
33 $author = null;
|
Chris@0
|
34 }
|
Chris@0
|
35
|
Chris@0
|
36 $this->data['author'] = $author;
|
Chris@0
|
37
|
Chris@0
|
38 return $this->data['author'];
|
Chris@0
|
39 }
|
Chris@0
|
40
|
Chris@0
|
41 /**
|
Chris@0
|
42 * Get the entry block
|
Chris@0
|
43 *
|
Chris@0
|
44 * @return string
|
Chris@0
|
45 */
|
Chris@0
|
46 public function getBlock()
|
Chris@0
|
47 {
|
Chris@0
|
48 if (isset($this->data['block'])) {
|
Chris@0
|
49 return $this->data['block'];
|
Chris@0
|
50 }
|
Chris@0
|
51
|
Chris@0
|
52 $block = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:block)');
|
Chris@0
|
53
|
Chris@12
|
54 if (! $block) {
|
Chris@0
|
55 $block = null;
|
Chris@0
|
56 }
|
Chris@0
|
57
|
Chris@0
|
58 $this->data['block'] = $block;
|
Chris@0
|
59
|
Chris@0
|
60 return $this->data['block'];
|
Chris@0
|
61 }
|
Chris@0
|
62
|
Chris@0
|
63 /**
|
Chris@0
|
64 * Get the entry category
|
Chris@0
|
65 *
|
Chris@0
|
66 * @return array|null
|
Chris@0
|
67 */
|
Chris@0
|
68 public function getItunesCategories()
|
Chris@0
|
69 {
|
Chris@0
|
70 if (isset($this->data['categories'])) {
|
Chris@0
|
71 return $this->data['categories'];
|
Chris@0
|
72 }
|
Chris@0
|
73
|
Chris@0
|
74 $categoryList = $this->xpath->query($this->getXpathPrefix() . '/itunes:category');
|
Chris@0
|
75
|
Chris@0
|
76 $categories = [];
|
Chris@0
|
77
|
Chris@0
|
78 if ($categoryList->length > 0) {
|
Chris@0
|
79 foreach ($categoryList as $node) {
|
Chris@0
|
80 $children = null;
|
Chris@0
|
81
|
Chris@0
|
82 if ($node->childNodes->length > 0) {
|
Chris@0
|
83 $children = [];
|
Chris@0
|
84
|
Chris@0
|
85 foreach ($node->childNodes as $childNode) {
|
Chris@12
|
86 if (! ($childNode instanceof DOMText)) {
|
Chris@0
|
87 $children[$childNode->getAttribute('text')] = null;
|
Chris@0
|
88 }
|
Chris@0
|
89 }
|
Chris@0
|
90 }
|
Chris@0
|
91
|
Chris@0
|
92 $categories[$node->getAttribute('text')] = $children;
|
Chris@0
|
93 }
|
Chris@0
|
94 }
|
Chris@0
|
95
|
Chris@12
|
96 if (! $categories) {
|
Chris@0
|
97 $categories = null;
|
Chris@0
|
98 }
|
Chris@0
|
99
|
Chris@0
|
100 $this->data['categories'] = $categories;
|
Chris@0
|
101
|
Chris@0
|
102 return $this->data['categories'];
|
Chris@0
|
103 }
|
Chris@0
|
104
|
Chris@0
|
105 /**
|
Chris@0
|
106 * Get the entry explicit
|
Chris@0
|
107 *
|
Chris@0
|
108 * @return string
|
Chris@0
|
109 */
|
Chris@0
|
110 public function getExplicit()
|
Chris@0
|
111 {
|
Chris@0
|
112 if (isset($this->data['explicit'])) {
|
Chris@0
|
113 return $this->data['explicit'];
|
Chris@0
|
114 }
|
Chris@0
|
115
|
Chris@0
|
116 $explicit = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:explicit)');
|
Chris@0
|
117
|
Chris@12
|
118 if (! $explicit) {
|
Chris@0
|
119 $explicit = null;
|
Chris@0
|
120 }
|
Chris@0
|
121
|
Chris@0
|
122 $this->data['explicit'] = $explicit;
|
Chris@0
|
123
|
Chris@0
|
124 return $this->data['explicit'];
|
Chris@0
|
125 }
|
Chris@0
|
126
|
Chris@0
|
127 /**
|
Chris@0
|
128 * Get the entry image
|
Chris@0
|
129 *
|
Chris@0
|
130 * @return string
|
Chris@0
|
131 */
|
Chris@0
|
132 public function getItunesImage()
|
Chris@0
|
133 {
|
Chris@0
|
134 if (isset($this->data['image'])) {
|
Chris@0
|
135 return $this->data['image'];
|
Chris@0
|
136 }
|
Chris@0
|
137
|
Chris@0
|
138 $image = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:image/@href)');
|
Chris@0
|
139
|
Chris@12
|
140 if (! $image) {
|
Chris@0
|
141 $image = null;
|
Chris@0
|
142 }
|
Chris@0
|
143
|
Chris@0
|
144 $this->data['image'] = $image;
|
Chris@0
|
145
|
Chris@0
|
146 return $this->data['image'];
|
Chris@0
|
147 }
|
Chris@0
|
148
|
Chris@0
|
149 /**
|
Chris@0
|
150 * Get the entry keywords
|
Chris@0
|
151 *
|
Chris@0
|
152 * @return string
|
Chris@0
|
153 */
|
Chris@0
|
154 public function getKeywords()
|
Chris@0
|
155 {
|
Chris@0
|
156 if (isset($this->data['keywords'])) {
|
Chris@0
|
157 return $this->data['keywords'];
|
Chris@0
|
158 }
|
Chris@0
|
159
|
Chris@0
|
160 $keywords = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:keywords)');
|
Chris@0
|
161
|
Chris@12
|
162 if (! $keywords) {
|
Chris@0
|
163 $keywords = null;
|
Chris@0
|
164 }
|
Chris@0
|
165
|
Chris@0
|
166 $this->data['keywords'] = $keywords;
|
Chris@0
|
167
|
Chris@0
|
168 return $this->data['keywords'];
|
Chris@0
|
169 }
|
Chris@0
|
170
|
Chris@0
|
171 /**
|
Chris@0
|
172 * Get the entry's new feed url
|
Chris@0
|
173 *
|
Chris@0
|
174 * @return string
|
Chris@0
|
175 */
|
Chris@0
|
176 public function getNewFeedUrl()
|
Chris@0
|
177 {
|
Chris@0
|
178 if (isset($this->data['new-feed-url'])) {
|
Chris@0
|
179 return $this->data['new-feed-url'];
|
Chris@0
|
180 }
|
Chris@0
|
181
|
Chris@0
|
182 $newFeedUrl = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:new-feed-url)');
|
Chris@0
|
183
|
Chris@12
|
184 if (! $newFeedUrl) {
|
Chris@0
|
185 $newFeedUrl = null;
|
Chris@0
|
186 }
|
Chris@0
|
187
|
Chris@0
|
188 $this->data['new-feed-url'] = $newFeedUrl;
|
Chris@0
|
189
|
Chris@0
|
190 return $this->data['new-feed-url'];
|
Chris@0
|
191 }
|
Chris@0
|
192
|
Chris@0
|
193 /**
|
Chris@0
|
194 * Get the entry owner
|
Chris@0
|
195 *
|
Chris@0
|
196 * @return string
|
Chris@0
|
197 */
|
Chris@0
|
198 public function getOwner()
|
Chris@0
|
199 {
|
Chris@0
|
200 if (isset($this->data['owner'])) {
|
Chris@0
|
201 return $this->data['owner'];
|
Chris@0
|
202 }
|
Chris@0
|
203
|
Chris@0
|
204 $owner = null;
|
Chris@0
|
205
|
Chris@0
|
206 $email = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:owner/itunes:email)');
|
Chris@0
|
207 $name = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:owner/itunes:name)');
|
Chris@0
|
208
|
Chris@12
|
209 if (! empty($email)) {
|
Chris@0
|
210 $owner = $email . (empty($name) ? '' : ' (' . $name . ')');
|
Chris@12
|
211 } elseif (! empty($name)) {
|
Chris@0
|
212 $owner = $name;
|
Chris@0
|
213 }
|
Chris@0
|
214
|
Chris@12
|
215 if (! $owner) {
|
Chris@0
|
216 $owner = null;
|
Chris@0
|
217 }
|
Chris@0
|
218
|
Chris@0
|
219 $this->data['owner'] = $owner;
|
Chris@0
|
220
|
Chris@0
|
221 return $this->data['owner'];
|
Chris@0
|
222 }
|
Chris@0
|
223
|
Chris@0
|
224 /**
|
Chris@0
|
225 * Get the entry subtitle
|
Chris@0
|
226 *
|
Chris@0
|
227 * @return string
|
Chris@0
|
228 */
|
Chris@0
|
229 public function getSubtitle()
|
Chris@0
|
230 {
|
Chris@0
|
231 if (isset($this->data['subtitle'])) {
|
Chris@0
|
232 return $this->data['subtitle'];
|
Chris@0
|
233 }
|
Chris@0
|
234
|
Chris@0
|
235 $subtitle = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:subtitle)');
|
Chris@0
|
236
|
Chris@12
|
237 if (! $subtitle) {
|
Chris@0
|
238 $subtitle = null;
|
Chris@0
|
239 }
|
Chris@0
|
240
|
Chris@0
|
241 $this->data['subtitle'] = $subtitle;
|
Chris@0
|
242
|
Chris@0
|
243 return $this->data['subtitle'];
|
Chris@0
|
244 }
|
Chris@0
|
245
|
Chris@0
|
246 /**
|
Chris@0
|
247 * Get the entry summary
|
Chris@0
|
248 *
|
Chris@0
|
249 * @return string
|
Chris@0
|
250 */
|
Chris@0
|
251 public function getSummary()
|
Chris@0
|
252 {
|
Chris@0
|
253 if (isset($this->data['summary'])) {
|
Chris@0
|
254 return $this->data['summary'];
|
Chris@0
|
255 }
|
Chris@0
|
256
|
Chris@0
|
257 $summary = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:summary)');
|
Chris@0
|
258
|
Chris@12
|
259 if (! $summary) {
|
Chris@0
|
260 $summary = null;
|
Chris@0
|
261 }
|
Chris@0
|
262
|
Chris@0
|
263 $this->data['summary'] = $summary;
|
Chris@0
|
264
|
Chris@0
|
265 return $this->data['summary'];
|
Chris@0
|
266 }
|
Chris@0
|
267
|
Chris@0
|
268 /**
|
Chris@0
|
269 * Register iTunes namespace
|
Chris@0
|
270 *
|
Chris@0
|
271 */
|
Chris@0
|
272 protected function registerNamespaces()
|
Chris@0
|
273 {
|
Chris@0
|
274 $this->xpath->registerNamespace('itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
|
Chris@0
|
275 }
|
Chris@0
|
276 }
|