Chris@0
|
1 <?php
|
Chris@0
|
2 /**
|
Chris@16
|
3 * @see https://github.com/zendframework/zend-feed for the canonical source repository
|
Chris@16
|
4 * @copyright Copyright (c) 2005-2018 Zend Technologies USA Inc. (https://www.zend.com)
|
Chris@16
|
5 * @license https://github.com/zendframework/zend-feed/blob/master/LICENSE.md New BSD License
|
Chris@0
|
6 */
|
Chris@0
|
7
|
Chris@0
|
8 namespace Zend\Feed\Reader\Extension\Podcast;
|
Chris@0
|
9
|
Chris@0
|
10 use Zend\Feed\Reader\Extension;
|
Chris@0
|
11
|
Chris@0
|
12 class Entry extends Extension\AbstractEntry
|
Chris@0
|
13 {
|
Chris@0
|
14 /**
|
Chris@0
|
15 * Get the entry author
|
Chris@0
|
16 *
|
Chris@0
|
17 * @return string
|
Chris@0
|
18 */
|
Chris@0
|
19 public function getCastAuthor()
|
Chris@0
|
20 {
|
Chris@0
|
21 if (isset($this->data['author'])) {
|
Chris@0
|
22 return $this->data['author'];
|
Chris@0
|
23 }
|
Chris@0
|
24
|
Chris@0
|
25 $author = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:author)');
|
Chris@0
|
26
|
Chris@12
|
27 if (! $author) {
|
Chris@0
|
28 $author = null;
|
Chris@0
|
29 }
|
Chris@0
|
30
|
Chris@0
|
31 $this->data['author'] = $author;
|
Chris@0
|
32
|
Chris@0
|
33 return $this->data['author'];
|
Chris@0
|
34 }
|
Chris@0
|
35
|
Chris@0
|
36 /**
|
Chris@0
|
37 * Get the entry block
|
Chris@0
|
38 *
|
Chris@0
|
39 * @return string
|
Chris@0
|
40 */
|
Chris@0
|
41 public function getBlock()
|
Chris@0
|
42 {
|
Chris@0
|
43 if (isset($this->data['block'])) {
|
Chris@0
|
44 return $this->data['block'];
|
Chris@0
|
45 }
|
Chris@0
|
46
|
Chris@0
|
47 $block = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:block)');
|
Chris@0
|
48
|
Chris@12
|
49 if (! $block) {
|
Chris@0
|
50 $block = null;
|
Chris@0
|
51 }
|
Chris@0
|
52
|
Chris@0
|
53 $this->data['block'] = $block;
|
Chris@0
|
54
|
Chris@0
|
55 return $this->data['block'];
|
Chris@0
|
56 }
|
Chris@0
|
57
|
Chris@0
|
58 /**
|
Chris@0
|
59 * Get the entry duration
|
Chris@0
|
60 *
|
Chris@0
|
61 * @return string
|
Chris@0
|
62 */
|
Chris@0
|
63 public function getDuration()
|
Chris@0
|
64 {
|
Chris@0
|
65 if (isset($this->data['duration'])) {
|
Chris@0
|
66 return $this->data['duration'];
|
Chris@0
|
67 }
|
Chris@0
|
68
|
Chris@0
|
69 $duration = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:duration)');
|
Chris@0
|
70
|
Chris@12
|
71 if (! $duration) {
|
Chris@0
|
72 $duration = null;
|
Chris@0
|
73 }
|
Chris@0
|
74
|
Chris@0
|
75 $this->data['duration'] = $duration;
|
Chris@0
|
76
|
Chris@0
|
77 return $this->data['duration'];
|
Chris@0
|
78 }
|
Chris@0
|
79
|
Chris@0
|
80 /**
|
Chris@0
|
81 * Get the entry explicit
|
Chris@0
|
82 *
|
Chris@0
|
83 * @return string
|
Chris@0
|
84 */
|
Chris@0
|
85 public function getExplicit()
|
Chris@0
|
86 {
|
Chris@0
|
87 if (isset($this->data['explicit'])) {
|
Chris@0
|
88 return $this->data['explicit'];
|
Chris@0
|
89 }
|
Chris@0
|
90
|
Chris@0
|
91 $explicit = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:explicit)');
|
Chris@0
|
92
|
Chris@12
|
93 if (! $explicit) {
|
Chris@0
|
94 $explicit = null;
|
Chris@0
|
95 }
|
Chris@0
|
96
|
Chris@0
|
97 $this->data['explicit'] = $explicit;
|
Chris@0
|
98
|
Chris@0
|
99 return $this->data['explicit'];
|
Chris@0
|
100 }
|
Chris@0
|
101
|
Chris@0
|
102 /**
|
Chris@0
|
103 * Get the entry keywords
|
Chris@0
|
104 *
|
Chris@16
|
105 * @deprecated since 2.10.0; itunes:keywords is no longer part of the
|
Chris@16
|
106 * iTunes podcast RSS specification.
|
Chris@0
|
107 * @return string
|
Chris@0
|
108 */
|
Chris@0
|
109 public function getKeywords()
|
Chris@0
|
110 {
|
Chris@16
|
111 trigger_error(
|
Chris@16
|
112 'itunes:keywords has been deprecated in the iTunes podcast RSS specification,'
|
Chris@16
|
113 . ' and should not be relied on.',
|
Chris@16
|
114 \E_USER_DEPRECATED
|
Chris@16
|
115 );
|
Chris@16
|
116
|
Chris@0
|
117 if (isset($this->data['keywords'])) {
|
Chris@0
|
118 return $this->data['keywords'];
|
Chris@0
|
119 }
|
Chris@0
|
120
|
Chris@0
|
121 $keywords = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:keywords)');
|
Chris@0
|
122
|
Chris@12
|
123 if (! $keywords) {
|
Chris@0
|
124 $keywords = null;
|
Chris@0
|
125 }
|
Chris@0
|
126
|
Chris@0
|
127 $this->data['keywords'] = $keywords;
|
Chris@0
|
128
|
Chris@0
|
129 return $this->data['keywords'];
|
Chris@0
|
130 }
|
Chris@0
|
131
|
Chris@0
|
132 /**
|
Chris@18
|
133 * Get the entry title
|
Chris@18
|
134 *
|
Chris@18
|
135 * @return string
|
Chris@18
|
136 */
|
Chris@18
|
137 public function getTitle()
|
Chris@18
|
138 {
|
Chris@18
|
139 if (isset($this->data['title'])) {
|
Chris@18
|
140 return $this->data['title'];
|
Chris@18
|
141 }
|
Chris@18
|
142
|
Chris@18
|
143 $title = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:title)');
|
Chris@18
|
144
|
Chris@18
|
145 if (! $title) {
|
Chris@18
|
146 $title = null;
|
Chris@18
|
147 }
|
Chris@18
|
148
|
Chris@18
|
149 $this->data['title'] = $title;
|
Chris@18
|
150
|
Chris@18
|
151 return $this->data['title'];
|
Chris@18
|
152 }
|
Chris@18
|
153
|
Chris@18
|
154 /**
|
Chris@0
|
155 * Get the entry subtitle
|
Chris@0
|
156 *
|
Chris@0
|
157 * @return string
|
Chris@0
|
158 */
|
Chris@0
|
159 public function getSubtitle()
|
Chris@0
|
160 {
|
Chris@0
|
161 if (isset($this->data['subtitle'])) {
|
Chris@0
|
162 return $this->data['subtitle'];
|
Chris@0
|
163 }
|
Chris@0
|
164
|
Chris@0
|
165 $subtitle = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:subtitle)');
|
Chris@0
|
166
|
Chris@12
|
167 if (! $subtitle) {
|
Chris@0
|
168 $subtitle = null;
|
Chris@0
|
169 }
|
Chris@0
|
170
|
Chris@0
|
171 $this->data['subtitle'] = $subtitle;
|
Chris@0
|
172
|
Chris@0
|
173 return $this->data['subtitle'];
|
Chris@0
|
174 }
|
Chris@0
|
175
|
Chris@0
|
176 /**
|
Chris@0
|
177 * Get the entry summary
|
Chris@0
|
178 *
|
Chris@0
|
179 * @return string
|
Chris@0
|
180 */
|
Chris@0
|
181 public function getSummary()
|
Chris@0
|
182 {
|
Chris@0
|
183 if (isset($this->data['summary'])) {
|
Chris@0
|
184 return $this->data['summary'];
|
Chris@0
|
185 }
|
Chris@0
|
186
|
Chris@0
|
187 $summary = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:summary)');
|
Chris@0
|
188
|
Chris@12
|
189 if (! $summary) {
|
Chris@0
|
190 $summary = null;
|
Chris@0
|
191 }
|
Chris@0
|
192
|
Chris@0
|
193 $this->data['summary'] = $summary;
|
Chris@0
|
194
|
Chris@0
|
195 return $this->data['summary'];
|
Chris@0
|
196 }
|
Chris@0
|
197
|
Chris@0
|
198 /**
|
Chris@16
|
199 * Get the entry image
|
Chris@16
|
200 *
|
Chris@16
|
201 * @return string
|
Chris@16
|
202 */
|
Chris@16
|
203 public function getItunesImage()
|
Chris@16
|
204 {
|
Chris@16
|
205 if (isset($this->data['image'])) {
|
Chris@16
|
206 return $this->data['image'];
|
Chris@16
|
207 }
|
Chris@16
|
208
|
Chris@16
|
209 $image = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:image/@href)');
|
Chris@16
|
210
|
Chris@16
|
211 if (! $image) {
|
Chris@16
|
212 $image = null;
|
Chris@16
|
213 }
|
Chris@16
|
214
|
Chris@16
|
215 $this->data['image'] = $image;
|
Chris@16
|
216
|
Chris@16
|
217 return $this->data['image'];
|
Chris@16
|
218 }
|
Chris@16
|
219
|
Chris@16
|
220 /**
|
Chris@16
|
221 * Get the episode number
|
Chris@16
|
222 *
|
Chris@16
|
223 * @return null|int
|
Chris@16
|
224 */
|
Chris@16
|
225 public function getEpisode()
|
Chris@16
|
226 {
|
Chris@16
|
227 if (isset($this->data['episode'])) {
|
Chris@16
|
228 return $this->data['episode'];
|
Chris@16
|
229 }
|
Chris@16
|
230
|
Chris@16
|
231 $episode = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:episode)');
|
Chris@16
|
232
|
Chris@16
|
233 if (! $episode) {
|
Chris@16
|
234 $episode = null;
|
Chris@16
|
235 }
|
Chris@16
|
236
|
Chris@16
|
237 $this->data['episode'] = null === $episode ? $episode : (int) $episode;
|
Chris@16
|
238
|
Chris@16
|
239 return $this->data['episode'];
|
Chris@16
|
240 }
|
Chris@16
|
241
|
Chris@16
|
242 /**
|
Chris@16
|
243 * Get the episode number
|
Chris@16
|
244 *
|
Chris@16
|
245 * @return string One of "full", "trailer", or "bonus"; defaults to "full".
|
Chris@16
|
246 */
|
Chris@16
|
247 public function getEpisodeType()
|
Chris@16
|
248 {
|
Chris@16
|
249 if (isset($this->data['episodeType'])) {
|
Chris@16
|
250 return $this->data['episodeType'];
|
Chris@16
|
251 }
|
Chris@16
|
252
|
Chris@16
|
253 $type = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:episodeType)');
|
Chris@16
|
254
|
Chris@16
|
255 if (! $type) {
|
Chris@16
|
256 $type = 'full';
|
Chris@16
|
257 }
|
Chris@16
|
258
|
Chris@16
|
259 $this->data['episodeType'] = (string) $type;
|
Chris@16
|
260
|
Chris@16
|
261 return $this->data['episodeType'];
|
Chris@16
|
262 }
|
Chris@16
|
263
|
Chris@16
|
264 /**
|
Chris@16
|
265 * Is the episode closed captioned?
|
Chris@16
|
266 *
|
Chris@16
|
267 * Returns true only if itunes:isClosedCaptioned has the value 'Yes'.
|
Chris@16
|
268 *
|
Chris@16
|
269 * @return bool
|
Chris@16
|
270 */
|
Chris@16
|
271 public function isClosedCaptioned()
|
Chris@16
|
272 {
|
Chris@16
|
273 if (isset($this->data['isClosedCaptioned'])) {
|
Chris@16
|
274 return $this->data['isClosedCaptioned'];
|
Chris@16
|
275 }
|
Chris@16
|
276
|
Chris@16
|
277 $status = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:isClosedCaptioned)');
|
Chris@16
|
278
|
Chris@16
|
279 $this->data['isClosedCaptioned'] = $status === 'Yes';
|
Chris@16
|
280
|
Chris@16
|
281 return $this->data['isClosedCaptioned'];
|
Chris@16
|
282 }
|
Chris@16
|
283
|
Chris@16
|
284 /**
|
Chris@16
|
285 * Get the season number
|
Chris@16
|
286 *
|
Chris@16
|
287 * @return null|int
|
Chris@16
|
288 */
|
Chris@16
|
289 public function getSeason()
|
Chris@16
|
290 {
|
Chris@16
|
291 if (isset($this->data['season'])) {
|
Chris@16
|
292 return $this->data['season'];
|
Chris@16
|
293 }
|
Chris@16
|
294
|
Chris@16
|
295 $season = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:season)');
|
Chris@16
|
296
|
Chris@16
|
297 if (! $season) {
|
Chris@16
|
298 $season = null;
|
Chris@16
|
299 }
|
Chris@16
|
300
|
Chris@16
|
301 $this->data['season'] = null === $season ? $season : (int) $season;
|
Chris@16
|
302
|
Chris@16
|
303 return $this->data['season'];
|
Chris@16
|
304 }
|
Chris@16
|
305
|
Chris@16
|
306 /**
|
Chris@0
|
307 * Register iTunes namespace
|
Chris@0
|
308 *
|
Chris@0
|
309 */
|
Chris@0
|
310 protected function registerNamespaces()
|
Chris@0
|
311 {
|
Chris@0
|
312 $this->xpath->registerNamespace('itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
|
Chris@0
|
313 }
|
Chris@0
|
314 }
|