comparison vendor/zendframework/zend-feed/src/Reader/Feed/Atom.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 7a779792577d
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2 /**
3 * Zend Framework (http://framework.zend.com/)
4 *
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 */
9
10 namespace Zend\Feed\Reader\Feed;
11
12 use DOMDocument;
13 use Zend\Feed\Reader;
14
15 /**
16 */
17 class Atom extends AbstractFeed
18 {
19 /**
20 * Constructor
21 *
22 * @param DOMDocument $dom
23 * @param string $type
24 */
25 public function __construct(DOMDocument $dom, $type = null)
26 {
27 parent::__construct($dom, $type);
28 $manager = Reader\Reader::getExtensionManager();
29
30 $atomFeed = $manager->get('Atom\Feed');
31 $atomFeed->setDomDocument($dom);
32 $atomFeed->setType($this->data['type']);
33 $atomFeed->setXpath($this->xpath);
34 $this->extensions['Atom\\Feed'] = $atomFeed;
35
36 $atomFeed = $manager->get('DublinCore\Feed');
37 $atomFeed->setDomDocument($dom);
38 $atomFeed->setType($this->data['type']);
39 $atomFeed->setXpath($this->xpath);
40 $this->extensions['DublinCore\\Feed'] = $atomFeed;
41
42 foreach ($this->extensions as $extension) {
43 $extension->setXpathPrefix('/atom:feed');
44 }
45 }
46
47 /**
48 * Get a single author
49 *
50 * @param int $index
51 * @return string|null
52 */
53 public function getAuthor($index = 0)
54 {
55 $authors = $this->getAuthors();
56
57 if (isset($authors[$index])) {
58 return $authors[$index];
59 }
60
61 return;
62 }
63
64 /**
65 * Get an array with feed authors
66 *
67 * @return array
68 */
69 public function getAuthors()
70 {
71 if (array_key_exists('authors', $this->data)) {
72 return $this->data['authors'];
73 }
74
75 $authors = $this->getExtension('Atom')->getAuthors();
76
77 $this->data['authors'] = $authors;
78
79 return $this->data['authors'];
80 }
81
82 /**
83 * Get the copyright entry
84 *
85 * @return string|null
86 */
87 public function getCopyright()
88 {
89 if (array_key_exists('copyright', $this->data)) {
90 return $this->data['copyright'];
91 }
92
93 $copyright = $this->getExtension('Atom')->getCopyright();
94
95 if (!$copyright) {
96 $copyright = null;
97 }
98
99 $this->data['copyright'] = $copyright;
100
101 return $this->data['copyright'];
102 }
103
104 /**
105 * Get the feed creation date
106 *
107 * @return string|null
108 */
109 public function getDateCreated()
110 {
111 if (array_key_exists('datecreated', $this->data)) {
112 return $this->data['datecreated'];
113 }
114
115 $dateCreated = $this->getExtension('Atom')->getDateCreated();
116
117 if (!$dateCreated) {
118 $dateCreated = null;
119 }
120
121 $this->data['datecreated'] = $dateCreated;
122
123 return $this->data['datecreated'];
124 }
125
126 /**
127 * Get the feed modification date
128 *
129 * @return string|null
130 */
131 public function getDateModified()
132 {
133 if (array_key_exists('datemodified', $this->data)) {
134 return $this->data['datemodified'];
135 }
136
137 $dateModified = $this->getExtension('Atom')->getDateModified();
138
139 if (!$dateModified) {
140 $dateModified = null;
141 }
142
143 $this->data['datemodified'] = $dateModified;
144
145 return $this->data['datemodified'];
146 }
147
148 /**
149 * Get the feed lastBuild date. This is not implemented in Atom.
150 *
151 * @return string|null
152 */
153 public function getLastBuildDate()
154 {
155 return;
156 }
157
158 /**
159 * Get the feed description
160 *
161 * @return string|null
162 */
163 public function getDescription()
164 {
165 if (array_key_exists('description', $this->data)) {
166 return $this->data['description'];
167 }
168
169 $description = $this->getExtension('Atom')->getDescription();
170
171 if (!$description) {
172 $description = null;
173 }
174
175 $this->data['description'] = $description;
176
177 return $this->data['description'];
178 }
179
180 /**
181 * Get the feed generator entry
182 *
183 * @return string|null
184 */
185 public function getGenerator()
186 {
187 if (array_key_exists('generator', $this->data)) {
188 return $this->data['generator'];
189 }
190
191 $generator = $this->getExtension('Atom')->getGenerator();
192
193 $this->data['generator'] = $generator;
194
195 return $this->data['generator'];
196 }
197
198 /**
199 * Get the feed ID
200 *
201 * @return string|null
202 */
203 public function getId()
204 {
205 if (array_key_exists('id', $this->data)) {
206 return $this->data['id'];
207 }
208
209 $id = $this->getExtension('Atom')->getId();
210
211 $this->data['id'] = $id;
212
213 return $this->data['id'];
214 }
215
216 /**
217 * Get the feed language
218 *
219 * @return string|null
220 */
221 public function getLanguage()
222 {
223 if (array_key_exists('language', $this->data)) {
224 return $this->data['language'];
225 }
226
227 $language = $this->getExtension('Atom')->getLanguage();
228
229 if (!$language) {
230 $language = $this->xpath->evaluate('string(//@xml:lang[1])');
231 }
232
233 if (!$language) {
234 $language = null;
235 }
236
237 $this->data['language'] = $language;
238
239 return $this->data['language'];
240 }
241
242 /**
243 * Get a link to the source website
244 *
245 * @return string|null
246 */
247 public function getBaseUrl()
248 {
249 if (array_key_exists('baseUrl', $this->data)) {
250 return $this->data['baseUrl'];
251 }
252
253 $baseUrl = $this->getExtension('Atom')->getBaseUrl();
254
255 $this->data['baseUrl'] = $baseUrl;
256
257 return $this->data['baseUrl'];
258 }
259
260 /**
261 * Get a link to the source website
262 *
263 * @return string|null
264 */
265 public function getLink()
266 {
267 if (array_key_exists('link', $this->data)) {
268 return $this->data['link'];
269 }
270
271 $link = $this->getExtension('Atom')->getLink();
272
273 $this->data['link'] = $link;
274
275 return $this->data['link'];
276 }
277
278 /**
279 * Get feed image data
280 *
281 * @return array|null
282 */
283 public function getImage()
284 {
285 if (array_key_exists('image', $this->data)) {
286 return $this->data['image'];
287 }
288
289 $link = $this->getExtension('Atom')->getImage();
290
291 $this->data['image'] = $link;
292
293 return $this->data['image'];
294 }
295
296 /**
297 * Get a link to the feed's XML Url
298 *
299 * @return string|null
300 */
301 public function getFeedLink()
302 {
303 if (array_key_exists('feedlink', $this->data)) {
304 return $this->data['feedlink'];
305 }
306
307 $link = $this->getExtension('Atom')->getFeedLink();
308
309 if ($link === null || empty($link)) {
310 $link = $this->getOriginalSourceUri();
311 }
312
313 $this->data['feedlink'] = $link;
314
315 return $this->data['feedlink'];
316 }
317
318 /**
319 * Get the feed title
320 *
321 * @return string|null
322 */
323 public function getTitle()
324 {
325 if (array_key_exists('title', $this->data)) {
326 return $this->data['title'];
327 }
328
329 $title = $this->getExtension('Atom')->getTitle();
330
331 $this->data['title'] = $title;
332
333 return $this->data['title'];
334 }
335
336 /**
337 * Get an array of any supported Pusubhubbub endpoints
338 *
339 * @return array|null
340 */
341 public function getHubs()
342 {
343 if (array_key_exists('hubs', $this->data)) {
344 return $this->data['hubs'];
345 }
346
347 $hubs = $this->getExtension('Atom')->getHubs();
348
349 $this->data['hubs'] = $hubs;
350
351 return $this->data['hubs'];
352 }
353
354 /**
355 * Get all categories
356 *
357 * @return Reader\Collection\Category
358 */
359 public function getCategories()
360 {
361 if (array_key_exists('categories', $this->data)) {
362 return $this->data['categories'];
363 }
364
365 $categoryCollection = $this->getExtension('Atom')->getCategories();
366
367 if (count($categoryCollection) == 0) {
368 $categoryCollection = $this->getExtension('DublinCore')->getCategories();
369 }
370
371 $this->data['categories'] = $categoryCollection;
372
373 return $this->data['categories'];
374 }
375
376 /**
377 * Read all entries to the internal entries array
378 *
379 * @return void
380 */
381 protected function indexEntries()
382 {
383 if ($this->getType() == Reader\Reader::TYPE_ATOM_10 ||
384 $this->getType() == Reader\Reader::TYPE_ATOM_03) {
385 $entries = $this->xpath->evaluate('//atom:entry');
386
387 foreach ($entries as $index => $entry) {
388 $this->entries[$index] = $entry;
389 }
390 }
391 }
392
393 /**
394 * Register the default namespaces for the current feed format
395 *
396 */
397 protected function registerNamespaces()
398 {
399 switch ($this->data['type']) {
400 case Reader\Reader::TYPE_ATOM_03:
401 $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03);
402 break;
403 case Reader\Reader::TYPE_ATOM_10:
404 default:
405 $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10);
406 }
407 }
408 }