annotate vendor/zendframework/zend-feed/src/Reader/Entry/Atom.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
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\Entry;
Chris@0 11
Chris@0 12 use DOMElement;
Chris@0 13 use DOMXPath;
Chris@0 14 use Zend\Feed\Reader;
Chris@0 15
Chris@0 16 class Atom extends AbstractEntry implements EntryInterface
Chris@0 17 {
Chris@0 18 /**
Chris@0 19 * XPath query
Chris@0 20 *
Chris@0 21 * @var string
Chris@0 22 */
Chris@0 23 protected $xpathQuery = '';
Chris@0 24
Chris@0 25 /**
Chris@0 26 * Constructor
Chris@0 27 *
Chris@0 28 * @param DOMElement $entry
Chris@0 29 * @param int $entryKey
Chris@0 30 * @param string $type
Chris@0 31 */
Chris@0 32 public function __construct(DOMElement $entry, $entryKey, $type = null)
Chris@0 33 {
Chris@0 34 parent::__construct($entry, $entryKey, $type);
Chris@0 35
Chris@0 36 // Everyone by now should know XPath indices start from 1 not 0
Chris@0 37 $this->xpathQuery = '//atom:entry[' . ($this->entryKey + 1) . ']';
Chris@0 38
Chris@0 39 $manager = Reader\Reader::getExtensionManager();
Chris@0 40 $extensions = ['Atom\Entry', 'Thread\Entry', 'DublinCore\Entry'];
Chris@0 41
Chris@0 42 foreach ($extensions as $name) {
Chris@0 43 $extension = $manager->get($name);
Chris@0 44 $extension->setEntryElement($entry);
Chris@0 45 $extension->setEntryKey($entryKey);
Chris@0 46 $extension->setType($type);
Chris@0 47 $this->extensions[$name] = $extension;
Chris@0 48 }
Chris@0 49 }
Chris@0 50
Chris@0 51 /**
Chris@18 52 * @inheritdoc
Chris@0 53 */
Chris@0 54 public function getAuthor($index = 0)
Chris@0 55 {
Chris@0 56 $authors = $this->getAuthors();
Chris@0 57
Chris@0 58 if (isset($authors[$index])) {
Chris@0 59 return $authors[$index];
Chris@0 60 }
Chris@0 61
Chris@0 62 return;
Chris@0 63 }
Chris@0 64
Chris@0 65 /**
Chris@0 66 * Get an array with feed authors
Chris@0 67 *
Chris@0 68 * @return array
Chris@0 69 */
Chris@0 70 public function getAuthors()
Chris@0 71 {
Chris@0 72 if (array_key_exists('authors', $this->data)) {
Chris@0 73 return $this->data['authors'];
Chris@0 74 }
Chris@0 75
Chris@0 76 $people = $this->getExtension('Atom')->getAuthors();
Chris@0 77
Chris@0 78 $this->data['authors'] = $people;
Chris@0 79
Chris@0 80 return $this->data['authors'];
Chris@0 81 }
Chris@0 82
Chris@0 83 /**
Chris@0 84 * Get the entry content
Chris@0 85 *
Chris@0 86 * @return string
Chris@0 87 */
Chris@0 88 public function getContent()
Chris@0 89 {
Chris@0 90 if (array_key_exists('content', $this->data)) {
Chris@0 91 return $this->data['content'];
Chris@0 92 }
Chris@0 93
Chris@0 94 $content = $this->getExtension('Atom')->getContent();
Chris@0 95
Chris@0 96 $this->data['content'] = $content;
Chris@0 97
Chris@0 98 return $this->data['content'];
Chris@0 99 }
Chris@0 100
Chris@0 101 /**
Chris@0 102 * Get the entry creation date
Chris@0 103 *
Chris@0 104 * @return \DateTime
Chris@0 105 */
Chris@0 106 public function getDateCreated()
Chris@0 107 {
Chris@0 108 if (array_key_exists('datecreated', $this->data)) {
Chris@0 109 return $this->data['datecreated'];
Chris@0 110 }
Chris@0 111
Chris@0 112 $dateCreated = $this->getExtension('Atom')->getDateCreated();
Chris@0 113
Chris@0 114 $this->data['datecreated'] = $dateCreated;
Chris@0 115
Chris@0 116 return $this->data['datecreated'];
Chris@0 117 }
Chris@0 118
Chris@0 119 /**
Chris@0 120 * Get the entry modification date
Chris@0 121 *
Chris@0 122 * @return \DateTime
Chris@0 123 */
Chris@0 124 public function getDateModified()
Chris@0 125 {
Chris@0 126 if (array_key_exists('datemodified', $this->data)) {
Chris@0 127 return $this->data['datemodified'];
Chris@0 128 }
Chris@0 129
Chris@0 130 $dateModified = $this->getExtension('Atom')->getDateModified();
Chris@0 131
Chris@0 132 $this->data['datemodified'] = $dateModified;
Chris@0 133
Chris@0 134 return $this->data['datemodified'];
Chris@0 135 }
Chris@0 136
Chris@0 137 /**
Chris@0 138 * Get the entry description
Chris@0 139 *
Chris@0 140 * @return string
Chris@0 141 */
Chris@0 142 public function getDescription()
Chris@0 143 {
Chris@0 144 if (array_key_exists('description', $this->data)) {
Chris@0 145 return $this->data['description'];
Chris@0 146 }
Chris@0 147
Chris@0 148 $description = $this->getExtension('Atom')->getDescription();
Chris@0 149
Chris@0 150 $this->data['description'] = $description;
Chris@0 151
Chris@0 152 return $this->data['description'];
Chris@0 153 }
Chris@0 154
Chris@0 155 /**
Chris@0 156 * Get the entry enclosure
Chris@0 157 *
Chris@0 158 * @return string
Chris@0 159 */
Chris@0 160 public function getEnclosure()
Chris@0 161 {
Chris@0 162 if (array_key_exists('enclosure', $this->data)) {
Chris@0 163 return $this->data['enclosure'];
Chris@0 164 }
Chris@0 165
Chris@0 166 $enclosure = $this->getExtension('Atom')->getEnclosure();
Chris@0 167
Chris@0 168 $this->data['enclosure'] = $enclosure;
Chris@0 169
Chris@0 170 return $this->data['enclosure'];
Chris@0 171 }
Chris@0 172
Chris@0 173 /**
Chris@0 174 * Get the entry ID
Chris@0 175 *
Chris@0 176 * @return string
Chris@0 177 */
Chris@0 178 public function getId()
Chris@0 179 {
Chris@0 180 if (array_key_exists('id', $this->data)) {
Chris@0 181 return $this->data['id'];
Chris@0 182 }
Chris@0 183
Chris@0 184 $id = $this->getExtension('Atom')->getId();
Chris@0 185
Chris@0 186 $this->data['id'] = $id;
Chris@0 187
Chris@0 188 return $this->data['id'];
Chris@0 189 }
Chris@0 190
Chris@0 191 /**
Chris@0 192 * Get a specific link
Chris@0 193 *
Chris@0 194 * @param int $index
Chris@0 195 * @return string
Chris@0 196 */
Chris@0 197 public function getLink($index = 0)
Chris@0 198 {
Chris@12 199 if (! array_key_exists('links', $this->data)) {
Chris@0 200 $this->getLinks();
Chris@0 201 }
Chris@0 202
Chris@0 203 if (isset($this->data['links'][$index])) {
Chris@0 204 return $this->data['links'][$index];
Chris@0 205 }
Chris@0 206
Chris@0 207 return;
Chris@0 208 }
Chris@0 209
Chris@0 210 /**
Chris@0 211 * Get all links
Chris@0 212 *
Chris@0 213 * @return array
Chris@0 214 */
Chris@0 215 public function getLinks()
Chris@0 216 {
Chris@0 217 if (array_key_exists('links', $this->data)) {
Chris@0 218 return $this->data['links'];
Chris@0 219 }
Chris@0 220
Chris@0 221 $links = $this->getExtension('Atom')->getLinks();
Chris@0 222
Chris@0 223 $this->data['links'] = $links;
Chris@0 224
Chris@0 225 return $this->data['links'];
Chris@0 226 }
Chris@0 227
Chris@0 228 /**
Chris@0 229 * Get a permalink to the entry
Chris@0 230 *
Chris@0 231 * @return string
Chris@0 232 */
Chris@0 233 public function getPermalink()
Chris@0 234 {
Chris@0 235 return $this->getLink(0);
Chris@0 236 }
Chris@0 237
Chris@0 238 /**
Chris@0 239 * Get the entry title
Chris@0 240 *
Chris@0 241 * @return string
Chris@0 242 */
Chris@0 243 public function getTitle()
Chris@0 244 {
Chris@0 245 if (array_key_exists('title', $this->data)) {
Chris@0 246 return $this->data['title'];
Chris@0 247 }
Chris@0 248
Chris@0 249 $title = $this->getExtension('Atom')->getTitle();
Chris@0 250
Chris@0 251 $this->data['title'] = $title;
Chris@0 252
Chris@0 253 return $this->data['title'];
Chris@0 254 }
Chris@0 255
Chris@0 256 /**
Chris@0 257 * Get the number of comments/replies for current entry
Chris@0 258 *
Chris@0 259 * @return int
Chris@0 260 */
Chris@0 261 public function getCommentCount()
Chris@0 262 {
Chris@0 263 if (array_key_exists('commentcount', $this->data)) {
Chris@0 264 return $this->data['commentcount'];
Chris@0 265 }
Chris@0 266
Chris@0 267 $commentcount = $this->getExtension('Thread')->getCommentCount();
Chris@0 268
Chris@12 269 if (! $commentcount) {
Chris@0 270 $commentcount = $this->getExtension('Atom')->getCommentCount();
Chris@0 271 }
Chris@0 272
Chris@0 273 $this->data['commentcount'] = $commentcount;
Chris@0 274
Chris@0 275 return $this->data['commentcount'];
Chris@0 276 }
Chris@0 277
Chris@0 278 /**
Chris@0 279 * Returns a URI pointing to the HTML page where comments can be made on this entry
Chris@0 280 *
Chris@0 281 * @return string
Chris@0 282 */
Chris@0 283 public function getCommentLink()
Chris@0 284 {
Chris@0 285 if (array_key_exists('commentlink', $this->data)) {
Chris@0 286 return $this->data['commentlink'];
Chris@0 287 }
Chris@0 288
Chris@0 289 $commentlink = $this->getExtension('Atom')->getCommentLink();
Chris@0 290
Chris@0 291 $this->data['commentlink'] = $commentlink;
Chris@0 292
Chris@0 293 return $this->data['commentlink'];
Chris@0 294 }
Chris@0 295
Chris@0 296 /**
Chris@0 297 * Returns a URI pointing to a feed of all comments for this entry
Chris@0 298 *
Chris@0 299 * @return string
Chris@0 300 */
Chris@0 301 public function getCommentFeedLink()
Chris@0 302 {
Chris@0 303 if (array_key_exists('commentfeedlink', $this->data)) {
Chris@0 304 return $this->data['commentfeedlink'];
Chris@0 305 }
Chris@0 306
Chris@0 307 $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink();
Chris@0 308
Chris@0 309 $this->data['commentfeedlink'] = $commentfeedlink;
Chris@0 310
Chris@0 311 return $this->data['commentfeedlink'];
Chris@0 312 }
Chris@0 313
Chris@0 314 /**
Chris@0 315 * Get category data as a Reader\Reader_Collection_Category object
Chris@0 316 *
Chris@0 317 * @return Reader\Collection\Category
Chris@0 318 */
Chris@0 319 public function getCategories()
Chris@0 320 {
Chris@0 321 if (array_key_exists('categories', $this->data)) {
Chris@0 322 return $this->data['categories'];
Chris@0 323 }
Chris@0 324
Chris@0 325 $categoryCollection = $this->getExtension('Atom')->getCategories();
Chris@0 326
Chris@0 327 if (count($categoryCollection) == 0) {
Chris@0 328 $categoryCollection = $this->getExtension('DublinCore')->getCategories();
Chris@0 329 }
Chris@0 330
Chris@0 331 $this->data['categories'] = $categoryCollection;
Chris@0 332
Chris@0 333 return $this->data['categories'];
Chris@0 334 }
Chris@0 335
Chris@0 336 /**
Chris@0 337 * Get source feed metadata from the entry
Chris@0 338 *
Chris@0 339 * @return Reader\Feed\Atom\Source|null
Chris@0 340 */
Chris@0 341 public function getSource()
Chris@0 342 {
Chris@0 343 if (array_key_exists('source', $this->data)) {
Chris@0 344 return $this->data['source'];
Chris@0 345 }
Chris@0 346
Chris@0 347 $source = $this->getExtension('Atom')->getSource();
Chris@0 348
Chris@0 349 $this->data['source'] = $source;
Chris@0 350
Chris@0 351 return $this->data['source'];
Chris@0 352 }
Chris@0 353
Chris@0 354 /**
Chris@0 355 * Set the XPath query (incl. on all Extensions)
Chris@0 356 *
Chris@0 357 * @param DOMXPath $xpath
Chris@0 358 * @return void
Chris@0 359 */
Chris@0 360 public function setXpath(DOMXPath $xpath)
Chris@0 361 {
Chris@0 362 parent::setXpath($xpath);
Chris@0 363 foreach ($this->extensions as $extension) {
Chris@0 364 $extension->setXpath($this->xpath);
Chris@0 365 }
Chris@0 366 }
Chris@0 367 }