summaryrefslogtreecommitdiffstats
path: root/3rdparty/ZendFeed/Reader/Entry/Rss.php
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/ZendFeed/Reader/Entry/Rss.php')
-rw-r--r--3rdparty/ZendFeed/Reader/Entry/Rss.php599
1 files changed, 0 insertions, 599 deletions
diff --git a/3rdparty/ZendFeed/Reader/Entry/Rss.php b/3rdparty/ZendFeed/Reader/Entry/Rss.php
deleted file mode 100644
index 27337b1b0..000000000
--- a/3rdparty/ZendFeed/Reader/Entry/Rss.php
+++ /dev/null
@@ -1,599 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Feed\Reader\Entry;
-
-use DateTime;
-use DOMElement;
-use DOMXPath;
-use Zend\Feed\Reader;
-use Zend\Feed\Reader\Exception;
-
-class Rss extends AbstractEntry implements EntryInterface
-{
-
- /**
- * XPath query for RDF
- *
- * @var string
- */
- protected $xpathQueryRdf = '';
-
- /**
- * XPath query for RSS
- *
- * @var string
- */
- protected $xpathQueryRss = '';
-
- /**
- * Constructor
- *
- * @param DOMElement $entry
- * @param string $entryKey
- * @param string $type
- */
- public function __construct(DOMElement $entry, $entryKey, $type = null)
- {
- parent::__construct($entry, $entryKey, $type);
- $this->xpathQueryRss = '//item[' . ($this->entryKey+1) . ']';
- $this->xpathQueryRdf = '//rss:item[' . ($this->entryKey+1) . ']';
-
- $manager = Reader\Reader::getExtensionManager();
- $extensions = array(
- 'DublinCore\Entry',
- 'Content\Entry',
- 'Atom\Entry',
- 'WellFormedWeb\Entry',
- 'Slash\Entry',
- 'Thread\Entry',
- );
- foreach ($extensions as $name) {
- $extension = $manager->get($name);
- $extension->setEntryElement($entry);
- $extension->setEntryKey($entryKey);
- $extension->setType($type);
- $this->extensions[$name] = $extension;
- }
- }
-
- /**
- * Get an author entry
- *
- * @param int $index
- * @return string
- */
- public function getAuthor($index = 0)
- {
- $authors = $this->getAuthors();
-
- if (isset($authors[$index])) {
- return $authors[$index];
- }
-
- return null;
- }
-
- /**
- * Get an array with feed authors
- *
- * @return array
- */
- public function getAuthors()
- {
- if (array_key_exists('authors', $this->data)) {
- return $this->data['authors'];
- }
-
- $authors = array();
- $authorsDc = $this->getExtension('DublinCore')->getAuthors();
- if (!empty($authorsDc)) {
- foreach ($authorsDc as $author) {
- $authors[] = array(
- 'name' => $author['name']
- );
- }
- }
-
- if ($this->getType() !== Reader\Reader::TYPE_RSS_10
- && $this->getType() !== Reader\Reader::TYPE_RSS_090) {
- $list = $this->xpath->query($this->xpathQueryRss . '//author');
- } else {
- $list = $this->xpath->query($this->xpathQueryRdf . '//rss:author');
- }
- if ($list->length) {
- foreach ($list as $author) {
- $string = trim($author->nodeValue);
- $email = null;
- $name = null;
- $data = array();
- // Pretty rough parsing - but it's a catchall
- if (preg_match("/^.*@[^ ]*/", $string, $matches)) {
- $data['email'] = trim($matches[0]);
- if (preg_match("/\((.*)\)$/", $string, $matches)) {
- $data['name'] = $matches[1];
- }
- $authors[] = $data;
- }
- }
- }
-
- if (count($authors) == 0) {
- $authors = $this->getExtension('Atom')->getAuthors();
- } else {
- $authors = new Reader\Collection\Author(
- Reader\Reader::arrayUnique($authors)
- );
- }
-
- if (count($authors) == 0) {
- $authors = null;
- }
-
- $this->data['authors'] = $authors;
-
- return $this->data['authors'];
- }
-
- /**
- * Get the entry content
- *
- * @return string
- */
- public function getContent()
- {
- if (array_key_exists('content', $this->data)) {
- return $this->data['content'];
- }
-
- $content = $this->getExtension('Content')->getContent();
-
- if (!$content) {
- $content = $this->getDescription();
- }
-
- if (empty($content)) {
- $content = $this->getExtension('Atom')->getContent();
- }
-
- $this->data['content'] = $content;
-
- return $this->data['content'];
- }
-
- /**
- * Get the entry's date of creation
- *
- * @return string
- */
- public function getDateCreated()
- {
- return $this->getDateModified();
- }
-
- /**
- * Get the entry's date of modification
- *
- * @throws Exception\RuntimeException
- * @return string
- */
- public function getDateModified()
- {
- if (array_key_exists('datemodified', $this->data)) {
- return $this->data['datemodified'];
- }
-
- $dateModified = null;
- $date = null;
-
- if ($this->getType() !== Reader\Reader::TYPE_RSS_10
- && $this->getType() !== Reader\Reader::TYPE_RSS_090
- ) {
- $dateModified = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/pubDate)');
- if ($dateModified) {
- $dateModifiedParsed = strtotime($dateModified);
- if ($dateModifiedParsed) {
- $date = new DateTime('@' . $dateModifiedParsed);
- } else {
- $dateStandards = array(DateTime::RSS, DateTime::RFC822,
- DateTime::RFC2822, null);
- foreach ($dateStandards as $standard) {
- try {
- $date = date_create_from_format($standard, $dateModified);
- break;
- } catch (\Exception $e) {
- if ($standard == null) {
- throw new Exception\RuntimeException(
- 'Could not load date due to unrecognised'
- .' format (should follow RFC 822 or 2822):'
- . $e->getMessage(),
- 0, $e
- );
- }
- }
- }
- }
- }
- }
-
- if (!$date) {
- $date = $this->getExtension('DublinCore')->getDate();
- }
-
- if (!$date) {
- $date = $this->getExtension('Atom')->getDateModified();
- }
-
- if (!$date) {
- $date = null;
- }
-
- $this->data['datemodified'] = $date;
-
- return $this->data['datemodified'];
- }
-
- /**
- * Get the entry description
- *
- * @return string
- */
- public function getDescription()
- {
- if (array_key_exists('description', $this->data)) {
- return $this->data['description'];
- }
-
- $description = null;
-
- if ($this->getType() !== Reader\Reader::TYPE_RSS_10
- && $this->getType() !== Reader\Reader::TYPE_RSS_090
- ) {
- $description = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/description)');
- } else {
- $description = $this->xpath->evaluate('string(' . $this->xpathQueryRdf . '/rss:description)');
- }
-
- if (!$description) {
- $description = $this->getExtension('DublinCore')->getDescription();
- }
-
- if (empty($description)) {
- $description = $this->getExtension('Atom')->getDescription();
- }
-
- if (!$description) {
- $description = null;
- }
-
- $this->data['description'] = $description;
-
- return $this->data['description'];
- }
-
- /**
- * Get the entry enclosure
- * @return string
- */
- public function getEnclosure()
- {
- if (array_key_exists('enclosure', $this->data)) {
- return $this->data['enclosure'];
- }
-
- $enclosure = null;
-
- if ($this->getType() == Reader\Reader::TYPE_RSS_20) {
- $nodeList = $this->xpath->query($this->xpathQueryRss . '/enclosure');
-
- if ($nodeList->length > 0) {
- $enclosure = new \stdClass();
- $enclosure->url = $nodeList->item(0)->getAttribute('url');
- $enclosure->length = $nodeList->item(0)->getAttribute('length');
- $enclosure->type = $nodeList->item(0)->getAttribute('type');
- }
- }
-
- if (!$enclosure) {
- $enclosure = $this->getExtension('Atom')->getEnclosure();
- }
-
- $this->data['enclosure'] = $enclosure;
-
- return $this->data['enclosure'];
- }
-
- /**
- * Get the entry ID
- *
- * @return string
- */
- public function getId()
- {
- if (array_key_exists('id', $this->data)) {
- return $this->data['id'];
- }
-
- $id = null;
-
- if ($this->getType() !== Reader\Reader::TYPE_RSS_10
- && $this->getType() !== Reader\Reader::TYPE_RSS_090
- ) {
- $id = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/guid)');
- }
-
- if (!$id) {
- $id = $this->getExtension('DublinCore')->getId();
- }
-
- if (empty($id)) {
- $id = $this->getExtension('Atom')->getId();
- }
-
- if (!$id) {
- if ($this->getPermalink()) {
- $id = $this->getPermalink();
- } elseif ($this->getTitle()) {
- $id = $this->getTitle();
- } else {
- $id = null;
- }
- }
-
- $this->data['id'] = $id;
-
- return $this->data['id'];
- }
-
- /**
- * Get a specific link
- *
- * @param int $index
- * @return string
- */
- public function getLink($index = 0)
- {
- if (!array_key_exists('links', $this->data)) {
- $this->getLinks();
- }
-
- if (isset($this->data['links'][$index])) {
- return $this->data['links'][$index];
- }
-
- return null;
- }
-
- /**
- * Get all links
- *
- * @return array
- */
- public function getLinks()
- {
- if (array_key_exists('links', $this->data)) {
- return $this->data['links'];
- }
-
- $links = array();
-
- if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
- $this->getType() !== Reader\Reader::TYPE_RSS_090) {
- $list = $this->xpath->query($this->xpathQueryRss . '//link');
- } else {
- $list = $this->xpath->query($this->xpathQueryRdf . '//rss:link');
- }
-
- if (!$list->length) {
- $links = $this->getExtension('Atom')->getLinks();
- } else {
- foreach ($list as $link) {
- $links[] = $link->nodeValue;
- }
- }
-
- $this->data['links'] = $links;
-
- return $this->data['links'];
- }
-
- /**
- * Get all categories
- *
- * @return Reader\Collection\Category
- */
- public function getCategories()
- {
- if (array_key_exists('categories', $this->data)) {
- return $this->data['categories'];
- }
-
- if ($this->getType() !== Reader\Reader::TYPE_RSS_10 &&
- $this->getType() !== Reader\Reader::TYPE_RSS_090) {
- $list = $this->xpath->query($this->xpathQueryRss . '//category');
- } else {
- $list = $this->xpath->query($this->xpathQueryRdf . '//rss:category');
- }
-
- if ($list->length) {
- $categoryCollection = new Reader\Collection\Category;
- foreach ($list as $category) {
- $categoryCollection[] = array(
- 'term' => $category->nodeValue,
- 'scheme' => $category->getAttribute('domain'),
- 'label' => $category->nodeValue,
- );
- }
- } else {
- $categoryCollection = $this->getExtension('DublinCore')->getCategories();
- }
-
- if (count($categoryCollection) == 0) {
- $categoryCollection = $this->getExtension('Atom')->getCategories();
- }
-
- $this->data['categories'] = $categoryCollection;
-
- return $this->data['categories'];
- }
-
- /**
- * Get a permalink to the entry
- *
- * @return string
- */
- public function getPermalink()
- {
- return $this->getLink(0);
- }
-
- /**
- * Get the entry title
- *
- * @return string
- */
- public function getTitle()
- {
- if (array_key_exists('title', $this->data)) {
- return $this->data['title'];
- }
-
- $title = null;
-
- if ($this->getType() !== Reader\Reader::TYPE_RSS_10
- && $this->getType() !== Reader\Reader::TYPE_RSS_090
- ) {
- $title = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/title)');
- } else {
- $title = $this->xpath->evaluate('string(' . $this->xpathQueryRdf . '/rss:title)');
- }
-
- if (!$title) {
- $title = $this->getExtension('DublinCore')->getTitle();
- }
-
- if (!$title) {
- $title = $this->getExtension('Atom')->getTitle();
- }
-
- if (!$title) {
- $title = null;
- }
-
- $this->data['title'] = $title;
-
- return $this->data['title'];
- }
-
- /**
- * Get the number of comments/replies for current entry
- *
- * @return string|null
- */
- public function getCommentCount()
- {
- if (array_key_exists('commentcount', $this->data)) {
- return $this->data['commentcount'];
- }
-
- $commentcount = $this->getExtension('Slash')->getCommentCount();
-
- if (!$commentcount) {
- $commentcount = $this->getExtension('Thread')->getCommentCount();
- }
-
- if (!$commentcount) {
- $commentcount = $this->getExtension('Atom')->getCommentCount();
- }
-
- if (!$commentcount) {
- $commentcount = null;
- }
-
- $this->data['commentcount'] = $commentcount;
-
- return $this->data['commentcount'];
- }
-
- /**
- * Returns a URI pointing to the HTML page where comments can be made on this entry
- *
- * @return string
- */
- public function getCommentLink()
- {
- if (array_key_exists('commentlink', $this->data)) {
- return $this->data['commentlink'];
- }
-
- $commentlink = null;
-
- if ($this->getType() !== Reader\Reader::TYPE_RSS_10
- && $this->getType() !== Reader\Reader::TYPE_RSS_090
- ) {
- $commentlink = $this->xpath->evaluate('string(' . $this->xpathQueryRss . '/comments)');
- }
-
- if (!$commentlink) {
- $commentlink = $this->getExtension('Atom')->getCommentLink();
- }
-
- if (!$commentlink) {
- $commentlink = null;
- }
-
- $this->data['commentlink'] = $commentlink;
-
- return $this->data['commentlink'];
- }
-
- /**
- * Returns a URI pointing to a feed of all comments for this entry
- *
- * @return string
- */
- public function getCommentFeedLink()
- {
- if (array_key_exists('commentfeedlink', $this->data)) {
- return $this->data['commentfeedlink'];
- }
-
- $commentfeedlink = $this->getExtension('WellFormedWeb')->getCommentFeedLink();
-
- if (!$commentfeedlink) {
- $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink('rss');
- }
-
- if (!$commentfeedlink) {
- $commentfeedlink = $this->getExtension('Atom')->getCommentFeedLink('rdf');
- }
-
- if (!$commentfeedlink) {
- $commentfeedlink = null;
- }
-
- $this->data['commentfeedlink'] = $commentfeedlink;
-
- return $this->data['commentfeedlink'];
- }
-
- /**
- * Set the XPath query (incl. on all Extensions)
- *
- * @param DOMXPath $xpath
- * @return void
- */
- public function setXpath(DOMXPath $xpath)
- {
- parent::setXpath($xpath);
- foreach ($this->extensions as $extension) {
- $extension->setXpath($this->xpath);
- }
- }
-}