diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-10-04 19:11:56 +0200 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-10-04 19:11:56 +0200 |
commit | 7580c7ef70c312ef75c0cb5f89f775f12736ec33 (patch) | |
tree | a2e20b61eb1072c8344e0b17beb356158c1d98f9 | |
parent | eae7948b3d8033224d2fda9d2b7aa7df77a73cf6 (diff) |
get rid of zendfeed again
112 files changed, 0 insertions, 18712 deletions
diff --git a/3rdparty/ZendFeed/.gitignore b/3rdparty/ZendFeed/.gitignore deleted file mode 100644 index 7dac201e3..000000000 --- a/3rdparty/ZendFeed/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -nbproject -._* -.~lock.* -.buildpath -.DS_Store -.idea -.project -.settings -composer.lock -vendor/bin diff --git a/3rdparty/ZendFeed/.gitmodules b/3rdparty/ZendFeed/.gitmodules deleted file mode 100644 index 040b52eb0..000000000 --- a/3rdparty/ZendFeed/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "vendor/ZF2"] - path = vendor/ZF2 - url = https://github.com/zendframework/zf2.git diff --git a/3rdparty/ZendFeed/CONTRIBUTING.md b/3rdparty/ZendFeed/CONTRIBUTING.md deleted file mode 100644 index e77f5d2d5..000000000 --- a/3rdparty/ZendFeed/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# CONTRIBUTING - -Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
\ No newline at end of file diff --git a/3rdparty/ZendFeed/Exception/BadMethodCallException.php b/3rdparty/ZendFeed/Exception/BadMethodCallException.php deleted file mode 100644 index ef0173a5b..000000000 --- a/3rdparty/ZendFeed/Exception/BadMethodCallException.php +++ /dev/null @@ -1,15 +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\Exception; - -class BadMethodCallException - extends \BadMethodCallException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/Exception/ExceptionInterface.php b/3rdparty/ZendFeed/Exception/ExceptionInterface.php deleted file mode 100644 index 8abcfa9e7..000000000 --- a/3rdparty/ZendFeed/Exception/ExceptionInterface.php +++ /dev/null @@ -1,13 +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\Exception; - -interface ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/Exception/InvalidArgumentException.php b/3rdparty/ZendFeed/Exception/InvalidArgumentException.php deleted file mode 100644 index c601ef631..000000000 --- a/3rdparty/ZendFeed/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,15 +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\Exception; - -class InvalidArgumentException - extends \InvalidArgumentException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/Exception/RuntimeException.php b/3rdparty/ZendFeed/Exception/RuntimeException.php deleted file mode 100644 index 824a6db4d..000000000 --- a/3rdparty/ZendFeed/Exception/RuntimeException.php +++ /dev/null @@ -1,15 +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\Exception; - -class RuntimeException - extends \RuntimeException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/PubSubHubbub/AbstractCallback.php b/3rdparty/ZendFeed/PubSubHubbub/AbstractCallback.php deleted file mode 100644 index 7645cb905..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/AbstractCallback.php +++ /dev/null @@ -1,291 +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\PubSubHubbub; - -use Traversable; -use Zend\Http\PhpEnvironment\Response as PhpResponse; -use Zend\Stdlib\ArrayUtils; - -abstract class AbstractCallback implements CallbackInterface -{ - /** - * An instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistenceInterface - * used to background save any verification tokens associated with a subscription - * or other. - * - * @var Model\SubscriptionPersistenceInterface - */ - protected $storage = null; - - /** - * An instance of a class handling Http Responses. This is implemented in - * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with - * (i.e. not inherited from) Zend\Controller\Response\Http. - * - * @var HttpResponse|PhpResponse - */ - protected $httpResponse = null; - - /** - * The number of Subscribers for which any updates are on behalf of. - * - * @var int - */ - protected $subscriberCount = 1; - - /** - * Constructor; accepts an array or Traversable object to preset - * options for the Subscriber without calling all supported setter - * methods in turn. - * - * @param array|Traversable $options Options array or Traversable object - */ - public function __construct($options = null) - { - if ($options !== null) { - $this->setOptions($options); - } - } - - /** - * Process any injected configuration options - * - * @param array|Traversable $options Options array or Traversable object - * @return AbstractCallback - * @throws Exception\InvalidArgumentException - */ - public function setOptions($options) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - throw new Exception\InvalidArgumentException('Array or Traversable object' - . 'expected, got ' . gettype($options)); - } - - if (is_array($options)) { - $this->setOptions($options); - } - - if (array_key_exists('storage', $options)) { - $this->setStorage($options['storage']); - } - return $this; - } - - /** - * Send the response, including all headers. - * If you wish to handle this via Zend\Http, use the getter methods - * to retrieve any data needed to be set on your HTTP Response object, or - * simply give this object the HTTP Response instance to work with for you! - * - * @return void - */ - public function sendResponse() - { - $this->getHttpResponse()->send(); - } - - /** - * Sets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used - * to background save any verification tokens associated with a subscription - * or other. - * - * @param Model\SubscriptionPersistenceInterface $storage - * @return AbstractCallback - */ - public function setStorage(Model\SubscriptionPersistenceInterface $storage) - { - $this->storage = $storage; - return $this; - } - - /** - * Gets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used - * to background save any verification tokens associated with a subscription - * or other. - * - * @return Model\SubscriptionPersistenceInterface - * @throws Exception\RuntimeException - */ - public function getStorage() - { - if ($this->storage === null) { - throw new Exception\RuntimeException('No storage object has been' - . ' set that subclasses Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence'); - } - return $this->storage; - } - - /** - * An instance of a class handling Http Responses. This is implemented in - * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with - * (i.e. not inherited from) Zend\Controller\Response\Http. - * - * @param HttpResponse|PhpResponse $httpResponse - * @return AbstractCallback - * @throws Exception\InvalidArgumentException - */ - public function setHttpResponse($httpResponse) - { - if (!$httpResponse instanceof HttpResponse && !$httpResponse instanceof PhpResponse) { - throw new Exception\InvalidArgumentException('HTTP Response object must' - . ' implement one of Zend\Feed\Pubsubhubbub\HttpResponse or' - . ' Zend\Http\PhpEnvironment\Response'); - } - $this->httpResponse = $httpResponse; - return $this; - } - - /** - * An instance of a class handling Http Responses. This is implemented in - * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with - * (i.e. not inherited from) Zend\Controller\Response\Http. - * - * @return HttpResponse|PhpResponse - */ - public function getHttpResponse() - { - if ($this->httpResponse === null) { - $this->httpResponse = new HttpResponse; - } - return $this->httpResponse; - } - - /** - * Sets the number of Subscribers for which any updates are on behalf of. - * In other words, is this class serving one or more subscribers? How many? - * Defaults to 1 if left unchanged. - * - * @param string|int $count - * @return AbstractCallback - * @throws Exception\InvalidArgumentException - */ - public function setSubscriberCount($count) - { - $count = intval($count); - if ($count <= 0) { - throw new Exception\InvalidArgumentException('Subscriber count must be' - . ' greater than zero'); - } - $this->subscriberCount = $count; - return $this; - } - - /** - * Gets the number of Subscribers for which any updates are on behalf of. - * In other words, is this class serving one or more subscribers? How many? - * - * @return int - */ - public function getSubscriberCount() - { - return $this->subscriberCount; - } - - /** - * Attempt to detect the callback URL (specifically the path forward) - * @return string - */ - protected function _detectCallbackUrl() - { - $callbackUrl = ''; - if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) { - $callbackUrl = $_SERVER['HTTP_X_ORIGINAL_URL']; - } elseif (isset($_SERVER['HTTP_X_REWRITE_URL'])) { - $callbackUrl = $_SERVER['HTTP_X_REWRITE_URL']; - } elseif (isset($_SERVER['REQUEST_URI'])) { - $callbackUrl = $_SERVER['REQUEST_URI']; - $scheme = 'http'; - if ($_SERVER['HTTPS'] == 'on') { - $scheme = 'https'; - } - $schemeAndHttpHost = $scheme . '://' . $this->_getHttpHost(); - if (strpos($callbackUrl, $schemeAndHttpHost) === 0) { - $callbackUrl = substr($callbackUrl, strlen($schemeAndHttpHost)); - } - } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { - $callbackUrl= $_SERVER['ORIG_PATH_INFO']; - if (!empty($_SERVER['QUERY_STRING'])) { - $callbackUrl .= '?' . $_SERVER['QUERY_STRING']; - } - } - return $callbackUrl; - } - - /** - * Get the HTTP host - * - * @return string - */ - protected function _getHttpHost() - { - if (!empty($_SERVER['HTTP_HOST'])) { - return $_SERVER['HTTP_HOST']; - } - $scheme = 'http'; - if ($_SERVER['HTTPS'] == 'on') { - $scheme = 'https'; - } - $name = $_SERVER['SERVER_NAME']; - $port = $_SERVER['SERVER_PORT']; - if (($scheme == 'http' && $port == 80) - || ($scheme == 'https' && $port == 443) - ) { - return $name; - } - - return $name . ':' . $port; - } - - /** - * Retrieve a Header value from either $_SERVER or Apache - * - * @param string $header - * @return bool|string - */ - protected function _getHeader($header) - { - $temp = strtoupper(str_replace('-', '_', $header)); - if (!empty($_SERVER[$temp])) { - return $_SERVER[$temp]; - } - $temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header)); - if (!empty($_SERVER[$temp])) { - return $_SERVER[$temp]; - } - if (function_exists('apache_request_headers')) { - $headers = apache_request_headers(); - if (!empty($headers[$header])) { - return $headers[$header]; - } - } - return false; - } - - /** - * Return the raw body of the request - * - * @return string|false Raw body, or false if not present - */ - protected function _getRawBody() - { - $body = file_get_contents('php://input'); - if (strlen(trim($body)) == 0 && isset($GLOBALS['HTTP_RAW_POST_DATA'])) { - $body = $GLOBALS['HTTP_RAW_POST_DATA']; - } - if (strlen(trim($body)) > 0) { - return $body; - } - return false; - } -} diff --git a/3rdparty/ZendFeed/PubSubHubbub/CallbackInterface.php b/3rdparty/ZendFeed/PubSubHubbub/CallbackInterface.php deleted file mode 100644 index 8873c3db4..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/CallbackInterface.php +++ /dev/null @@ -1,51 +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\PubSubHubbub; - -interface CallbackInterface -{ - /** - * Handle any callback from a Hub Server responding to a subscription or - * unsubscription request. This should be the Hub Server confirming the - * the request prior to taking action on it. - * - * @param array $httpData GET/POST data if available and not in $_GET/POST - * @param bool $sendResponseNow Whether to send response now or when asked - */ - public function handle(array $httpData = null, $sendResponseNow = false); - - /** - * Send the response, including all headers. - * If you wish to handle this via Zend\Mvc\Controller, use the getter methods - * to retrieve any data needed to be set on your HTTP Response object, or - * simply give this object the HTTP Response instance to work with for you! - * - * @return void - */ - public function sendResponse(); - - /** - * An instance of a class handling Http Responses. This is implemented in - * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with - * (i.e. not inherited from) Zend\Feed\Pubsubhubbub\AbstractCallback. - * - * @param HttpResponse|\Zend\Http\PhpEnvironment\Response $httpResponse - */ - public function setHttpResponse($httpResponse); - - /** - * An instance of a class handling Http Responses. This is implemented in - * Zend\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with - * (i.e. not inherited from) Zend\Feed\Pubsubhubbub\AbstractCallback. - * - * @return HttpResponse|\Zend\Http\PhpEnvironment\Response - */ - public function getHttpResponse(); -} diff --git a/3rdparty/ZendFeed/PubSubHubbub/Exception/ExceptionInterface.php b/3rdparty/ZendFeed/PubSubHubbub/Exception/ExceptionInterface.php deleted file mode 100644 index 845ae2cd3..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/Exception/ExceptionInterface.php +++ /dev/null @@ -1,15 +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\PubSubHubbub\Exception; - -use Zend\Feed\Exception\ExceptionInterface as Exception; - -interface ExceptionInterface extends Exception -{} diff --git a/3rdparty/ZendFeed/PubSubHubbub/Exception/InvalidArgumentException.php b/3rdparty/ZendFeed/PubSubHubbub/Exception/InvalidArgumentException.php deleted file mode 100644 index 23f8df104..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,17 +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\PubSubHubbub\Exception; - -use Zend\Feed\Exception; - -class InvalidArgumentException - extends Exception\InvalidArgumentException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/PubSubHubbub/Exception/RuntimeException.php b/3rdparty/ZendFeed/PubSubHubbub/Exception/RuntimeException.php deleted file mode 100644 index 209842bd6..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/Exception/RuntimeException.php +++ /dev/null @@ -1,17 +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\PubSubHubbub\Exception; - -use Zend\Feed\Exception; - -class RuntimeException - extends Exception\RuntimeException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/PubSubHubbub/HttpResponse.php b/3rdparty/ZendFeed/PubSubHubbub/HttpResponse.php deleted file mode 100644 index 0c4c74172..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/HttpResponse.php +++ /dev/null @@ -1,211 +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\PubSubHubbub; - -class HttpResponse -{ - /** - * The body of any response to the current callback request - * - * @var string - */ - protected $content = ''; - - /** - * Array of headers. Each header is an array with keys 'name' and 'value' - * - * @var array - */ - protected $headers = array(); - - /** - * HTTP response code to use in headers - * - * @var int - */ - protected $statusCode = 200; - - /** - * Send the response, including all headers - * - * @return void - */ - public function send() - { - $this->sendHeaders(); - echo $this->getContent(); - } - - /** - * Send all headers - * - * Sends any headers specified. If an {@link setHttpResponseCode() HTTP response code} - * has been specified, it is sent with the first header. - * - * @return void - */ - public function sendHeaders() - { - if (count($this->headers) || (200 != $this->statusCode)) { - $this->canSendHeaders(true); - } elseif (200 == $this->statusCode) { - return; - } - $httpCodeSent = false; - foreach ($this->headers as $header) { - if (!$httpCodeSent && $this->statusCode) { - header($header['name'] . ': ' . $header['value'], $header['replace'], $this->statusCode); - $httpCodeSent = true; - } else { - header($header['name'] . ': ' . $header['value'], $header['replace']); - } - } - if (!$httpCodeSent) { - header('HTTP/1.1 ' . $this->statusCode); - } - } - - /** - * Set a header - * - * If $replace is true, replaces any headers already defined with that - * $name. - * - * @param string $name - * @param string $value - * @param bool $replace - * @return \Zend\Feed\PubSubHubbub\HttpResponse - */ - public function setHeader($name, $value, $replace = false) - { - $name = $this->_normalizeHeader($name); - $value = (string) $value; - if ($replace) { - foreach ($this->headers as $key => $header) { - if ($name == $header['name']) { - unset($this->headers[$key]); - } - } - } - $this->headers[] = array( - 'name' => $name, - 'value' => $value, - 'replace' => $replace, - ); - - return $this; - } - - /** - * Check if a specific Header is set and return its value - * - * @param string $name - * @return string|null - */ - public function getHeader($name) - { - $name = $this->_normalizeHeader($name); - foreach ($this->headers as $header) { - if ($header['name'] == $name) { - return $header['value']; - } - } - } - - /** - * Return array of headers; see {@link $headers} for format - * - * @return array - */ - public function getHeaders() - { - return $this->headers; - } - - /** - * Can we send headers? - * - * @param bool $throw Whether or not to throw an exception if headers have been sent; defaults to false - * @return HttpResponse - * @throws Exception\RuntimeException - */ - public function canSendHeaders($throw = false) - { - $ok = headers_sent($file, $line); - if ($ok && $throw) { - throw new Exception\RuntimeException('Cannot send headers; headers already sent in ' . $file . ', line ' . $line); - } - return !$ok; - } - - /** - * Set HTTP response code to use with headers - * - * @param int $code - * @return HttpResponse - * @throws Exception\InvalidArgumentException - */ - public function setStatusCode($code) - { - if (!is_int($code) || (100 > $code) || (599 < $code)) { - throw new Exception\InvalidArgumentException('Invalid HTTP response' - . ' code:' . $code); - } - $this->statusCode = $code; - return $this; - } - - /** - * Retrieve HTTP response code - * - * @return int - */ - public function getStatusCode() - { - return $this->statusCode; - } - - /** - * Set body content - * - * @param string $content - * @return \Zend\Feed\PubSubHubbub\HttpResponse - */ - public function setContent($content) - { - $this->content = (string) $content; - $this->setHeader('content-length', strlen($content)); - return $this; - } - - /** - * Return the body content - * - * @return string - */ - public function getContent() - { - return $this->content; - } - - /** - * Normalizes a header name to X-Capitalized-Names - * - * @param string $name - * @return string - */ - protected function _normalizeHeader($name) - { - $filtered = str_replace(array('-', '_'), ' ', (string) $name); - $filtered = ucwords(strtolower($filtered)); - $filtered = str_replace(' ', '-', $filtered); - return $filtered; - } -} diff --git a/3rdparty/ZendFeed/PubSubHubbub/Model/AbstractModel.php b/3rdparty/ZendFeed/PubSubHubbub/Model/AbstractModel.php deleted file mode 100644 index 92e688133..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/Model/AbstractModel.php +++ /dev/null @@ -1,39 +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\PubSubHubbub\Model; - -use Zend\Db\TableGateway\TableGateway; -use Zend\Db\TableGateway\TableGatewayInterface; - -class AbstractModel -{ - /** - * Zend\Db\TableGateway\TableGatewayInterface instance to host database methods - * - * @var TableGatewayInterface - */ - protected $db = null; - - /** - * Constructor - * - * @param null|TableGatewayInterface $tableGateway - */ - public function __construct(TableGatewayInterface $tableGateway = null) - { - if ($tableGateway === null) { - $parts = explode('\\', get_class($this)); - $table = strtolower(array_pop($parts)); - $this->db = new TableGateway($table, null); - } else { - $this->db = $tableGateway; - } - } -} diff --git a/3rdparty/ZendFeed/PubSubHubbub/Model/Subscription.php b/3rdparty/ZendFeed/PubSubHubbub/Model/Subscription.php deleted file mode 100644 index 9571106a4..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/Model/Subscription.php +++ /dev/null @@ -1,142 +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\PubSubHubbub\Model; - -use DateInterval; -use DateTime; -use Zend\Feed\PubSubHubbub; - -class Subscription extends AbstractModel implements SubscriptionPersistenceInterface -{ - /** - * Common DateTime object to assist with unit testing - * - * @var DateTime - */ - protected $now; - - /** - * Save subscription to RDMBS - * - * @param array $data - * @return bool - * @throws PubSubHubbub\Exception\InvalidArgumentException - */ - public function setSubscription(array $data) - { - if (!isset($data['id'])) { - throw new PubSubHubbub\Exception\InvalidArgumentException( - 'ID must be set before attempting a save' - ); - } - $result = $this->db->select(array('id' => $data['id'])); - if ($result && (0 < count($result))) { - $data['created_time'] = $result->current()->created_time; - $now = $this->getNow(); - if (array_key_exists('lease_seconds', $data) - && $data['lease_seconds'] - ) { - $data['expiration_time'] = $now->add(new DateInterval('PT' . $data['lease_seconds'] . 'S')) - ->format('Y-m-d H:i:s'); - } - $this->db->update( - $data, - array('id' => $data['id']) - ); - return false; - } - - $this->db->insert($data); - return true; - } - - /** - * Get subscription by ID/key - * - * @param string $key - * @return array - * @throws PubSubHubbub\Exception\InvalidArgumentException - */ - public function getSubscription($key) - { - if (empty($key) || !is_string($key)) { - throw new PubSubHubbub\Exception\InvalidArgumentException('Invalid parameter "key"' - .' of "' . $key . '" must be a non-empty string'); - } - $result = $this->db->select(array('id' => $key)); - if (count($result)) { - return $result->current()->getArrayCopy(); - } - return false; - } - - /** - * Determine if a subscription matching the key exists - * - * @param string $key - * @return bool - * @throws PubSubHubbub\Exception\InvalidArgumentException - */ - public function hasSubscription($key) - { - if (empty($key) || !is_string($key)) { - throw new PubSubHubbub\Exception\InvalidArgumentException('Invalid parameter "key"' - .' of "' . $key . '" must be a non-empty string'); - } - $result = $this->db->select(array('id' => $key)); - if (count($result)) { - return true; - } - return false; - } - - /** - * Delete a subscription - * - * @param string $key - * @return bool - */ - public function deleteSubscription($key) - { - $result = $this->db->select(array('id' => $key)); - if (count($result)) { - $this->db->delete( - array('id' => $key) - ); - return true; - } - return false; - } - - /** - * Get a new DateTime or the one injected for testing - * - * @return DateTime - */ - public function getNow() - { - if (null === $this->now) { - return new DateTime(); - } - return $this->now; - } - - /** - * Set a DateTime instance for assisting with unit testing - * - * @param DateTime $now - * @return Subscription - */ - public function setNow(DateTime $now) - { - $this->now = $now; - return $this; - } -} diff --git a/3rdparty/ZendFeed/PubSubHubbub/Model/SubscriptionPersistenceInterface.php b/3rdparty/ZendFeed/PubSubHubbub/Model/SubscriptionPersistenceInterface.php deleted file mode 100644 index 77b2e71f9..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/Model/SubscriptionPersistenceInterface.php +++ /dev/null @@ -1,47 +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\PubSubHubbub\Model; - -interface SubscriptionPersistenceInterface -{ - - /** - * Save subscription to RDMBS - * - * @param array $data The key must be stored here as a $data['id'] entry - * @return bool - */ - public function setSubscription(array $data); - - /** - * Get subscription by ID/key - * - * @param string $key - * @return array - */ - public function getSubscription($key); - - /** - * Determine if a subscription matching the key exists - * - * @param string $key - * @return bool - */ - public function hasSubscription($key); - - /** - * Delete a subscription - * - * @param string $key - * @return bool - */ - public function deleteSubscription($key); - -} diff --git a/3rdparty/ZendFeed/PubSubHubbub/PubSubHubbub.php b/3rdparty/ZendFeed/PubSubHubbub/PubSubHubbub.php deleted file mode 100644 index 585be54d1..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/PubSubHubbub.php +++ /dev/null @@ -1,147 +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\PubSubHubbub; - -use Zend\Escaper\Escaper; -use Zend\Feed\Reader; -use Zend\Http; - -class PubSubHubbub -{ - /** - * Verification Modes - */ - const VERIFICATION_MODE_SYNC = 'sync'; - const VERIFICATION_MODE_ASYNC = 'async'; - - /** - * Subscription States - */ - const SUBSCRIPTION_VERIFIED = 'verified'; - const SUBSCRIPTION_NOTVERIFIED = 'not_verified'; - const SUBSCRIPTION_TODELETE = 'to_delete'; - - /** - * @var Escaper - */ - protected static $escaper; - - /** - * Singleton instance if required of the HTTP client - * - * @var Http\Client - */ - protected static $httpClient = null; - - /** - * Simple utility function which imports any feed URL and - * determines the existence of Hub Server endpoints. This works - * best if directly given an instance of Zend\Feed\Reader\Atom|Rss - * to leverage off. - * - * @param \Zend\Feed\Reader\Feed\AbstractFeed|string $source - * @return array - * @throws Exception\InvalidArgumentException - */ - public static function detectHubs($source) - { - if (is_string($source)) { - $feed = Reader\Reader::import($source); - } elseif ($source instanceof Reader\Feed\AbstractFeed) { - $feed = $source; - } else { - throw new Exception\InvalidArgumentException('The source parameter was' - . ' invalid, i.e. not a URL string or an instance of type' - . ' Zend\Feed\Reader\Feed\AbstractFeed'); - } - return $feed->getHubs(); - } - - /** - * Allows the external environment to make ZendOAuth use a specific - * Client instance. - * - * @param Http\Client $httpClient - * @return void - */ - public static function setHttpClient(Http\Client $httpClient) - { - static::$httpClient = $httpClient; - } - - /** - * Return the singleton instance of the HTTP Client. Note that - * the instance is reset and cleared of previous parameters GET/POST. - * Headers are NOT reset but handled by this component if applicable. - * - * @return Http\Client - */ - public static function getHttpClient() - { - if (!isset(static::$httpClient)) { - static::$httpClient = new Http\Client; - } else { - static::$httpClient->resetParameters(); - } - return static::$httpClient; - } - - /** - * Simple mechanism to delete the entire singleton HTTP Client instance - * which forces a new instantiation for subsequent requests. - * - * @return void - */ - public static function clearHttpClient() - { - static::$httpClient = null; - } - - /** - * Set the Escaper instance - * - * If null, resets the instance - * - * @param null|Escaper $escaper - */ - public static function setEscaper(Escaper $escaper = null) - { - static::$escaper = $escaper; - } - - /** - * Get the Escaper instance - * - * If none registered, lazy-loads an instance. - * - * @return Escaper - */ - public static function getEscaper() - { - if (null === static::$escaper) { - static::setEscaper(new Escaper()); - } - return static::$escaper; - } - - /** - * RFC 3986 safe url encoding method - * - * @param string $string - * @return string - */ - public static function urlencode($string) - { - $escaper = static::getEscaper(); - $rawencoded = $escaper->escapeUrl($string); - $rfcencoded = str_replace('%7E', '~', $rawencoded); - return $rfcencoded; - } -} diff --git a/3rdparty/ZendFeed/PubSubHubbub/Publisher.php b/3rdparty/ZendFeed/PubSubHubbub/Publisher.php deleted file mode 100644 index 916ffcad5..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/Publisher.php +++ /dev/null @@ -1,397 +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\PubSubHubbub; - -use Traversable; -use Zend\Feed\Uri; -use Zend\Http\Request as HttpRequest; -use Zend\Stdlib\ArrayUtils; - -class Publisher -{ - /** - * An array of URLs for all Hub Servers used by the Publisher, and to - * which all topic update notifications will be sent. - * - * @var array - */ - protected $hubUrls = array(); - - /** - * An array of topic (Atom or RSS feed) URLs which have been updated and - * whose updated status will be notified to all Hub Servers. - * - * @var array - */ - protected $updatedTopicUrls = array(); - - /** - * An array of any errors including keys for 'response', 'hubUrl'. - * The response is the actual Zend\Http\Response object. - * - * @var array - */ - protected $errors = array(); - - /** - * An array of topic (Atom or RSS feed) URLs which have been updated and - * whose updated status will be notified to all Hub Servers. - * - * @var array - */ - protected $parameters = array(); - - /** - * Constructor; accepts an array or Zend\Config\Config instance to preset - * options for the Publisher without calling all supported setter - * methods in turn. - * - * @param array|Traversable $options - */ - public function __construct($options = null) - { - if ($options !== null) { - $this->setOptions($options); - } - } - - /** - * Process any injected configuration options - * - * @param array|Traversable $options Options array or Traversable object - * @return Publisher - * @throws Exception\InvalidArgumentException - */ - public function setOptions($options) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - throw new Exception\InvalidArgumentException('Array or Traversable object' - . 'expected, got ' . gettype($options)); - } - if (array_key_exists('hubUrls', $options)) { - $this->addHubUrls($options['hubUrls']); - } - if (array_key_exists('updatedTopicUrls', $options)) { - $this->addUpdatedTopicUrls($options['updatedTopicUrls']); - } - if (array_key_exists('parameters', $options)) { - $this->setParameters($options['parameters']); - } - return $this; - } - - /** - * Add a Hub Server URL supported by Publisher - * - * @param string $url - * @return Publisher - * @throws Exception\InvalidArgumentException - */ - public function addHubUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . 'URL'); - } - $this->hubUrls[] = $url; - return $this; - } - - /** - * Add an array of Hub Server URLs supported by Publisher - * - * @param array $urls - * @return Publisher - */ - public function addHubUrls(array $urls) - { - foreach ($urls as $url) { - $this->addHubUrl($url); - } - return $this; - } - - /** - * Remove a Hub Server URL - * - * @param string $url - * @return Publisher - */ - public function removeHubUrl($url) - { - if (!in_array($url, $this->getHubUrls())) { - return $this; - } - $key = array_search($url, $this->hubUrls); - unset($this->hubUrls[$key]); - return $this; - } - - /** - * Return an array of unique Hub Server URLs currently available - * - * @return array - */ - public function getHubUrls() - { - $this->hubUrls = array_unique($this->hubUrls); - return $this->hubUrls; - } - - /** - * Add a URL to a topic (Atom or RSS feed) which has been updated - * - * @param string $url - * @return Publisher - * @throws Exception\InvalidArgumentException - */ - public function addUpdatedTopicUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . 'URL'); - } - $this->updatedTopicUrls[] = $url; - return $this; - } - - /** - * Add an array of Topic URLs which have been updated - * - * @param array $urls - * @return Publisher - */ - public function addUpdatedTopicUrls(array $urls) - { - foreach ($urls as $url) { - $this->addUpdatedTopicUrl($url); - } - return $this; - } - - /** - * Remove an updated topic URL - * - * @param string $url - * @return Publisher - */ - public function removeUpdatedTopicUrl($url) - { - if (!in_array($url, $this->getUpdatedTopicUrls())) { - return $this; - } - $key = array_search($url, $this->updatedTopicUrls); - unset($this->updatedTopicUrls[$key]); - return $this; - } - - /** - * Return an array of unique updated topic URLs currently available - * - * @return array - */ - public function getUpdatedTopicUrls() - { - $this->updatedTopicUrls = array_unique($this->updatedTopicUrls); - return $this->updatedTopicUrls; - } - - /** - * Notifies a single Hub Server URL of changes - * - * @param string $url The Hub Server's URL - * @return void - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - */ - public function notifyHub($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . 'URL'); - } - $client = $this->_getHttpClient(); - $client->setUri($url); - $response = $client->getResponse(); - if ($response->getStatusCode() !== 204) { - throw new Exception\RuntimeException('Notification to Hub Server ' - . 'at "' . $url . '" appears to have failed with a status code of "' - . $response->getStatusCode() . '" and message "' - . $response->getContent() . '"'); - } - } - - /** - * Notifies all Hub Server URLs of changes - * - * If a Hub notification fails, certain data will be retained in an - * an array retrieved using getErrors(), if a failure occurs for any Hubs - * the isSuccess() check will return FALSE. This method is designed not - * to needlessly fail with an Exception/Error unless from Zend\Http\Client. - * - * @return void - * @throws Exception\RuntimeException - */ - public function notifyAll() - { - $client = $this->_getHttpClient(); - $hubs = $this->getHubUrls(); - if (empty($hubs)) { - throw new Exception\RuntimeException('No Hub Server URLs' - . ' have been set so no notifications can be sent'); - } - $this->errors = array(); - foreach ($hubs as $url) { - $client->setUri($url); - $response = $client->getResponse(); - if ($response->getStatusCode() !== 204) { - $this->errors[] = array( - 'response' => $response, - 'hubUrl' => $url - ); - } - } - } - - /** - * Add an optional parameter to the update notification requests - * - * @param string $name - * @param string|null $value - * @return Publisher - * @throws Exception\InvalidArgumentException - */ - public function setParameter($name, $value = null) - { - if (is_array($name)) { - $this->setParameters($name); - return $this; - } - if (empty($name) || !is_string($name)) { - throw new Exception\InvalidArgumentException('Invalid parameter "name"' - . ' of "' . $name . '" must be a non-empty string'); - } - if ($value === null) { - $this->removeParameter($name); - return $this; - } - if (empty($value) || (!is_string($value) && $value !== null)) { - throw new Exception\InvalidArgumentException('Invalid parameter "value"' - . ' of "' . $value . '" must be a non-empty string'); - } - $this->parameters[$name] = $value; - return $this; - } - - /** - * Add an optional parameter to the update notification requests - * - * @param array $parameters - * @return Publisher - */ - public function setParameters(array $parameters) - { - foreach ($parameters as $name => $value) { - $this->setParameter($name, $value); - } - return $this; - } - - /** - * Remove an optional parameter for the notification requests - * - * @param string $name - * @return Publisher - * @throws Exception\InvalidArgumentException - */ - public function removeParameter($name) - { - if (empty($name) || !is_string($name)) { - throw new Exception\InvalidArgumentException('Invalid parameter "name"' - . ' of "' . $name . '" must be a non-empty string'); - } - if (array_key_exists($name, $this->parameters)) { - unset($this->parameters[$name]); - } - return $this; - } - - /** - * Return an array of optional parameters for notification requests - * - * @return array - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * Returns a boolean indicator of whether the notifications to Hub - * Servers were ALL successful. If even one failed, FALSE is returned. - * - * @return bool - */ - public function isSuccess() - { - return !(count($this->errors) != 0); - } - - /** - * Return an array of errors met from any failures, including keys: - * 'response' => the Zend\Http\Response object from the failure - * 'hubUrl' => the URL of the Hub Server whose notification failed - * - * @return array - */ - public function getErrors() - { - return $this->errors; - } - - /** - * Get a basic prepared HTTP client for use - * - * @return \Zend\Http\Client - * @throws Exception\RuntimeException - */ - protected function _getHttpClient() - { - $client = PubSubHubbub::getHttpClient(); - $client->setMethod(HttpRequest::METHOD_POST); - $client->setOptions(array( - 'useragent' => 'Zend_Feed_Pubsubhubbub_Publisher/' . Version::VERSION, - )); - $params = array(); - $params[] = 'hub.mode=publish'; - $topics = $this->getUpdatedTopicUrls(); - if (empty($topics)) { - throw new Exception\RuntimeException('No updated topic URLs' - . ' have been set'); - } - foreach ($topics as $topicUrl) { - $params[] = 'hub.url=' . urlencode($topicUrl); - } - $optParams = $this->getParameters(); - foreach ($optParams as $name => $value) { - $params[] = urlencode($name) . '=' . urlencode($value); - } - $paramString = implode('&', $params); - $client->setRawBody($paramString); - return $client; - } -} diff --git a/3rdparty/ZendFeed/PubSubHubbub/Subscriber.php b/3rdparty/ZendFeed/PubSubHubbub/Subscriber.php deleted file mode 100644 index 265fe776b..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/Subscriber.php +++ /dev/null @@ -1,837 +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\PubSubHubbub; - -use DateInterval; -use DateTime; -use Traversable; -use Zend\Feed\Uri; -use Zend\Http\Request as HttpRequest; -use Zend\Stdlib\ArrayUtils; - -class Subscriber -{ - /** - * An array of URLs for all Hub Servers to subscribe/unsubscribe. - * - * @var array - */ - protected $hubUrls = array(); - - /** - * An array of optional parameters to be included in any - * (un)subscribe requests. - * - * @var array - */ - protected $parameters = array(); - - /** - * The URL of the topic (Rss or Atom feed) which is the subject of - * our current intent to subscribe to/unsubscribe from updates from - * the currently configured Hub Servers. - * - * @var string - */ - protected $topicUrl = ''; - - /** - * The URL Hub Servers must use when communicating with this Subscriber - * - * @var string - */ - protected $callbackUrl = ''; - - /** - * The number of seconds for which the subscriber would like to have the - * subscription active. Defaults to null, i.e. not sent, to setup a - * permanent subscription if possible. - * - * @var int - */ - protected $leaseSeconds = null; - - /** - * The preferred verification mode (sync or async). By default, this - * Subscriber prefers synchronous verification, but is considered - * desirable to support asynchronous verification if possible. - * - * Zend\Feed\Pubsubhubbub\Subscriber will always send both modes, whose - * order of occurrence in the parameter list determines this preference. - * - * @var string - */ - protected $preferredVerificationMode = PubSubHubbub::VERIFICATION_MODE_SYNC; - - /** - * An array of any errors including keys for 'response', 'hubUrl'. - * The response is the actual Zend\Http\Response object. - * - * @var array - */ - protected $errors = array(); - - /** - * An array of Hub Server URLs for Hubs operating at this time in - * asynchronous verification mode. - * - * @var array - */ - protected $asyncHubs = array(); - - /** - * An instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used to background - * save any verification tokens associated with a subscription or other. - * - * @var \Zend\Feed\PubSubHubbub\Model\SubscriptionPersistenceInterface - */ - protected $storage = null; - - /** - * An array of authentication credentials for HTTP Basic Authentication - * if required by specific Hubs. The array is indexed by Hub Endpoint URI - * and the value is a simple array of the username and password to apply. - * - * @var array - */ - protected $authentications = array(); - - /** - * Tells the Subscriber to append any subscription identifier to the path - * of the base Callback URL. E.g. an identifier "subkey1" would be added - * to the callback URL "http://www.example.com/callback" to create a subscription - * specific Callback URL of "http://www.example.com/callback/subkey1". - * - * This is required for all Hubs using the Pubsubhubbub 0.1 Specification. - * It should be manually intercepted and passed to the Callback class using - * Zend\Feed\Pubsubhubbub\Subscriber\Callback::setSubscriptionKey(). Will - * require a route in the form "callback/:subkey" to allow the parameter be - * retrieved from an action using the Zend\Controller\Action::\getParam() - * method. - * - * @var string - */ - protected $usePathParameter = false; - - /** - * Constructor; accepts an array or Traversable instance to preset - * options for the Subscriber without calling all supported setter - * methods in turn. - * - * @param array|Traversable $options - */ - public function __construct($options = null) - { - if ($options !== null) { - $this->setOptions($options); - } - } - - /** - * Process any injected configuration options - * - * @param array|Traversable $options - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setOptions($options) - { - if ($options instanceof Traversable) { - $options = ArrayUtils::iteratorToArray($options); - } - - if (!is_array($options)) { - throw new Exception\InvalidArgumentException('Array or Traversable object' - . 'expected, got ' . gettype($options)); - } - if (array_key_exists('hubUrls', $options)) { - $this->addHubUrls($options['hubUrls']); - } - if (array_key_exists('callbackUrl', $options)) { - $this->setCallbackUrl($options['callbackUrl']); - } - if (array_key_exists('topicUrl', $options)) { - $this->setTopicUrl($options['topicUrl']); - } - if (array_key_exists('storage', $options)) { - $this->setStorage($options['storage']); - } - if (array_key_exists('leaseSeconds', $options)) { - $this->setLeaseSeconds($options['leaseSeconds']); - } - if (array_key_exists('parameters', $options)) { - $this->setParameters($options['parameters']); - } - if (array_key_exists('authentications', $options)) { - $this->addAuthentications($options['authentications']); - } - if (array_key_exists('usePathParameter', $options)) { - $this->usePathParameter($options['usePathParameter']); - } - if (array_key_exists('preferredVerificationMode', $options)) { - $this->setPreferredVerificationMode( - $options['preferredVerificationMode'] - ); - } - return $this; - } - - /** - * Set the topic URL (RSS or Atom feed) to which the intended (un)subscribe - * event will relate - * - * @param string $url - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setTopicUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - .' of "' . $url . '" must be a non-empty string and a valid' - .' URL'); - } - $this->topicUrl = $url; - return $this; - } - - /** - * Set the topic URL (RSS or Atom feed) to which the intended (un)subscribe - * event will relate - * - * @return string - * @throws Exception\RuntimeException - */ - public function getTopicUrl() - { - if (empty($this->topicUrl)) { - throw new Exception\RuntimeException('A valid Topic (RSS or Atom' - . ' feed) URL MUST be set before attempting any operation'); - } - return $this->topicUrl; - } - - /** - * Set the number of seconds for which any subscription will remain valid - * - * @param int $seconds - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setLeaseSeconds($seconds) - { - $seconds = intval($seconds); - if ($seconds <= 0) { - throw new Exception\InvalidArgumentException('Expected lease seconds' - . ' must be an integer greater than zero'); - } - $this->leaseSeconds = $seconds; - return $this; - } - - /** - * Get the number of lease seconds on subscriptions - * - * @return int - */ - public function getLeaseSeconds() - { - return $this->leaseSeconds; - } - - /** - * Set the callback URL to be used by Hub Servers when communicating with - * this Subscriber - * - * @param string $url - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setCallbackUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . ' URL'); - } - $this->callbackUrl = $url; - return $this; - } - - /** - * Get the callback URL to be used by Hub Servers when communicating with - * this Subscriber - * - * @return string - * @throws Exception\RuntimeException - */ - public function getCallbackUrl() - { - if (empty($this->callbackUrl)) { - throw new Exception\RuntimeException('A valid Callback URL MUST be' - . ' set before attempting any operation'); - } - return $this->callbackUrl; - } - - /** - * Set preferred verification mode (sync or async). By default, this - * Subscriber prefers synchronous verification, but does support - * asynchronous if that's the Hub Server's utilised mode. - * - * Zend\Feed\Pubsubhubbub\Subscriber will always send both modes, whose - * order of occurrence in the parameter list determines this preference. - * - * @param string $mode Should be 'sync' or 'async' - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setPreferredVerificationMode($mode) - { - if ($mode !== PubSubHubbub::VERIFICATION_MODE_SYNC - && $mode !== PubSubHubbub::VERIFICATION_MODE_ASYNC - ) { - throw new Exception\InvalidArgumentException('Invalid preferred' - . ' mode specified: "' . $mode . '" but should be one of' - . ' Zend\Feed\Pubsubhubbub::VERIFICATION_MODE_SYNC or' - . ' Zend\Feed\Pubsubhubbub::VERIFICATION_MODE_ASYNC'); - } - $this->preferredVerificationMode = $mode; - return $this; - } - - /** - * Get preferred verification mode (sync or async). - * - * @return string - */ - public function getPreferredVerificationMode() - { - return $this->preferredVerificationMode; - } - - /** - * Add a Hub Server URL supported by Publisher - * - * @param string $url - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function addHubUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . ' URL'); - } - $this->hubUrls[] = $url; - return $this; - } - - /** - * Add an array of Hub Server URLs supported by Publisher - * - * @param array $urls - * @return Subscriber - */ - public function addHubUrls(array $urls) - { - foreach ($urls as $url) { - $this->addHubUrl($url); - } - return $this; - } - - /** - * Remove a Hub Server URL - * - * @param string $url - * @return Subscriber - */ - public function removeHubUrl($url) - { - if (!in_array($url, $this->getHubUrls())) { - return $this; - } - $key = array_search($url, $this->hubUrls); - unset($this->hubUrls[$key]); - return $this; - } - - /** - * Return an array of unique Hub Server URLs currently available - * - * @return array - */ - public function getHubUrls() - { - $this->hubUrls = array_unique($this->hubUrls); - return $this->hubUrls; - } - - /** - * Add authentication credentials for a given URL - * - * @param string $url - * @param array $authentication - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function addAuthentication($url, array $authentication) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter "url"' - . ' of "' . $url . '" must be a non-empty string and a valid' - . ' URL'); - } - $this->authentications[$url] = $authentication; - return $this; - } - - /** - * Add authentication credentials for hub URLs - * - * @param array $authentications - * @return Subscriber - */ - public function addAuthentications(array $authentications) - { - foreach ($authentications as $url => $authentication) { - $this->addAuthentication($url, $authentication); - } - return $this; - } - - /** - * Get all hub URL authentication credentials - * - * @return array - */ - public function getAuthentications() - { - return $this->authentications; - } - - /** - * Set flag indicating whether or not to use a path parameter - * - * @param bool $bool - * @return Subscriber - */ - public function usePathParameter($bool = true) - { - $this->usePathParameter = $bool; - return $this; - } - - /** - * Add an optional parameter to the (un)subscribe requests - * - * @param string $name - * @param string|null $value - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function setParameter($name, $value = null) - { - if (is_array($name)) { - $this->setParameters($name); - return $this; - } - if (empty($name) || !is_string($name)) { - throw new Exception\InvalidArgumentException('Invalid parameter "name"' - . ' of "' . $name . '" must be a non-empty string'); - } - if ($value === null) { - $this->removeParameter($name); - return $this; - } - if (empty($value) || (!is_string($value) && $value !== null)) { - throw new Exception\InvalidArgumentException('Invalid parameter "value"' - . ' of "' . $value . '" must be a non-empty string'); - } - $this->parameters[$name] = $value; - return $this; - } - - /** - * Add an optional parameter to the (un)subscribe requests - * - * @param array $parameters - * @return Subscriber - */ - public function setParameters(array $parameters) - { - foreach ($parameters as $name => $value) { - $this->setParameter($name, $value); - } - return $this; - } - - /** - * Remove an optional parameter for the (un)subscribe requests - * - * @param string $name - * @return Subscriber - * @throws Exception\InvalidArgumentException - */ - public function removeParameter($name) - { - if (empty($name) || !is_string($name)) { - throw new Exception\InvalidArgumentException('Invalid parameter "name"' - . ' of "' . $name . '" must be a non-empty string'); - } - if (array_key_exists($name, $this->parameters)) { - unset($this->parameters[$name]); - } - return $this; - } - - /** - * Return an array of optional parameters for (un)subscribe requests - * - * @return array - */ - public function getParameters() - { - return $this->parameters; - } - - /** - * Sets an instance of Zend\Feed\Pubsubhubbub\Model\SubscriptionPersistence used to background - * save any verification tokens associated with a subscription or other. - * - * @param Model\SubscriptionPersistenceInterface $storage - * @return Subscriber - */ - public function setStorage(Model\SubscriptionPersistenceInterface $storage) - { - $this->storage = $storage; - return $this; - } - - /** - * Gets an instance of Zend\Feed\Pubsubhubbub\Storage\StoragePersistence used - * to background save any verification tokens associated with a subscription - * or other. - * - * @return Model\SubscriptionPersistenceInterface - * @throws Exception\RuntimeException - */ - public function getStorage() - { - if ($this->storage === null) { - throw new Exception\RuntimeException('No storage vehicle ' - . 'has been set.'); - } - return $this->storage; - } - - /** - * Subscribe to one or more Hub Servers using the stored Hub URLs - * for the given Topic URL (RSS or Atom feed) - * - * @return void - */ - public function subscribeAll() - { - $this->_doRequest('subscribe'); - } - - /** - * Unsubscribe from one or more Hub Servers using the stored Hub URLs - * for the given Topic URL (RSS or Atom feed) - * - * @return void - */ - public function unsubscribeAll() - { - $this->_doRequest('unsubscribe'); - } - - /** - * Returns a boolean indicator of whether the notifications to Hub - * Servers were ALL successful. If even one failed, FALSE is returned. - * - * @return bool - */ - public function isSuccess() - { - if (count($this->errors) > 0) { - return false; - } - return true; - } - - /** - * Return an array of errors met from any failures, including keys: - * 'response' => the Zend\Http\Response object from the failure - * 'hubUrl' => the URL of the Hub Server whose notification failed - * - * @return array - */ - public function getErrors() - { - return $this->errors; - } - - /** - * Return an array of Hub Server URLs who returned a response indicating - * operation in Asynchronous Verification Mode, i.e. they will not confirm - * any (un)subscription immediately but at a later time (Hubs may be - * doing this as a batch process when load balancing) - * - * @return array - */ - public function getAsyncHubs() - { - return $this->asyncHubs; - } - - /** - * Executes an (un)subscribe request - * - * @param string $mode - * @return void - * @throws Exception\RuntimeException - */ - protected function _doRequest($mode) - { - $client = $this->_getHttpClient(); - $hubs = $this->getHubUrls(); - if (empty($hubs)) { - throw new Exception\RuntimeException('No Hub Server URLs' - . ' have been set so no subscriptions can be attempted'); - } - $this->errors = array(); - $this->asyncHubs = array(); - foreach ($hubs as $url) { - if (array_key_exists($url, $this->authentications)) { - $auth = $this->authentications[$url]; - $client->setAuth($auth[0], $auth[1]); - } - $client->setUri($url); - $client->setRawBody($params = $this->_getRequestParameters($url, $mode)); - $response = $client->send(); - if ($response->getStatusCode() !== 204 - && $response->getStatusCode() !== 202 - ) { - $this->errors[] = array( - 'response' => $response, - 'hubUrl' => $url, - ); - /** - * At first I thought it was needed, but the backend storage will - * allow tracking async without any user interference. It's left - * here in case the user is interested in knowing what Hubs - * are using async verification modes so they may update Models and - * move these to asynchronous processes. - */ - } elseif ($response->getStatusCode() == 202) { - $this->asyncHubs[] = array( - 'response' => $response, - 'hubUrl' => $url, - ); - } - } - } - - /** - * Get a basic prepared HTTP client for use - * - * @return \Zend\Http\Client - */ - protected function _getHttpClient() - { - $client = PubSubHubbub::getHttpClient(); - $client->setMethod(HttpRequest::METHOD_POST); - $client->setOptions(array('useragent' => 'Zend_Feed_Pubsubhubbub_Subscriber/' - . Version::VERSION)); - return $client; - } - - /** - * Return a list of standard protocol/optional parameters for addition to - * client's POST body that are specific to the current Hub Server URL - * - * @param string $hubUrl - * @param string $mode - * @return string - * @throws Exception\InvalidArgumentException - */ - protected function _getRequestParameters($hubUrl, $mode) - { - if (!in_array($mode, array('subscribe', 'unsubscribe'))) { - throw new Exception\InvalidArgumentException('Invalid mode specified: "' - . $mode . '" which should have been "subscribe" or "unsubscribe"'); - } - - $params = array( - 'hub.mode' => $mode, - 'hub.topic' => $this->getTopicUrl(), - ); - - if ($this->getPreferredVerificationMode() - == PubSubHubbub::VERIFICATION_MODE_SYNC - ) { - $vmodes = array( - PubSubHubbub::VERIFICATION_MODE_SYNC, - PubSubHubbub::VERIFICATION_MODE_ASYNC, - ); - } else { - $vmodes = array( - PubSubHubbub::VERIFICATION_MODE_ASYNC, - PubSubHubbub::VERIFICATION_MODE_SYNC, - ); - } - $params['hub.verify'] = array(); - foreach ($vmodes as $vmode) { - $params['hub.verify'][] = $vmode; - } - - /** - * Establish a persistent verify_token and attach key to callback - * URL's path/query_string - */ - $key = $this->_generateSubscriptionKey($params, $hubUrl); - $token = $this->_generateVerifyToken(); - $params['hub.verify_token'] = $token; - - // Note: query string only usable with PuSH 0.2 Hubs - if (!$this->usePathParameter) { - $params['hub.callback'] = $this->getCallbackUrl() - . '?xhub.subscription=' . PubSubHubbub::urlencode($key); - } else { - $params['hub.callback'] = rtrim($this->getCallbackUrl(), '/') - . '/' . PubSubHubbub::urlencode($key); - } - if ($mode == 'subscribe' && $this->getLeaseSeconds() !== null) { - $params['hub.lease_seconds'] = $this->getLeaseSeconds(); - } - - // hub.secret not currently supported - $optParams = $this->getParameters(); - foreach ($optParams as $name => $value) { - $params[$name] = $value; - } - - // store subscription to storage - $now = new DateTime(); - $expires = null; - if (isset($params['hub.lease_seconds'])) { - $expires = $now->add(new DateInterval('PT' . $params['hub.lease_seconds'] . 'S')) - ->format('Y-m-d H:i:s'); - } - $data = array( - 'id' => $key, - 'topic_url' => $params['hub.topic'], - 'hub_url' => $hubUrl, - 'created_time' => $now->format('Y-m-d H:i:s'), - 'lease_seconds' => $params['hub.lease_seconds'], - 'verify_token' => hash('sha256', $params['hub.verify_token']), - 'secret' => null, - 'expiration_time' => $expires, - 'subscription_state' => ($mode == 'unsubscribe')? PubSubHubbub::SUBSCRIPTION_TODELETE : PubSubHubbub::SUBSCRIPTION_NOTVERIFIED, - ); - $this->getStorage()->setSubscription($data); - - return $this->_toByteValueOrderedString( - $this->_urlEncode($params) - ); - } - - /** - * Simple helper to generate a verification token used in (un)subscribe - * requests to a Hub Server. Follows no particular method, which means - * it might be improved/changed in future. - * - * @return string - */ - protected function _generateVerifyToken() - { - if (!empty($this->testStaticToken)) { - return $this->testStaticToken; - } - return uniqid(rand(), true) . time(); - } - - /** - * Simple helper to generate a verification token used in (un)subscribe - * requests to a Hub Server. - * - * @param array $params - * @param string $hubUrl The Hub Server URL for which this token will apply - * @return string - */ - protected function _generateSubscriptionKey(array $params, $hubUrl) - { - $keyBase = $params['hub.topic'] . $hubUrl; - $key = md5($keyBase); - - return $key; - } - - /** - * URL Encode an array of parameters - * - * @param array $params - * @return array - */ - protected function _urlEncode(array $params) - { - $encoded = array(); - foreach ($params as $key => $value) { - if (is_array($value)) { - $ekey = PubSubHubbub::urlencode($key); - $encoded[$ekey] = array(); - foreach ($value as $duplicateKey) { - $encoded[$ekey][] - = PubSubHubbub::urlencode($duplicateKey); - } - } else { - $encoded[PubSubHubbub::urlencode($key)] - = PubSubHubbub::urlencode($value); - } - } - return $encoded; - } - - /** - * Order outgoing parameters - * - * @param array $params - * @return array - */ - protected function _toByteValueOrderedString(array $params) - { - $return = array(); - uksort($params, 'strnatcmp'); - foreach ($params as $key => $value) { - if (is_array($value)) { - foreach ($value as $keyduplicate) { - $return[] = $key . '=' . $keyduplicate; - } - } else { - $return[] = $key . '=' . $value; - } - } - return implode('&', $return); - } - - /** - * This is STRICTLY for testing purposes only... - */ - protected $testStaticToken = null; - - final public function setTestStaticToken($token) - { - $this->testStaticToken = (string) $token; - } -} diff --git a/3rdparty/ZendFeed/PubSubHubbub/Subscriber/Callback.php b/3rdparty/ZendFeed/PubSubHubbub/Subscriber/Callback.php deleted file mode 100644 index 5ec8af2fe..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/Subscriber/Callback.php +++ /dev/null @@ -1,316 +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\PubSubHubbub\Subscriber; - -use Zend\Feed\PubSubHubbub; -use Zend\Feed\PubSubHubbub\Exception; -use Zend\Feed\Uri; - -class Callback extends PubSubHubbub\AbstractCallback -{ - /** - * Contains the content of any feeds sent as updates to the Callback URL - * - * @var string - */ - protected $feedUpdate = null; - - /** - * Holds a manually set subscription key (i.e. identifies a unique - * subscription) which is typical when it is not passed in the query string - * but is part of the Callback URL path, requiring manual retrieval e.g. - * using a route and the \Zend\Mvc\Router\RouteMatch::getParam() method. - * - * @var string - */ - protected $subscriptionKey = null; - - /** - * After verification, this is set to the verified subscription's data. - * - * @var array - */ - protected $currentSubscriptionData = null; - - /** - * Set a subscription key to use for the current callback request manually. - * Required if usePathParameter is enabled for the Subscriber. - * - * @param string $key - * @return \Zend\Feed\PubSubHubbub\Subscriber\Callback - */ - public function setSubscriptionKey($key) - { - $this->subscriptionKey = $key; - return $this; - } - - /** - * Handle any callback from a Hub Server responding to a subscription or - * unsubscription request. This should be the Hub Server confirming the - * the request prior to taking action on it. - * - * @param array $httpGetData GET data if available and not in $_GET - * @param bool $sendResponseNow Whether to send response now or when asked - * @return void - */ - public function handle(array $httpGetData = null, $sendResponseNow = false) - { - if ($httpGetData === null) { - $httpGetData = $_GET; - } - - /** - * Handle any feed updates (sorry for the mess :P) - * - * This DOES NOT attempt to process a feed update. Feed updates - * SHOULD be validated/processed by an asynchronous process so as - * to avoid holding up responses to the Hub. - */ - $contentType = $this->_getHeader('Content-Type'); - if (strtolower($_SERVER['REQUEST_METHOD']) == 'post' - && $this->_hasValidVerifyToken(null, false) - && (stripos($contentType, 'application/atom+xml') === 0 - || stripos($contentType, 'application/rss+xml') === 0 - || stripos($contentType, 'application/xml') === 0 - || stripos($contentType, 'text/xml') === 0 - || stripos($contentType, 'application/rdf+xml') === 0) - ) { - $this->setFeedUpdate($this->_getRawBody()); - $this->getHttpResponse()->setHeader('X-Hub-On-Behalf-Of', $this->getSubscriberCount()); - /** - * Handle any (un)subscribe confirmation requests - */ - } elseif ($this->isValidHubVerification($httpGetData)) { - $this->getHttpResponse()->setContent($httpGetData['hub_challenge']); - - switch (strtolower($httpGetData['hub_mode'])) { - case 'subscribe': - $data = $this->currentSubscriptionData; - $data['subscription_state'] = PubSubHubbub\PubSubHubbub::SUBSCRIPTION_VERIFIED; - if (isset($httpGetData['hub_lease_seconds'])) { - $data['lease_seconds'] = $httpGetData['hub_lease_seconds']; - } - $this->getStorage()->setSubscription($data); - break; - case 'unsubscribe': - $verifyTokenKey = $this->_detectVerifyTokenKey($httpGetData); - $this->getStorage()->deleteSubscription($verifyTokenKey); - break; - default: - throw new Exception\RuntimeException(sprintf( - 'Invalid hub_mode ("%s") provided', - $httpGetData['hub_mode'] - )); - } - /** - * Hey, C'mon! We tried everything else! - */ - } else { - $this->getHttpResponse()->setStatusCode(404); - } - - if ($sendResponseNow) { - $this->sendResponse(); - } - } - - /** - * Checks validity of the request simply by making a quick pass and - * confirming the presence of all REQUIRED parameters. - * - * @param array $httpGetData - * @return bool - */ - public function isValidHubVerification(array $httpGetData) - { - /** - * As per the specification, the hub.verify_token is OPTIONAL. This - * implementation of Pubsubhubbub considers it REQUIRED and will - * always send a hub.verify_token parameter to be echoed back - * by the Hub Server. Therefore, its absence is considered invalid. - */ - if (strtolower($_SERVER['REQUEST_METHOD']) !== 'get') { - return false; - } - $required = array( - 'hub_mode', - 'hub_topic', - 'hub_challenge', - 'hub_verify_token', - ); - foreach ($required as $key) { - if (!array_key_exists($key, $httpGetData)) { - return false; - } - } - if ($httpGetData['hub_mode'] !== 'subscribe' - && $httpGetData['hub_mode'] !== 'unsubscribe' - ) { - return false; - } - if ($httpGetData['hub_mode'] == 'subscribe' - && !array_key_exists('hub_lease_seconds', $httpGetData) - ) { - return false; - } - if (!Uri::factory($httpGetData['hub_topic'])->isValid()) { - return false; - } - - /** - * Attempt to retrieve any Verification Token Key attached to Callback - * URL's path by our Subscriber implementation - */ - if (!$this->_hasValidVerifyToken($httpGetData)) { - return false; - } - return true; - } - - /** - * Sets a newly received feed (Atom/RSS) sent by a Hub as an update to a - * Topic we've subscribed to. - * - * @param string $feed - * @return \Zend\Feed\PubSubHubbub\Subscriber\Callback - */ - public function setFeedUpdate($feed) - { - $this->feedUpdate = $feed; - return $this; - } - - /** - * Check if any newly received feed (Atom/RSS) update was received - * - * @return bool - */ - public function hasFeedUpdate() - { - if ($this->feedUpdate === null) { - return false; - } - return true; - } - - /** - * Gets a newly received feed (Atom/RSS) sent by a Hub as an update to a - * Topic we've subscribed to. - * - * @return string - */ - public function getFeedUpdate() - { - return $this->feedUpdate; - } - - /** - * Check for a valid verify_token. By default attempts to compare values - * with that sent from Hub, otherwise merely ascertains its existence. - * - * @param array $httpGetData - * @param bool $checkValue - * @return bool - */ - protected function _hasValidVerifyToken(array $httpGetData = null, $checkValue = true) - { - $verifyTokenKey = $this->_detectVerifyTokenKey($httpGetData); - if (empty($verifyTokenKey)) { - return false; - } - $verifyTokenExists = $this->getStorage()->hasSubscription($verifyTokenKey); - if (!$verifyTokenExists) { - return false; - } - if ($checkValue) { - $data = $this->getStorage()->getSubscription($verifyTokenKey); - $verifyToken = $data['verify_token']; - if ($verifyToken !== hash('sha256', $httpGetData['hub_verify_token'])) { - return false; - } - $this->currentSubscriptionData = $data; - return true; - } - return true; - } - - /** - * Attempt to detect the verification token key. This would be passed in - * the Callback URL (which we are handling with this class!) as a URI - * path part (the last part by convention). - * - * @param null|array $httpGetData - * @return false|string - */ - protected function _detectVerifyTokenKey(array $httpGetData = null) - { - /** - * Available when sub keys encoding in Callback URL path - */ - if (isset($this->subscriptionKey)) { - return $this->subscriptionKey; - } - - /** - * Available only if allowed by PuSH 0.2 Hubs - */ - if (is_array($httpGetData) - && isset($httpGetData['xhub_subscription']) - ) { - return $httpGetData['xhub_subscription']; - } - - /** - * Available (possibly) if corrupted in transit and not part of $_GET - */ - $params = $this->_parseQueryString(); - if (isset($params['xhub.subscription'])) { - return rawurldecode($params['xhub.subscription']); - } - - return false; - } - - /** - * Build an array of Query String parameters. - * This bypasses $_GET which munges parameter names and cannot accept - * multiple parameters with the same key. - * - * @return array|void - */ - protected function _parseQueryString() - { - $params = array(); - $queryString = ''; - if (isset($_SERVER['QUERY_STRING'])) { - $queryString = $_SERVER['QUERY_STRING']; - } - if (empty($queryString)) { - return array(); - } - $parts = explode('&', $queryString); - foreach ($parts as $kvpair) { - $pair = explode('=', $kvpair); - $key = rawurldecode($pair[0]); - $value = rawurldecode($pair[1]); - if (isset($params[$key])) { - if (is_array($params[$key])) { - $params[$key][] = $value; - } else { - $params[$key] = array($params[$key], $value); - } - } else { - $params[$key] = $value; - } - } - return $params; - } -} diff --git a/3rdparty/ZendFeed/PubSubHubbub/Version.php b/3rdparty/ZendFeed/PubSubHubbub/Version.php deleted file mode 100644 index edee6953b..000000000 --- a/3rdparty/ZendFeed/PubSubHubbub/Version.php +++ /dev/null @@ -1,15 +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\PubSubHubbub; - -abstract class Version -{ - const VERSION = '2'; -} diff --git a/3rdparty/ZendFeed/README.md b/3rdparty/ZendFeed/README.md deleted file mode 100644 index ffc73a9c2..000000000 --- a/3rdparty/ZendFeed/README.md +++ /dev/null @@ -1,15 +0,0 @@ -Feed Component from ZF2 -======================= - -This is the Feed component for ZF2. - -- File issues at https://github.com/zendframework/zf2/issues -- Create pull requests against https://github.com/zendframework/zf2 -- Documentation is at http://framework.zend.com/docs - -LICENSE -------- - -The files in this archive are released under the [Zend Framework -license](http://framework.zend.com/license), which is a 3-clause BSD license. - diff --git a/3rdparty/ZendFeed/Reader/AbstractEntry.php b/3rdparty/ZendFeed/Reader/AbstractEntry.php deleted file mode 100644 index cf8a9361b..000000000 --- a/3rdparty/ZendFeed/Reader/AbstractEntry.php +++ /dev/null @@ -1,224 +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; - -use DOMDocument; -use DOMElement; -use DOMXPath; - -abstract class AbstractEntry -{ - /** - * Feed entry data - * - * @var array - */ - protected $data = array(); - - /** - * DOM document object - * - * @var DOMDocument - */ - protected $domDocument = null; - - /** - * Entry instance - * - * @var DOMElement - */ - protected $entry = null; - - /** - * Pointer to the current entry - * - * @var int - */ - protected $entryKey = 0; - - /** - * XPath object - * - * @var DOMXPath - */ - protected $xpath = null; - - /** - * Registered extensions - * - * @var array - */ - protected $extensions = array(); - - /** - * Constructor - * - * @param DOMElement $entry - * @param int $entryKey - * @param null|string $type - */ - public function __construct(DOMElement $entry, $entryKey, $type = null) - { - $this->entry = $entry; - $this->entryKey = $entryKey; - $this->domDocument = $entry->ownerDocument; - if ($type !== null) { - $this->data['type'] = $type; - } else { - $this->data['type'] = Reader::detectType($entry); - } - $this->_loadExtensions(); - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the entry element - * - * @return DOMElement - */ - public function getElement() - { - return $this->entry; - } - - /** - * Get the Entry's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - if (empty($assumed)) { - $assumed = 'UTF-8'; - } - return $assumed; - } - - /** - * Get entry as xml - * - * @return string - */ - public function saveXml() - { - $dom = new DOMDocument('1.0', $this->getEncoding()); - $entry = $dom->importNode($this->getElement(), true); - $dom->appendChild($entry); - return $dom->saveXml(); - } - - /** - * Get the entry type - * - * @return string - */ - public function getType() - { - return $this->data['type']; - } - - /** - * Get the XPath query object - * - * @return DOMXPath - */ - public function getXpath() - { - if (!$this->xpath) { - $this->setXpath(new DOMXPath($this->getDomDocument())); - } - return $this->xpath; - } - - /** - * Set the XPath query - * - * @param DOMXPath $xpath - * @return \Zend\Feed\Reader\AbstractEntry - */ - public function setXpath(DOMXPath $xpath) - { - $this->xpath = $xpath; - return $this; - } - - /** - * Get registered extensions - * - * @return array - */ - public function getExtensions() - { - return $this->extensions; - } - - /** - * Return an Extension object with the matching name (postfixed with _Entry) - * - * @param string $name - * @return \Zend\Feed\Reader\Extension\AbstractEntry - */ - public function getExtension($name) - { - if (array_key_exists($name . '\Entry', $this->extensions)) { - return $this->extensions[$name . '\Entry']; - } - return null; - } - - /** - * Method overloading: call given method on first extension implementing it - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\BadMethodCallException if no extensions implements the method - */ - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - if (method_exists($extension, $method)) { - return call_user_func_array(array($extension, $method), $args); - } - } - throw new Exception\BadMethodCallException('Method: ' . $method - . 'does not exist and could not be located on a registered Extension'); - } - - /** - * Load extensions from Zend\Feed\Reader\Reader - * - * @return void - */ - protected function _loadExtensions() - { - $all = Reader::getExtensions(); - $feed = $all['entry']; - foreach ($feed as $extension) { - if (in_array($extension, $all['core'])) { - continue; - } - $className = Reader::getPluginLoader()->getClassName($extension); - $this->extensions[$extension] = new $className( - $this->getElement(), $this->entryKey, $this->data['type'] - ); - } - } -} diff --git a/3rdparty/ZendFeed/Reader/AbstractFeed.php b/3rdparty/ZendFeed/Reader/AbstractFeed.php deleted file mode 100644 index 57ed45d3e..000000000 --- a/3rdparty/ZendFeed/Reader/AbstractFeed.php +++ /dev/null @@ -1,300 +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; - -use DOMDocument; -use DOMElement; -use DOMXPath; - -abstract class AbstractFeed implements Feed\FeedInterface -{ - /** - * Parsed feed data - * - * @var array - */ - protected $data = array(); - - /** - * Parsed feed data in the shape of a DOMDocument - * - * @var DOMDocument - */ - protected $domDocument = null; - - /** - * An array of parsed feed entries - * - * @var array - */ - protected $entries = array(); - - /** - * A pointer for the iterator to keep track of the entries array - * - * @var int - */ - protected $entriesKey = 0; - - /** - * The base XPath query used to retrieve feed data - * - * @var DOMXPath - */ - protected $xpath = null; - - /** - * Array of loaded extensions - * - * @var array - */ - protected $extensions = array(); - - /** - * Original Source URI (set if imported from a URI) - * - * @var string - */ - protected $originalSourceUri = null; - - /** - * Constructor - * - * @param DomDocument $domDocument The DOM object for the feed's XML - * @param string $type Feed type - */ - public function __construct(DOMDocument $domDocument, $type = null) - { - $this->domDocument = $domDocument; - $this->xpath = new DOMXPath($this->domDocument); - - if ($type !== null) { - $this->data['type'] = $type; - } else { - $this->data['type'] = Reader::detectType($this->domDocument); - } - $this->registerNamespaces(); - $this->indexEntries(); - $this->loadExtensions(); - } - - /** - * Set an original source URI for the feed being parsed. This value - * is returned from getFeedLink() method if the feed does not carry - * a self-referencing URI. - * - * @param string $uri - */ - public function setOriginalSourceUri($uri) - { - $this->originalSourceUri = $uri; - } - - /** - * Get an original source URI for the feed being parsed. Returns null if - * unset or the feed was not imported from a URI. - * - * @return string|null - */ - public function getOriginalSourceUri() - { - return $this->originalSourceUri; - } - - /** - * Get the number of feed entries. - * Required by the Iterator interface. - * - * @return int - */ - public function count() - { - return count($this->entries); - } - - /** - * Return the current entry - * - * @return \Zend\Feed\Reader\AbstractEntry - */ - public function current() - { - if (substr($this->getType(), 0, 3) == 'rss') { - $reader = new Entry\RSS($this->entries[$this->key()], $this->key(), $this->getType()); - } else { - $reader = new Entry\Atom($this->entries[$this->key()], $this->key(), $this->getType()); - } - - $reader->setXpath($this->xpath); - - return $reader; - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the Feed's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - if (empty($assumed)) { - $assumed = 'UTF-8'; - } - return $assumed; - } - - /** - * Get feed as xml - * - * @return string - */ - public function saveXml() - { - return $this->getDomDocument()->saveXml(); - } - - /** - * Get the DOMElement representing the items/feed element - * - * @return DOMElement - */ - public function getElement() - { - return $this->getDomDocument()->documentElement; - } - - /** - * Get the DOMXPath object for this feed - * - * @return DOMXPath - */ - public function getXpath() - { - return $this->xpath; - } - - /** - * Get the feed type - * - * @return string - */ - public function getType() - { - return $this->data['type']; - } - - /** - * Return the current feed key - * - * @return int - */ - public function key() - { - return $this->entriesKey; - } - - /** - * Move the feed pointer forward - * - */ - public function next() - { - ++$this->entriesKey; - } - - /** - * Reset the pointer in the feed object - * - */ - public function rewind() - { - $this->entriesKey = 0; - } - - /** - * Check to see if the iterator is still valid - * - * @return bool - */ - public function valid() - { - return 0 <= $this->entriesKey && $this->entriesKey < $this->count(); - } - - public function getExtensions() - { - return $this->extensions; - } - - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - if (method_exists($extension, $method)) { - return call_user_func_array(array($extension, $method), $args); - } - } - throw new Exception\BadMethodCallException('Method: ' . $method - . 'does not exist and could not be located on a registered Extension'); - } - - /** - * Return an Extension object with the matching name (postfixed with _Feed) - * - * @param string $name - * @return \Zend\Feed\Reader\Extension\AbstractFeed - */ - public function getExtension($name) - { - if (array_key_exists($name . '\Feed', $this->extensions)) { - return $this->extensions[$name . '\Feed']; - } - return null; - } - - protected function loadExtensions() - { - $all = Reader::getExtensions(); - $manager = Reader::getExtensionManager(); - $feed = $all['feed']; - foreach ($feed as $extension) { - if (in_array($extension, $all['core'])) { - continue; - } - $plugin = $manager->get($extension); - $plugin->setDomDocument($this->getDomDocument()); - $plugin->setType($this->data['type']); - $plugin->setXpath($this->xpath); - $this->extensions[$extension] = $plugin; - } - } - - /** - * Read all entries to the internal entries array - * - */ - abstract protected function indexEntries(); - - /** - * Register the default namespaces for the current feed format - * - */ - abstract protected function registerNamespaces(); -} diff --git a/3rdparty/ZendFeed/Reader/Collection.php b/3rdparty/ZendFeed/Reader/Collection.php deleted file mode 100644 index 172eecce1..000000000 --- a/3rdparty/ZendFeed/Reader/Collection.php +++ /dev/null @@ -1,17 +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; - -use ArrayObject; - -class Collection extends ArrayObject -{ - -} diff --git a/3rdparty/ZendFeed/Reader/Collection/AbstractCollection.php b/3rdparty/ZendFeed/Reader/Collection/AbstractCollection.php deleted file mode 100644 index 2466a0a9a..000000000 --- a/3rdparty/ZendFeed/Reader/Collection/AbstractCollection.php +++ /dev/null @@ -1,27 +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\Collection; - -use ArrayObject; - -abstract class AbstractCollection extends ArrayObject -{ - - /** - * Return a simple array of the most relevant slice of - * the collection values. For example, feed categories contain - * the category name, domain/URI, and other data. This method would - * merely return the most useful data - i.e. the category names. - * - * @return array - */ - abstract public function getValues(); - -} diff --git a/3rdparty/ZendFeed/Reader/Collection/Author.php b/3rdparty/ZendFeed/Reader/Collection/Author.php deleted file mode 100644 index 1c773d021..000000000 --- a/3rdparty/ZendFeed/Reader/Collection/Author.php +++ /dev/null @@ -1,29 +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\Collection; - -class Author extends AbstractCollection -{ - - /** - * Return a simple array of the most relevant slice of - * the author values, i.e. all author names. - * - * @return array - */ - public function getValues() - { - $authors = array(); - foreach ($this->getIterator() as $element) { - $authors[] = $element['name']; - } - return array_unique($authors); - } -} diff --git a/3rdparty/ZendFeed/Reader/Collection/Category.php b/3rdparty/ZendFeed/Reader/Collection/Category.php deleted file mode 100644 index 15112ceae..000000000 --- a/3rdparty/ZendFeed/Reader/Collection/Category.php +++ /dev/null @@ -1,35 +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\Collection; - -class Category extends AbstractCollection -{ - - /** - * Return a simple array of the most relevant slice of - * the collection values. For example, feed categories contain - * the category name, domain/URI, and other data. This method would - * merely return the most useful data - i.e. the category names. - * - * @return array - */ - public function getValues() - { - $categories = array(); - foreach ($this->getIterator() as $element) { - if (isset($element['label']) && !empty($element['label'])) { - $categories[] = $element['label']; - } else { - $categories[] = $element['term']; - } - } - return array_unique($categories); - } -} diff --git a/3rdparty/ZendFeed/Reader/Collection/Collection.php b/3rdparty/ZendFeed/Reader/Collection/Collection.php deleted file mode 100644 index e3a6ae3d7..000000000 --- a/3rdparty/ZendFeed/Reader/Collection/Collection.php +++ /dev/null @@ -1,17 +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\Collection; - -use ArrayObject; - -class Collection extends ArrayObject -{ - -} diff --git a/3rdparty/ZendFeed/Reader/Entry/AbstractEntry.php b/3rdparty/ZendFeed/Reader/Entry/AbstractEntry.php deleted file mode 100644 index 241a8cdba..000000000 --- a/3rdparty/ZendFeed/Reader/Entry/AbstractEntry.php +++ /dev/null @@ -1,230 +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 DOMDocument; -use DOMElement; -use DOMXPath; -use Zend\Feed\Reader; -use Zend\Feed\Reader\Exception; - -abstract class AbstractEntry -{ - /** - * Feed entry data - * - * @var array - */ - protected $data = array(); - - /** - * DOM document object - * - * @var DOMDocument - */ - protected $domDocument = null; - - /** - * Entry instance - * - * @var DOMElement - */ - protected $entry = null; - - /** - * Pointer to the current entry - * - * @var int - */ - protected $entryKey = 0; - - /** - * XPath object - * - * @var DOMXPath - */ - protected $xpath = null; - - /** - * Registered extensions - * - * @var array - */ - protected $extensions = array(); - - /** - * Constructor - * - * @param DOMElement $entry - * @param int $entryKey - * @param string $type - */ - public function __construct(DOMElement $entry, $entryKey, $type = null) - { - $this->entry = $entry; - $this->entryKey = $entryKey; - $this->domDocument = $entry->ownerDocument; - if ($type !== null) { - $this->data['type'] = $type; - } elseif ($this->domDocument !== null) { - $this->data['type'] = Reader\Reader::detectType($this->domDocument); - } else { - $this->data['type'] = Reader\Reader::TYPE_ANY; - } - $this->loadExtensions(); - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the entry element - * - * @return DOMElement - */ - public function getElement() - { - return $this->entry; - } - - /** - * Get the Entry's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - if (empty($assumed)) { - $assumed = 'UTF-8'; - } - return $assumed; - } - - /** - * Get entry as xml - * - * @return string - */ - public function saveXml() - { - $dom = new DOMDocument('1.0', $this->getEncoding()); - $entry = $dom->importNode($this->getElement(), true); - $dom->appendChild($entry); - return $dom->saveXml(); - } - - /** - * Get the entry type - * - * @return string - */ - public function getType() - { - return $this->data['type']; - } - - /** - * Get the XPath query object - * - * @return DOMXPath - */ - public function getXpath() - { - if (!$this->xpath) { - $this->setXpath(new DOMXPath($this->getDomDocument())); - } - return $this->xpath; - } - - /** - * Set the XPath query - * - * @param DOMXPath $xpath - * @return AbstractEntry - */ - public function setXpath(DOMXPath $xpath) - { - $this->xpath = $xpath; - return $this; - } - - /** - * Get registered extensions - * - * @return array - */ - public function getExtensions() - { - return $this->extensions; - } - - /** - * Return an Extension object with the matching name (postfixed with _Entry) - * - * @param string $name - * @return Reader\Extension\AbstractEntry - */ - public function getExtension($name) - { - if (array_key_exists($name . '\\Entry', $this->extensions)) { - return $this->extensions[$name . '\\Entry']; - } - return null; - } - - /** - * Method overloading: call given method on first extension implementing it - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\RuntimeException if no extensions implements the method - */ - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - if (method_exists($extension, $method)) { - return call_user_func_array(array($extension, $method), $args); - } - } - throw new Exception\RuntimeException('Method: ' . $method - . ' does not exist and could not be located on a registered Extension'); - } - - /** - * Load extensions from Zend\Feed\Reader\Reader - * - * @return void - */ - protected function loadExtensions() - { - $all = Reader\Reader::getExtensions(); - $manager = Reader\Reader::getExtensionManager(); - $feed = $all['entry']; - foreach ($feed as $extension) { - if (in_array($extension, $all['core'])) { - continue; - } - $plugin = $manager->get($extension); - $plugin->setEntryElement($this->getElement()); - $plugin->setEntryKey($this->entryKey); - $plugin->setType($this->data['type']); - $this->extensions[$extension] = $plugin; - } - } -} diff --git a/3rdparty/ZendFeed/Reader/Entry/Atom.php b/3rdparty/ZendFeed/Reader/Entry/Atom.php deleted file mode 100644 index ed61a21e5..000000000 --- a/3rdparty/ZendFeed/Reader/Entry/Atom.php +++ /dev/null @@ -1,370 +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 DOMElement; -use DOMXPath; -use Zend\Feed\Reader; - -class Atom extends AbstractEntry implements EntryInterface -{ - /** - * XPath query - * - * @var string - */ - protected $xpathQuery = ''; - - /** - * Constructor - * - * @param DOMElement $entry - * @param int $entryKey - * @param string $type - */ - public function __construct(DOMElement $entry, $entryKey, $type = null) - { - parent::__construct($entry, $entryKey, $type); - - // Everyone by now should know XPath indices start from 1 not 0 - $this->xpathQuery = '//atom:entry[' . ($this->entryKey + 1) . ']'; - - $manager = Reader\Reader::getExtensionManager(); - $extensions = array('Atom\Entry', 'Thread\Entry', 'DublinCore\Entry'); - - foreach ($extensions as $name) { - $extension = $manager->get($name); - $extension->setEntryElement($entry); - $extension->setEntryKey($entryKey); - $extension->setType($type); - $this->extensions[$name] = $extension; - } - } - - /** - * Get the specified author - * - * @param int $index - * @return string|null - */ - 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']; - } - - $people = $this->getExtension('Atom')->getAuthors(); - - $this->data['authors'] = $people; - - 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('Atom')->getContent(); - - $this->data['content'] = $content; - - return $this->data['content']; - } - - /** - * Get the entry creation date - * - * @return string - */ - public function getDateCreated() - { - if (array_key_exists('datecreated', $this->data)) { - return $this->data['datecreated']; - } - - $dateCreated = $this->getExtension('Atom')->getDateCreated(); - - $this->data['datecreated'] = $dateCreated; - - return $this->data['datecreated']; - } - - /** - * Get the entry modification date - * - * @return string - */ - public function getDateModified() - { - if (array_key_exists('datemodified', $this->data)) { - return $this->data['datemodified']; - } - - $dateModified = $this->getExtension('Atom')->getDateModified(); - - $this->data['datemodified'] = $dateModified; - - 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 = $this->getExtension('Atom')->getDescription(); - - $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 = $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 = $this->getExtension('Atom')->getId(); - - $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 = $this->getExtension('Atom')->getLinks(); - - $this->data['links'] = $links; - - return $this->data['links']; - } - - /** - * 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 = $this->getExtension('Atom')->getTitle(); - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * Get the number of comments/replies for current entry - * - * @return int - */ - public function getCommentCount() - { - if (array_key_exists('commentcount', $this->data)) { - return $this->data['commentcount']; - } - - $commentcount = $this->getExtension('Thread')->getCommentCount(); - - if (!$commentcount) { - $commentcount = $this->getExtension('Atom')->getCommentCount(); - } - - $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 = $this->getExtension('Atom')->getCommentLink(); - - $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('Atom')->getCommentFeedLink(); - - $this->data['commentfeedlink'] = $commentfeedlink; - - return $this->data['commentfeedlink']; - } - - /** - * Get category data as a Reader\Reader_Collection_Category object - * - * @return Reader\Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - $categoryCollection = $this->getExtension('Atom')->getCategories(); - - if (count($categoryCollection) == 0) { - $categoryCollection = $this->getExtension('DublinCore')->getCategories(); - } - - $this->data['categories'] = $categoryCollection; - - return $this->data['categories']; - } - - /** - * Get source feed metadata from the entry - * - * @return Reader\Feed\Atom\Source|null - */ - public function getSource() - { - if (array_key_exists('source', $this->data)) { - return $this->data['source']; - } - - $source = $this->getExtension('Atom')->getSource(); - - $this->data['source'] = $source; - - return $this->data['source']; - } - - /** - * 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); - } - } -} diff --git a/3rdparty/ZendFeed/Reader/Entry/EntryInterface.php b/3rdparty/ZendFeed/Reader/Entry/EntryInterface.php deleted file mode 100644 index 86fea3ec5..000000000 --- a/3rdparty/ZendFeed/Reader/Entry/EntryInterface.php +++ /dev/null @@ -1,129 +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 Zend\Feed\Reader\Collection\Category; - -interface EntryInterface -{ - /** - * Get the specified author - * - * @param int $index - * @return string|null - */ - public function getAuthor($index = 0); - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors(); - - /** - * Get the entry content - * - * @return string - */ - public function getContent(); - - /** - * Get the entry creation date - * - * @return string - */ - public function getDateCreated(); - - /** - * Get the entry modification date - * - * @return string - */ - public function getDateModified(); - - /** - * Get the entry description - * - * @return string - */ - public function getDescription(); - - /** - * Get the entry enclosure - * - * @return \stdClass - */ - public function getEnclosure(); - - /** - * Get the entry ID - * - * @return string - */ - public function getId(); - - /** - * Get a specific link - * - * @param int $index - * @return string - */ - public function getLink($index = 0); - - /** - * Get all links - * - * @return array - */ - public function getLinks(); - - /** - * Get a permalink to the entry - * - * @return string - */ - public function getPermalink(); - - /** - * Get the entry title - * - * @return string - */ - public function getTitle(); - - /** - * Get the number of comments/replies for current entry - * - * @return int - */ - public function getCommentCount(); - - /** - * Returns a URI pointing to the HTML page where comments can be made on this entry - * - * @return string - */ - public function getCommentLink(); - - /** - * Returns a URI pointing to a feed of all comments for this entry - * - * @return string - */ - public function getCommentFeedLink(); - - /** - * Get all categories - * - * @return Category - */ - public function getCategories(); -} 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); - } - } -} diff --git a/3rdparty/ZendFeed/Reader/Exception/BadMethodCallException.php b/3rdparty/ZendFeed/Reader/Exception/BadMethodCallException.php deleted file mode 100644 index ee1ef94cb..000000000 --- a/3rdparty/ZendFeed/Reader/Exception/BadMethodCallException.php +++ /dev/null @@ -1,17 +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\Exception; - -use Zend\Feed\Exception; - -class BadMethodCallException - extends Exception\BadMethodCallException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/Reader/Exception/ExceptionInterface.php b/3rdparty/ZendFeed/Reader/Exception/ExceptionInterface.php deleted file mode 100644 index 8fc904aee..000000000 --- a/3rdparty/ZendFeed/Reader/Exception/ExceptionInterface.php +++ /dev/null @@ -1,15 +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\Exception; - -use Zend\Feed\Exception\ExceptionInterface as Exception; - -interface ExceptionInterface extends Exception -{} diff --git a/3rdparty/ZendFeed/Reader/Exception/InvalidArgumentException.php b/3rdparty/ZendFeed/Reader/Exception/InvalidArgumentException.php deleted file mode 100644 index ad7e928da..000000000 --- a/3rdparty/ZendFeed/Reader/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,17 +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\Exception; - -use Zend\Feed\Exception; - -class InvalidArgumentException - extends Exception\InvalidArgumentException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/Reader/Exception/RuntimeException.php b/3rdparty/ZendFeed/Reader/Exception/RuntimeException.php deleted file mode 100644 index 706a48581..000000000 --- a/3rdparty/ZendFeed/Reader/Exception/RuntimeException.php +++ /dev/null @@ -1,17 +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\Exception; - -use Zend\Feed\Exception; - -class RuntimeException - extends Exception\RuntimeException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/Reader/Extension/AbstractEntry.php b/3rdparty/ZendFeed/Reader/Extension/AbstractEntry.php deleted file mode 100644 index 15e7574df..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/AbstractEntry.php +++ /dev/null @@ -1,233 +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\Extension; - -use DOMDocument; -use DOMElement; -use DOMXPath; -use Zend\Feed\Reader; - -abstract class AbstractEntry -{ - /** - * Feed entry data - * - * @var array - */ - protected $data = array(); - - /** - * DOM document object - * - * @var DOMDocument - */ - protected $domDocument = null; - - /** - * Entry instance - * - * @var DOMElement - */ - protected $entry = null; - - /** - * Pointer to the current entry - * - * @var int - */ - protected $entryKey = 0; - - /** - * XPath object - * - * @var DOMXPath - */ - protected $xpath = null; - - /** - * XPath query - * - * @var string - */ - protected $xpathPrefix = ''; - - /** - * Set the entry DOMElement - * - * Has side effect of setting the DOMDocument for the entry. - * - * @param DOMElement $entry - * @return AbstractEntry - */ - public function setEntryElement(DOMElement $entry) - { - $this->entry = $entry; - $this->domDocument = $entry->ownerDocument; - return $this; - } - - /** - * Get the entry DOMElement - * - * @return DOMElement - */ - public function getEntryElement() - { - return $this->entry; - } - - /** - * Set the entry key - * - * @param string $entryKey - * @return AbstractEntry - */ - public function setEntryKey($entryKey) - { - $this->entryKey = $entryKey; - return $this; - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the Entry's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - return $assumed; - } - - /** - * Set the entry type - * - * Has side effect of setting xpath prefix - * - * @param string $type - * @return AbstractEntry - */ - public function setType($type) - { - if (null === $type) { - $this->data['type'] = null; - return $this; - } - - $this->data['type'] = $type; - if ($type === Reader\Reader::TYPE_RSS_10 - || $type === Reader\Reader::TYPE_RSS_090 - ) { - $this->setXpathPrefix('//rss:item[' . ($this->entryKey + 1) . ']'); - return $this; - } - - if ($type === Reader\Reader::TYPE_ATOM_10 - || $type === Reader\Reader::TYPE_ATOM_03 - ) { - $this->setXpathPrefix('//atom:entry[' . ($this->entryKey + 1) . ']'); - return $this; - } - - $this->setXpathPrefix('//item[' . ($this->entryKey + 1) . ']'); - return $this; - } - - /** - * Get the entry type - * - * @return string - */ - public function getType() - { - $type = $this->data['type']; - if ($type === null) { - $type = Reader\Reader::detectType($this->getEntryElement(), true); - $this->setType($type); - } - - return $type; - } - - /** - * Set the XPath query - * - * @param DOMXPath $xpath - * @return AbstractEntry - */ - public function setXpath(DOMXPath $xpath) - { - $this->xpath = $xpath; - $this->registerNamespaces(); - return $this; - } - - /** - * Get the XPath query object - * - * @return DOMXPath - */ - public function getXpath() - { - if (!$this->xpath) { - $this->setXpath(new DOMXPath($this->getDomDocument())); - } - return $this->xpath; - } - - /** - * Serialize the entry to an array - * - * @return array - */ - public function toArray() - { - return $this->data; - } - - /** - * Get the XPath prefix - * - * @return string - */ - public function getXpathPrefix() - { - return $this->xpathPrefix; - } - - /** - * Set the XPath prefix - * - * @param string $prefix - * @return AbstractEntry - */ - public function setXpathPrefix($prefix) - { - $this->xpathPrefix = $prefix; - return $this; - } - - /** - * Register XML namespaces - * - * @return void - */ - abstract protected function registerNamespaces(); -} diff --git a/3rdparty/ZendFeed/Reader/Extension/AbstractFeed.php b/3rdparty/ZendFeed/Reader/Extension/AbstractFeed.php deleted file mode 100644 index 1bea2e498..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/AbstractFeed.php +++ /dev/null @@ -1,176 +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\Extension; - -use DOMDocument; -use DOMXPath; -use Zend\Feed\Reader; - -abstract class AbstractFeed -{ - /** - * Parsed feed data - * - * @var array - */ - protected $data = array(); - - /** - * Parsed feed data in the shape of a DOMDocument - * - * @var DOMDocument - */ - protected $domDocument = null; - - /** - * The base XPath query used to retrieve feed data - * - * @var DOMXPath - */ - protected $xpath = null; - - /** - * The XPath prefix - * - * @var string - */ - protected $xpathPrefix = ''; - - /** - * Set the DOM document - * - * @param DOMDocument $dom - * @return AbstractFeed - */ - public function setDomDocument(DOMDocument $dom) - { - $this->domDocument = $dom; - return $this; - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the Feed's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - return $assumed; - } - - /** - * Set the feed type - * - * @param string $type - * @return AbstractFeed - */ - public function setType($type) - { - $this->data['type'] = $type; - return $this; - } - - /** - * Get the feed type - * - * If null, it will attempt to autodetect the type. - * - * @return string - */ - public function getType() - { - $type = $this->data['type']; - if (null === $type) { - $type = Reader\Reader::detectType($this->getDomDocument()); - $this->setType($type); - } - return $type; - } - - - /** - * Return the feed as an array - * - * @return array - */ - public function toArray() // untested - { - return $this->data; - } - - /** - * Set the XPath query - * - * @param DOMXPath $xpath - * @return AbstractEntry - */ - public function setXpath(DOMXPath $xpath = null) - { - if (null === $xpath) { - $this->xpath = null; - return $this; - } - - $this->xpath = $xpath; - $this->registerNamespaces(); - return $this; - } - - /** - * Get the DOMXPath object - * - * @return string - */ - public function getXpath() - { - if (null === $this->xpath) { - $this->setXpath(new DOMXPath($this->getDomDocument())); - } - - return $this->xpath; - } - - /** - * Get the XPath prefix - * - * @return string - */ - public function getXpathPrefix() - { - return $this->xpathPrefix; - } - - /** - * Set the XPath prefix - * - * @param string $prefix - * @return void - */ - public function setXpathPrefix($prefix) - { - $this->xpathPrefix = $prefix; - } - - /** - * Register the default namespaces for the current feed format - */ - abstract protected function registerNamespaces(); -} diff --git a/3rdparty/ZendFeed/Reader/Extension/Atom/Entry.php b/3rdparty/ZendFeed/Reader/Extension/Atom/Entry.php deleted file mode 100644 index aa91a5c9c..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/Atom/Entry.php +++ /dev/null @@ -1,628 +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\Extension\Atom; - -use DateTime; -use DOMDocument; -use DOMElement; -use stdClass; -use Zend\Feed\Reader; -use Zend\Feed\Reader\Collection; -use Zend\Feed\Reader\Extension; -use Zend\Feed\Uri; - -class Entry extends Extension\AbstractEntry -{ - /** - * Get the specified author - * - * @param int $index - * @return string|null - */ - public function getAuthor($index = 0) - { - $authors = $this->getAuthors(); - - if (isset($authors[$index])) { - return $authors[$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return Collection\Author - */ - public function getAuthors() - { - if (array_key_exists('authors', $this->data)) { - return $this->data['authors']; - } - - $authors = array(); - $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom:author'); - - if (!$list->length) { - /** - * TODO: Limit query to feed level els only! - */ - $list = $this->getXpath()->query('//atom:author'); - } - - if ($list->length) { - foreach ($list as $author) { - $author = $this->getAuthorFromElement($author); - if (!empty($author)) { - $authors[] = $author; - } - } - } - - if (count($authors) == 0) { - $authors = new Collection\Author(); - } else { - $authors = new Collection\Author( - Reader\Reader::arrayUnique($authors) - ); - } - - $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 = null; - - $el = $this->getXpath()->query($this->getXpathPrefix() . '/atom:content'); - if ($el->length > 0) { - $el = $el->item(0); - $type = $el->getAttribute('type'); - switch ($type) { - case '': - case 'text': - case 'text/plain': - case 'html': - case 'text/html': - $content = $el->nodeValue; - break; - case 'xhtml': - $this->getXpath()->registerNamespace('xhtml', 'http://www.w3.org/1999/xhtml'); - $xhtml = $this->getXpath()->query( - $this->getXpathPrefix() . '/atom:content/xhtml:div' - )->item(0); - $d = new DOMDocument('1.0', $this->getEncoding()); - $xhtmls = $d->importNode($xhtml, true); - $d->appendChild($xhtmls); - $content = $this->collectXhtml( - $d->saveXML(), - $d->lookupPrefix('http://www.w3.org/1999/xhtml') - ); - break; - } - } - - if (!$content) { - $content = $this->getDescription(); - } - - $this->data['content'] = trim($content); - - return $this->data['content']; - } - - /** - * Parse out XHTML to remove the namespacing - * - * @param $xhtml - * @param $prefix - * @return mixed - */ - protected function collectXhtml($xhtml, $prefix) - { - if (!empty($prefix)) $prefix = $prefix . ':'; - $matches = array( - "/<\?xml[^<]*>[^<]*<" . $prefix . "div[^<]*/", - "/<\/" . $prefix . "div>\s*$/" - ); - $xhtml = preg_replace($matches, '', $xhtml); - if (!empty($prefix)) { - $xhtml = preg_replace("/(<[\/]?)" . $prefix . "([a-zA-Z]+)/", '$1$2', $xhtml); - } - return $xhtml; - } - - /** - * Get the entry creation date - * - * @return string - */ - public function getDateCreated() - { - if (array_key_exists('datecreated', $this->data)) { - return $this->data['datecreated']; - } - - $date = null; - - if ($this->getAtomType() === Reader\Reader::TYPE_ATOM_03) { - $dateCreated = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:created)'); - } else { - $dateCreated = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:published)'); - } - - if ($dateCreated) { - $date = new DateTime($dateCreated); - } - - $this->data['datecreated'] = $date; - - return $this->data['datecreated']; - } - - /** - * Get the entry modification date - * - * @return string - */ - public function getDateModified() - { - if (array_key_exists('datemodified', $this->data)) { - return $this->data['datemodified']; - } - - $date = null; - - if ($this->getAtomType() === Reader\Reader::TYPE_ATOM_03) { - $dateModified = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:modified)'); - } else { - $dateModified = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:updated)'); - } - - if ($dateModified) { - $date = new DateTime($dateModified); - } - - $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 = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:summary)'); - - 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; - - $nodeList = $this->getXpath()->query($this->getXpathPrefix() . '/atom:link[@rel="enclosure"]'); - - if ($nodeList->length > 0) { - $enclosure = new stdClass(); - $enclosure->url = $nodeList->item(0)->getAttribute('href'); - $enclosure->length = $nodeList->item(0)->getAttribute('length'); - $enclosure->type = $nodeList->item(0)->getAttribute('type'); - } - - $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 = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:id)'); - - 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 the base URI of the feed (if set). - * - * @return string|null - */ - public function getBaseUrl() - { - if (array_key_exists('baseUrl', $this->data)) { - return $this->data['baseUrl']; - } - - $baseUrl = $this->getXpath()->evaluate('string(' - . $this->getXpathPrefix() . '/@xml:base[1]' - . ')'); - - if (!$baseUrl) { - $baseUrl = $this->getXpath()->evaluate('string(//@xml:base[1])'); - } - - if (!$baseUrl) { - $baseUrl = null; - } - - $this->data['baseUrl'] = $baseUrl; - - return $this->data['baseUrl']; - } - - /** - * 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(); - - $list = $this->getXpath()->query( - $this->getXpathPrefix() . '//atom:link[@rel="alternate"]/@href' . '|' . - $this->getXpathPrefix() . '//atom:link[not(@rel)]/@href' - ); - - if ($list->length) { - foreach ($list as $link) { - $links[] = $this->absolutiseUri($link->value); - } - } - - $this->data['links'] = $links; - - return $this->data['links']; - } - - /** - * 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 = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/atom:title)'); - - if (!$title) { - $title = null; - } - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * Get the number of comments/replies for current entry - * - * @return int - */ - public function getCommentCount() - { - if (array_key_exists('commentcount', $this->data)) { - return $this->data['commentcount']; - } - - $count = null; - - $this->getXpath()->registerNamespace('thread10', 'http://purl.org/syndication/thread/1.0'); - $list = $this->getXpath()->query( - $this->getXpathPrefix() . '//atom:link[@rel="replies"]/@thread10:count' - ); - - if ($list->length) { - $count = $list->item(0)->value; - } - - $this->data['commentcount'] = $count; - - 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']; - } - - $link = null; - - $list = $this->getXpath()->query( - $this->getXpathPrefix() . '//atom:link[@rel="replies" and @type="text/html"]/@href' - ); - - if ($list->length) { - $link = $list->item(0)->value; - $link = $this->absolutiseUri($link); - } - - $this->data['commentlink'] = $link; - - return $this->data['commentlink']; - } - - /** - * Returns a URI pointing to a feed of all comments for this entry - * - * @param string $type - * @return string - */ - public function getCommentFeedLink($type = 'atom') - { - if (array_key_exists('commentfeedlink', $this->data)) { - return $this->data['commentfeedlink']; - } - - $link = null; - - $list = $this->getXpath()->query( - $this->getXpathPrefix() . '//atom:link[@rel="replies" and @type="application/' . $type.'+xml"]/@href' - ); - - if ($list->length) { - $link = $list->item(0)->value; - $link = $this->absolutiseUri($link); - } - - $this->data['commentfeedlink'] = $link; - - return $this->data['commentfeedlink']; - } - - /** - * Get all categories - * - * @return Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - if ($this->getAtomType() == Reader\Reader::TYPE_ATOM_10) { - $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom:category'); - } else { - /** - * Since Atom 0.3 did not support categories, it would have used the - * Dublin Core extension. However there is a small possibility Atom 0.3 - * may have been retrofitted to use Atom 1.0 instead. - */ - $this->getXpath()->registerNamespace('atom10', Reader\Reader::NAMESPACE_ATOM_10); - $list = $this->getXpath()->query($this->getXpathPrefix() . '//atom10:category'); - } - - if ($list->length) { - $categoryCollection = new Collection\Category; - foreach ($list as $category) { - $categoryCollection[] = array( - 'term' => $category->getAttribute('term'), - 'scheme' => $category->getAttribute('scheme'), - 'label' => $category->getAttribute('label') - ); - } - } else { - return new Collection\Category; - } - - $this->data['categories'] = $categoryCollection; - - return $this->data['categories']; - } - - /** - * Get source feed metadata from the entry - * - * @return Reader\Feed\Atom\Source|null - */ - public function getSource() - { - if (array_key_exists('source', $this->data)) { - return $this->data['source']; - } - - $source = null; - // TODO: Investigate why _getAtomType() fails here. Is it even needed? - if ($this->getType() == Reader\Reader::TYPE_ATOM_10) { - $list = $this->getXpath()->query($this->getXpathPrefix() . '/atom:source[1]'); - if ($list->length) { - $element = $list->item(0); - $source = new Reader\Feed\Atom\Source($element, $this->getXpathPrefix()); - } - } - - $this->data['source'] = $source; - return $this->data['source']; - } - - /** - * Attempt to absolutise the URI, i.e. if a relative URI apply the - * xml:base value as a prefix to turn into an absolute URI. - * - * @param $link - * @return string - */ - protected function absolutiseUri($link) - { - if (!Uri::factory($link)->isAbsolute()) { - if ($this->getBaseUrl() !== null) { - $link = $this->getBaseUrl() . $link; - if (!Uri::factory($link)->isValid()) { - $link = null; - } - } - } - return $link; - } - - /** - * Get an author entry - * - * @param DOMElement $element - * @return string - */ - protected function getAuthorFromElement(DOMElement $element) - { - $author = array(); - - $emailNode = $element->getElementsByTagName('email'); - $nameNode = $element->getElementsByTagName('name'); - $uriNode = $element->getElementsByTagName('uri'); - - if ($emailNode->length && strlen($emailNode->item(0)->nodeValue) > 0) { - $author['email'] = $emailNode->item(0)->nodeValue; - } - - if ($nameNode->length && strlen($nameNode->item(0)->nodeValue) > 0) { - $author['name'] = $nameNode->item(0)->nodeValue; - } - - if ($uriNode->length && strlen($uriNode->item(0)->nodeValue) > 0) { - $author['uri'] = $uriNode->item(0)->nodeValue; - } - - if (empty($author)) { - return null; - } - return $author; - } - - /** - * Register the default namespaces for the current feed format - */ - protected function registerNamespaces() - { - switch ($this->getAtomType()) { - case Reader\Reader::TYPE_ATOM_03: - $this->getXpath()->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03); - break; - default: - $this->getXpath()->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10); - break; - } - } - - /** - * Detect the presence of any Atom namespaces in use - * - * @return string - */ - protected function getAtomType() - { - $dom = $this->getDomDocument(); - $prefixAtom03 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_03); - $prefixAtom10 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_10); - if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_03) - || !empty($prefixAtom03)) { - return Reader\Reader::TYPE_ATOM_03; - } - if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_10) - || !empty($prefixAtom10)) { - return Reader\Reader::TYPE_ATOM_10; - } - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/Atom/Feed.php b/3rdparty/ZendFeed/Reader/Extension/Atom/Feed.php deleted file mode 100644 index 986d23fdb..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/Atom/Feed.php +++ /dev/null @@ -1,536 +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\Extension\Atom; - -use DateTime; -use DOMElement; -use Zend\Feed\Reader; -use Zend\Feed\Reader\Collection; -use Zend\Feed\Reader\Extension; -use Zend\Feed\Uri; - -class Feed extends Extension\AbstractFeed -{ - /** - * Get a single author - * - * @param int $index - * @return string|null - */ - public function getAuthor($index = 0) - { - $authors = $this->getAuthors(); - - if (isset($authors[$index])) { - return $authors[$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return Collection\Author - */ - public function getAuthors() - { - if (array_key_exists('authors', $this->data)) { - return $this->data['authors']; - } - - $list = $this->xpath->query('//atom:author'); - - $authors = array(); - - if ($list->length) { - foreach ($list as $author) { - $author = $this->getAuthorFromElement($author); - if (!empty($author)) { - $authors[] = $author; - } - } - } - - if (count($authors) == 0) { - $authors = new Collection\Author(); - } else { - $authors = new Collection\Author( - Reader\Reader::arrayUnique($authors) - ); - } - - $this->data['authors'] = $authors; - - return $this->data['authors']; - } - - /** - * Get the copyright entry - * - * @return string|null - */ - public function getCopyright() - { - if (array_key_exists('copyright', $this->data)) { - return $this->data['copyright']; - } - - $copyright = null; - - if ($this->getType() === Reader\Reader::TYPE_ATOM_03) { - $copyright = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:copyright)'); - } else { - $copyright = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:rights)'); - } - - if (!$copyright) { - $copyright = null; - } - - $this->data['copyright'] = $copyright; - - return $this->data['copyright']; - } - - /** - * Get the feed creation date - * - * @return DateTime|null - */ - public function getDateCreated() - { - if (array_key_exists('datecreated', $this->data)) { - return $this->data['datecreated']; - } - - $date = null; - - if ($this->getType() === Reader\Reader::TYPE_ATOM_03) { - $dateCreated = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:created)'); - } else { - $dateCreated = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:published)'); - } - - if ($dateCreated) { - $date = new DateTime($dateCreated); - } - - $this->data['datecreated'] = $date; - - return $this->data['datecreated']; - } - - /** - * Get the feed modification date - * - * @return DateTime|null - */ - public function getDateModified() - { - if (array_key_exists('datemodified', $this->data)) { - return $this->data['datemodified']; - } - - $date = null; - - if ($this->getType() === Reader\Reader::TYPE_ATOM_03) { - $dateModified = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:modified)'); - } else { - $dateModified = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:updated)'); - } - - if ($dateModified) { - $date = new DateTime($dateModified); - } - - $this->data['datemodified'] = $date; - - return $this->data['datemodified']; - } - - /** - * Get the feed description - * - * @return string|null - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = null; - - if ($this->getType() === Reader\Reader::TYPE_ATOM_03) { - $description = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:tagline)'); - } else { - $description = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:subtitle)'); - } - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the feed generator entry - * - * @return string|null - */ - public function getGenerator() - { - if (array_key_exists('generator', $this->data)) { - return $this->data['generator']; - } - // TODO: Add uri support - $generator = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:generator)'); - - if (!$generator) { - $generator = null; - } - - $this->data['generator'] = $generator; - - return $this->data['generator']; - } - - /** - * Get the feed ID - * - * @return string|null - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:id)'); - - if (!$id) { - if ($this->getLink()) { - $id = $this->getLink(); - } elseif ($this->getTitle()) { - $id = $this->getTitle(); - } else { - $id = null; - } - } - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage() - { - if (array_key_exists('language', $this->data)) { - return $this->data['language']; - } - - $language = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:lang)'); - - if (!$language) { - $language = $this->xpath->evaluate('string(//@xml:lang[1])'); - } - - if (!$language) { - $language = null; - } - - $this->data['language'] = $language; - - return $this->data['language']; - } - - /** - * Get the feed image - * - * @return array|null - */ - public function getImage() - { - if (array_key_exists('image', $this->data)) { - return $this->data['image']; - } - - $imageUrl = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:logo)'); - - if (!$imageUrl) { - $image = null; - } else { - $image = array('uri' => $imageUrl); - } - - $this->data['image'] = $image; - - return $this->data['image']; - } - - /** - * Get the base URI of the feed (if set). - * - * @return string|null - */ - public function getBaseUrl() - { - if (array_key_exists('baseUrl', $this->data)) { - return $this->data['baseUrl']; - } - - $baseUrl = $this->xpath->evaluate('string(//@xml:base[1])'); - - if (!$baseUrl) { - $baseUrl = null; - } - $this->data['baseUrl'] = $baseUrl; - - return $this->data['baseUrl']; - } - - /** - * Get a link to the source website - * - * @return string|null - */ - public function getLink() - { - if (array_key_exists('link', $this->data)) { - return $this->data['link']; - } - - $link = null; - - $list = $this->xpath->query( - $this->getXpathPrefix() . '/atom:link[@rel="alternate"]/@href' . '|' . - $this->getXpathPrefix() . '/atom:link[not(@rel)]/@href' - ); - - if ($list->length) { - $link = $list->item(0)->nodeValue; - $link = $this->absolutiseUri($link); - } - - $this->data['link'] = $link; - - return $this->data['link']; - } - - /** - * Get a link to the feed's XML Url - * - * @return string|null - */ - public function getFeedLink() - { - if (array_key_exists('feedlink', $this->data)) { - return $this->data['feedlink']; - } - - $link = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:link[@rel="self"]/@href)'); - - $link = $this->absolutiseUri($link); - - $this->data['feedlink'] = $link; - - return $this->data['feedlink']; - } - - /** - * Get an array of any supported Pusubhubbub endpoints - * - * @return array|null - */ - public function getHubs() - { - if (array_key_exists('hubs', $this->data)) { - return $this->data['hubs']; - } - $hubs = array(); - - $list = $this->xpath->query($this->getXpathPrefix() - . '//atom:link[@rel="hub"]/@href'); - - if ($list->length) { - foreach ($list as $uri) { - $hubs[] = $this->absolutiseUri($uri->nodeValue); - } - } else { - $hubs = null; - } - - $this->data['hubs'] = $hubs; - - return $this->data['hubs']; - } - - /** - * Get the feed title - * - * @return string|null - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/atom:title)'); - - if (!$title) { - $title = null; - } - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * Get all categories - * - * @return Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - if ($this->getType() == Reader\Reader::TYPE_ATOM_10) { - $list = $this->xpath->query($this->getXpathPrefix() . '/atom:category'); - } else { - /** - * Since Atom 0.3 did not support categories, it would have used the - * Dublin Core extension. However there is a small possibility Atom 0.3 - * may have been retrofittied to use Atom 1.0 instead. - */ - $this->xpath->registerNamespace('atom10', Reader\Reader::NAMESPACE_ATOM_10); - $list = $this->xpath->query($this->getXpathPrefix() . '/atom10:category'); - } - - if ($list->length) { - $categoryCollection = new Collection\Category; - foreach ($list as $category) { - $categoryCollection[] = array( - 'term' => $category->getAttribute('term'), - 'scheme' => $category->getAttribute('scheme'), - 'label' => $category->getAttribute('label') - ); - } - } else { - return new Collection\Category; - } - - $this->data['categories'] = $categoryCollection; - - return $this->data['categories']; - } - - /** - * Get an author entry in RSS format - * - * @param DOMElement $element - * @return string - */ - protected function getAuthorFromElement(DOMElement $element) - { - $author = array(); - - $emailNode = $element->getElementsByTagName('email'); - $nameNode = $element->getElementsByTagName('name'); - $uriNode = $element->getElementsByTagName('uri'); - - if ($emailNode->length && strlen($emailNode->item(0)->nodeValue) > 0) { - $author['email'] = $emailNode->item(0)->nodeValue; - } - - if ($nameNode->length && strlen($nameNode->item(0)->nodeValue) > 0) { - $author['name'] = $nameNode->item(0)->nodeValue; - } - - if ($uriNode->length && strlen($uriNode->item(0)->nodeValue) > 0) { - $author['uri'] = $uriNode->item(0)->nodeValue; - } - - if (empty($author)) { - return null; - } - return $author; - } - - /** - * Attempt to absolutise the URI, i.e. if a relative URI apply the - * xml:base value as a prefix to turn into an absolute URI. - */ - protected function absolutiseUri($link) - { - if (!Uri::factory($link)->isAbsolute()) { - if ($this->getBaseUrl() !== null) { - $link = $this->getBaseUrl() . $link; - if (!Uri::factory($link)->isValid()) { - $link = null; - } - } - } - return $link; - } - - /** - * Register the default namespaces for the current feed format - */ - protected function registerNamespaces() - { - if ($this->getType() == Reader\Reader::TYPE_ATOM_10 - || $this->getType() == Reader\Reader::TYPE_ATOM_03 - ) { - return; // pre-registered at Feed level - } - $atomDetected = $this->getAtomType(); - switch ($atomDetected) { - case Reader\Reader::TYPE_ATOM_03: - $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03); - break; - default: - $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10); - break; - } - } - - /** - * Detect the presence of any Atom namespaces in use - */ - protected function getAtomType() - { - $dom = $this->getDomDocument(); - $prefixAtom03 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_03); - $prefixAtom10 = $dom->lookupPrefix(Reader\Reader::NAMESPACE_ATOM_10); - if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_10) - || !empty($prefixAtom10) - ) { - return Reader\Reader::TYPE_ATOM_10; - } - if ($dom->isDefaultNamespace(Reader\Reader::NAMESPACE_ATOM_03) - || !empty($prefixAtom03) - ) { - return Reader\Reader::TYPE_ATOM_03; - } - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/Content/Entry.php b/3rdparty/ZendFeed/Reader/Extension/Content/Entry.php deleted file mode 100644 index f48a360f2..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/Content/Entry.php +++ /dev/null @@ -1,37 +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\Extension\Content; - -use Zend\Feed\Reader; -use Zend\Feed\Reader\Extension; - -class Entry extends Extension\AbstractEntry -{ - - public function getContent() - { - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090 - ) { - $content = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/content:encoded)'); - } else { - $content = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/content:encoded)'); - } - return $content; - } - - /** - * Register RSS Content Module namespace - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('content', 'http://purl.org/rss/1.0/modules/content/'); - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/CreativeCommons/Entry.php b/3rdparty/ZendFeed/Reader/Extension/CreativeCommons/Entry.php deleted file mode 100644 index 6770b4fe0..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/CreativeCommons/Entry.php +++ /dev/null @@ -1,73 +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\Extension\CreativeCommons; - -use Zend\Feed\Reader; -use Zend\Feed\Reader\Extension; - -class Entry extends Extension\AbstractEntry -{ - /** - * Get the entry license - * - * @param int $index - * @return string|null - */ - public function getLicense($index = 0) - { - $licenses = $this->getLicenses(); - - if (isset($licenses[$index])) { - return $licenses[$index]; - } - - return null; - } - - /** - * Get the entry licenses - * - * @return array - */ - public function getLicenses() - { - $name = 'licenses'; - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $licenses = array(); - $list = $this->xpath->evaluate($this->getXpathPrefix() . '//cc:license'); - - if ($list->length) { - foreach ($list as $license) { - $licenses[] = $license->nodeValue; - } - - $licenses = array_unique($licenses); - } else { - $cc = new Feed(); - $licenses = $cc->getLicenses(); - } - - $this->data[$name] = $licenses; - - return $this->data[$name]; - } - - /** - * Register Creative Commons namespaces - * - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('cc', 'http://backend.userland.com/creativeCommonsRssModule'); - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/CreativeCommons/Feed.php b/3rdparty/ZendFeed/Reader/Extension/CreativeCommons/Feed.php deleted file mode 100644 index 103bce7f9..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/CreativeCommons/Feed.php +++ /dev/null @@ -1,71 +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\Extension\CreativeCommons; - -use Zend\Feed\Reader; -use Zend\Feed\Reader\Extension; - -class Feed extends Extension\AbstractFeed -{ - /** - * Get the entry license - * - * @param int $index - * @return string|null - */ - public function getLicense($index = 0) - { - $licenses = $this->getLicenses(); - - if (isset($licenses[$index])) { - return $licenses[$index]; - } - - return null; - } - - /** - * Get the entry licenses - * - * @return array - */ - public function getLicenses() - { - $name = 'licenses'; - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $licenses = array(); - $list = $this->xpath->evaluate('channel/cc:license'); - - if ($list->length) { - foreach ($list as $license) { - $licenses[] = $license->nodeValue; - } - - $licenses = array_unique($licenses); - } - - $this->data[$name] = $licenses; - - return $this->data[$name]; - } - - /** - * Register Creative Commons namespaces - * - * @return void - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('cc', 'http://backend.userland.com/creativeCommonsRssModule'); - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/DublinCore/Entry.php b/3rdparty/ZendFeed/Reader/Extension/DublinCore/Entry.php deleted file mode 100644 index 2713353ca..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/DublinCore/Entry.php +++ /dev/null @@ -1,238 +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\Extension\DublinCore; - -use DateTime; -use Zend\Feed\Reader; -use Zend\Feed\Reader\Collection; -use Zend\Feed\Reader\Extension; - -class Entry extends Extension\AbstractEntry -{ - /** - * 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(); - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:creator'); - - if (!$list->length) { - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:creator'); - } - if (!$list->length) { - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:publisher'); - - if (!$list->length) { - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:publisher'); - } - } - - if ($list->length) { - foreach ($list as $author) { - $authors[] = array( - 'name' => $author->nodeValue - ); - } - $authors = new Collection\Author( - Reader\Reader::arrayUnique($authors) - ); - } else { - $authors = null; - } - - $this->data['authors'] = $authors; - - return $this->data['authors']; - } - - /** - * Get categories (subjects under DC) - * - * @return Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:subject'); - - if (!$list->length) { - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:subject'); - } - - if ($list->length) { - $categoryCollection = new Collection\Category; - foreach ($list as $category) { - $categoryCollection[] = array( - 'term' => $category->nodeValue, - 'scheme' => null, - 'label' => $category->nodeValue, - ); - } - } else { - $categoryCollection = new Collection\Category; - } - - $this->data['categories'] = $categoryCollection; - return $this->data['categories']; - } - - - /** - * Get the entry content - * - * @return string - */ - public function getContent() - { - return $this->getDescription(); - } - - /** - * Get the entry description - * - * @return string - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = null; - $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:description)'); - - if (!$description) { - $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:description)'); - } - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the entry ID - * - * @return string - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = null; - $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:identifier)'); - - if (!$id) { - $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:identifier)'); - } - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the entry title - * - * @return string - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = null; - $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:title)'); - - if (!$title) { - $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:title)'); - } - - if (!$title) { - $title = null; - } - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * - * - * @return DateTime|null - */ - public function getDate() - { - if (array_key_exists('date', $this->data)) { - return $this->data['date']; - } - - $d = null; - $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:date)'); - - if (!$date) { - $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:date)'); - } - - if ($date) { - $d = new DateTime($date); - } - - $this->data['date'] = $d; - - return $this->data['date']; - } - - /** - * Register DC namespaces - * - * @return void - */ - protected function registerNamespaces() - { - $this->getXpath()->registerNamespace('dc10', 'http://purl.org/dc/elements/1.0/'); - $this->getXpath()->registerNamespace('dc11', 'http://purl.org/dc/elements/1.1/'); - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/DublinCore/Feed.php b/3rdparty/ZendFeed/Reader/Extension/DublinCore/Feed.php deleted file mode 100644 index 2738ac732..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/DublinCore/Feed.php +++ /dev/null @@ -1,281 +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\Extension\DublinCore; - -use DateTime; -use Zend\Feed\Reader; -use Zend\Feed\Reader\Collection; -use Zend\Feed\Reader\Extension; - -class Feed extends Extension\AbstractFeed -{ - /** - * Get a single author - * - * @param int $index - * @return string|null - */ - 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(); - $list = $this->getXpath()->query('//dc11:creator'); - - if (!$list->length) { - $list = $this->getXpath()->query('//dc10:creator'); - } - if (!$list->length) { - $list = $this->getXpath()->query('//dc11:publisher'); - - if (!$list->length) { - $list = $this->getXpath()->query('//dc10:publisher'); - } - } - - if ($list->length) { - foreach ($list as $author) { - $authors[] = array( - 'name' => $author->nodeValue - ); - } - $authors = new Collection\Author( - Reader\Reader::arrayUnique($authors) - ); - } else { - $authors = null; - } - - $this->data['authors'] = $authors; - - return $this->data['authors']; - } - - /** - * Get the copyright entry - * - * @return string|null - */ - public function getCopyright() - { - if (array_key_exists('copyright', $this->data)) { - return $this->data['copyright']; - } - - $copyright = null; - $copyright = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:rights)'); - - if (!$copyright) { - $copyright = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:rights)'); - } - - if (!$copyright) { - $copyright = null; - } - - $this->data['copyright'] = $copyright; - - return $this->data['copyright']; - } - - /** - * Get the feed description - * - * @return string|null - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = null; - $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:description)'); - - if (!$description) { - $description = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:description)'); - } - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the feed ID - * - * @return string|null - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = null; - $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:identifier)'); - - if (!$id) { - $id = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:identifier)'); - } - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage() - { - if (array_key_exists('language', $this->data)) { - return $this->data['language']; - } - - $language = null; - $language = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:language)'); - - if (!$language) { - $language = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:language)'); - } - - if (!$language) { - $language = null; - } - - $this->data['language'] = $language; - - return $this->data['language']; - } - - /** - * Get the feed title - * - * @return string|null - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = null; - $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:title)'); - - if (!$title) { - $title = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:title)'); - } - - if (!$title) { - $title = null; - } - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * - * - * @return DateTime|null - */ - public function getDate() - { - if (array_key_exists('date', $this->data)) { - return $this->data['date']; - } - - $d = null; - $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc11:date)'); - - if (!$date) { - $date = $this->getXpath()->evaluate('string(' . $this->getXpathPrefix() . '/dc10:date)'); - } - - if ($date) { - $d = new DateTime($date); - } - - $this->data['date'] = $d; - - return $this->data['date']; - } - - /** - * Get categories (subjects under DC) - * - * @return Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc11:subject'); - - if (!$list->length) { - $list = $this->getXpath()->evaluate($this->getXpathPrefix() . '//dc10:subject'); - } - - if ($list->length) { - $categoryCollection = new Collection\Category; - foreach ($list as $category) { - $categoryCollection[] = array( - 'term' => $category->nodeValue, - 'scheme' => null, - 'label' => $category->nodeValue, - ); - } - } else { - $categoryCollection = new Collection\Category; - } - - $this->data['categories'] = $categoryCollection; - return $this->data['categories']; - } - - /** - * Register the default namespaces for the current feed format - * - * @return void - */ - protected function registerNamespaces() - { - $this->getXpath()->registerNamespace('dc10', 'http://purl.org/dc/elements/1.0/'); - $this->getXpath()->registerNamespace('dc11', 'http://purl.org/dc/elements/1.1/'); - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/Podcast/Entry.php b/3rdparty/ZendFeed/Reader/Extension/Podcast/Entry.php deleted file mode 100644 index c97e64ff4..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/Podcast/Entry.php +++ /dev/null @@ -1,180 +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\Extension\Podcast; - -use Zend\Feed\Reader\Extension; - -/** -*/ -class Entry extends Extension\AbstractEntry -{ - /** - * Get the entry author - * - * @return string - */ - public function getCastAuthor() - { - if (isset($this->data['author'])) { - return $this->data['author']; - } - - $author = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:author)'); - - if (!$author) { - $author = null; - } - - $this->data['author'] = $author; - - return $this->data['author']; - } - - /** - * Get the entry block - * - * @return string - */ - public function getBlock() - { - if (isset($this->data['block'])) { - return $this->data['block']; - } - - $block = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:block)'); - - if (!$block) { - $block = null; - } - - $this->data['block'] = $block; - - return $this->data['block']; - } - - /** - * Get the entry duration - * - * @return string - */ - public function getDuration() - { - if (isset($this->data['duration'])) { - return $this->data['duration']; - } - - $duration = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:duration)'); - - if (!$duration) { - $duration = null; - } - - $this->data['duration'] = $duration; - - return $this->data['duration']; - } - - /** - * Get the entry explicit - * - * @return string - */ - public function getExplicit() - { - if (isset($this->data['explicit'])) { - return $this->data['explicit']; - } - - $explicit = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:explicit)'); - - if (!$explicit) { - $explicit = null; - } - - $this->data['explicit'] = $explicit; - - return $this->data['explicit']; - } - - /** - * Get the entry keywords - * - * @return string - */ - public function getKeywords() - { - if (isset($this->data['keywords'])) { - return $this->data['keywords']; - } - - $keywords = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:keywords)'); - - if (!$keywords) { - $keywords = null; - } - - $this->data['keywords'] = $keywords; - - return $this->data['keywords']; - } - - /** - * Get the entry subtitle - * - * @return string - */ - public function getSubtitle() - { - if (isset($this->data['subtitle'])) { - return $this->data['subtitle']; - } - - $subtitle = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:subtitle)'); - - if (!$subtitle) { - $subtitle = null; - } - - $this->data['subtitle'] = $subtitle; - - return $this->data['subtitle']; - } - - /** - * Get the entry summary - * - * @return string - */ - public function getSummary() - { - if (isset($this->data['summary'])) { - return $this->data['summary']; - } - - $summary = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:summary)'); - - if (!$summary) { - $summary = null; - } - - $this->data['summary'] = $summary; - - return $this->data['summary']; - } - - /** - * Register iTunes namespace - * - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/Podcast/Feed.php b/3rdparty/ZendFeed/Reader/Extension/Podcast/Feed.php deleted file mode 100644 index 66b13a48b..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/Podcast/Feed.php +++ /dev/null @@ -1,277 +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\Extension\Podcast; - -use DOMText; -use Zend\Feed\Reader\Extension; - -/** -*/ -class Feed extends Extension\AbstractFeed -{ - /** - * Get the entry author - * - * @return string - */ - public function getCastAuthor() - { - if (isset($this->data['author'])) { - return $this->data['author']; - } - - $author = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:author)'); - - if (!$author) { - $author = null; - } - - $this->data['author'] = $author; - - return $this->data['author']; - } - - /** - * Get the entry block - * - * @return string - */ - public function getBlock() - { - if (isset($this->data['block'])) { - return $this->data['block']; - } - - $block = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:block)'); - - if (!$block) { - $block = null; - } - - $this->data['block'] = $block; - - return $this->data['block']; - } - - /** - * Get the entry category - * - * @return string - */ - public function getItunesCategories() - { - if (isset($this->data['categories'])) { - return $this->data['categories']; - } - - $categoryList = $this->xpath->query($this->getXpathPrefix() . '/itunes:category'); - - $categories = array(); - - if ($categoryList->length > 0) { - foreach ($categoryList as $node) { - $children = null; - - if ($node->childNodes->length > 0) { - $children = array(); - - foreach ($node->childNodes as $childNode) { - if (!($childNode instanceof DOMText)) { - $children[$childNode->getAttribute('text')] = null; - } - } - } - - $categories[$node->getAttribute('text')] = $children; - } - } - - - if (!$categories) { - $categories = null; - } - - $this->data['categories'] = $categories; - - return $this->data['categories']; - } - - /** - * Get the entry explicit - * - * @return string - */ - public function getExplicit() - { - if (isset($this->data['explicit'])) { - return $this->data['explicit']; - } - - $explicit = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:explicit)'); - - if (!$explicit) { - $explicit = null; - } - - $this->data['explicit'] = $explicit; - - return $this->data['explicit']; - } - - /** - * Get the entry image - * - * @return string - */ - public function getItunesImage() - { - if (isset($this->data['image'])) { - return $this->data['image']; - } - - $image = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:image/@href)'); - - if (!$image) { - $image = null; - } - - $this->data['image'] = $image; - - return $this->data['image']; - } - - /** - * Get the entry keywords - * - * @return string - */ - public function getKeywords() - { - if (isset($this->data['keywords'])) { - return $this->data['keywords']; - } - - $keywords = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:keywords)'); - - if (!$keywords) { - $keywords = null; - } - - $this->data['keywords'] = $keywords; - - return $this->data['keywords']; - } - - /** - * Get the entry's new feed url - * - * @return string - */ - public function getNewFeedUrl() - { - if (isset($this->data['new-feed-url'])) { - return $this->data['new-feed-url']; - } - - $newFeedUrl = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:new-feed-url)'); - - if (!$newFeedUrl) { - $newFeedUrl = null; - } - - $this->data['new-feed-url'] = $newFeedUrl; - - return $this->data['new-feed-url']; - } - - /** - * Get the entry owner - * - * @return string - */ - public function getOwner() - { - if (isset($this->data['owner'])) { - return $this->data['owner']; - } - - $owner = null; - - $email = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:owner/itunes:email)'); - $name = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:owner/itunes:name)'); - - if (!empty($email)) { - $owner = $email . (empty($name) ? '' : ' (' . $name . ')'); - } elseif (!empty($name)) { - $owner = $name; - } - - if (!$owner) { - $owner = null; - } - - $this->data['owner'] = $owner; - - return $this->data['owner']; - } - - /** - * Get the entry subtitle - * - * @return string - */ - public function getSubtitle() - { - if (isset($this->data['subtitle'])) { - return $this->data['subtitle']; - } - - $subtitle = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:subtitle)'); - - if (!$subtitle) { - $subtitle = null; - } - - $this->data['subtitle'] = $subtitle; - - return $this->data['subtitle']; - } - - /** - * Get the entry summary - * - * @return string - */ - public function getSummary() - { - if (isset($this->data['summary'])) { - return $this->data['summary']; - } - - $summary = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/itunes:summary)'); - - if (!$summary) { - $summary = null; - } - - $this->data['summary'] = $summary; - - return $this->data['summary']; - } - - /** - * Register iTunes namespace - * - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('itunes', 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/Slash/Entry.php b/3rdparty/ZendFeed/Reader/Extension/Slash/Entry.php deleted file mode 100644 index 2c47568f9..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/Slash/Entry.php +++ /dev/null @@ -1,121 +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\Extension\Slash; - -use Zend\Feed\Reader\Extension; - -/** -*/ -class Entry extends Extension\AbstractEntry -{ - /** - * Get the entry section - * - * @return string|null - */ - public function getSection() - { - return $this->getData('section'); - } - - /** - * Get the entry department - * - * @return string|null - */ - public function getDepartment() - { - return $this->getData('department'); - } - - /** - * Get the entry hit_parade - * - * @return array - */ - public function getHitParade() - { - $name = 'hit_parade'; - - if (isset($this->data[$name])) { - return $this->data[$name]; - } - - $stringParade = $this->getData($name); - $hitParade = array(); - - if (!empty($stringParade)) { - $stringParade = explode(',', $stringParade); - - foreach ($stringParade as $hit) - $hitParade[] = $hit + 0; //cast to integer - } - - $this->data[$name] = $hitParade; - return $hitParade; - } - - /** - * Get the entry comments - * - * @return int - */ - public function getCommentCount() - { - $name = 'comments'; - - if (isset($this->data[$name])) { - return $this->data[$name]; - } - - $comments = $this->getData($name, 'string'); - - if (!$comments) { - $this->data[$name] = null; - return $this->data[$name]; - } - - return $comments; - } - - /** - * Get the entry data specified by name - * @param string $name - * @param string $type - * - * @return mixed|null - */ - protected function getData($name, $type = 'string') - { - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $data = $this->xpath->evaluate($type . '(' . $this->getXpathPrefix() . '/slash10:' . $name . ')'); - - if (!$data) { - $data = null; - } - - $this->data[$name] = $data; - - return $data; - } - - /** - * Register Slash namespaces - * - * @return void - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('slash10', 'http://purl.org/rss/1.0/modules/slash/'); - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/Syndication/Feed.php b/3rdparty/ZendFeed/Reader/Extension/Syndication/Feed.php deleted file mode 100644 index db1724c14..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/Syndication/Feed.php +++ /dev/null @@ -1,151 +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\Extension\Syndication; - -use DateTime; -use Zend\Feed\Reader; -use Zend\Feed\Reader\Extension; - -class Feed extends Extension\AbstractFeed -{ - /** - * Get update period - * - * @return string - * @throws Reader\Exception\InvalidArgumentException - */ - public function getUpdatePeriod() - { - $name = 'updatePeriod'; - $period = $this->getData($name); - - if ($period === null) { - $this->data[$name] = 'daily'; - return 'daily'; //Default specified by spec - } - - switch ($period) { - case 'hourly': - case 'daily': - case 'weekly': - case 'yearly': - return $period; - default: - throw new Reader\Exception\InvalidArgumentException("Feed specified invalid update period: '$period'." - . " Must be one of hourly, daily, weekly or yearly" - ); - } - } - - /** - * Get update frequency - * - * @return int - */ - public function getUpdateFrequency() - { - $name = 'updateFrequency'; - $freq = $this->getData($name, 'number'); - - if (!$freq || $freq < 1) { - $this->data[$name] = 1; - return 1; - } - - return $freq; - } - - /** - * Get update frequency as ticks - * - * @return int - */ - public function getUpdateFrequencyAsTicks() - { - $name = 'updateFrequency'; - $freq = $this->getData($name, 'number'); - - if (!$freq || $freq < 1) { - $this->data[$name] = 1; - $freq = 1; - } - - $period = $this->getUpdatePeriod(); - $ticks = 1; - - switch ($period) { - case 'yearly': - $ticks *= 52; //TODO: fix generalisation, how? - // no break - case 'weekly': - $ticks *= 7; - // no break - case 'daily': - $ticks *= 24; - // no break - case 'hourly': - $ticks *= 3600; - break; - default: //Never arrive here, exception thrown in getPeriod() - break; - } - - return $ticks / $freq; - } - - /** - * Get update base - * - * @return DateTime|null - */ - public function getUpdateBase() - { - $updateBase = $this->getData('updateBase'); - $date = null; - if ($updateBase) { - $date = DateTime::createFromFormat(DateTime::W3C, $updateBase); - } - return $date; - } - - /** - * Get the entry data specified by name - * - * @param string $name - * @param string $type - * @return mixed|null - */ - private function getData($name, $type = 'string') - { - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $data = $this->xpath->evaluate($type . '(' . $this->getXpathPrefix() . '/syn10:' . $name . ')'); - - if (!$data) { - $data = null; - } - - $this->data[$name] = $data; - - return $data; - } - - /** - * Register Syndication namespaces - * - * @return void - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('syn10', 'http://purl.org/rss/1.0/modules/syndication/'); - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/Thread/Entry.php b/3rdparty/ZendFeed/Reader/Extension/Thread/Entry.php deleted file mode 100644 index d3bc31587..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/Thread/Entry.php +++ /dev/null @@ -1,72 +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\Extension\Thread; - -use Zend\Feed\Reader\Extension; - -/** -*/ -class Entry extends Extension\AbstractEntry -{ - /** - * Get the "in-reply-to" value - * - * @return string - */ - public function getInReplyTo() - { - // TODO: to be implemented - } - - // TODO: Implement "replies" and "updated" constructs from standard - - /** - * Get the total number of threaded responses (i.e comments) - * - * @return int|null - */ - public function getCommentCount() - { - return $this->getData('total'); - } - - /** - * Get the entry data specified by name - * - * @param string $name - * @return mixed|null - */ - protected function getData($name) - { - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $data = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/thread10:' . $name . ')'); - - if (!$data) { - $data = null; - } - - $this->data[$name] = $data; - - return $data; - } - - /** - * Register Atom Thread Extension 1.0 namespace - * - * @return void - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('thread10', 'http://purl.org/syndication/thread/1.0'); - } -} diff --git a/3rdparty/ZendFeed/Reader/Extension/WellFormedWeb/Entry.php b/3rdparty/ZendFeed/Reader/Extension/WellFormedWeb/Entry.php deleted file mode 100644 index 6d5a97705..000000000 --- a/3rdparty/ZendFeed/Reader/Extension/WellFormedWeb/Entry.php +++ /dev/null @@ -1,50 +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\Extension\WellFormedWeb; - -use Zend\Feed\Reader\Extension; - -/** -*/ -class Entry extends Extension\AbstractEntry -{ - /** - * Get the entry comment Uri - * - * @return string|null - */ - public function getCommentFeedLink() - { - $name = 'commentRss'; - if (array_key_exists($name, $this->data)) { - return $this->data[$name]; - } - - $data = $this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/wfw:' . $name . ')'); - - if (!$data) { - $data = null; - } - - $this->data[$name] = $data; - - return $data; - } - - /** - * Register Slash namespaces - * - * @return void - */ - protected function registerNamespaces() - { - $this->xpath->registerNamespace('wfw', 'http://wellformedweb.org/CommentAPI/'); - } -} diff --git a/3rdparty/ZendFeed/Reader/ExtensionManager.php b/3rdparty/ZendFeed/Reader/ExtensionManager.php deleted file mode 100644 index 9103643a3..000000000 --- a/3rdparty/ZendFeed/Reader/ExtensionManager.php +++ /dev/null @@ -1,80 +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; - -/** - * Default implementation of ExtensionManagerInterface - * - * Decorator of ExtensionPluginManager. - */ -class ExtensionManager implements ExtensionManagerInterface -{ - protected $pluginManager; - - /** - * Constructor - * - * Seeds the extension manager with a plugin manager; if none provided, - * creates an instance. - * - * @param null|ExtensionPluginManager $pluginManager - */ - public function __construct(ExtensionPluginManager $pluginManager = null) - { - if (null === $pluginManager) { - $pluginManager = new ExtensionPluginManager(); - } - $this->pluginManager = $pluginManager; - } - - /** - * Method overloading - * - * Proxy to composed ExtensionPluginManager instance. - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\BadMethodCallException - */ - public function __call($method, $args) - { - if (!method_exists($this->pluginManager, $method)) { - throw new Exception\BadMethodCallException(sprintf( - 'Method by name of %s does not exist in %s', - $method, - __CLASS__ - )); - } - return call_user_func_array(array($this->pluginManager, $method), $args); - } - - /** - * Get the named extension - * - * @param string $name - * @return Extension\AbstractEntry|Extension\AbstractFeed - */ - public function get($name) - { - return $this->pluginManager->get($name); - } - - /** - * Do we have the named extension? - * - * @param string $name - * @return bool - */ - public function has($name) - { - return $this->pluginManager->has($name); - } -} diff --git a/3rdparty/ZendFeed/Reader/ExtensionManagerInterface.php b/3rdparty/ZendFeed/Reader/ExtensionManagerInterface.php deleted file mode 100644 index 4bbb91d9e..000000000 --- a/3rdparty/ZendFeed/Reader/ExtensionManagerInterface.php +++ /dev/null @@ -1,29 +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; - -interface ExtensionManagerInterface -{ - /** - * Do we have the extension? - * - * @param string $extension - * @return bool - */ - public function has($extension); - - /** - * Retrieve the extension - * - * @param string $extension - * @return mixed - */ - public function get($extension); -} diff --git a/3rdparty/ZendFeed/Reader/ExtensionPluginManager.php b/3rdparty/ZendFeed/Reader/ExtensionPluginManager.php deleted file mode 100644 index 45d3b26b5..000000000 --- a/3rdparty/ZendFeed/Reader/ExtensionPluginManager.php +++ /dev/null @@ -1,77 +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; - -use Zend\ServiceManager\AbstractPluginManager; - -/** - * Plugin manager implementation for feed reader extensions based on the - * AbstractPluginManager. - * - * Validation checks that we have an Extension\AbstractEntry or - * Extension\AbstractFeed. - */ -class ExtensionPluginManager extends AbstractPluginManager -{ - /** - * Default set of extension classes - * - * @var array - */ - protected $invokableClasses = array( - 'atomentry' => 'Zend\Feed\Reader\Extension\Atom\Entry', - 'atomfeed' => 'Zend\Feed\Reader\Extension\Atom\Feed', - 'contententry' => 'Zend\Feed\Reader\Extension\Content\Entry', - 'creativecommonsentry' => 'Zend\Feed\Reader\Extension\CreativeCommons\Entry', - 'creativecommonsfeed' => 'Zend\Feed\Reader\Extension\CreativeCommons\Feed', - 'dublincoreentry' => 'Zend\Feed\Reader\Extension\DublinCore\Entry', - 'dublincorefeed' => 'Zend\Feed\Reader\Extension\DublinCore\Feed', - 'podcastentry' => 'Zend\Feed\Reader\Extension\Podcast\Entry', - 'podcastfeed' => 'Zend\Feed\Reader\Extension\Podcast\Feed', - 'slashentry' => 'Zend\Feed\Reader\Extension\Slash\Entry', - 'syndicationfeed' => 'Zend\Feed\Reader\Extension\Syndication\Feed', - 'threadentry' => 'Zend\Feed\Reader\Extension\Thread\Entry', - 'wellformedwebentry' => 'Zend\Feed\Reader\Extension\WellFormedWeb\Entry', - ); - - /** - * Do not share instances - * - * @var bool - */ - protected $shareByDefault = false; - - /** - * Validate the plugin - * - * Checks that the extension loaded is of a valid type. - * - * @param mixed $plugin - * @return void - * @throws Exception\InvalidArgumentException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Extension\AbstractEntry - || $plugin instanceof Extension\AbstractFeed - ) { - // we're okay - return; - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Plugin of type %s is invalid; must implement %s\Extension\AbstractFeed ' - . 'or %s\Extension\AbstractEntry', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__, - __NAMESPACE__ - )); - } -} diff --git a/3rdparty/ZendFeed/Reader/Feed/AbstractFeed.php b/3rdparty/ZendFeed/Reader/Feed/AbstractFeed.php deleted file mode 100644 index 0d5f2b835..000000000 --- a/3rdparty/ZendFeed/Reader/Feed/AbstractFeed.php +++ /dev/null @@ -1,307 +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\Feed; - -use DOMDocument; -use DOMElement; -use DOMXPath; -use Zend\Feed\Reader; -use Zend\Feed\Reader\Exception; - -/** -*/ -abstract class AbstractFeed implements FeedInterface -{ - /** - * Parsed feed data - * - * @var array - */ - protected $data = array(); - - /** - * Parsed feed data in the shape of a DOMDocument - * - * @var DOMDocument - */ - protected $domDocument = null; - - /** - * An array of parsed feed entries - * - * @var array - */ - protected $entries = array(); - - /** - * A pointer for the iterator to keep track of the entries array - * - * @var int - */ - protected $entriesKey = 0; - - /** - * The base XPath query used to retrieve feed data - * - * @var DOMXPath - */ - protected $xpath = null; - - /** - * Array of loaded extensions - * - * @var array - */ - protected $extensions = array(); - - /** - * Original Source URI (set if imported from a URI) - * - * @var string - */ - protected $originalSourceUri = null; - - /** - * Constructor - * - * @param DOMDocument $domDocument The DOM object for the feed's XML - * @param string $type Feed type - */ - public function __construct(DOMDocument $domDocument, $type = null) - { - $this->domDocument = $domDocument; - $this->xpath = new DOMXPath($this->domDocument); - - if ($type !== null) { - $this->data['type'] = $type; - } else { - $this->data['type'] = Reader\Reader::detectType($this->domDocument); - } - $this->registerNamespaces(); - $this->indexEntries(); - $this->loadExtensions(); - } - - /** - * Set an original source URI for the feed being parsed. This value - * is returned from getFeedLink() method if the feed does not carry - * a self-referencing URI. - * - * @param string $uri - */ - public function setOriginalSourceUri($uri) - { - $this->originalSourceUri = $uri; - } - - /** - * Get an original source URI for the feed being parsed. Returns null if - * unset or the feed was not imported from a URI. - * - * @return string|null - */ - public function getOriginalSourceUri() - { - return $this->originalSourceUri; - } - - /** - * Get the number of feed entries. - * Required by the Iterator interface. - * - * @return int - */ - public function count() - { - return count($this->entries); - } - - /** - * Return the current entry - * - * @return \Zend\Feed\Reader\Entry\EntryInterface - */ - public function current() - { - if (substr($this->getType(), 0, 3) == 'rss') { - $reader = new Reader\Entry\Rss($this->entries[$this->key()], $this->key(), $this->getType()); - } else { - $reader = new Reader\Entry\Atom($this->entries[$this->key()], $this->key(), $this->getType()); - } - - $reader->setXpath($this->xpath); - - return $reader; - } - - /** - * Get the DOM - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->domDocument; - } - - /** - * Get the Feed's encoding - * - * @return string - */ - public function getEncoding() - { - $assumed = $this->getDomDocument()->encoding; - if (empty($assumed)) { - $assumed = 'UTF-8'; - } - return $assumed; - } - - /** - * Get feed as xml - * - * @return string - */ - public function saveXml() - { - return $this->getDomDocument()->saveXml(); - } - - /** - * Get the DOMElement representing the items/feed element - * - * @return DOMElement - */ - public function getElement() - { - return $this->getDomDocument()->documentElement; - } - - /** - * Get the DOMXPath object for this feed - * - * @return DOMXPath - */ - public function getXpath() - { - return $this->xpath; - } - - /** - * Get the feed type - * - * @return string - */ - public function getType() - { - return $this->data['type']; - } - - /** - * Return the current feed key - * - * @return int - */ - public function key() - { - return $this->entriesKey; - } - - /** - * Move the feed pointer forward - * - */ - public function next() - { - ++$this->entriesKey; - } - - /** - * Reset the pointer in the feed object - * - */ - public function rewind() - { - $this->entriesKey = 0; - } - - /** - * Check to see if the iterator is still valid - * - * @return bool - */ - public function valid() - { - return 0 <= $this->entriesKey && $this->entriesKey < $this->count(); - } - - public function getExtensions() - { - return $this->extensions; - } - - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - if (method_exists($extension, $method)) { - return call_user_func_array(array($extension, $method), $args); - } - } - throw new Exception\BadMethodCallException('Method: ' . $method - . 'does not exist and could not be located on a registered Extension'); - } - - /** - * Return an Extension object with the matching name (postfixed with _Feed) - * - * @param string $name - * @return \Zend\Feed\Reader\Extension\AbstractFeed - */ - public function getExtension($name) - { - if (array_key_exists($name . '\\Feed', $this->extensions)) { - return $this->extensions[$name . '\\Feed']; - } - return null; - } - - protected function loadExtensions() - { - $all = Reader\Reader::getExtensions(); - $manager = Reader\Reader::getExtensionManager(); - $feed = $all['feed']; - foreach ($feed as $extension) { - if (in_array($extension, $all['core'])) { - continue; - } - if (!$manager->has($extension)) { - throw new Exception\RuntimeException(sprintf('Unable to load extension "%s"; cannot find class', $extension)); - } - $plugin = $manager->get($extension); - $plugin->setDomDocument($this->getDomDocument()); - $plugin->setType($this->data['type']); - $plugin->setXpath($this->xpath); - $this->extensions[$extension] = $plugin; - } - } - - /** - * Read all entries to the internal entries array - * - */ - abstract protected function indexEntries(); - - /** - * Register the default namespaces for the current feed format - * - */ - abstract protected function registerNamespaces(); -} diff --git a/3rdparty/ZendFeed/Reader/Feed/Atom.php b/3rdparty/ZendFeed/Reader/Feed/Atom.php deleted file mode 100644 index 251ad03ce..000000000 --- a/3rdparty/ZendFeed/Reader/Feed/Atom.php +++ /dev/null @@ -1,409 +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\Feed; - -use DOMDocument; -use Zend\Feed\Reader; - -/** -*/ -class Atom extends AbstractFeed -{ - - /** - * Constructor - * - * @param DOMDocument $dom - * @param string $type - */ - public function __construct(DOMDocument $dom, $type = null) - { - parent::__construct($dom, $type); - $manager = Reader\Reader::getExtensionManager(); - - $atomFeed = $manager->get('Atom\Feed'); - $atomFeed->setDomDocument($dom); - $atomFeed->setType($this->data['type']); - $atomFeed->setXpath($this->xpath); - $this->extensions['Atom\\Feed'] = $atomFeed; - - $atomFeed = $manager->get('DublinCore\Feed'); - $atomFeed->setDomDocument($dom); - $atomFeed->setType($this->data['type']); - $atomFeed->setXpath($this->xpath); - $this->extensions['DublinCore\\Feed'] = $atomFeed; - - foreach ($this->extensions as $extension) { - $extension->setXpathPrefix('/atom:feed'); - } - } - - /** - * Get a single author - * - * @param int $index - * @return string|null - */ - 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 = $this->getExtension('Atom')->getAuthors(); - - $this->data['authors'] = $authors; - - return $this->data['authors']; - } - - /** - * Get the copyright entry - * - * @return string|null - */ - public function getCopyright() - { - if (array_key_exists('copyright', $this->data)) { - return $this->data['copyright']; - } - - $copyright = $this->getExtension('Atom')->getCopyright(); - - if (!$copyright) { - $copyright = null; - } - - $this->data['copyright'] = $copyright; - - return $this->data['copyright']; - } - - /** - * Get the feed creation date - * - * @return string|null - */ - public function getDateCreated() - { - if (array_key_exists('datecreated', $this->data)) { - return $this->data['datecreated']; - } - - $dateCreated = $this->getExtension('Atom')->getDateCreated(); - - if (!$dateCreated) { - $dateCreated = null; - } - - $this->data['datecreated'] = $dateCreated; - - return $this->data['datecreated']; - } - - /** - * Get the feed modification date - * - * @return string|null - */ - public function getDateModified() - { - if (array_key_exists('datemodified', $this->data)) { - return $this->data['datemodified']; - } - - $dateModified = $this->getExtension('Atom')->getDateModified(); - - if (!$dateModified) { - $dateModified = null; - } - - $this->data['datemodified'] = $dateModified; - - return $this->data['datemodified']; - } - - /** - * Get the feed lastBuild date. This is not implemented in Atom. - * - * @return string|null - */ - public function getLastBuildDate() - { - return null; - } - - /** - * Get the feed description - * - * @return string|null - */ - public function getDescription() - { - if (array_key_exists('description', $this->data)) { - return $this->data['description']; - } - - $description = $this->getExtension('Atom')->getDescription(); - - if (!$description) { - $description = null; - } - - $this->data['description'] = $description; - - return $this->data['description']; - } - - /** - * Get the feed generator entry - * - * @return string|null - */ - public function getGenerator() - { - if (array_key_exists('generator', $this->data)) { - return $this->data['generator']; - } - - $generator = $this->getExtension('Atom')->getGenerator(); - - $this->data['generator'] = $generator; - - return $this->data['generator']; - } - - /** - * Get the feed ID - * - * @return string|null - */ - public function getId() - { - if (array_key_exists('id', $this->data)) { - return $this->data['id']; - } - - $id = $this->getExtension('Atom')->getId(); - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage() - { - if (array_key_exists('language', $this->data)) { - return $this->data['language']; - } - - $language = $this->getExtension('Atom')->getLanguage(); - - if (!$language) { - $language = $this->xpath->evaluate('string(//@xml:lang[1])'); - } - - if (!$language) { - $language = null; - } - - $this->data['language'] = $language; - - return $this->data['language']; - } - - /** - * Get a link to the source website - * - * @return string|null - */ - public function getBaseUrl() - { - if (array_key_exists('baseUrl', $this->data)) { - return $this->data['baseUrl']; - } - - $baseUrl = $this->getExtension('Atom')->getBaseUrl(); - - $this->data['baseUrl'] = $baseUrl; - - return $this->data['baseUrl']; - } - - /** - * Get a link to the source website - * - * @return string|null - */ - public function getLink() - { - if (array_key_exists('link', $this->data)) { - return $this->data['link']; - } - - $link = $this->getExtension('Atom')->getLink(); - - $this->data['link'] = $link; - - return $this->data['link']; - } - - /** - * Get feed image data - * - * @return array|null - */ - public function getImage() - { - if (array_key_exists('image', $this->data)) { - return $this->data['image']; - } - - $link = $this->getExtension('Atom')->getImage(); - - $this->data['image'] = $link; - - return $this->data['image']; - } - - /** - * Get a link to the feed's XML Url - * - * @return string|null - */ - public function getFeedLink() - { - if (array_key_exists('feedlink', $this->data)) { - return $this->data['feedlink']; - } - - $link = $this->getExtension('Atom')->getFeedLink(); - - if ($link === null || empty($link)) { - $link = $this->getOriginalSourceUri(); - } - - $this->data['feedlink'] = $link; - - return $this->data['feedlink']; - } - - /** - * Get the feed title - * - * @return string|null - */ - public function getTitle() - { - if (array_key_exists('title', $this->data)) { - return $this->data['title']; - } - - $title = $this->getExtension('Atom')->getTitle(); - - $this->data['title'] = $title; - - return $this->data['title']; - } - - /** - * Get an array of any supported Pusubhubbub endpoints - * - * @return array|null - */ - public function getHubs() - { - if (array_key_exists('hubs', $this->data)) { - return $this->data['hubs']; - } - - $hubs = $this->getExtension('Atom')->getHubs(); - - $this->data['hubs'] = $hubs; - - return $this->data['hubs']; - } - - /** - * Get all categories - * - * @return Reader\Collection\Category - */ - public function getCategories() - { - if (array_key_exists('categories', $this->data)) { - return $this->data['categories']; - } - - $categoryCollection = $this->getExtension('Atom')->getCategories(); - - if (count($categoryCollection) == 0) { - $categoryCollection = $this->getExtension('DublinCore')->getCategories(); - } - - $this->data['categories'] = $categoryCollection; - - return $this->data['categories']; - } - - /** - * Read all entries to the internal entries array - * - * @return void - */ - protected function indexEntries() - { - if ($this->getType() == Reader\Reader::TYPE_ATOM_10 || - $this->getType() == Reader\Reader::TYPE_ATOM_03) { - $entries = $this->xpath->evaluate('//atom:entry'); - - foreach ($entries as $index => $entry) { - $this->entries[$index] = $entry; - } - } - } - - /** - * Register the default namespaces for the current feed format - * - */ - protected function registerNamespaces() - { - switch ($this->data['type']) { - case Reader\Reader::TYPE_ATOM_03: - $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_03); - break; - case Reader\Reader::TYPE_ATOM_10: - default: - $this->xpath->registerNamespace('atom', Reader\Reader::NAMESPACE_ATOM_10); - } - } -} diff --git a/3rdparty/ZendFeed/Reader/Feed/Atom/Source.php b/3rdparty/ZendFeed/Reader/Feed/Atom/Source.php deleted file mode 100644 index fada12859..000000000 --- a/3rdparty/ZendFeed/Reader/Feed/Atom/Source.php +++ /dev/null @@ -1,94 +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\Feed\Atom; - -use DOMElement; -use DOMXPath; -use Zend\Feed\Reader; -use Zend\Feed\Reader\Feed; - -/** -*/ -class Source extends Feed\Atom -{ - - /** - * Constructor: Create a Source object which is largely just a normal - * Zend\Feed\Reader\AbstractFeed object only designed to retrieve feed level - * metadata from an Atom entry's source element. - * - * @param DOMElement $source - * @param string $xpathPrefix Passed from parent Entry object - * @param string $type Nearly always Atom 1.0 - */ - public function __construct(DOMElement $source, $xpathPrefix, $type = Reader\Reader::TYPE_ATOM_10) - { - $this->domDocument = $source->ownerDocument; - $this->xpath = new DOMXPath($this->domDocument); - $this->data['type'] = $type; - $this->registerNamespaces(); - $this->loadExtensions(); - - $manager = Reader\Reader::getExtensionManager(); - $extensions = array('Atom\Feed', 'DublinCore\Feed'); - - foreach ($extensions as $name) { - $extension = $manager->get($name); - $extension->setDomDocument($this->domDocument); - $extension->setType($this->data['type']); - $extension->setXpath($this->xpath); - $this->extensions[$name] = $extension; - } - - foreach ($this->extensions as $extension) { - $extension->setXpathPrefix(rtrim($xpathPrefix, '/') . '/atom:source'); - } - } - - /** - * Since this is not an Entry carrier but a vehicle for Feed metadata, any - * applicable Entry methods are stubbed out and do nothing. - */ - - /** - * @return void - */ - public function count() {} - - /** - * @return void - */ - public function current() {} - - /** - * @return void - */ - public function key() {} - - /** - * @return void - */ - public function next() {} - - /** - * @return void - */ - public function rewind() {} - - /** - * @return void - */ - public function valid() {} - - /** - * @return void - */ - protected function indexEntries() {} -} diff --git a/3rdparty/ZendFeed/Reader/Feed/FeedInterface.php b/3rdparty/ZendFeed/Reader/Feed/FeedInterface.php deleted file mode 100644 index 4ba3293d4..000000000 --- a/3rdparty/ZendFeed/Reader/Feed/FeedInterface.php +++ /dev/null @@ -1,111 +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\Feed; - -use Countable; -use Iterator; - -/** -*/ -interface FeedInterface extends Iterator, Countable -{ - /** - * Get a single author - * - * @param int $index - * @return string|null - */ - public function getAuthor($index = 0); - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors(); - - /** - * Get the copyright entry - * - * @return string|null - */ - public function getCopyright(); - - /** - * Get the feed creation date - * - * @return string|null - */ - public function getDateCreated(); - - /** - * Get the feed modification date - * - * @return string|null - */ - public function getDateModified(); - - /** - * Get the feed description - * - * @return string|null - */ - public function getDescription(); - - /** - * Get the feed generator entry - * - * @return string|null - */ - public function getGenerator(); - - /** - * Get the feed ID - * - * @return string|null - */ - public function getId(); - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage(); - - /** - * Get a link to the HTML source - * - * @return string|null - */ - public function getLink(); - - /** - * Get a link to the XML feed - * - * @return string|null - */ - public function getFeedLink(); - - /** - * Get the feed title - * - * @return string|null - */ - public function getTitle(); - - /** - * Get all categories - * - * @return \Zend\Feed\Reader\Collection\Category - */ - public function getCategories(); - -} diff --git a/3rdparty/ZendFeed/Reader/Feed/Rss.php b/3rdparty/ZendFeed/Reader/Feed/Rss.php deleted file mode 100644 index fc7baa131..000000000 --- a/3rdparty/ZendFeed/Reader/Feed/Rss.php +++ /dev/null @@ -1,707 +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\Feed; - -use DateTime; -use DOMDocument; -use Zend\Feed\Reader; -use Zend\Feed\Reader\Collection; -use Zend\Feed\Reader\Exception; - -/** -*/ -class Rss extends AbstractFeed -{ - - /** - * Constructor - * - * @param DOMDocument $dom - * @param string $type - */ - public function __construct(DOMDocument $dom, $type = null) - { - parent::__construct($dom, $type); - - $manager = Reader\Reader::getExtensionManager(); - - $feed = $manager->get('DublinCore\Feed'); - $feed->setDomDocument($dom); - $feed->setType($this->data['type']); - $feed->setXpath($this->xpath); - $this->extensions['DublinCore\Feed'] = $feed; - - $feed = $manager->get('Atom\Feed'); - $feed->setDomDocument($dom); - $feed->setType($this->data['type']); - $feed->setXpath($this->xpath); - $this->extensions['Atom\Feed'] = $feed; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090 - ) { - $xpathPrefix = '/rss/channel'; - } else { - $xpathPrefix = '/rdf:RDF/rss:channel'; - } - foreach ($this->extensions as $extension) { - $extension->setXpathPrefix($xpathPrefix); - } - } - - /** - * Get a single author - * - * @param int $index - * @return string|null - */ - 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'] - ); - } - } - - /** - * Technically RSS doesn't specific author element use at the feed level - * but it's supported on a "just in case" basis. - */ - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 - && $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $list = $this->xpath->query('//author'); - } else { - $list = $this->xpath->query('//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 copyright entry - * - * @return string|null - */ - public function getCopyright() - { - if (array_key_exists('copyright', $this->data)) { - return $this->data['copyright']; - } - - $copyright = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $copyright = $this->xpath->evaluate('string(/rss/channel/copyright)'); - } - - if (!$copyright && $this->getExtension('DublinCore') !== null) { - $copyright = $this->getExtension('DublinCore')->getCopyright(); - } - - if (empty($copyright)) { - $copyright = $this->getExtension('Atom')->getCopyright(); - } - - if (!$copyright) { - $copyright = null; - } - - $this->data['copyright'] = $copyright; - - return $this->data['copyright']; - } - - /** - * Get the feed creation date - * - * @return string|null - */ - public function getDateCreated() - { - return $this->getDateModified(); - } - - /** - * Get the feed modification date - * - * @return DateTime - * @throws Exception\RuntimeException - */ - 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(/rss/channel/pubDate)'); - if (!$dateModified) { - $dateModified = $this->xpath->evaluate('string(/rss/channel/lastBuildDate)'); - } - 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 = DateTime::createFromFormat($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 feed lastBuild date - * - * @throws Exception\RuntimeException - * @return DateTime - */ - public function getLastBuildDate() - { - if (array_key_exists('lastBuildDate', $this->data)) { - return $this->data['lastBuildDate']; - } - - $lastBuildDate = null; - $date = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $lastBuildDate = $this->xpath->evaluate('string(/rss/channel/lastBuildDate)'); - if ($lastBuildDate) { - $lastBuildDateParsed = strtotime($lastBuildDate); - if ($lastBuildDateParsed) { - $date = new DateTime('@' . $lastBuildDateParsed); - } else { - $dateStandards = array(DateTime::RSS, DateTime::RFC822, - DateTime::RFC2822, null); - foreach ($dateStandards as $standard) { - try { - $date = DateTime::createFromFormat($standard, $lastBuildDateParsed); - 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 = null; - } - - $this->data['lastBuildDate'] = $date; - - return $this->data['lastBuildDate']; - } - - /** - * Get the feed description - * - * @return string|null - */ - 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(/rss/channel/description)'); - } else { - $description = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:description)'); - } - - if (!$description && $this->getExtension('DublinCore') !== null) { - $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 feed ID - * - * @return string|null - */ - 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(/rss/channel/guid)'); - } - - if (!$id && $this->getExtension('DublinCore') !== null) { - $id = $this->getExtension('DublinCore')->getId(); - } - - if (empty($id)) { - $id = $this->getExtension('Atom')->getId(); - } - - if (!$id) { - if ($this->getLink()) { - $id = $this->getLink(); - } elseif ($this->getTitle()) { - $id = $this->getTitle(); - } else { - $id = null; - } - } - - $this->data['id'] = $id; - - return $this->data['id']; - } - - /** - * Get the feed image data - * - * @return array|null - */ - public function getImage() - { - if (array_key_exists('image', $this->data)) { - return $this->data['image']; - } - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $list = $this->xpath->query('/rss/channel/image'); - $prefix = '/rss/channel/image[1]'; - } else { - $list = $this->xpath->query('/rdf:RDF/rss:channel/rss:image'); - $prefix = '/rdf:RDF/rss:channel/rss:image[1]'; - } - if ($list->length > 0) { - $image = array(); - $value = $this->xpath->evaluate('string(' . $prefix . '/url)'); - if ($value) { - $image['uri'] = $value; - } - $value = $this->xpath->evaluate('string(' . $prefix . '/link)'); - if ($value) { - $image['link'] = $value; - } - $value = $this->xpath->evaluate('string(' . $prefix . '/title)'); - if ($value) { - $image['title'] = $value; - } - $value = $this->xpath->evaluate('string(' . $prefix . '/height)'); - if ($value) { - $image['height'] = $value; - } - $value = $this->xpath->evaluate('string(' . $prefix . '/width)'); - if ($value) { - $image['width'] = $value; - } - $value = $this->xpath->evaluate('string(' . $prefix . '/description)'); - if ($value) { - $image['description'] = $value; - } - } else { - $image = null; - } - - $this->data['image'] = $image; - - return $this->data['image']; - } - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage() - { - if (array_key_exists('language', $this->data)) { - return $this->data['language']; - } - - $language = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $language = $this->xpath->evaluate('string(/rss/channel/language)'); - } - - if (!$language && $this->getExtension('DublinCore') !== null) { - $language = $this->getExtension('DublinCore')->getLanguage(); - } - - if (empty($language)) { - $language = $this->getExtension('Atom')->getLanguage(); - } - - if (!$language) { - $language = $this->xpath->evaluate('string(//@xml:lang[1])'); - } - - if (!$language) { - $language = null; - } - - $this->data['language'] = $language; - - return $this->data['language']; - } - - /** - * Get a link to the feed - * - * @return string|null - */ - public function getLink() - { - if (array_key_exists('link', $this->data)) { - return $this->data['link']; - } - - $link = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $link = $this->xpath->evaluate('string(/rss/channel/link)'); - } else { - $link = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:link)'); - } - - if (empty($link)) { - $link = $this->getExtension('Atom')->getLink(); - } - - if (!$link) { - $link = null; - } - - $this->data['link'] = $link; - - return $this->data['link']; - } - - /** - * Get a link to the feed XML - * - * @return string|null - */ - public function getFeedLink() - { - if (array_key_exists('feedlink', $this->data)) { - return $this->data['feedlink']; - } - - $link = null; - - $link = $this->getExtension('Atom')->getFeedLink(); - - if ($link === null || empty($link)) { - $link = $this->getOriginalSourceUri(); - } - - $this->data['feedlink'] = $link; - - return $this->data['feedlink']; - } - - /** - * Get the feed generator entry - * - * @return string|null - */ - public function getGenerator() - { - if (array_key_exists('generator', $this->data)) { - return $this->data['generator']; - } - - $generator = null; - - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $generator = $this->xpath->evaluate('string(/rss/channel/generator)'); - } - - if (!$generator) { - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && - $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $generator = $this->xpath->evaluate('string(/rss/channel/atom:generator)'); - } else { - $generator = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/atom:generator)'); - } - } - - if (empty($generator)) { - $generator = $this->getExtension('Atom')->getGenerator(); - } - - if (!$generator) { - $generator = null; - } - - $this->data['generator'] = $generator; - - return $this->data['generator']; - } - - /** - * Get the feed title - * - * @return string|null - */ - 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(/rss/channel/title)'); - } else { - $title = $this->xpath->evaluate('string(/rdf:RDF/rss:channel/rss:title)'); - } - - if (!$title && $this->getExtension('DublinCore') !== null) { - $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 an array of any supported Pusubhubbub endpoints - * - * @return array|null - */ - public function getHubs() - { - if (array_key_exists('hubs', $this->data)) { - return $this->data['hubs']; - } - - $hubs = $this->getExtension('Atom')->getHubs(); - - if (empty($hubs)) { - $hubs = null; - } else { - $hubs = array_unique($hubs); - } - - $this->data['hubs'] = $hubs; - - return $this->data['hubs']; - } - - /** - * 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('/rss/channel//category'); - } else { - $list = $this->xpath->query('/rdf:RDF/rss:channel//rss:category'); - } - - if ($list->length) { - $categoryCollection = new 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']; - } - - /** - * Read all entries to the internal entries array - * - */ - protected function indexEntries() - { - if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && $this->getType() !== Reader\Reader::TYPE_RSS_090) { - $entries = $this->xpath->evaluate('//item'); - } else { - $entries = $this->xpath->evaluate('//rss:item'); - } - - foreach ($entries as $index => $entry) { - $this->entries[$index] = $entry; - } - } - - /** - * Register the default namespaces for the current feed format - * - */ - protected function registerNamespaces() - { - switch ($this->data['type']) { - case Reader\Reader::TYPE_RSS_10: - $this->xpath->registerNamespace('rdf', Reader\Reader::NAMESPACE_RDF); - $this->xpath->registerNamespace('rss', Reader\Reader::NAMESPACE_RSS_10); - break; - - case Reader\Reader::TYPE_RSS_090: - $this->xpath->registerNamespace('rdf', Reader\Reader::NAMESPACE_RDF); - $this->xpath->registerNamespace('rss', Reader\Reader::NAMESPACE_RSS_090); - break; - } - } -} diff --git a/3rdparty/ZendFeed/Reader/FeedSet.php b/3rdparty/ZendFeed/Reader/FeedSet.php deleted file mode 100644 index a432ac3be..000000000 --- a/3rdparty/ZendFeed/Reader/FeedSet.php +++ /dev/null @@ -1,127 +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; - -use ArrayObject; -use DOMNodeList; -use Zend\Feed\Uri; - -/** -*/ -class FeedSet extends ArrayObject -{ - - public $rss = null; - - public $rdf = null; - - public $atom = null; - - /** - * Import a DOMNodeList from any document containing a set of links - * for alternate versions of a document, which will normally refer to - * RSS/RDF/Atom feeds for the current document. - * - * All such links are stored internally, however the first instance of - * each RSS, RDF or Atom type has its URI stored as a public property - * as a shortcut where the use case is simply to get a quick feed ref. - * - * Note that feeds are not loaded at this point, but will be lazy - * loaded automatically when each links 'feed' array key is accessed. - * - * @param DOMNodeList $links - * @param string $uri - * @return void - */ - public function addLinks(DOMNodeList $links, $uri) - { - foreach ($links as $link) { - if (strtolower($link->getAttribute('rel')) !== 'alternate' - || !$link->getAttribute('type') || !$link->getAttribute('href')) { - continue; - } - if (!isset($this->rss) && $link->getAttribute('type') == 'application/rss+xml') { - $this->rss = $this->absolutiseUri(trim($link->getAttribute('href')), $uri); - } elseif (!isset($this->atom) && $link->getAttribute('type') == 'application/atom+xml') { - $this->atom = $this->absolutiseUri(trim($link->getAttribute('href')), $uri); - } elseif (!isset($this->rdf) && $link->getAttribute('type') == 'application/rdf+xml') { - $this->rdf = $this->absolutiseUri(trim($link->getAttribute('href')), $uri); - } - $this[] = new static(array( - 'rel' => 'alternate', - 'type' => $link->getAttribute('type'), - 'href' => $this->absolutiseUri(trim($link->getAttribute('href')), $uri), - )); - } - } - - /** - * Attempt to turn a relative URI into an absolute URI - */ - protected function absolutiseUri($link, $uri = null) - { - $linkUri = Uri::factory($link); - if (!$linkUri->isAbsolute() or !$linkUri->isValid()) { - if ($uri !== null) { - $uri = Uri::factory($uri); - - if ($link[0] !== '/') { - $link = $uri->getPath() . '/' . $link; - } - - $link = $uri->getScheme() . '://' . $uri->getHost() . '/' . $this->canonicalizePath($link); - if (!Uri::factory($link)->isValid()) { - $link = null; - } - } - } - return $link; - } - - /** - * Canonicalize relative path - */ - protected function canonicalizePath($path) - { - $parts = array_filter(explode('/', $path)); - $absolutes = array(); - foreach ($parts as $part) { - if ('.' == $part) { - continue; - } - if ('..' == $part) { - array_pop($absolutes); - } else { - $absolutes[] = $part; - } - } - return implode('/', $absolutes); - } - - /** - * Supports lazy loading of feeds using Reader::import() but - * delegates any other operations to the parent class. - * - * @param string $offset - * @return mixed - */ - public function offsetGet($offset) - { - if ($offset == 'feed' && !$this->offsetExists('feed')) { - if (!$this->offsetExists('href')) { - return null; - } - $feed = Reader::import($this->offsetGet('href')); - $this->offsetSet('feed', $feed); - return $feed; - } - return parent::offsetGet($offset); - } -} diff --git a/3rdparty/ZendFeed/Reader/Http/ClientInterface.php b/3rdparty/ZendFeed/Reader/Http/ClientInterface.php deleted file mode 100644 index 43932f761..000000000 --- a/3rdparty/ZendFeed/Reader/Http/ClientInterface.php +++ /dev/null @@ -1,21 +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\Http; - -interface ClientInterface -{ - /** - * Make a GET request to a given URI - * - * @param string $uri - * @return ResponseInterface - */ - public function get($uri); -} diff --git a/3rdparty/ZendFeed/Reader/Http/ResponseInterface.php b/3rdparty/ZendFeed/Reader/Http/ResponseInterface.php deleted file mode 100644 index 39c51724b..000000000 --- a/3rdparty/ZendFeed/Reader/Http/ResponseInterface.php +++ /dev/null @@ -1,27 +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\Http; - -interface ResponseInterface -{ - /** - * Retrieve the response body - * - * @return string - */ - public function getBody(); - - /** - * Retrieve the HTTP response status code - * - * @return int - */ - public function getStatusCode(); -} diff --git a/3rdparty/ZendFeed/Reader/Reader.php b/3rdparty/ZendFeed/Reader/Reader.php deleted file mode 100644 index bcd387ad2..000000000 --- a/3rdparty/ZendFeed/Reader/Reader.php +++ /dev/null @@ -1,678 +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; - -use DOMDocument; -use DOMXPath; -use Zend\Cache\Storage\StorageInterface as CacheStorage; -use Zend\Http as ZendHttp; -use Zend\Stdlib\ErrorHandler; - -/** -*/ -class Reader -{ - /** - * Namespace constants - */ - const NAMESPACE_ATOM_03 = 'http://purl.org/atom/ns#'; - const NAMESPACE_ATOM_10 = 'http://www.w3.org/2005/Atom'; - const NAMESPACE_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'; - const NAMESPACE_RSS_090 = 'http://my.netscape.com/rdf/simple/0.9/'; - const NAMESPACE_RSS_10 = 'http://purl.org/rss/1.0/'; - - /** - * Feed type constants - */ - const TYPE_ANY = 'any'; - const TYPE_ATOM_03 = 'atom-03'; - const TYPE_ATOM_10 = 'atom-10'; - const TYPE_ATOM_10_ENTRY = 'atom-10-entry'; - const TYPE_ATOM_ANY = 'atom'; - const TYPE_RSS_090 = 'rss-090'; - const TYPE_RSS_091 = 'rss-091'; - const TYPE_RSS_091_NETSCAPE = 'rss-091n'; - const TYPE_RSS_091_USERLAND = 'rss-091u'; - const TYPE_RSS_092 = 'rss-092'; - const TYPE_RSS_093 = 'rss-093'; - const TYPE_RSS_094 = 'rss-094'; - const TYPE_RSS_10 = 'rss-10'; - const TYPE_RSS_20 = 'rss-20'; - const TYPE_RSS_ANY = 'rss'; - - /** - * Cache instance - * - * @var CacheStorage - */ - protected static $cache = null; - - /** - * HTTP client object to use for retrieving feeds - * - * @var ZendHttp\Client - */ - protected static $httpClient = null; - - /** - * Override HTTP PUT and DELETE request methods? - * - * @var bool - */ - protected static $httpMethodOverride = false; - - protected static $httpConditionalGet = false; - - protected static $extensionManager = null; - - protected static $extensions = array( - 'feed' => array( - 'DublinCore\Feed', - 'Atom\Feed' - ), - 'entry' => array( - 'Content\Entry', - 'DublinCore\Entry', - 'Atom\Entry' - ), - 'core' => array( - 'DublinCore\Feed', - 'Atom\Feed', - 'Content\Entry', - 'DublinCore\Entry', - 'Atom\Entry' - ) - ); - - /** - * Get the Feed cache - * - * @return CacheStorage - */ - public static function getCache() - { - return static::$cache; - } - - /** - * Set the feed cache - * - * @param CacheStorage $cache - * @return void - */ - public static function setCache(CacheStorage $cache) - { - static::$cache = $cache; - } - - /** - * Set the HTTP client instance - * - * Sets the HTTP client object to use for retrieving the feeds. - * - * @param ZendHttp\Client $httpClient - * @return void - */ - public static function setHttpClient(ZendHttp\Client $httpClient) - { - static::$httpClient = $httpClient; - } - - - /** - * Gets the HTTP client object. If none is set, a new ZendHttp\Client will be used. - * - * @return ZendHttp\Client - */ - public static function getHttpClient() - { - if (!static::$httpClient instanceof ZendHttp\Client) { - static::$httpClient = new ZendHttp\Client(); - } - - return static::$httpClient; - } - - /** - * Toggle using POST instead of PUT and DELETE HTTP methods - * - * Some feed implementations do not accept PUT and DELETE HTTP - * methods, or they can't be used because of proxies or other - * measures. This allows turning on using POST where PUT and - * DELETE would normally be used; in addition, an - * X-Method-Override header will be sent with a value of PUT or - * DELETE as appropriate. - * - * @param bool $override Whether to override PUT and DELETE. - * @return void - */ - public static function setHttpMethodOverride($override = true) - { - static::$httpMethodOverride = $override; - } - - /** - * Get the HTTP override state - * - * @return bool - */ - public static function getHttpMethodOverride() - { - return static::$httpMethodOverride; - } - - /** - * Set the flag indicating whether or not to use HTTP conditional GET - * - * @param bool $bool - * @return void - */ - public static function useHttpConditionalGet($bool = true) - { - static::$httpConditionalGet = $bool; - } - - /** - * Import a feed by providing a URI - * - * @param string $uri The URI to the feed - * @param string $etag OPTIONAL Last received ETag for this resource - * @param string $lastModified OPTIONAL Last-Modified value for this resource - * @return Feed\FeedInterface - * @throws Exception\RuntimeException - */ - public static function import($uri, $etag = null, $lastModified = null) - { - $cache = self::getCache(); - $feed = null; - $client = self::getHttpClient(); - $client->resetParameters(); - $headers = new ZendHttp\Headers(); - $client->setHeaders($headers); - $client->setUri($uri); - $cacheId = 'Zend_Feed_Reader_' . md5($uri); - - if (static::$httpConditionalGet && $cache) { - $data = $cache->getItem($cacheId); - if ($data) { - if ($etag === null) { - $etag = $cache->getItem($cacheId . '_etag'); - } - if ($lastModified === null) { - $lastModified = $cache->getItem($cacheId . '_lastmodified'); - } - if ($etag) { - $headers->addHeaderLine('If-None-Match', $etag); - } - if ($lastModified) { - $headers->addHeaderLine('If-Modified-Since', $lastModified); - } - } - $response = $client->send(); - if ($response->getStatusCode() !== 200 && $response->getStatusCode() !== 304) { - throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode()); - } - if ($response->getStatusCode() == 304) { - $responseXml = $data; - } else { - $responseXml = $response->getBody(); - $cache->setItem($cacheId, $responseXml); - if ($response->getHeaders()->get('ETag')) { - $cache->setItem($cacheId . '_etag', $response->getHeaders()->get('ETag')->getFieldValue()); - } - if ($response->getHeaders()->get('Last-Modified')) { - $cache->setItem($cacheId . '_lastmodified', $response->getHeaders()->get('Last-Modified')->getFieldValue()); - } - } - return static::importString($responseXml); - } elseif ($cache) { - $data = $cache->getItem($cacheId); - if ($data) { - return static::importString($data); - } - $response = $client->send(); - if ((int) $response->getStatusCode() !== 200) { - throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode()); - } - $responseXml = $response->getBody(); - $cache->setItem($cacheId, $responseXml); - return static::importString($responseXml); - } else { - $response = $client->send(); - if ((int) $response->getStatusCode() !== 200) { - throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode()); - } - $reader = static::importString($response->getBody()); - $reader->setOriginalSourceUri($uri); - return $reader; - } - } - - /** - * Import a feed from a remote URI - * - * Performs similarly to import(), except it uses the HTTP client passed to - * the method, and does not take into account cached data. - * - * Primary purpose is to make it possible to use the Reader with alternate - * HTTP client implementations. - * - * @param string $uri - * @param Http\ClientInterface $client - * @return self - * @throws Exception\RuntimeException if response is not an Http\ResponseInterface - */ - public static function importRemoteFeed($uri, Http\ClientInterface $client) - { - $response = $client->get($uri); - if (!$response instanceof Http\ResponseInterface) { - throw new Exception\RuntimeException(sprintf( - 'Did not receive a %s\Http\ResponseInterface from the provided HTTP client; received "%s"', - __NAMESPACE__, - (is_object($response) ? get_class($response) : gettype($response)) - )); - } - - if ((int) $response->getStatusCode() !== 200) { - throw new Exception\RuntimeException('Feed failed to load, got response code ' . $response->getStatusCode()); - } - $reader = static::importString($response->getBody()); - $reader->setOriginalSourceUri($uri); - return $reader; - } - - /** - * Import a feed from a string - * - * @param string $string - * @return Feed\FeedInterface - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - */ - public static function importString($string) - { - $trimmed = trim($string); - if (!is_string($string) || empty($trimmed)) { - throw new Exception\InvalidArgumentException('Only non empty strings are allowed as input'); - } - - $libxmlErrflag = libxml_use_internal_errors(true); - $oldValue = libxml_disable_entity_loader(true); - $dom = new DOMDocument; - $status = $dom->loadXML(trim($string)); - foreach ($dom->childNodes as $child) { - if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { - throw new Exception\InvalidArgumentException( - 'Invalid XML: Detected use of illegal DOCTYPE' - ); - } - } - libxml_disable_entity_loader($oldValue); - libxml_use_internal_errors($libxmlErrflag); - - if (!$status) { - // Build error message - $error = libxml_get_last_error(); - if ($error && $error->message) { - $error->message = trim($error->message); - $errormsg = "DOMDocument cannot parse XML: {$error->message}"; - } else { - $errormsg = "DOMDocument cannot parse XML: Please check the XML document's validity"; - } - throw new Exception\RuntimeException($errormsg); - } - - $type = static::detectType($dom); - - static::registerCoreExtensions(); - - if (substr($type, 0, 3) == 'rss') { - $reader = new Feed\Rss($dom, $type); - } elseif (substr($type, 8, 5) == 'entry') { - $reader = new Entry\Atom($dom->documentElement, 0, self::TYPE_ATOM_10); - } elseif (substr($type, 0, 4) == 'atom') { - $reader = new Feed\Atom($dom, $type); - } else { - throw new Exception\RuntimeException('The URI used does not point to a ' - . 'valid Atom, RSS or RDF feed that Zend\Feed\Reader can parse.'); - } - return $reader; - } - - /** - * Imports a feed from a file located at $filename. - * - * @param string $filename - * @throws Exception\RuntimeException - * @return Feed\FeedInterface - */ - public static function importFile($filename) - { - ErrorHandler::start(); - $feed = file_get_contents($filename); - $err = ErrorHandler::stop(); - if ($feed === false) { - throw new Exception\RuntimeException("File '{$filename}' could not be loaded", 0, $err); - } - return static::importString($feed); - } - - /** - * Find feed links - * - * @param $uri - * @return FeedSet - * @throws Exception\RuntimeException - */ - public static function findFeedLinks($uri) - { - $client = static::getHttpClient(); - $client->setUri($uri); - $response = $client->send(); - if ($response->getStatusCode() !== 200) { - throw new Exception\RuntimeException("Failed to access $uri, got response code " . $response->getStatusCode()); - } - $responseHtml = $response->getBody(); - $libxmlErrflag = libxml_use_internal_errors(true); - $oldValue = libxml_disable_entity_loader(true); - $dom = new DOMDocument; - $status = $dom->loadHTML(trim($responseHtml)); - libxml_disable_entity_loader($oldValue); - libxml_use_internal_errors($libxmlErrflag); - if (!$status) { - // Build error message - $error = libxml_get_last_error(); - if ($error && $error->message) { - $error->message = trim($error->message); - $errormsg = "DOMDocument cannot parse HTML: {$error->message}"; - } else { - $errormsg = "DOMDocument cannot parse HTML: Please check the XML document's validity"; - } - throw new Exception\RuntimeException($errormsg); - } - $feedSet = new FeedSet; - $links = $dom->getElementsByTagName('link'); - $feedSet->addLinks($links, $uri); - return $feedSet; - } - - /** - * Detect the feed type of the provided feed - * - * @param Feed\AbstractFeed|DOMDocument|string $feed - * @param bool $specOnly - * @return string - * @throws Exception\InvalidArgumentException - * @throws Exception\RuntimeException - */ - public static function detectType($feed, $specOnly = false) - { - if ($feed instanceof Feed\AbstractFeed) { - $dom = $feed->getDomDocument(); - } elseif ($feed instanceof DOMDocument) { - $dom = $feed; - } elseif (is_string($feed) && !empty($feed)) { - ErrorHandler::start(E_NOTICE|E_WARNING); - ini_set('track_errors', 1); - $oldValue = libxml_disable_entity_loader(true); - $dom = new DOMDocument; - $status = $dom->loadXML($feed); - foreach ($dom->childNodes as $child) { - if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { - throw new Exception\InvalidArgumentException( - 'Invalid XML: Detected use of illegal DOCTYPE' - ); - } - } - libxml_disable_entity_loader($oldValue); - ini_restore('track_errors'); - ErrorHandler::stop(); - if (!$status) { - if (!isset($phpErrormsg)) { - if (function_exists('xdebug_is_enabled')) { - $phpErrormsg = '(error message not available, when XDebug is running)'; - } else { - $phpErrormsg = '(error message not available)'; - } - } - throw new Exception\RuntimeException("DOMDocument cannot parse XML: $phpErrormsg"); - } - } else { - throw new Exception\InvalidArgumentException('Invalid object/scalar provided: must' - . ' be of type Zend\Feed\Reader\Feed, DomDocument or string'); - } - $xpath = new DOMXPath($dom); - - if ($xpath->query('/rss')->length) { - $type = self::TYPE_RSS_ANY; - $version = $xpath->evaluate('string(/rss/@version)'); - - if (strlen($version) > 0) { - switch ($version) { - case '2.0': - $type = self::TYPE_RSS_20; - break; - - case '0.94': - $type = self::TYPE_RSS_094; - break; - - case '0.93': - $type = self::TYPE_RSS_093; - break; - - case '0.92': - $type = self::TYPE_RSS_092; - break; - - case '0.91': - $type = self::TYPE_RSS_091; - break; - } - } - - return $type; - } - - $xpath->registerNamespace('rdf', self::NAMESPACE_RDF); - - if ($xpath->query('/rdf:RDF')->length) { - $xpath->registerNamespace('rss', self::NAMESPACE_RSS_10); - - if ($xpath->query('/rdf:RDF/rss:channel')->length - || $xpath->query('/rdf:RDF/rss:image')->length - || $xpath->query('/rdf:RDF/rss:item')->length - || $xpath->query('/rdf:RDF/rss:textinput')->length - ) { - return self::TYPE_RSS_10; - } - - $xpath->registerNamespace('rss', self::NAMESPACE_RSS_090); - - if ($xpath->query('/rdf:RDF/rss:channel')->length - || $xpath->query('/rdf:RDF/rss:image')->length - || $xpath->query('/rdf:RDF/rss:item')->length - || $xpath->query('/rdf:RDF/rss:textinput')->length - ) { - return self::TYPE_RSS_090; - } - } - - $xpath->registerNamespace('atom', self::NAMESPACE_ATOM_10); - - if ($xpath->query('//atom:feed')->length) { - return self::TYPE_ATOM_10; - } - - if ($xpath->query('//atom:entry')->length) { - if ($specOnly == true) { - return self::TYPE_ATOM_10; - } else { - return self::TYPE_ATOM_10_ENTRY; - } - } - - $xpath->registerNamespace('atom', self::NAMESPACE_ATOM_03); - - if ($xpath->query('//atom:feed')->length) { - return self::TYPE_ATOM_03; - } - - return self::TYPE_ANY; - } - - /** - * Set plugin manager for use with Extensions - * - * @param ExtensionManagerInterface $extensionManager - */ - public static function setExtensionManager(ExtensionManagerInterface $extensionManager) - { - static::$extensionManager = $extensionManager; - } - - /** - * Get plugin manager for use with Extensions - * - * @return ExtensionManagerInterface - */ - public static function getExtensionManager() - { - if (!isset(static::$extensionManager)) { - static::setExtensionManager(new ExtensionManager()); - } - return static::$extensionManager; - } - - /** - * Register an Extension by name - * - * @param string $name - * @return void - * @throws Exception\RuntimeException if unable to resolve Extension class - */ - public static function registerExtension($name) - { - $feedName = $name . '\Feed'; - $entryName = $name . '\Entry'; - $manager = static::getExtensionManager(); - if (static::isRegistered($name)) { - if ($manager->has($feedName) || $manager->has($entryName)) { - return; - } - } - - if (!$manager->has($feedName) && !$manager->has($entryName)) { - throw new Exception\RuntimeException('Could not load extension: ' . $name - . ' using Plugin Loader. Check prefix paths are configured and extension exists.'); - } - if ($manager->has($feedName)) { - static::$extensions['feed'][] = $feedName; - } - if ($manager->has($entryName)) { - static::$extensions['entry'][] = $entryName; - } - } - - /** - * Is a given named Extension registered? - * - * @param string $extensionName - * @return bool - */ - public static function isRegistered($extensionName) - { - $feedName = $extensionName . '\Feed'; - $entryName = $extensionName . '\Entry'; - if (in_array($feedName, static::$extensions['feed']) - || in_array($entryName, static::$extensions['entry']) - ) { - return true; - } - return false; - } - - /** - * Get a list of extensions - * - * @return array - */ - public static function getExtensions() - { - return static::$extensions; - } - - /** - * Reset class state to defaults - * - * @return void - */ - public static function reset() - { - static::$cache = null; - static::$httpClient = null; - static::$httpMethodOverride = false; - static::$httpConditionalGet = false; - static::$extensionManager = null; - static::$extensions = array( - 'feed' => array( - 'DublinCore\Feed', - 'Atom\Feed' - ), - 'entry' => array( - 'Content\Entry', - 'DublinCore\Entry', - 'Atom\Entry' - ), - 'core' => array( - 'DublinCore\Feed', - 'Atom\Feed', - 'Content\Entry', - 'DublinCore\Entry', - 'Atom\Entry' - ) - ); - } - - /** - * Register core (default) extensions - * - * @return void - */ - protected static function registerCoreExtensions() - { - static::registerExtension('DublinCore'); - static::registerExtension('Content'); - static::registerExtension('Atom'); - static::registerExtension('Slash'); - static::registerExtension('WellFormedWeb'); - static::registerExtension('Thread'); - static::registerExtension('Podcast'); - } - - /** - * Utility method to apply array_unique operation to a multidimensional - * array. - * - * @param array - * @return array - */ - public static function arrayUnique(array $array) - { - foreach ($array as &$value) { - $value = serialize($value); - } - $array = array_unique($array); - foreach ($array as &$value) { - $value = unserialize($value); - } - return $array; - } -} diff --git a/3rdparty/ZendFeed/Uri.php b/3rdparty/ZendFeed/Uri.php deleted file mode 100644 index 940bce11a..000000000 --- a/3rdparty/ZendFeed/Uri.php +++ /dev/null @@ -1,184 +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; - -class Uri -{ - /** - * @var string - */ - protected $fragment; - - /** - * @var string - */ - protected $host; - - /** - * @var string - */ - protected $pass; - - /** - * @var string - */ - protected $path; - - /** - * @var int - */ - protected $port; - - /** - * @var string - */ - protected $query; - - /** - * @var string - */ - protected $scheme; - - /** - * @var string - */ - protected $user; - - /** - * @var bool - */ - protected $valid; - - /** - * Valid schemes - */ - protected $validSchemes = array( - 'http', - 'https', - 'file', - ); - - /** - * @param string $uri - */ - public function __construct($uri) - { - $parsed = parse_url($uri); - if (false === $parsed) { - $this->valid = false; - return; - } - - $this->scheme = isset($parsed['scheme']) ? $parsed['scheme'] : null; - $this->host = isset($parsed['host']) ? $parsed['host'] : null; - $this->port = isset($parsed['port']) ? $parsed['port'] : null; - $this->user = isset($parsed['user']) ? $parsed['user'] : null; - $this->pass = isset($parsed['pass']) ? $parsed['pass'] : null; - $this->path = isset($parsed['path']) ? $parsed['path'] : null; - $this->query = isset($parsed['query']) ? $parsed['query'] : null; - $this->fragment = isset($parsed['fragment']) ? $parsed['fragment'] : null; - } - - /** - * Create an instance - * - * Useful for chained validations - * - * @param string $uri - * @return self - */ - public static function factory($uri) - { - return new static($uri); - } - - /** - * Retrieve the host - * - * @return string - */ - public function getHost() - { - return $this->host; - } - - /** - * Retrieve the URI path - * - * @return string - */ - public function getPath() - { - return $this->path; - } - - /** - * Retrieve the scheme - * - * @return string - */ - public function getScheme() - { - return $this->scheme; - } - - /** - * Is the URI valid? - * - * @return bool - */ - public function isValid() - { - if (false === $this->valid) { - return false; - } - - if ($this->scheme && !in_array($this->scheme, $this->validSchemes)) { - return false; - } - - if ($this->host) { - if ($this->path && substr($this->path, 0, 1) != '/') { - return false; - } - return true; - } - - // no host, but user and/or port... what? - if ($this->user || $this->port) { - return false; - } - - if ($this->path) { - // Check path-only (no host) URI - if (substr($this->path, 0, 2) == '//') { - return false; - } - return true; - } - - if (! ($this->query || $this->fragment)) { - // No host, path, query or fragment - this is not a valid URI - return false; - } - - return true; - } - - /** - * Is the URI absolute? - * - * @return bool - */ - public function isAbsolute() - { - return ($this->scheme !== null); - } -} diff --git a/3rdparty/ZendFeed/Writer/AbstractFeed.php b/3rdparty/ZendFeed/Writer/AbstractFeed.php deleted file mode 100644 index 5165904f7..000000000 --- a/3rdparty/ZendFeed/Writer/AbstractFeed.php +++ /dev/null @@ -1,847 +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\Writer; - -use DateTime; -use Zend\Feed\Uri; -use Zend\Validator; - -class AbstractFeed -{ - /** - * Contains all Feed level date to append in feed output - * - * @var array - */ - protected $data = array(); - - /** - * Holds the value "atom" or "rss" depending on the feed type set when - * when last exported. - * - * @var string - */ - protected $type = null; - - /** - * @var $extensions - */ - protected $extensions; - - /** - * Constructor: Primarily triggers the registration of core extensions and - * loads those appropriate to this data container. - * - */ - public function __construct() - { - Writer::registerCoreExtensions(); - $this->_loadExtensions(); - } - - /** - * Set a single author - * - * The following option keys are supported: - * 'name' => (string) The name - * 'email' => (string) An optional email - * 'uri' => (string) An optional and valid URI - * - * @param array $author - * @throws Exception\InvalidArgumentException If any value of $author not follow the format. - * @return AbstractFeed - */ - public function addAuthor(array $author) - { - // Check array values - if (!array_key_exists('name', $author) - || empty($author['name']) - || !is_string($author['name']) - ) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: author array must include a "name" key with a non-empty string value'); - } - - if (isset($author['email'])) { - if (empty($author['email']) || !is_string($author['email'])) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: "email" array value must be a non-empty string'); - } - } - if (isset($author['uri'])) { - if (empty($author['uri']) || !is_string($author['uri']) || - !Uri::factory($author['uri'])->isValid() - ) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: "uri" array value must be a non-empty string and valid URI/IRI'); - } - } - - $this->data['authors'][] = $author; - - return $this; - } - - /** - * Set an array with feed authors - * - * @see addAuthor - * @param array $authors - * @return AbstractFeed - */ - public function addAuthors(array $authors) - { - foreach ($authors as $author) { - $this->addAuthor($author); - } - - return $this; - } - - /** - * Set the copyright entry - * - * @param string $copyright - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setCopyright($copyright) - { - if (empty($copyright) || !is_string($copyright)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['copyright'] = $copyright; - - return $this; - } - - /** - * Set the feed creation date - * - * @param null|int|DateTime - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setDateCreated($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp' - . ' passed as parameter'); - } - $this->data['dateCreated'] = $date; - - return $this; - } - - /** - * Set the feed modification date - * - * @param null|int|DateTime - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setDateModified($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp' - . ' passed as parameter'); - } - $this->data['dateModified'] = $date; - - return $this; - } - - /** - * Set the feed last-build date. Ignored for Atom 1.0. - * - * @param null|int|DateTime - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setLastBuildDate($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp' - . ' passed as parameter'); - } - $this->data['lastBuildDate'] = $date; - - return $this; - } - - /** - * Set the feed description - * - * @param string $description - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setDescription($description) - { - if (empty($description) || !is_string($description)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['description'] = $description; - - return $this; - } - - /** - * Set the feed generator entry - * - * @param array|string $name - * @param null|string $version - * @param null|string $uri - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setGenerator($name, $version = null, $uri = null) - { - if (is_array($name)) { - $data = $name; - if (empty($data['name']) || !is_string($data['name'])) { - throw new Exception\InvalidArgumentException('Invalid parameter: "name" must be a non-empty string'); - } - $generator = array('name' => $data['name']); - if (isset($data['version'])) { - if (empty($data['version']) || !is_string($data['version'])) { - throw new Exception\InvalidArgumentException('Invalid parameter: "version" must be a non-empty string'); - } - $generator['version'] = $data['version']; - } - if (isset($data['uri'])) { - if (empty($data['uri']) || !is_string($data['uri']) || !Uri::factory($data['uri'])->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "uri" must be a non-empty string and a valid URI/IRI'); - } - $generator['uri'] = $data['uri']; - } - } else { - if (empty($name) || !is_string($name)) { - throw new Exception\InvalidArgumentException('Invalid parameter: "name" must be a non-empty string'); - } - $generator = array('name' => $name); - if (isset($version)) { - if (empty($version) || !is_string($version)) { - throw new Exception\InvalidArgumentException('Invalid parameter: "version" must be a non-empty string'); - } - $generator['version'] = $version; - } - if (isset($uri)) { - if (empty($uri) || !is_string($uri) || !Uri::factory($uri)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "uri" must be a non-empty string and a valid URI/IRI'); - } - $generator['uri'] = $uri; - } - } - $this->data['generator'] = $generator; - - return $this; - } - - /** - * Set the feed ID - URI or URN (via PCRE pattern) supported - * - * @param string $id - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setId($id) - { - if ((empty($id) || !is_string($id) || !Uri::factory($id)->isValid()) - && !preg_match("#^urn:[a-zA-Z0-9][a-zA-Z0-9\-]{1,31}:([a-zA-Z0-9\(\)\+\,\.\:\=\@\;\$\_\!\*\-]|%[0-9a-fA-F]{2})*#", $id) - && !$this->_validateTagUri($id) - ) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI'); - } - $this->data['id'] = $id; - - return $this; - } - - /** - * Validate a URI using the tag scheme (RFC 4151) - * - * @param string $id - * @return bool - */ - protected function _validateTagUri($id) - { - if (preg_match('/^tag:(?P<name>.*),(?P<date>\d{4}-?\d{0,2}-?\d{0,2}):(?P<specific>.*)(.*:)*$/', $id, $matches)) { - $dvalid = false; - $date = $matches['date']; - $d6 = strtotime($date); - if ((strlen($date) == 4) && $date <= date('Y')) { - $dvalid = true; - } elseif ((strlen($date) == 7) && ($d6 < strtotime("now"))) { - $dvalid = true; - } elseif ((strlen($date) == 10) && ($d6 < strtotime("now"))) { - $dvalid = true; - } - $validator = new Validator\EmailAddress; - if ($validator->isValid($matches['name'])) { - $nvalid = true; - } else { - $nvalid = $validator->isValid('info@' . $matches['name']); - } - return $dvalid && $nvalid; - - } - return false; - } - - /** - * Set a feed image (URI at minimum). Parameter is a single array with the - * required key 'uri'. When rendering as RSS, the required keys are 'uri', - * 'title' and 'link'. RSS also specifies three optional parameters 'width', - * 'height' and 'description'. Only 'uri' is required and used for Atom rendering. - * - * @param array $data - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setImage(array $data) - { - if (empty($data['uri']) || !is_string($data['uri']) - || !Uri::factory($data['uri'])->isValid() - ) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter \'uri\'' - . ' must be a non-empty string and valid URI/IRI'); - } - $this->data['image'] = $data; - - return $this; - } - - /** - * Set the feed language - * - * @param string $language - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setLanguage($language) - { - if (empty($language) || !is_string($language)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['language'] = $language; - - return $this; - } - - /** - * Set a link to the HTML source - * - * @param string $link - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setLink($link) - { - if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI'); - } - $this->data['link'] = $link; - - return $this; - } - - /** - * Set a link to an XML feed for any feed type/version - * - * @param string $link - * @param string $type - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setFeedLink($link, $type) - { - if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "link"" must be a non-empty string and valid URI/IRI'); - } - if (!in_array(strtolower($type), array('rss', 'rdf', 'atom'))) { - throw new Exception\InvalidArgumentException('Invalid parameter: "type"; You must declare the type of feed the link points to, i.e. RSS, RDF or Atom'); - } - $this->data['feedLinks'][strtolower($type)] = $link; - - return $this; - } - - /** - * Set the feed title - * - * @param string $title - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setTitle($title) - { - if (empty($title) || !is_string($title)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['title'] = $title; - - return $this; - } - - /** - * Set the feed character encoding - * - * @param string $encoding - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setEncoding($encoding) - { - if (empty($encoding) || !is_string($encoding)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['encoding'] = $encoding; - - return $this; - } - - /** - * Set the feed's base URL - * - * @param string $url - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function setBaseUrl($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "url" array value' - . ' must be a non-empty string and valid URI/IRI'); - } - $this->data['baseUrl'] = $url; - - return $this; - } - - /** - * Add a Pubsubhubbub hub endpoint URL - * - * @param string $url - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function addHub($url) - { - if (empty($url) || !is_string($url) || !Uri::factory($url)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "url" array value' - . ' must be a non-empty string and valid URI/IRI'); - } - if (!isset($this->data['hubs'])) { - $this->data['hubs'] = array(); - } - $this->data['hubs'][] = $url; - - return $this; - } - - /** - * Add Pubsubhubbub hub endpoint URLs - * - * @param array $urls - * @return AbstractFeed - */ - public function addHubs(array $urls) - { - foreach ($urls as $url) { - $this->addHub($url); - } - - return $this; - } - - /** - * Add a feed category - * - * @param array $category - * @throws Exception\InvalidArgumentException - * @return AbstractFeed - */ - public function addCategory(array $category) - { - if (!isset($category['term'])) { - throw new Exception\InvalidArgumentException('Each category must be an array and ' - . 'contain at least a "term" element containing the machine ' - . ' readable category name'); - } - if (isset($category['scheme'])) { - if (empty($category['scheme']) - || !is_string($category['scheme']) - || !Uri::factory($category['scheme'])->isValid() - ) { - throw new Exception\InvalidArgumentException('The Atom scheme or RSS domain of' - . ' a category must be a valid URI'); - } - } - if (!isset($this->data['categories'])) { - $this->data['categories'] = array(); - } - $this->data['categories'][] = $category; - - return $this; - } - - /** - * Set an array of feed categories - * - * @param array $categories - * @return AbstractFeed - */ - public function addCategories(array $categories) - { - foreach ($categories as $category) { - $this->addCategory($category); - } - - return $this; - } - - /** - * Get a single author - * - * @param int $index - * @return string|null - */ - public function getAuthor($index = 0) - { - if (isset($this->data['authors'][$index])) { - return $this->data['authors'][$index]; - } - - return null; - } - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors() - { - if (!array_key_exists('authors', $this->data)) { - return null; - } - return $this->data['authors']; - } - - /** - * Get the copyright entry - * - * @return string|null - */ - public function getCopyright() - { - if (!array_key_exists('copyright', $this->data)) { - return null; - } - return $this->data['copyright']; - } - - /** - * Get the feed creation date - * - * @return string|null - */ - public function getDateCreated() - { - if (!array_key_exists('dateCreated', $this->data)) { - return null; - } - return $this->data['dateCreated']; - } - - /** - * Get the feed modification date - * - * @return string|null - */ - public function getDateModified() - { - if (!array_key_exists('dateModified', $this->data)) { - return null; - } - return $this->data['dateModified']; - } - - /** - * Get the feed last-build date - * - * @return string|null - */ - public function getLastBuildDate() - { - if (!array_key_exists('lastBuildDate', $this->data)) { - return null; - } - return $this->data['lastBuildDate']; - } - - /** - * Get the feed description - * - * @return string|null - */ - public function getDescription() - { - if (!array_key_exists('description', $this->data)) { - return null; - } - return $this->data['description']; - } - - /** - * Get the feed generator entry - * - * @return string|null - */ - public function getGenerator() - { - if (!array_key_exists('generator', $this->data)) { - return null; - } - return $this->data['generator']; - } - - /** - * Get the feed ID - * - * @return string|null - */ - public function getId() - { - if (!array_key_exists('id', $this->data)) { - return null; - } - return $this->data['id']; - } - - /** - * Get the feed image URI - * - * @return array - */ - public function getImage() - { - if (!array_key_exists('image', $this->data)) { - return null; - } - return $this->data['image']; - } - - /** - * Get the feed language - * - * @return string|null - */ - public function getLanguage() - { - if (!array_key_exists('language', $this->data)) { - return null; - } - return $this->data['language']; - } - - /** - * Get a link to the HTML source - * - * @return string|null - */ - public function getLink() - { - if (!array_key_exists('link', $this->data)) { - return null; - } - return $this->data['link']; - } - - /** - * Get a link to the XML feed - * - * @return string|null - */ - public function getFeedLinks() - { - if (!array_key_exists('feedLinks', $this->data)) { - return null; - } - return $this->data['feedLinks']; - } - - /** - * Get the feed title - * - * @return string|null - */ - public function getTitle() - { - if (!array_key_exists('title', $this->data)) { - return null; - } - return $this->data['title']; - } - - /** - * Get the feed character encoding - * - * @return string|null - */ - public function getEncoding() - { - if (!array_key_exists('encoding', $this->data)) { - return 'UTF-8'; - } - return $this->data['encoding']; - } - - /** - * Get the feed's base url - * - * @return string|null - */ - public function getBaseUrl() - { - if (!array_key_exists('baseUrl', $this->data)) { - return null; - } - return $this->data['baseUrl']; - } - - /** - * Get the URLs used as Pubsubhubbub hubs endpoints - * - * @return string|null - */ - public function getHubs() - { - if (!array_key_exists('hubs', $this->data)) { - return null; - } - return $this->data['hubs']; - } - - /** - * Get the feed categories - * - * @return string|null - */ - public function getCategories() - { - if (!array_key_exists('categories', $this->data)) { - return null; - } - return $this->data['categories']; - } - - /** - * Resets the instance and deletes all data - * - * @return void - */ - public function reset() - { - $this->data = array(); - } - - /** - * Set the current feed type being exported to "rss" or "atom". This allows - * other objects to gracefully choose whether to execute or not, depending - * on their appropriateness for the current type, e.g. renderers. - * - * @param string $type - * @return AbstractFeed - */ - public function setType($type) - { - $this->type = $type; - return $this; - } - - /** - * Retrieve the current or last feed type exported. - * - * @return string Value will be "rss" or "atom" - */ - public function getType() - { - return $this->type; - } - - /** - * Unset a specific data point - * - * @param string $name - * @return AbstractFeed - */ - public function remove($name) - { - if (isset($this->data[$name])) { - unset($this->data[$name]); - } - return $this; - } - - /** - * Method overloading: call given method on first extension implementing it - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\BadMethodCallException if no extensions implements the method - */ - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - try { - return call_user_func_array(array($extension, $method), $args); - } catch (Exception\BadMethodCallException $e) { - } - } - throw new Exception\BadMethodCallException( - 'Method: ' . $method . ' does not exist and could not be located on a registered Extension' - ); - } - - /** - * Load extensions from Zend\Feed\Writer\Writer - * - * @throws Exception\RuntimeException - * @return void - */ - protected function _loadExtensions() - { - $all = Writer::getExtensions(); - $manager = Writer::getExtensionManager(); - $exts = $all['feed']; - foreach ($exts as $ext) { - if (!$manager->has($ext)) { - throw new Exception\RuntimeException(sprintf('Unable to load extension "%s"; could not resolve to class', $ext)); - } - $this->extensions[$ext] = $manager->get($ext); - $this->extensions[$ext]->setEncoding($this->getEncoding()); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Deleted.php b/3rdparty/ZendFeed/Writer/Deleted.php deleted file mode 100644 index b4a6567a0..000000000 --- a/3rdparty/ZendFeed/Writer/Deleted.php +++ /dev/null @@ -1,237 +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\Writer; - -use DateTime; -use Zend\Feed\Uri; - -/** -*/ -class Deleted -{ - - /** - * Internal array containing all data associated with this entry or item. - * - * @var array - */ - protected $data = array(); - - /** - * Holds the value "atom" or "rss" depending on the feed type set when - * when last exported. - * - * @var string - */ - protected $type = null; - - /** - * Set the feed character encoding - * - * @param $encoding - * @throws Exception\InvalidArgumentException - * @return string|null - * @return Deleted - */ - public function setEncoding($encoding) - { - if (empty($encoding) || !is_string($encoding)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['encoding'] = $encoding; - - return $this; - } - - /** - * Get the feed character encoding - * - * @return string|null - */ - public function getEncoding() - { - if (!array_key_exists('encoding', $this->data)) { - return 'UTF-8'; - } - return $this->data['encoding']; - } - - /** - * Unset a specific data point - * - * @param string $name - * @return Deleted - */ - public function remove($name) - { - if (isset($this->data[$name])) { - unset($this->data[$name]); - } - - return $this; - } - - /** - * Set the current feed type being exported to "rss" or "atom". This allows - * other objects to gracefully choose whether to execute or not, depending - * on their appropriateness for the current type, e.g. renderers. - * - * @param string $type - * @return Deleted - */ - public function setType($type) - { - $this->type = $type; - return $this; - } - - /** - * Retrieve the current or last feed type exported. - * - * @return string Value will be "rss" or "atom" - */ - public function getType() - { - return $this->type; - } - - /** - * Set reference - * - * @param $reference - * @throws Exception\InvalidArgumentException - * @return Deleted - */ - public function setReference($reference) - { - if (empty($reference) || !is_string($reference)) { - throw new Exception\InvalidArgumentException('Invalid parameter: reference must be a non-empty string'); - } - $this->data['reference'] = $reference; - - return $this; - } - - /** - * @return string - */ - public function getReference() - { - if (!array_key_exists('reference', $this->data)) { - return null; - } - return $this->data['reference']; - } - - /** - * Set when - * - * @param null|string|DateTime $date - * @throws Exception\InvalidArgumentException - * @return Deleted - */ - public function setWhen($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp' - . ' passed as parameter'); - } - $this->data['when'] = $date; - - return $this; - } - - /** - * @return DateTime - */ - public function getWhen() - { - if (!array_key_exists('when', $this->data)) { - return null; - } - return $this->data['when']; - } - - /** - * Set by - * - * @param array $by - * @throws Exception\InvalidArgumentException - * @return Deleted - */ - public function setBy(array $by) - { - $author = array(); - if (!array_key_exists('name', $by) - || empty($by['name']) - || !is_string($by['name']) - ) { - throw new Exception\InvalidArgumentException('Invalid parameter: author array must include a' - . ' "name" key with a non-empty string value'); - } - $author['name'] = $by['name']; - if (isset($by['email'])) { - if (empty($by['email']) || !is_string($by['email'])) { - throw new Exception\InvalidArgumentException('Invalid parameter: "email" array' - . ' value must be a non-empty string'); - } - $author['email'] = $by['email']; - } - if (isset($by['uri'])) { - if (empty($by['uri']) - || !is_string($by['uri']) - || !Uri::factory($by['uri'])->isValid() - ) { - throw new Exception\InvalidArgumentException('Invalid parameter: "uri" array value must' - . ' be a non-empty string and valid URI/IRI'); - } - $author['uri'] = $by['uri']; - } - $this->data['by'] = $author; - - return $this; - } - - /** - * @return string - */ - public function getBy() - { - if (!array_key_exists('by', $this->data)) { - return null; - } - return $this->data['by']; - } - - /** - * @param string $comment - * @return Deleted - */ - public function setComment($comment) - { - $this->data['comment'] = $comment; - return $this; - } - - /** - * @return string - */ - public function getComment() - { - if (!array_key_exists('comment', $this->data)) { - return null; - } - return $this->data['comment']; - } -} diff --git a/3rdparty/ZendFeed/Writer/Entry.php b/3rdparty/ZendFeed/Writer/Entry.php deleted file mode 100644 index af8cf7a10..000000000 --- a/3rdparty/ZendFeed/Writer/Entry.php +++ /dev/null @@ -1,766 +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\Writer; - -use DateTime; -use Zend\Feed\Uri; - -/** -*/ -class Entry -{ - - /** - * Internal array containing all data associated with this entry or item. - * - * @var array - */ - protected $data = array(); - - /** - * Registered extensions - * - * @var array - */ - protected $extensions = array(); - - /** - * Holds the value "atom" or "rss" depending on the feed type set when - * when last exported. - * - * @var string - */ - protected $type = null; - - /** - * Constructor: Primarily triggers the registration of core extensions and - * loads those appropriate to this data container. - * - */ - public function __construct() - { - Writer::registerCoreExtensions(); - $this->_loadExtensions(); - } - - /** - * Set a single author - * - * The following option keys are supported: - * 'name' => (string) The name - * 'email' => (string) An optional email - * 'uri' => (string) An optional and valid URI - * - * @param array $author - * @throws Exception\InvalidArgumentException If any value of $author not follow the format. - * @return Entry - */ - public function addAuthor(array $author) - { - // Check array values - if (!array_key_exists('name', $author) - || empty($author['name']) - || !is_string($author['name']) - ) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: author array must include a "name" key with a non-empty string value'); - } - - if (isset($author['email'])) { - if (empty($author['email']) || !is_string($author['email'])) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: "email" array value must be a non-empty string'); - } - } - if (isset($author['uri'])) { - if (empty($author['uri']) || !is_string($author['uri']) || - !Uri::factory($author['uri'])->isValid() - ) { - throw new Exception\InvalidArgumentException( - 'Invalid parameter: "uri" array value must be a non-empty string and valid URI/IRI'); - } - } - - $this->data['authors'][] = $author; - - return $this; - } - - /** - * Set an array with feed authors - * - * @see addAuthor - * @param array $authors - * @return Entry - */ - public function addAuthors(array $authors) - { - foreach ($authors as $author) { - $this->addAuthor($author); - } - - return $this; - } - - /** - * Set the feed character encoding - * - * @param string $encoding - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setEncoding($encoding) - { - if (empty($encoding) || !is_string($encoding)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['encoding'] = $encoding; - - return $this; - } - - /** - * Get the feed character encoding - * - * @return string|null - */ - public function getEncoding() - { - if (!array_key_exists('encoding', $this->data)) { - return 'UTF-8'; - } - return $this->data['encoding']; - } - - /** - * Set the copyright entry - * - * @param string $copyright - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setCopyright($copyright) - { - if (empty($copyright) || !is_string($copyright)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['copyright'] = $copyright; - - return $this; - } - - /** - * Set the entry's content - * - * @param string $content - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setContent($content) - { - if (empty($content) || !is_string($content)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['content'] = $content; - - return $this; - } - - /** - * Set the feed creation date - * - * @param null|int|DateTime $date - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setDateCreated($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp passed as parameter'); - } - $this->data['dateCreated'] = $date; - - return $this; - } - - /** - * Set the feed modification date - * - * @param null|int|DateTime $date - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setDateModified($date = null) - { - if ($date === null) { - $date = new DateTime(); - } elseif (is_int($date)) { - $date = new DateTime('@' . $date); - } elseif (!$date instanceof DateTime) { - throw new Exception\InvalidArgumentException('Invalid DateTime object or UNIX Timestamp passed as parameter'); - } - $this->data['dateModified'] = $date; - - return $this; - } - - /** - * Set the feed description - * - * @param string $description - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setDescription($description) - { - if (empty($description) || !is_string($description)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['description'] = $description; - - return $this; - } - - /** - * Set the feed ID - * - * @param string $id - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setId($id) - { - if (empty($id) || !is_string($id)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['id'] = $id; - - return $this; - } - - /** - * Set a link to the HTML source of this entry - * - * @param string $link - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setLink($link) - { - if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string and valid URI/IRI'); - } - $this->data['link'] = $link; - - return $this; - } - - /** - * Set the number of comments associated with this entry - * - * @param int $count - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setCommentCount($count) - { - if (!is_numeric($count) || (int) $count != $count || (int) $count < 0) { - throw new Exception\InvalidArgumentException('Invalid parameter: "count" must be a positive integer number or zero'); - } - $this->data['commentCount'] = (int) $count; - - return $this; - } - - /** - * Set a link to a HTML page containing comments associated with this entry - * - * @param string $link - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setCommentLink($link) - { - if (empty($link) || !is_string($link) || !Uri::factory($link)->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "link" must be a non-empty string and valid URI/IRI'); - } - $this->data['commentLink'] = $link; - - return $this; - } - - /** - * Set a link to an XML feed for any comments associated with this entry - * - * @param array $link - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setCommentFeedLink(array $link) - { - if (!isset($link['uri']) || !is_string($link['uri']) || !Uri::factory($link['uri'])->isValid()) { - throw new Exception\InvalidArgumentException('Invalid parameter: "link" must be a non-empty string and valid URI/IRI'); - } - if (!isset($link['type']) || !in_array($link['type'], array('atom', 'rss', 'rdf'))) { - throw new Exception\InvalidArgumentException('Invalid parameter: "type" must be one' - . ' of "atom", "rss" or "rdf"'); - } - if (!isset($this->data['commentFeedLinks'])) { - $this->data['commentFeedLinks'] = array(); - } - $this->data['commentFeedLinks'][] = $link; - - return $this; - } - - /** - * Set a links to an XML feed for any comments associated with this entry. - * Each link is an array with keys "uri" and "type", where type is one of: - * "atom", "rss" or "rdf". - * - * @param array $links - * @return Entry - */ - public function setCommentFeedLinks(array $links) - { - foreach ($links as $link) { - $this->setCommentFeedLink($link); - } - - return $this; - } - - /** - * Set the feed title - * - * @param string $title - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setTitle($title) - { - if (empty($title) || !is_string($title)) { - throw new Exception\InvalidArgumentException('Invalid parameter: parameter must be a non-empty string'); - } - $this->data['title'] = $title; - - return $this; - } - - /** - * Get an array with feed authors - * - * @return array - */ - public function getAuthors() - { - if (!array_key_exists('authors', $this->data)) { - return null; - } - return $this->data['authors']; - } - - /** - * Get the entry content - * - * @return string - */ - public function getContent() - { - if (!array_key_exists('content', $this->data)) { - return null; - } - return $this->data['content']; - } - - /** - * Get the entry copyright information - * - * @return string - */ - public function getCopyright() - { - if (!array_key_exists('copyright', $this->data)) { - return null; - } - return $this->data['copyright']; - } - - /** - * Get the entry creation date - * - * @return string - */ - public function getDateCreated() - { - if (!array_key_exists('dateCreated', $this->data)) { - return null; - } - return $this->data['dateCreated']; - } - - /** - * Get the entry modification date - * - * @return string - */ - public function getDateModified() - { - if (!array_key_exists('dateModified', $this->data)) { - return null; - } - return $this->data['dateModified']; - } - - /** - * Get the entry description - * - * @return string - */ - public function getDescription() - { - if (!array_key_exists('description', $this->data)) { - return null; - } - return $this->data['description']; - } - - /** - * Get the entry ID - * - * @return string - */ - public function getId() - { - if (!array_key_exists('id', $this->data)) { - return null; - } - return $this->data['id']; - } - - /** - * Get a link to the HTML source - * - * @return string|null - */ - public function getLink() - { - if (!array_key_exists('link', $this->data)) { - return null; - } - return $this->data['link']; - } - - - /** - * Get all links - * - * @return array - */ - public function getLinks() - { - if (!array_key_exists('links', $this->data)) { - return null; - } - return $this->data['links']; - } - - /** - * Get the entry title - * - * @return string - */ - public function getTitle() - { - if (!array_key_exists('title', $this->data)) { - return null; - } - return $this->data['title']; - } - - /** - * Get the number of comments/replies for current entry - * - * @return int - */ - public function getCommentCount() - { - if (!array_key_exists('commentCount', $this->data)) { - return null; - } - 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 null; - } - return $this->data['commentLink']; - } - - /** - * Returns an array of URIs pointing to a feed of all comments for this entry - * where the array keys indicate the feed type (atom, rss or rdf). - * - * @return string - */ - public function getCommentFeedLinks() - { - if (!array_key_exists('commentFeedLinks', $this->data)) { - return null; - } - return $this->data['commentFeedLinks']; - } - - /** - * Add an entry category - * - * @param array $category - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function addCategory(array $category) - { - if (!isset($category['term'])) { - throw new Exception\InvalidArgumentException('Each category must be an array and ' - . 'contain at least a "term" element containing the machine ' - . ' readable category name'); - } - if (isset($category['scheme'])) { - if (empty($category['scheme']) - || !is_string($category['scheme']) - || !Uri::factory($category['scheme'])->isValid() - ) { - throw new Exception\InvalidArgumentException('The Atom scheme or RSS domain of' - . ' a category must be a valid URI'); - } - } - if (!isset($this->data['categories'])) { - $this->data['categories'] = array(); - } - $this->data['categories'][] = $category; - - return $this; - } - - /** - * Set an array of entry categories - * - * @param array $categories - * @return Entry - */ - public function addCategories(array $categories) - { - foreach ($categories as $category) { - $this->addCategory($category); - } - - return $this; - } - - /** - * Get the entry categories - * - * @return string|null - */ - public function getCategories() - { - if (!array_key_exists('categories', $this->data)) { - return null; - } - return $this->data['categories']; - } - - /** - * Adds an enclosure to the entry. The array parameter may contain the - * keys 'uri', 'type' and 'length'. Only 'uri' is required for Atom, though the - * others must also be provided or RSS rendering (where they are required) - * will throw an Exception. - * - * @param array $enclosure - * @throws Exception\InvalidArgumentException - * @return Entry - */ - public function setEnclosure(array $enclosure) - { - if (!isset($enclosure['uri'])) { - throw new Exception\InvalidArgumentException('Enclosure "uri" is not set'); - } - if (!Uri::factory($enclosure['uri'])->isValid()) { - throw new Exception\InvalidArgumentException('Enclosure "uri" is not a valid URI/IRI'); - } - $this->data['enclosure'] = $enclosure; - - return $this; - } - - /** - * Retrieve an array of all enclosures to be added to entry. - * - * @return array - */ - public function getEnclosure() - { - if (!array_key_exists('enclosure', $this->data)) { - return null; - } - return $this->data['enclosure']; - } - - /** - * Unset a specific data point - * - * @param string $name - * @return Entry - */ - public function remove($name) - { - if (isset($this->data[$name])) { - unset($this->data[$name]); - } - - return $this; - } - - /** - * Get registered extensions - * - * @return array - */ - public function getExtensions() - { - return $this->extensions; - } - - /** - * Return an Extension object with the matching name (postfixed with _Entry) - * - * @param string $name - * @return object - */ - public function getExtension($name) - { - if (array_key_exists($name . '\\Entry', $this->extensions)) { - return $this->extensions[$name . '\\Entry']; - } - return null; - } - - /** - * Set the current feed type being exported to "rss" or "atom". This allows - * other objects to gracefully choose whether to execute or not, depending - * on their appropriateness for the current type, e.g. renderers. - * - * @param string $type - * @return Entry - */ - public function setType($type) - { - $this->type = $type; - return $this; - } - - /** - * Retrieve the current or last feed type exported. - * - * @return string Value will be "rss" or "atom" - */ - public function getType() - { - return $this->type; - } - - /** - * Method overloading: call given method on first extension implementing it - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\BadMethodCallException if no extensions implements the method - */ - public function __call($method, $args) - { - foreach ($this->extensions as $extension) { - try { - return call_user_func_array(array($extension, $method), $args); - } catch (\BadMethodCallException $e) { - } - } - throw new Exception\BadMethodCallException('Method: ' . $method - . ' does not exist and could not be located on a registered Extension'); - } - - /** - * Creates a new Zend\Feed\Writer\Source data container for use. This is NOT - * added to the current feed automatically, but is necessary to create a - * container with some initial values preset based on the current feed data. - * - * @return Source - */ - public function createSource() - { - $source = new Source; - if ($this->getEncoding()) { - $source->setEncoding($this->getEncoding()); - } - $source->setType($this->getType()); - return $source; - } - - /** - * Appends a Zend\Feed\Writer\Entry object representing a new entry/item - * the feed data container's internal group of entries. - * - * @param Source $source - * @return Entry - */ - public function setSource(Source $source) - { - $this->data['source'] = $source; - return $this; - } - - /** - * @return Source - */ - public function getSource() - { - if (isset($this->data['source'])) { - return $this->data['source']; - } - return null; - } - - /** - * Load extensions from Zend\Feed\Writer\Writer - * - * @return void - */ - protected function _loadExtensions() - { - $all = Writer::getExtensions(); - $manager = Writer::getExtensionManager(); - $exts = $all['entry']; - foreach ($exts as $ext) { - $this->extensions[$ext] = $manager->get($ext); - $this->extensions[$ext]->setEncoding($this->getEncoding()); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Exception/BadMethodCallException.php b/3rdparty/ZendFeed/Writer/Exception/BadMethodCallException.php deleted file mode 100644 index e03851184..000000000 --- a/3rdparty/ZendFeed/Writer/Exception/BadMethodCallException.php +++ /dev/null @@ -1,22 +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\Writer\Exception; - -use Zend\Feed\Exception; - -/** - * Feed exceptions - * - * Class to represent exceptions that occur during Feed operations. - */ -class BadMethodCallException - extends Exception\BadMethodCallException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/Writer/Exception/ExceptionInterface.php b/3rdparty/ZendFeed/Writer/Exception/ExceptionInterface.php deleted file mode 100644 index c2ed59beb..000000000 --- a/3rdparty/ZendFeed/Writer/Exception/ExceptionInterface.php +++ /dev/null @@ -1,19 +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\Writer\Exception; - -/** - * Feed exceptions - * - * Interface to represent exceptions that occur during Feed operations. - */ -interface ExceptionInterface -{ -} diff --git a/3rdparty/ZendFeed/Writer/Exception/InvalidArgumentException.php b/3rdparty/ZendFeed/Writer/Exception/InvalidArgumentException.php deleted file mode 100644 index 377d378db..000000000 --- a/3rdparty/ZendFeed/Writer/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,22 +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\Writer\Exception; - -use Zend\Feed\Exception; - -/** - * Feed exceptions - * - * Class to represent exceptions that occur during Feed operations. - */ -class InvalidArgumentException - extends Exception\InvalidArgumentException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/Writer/Exception/RuntimeException.php b/3rdparty/ZendFeed/Writer/Exception/RuntimeException.php deleted file mode 100644 index 6de3df500..000000000 --- a/3rdparty/ZendFeed/Writer/Exception/RuntimeException.php +++ /dev/null @@ -1,17 +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\Writer\Exception; - -use Zend\Feed\Exception; - -class RuntimeException - extends Exception\RuntimeException - implements ExceptionInterface -{} diff --git a/3rdparty/ZendFeed/Writer/Extension/AbstractRenderer.php b/3rdparty/ZendFeed/Writer/Extension/AbstractRenderer.php deleted file mode 100644 index 5e4eb8c82..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/AbstractRenderer.php +++ /dev/null @@ -1,164 +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\Writer\Extension; - -use DOMDocument; -use DOMElement; - -/** -*/ -abstract class AbstractRenderer implements RendererInterface -{ - /** - * @var DOMDocument - */ - protected $dom = null; - - /** - * @var mixed - */ - protected $entry = null; - - /** - * @var DOMElement - */ - protected $base = null; - - /** - * @var mixed - */ - protected $container = null; - - /** - * @var string - */ - protected $type = null; - - /** - * @var DOMElement - */ - protected $rootElement = null; - - /** - * Encoding of all text values - * - * @var string - */ - protected $encoding = 'UTF-8'; - - /** - * Set the data container - * - * @param mixed $container - * @return AbstractRenderer - */ - public function setDataContainer($container) - { - $this->container = $container; - return $this; - } - - /** - * Set feed encoding - * - * @param string $enc - * @return AbstractRenderer - */ - public function setEncoding($enc) - { - $this->encoding = $enc; - return $this; - } - - /** - * Get feed encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set DOMDocument and DOMElement on which to operate - * - * @param DOMDocument $dom - * @param DOMElement $base - * @return AbstractRenderer - */ - public function setDomDocument(DOMDocument $dom, DOMElement $base) - { - $this->dom = $dom; - $this->base = $base; - return $this; - } - - /** - * Get data container being rendered - * - * @return mixed - */ - public function getDataContainer() - { - return $this->container; - } - - /** - * Set feed type - * - * @param string $type - * @return AbstractRenderer - */ - public function setType($type) - { - $this->type = $type; - return $this; - } - - /** - * Get feedtype - * - * @return string - */ - public function getType() - { - return $this->type; - } - - /** - * Set root element of document - * - * @param DOMElement $root - * @return AbstractRenderer - */ - public function setRootElement(DOMElement $root) - { - $this->rootElement = $root; - return $this; - } - - /** - * Get root element - * - * @return DOMElement - */ - public function getRootElement() - { - return $this->rootElement; - } - - /** - * Append namespaces to feed - * - * @return void - */ - abstract protected function _appendNamespaces(); -} diff --git a/3rdparty/ZendFeed/Writer/Extension/Atom/Renderer/Feed.php b/3rdparty/ZendFeed/Writer/Extension/Atom/Renderer/Feed.php deleted file mode 100644 index f79025958..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/Atom/Renderer/Feed.php +++ /dev/null @@ -1,109 +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\Writer\Extension\Atom\Renderer; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer\Extension; - -/** -*/ -class Feed extends Extension\AbstractRenderer -{ - - /** - * Set to TRUE if a rendering method actually renders something. This - * is used to prevent premature appending of a XML namespace declaration - * until an element which requires it is actually appended. - * - * @var bool - */ - protected $called = false; - - /** - * Render feed - * - * @return void - */ - public function render() - { - /** - * RSS 2.0 only. Used mainly to include Atom links and - * Pubsubhubbub Hub endpoint URIs under the Atom namespace - */ - if (strtolower($this->getType()) == 'atom') { - return; - } - $this->_setFeedLinks($this->dom, $this->base); - $this->_setHubs($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append namespaces to root element of feed - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:atom', - 'http://www.w3.org/2005/Atom'); - } - - /** - * Set feed link elements - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setFeedLinks(DOMDocument $dom, DOMElement $root) - { - $flinks = $this->getDataContainer()->getFeedLinks(); - if (!$flinks || empty($flinks)) { - return; - } - foreach ($flinks as $type => $href) { - if (strtolower($type) == $this->getType()) { // issue 2605 - $mime = 'application/' . strtolower($type) . '+xml'; - $flink = $dom->createElement('atom:link'); - $root->appendChild($flink); - $flink->setAttribute('rel', 'self'); - $flink->setAttribute('type', $mime); - $flink->setAttribute('href', $href); - } - } - $this->called = true; - } - - /** - * Set PuSH hubs - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setHubs(DOMDocument $dom, DOMElement $root) - { - $hubs = $this->getDataContainer()->getHubs(); - if (!$hubs || empty($hubs)) { - return; - } - foreach ($hubs as $hubUrl) { - $hub = $dom->createElement('atom:link'); - $hub->setAttribute('rel', 'hub'); - $hub->setAttribute('href', $hubUrl); - $root->appendChild($hub); - } - $this->called = true; - } -} diff --git a/3rdparty/ZendFeed/Writer/Extension/Content/Renderer/Entry.php b/3rdparty/ZendFeed/Writer/Extension/Content/Renderer/Entry.php deleted file mode 100644 index 6d64bc2fc..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/Content/Renderer/Entry.php +++ /dev/null @@ -1,76 +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\Writer\Extension\Content\Renderer; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer\Extension; - -/** -*/ -class Entry extends Extension\AbstractRenderer -{ - - /** - * Set to TRUE if a rendering method actually renders something. This - * is used to prevent premature appending of a XML namespace declaration - * until an element which requires it is actually appended. - * - * @var bool - */ - protected $called = false; - - /** - * Render entry - * - * @return void - */ - public function render() - { - if (strtolower($this->getType()) == 'atom') { - return; - } - $this->_setContent($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append namespaces to root element - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:content', - 'http://purl.org/rss/1.0/modules/content/'); - } - - /** - * Set entry content - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setContent(DOMDocument $dom, DOMElement $root) - { - $content = $this->getDataContainer()->getContent(); - if (!$content) { - return; - } - $element = $dom->createElement('content:encoded'); - $root->appendChild($element); - $cdata = $dom->createCDATASection($content); - $element->appendChild($cdata); - $this->called = true; - } -} diff --git a/3rdparty/ZendFeed/Writer/Extension/DublinCore/Renderer/Entry.php b/3rdparty/ZendFeed/Writer/Extension/DublinCore/Renderer/Entry.php deleted file mode 100644 index d7ca4fda7..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/DublinCore/Renderer/Entry.php +++ /dev/null @@ -1,80 +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\Writer\Extension\DublinCore\Renderer; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer\Extension; - -/** -*/ -class Entry extends Extension\AbstractRenderer -{ - - /** - * Set to TRUE if a rendering method actually renders something. This - * is used to prevent premature appending of a XML namespace declaration - * until an element which requires it is actually appended. - * - * @var bool - */ - protected $called = false; - - /** - * Render entry - * - * @return void - */ - public function render() - { - if (strtolower($this->getType()) == 'atom') { - return; - } - $this->_setAuthors($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append namespaces to entry - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:dc', - 'http://purl.org/dc/elements/1.1/'); - } - - /** - * Set entry author elements - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->getDataContainer()->getAuthors(); - if (!$authors || empty($authors)) { - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('dc:creator'); - if (array_key_exists('name', $data)) { - $text = $dom->createTextNode($data['name']); - $author->appendChild($text); - $root->appendChild($author); - } - } - $this->called = true; - } -} diff --git a/3rdparty/ZendFeed/Writer/Extension/DublinCore/Renderer/Feed.php b/3rdparty/ZendFeed/Writer/Extension/DublinCore/Renderer/Feed.php deleted file mode 100644 index e888fbd07..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/DublinCore/Renderer/Feed.php +++ /dev/null @@ -1,80 +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\Writer\Extension\DublinCore\Renderer; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer\Extension; - -/** -*/ -class Feed extends Extension\AbstractRenderer -{ - - /** - * Set to TRUE if a rendering method actually renders something. This - * is used to prevent premature appending of a XML namespace declaration - * until an element which requires it is actually appended. - * - * @var bool - */ - protected $called = false; - - /** - * Render feed - * - * @return void - */ - public function render() - { - if (strtolower($this->getType()) == 'atom') { - return; - } - $this->_setAuthors($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append namespaces to feed element - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:dc', - 'http://purl.org/dc/elements/1.1/'); - } - - /** - * Set feed authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->getDataContainer()->getAuthors(); - if (!$authors || empty($authors)) { - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('dc:creator'); - if (array_key_exists('name', $data)) { - $text = $dom->createTextNode($data['name']); - $author->appendChild($text); - $root->appendChild($author); - } - } - $this->called = true; - } -} diff --git a/3rdparty/ZendFeed/Writer/Extension/ITunes/Entry.php b/3rdparty/ZendFeed/Writer/Extension/ITunes/Entry.php deleted file mode 100644 index 1b7b64aa5..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/ITunes/Entry.php +++ /dev/null @@ -1,246 +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\Writer\Extension\ITunes; - -use Zend\Feed\Writer; -use Zend\Feed\Writer\Extension; -use Zend\Stdlib\StringUtils; -use Zend\Stdlib\StringWrapper\StringWrapperInterface; - -/** -*/ -class Entry -{ - /** - * Array of Feed data for rendering by Extension's renderers - * - * @var array - */ - protected $data = array(); - - /** - * Encoding of all text values - * - * @var string - */ - protected $encoding = 'UTF-8'; - - /** - * The used string wrapper supporting encoding - * - * @var StringWrapperInterface - */ - protected $stringWrapper; - - public function __construct() - { - $this->stringWrapper = StringUtils::getWrapper($this->encoding); - } - - /** - * Set feed encoding - * - * @param string $enc - * @return Entry - */ - public function setEncoding($enc) - { - $this->stringWrapper = StringUtils::getWrapper($enc); - $this->encoding = $enc; - return $this; - } - - /** - * Get feed encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set a block value of "yes" or "no". You may also set an empty string. - * - * @param string - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesBlock($value) - { - if (!ctype_alpha($value) && strlen($value) > 0) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only' - . ' contain alphabetic characters'); - } - - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only' - . ' contain a maximum of 255 characters'); - } - $this->data['block'] = $value; - } - - /** - * Add authors to itunes entry - * - * @param array $values - * @return Entry - */ - public function addItunesAuthors(array $values) - { - foreach ($values as $value) { - $this->addItunesAuthor($value); - } - return $this; - } - - /** - * Add author to itunes entry - * - * @param string $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function addItunesAuthor($value) - { - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "author" may only' - . ' contain a maximum of 255 characters each'); - } - if (!isset($this->data['authors'])) { - $this->data['authors'] = array(); - } - $this->data['authors'][] = $value; - return $this; - } - - /** - * Set duration - * - * @param int $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesDuration($value) - { - $value = (string) $value; - if (!ctype_digit($value) - && !preg_match("/^\d+:[0-5]{1}[0-9]{1}$/", $value) - && !preg_match("/^\d+:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/", $value) - ) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "duration" may only' - . ' be of a specified [[HH:]MM:]SS format'); - } - $this->data['duration'] = $value; - return $this; - } - - /** - * Set "explicit" flag - * - * @param bool $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesExplicit($value) - { - if (!in_array($value, array('yes', 'no', 'clean'))) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "explicit" may only' - . ' be one of "yes", "no" or "clean"'); - } - $this->data['explicit'] = $value; - return $this; - } - - /** - * Set keywords - * - * @param array $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesKeywords(array $value) - { - if (count($value) > 12) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only' - . ' contain a maximum of 12 terms'); - } - - $concat = implode(',', $value); - if ($this->stringWrapper->strlen($concat) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only' - . ' have a concatenated length of 255 chars where terms are delimited' - . ' by a comma'); - } - $this->data['keywords'] = $value; - return $this; - } - - /** - * Set subtitle - * - * @param string $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesSubtitle($value) - { - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "subtitle" may only' - . ' contain a maximum of 255 characters'); - } - $this->data['subtitle'] = $value; - return $this; - } - - /** - * Set summary - * - * @param string $value - * @return Entry - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesSummary($value) - { - if ($this->stringWrapper->strlen($value) > 4000) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "summary" may only' - . ' contain a maximum of 4000 characters'); - } - $this->data['summary'] = $value; - return $this; - } - - /** - * Overloading to itunes specific setters - * - * @param string $method - * @param array $params - * @throws Writer\Exception\BadMethodCallException - * @return mixed - */ - public function __call($method, array $params) - { - $point = lcfirst(substr($method, 9)); - if (!method_exists($this, 'setItunes' . ucfirst($point)) - && !method_exists($this, 'addItunes' . ucfirst($point)) - ) { - throw new Writer\Exception\BadMethodCallException( - 'invalid method: ' . $method - ); - } - if (!array_key_exists($point, $this->data) - || empty($this->data[$point]) - ) { - return null; - } - return $this->data[$point]; - } -} diff --git a/3rdparty/ZendFeed/Writer/Extension/ITunes/Feed.php b/3rdparty/ZendFeed/Writer/Extension/ITunes/Feed.php deleted file mode 100644 index 22c54db6e..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/ITunes/Feed.php +++ /dev/null @@ -1,362 +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\Writer\Extension\ITunes; - -use Zend\Feed\Uri; -use Zend\Feed\Writer; -use Zend\Stdlib\StringUtils; -use Zend\Stdlib\StringWrapper\StringWrapperInterface; - -/** -*/ -class Feed -{ - /** - * Array of Feed data for rendering by Extension's renderers - * - * @var array - */ - protected $data = array(); - - /** - * Encoding of all text values - * - * @var string - */ - protected $encoding = 'UTF-8'; - - /** - * The used string wrapper supporting encoding - * - * @var StringWrapperInterface - */ - protected $stringWrapper; - - /** - * Constructor - */ - public function __construct() - { - $this->stringWrapper = StringUtils::getWrapper($this->encoding); - } - - /** - * Set feed encoding - * - * @param string $enc - * @return Feed - */ - public function setEncoding($enc) - { - $this->stringWrapper = StringUtils::getWrapper($enc); - $this->encoding = $enc; - return $this; - } - - /** - * Get feed encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Set a block value of "yes" or "no". You may also set an empty string. - * - * @param string - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesBlock($value) - { - if (!ctype_alpha($value) && strlen($value) > 0) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only' - . ' contain alphabetic characters'); - } - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "block" may only' - . ' contain a maximum of 255 characters'); - } - $this->data['block'] = $value; - return $this; - } - - /** - * Add feed authors - * - * @param array $values - * @return Feed - */ - public function addItunesAuthors(array $values) - { - foreach ($values as $value) { - $this->addItunesAuthor($value); - } - return $this; - } - - /** - * Add feed author - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function addItunesAuthor($value) - { - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "author" may only' - . ' contain a maximum of 255 characters each'); - } - if (!isset($this->data['authors'])) { - $this->data['authors'] = array(); - } - $this->data['authors'][] = $value; - return $this; - } - - /** - * Set feed categories - * - * @param array $values - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesCategories(array $values) - { - if (!isset($this->data['categories'])) { - $this->data['categories'] = array(); - } - foreach ($values as $key => $value) { - if (!is_array($value)) { - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only' - . ' contain a maximum of 255 characters each'); - } - $this->data['categories'][] = $value; - } else { - if ($this->stringWrapper->strlen($key) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only' - . ' contain a maximum of 255 characters each'); - } - $this->data['categories'][$key] = array(); - foreach ($value as $val) { - if ($this->stringWrapper->strlen($val) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "category" may only' - . ' contain a maximum of 255 characters each'); - } - $this->data['categories'][$key][] = $val; - } - } - } - return $this; - } - - /** - * Set feed image (icon) - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesImage($value) - { - if (!Uri::factory($value)->isValid()) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "image" may only' - . ' be a valid URI/IRI'); - } - if (!in_array(substr($value, -3), array('jpg', 'png'))) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "image" may only' - . ' use file extension "jpg" or "png" which must be the last three' - . ' characters of the URI (i.e. no query string or fragment)'); - } - $this->data['image'] = $value; - return $this; - } - - /** - * Set feed cumulative duration - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesDuration($value) - { - $value = (string) $value; - if (!ctype_digit($value) - && !preg_match("/^\d+:[0-5]{1}[0-9]{1}$/", $value) - && !preg_match("/^\d+:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}$/", $value) - ) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "duration" may only' - . ' be of a specified [[HH:]MM:]SS format'); - } - $this->data['duration'] = $value; - return $this; - } - - /** - * Set "explicit" flag - * - * @param bool $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesExplicit($value) - { - if (!in_array($value, array('yes', 'no', 'clean'))) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "explicit" may only' - . ' be one of "yes", "no" or "clean"'); - } - $this->data['explicit'] = $value; - return $this; - } - - /** - * Set feed keywords - * - * @param array $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesKeywords(array $value) - { - if (count($value) > 12) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only' - . ' contain a maximum of 12 terms'); - } - $concat = implode(',', $value); - if ($this->stringWrapper->strlen($concat) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "keywords" may only' - . ' have a concatenated length of 255 chars where terms are delimited' - . ' by a comma'); - } - $this->data['keywords'] = $value; - return $this; - } - - /** - * Set new feed URL - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesNewFeedUrl($value) - { - if (!Uri::factory($value)->isValid()) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "newFeedUrl" may only' - . ' be a valid URI/IRI'); - } - $this->data['newFeedUrl'] = $value; - return $this; - } - - /** - * Add feed owners - * - * @param array $values - * @return Feed - */ - public function addItunesOwners(array $values) - { - foreach ($values as $value) { - $this->addItunesOwner($value); - } - return $this; - } - - /** - * Add feed owner - * - * @param array $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function addItunesOwner(array $value) - { - if (!isset($value['name']) || !isset($value['email'])) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "owner" must' - . ' be an array containing keys "name" and "email"'); - } - if ($this->stringWrapper->strlen($value['name']) > 255 - || $this->stringWrapper->strlen($value['email']) > 255 - ) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: any "owner" may only' - . ' contain a maximum of 255 characters each for "name" and "email"'); - } - if (!isset($this->data['owners'])) { - $this->data['owners'] = array(); - } - $this->data['owners'][] = $value; - return $this; - } - - /** - * Set feed subtitle - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesSubtitle($value) - { - if ($this->stringWrapper->strlen($value) > 255) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "subtitle" may only' - . ' contain a maximum of 255 characters'); - } - $this->data['subtitle'] = $value; - return $this; - } - - /** - * Set feed summary - * - * @param string $value - * @return Feed - * @throws Writer\Exception\InvalidArgumentException - */ - public function setItunesSummary($value) - { - if ($this->stringWrapper->strlen($value) > 4000) { - throw new Writer\Exception\InvalidArgumentException('invalid parameter: "summary" may only' - . ' contain a maximum of 4000 characters'); - } - $this->data['summary'] = $value; - return $this; - } - - /** - * Overloading: proxy to internal setters - * - * @param string $method - * @param array $params - * @return mixed - * @throws Writer\Exception\BadMethodCallException - */ - public function __call($method, array $params) - { - $point = lcfirst(substr($method, 9)); - if (!method_exists($this, 'setItunes' . ucfirst($point)) - && !method_exists($this, 'addItunes' . ucfirst($point)) - ) { - throw new Writer\Exception\BadMethodCallException( - 'invalid method: ' . $method - ); - } - if (!array_key_exists($point, $this->data) || empty($this->data[$point])) { - return null; - } - return $this->data[$point]; - } -} diff --git a/3rdparty/ZendFeed/Writer/Extension/ITunes/Renderer/Entry.php b/3rdparty/ZendFeed/Writer/Extension/ITunes/Renderer/Entry.php deleted file mode 100644 index bc57d1daa..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/ITunes/Renderer/Entry.php +++ /dev/null @@ -1,200 +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\Writer\Extension\ITunes\Renderer; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer\Extension; - -/** -*/ -class Entry extends Extension\AbstractRenderer -{ - /** - * Set to TRUE if a rendering method actually renders something. This - * is used to prevent premature appending of a XML namespace declaration - * until an element which requires it is actually appended. - * - * @var bool - */ - protected $called = false; - - /** - * Render entry - * - * @return void - */ - public function render() - { - $this->_setAuthors($this->dom, $this->base); - $this->_setBlock($this->dom, $this->base); - $this->_setDuration($this->dom, $this->base); - $this->_setExplicit($this->dom, $this->base); - $this->_setKeywords($this->dom, $this->base); - $this->_setSubtitle($this->dom, $this->base); - $this->_setSummary($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append namespaces to entry root - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:itunes', - 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - } - - /** - * Set entry authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->getDataContainer()->getItunesAuthors(); - if (!$authors || empty($authors)) { - return; - } - foreach ($authors as $author) { - $el = $dom->createElement('itunes:author'); - $text = $dom->createTextNode($author); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - } - - /** - * Set itunes block - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBlock(DOMDocument $dom, DOMElement $root) - { - $block = $this->getDataContainer()->getItunesBlock(); - if ($block === null) { - return; - } - $el = $dom->createElement('itunes:block'); - $text = $dom->createTextNode($block); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set entry duration - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDuration(DOMDocument $dom, DOMElement $root) - { - $duration = $this->getDataContainer()->getItunesDuration(); - if (!$duration) { - return; - } - $el = $dom->createElement('itunes:duration'); - $text = $dom->createTextNode($duration); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set explicit flag - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setExplicit(DOMDocument $dom, DOMElement $root) - { - $explicit = $this->getDataContainer()->getItunesExplicit(); - if ($explicit === null) { - return; - } - $el = $dom->createElement('itunes:explicit'); - $text = $dom->createTextNode($explicit); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set entry keywords - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setKeywords(DOMDocument $dom, DOMElement $root) - { - $keywords = $this->getDataContainer()->getItunesKeywords(); - if (!$keywords || empty($keywords)) { - return; - } - $el = $dom->createElement('itunes:keywords'); - $text = $dom->createTextNode(implode(',', $keywords)); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set entry subtitle - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setSubtitle(DOMDocument $dom, DOMElement $root) - { - $subtitle = $this->getDataContainer()->getItunesSubtitle(); - if (!$subtitle) { - return; - } - $el = $dom->createElement('itunes:subtitle'); - $text = $dom->createTextNode($subtitle); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set entry summary - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setSummary(DOMDocument $dom, DOMElement $root) - { - $summary = $this->getDataContainer()->getItunesSummary(); - if (!$summary) { - return; - } - $el = $dom->createElement('itunes:summary'); - $text = $dom->createTextNode($summary); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } -} diff --git a/3rdparty/ZendFeed/Writer/Extension/ITunes/Renderer/Feed.php b/3rdparty/ZendFeed/Writer/Extension/ITunes/Renderer/Feed.php deleted file mode 100644 index d5b565780..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/ITunes/Renderer/Feed.php +++ /dev/null @@ -1,304 +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\Writer\Extension\ITunes\Renderer; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer\Extension; - -/** -*/ -class Feed extends Extension\AbstractRenderer -{ - - /** - * Set to TRUE if a rendering method actually renders something. This - * is used to prevent premature appending of a XML namespace declaration - * until an element which requires it is actually appended. - * - * @var bool - */ - protected $called = false; - - /** - * Render feed - * - * @return void - */ - public function render() - { - $this->_setAuthors($this->dom, $this->base); - $this->_setBlock($this->dom, $this->base); - $this->_setCategories($this->dom, $this->base); - $this->_setImage($this->dom, $this->base); - $this->_setDuration($this->dom, $this->base); - $this->_setExplicit($this->dom, $this->base); - $this->_setKeywords($this->dom, $this->base); - $this->_setNewFeedUrl($this->dom, $this->base); - $this->_setOwners($this->dom, $this->base); - $this->_setSubtitle($this->dom, $this->base); - $this->_setSummary($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append feed namespaces - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:itunes', - 'http://www.itunes.com/dtds/podcast-1.0.dtd'); - } - - /** - * Set feed authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->getDataContainer()->getItunesAuthors(); - if (!$authors || empty($authors)) { - return; - } - foreach ($authors as $author) { - $el = $dom->createElement('itunes:author'); - $text = $dom->createTextNode($author); - $el->appendChild($text); - $root->appendChild($el); - } - $this->called = true; - } - - /** - * Set feed itunes block - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBlock(DOMDocument $dom, DOMElement $root) - { - $block = $this->getDataContainer()->getItunesBlock(); - if ($block === null) { - return; - } - $el = $dom->createElement('itunes:block'); - $text = $dom->createTextNode($block); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $cats = $this->getDataContainer()->getItunesCategories(); - if (!$cats || empty($cats)) { - return; - } - foreach ($cats as $key => $cat) { - if (!is_array($cat)) { - $el = $dom->createElement('itunes:category'); - $el->setAttribute('text', $cat); - $root->appendChild($el); - } else { - $el = $dom->createElement('itunes:category'); - $el->setAttribute('text', $key); - $root->appendChild($el); - foreach ($cat as $subcat) { - $el2 = $dom->createElement('itunes:category'); - $el2->setAttribute('text', $subcat); - $el->appendChild($el2); - } - } - } - $this->called = true; - } - - /** - * Set feed image (icon) - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setImage(DOMDocument $dom, DOMElement $root) - { - $image = $this->getDataContainer()->getItunesImage(); - if (!$image) { - return; - } - $el = $dom->createElement('itunes:image'); - $el->setAttribute('href', $image); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed cumulative duration - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDuration(DOMDocument $dom, DOMElement $root) - { - $duration = $this->getDataContainer()->getItunesDuration(); - if (!$duration) { - return; - } - $el = $dom->createElement('itunes:duration'); - $text = $dom->createTextNode($duration); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set explicit flag - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setExplicit(DOMDocument $dom, DOMElement $root) - { - $explicit = $this->getDataContainer()->getItunesExplicit(); - if ($explicit === null) { - return; - } - $el = $dom->createElement('itunes:explicit'); - $text = $dom->createTextNode($explicit); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed keywords - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setKeywords(DOMDocument $dom, DOMElement $root) - { - $keywords = $this->getDataContainer()->getItunesKeywords(); - if (!$keywords || empty($keywords)) { - return; - } - $el = $dom->createElement('itunes:keywords'); - $text = $dom->createTextNode(implode(',', $keywords)); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed's new URL - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setNewFeedUrl(DOMDocument $dom, DOMElement $root) - { - $url = $this->getDataContainer()->getItunesNewFeedUrl(); - if (!$url) { - return; - } - $el = $dom->createElement('itunes:new-feed-url'); - $text = $dom->createTextNode($url); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed owners - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setOwners(DOMDocument $dom, DOMElement $root) - { - $owners = $this->getDataContainer()->getItunesOwners(); - if (!$owners || empty($owners)) { - return; - } - foreach ($owners as $owner) { - $el = $dom->createElement('itunes:owner'); - $name = $dom->createElement('itunes:name'); - $text = $dom->createTextNode($owner['name']); - $name->appendChild($text); - $email = $dom->createElement('itunes:email'); - $text = $dom->createTextNode($owner['email']); - $email->appendChild($text); - $root->appendChild($el); - $el->appendChild($name); - $el->appendChild($email); - } - $this->called = true; - } - - /** - * Set feed subtitle - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setSubtitle(DOMDocument $dom, DOMElement $root) - { - $subtitle = $this->getDataContainer()->getItunesSubtitle(); - if (!$subtitle) { - return; - } - $el = $dom->createElement('itunes:subtitle'); - $text = $dom->createTextNode($subtitle); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } - - /** - * Set feed summary - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setSummary(DOMDocument $dom, DOMElement $root) - { - $summary = $this->getDataContainer()->getItunesSummary(); - if (!$summary) { - return; - } - $el = $dom->createElement('itunes:summary'); - $text = $dom->createTextNode($summary); - $el->appendChild($text); - $root->appendChild($el); - $this->called = true; - } -} diff --git a/3rdparty/ZendFeed/Writer/Extension/RendererInterface.php b/3rdparty/ZendFeed/Writer/Extension/RendererInterface.php deleted file mode 100644 index e72346c20..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/RendererInterface.php +++ /dev/null @@ -1,49 +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\Writer\Extension; - -use DOMDocument; -use DOMElement; - -/** -*/ -interface RendererInterface -{ - /** - * Set the data container - * - * @param mixed $container - * @return void - */ - public function setDataContainer($container); - - /** - * Retrieve container - * - * @return mixed - */ - public function getDataContainer(); - - /** - * Set DOMDocument and DOMElement on which to operate - * - * @param DOMDocument $dom - * @param DOMElement $base - * @return void - */ - public function setDomDocument(DOMDocument $dom, DOMElement $base); - - /** - * Render - * - * @return void - */ - public function render(); -} diff --git a/3rdparty/ZendFeed/Writer/Extension/Slash/Renderer/Entry.php b/3rdparty/ZendFeed/Writer/Extension/Slash/Renderer/Entry.php deleted file mode 100644 index cb08828cc..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/Slash/Renderer/Entry.php +++ /dev/null @@ -1,75 +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\Writer\Extension\Slash\Renderer; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer\Extension; - -/** -*/ -class Entry extends Extension\AbstractRenderer -{ - - /** - * Set to TRUE if a rendering method actually renders something. This - * is used to prevent premature appending of a XML namespace declaration - * until an element which requires it is actually appended. - * - * @var bool - */ - protected $called = false; - - /** - * Render entry - * - * @return void - */ - public function render() - { - if (strtolower($this->getType()) == 'atom') { - return; // RSS 2.0 only - } - $this->_setCommentCount($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append entry namespaces - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:slash', - 'http://purl.org/rss/1.0/modules/slash/'); - } - - /** - * Set entry comment count - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentCount(DOMDocument $dom, DOMElement $root) - { - $count = $this->getDataContainer()->getCommentCount(); - if (!$count) { - $count = 0; - } - $tcount = $this->dom->createElement('slash:comments'); - $tcount->nodeValue = $count; - $root->appendChild($tcount); - $this->called = true; - } -} diff --git a/3rdparty/ZendFeed/Writer/Extension/Threading/Renderer/Entry.php b/3rdparty/ZendFeed/Writer/Extension/Threading/Renderer/Entry.php deleted file mode 100644 index bbf4595ed..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/Threading/Renderer/Entry.php +++ /dev/null @@ -1,129 +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\Writer\Extension\Threading\Renderer; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer\Extension; - -/** -*/ -class Entry extends Extension\AbstractRenderer -{ - - /** - * Set to TRUE if a rendering method actually renders something. This - * is used to prevent premature appending of a XML namespace declaration - * until an element which requires it is actually appended. - * - * @var bool - */ - protected $called = false; - - /** - * Render entry - * - * @return void - */ - public function render() - { - if (strtolower($this->getType()) == 'rss') { - return; // Atom 1.0 only - } - $this->_setCommentLink($this->dom, $this->base); - $this->_setCommentFeedLinks($this->dom, $this->base); - $this->_setCommentCount($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append entry namespaces - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:thr', - 'http://purl.org/syndication/thread/1.0'); - } - - /** - * Set comment link - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentLink(DOMDocument $dom, DOMElement $root) - { - $link = $this->getDataContainer()->getCommentLink(); - if (!$link) { - return; - } - $clink = $this->dom->createElement('link'); - $clink->setAttribute('rel', 'replies'); - $clink->setAttribute('type', 'text/html'); - $clink->setAttribute('href', $link); - $count = $this->getDataContainer()->getCommentCount(); - if ($count !== null) { - $clink->setAttribute('thr:count', $count); - } - $root->appendChild($clink); - $this->called = true; - } - - /** - * Set comment feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentFeedLinks(DOMDocument $dom, DOMElement $root) - { - $links = $this->getDataContainer()->getCommentFeedLinks(); - if (!$links || empty($links)) { - return; - } - foreach ($links as $link) { - $flink = $this->dom->createElement('link'); - $flink->setAttribute('rel', 'replies'); - $flink->setAttribute('type', 'application/' . $link['type'] . '+xml'); - $flink->setAttribute('href', $link['uri']); - $count = $this->getDataContainer()->getCommentCount(); - if ($count !== null) { - $flink->setAttribute('thr:count', $count); - } - $root->appendChild($flink); - $this->called = true; - } - } - - /** - * Set entry comment count - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentCount(DOMDocument $dom, DOMElement $root) - { - $count = $this->getDataContainer()->getCommentCount(); - if ($count === null) { - return; - } - $tcount = $this->dom->createElement('thr:total'); - $tcount->nodeValue = $count; - $root->appendChild($tcount); - $this->called = true; - } -} diff --git a/3rdparty/ZendFeed/Writer/Extension/WellFormedWeb/Renderer/Entry.php b/3rdparty/ZendFeed/Writer/Extension/WellFormedWeb/Renderer/Entry.php deleted file mode 100644 index be13b71d9..000000000 --- a/3rdparty/ZendFeed/Writer/Extension/WellFormedWeb/Renderer/Entry.php +++ /dev/null @@ -1,80 +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\Writer\Extension\WellFormedWeb\Renderer; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer\Extension; - -/** -*/ -class Entry extends Extension\AbstractRenderer -{ - - /** - * Set to TRUE if a rendering method actually renders something. This - * is used to prevent premature appending of a XML namespace declaration - * until an element which requires it is actually appended. - * - * @var bool - */ - protected $called = false; - - /** - * Render entry - * - * @return void - */ - public function render() - { - if (strtolower($this->getType()) == 'atom') { - return; // RSS 2.0 only - } - $this->_setCommentFeedLinks($this->dom, $this->base); - if ($this->called) { - $this->_appendNamespaces(); - } - } - - /** - * Append entry namespaces - * - * @return void - */ - protected function _appendNamespaces() - { - $this->getRootElement()->setAttribute('xmlns:wfw', - 'http://wellformedweb.org/CommentAPI/'); - } - - /** - * Set entry comment feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentFeedLinks(DOMDocument $dom, DOMElement $root) - { - $links = $this->getDataContainer()->getCommentFeedLinks(); - if (!$links || empty($links)) { - return; - } - foreach ($links as $link) { - if ($link['type'] == 'rss') { - $flink = $this->dom->createElement('wfw:commentRss'); - $text = $dom->createTextNode($link['uri']); - $flink->appendChild($text); - $root->appendChild($flink); - } - } - $this->called = true; - } -} diff --git a/3rdparty/ZendFeed/Writer/ExtensionManager.php b/3rdparty/ZendFeed/Writer/ExtensionManager.php deleted file mode 100644 index 77d49a0dc..000000000 --- a/3rdparty/ZendFeed/Writer/ExtensionManager.php +++ /dev/null @@ -1,80 +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\Writer; - -/** - * Default implementation of ExtensionManagerInterface - * - * Decorator of ExtensionPluginManager. - */ -class ExtensionManager implements ExtensionManagerInterface -{ - protected $pluginManager; - - /** - * Constructor - * - * Seeds the extension manager with a plugin manager; if none provided, - * creates an instance. - * - * @param null|ExtensionPluginManager $pluginManager - */ - public function __construct(ExtensionPluginManager $pluginManager = null) - { - if (null === $pluginManager) { - $pluginManager = new ExtensionPluginManager(); - } - $this->pluginManager = $pluginManager; - } - - /** - * Method overloading - * - * Proxy to composed ExtensionPluginManager instance. - * - * @param string $method - * @param array $args - * @return mixed - * @throws Exception\BadMethodCallException - */ - public function __call($method, $args) - { - if (!method_exists($this->pluginManager, $method)) { - throw new Exception\BadMethodCallException(sprintf( - 'Method by name of %s does not exist in %s', - $method, - __CLASS__ - )); - } - return call_user_func_array(array($this->pluginManager, $method), $args); - } - - /** - * Get the named extension - * - * @param string $name - * @return Extension\AbstractRenderer - */ - public function get($name) - { - return $this->pluginManager->get($name); - } - - /** - * Do we have the named extension? - * - * @param string $name - * @return bool - */ - public function has($name) - { - return $this->pluginManager->has($name); - } -} diff --git a/3rdparty/ZendFeed/Writer/ExtensionManagerInterface.php b/3rdparty/ZendFeed/Writer/ExtensionManagerInterface.php deleted file mode 100644 index 0f7e023fe..000000000 --- a/3rdparty/ZendFeed/Writer/ExtensionManagerInterface.php +++ /dev/null @@ -1,29 +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\Writer; - -interface ExtensionManagerInterface -{ - /** - * Do we have the extension? - * - * @param string $extension - * @return bool - */ - public function has($extension); - - /** - * Retrieve the extension - * - * @param string $extension - * @return mixed - */ - public function get($extension); -} diff --git a/3rdparty/ZendFeed/Writer/ExtensionPluginManager.php b/3rdparty/ZendFeed/Writer/ExtensionPluginManager.php deleted file mode 100644 index 1155c84d2..000000000 --- a/3rdparty/ZendFeed/Writer/ExtensionPluginManager.php +++ /dev/null @@ -1,80 +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\Writer; - -use Zend\ServiceManager\AbstractPluginManager; - -/** - * Plugin manager implementation for feed writer extensions - * - * Validation checks that we have an Entry, Feed, or Extension\AbstractRenderer. - */ -class ExtensionPluginManager extends AbstractPluginManager -{ - /** - * Default set of extension classes - * - * @var array - */ - protected $invokableClasses = array( - 'atomrendererfeed' => 'Zend\Feed\Writer\Extension\Atom\Renderer\Feed', - 'contentrendererentry' => 'Zend\Feed\Writer\Extension\Content\Renderer\Entry', - 'dublincorerendererentry' => 'Zend\Feed\Writer\Extension\DublinCore\Renderer\Entry', - 'dublincorerendererfeed' => 'Zend\Feed\Writer\Extension\DublinCore\Renderer\Feed', - 'itunesentry' => 'Zend\Feed\Writer\Extension\ITunes\Entry', - 'itunesfeed' => 'Zend\Feed\Writer\Extension\ITunes\Feed', - 'itunesrendererentry' => 'Zend\Feed\Writer\Extension\ITunes\Renderer\Entry', - 'itunesrendererfeed' => 'Zend\Feed\Writer\Extension\ITunes\Renderer\Feed', - 'slashrendererentry' => 'Zend\Feed\Writer\Extension\Slash\Renderer\Entry', - 'threadingrendererentry' => 'Zend\Feed\Writer\Extension\Threading\Renderer\Entry', - 'wellformedwebrendererentry' => 'Zend\Feed\Writer\Extension\WellFormedWeb\Renderer\Entry', - ); - - /** - * Do not share instances - * - * @var bool - */ - protected $shareByDefault = false; - - /** - * Validate the plugin - * - * Checks that the extension loaded is of a valid type. - * - * @param mixed $plugin - * @return void - * @throws Exception\InvalidArgumentException if invalid - */ - public function validatePlugin($plugin) - { - if ($plugin instanceof Extension\AbstractRenderer) { - // we're okay - return; - } - - if ('Feed' == substr(get_class($plugin), -4)) { - // we're okay - return; - } - - if ('Entry' == substr(get_class($plugin), -5)) { - // we're okay - return; - } - - throw new Exception\InvalidArgumentException(sprintf( - 'Plugin of type %s is invalid; must implement %s\Extension\RendererInterface ' - . 'or the classname must end in "Feed" or "Entry"', - (is_object($plugin) ? get_class($plugin) : gettype($plugin)), - __NAMESPACE__ - )); - } -} diff --git a/3rdparty/ZendFeed/Writer/Feed.php b/3rdparty/ZendFeed/Writer/Feed.php deleted file mode 100644 index 99f2698a2..000000000 --- a/3rdparty/ZendFeed/Writer/Feed.php +++ /dev/null @@ -1,240 +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\Writer; - -use Countable; -use Iterator; - -/** -*/ -class Feed extends AbstractFeed implements Iterator, Countable -{ - - /** - * Contains all entry objects - * - * @var array - */ - protected $entries = array(); - - /** - * A pointer for the iterator to keep track of the entries array - * - * @var int - */ - protected $entriesKey = 0; - - /** - * Creates a new Zend\Feed\Writer\Entry data container for use. This is NOT - * added to the current feed automatically, but is necessary to create a - * container with some initial values preset based on the current feed data. - * - * @return \Zend\Feed\Writer\Entry - */ - public function createEntry() - { - $entry = new Entry; - if ($this->getEncoding()) { - $entry->setEncoding($this->getEncoding()); - } - $entry->setType($this->getType()); - return $entry; - } - - /** - * Appends a Zend\Feed\Writer\Deleted object representing a new entry tombstone - * to the feed data container's internal group of entries. - * - * @param Deleted $deleted - * @return void - */ - public function addTombstone(Deleted $deleted) - { - $this->entries[] = $deleted; - } - - /** - * Creates a new Zend\Feed\Writer\Deleted data container for use. This is NOT - * added to the current feed automatically, but is necessary to create a - * container with some initial values preset based on the current feed data. - * - * @return Deleted - */ - public function createTombstone() - { - $deleted = new Deleted; - if ($this->getEncoding()) { - $deleted->setEncoding($this->getEncoding()); - } - $deleted->setType($this->getType()); - return $deleted; - } - - /** - * Appends a Zend\Feed\Writer\Entry object representing a new entry/item - * the feed data container's internal group of entries. - * - * @param Entry $entry - * @return Feed - */ - public function addEntry(Entry $entry) - { - $this->entries[] = $entry; - return $this; - } - - /** - * Removes a specific indexed entry from the internal queue. Entries must be - * added to a feed container in order to be indexed. - * - * @param int $index - * @throws Exception\InvalidArgumentException - * @return Feed - */ - public function removeEntry($index) - { - if (!isset($this->entries[$index])) { - throw new Exception\InvalidArgumentException('Undefined index: ' . $index . '. Entry does not exist.'); - } - unset($this->entries[$index]); - - return $this; - } - - /** - * Retrieve a specific indexed entry from the internal queue. Entries must be - * added to a feed container in order to be indexed. - * - * @param int $index - * @throws Exception\InvalidArgumentException - */ - public function getEntry($index = 0) - { - if (isset($this->entries[$index])) { - return $this->entries[$index]; - } - throw new Exception\InvalidArgumentException('Undefined index: ' . $index . '. Entry does not exist.'); - } - - /** - * Orders all indexed entries by date, thus offering date ordered readable - * content where a parser (or Homo Sapien) ignores the generic rule that - * XML element order is irrelevant and has no intrinsic meaning. - * - * Using this method will alter the original indexation. - * - * @return Feed - */ - public function orderByDate() - { - /** - * Could do with some improvement for performance perhaps - */ - $timestamp = time(); - $entries = array(); - foreach ($this->entries as $entry) { - if ($entry->getDateModified()) { - $timestamp = (int) $entry->getDateModified()->getTimestamp(); - } elseif ($entry->getDateCreated()) { - $timestamp = (int) $entry->getDateCreated()->getTimestamp(); - } - $entries[$timestamp] = $entry; - } - krsort($entries, SORT_NUMERIC); - $this->entries = array_values($entries); - - return $this; - } - - /** - * Get the number of feed entries. - * Required by the Iterator interface. - * - * @return int - */ - public function count() - { - return count($this->entries); - } - - /** - * Return the current entry - * - * @return Entry - */ - public function current() - { - return $this->entries[$this->key()]; - } - - /** - * Return the current feed key - * - * @return mixed - */ - public function key() - { - return $this->entriesKey; - } - - /** - * Move the feed pointer forward - * - * @return void - */ - public function next() - { - ++$this->entriesKey; - } - - /** - * Reset the pointer in the feed object - * - * @return void - */ - public function rewind() - { - $this->entriesKey = 0; - } - - /** - * Check to see if the iterator is still valid - * - * @return bool - */ - public function valid() - { - return 0 <= $this->entriesKey && $this->entriesKey < $this->count(); - } - - /** - * Attempt to build and return the feed resulting from the data set - * - * @param string $type The feed type "rss" or "atom" to export as - * @param bool $ignoreExceptions - * @throws Exception\InvalidArgumentException - * @return string - */ - public function export($type, $ignoreExceptions = false) - { - $this->setType(strtolower($type)); - $type = ucfirst($this->getType()); - if ($type !== 'Rss' && $type !== 'Atom') { - throw new Exception\InvalidArgumentException('Invalid feed type specified: ' . $type . '.' - . ' Should be one of "rss" or "atom".'); - } - $renderClass = 'Zend\\Feed\\Writer\\Renderer\\Feed\\' . $type; - $renderer = new $renderClass($this); - if ($ignoreExceptions) { - $renderer->ignoreExceptions(); - } - return $renderer->render()->saveXml(); - } -} diff --git a/3rdparty/ZendFeed/Writer/FeedFactory.php b/3rdparty/ZendFeed/Writer/FeedFactory.php deleted file mode 100644 index 15e7a3468..000000000 --- a/3rdparty/ZendFeed/Writer/FeedFactory.php +++ /dev/null @@ -1,127 +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\Writer; - -use Traversable; - -abstract class FeedFactory -{ - /** - * Create and return a Feed based on data provided. - * - * @param array|Traversable $data - * @throws Exception\InvalidArgumentException - * @return Feed - */ - public static function factory($data) - { - if (!is_array($data) && !$data instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects an array or Traversable argument; received "%s"', - __METHOD__, - (is_object($data) ? get_class($data) : gettype($data)) - )); - } - - $feed = new Feed(); - - foreach ($data as $key => $value) { - // Setters - $key = static::convertKey($key); - $method = 'set' . $key; - if (method_exists($feed, $method)) { - switch ($method) { - case 'setfeedlink': - if (!is_array($value)) { - // Need an array - break; - } - if (!array_key_exists('link', $value) || !array_key_exists('type', $value)) { - // Need both keys to set this correctly - break; - } - $feed->setFeedLink($value['link'], $value['type']); - break; - default: - $feed->$method($value); - break; - } - continue; - } - - // Entries - if ('entries' == $key) { - static::createEntries($value, $feed); - continue; - } - } - - return $feed; - } - - /** - * Normalize a key - * - * @param string $key - * @return string - */ - protected static function convertKey($key) - { - $key = str_replace('_', '', strtolower($key)); - return $key; - } - - /** - * Create and attach entries to a feed - * - * @param array|Traversable $entries - * @param Feed $feed - * @throws Exception\InvalidArgumentException - * @return void - */ - protected static function createEntries($entries, Feed $feed) - { - if (!is_array($entries) && !$entries instanceof Traversable) { - throw new Exception\InvalidArgumentException(sprintf( - '%s::factory expects the "entries" value to be an array or Traversable; received "%s"', - get_called_class(), - (is_object($entries) ? get_class($entries) : gettype($entries)) - )); - } - - foreach ($entries as $data) { - if (!is_array($data) && !$data instanceof Traversable && !$data instanceof Entry) { - throw new Exception\InvalidArgumentException(sprintf( - '%s expects an array, Traversable, or Zend\Feed\Writer\Entry argument; received "%s"', - __METHOD__, - (is_object($data) ? get_class($data) : gettype($data)) - )); - } - - // Use case 1: Entry item - if ($data instanceof Entry) { - $feed->addEntry($data); - continue; - } - - // Use case 2: iterate item and populate entry - $entry = $feed->createEntry(); - foreach ($data as $key => $value) { - $key = static::convertKey($key); - $method = 'set' . $key; - if (!method_exists($entry, $method)) { - continue; - } - $entry->$method($value); - } - $feed->addEntry($entry); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/AbstractRenderer.php b/3rdparty/ZendFeed/Writer/Renderer/AbstractRenderer.php deleted file mode 100644 index e10450198..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/AbstractRenderer.php +++ /dev/null @@ -1,233 +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\Writer\Renderer; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer; - -/** -*/ -class AbstractRenderer -{ - /** - * Extensions - * @var array - */ - protected $extensions = array(); - - /** - * @var Writer\AbstractFeed - */ - protected $container = null; - - /** - * @var DOMDocument - */ - protected $dom = null; - - /** - * @var bool - */ - protected $ignoreExceptions = false; - - /** - * @var array - */ - protected $exceptions = array(); - - /** - * Encoding of all text values - * - * @var string - */ - protected $encoding = 'UTF-8'; - - /** - * Holds the value "atom" or "rss" depending on the feed type set when - * when last exported. - * - * @var string - */ - protected $type = null; - - /** - * @var DOMElement - */ - protected $rootElement = null; - - /** - * Constructor - * - * @param Writer\AbstractFeed $container - */ - public function __construct($container) - { - $this->container = $container; - $this->setType($container->getType()); - $this->_loadExtensions(); - } - - /** - * Save XML to string - * - * @return string - */ - public function saveXml() - { - return $this->getDomDocument()->saveXml(); - } - - /** - * Get DOM document - * - * @return DOMDocument - */ - public function getDomDocument() - { - return $this->dom; - } - - /** - * Get document element from DOM - * - * @return DOMElement - */ - public function getElement() - { - return $this->getDomDocument()->documentElement; - } - - /** - * Get data container of items being rendered - * - * @return Writer\AbstractFeed - */ - public function getDataContainer() - { - return $this->container; - } - - /** - * Set feed encoding - * - * @param string $enc - * @return AbstractRenderer - */ - public function setEncoding($enc) - { - $this->encoding = $enc; - return $this; - } - - /** - * Get feed encoding - * - * @return string - */ - public function getEncoding() - { - return $this->encoding; - } - - /** - * Indicate whether or not to ignore exceptions - * - * @param bool $bool - * @return AbstractRenderer - * @throws Writer\Exception\InvalidArgumentException - */ - public function ignoreExceptions($bool = true) - { - if (!is_bool($bool)) { - throw new Writer\Exception\InvalidArgumentException('Invalid parameter: $bool. Should be TRUE or FALSE (defaults to TRUE if null)'); - } - $this->ignoreExceptions = $bool; - return $this; - } - - /** - * Get exception list - * - * @return array - */ - public function getExceptions() - { - return $this->exceptions; - } - - /** - * Set the current feed type being exported to "rss" or "atom". This allows - * other objects to gracefully choose whether to execute or not, depending - * on their appropriateness for the current type, e.g. renderers. - * - * @param string $type - */ - public function setType($type) - { - $this->type = $type; - } - - /** - * Retrieve the current or last feed type exported. - * - * @return string Value will be "rss" or "atom" - */ - public function getType() - { - return $this->type; - } - - /** - * Sets the absolute root element for the XML feed being generated. This - * helps simplify the appending of namespace declarations, but also ensures - * namespaces are added to the root element - not scattered across the entire - * XML file - may assist namespace unsafe parsers and looks pretty ;). - * - * @param DOMElement $root - */ - public function setRootElement(DOMElement $root) - { - $this->rootElement = $root; - } - - /** - * Retrieve the absolute root element for the XML feed being generated. - * - * @return DOMElement - */ - public function getRootElement() - { - return $this->rootElement; - } - - /** - * Load extensions from Zend\Feed\Writer\Writer - * - * @return void - */ - protected function _loadExtensions() - { - Writer\Writer::registerCoreExtensions(); - $manager = Writer\Writer::getExtensionManager(); - $all = Writer\Writer::getExtensions(); - if (stripos(get_class($this), 'entry')) { - $exts = $all['entryRenderer']; - } else { - $exts = $all['feedRenderer']; - } - foreach ($exts as $extension) { - $plugin = $manager->get($extension); - $plugin->setDataContainer($this->getDataContainer()); - $plugin->setEncoding($this->getEncoding()); - $this->extensions[$extension] = $plugin; - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/Entry/Atom.php b/3rdparty/ZendFeed/Writer/Renderer/Entry/Atom.php deleted file mode 100644 index c7fc4be22..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/Entry/Atom.php +++ /dev/null @@ -1,425 +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\Writer\Renderer\Entry; - -use DateTime; -use DOMDocument; -use DOMElement; -use Zend\Feed\Uri; -use Zend\Feed\Writer; -use Zend\Feed\Writer\Renderer; -use Zend\Validator; - -class Atom extends Renderer\AbstractRenderer implements Renderer\RendererInterface -{ - /** - * Constructor - * - * @param Writer\Entry $container - */ - public function __construct(Writer\Entry $container) - { - parent::__construct($container); - } - - /** - * Render atom entry - * - * @return Atom - */ - public function render() - { - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $entry = $this->dom->createElementNS(Writer\Writer::NAMESPACE_ATOM_10, 'entry'); - $this->dom->appendChild($entry); - - $this->_setSource($this->dom, $entry); - $this->_setTitle($this->dom, $entry); - $this->_setDescription($this->dom, $entry); - $this->_setDateCreated($this->dom, $entry); - $this->_setDateModified($this->dom, $entry); - $this->_setLink($this->dom, $entry); - $this->_setId($this->dom, $entry); - $this->_setAuthors($this->dom, $entry); - $this->_setEnclosure($this->dom, $entry); - $this->_setContent($this->dom, $entry); - $this->_setCategories($this->dom, $entry); - - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDOMDocument($this->getDOMDocument(), $entry); - $ext->render(); - } - - return $this; - } - - /** - * Set entry title - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setTitle(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getTitle()) { - $message = 'Atom 1.0 entry elements MUST contain exactly one' - . ' atom:title element but a title has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $title = $dom->createElement('title'); - $root->appendChild($title); - $title->setAttribute('type', 'html'); - $cdata = $dom->createCDATASection($this->getDataContainer()->getTitle()); - $title->appendChild($cdata); - } - - /** - * Set entry description - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDescription(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription()) { - return; // unless src content or base64 - } - $subtitle = $dom->createElement('summary'); - $root->appendChild($subtitle); - $subtitle->setAttribute('type', 'html'); - $cdata = $dom->createCDATASection( - $this->getDataContainer()->getDescription() - ); - $subtitle->appendChild($cdata); - } - - /** - * Set date entry was modified - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setDateModified(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateModified()) { - $message = 'Atom 1.0 entry elements MUST contain exactly one' - . ' atom:updated element but a modification date has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $updated = $dom->createElement('updated'); - $root->appendChild($updated); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateModified()->format(DateTime::ISO8601) - ); - $updated->appendChild($text); - } - - /** - * Set date entry was created - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateCreated(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateCreated()) { - return; - } - $el = $dom->createElement('published'); - $root->appendChild($el); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateCreated()->format(DateTime::ISO8601) - ); - $el->appendChild($text); - } - - /** - * Set entry authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->container->getAuthors(); - if ((!$authors || empty($authors))) { - /** - * This will actually trigger an Exception at the feed level if - * a feed level author is not set. - */ - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('author'); - $name = $this->dom->createElement('name'); - $author->appendChild($name); - $root->appendChild($author); - $text = $dom->createTextNode($data['name']); - $name->appendChild($text); - if (array_key_exists('email', $data)) { - $email = $this->dom->createElement('email'); - $author->appendChild($email); - $text = $dom->createTextNode($data['email']); - $email->appendChild($text); - } - if (array_key_exists('uri', $data)) { - $uri = $this->dom->createElement('uri'); - $author->appendChild($uri); - $text = $dom->createTextNode($data['uri']); - $uri->appendChild($text); - } - } - } - - /** - * Set entry enclosure - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setEnclosure(DOMDocument $dom, DOMElement $root) - { - $data = $this->container->getEnclosure(); - if ((!$data || empty($data))) { - return; - } - $enclosure = $this->dom->createElement('link'); - $enclosure->setAttribute('rel', 'enclosure'); - if (isset($data['type'])) { - $enclosure->setAttribute('type', $data['type']); - } - if (isset($data['length'])) { - $enclosure->setAttribute('length', $data['length']); - } - $enclosure->setAttribute('href', $data['uri']); - $root->appendChild($enclosure); - } - - protected function _setLink(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getLink()) { - return; - } - $link = $dom->createElement('link'); - $root->appendChild($link); - $link->setAttribute('rel', 'alternate'); - $link->setAttribute('type', 'text/html'); - $link->setAttribute('href', $this->getDataContainer()->getLink()); - } - - /** - * Set entry identifier - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setId(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getId() - && !$this->getDataContainer()->getLink()) { - $message = 'Atom 1.0 entry elements MUST contain exactly one ' - . 'atom:id element, or as an alternative, we can use the same ' - . 'value as atom:link however neither a suitable link nor an ' - . 'id have been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - if (!$this->getDataContainer()->getId()) { - $this->getDataContainer()->setId( - $this->getDataContainer()->getLink()); - } - if (!Uri::factory($this->getDataContainer()->getId())->isValid() - && !preg_match( - "#^urn:[a-zA-Z0-9][a-zA-Z0-9\-]{1,31}:([a-zA-Z0-9\(\)\+\,\.\:\=\@\;\$\_\!\*\-]|%[0-9a-fA-F]{2})*#", - $this->getDataContainer()->getId()) - && !$this->_validateTagUri($this->getDataContainer()->getId()) - ) { - throw new Writer\Exception\InvalidArgumentException('Atom 1.0 IDs must be a valid URI/IRI'); - } - $id = $dom->createElement('id'); - $root->appendChild($id); - $text = $dom->createTextNode($this->getDataContainer()->getId()); - $id->appendChild($text); - } - - /** - * Validate a URI using the tag scheme (RFC 4151) - * - * @param string $id - * @return bool - */ - protected function _validateTagUri($id) - { - if (preg_match('/^tag:(?P<name>.*),(?P<date>\d{4}-?\d{0,2}-?\d{0,2}):(?P<specific>.*)(.*:)*$/', $id, $matches)) { - $dvalid = false; - $date = $matches['date']; - $d6 = strtotime($date); - if ((strlen($date) == 4) && $date <= date('Y')) { - $dvalid = true; - } elseif ((strlen($date) == 7) && ($d6 < strtotime("now"))) { - $dvalid = true; - } elseif ((strlen($date) == 10) && ($d6 < strtotime("now"))) { - $dvalid = true; - } - $validator = new Validator\EmailAddress; - if ($validator->isValid($matches['name'])) { - $nvalid = true; - } else { - $nvalid = $validator->isValid('info@' . $matches['name']); - } - return $dvalid && $nvalid; - - } - return false; - } - - /** - * Set entry content - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setContent(DOMDocument $dom, DOMElement $root) - { - $content = $this->getDataContainer()->getContent(); - if (!$content && !$this->getDataContainer()->getLink()) { - $message = 'Atom 1.0 entry elements MUST contain exactly one ' - . 'atom:content element, or as an alternative, at least one link ' - . 'with a rel attribute of "alternate" to indicate an alternate ' - . 'method to consume the content.'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - if (!$content) { - return; - } - $element = $dom->createElement('content'); - $element->setAttribute('type', 'xhtml'); - $xhtmlElement = $this->_loadXhtml($content); - $xhtml = $dom->importNode($xhtmlElement, true); - $element->appendChild($xhtml); - $root->appendChild($element); - } - - /** - * Load a HTML string and attempt to normalise to XML - */ - protected function _loadXhtml($content) - { - if (class_exists('tidy', false)) { - $tidy = new \tidy; - $config = array( - 'output-xhtml' => true, - 'show-body-only' => true, - 'quote-nbsp' => false - ); - $encoding = str_replace('-', '', $this->getEncoding()); - $tidy->parseString($content, $config, $encoding); - $tidy->cleanRepair(); - $xhtml = (string) $tidy; - } else { - $xhtml = $content; - } - $xhtml = preg_replace(array( - "/(<[\/]?)([a-zA-Z]+)/" - ), '$1xhtml:$2', $xhtml); - $dom = new DOMDocument('1.0', $this->getEncoding()); - $dom->loadXML('<xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml">' - . $xhtml . '</xhtml:div>'); - return $dom->documentElement; - } - - /** - * Set entry categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $categories = $this->getDataContainer()->getCategories(); - if (!$categories) { - return; - } - foreach ($categories as $cat) { - $category = $dom->createElement('category'); - $category->setAttribute('term', $cat['term']); - if (isset($cat['label'])) { - $category->setAttribute('label', $cat['label']); - } else { - $category->setAttribute('label', $cat['term']); - } - if (isset($cat['scheme'])) { - $category->setAttribute('scheme', $cat['scheme']); - } - $root->appendChild($category); - } - } - - /** - * Append Source element (Atom 1.0 Feed Metadata) - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setSource(DOMDocument $dom, DOMElement $root) - { - $source = $this->getDataContainer()->getSource(); - if (!$source) { - return; - } - $renderer = new Renderer\Feed\AtomSource($source); - $renderer->setType($this->getType()); - $element = $renderer->render()->getElement(); - $imported = $dom->importNode($element, true); - $root->appendChild($imported); - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/Entry/Atom/Deleted.php b/3rdparty/ZendFeed/Writer/Renderer/Entry/Atom/Deleted.php deleted file mode 100644 index 65ace00bd..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/Entry/Atom/Deleted.php +++ /dev/null @@ -1,102 +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\Writer\Renderer\Entry\Atom; - -use DateTime; -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer; -use Zend\Feed\Writer\Renderer; - -class Deleted extends Renderer\AbstractRenderer implements Renderer\RendererInterface -{ - /** - * Constructor - * - * @param Writer\Deleted $container - */ - public function __construct(Writer\Deleted $container) - { - parent::__construct($container); - } - - /** - * Render atom entry - * - * @return Writer\Renderer\Entry\Atom - */ - public function render() - { - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $entry = $this->dom->createElement('at:deleted-entry'); - $this->dom->appendChild($entry); - - $entry->setAttribute('ref', $this->container->getReference()); - $entry->setAttribute('when', $this->container->getWhen()->format(DateTime::ISO8601)); - - $this->_setBy($this->dom, $entry); - $this->_setComment($this->dom, $entry); - - return $this; - } - - /** - * Set tombstone comment - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setComment(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getComment()) { - return; - } - $c = $dom->createElement('at:comment'); - $root->appendChild($c); - $c->setAttribute('type', 'html'); - $cdata = $dom->createCDATASection($this->getDataContainer()->getComment()); - $c->appendChild($cdata); - } - - /** - * Set entry authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBy(DOMDocument $dom, DOMElement $root) - { - $data = $this->container->getBy(); - if ((!$data || empty($data))) { - return; - } - $author = $this->dom->createElement('at:by'); - $name = $this->dom->createElement('name'); - $author->appendChild($name); - $root->appendChild($author); - $text = $dom->createTextNode($data['name']); - $name->appendChild($text); - if (array_key_exists('email', $data)) { - $email = $this->dom->createElement('email'); - $author->appendChild($email); - $text = $dom->createTextNode($data['email']); - $email->appendChild($text); - } - if (array_key_exists('uri', $data)) { - $uri = $this->dom->createElement('uri'); - $author->appendChild($uri); - $text = $dom->createTextNode($data['uri']); - $uri->appendChild($text); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/Entry/AtomDeleted.php b/3rdparty/ZendFeed/Writer/Renderer/Entry/AtomDeleted.php deleted file mode 100644 index 1ed4aa3d9..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/Entry/AtomDeleted.php +++ /dev/null @@ -1,104 +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\Writer\Renderer\Entry; - -use DateTime; -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer; -use Zend\Feed\Writer\Renderer; - -/** -*/ -class AtomDeleted extends Renderer\AbstractRenderer implements Renderer\RendererInterface -{ - /** - * Constructor - * - * @param Writer\Deleted $container - */ - public function __construct(Writer\Deleted $container) - { - parent::__construct($container); - } - - /** - * Render atom entry - * - * @return \Zend\Feed\Writer\Renderer\Entry\Atom - */ - public function render() - { - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $entry = $this->dom->createElement('at:deleted-entry'); - $this->dom->appendChild($entry); - - $entry->setAttribute('ref', $this->container->getReference()); - $entry->setAttribute('when', $this->container->getWhen()->format(DateTime::ISO8601)); - - $this->_setBy($this->dom, $entry); - $this->_setComment($this->dom, $entry); - - return $this; - } - - /** - * Set tombstone comment - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setComment(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getComment()) { - return; - } - $c = $dom->createElement('at:comment'); - $root->appendChild($c); - $c->setAttribute('type', 'html'); - $cdata = $dom->createCDATASection($this->getDataContainer()->getComment()); - $c->appendChild($cdata); - } - - /** - * Set entry authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBy(DOMDocument $dom, DOMElement $root) - { - $data = $this->container->getBy(); - if ((!$data || empty($data))) { - return; - } - $author = $this->dom->createElement('at:by'); - $name = $this->dom->createElement('name'); - $author->appendChild($name); - $root->appendChild($author); - $text = $dom->createTextNode($data['name']); - $name->appendChild($text); - if (array_key_exists('email', $data)) { - $email = $this->dom->createElement('email'); - $author->appendChild($email); - $text = $dom->createTextNode($data['email']); - $email->appendChild($text); - } - if (array_key_exists('uri', $data)) { - $uri = $this->dom->createElement('uri'); - $author->appendChild($uri); - $text = $dom->createTextNode($data['uri']); - $uri->appendChild($text); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/Entry/Rss.php b/3rdparty/ZendFeed/Writer/Renderer/Entry/Rss.php deleted file mode 100644 index 2338cdc21..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/Entry/Rss.php +++ /dev/null @@ -1,329 +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\Writer\Renderer\Entry; - -use DateTime; -use DOMDocument; -use DOMElement; -use Zend\Feed\Uri; -use Zend\Feed\Writer; -use Zend\Feed\Writer\Renderer; - -/** -*/ -class Rss extends Renderer\AbstractRenderer implements Renderer\RendererInterface -{ - /** - * Constructor - * - * @param Writer\Entry $container - */ - public function __construct(Writer\Entry $container) - { - parent::__construct($container); - } - - /** - * Render RSS entry - * - * @return Rss - */ - public function render() - { - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $this->dom->substituteEntities = false; - $entry = $this->dom->createElement('item'); - $this->dom->appendChild($entry); - - $this->_setTitle($this->dom, $entry); - $this->_setDescription($this->dom, $entry); - $this->_setDateCreated($this->dom, $entry); - $this->_setDateModified($this->dom, $entry); - $this->_setLink($this->dom, $entry); - $this->_setId($this->dom, $entry); - $this->_setAuthors($this->dom, $entry); - $this->_setEnclosure($this->dom, $entry); - $this->_setCommentLink($this->dom, $entry); - $this->_setCategories($this->dom, $entry); - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDOMDocument($this->getDOMDocument(), $entry); - $ext->render(); - } - - return $this; - } - - /** - * Set entry title - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setTitle(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription() - && !$this->getDataContainer()->getTitle()) { - $message = 'RSS 2.0 entry elements SHOULD contain exactly one' - . ' title element but a title has not been set. In addition, there' - . ' is no description as required in the absence of a title.'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $title = $dom->createElement('title'); - $root->appendChild($title); - $text = $dom->createTextNode($this->getDataContainer()->getTitle()); - $title->appendChild($text); - } - - /** - * Set entry description - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setDescription(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription() - && !$this->getDataContainer()->getTitle()) { - $message = 'RSS 2.0 entry elements SHOULD contain exactly one' - . ' description element but a description has not been set. In' - . ' addition, there is no title element as required in the absence' - . ' of a description.'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - if (!$this->getDataContainer()->getDescription()) { - return; - } - $subtitle = $dom->createElement('description'); - $root->appendChild($subtitle); - $text = $dom->createCDATASection($this->getDataContainer()->getDescription()); - $subtitle->appendChild($text); - } - - /** - * Set date entry was last modified - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateModified(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateModified()) { - return; - } - - $updated = $dom->createElement('pubDate'); - $root->appendChild($updated); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateModified()->format(DateTime::RSS) - ); - $updated->appendChild($text); - } - - /** - * Set date entry was created - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateCreated(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateCreated()) { - return; - } - if (!$this->getDataContainer()->getDateModified()) { - $this->getDataContainer()->setDateModified( - $this->getDataContainer()->getDateCreated() - ); - } - } - - /** - * Set entry authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->container->getAuthors(); - if ((!$authors || empty($authors))) { - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('author'); - $name = $data['name']; - if (array_key_exists('email', $data)) { - $name = $data['email'] . ' (' . $data['name'] . ')'; - } - $text = $dom->createTextNode($name); - $author->appendChild($text); - $root->appendChild($author); - } - } - - /** - * Set entry enclosure - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setEnclosure(DOMDocument $dom, DOMElement $root) - { - $data = $this->container->getEnclosure(); - if ((!$data || empty($data))) { - return; - } - if (!isset($data['type'])) { - $exception = new Writer\Exception\InvalidArgumentException('Enclosure "type" is not set'); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - if (!isset($data['length'])) { - $exception = new Writer\Exception\InvalidArgumentException('Enclosure "length" is not set'); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - if (isset($data['length']) && (int) $data['length'] <= 0) { - $exception = new Writer\Exception\InvalidArgumentException('Enclosure "length" must be an integer' - . ' indicating the content\'s length in bytes'); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $enclosure = $this->dom->createElement('enclosure'); - $enclosure->setAttribute('type', $data['type']); - $enclosure->setAttribute('length', $data['length']); - $enclosure->setAttribute('url', $data['uri']); - $root->appendChild($enclosure); - } - - /** - * Set link to entry - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLink(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getLink()) { - return; - } - $link = $dom->createElement('link'); - $root->appendChild($link); - $text = $dom->createTextNode($this->getDataContainer()->getLink()); - $link->appendChild($text); - } - - /** - * Set entry identifier - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setId(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getId() - && !$this->getDataContainer()->getLink()) { - return; - } - - $id = $dom->createElement('guid'); - $root->appendChild($id); - if (!$this->getDataContainer()->getId()) { - $this->getDataContainer()->setId( - $this->getDataContainer()->getLink()); - } - $text = $dom->createTextNode($this->getDataContainer()->getId()); - $id->appendChild($text); - if (!Uri::factory($this->getDataContainer()->getId())->isValid()) { - $id->setAttribute('isPermaLink', 'false'); - } - } - - /** - * Set link to entry comments - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCommentLink(DOMDocument $dom, DOMElement $root) - { - $link = $this->getDataContainer()->getCommentLink(); - if (!$link) { - return; - } - $clink = $this->dom->createElement('comments'); - $text = $dom->createTextNode($link); - $clink->appendChild($text); - $root->appendChild($clink); - } - - /** - * Set entry categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $categories = $this->getDataContainer()->getCategories(); - if (!$categories) { - return; - } - foreach ($categories as $cat) { - $category = $dom->createElement('category'); - if (isset($cat['scheme'])) { - $category->setAttribute('domain', $cat['scheme']); - } - $text = $dom->createCDATASection($cat['term']); - $category->appendChild($text); - $root->appendChild($category); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/Feed/AbstractAtom.php b/3rdparty/ZendFeed/Writer/Renderer/Feed/AbstractAtom.php deleted file mode 100644 index e7ad9f56b..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/Feed/AbstractAtom.php +++ /dev/null @@ -1,403 +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\Writer\Renderer\Feed; - -use DateTime; -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer; -use Zend\Feed\Writer\Renderer; -use Zend\Feed\Writer\Version; - -/** -*/ -class AbstractAtom extends Renderer\AbstractRenderer -{ - /** - * Constructor - * - * @param Writer\AbstractFeed $container - */ - public function __construct($container) - { - parent::__construct($container); - } - - /** - * Set feed language - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLanguage(DOMDocument $dom, DOMElement $root) - { - if ($this->getDataContainer()->getLanguage()) { - $root->setAttribute('xml:lang', $this->getDataContainer() - ->getLanguage()); - } - } - - /** - * Set feed title - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setTitle(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getTitle()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one' - . ' atom:title element but a title has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $title = $dom->createElement('title'); - $root->appendChild($title); - $title->setAttribute('type', 'text'); - $text = $dom->createTextNode($this->getDataContainer()->getTitle()); - $title->appendChild($text); - } - - /** - * Set feed description - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDescription(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription()) { - return; - } - $subtitle = $dom->createElement('subtitle'); - $root->appendChild($subtitle); - $subtitle->setAttribute('type', 'text'); - $text = $dom->createTextNode($this->getDataContainer()->getDescription()); - $subtitle->appendChild($text); - } - - /** - * Set date feed was last modified - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setDateModified(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateModified()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one' - . ' atom:updated element but a modification date has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $updated = $dom->createElement('updated'); - $root->appendChild($updated); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateModified()->format(DateTime::ISO8601) - ); - $updated->appendChild($text); - } - - /** - * Set feed generator string - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setGenerator(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getGenerator()) { - $this->getDataContainer()->setGenerator('Zend_Feed_Writer', - Version::VERSION, 'http://framework.zend.com'); - } - - $gdata = $this->getDataContainer()->getGenerator(); - $generator = $dom->createElement('generator'); - $root->appendChild($generator); - $text = $dom->createTextNode($gdata['name']); - $generator->appendChild($text); - if (array_key_exists('uri', $gdata)) { - $generator->setAttribute('uri', $gdata['uri']); - } - if (array_key_exists('version', $gdata)) { - $generator->setAttribute('version', $gdata['version']); - } - } - - /** - * Set link to feed - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLink(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getLink()) { - return; - } - $link = $dom->createElement('link'); - $root->appendChild($link); - $link->setAttribute('rel', 'alternate'); - $link->setAttribute('type', 'text/html'); - $link->setAttribute('href', $this->getDataContainer()->getLink()); - } - - /** - * Set feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setFeedLinks(DOMDocument $dom, DOMElement $root) - { - $flinks = $this->getDataContainer()->getFeedLinks(); - if (!$flinks || !array_key_exists('atom', $flinks)) { - $message = 'Atom 1.0 feed elements SHOULD contain one atom:link ' - . 'element with a rel attribute value of "self". This is the ' - . 'preferred URI for retrieving Atom Feed Documents representing ' - . 'this Atom feed but a feed link has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - foreach ($flinks as $type => $href) { - $mime = 'application/' . strtolower($type) . '+xml'; - $flink = $dom->createElement('link'); - $root->appendChild($flink); - $flink->setAttribute('rel', 'self'); - $flink->setAttribute('type', $mime); - $flink->setAttribute('href', $href); - } - } - - /** - * Set feed authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->container->getAuthors(); - if (!$authors || empty($authors)) { - /** - * Technically we should defer an exception until we can check - * that all entries contain an author. If any entry is missing - * an author, then a missing feed author element is invalid - */ - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('author'); - $name = $this->dom->createElement('name'); - $author->appendChild($name); - $root->appendChild($author); - $text = $dom->createTextNode($data['name']); - $name->appendChild($text); - if (array_key_exists('email', $data)) { - $email = $this->dom->createElement('email'); - $author->appendChild($email); - $text = $dom->createTextNode($data['email']); - $email->appendChild($text); - } - if (array_key_exists('uri', $data)) { - $uri = $this->dom->createElement('uri'); - $author->appendChild($uri); - $text = $dom->createTextNode($data['uri']); - $uri->appendChild($text); - } - } - } - - /** - * Set feed identifier - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setId(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getId() - && !$this->getDataContainer()->getLink()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one ' - . 'atom:id element, or as an alternative, we can use the same ' - . 'value as atom:link however neither a suitable link nor an ' - . 'id have been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - if (!$this->getDataContainer()->getId()) { - $this->getDataContainer()->setId( - $this->getDataContainer()->getLink()); - } - $id = $dom->createElement('id'); - $root->appendChild($id); - $text = $dom->createTextNode($this->getDataContainer()->getId()); - $id->appendChild($text); - } - - /** - * Set feed copyright - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCopyright(DOMDocument $dom, DOMElement $root) - { - $copyright = $this->getDataContainer()->getCopyright(); - if (!$copyright) { - return; - } - $copy = $dom->createElement('rights'); - $root->appendChild($copy); - $text = $dom->createTextNode($copyright); - $copy->appendChild($text); - } - - /** - * Set feed level logo (image) - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setImage(DOMDocument $dom, DOMElement $root) - { - $image = $this->getDataContainer()->getImage(); - if (!$image) { - return; - } - $img = $dom->createElement('logo'); - $root->appendChild($img); - $text = $dom->createTextNode($image['uri']); - $img->appendChild($text); - } - - /** - * Set date feed was created - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateCreated(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateCreated()) { - return; - } - if (!$this->getDataContainer()->getDateModified()) { - $this->getDataContainer()->setDateModified( - $this->getDataContainer()->getDateCreated() - ); - } - } - - /** - * Set base URL to feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBaseUrl(DOMDocument $dom, DOMElement $root) - { - $baseUrl = $this->getDataContainer()->getBaseUrl(); - if (!$baseUrl) { - return; - } - $root->setAttribute('xml:base', $baseUrl); - } - - /** - * Set hubs to which this feed pushes - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setHubs(DOMDocument $dom, DOMElement $root) - { - $hubs = $this->getDataContainer()->getHubs(); - if (!$hubs) { - return; - } - foreach ($hubs as $hubUrl) { - $hub = $dom->createElement('link'); - $hub->setAttribute('rel', 'hub'); - $hub->setAttribute('href', $hubUrl); - $root->appendChild($hub); - } - } - - /** - * Set feed categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $categories = $this->getDataContainer()->getCategories(); - if (!$categories) { - return; - } - foreach ($categories as $cat) { - $category = $dom->createElement('category'); - $category->setAttribute('term', $cat['term']); - if (isset($cat['label'])) { - $category->setAttribute('label', $cat['label']); - } else { - $category->setAttribute('label', $cat['term']); - } - if (isset($cat['scheme'])) { - $category->setAttribute('scheme', $cat['scheme']); - } - $root->appendChild($category); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/Feed/Atom.php b/3rdparty/ZendFeed/Writer/Renderer/Feed/Atom.php deleted file mode 100644 index 87b6b94ac..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/Feed/Atom.php +++ /dev/null @@ -1,96 +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\Writer\Renderer\Feed; - -use DOMDocument; -use Zend\Feed\Writer; -use Zend\Feed\Writer\Renderer; - -/** -*/ -class Atom extends AbstractAtom implements Renderer\RendererInterface -{ - /** - * Constructor - * - * @param Writer\Feed $container - */ - public function __construct(Writer\Feed $container) - { - parent::__construct($container); - } - - /** - * Render Atom feed - * - * @return Atom - */ - public function render() - { - if (!$this->container->getEncoding()) { - $this->container->setEncoding('UTF-8'); - } - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $root = $this->dom->createElementNS( - Writer\Writer::NAMESPACE_ATOM_10, 'feed' - ); - $this->setRootElement($root); - $this->dom->appendChild($root); - $this->_setLanguage($this->dom, $root); - $this->_setBaseUrl($this->dom, $root); - $this->_setTitle($this->dom, $root); - $this->_setDescription($this->dom, $root); - $this->_setImage($this->dom, $root); - $this->_setDateCreated($this->dom, $root); - $this->_setDateModified($this->dom, $root); - $this->_setGenerator($this->dom, $root); - $this->_setLink($this->dom, $root); - $this->_setFeedLinks($this->dom, $root); - $this->_setId($this->dom, $root); - $this->_setAuthors($this->dom, $root); - $this->_setCopyright($this->dom, $root); - $this->_setCategories($this->dom, $root); - $this->_setHubs($this->dom, $root); - - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDOMDocument($this->getDOMDocument(), $root); - $ext->render(); - } - - foreach ($this->container as $entry) { - if ($this->getDataContainer()->getEncoding()) { - $entry->setEncoding($this->getDataContainer()->getEncoding()); - } - if ($entry instanceof Writer\Entry) { - $renderer = new Renderer\Entry\Atom($entry); - } else { - if (!$this->dom->documentElement->hasAttribute('xmlns:at')) { - $this->dom->documentElement->setAttribute( - 'xmlns:at', 'http://purl.org/atompub/tombstones/1.0' - ); - } - $renderer = new Renderer\Entry\AtomDeleted($entry); - } - if ($this->ignoreExceptions === true) { - $renderer->ignoreExceptions(); - } - $renderer->setType($this->getType()); - $renderer->setRootElement($this->dom->documentElement); - $renderer->render(); - $element = $renderer->getElement(); - $imported = $this->dom->importNode($element, true); - $root->appendChild($imported); - } - return $this; - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/Feed/Atom/AbstractAtom.php b/3rdparty/ZendFeed/Writer/Renderer/Feed/Atom/AbstractAtom.php deleted file mode 100644 index 379cd5c9f..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/Feed/Atom/AbstractAtom.php +++ /dev/null @@ -1,400 +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\Writer\Renderer\Feed\Atom; - -use Datetime; -use DOMDocument; -use DOMElement; -use Zend\Feed; -use Zend\Feed\Writer\Version; - -class AbstractAtom extends Feed\Writer\Renderer\AbstractRenderer -{ - /** - * Constructor - * - * @param \Zend\Feed\Writer\Feed $container - */ - public function __construct($container) - { - parent::__construct($container); - } - - /** - * Set feed language - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLanguage(DOMDocument $dom, DOMElement $root) - { - if ($this->getDataContainer()->getLanguage()) { - $root->setAttribute('xml:lang', $this->getDataContainer() - ->getLanguage()); - } - } - - /** - * Set feed title - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Feed\Exception\InvalidArgumentException - */ - protected function _setTitle(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getTitle()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one' - . ' atom:title element but a title has not been set'; - $exception = new Feed\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $title = $dom->createElement('title'); - $root->appendChild($title); - $title->setAttribute('type', 'text'); - $text = $dom->createTextNode($this->getDataContainer()->getTitle()); - $title->appendChild($text); - } - - /** - * Set feed description - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDescription(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription()) { - return; - } - $subtitle = $dom->createElement('subtitle'); - $root->appendChild($subtitle); - $subtitle->setAttribute('type', 'text'); - $text = $dom->createTextNode($this->getDataContainer()->getDescription()); - $subtitle->appendChild($text); - } - - /** - * Set date feed was last modified - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Feed\Exception\InvalidArgumentException - */ - protected function _setDateModified(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateModified()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one' - . ' atom:updated element but a modification date has not been set'; - $exception = new Feed\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $updated = $dom->createElement('updated'); - $root->appendChild($updated); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateModified()->format(DateTime::ISO8601) - ); - $updated->appendChild($text); - } - - /** - * Set feed generator string - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setGenerator(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getGenerator()) { - $this->getDataContainer()->setGenerator('Zend_Feed_Writer', - Version::VERSION, 'http://framework.zend.com'); - } - - $gdata = $this->getDataContainer()->getGenerator(); - $generator = $dom->createElement('generator'); - $root->appendChild($generator); - $text = $dom->createTextNode($gdata['name']); - $generator->appendChild($text); - if (array_key_exists('uri', $gdata)) { - $generator->setAttribute('uri', $gdata['uri']); - } - if (array_key_exists('version', $gdata)) { - $generator->setAttribute('version', $gdata['version']); - } - } - - /** - * Set link to feed - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLink(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getLink()) { - return; - } - $link = $dom->createElement('link'); - $root->appendChild($link); - $link->setAttribute('rel', 'alternate'); - $link->setAttribute('type', 'text/html'); - $link->setAttribute('href', $this->getDataContainer()->getLink()); - } - - /** - * Set feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Feed\Exception\InvalidArgumentException - */ - protected function _setFeedLinks(DOMDocument $dom, DOMElement $root) - { - $flinks = $this->getDataContainer()->getFeedLinks(); - if (!$flinks || !array_key_exists('atom', $flinks)) { - $message = 'Atom 1.0 feed elements SHOULD contain one atom:link ' - . 'element with a rel attribute value of "self". This is the ' - . 'preferred URI for retrieving Atom Feed Documents representing ' - . 'this Atom feed but a feed link has not been set'; - $exception = new Feed\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - foreach ($flinks as $type => $href) { - $mime = 'application/' . strtolower($type) . '+xml'; - $flink = $dom->createElement('link'); - $root->appendChild($flink); - $flink->setAttribute('rel', 'self'); - $flink->setAttribute('type', $mime); - $flink->setAttribute('href', $href); - } - } - - /** - * Set feed authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->container->getAuthors(); - if (!$authors || empty($authors)) { - /** - * Technically we should defer an exception until we can check - * that all entries contain an author. If any entry is missing - * an author, then a missing feed author element is invalid - */ - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('author'); - $name = $this->dom->createElement('name'); - $author->appendChild($name); - $root->appendChild($author); - $text = $dom->createTextNode($data['name']); - $name->appendChild($text); - if (array_key_exists('email', $data)) { - $email = $this->dom->createElement('email'); - $author->appendChild($email); - $text = $dom->createTextNode($data['email']); - $email->appendChild($text); - } - if (array_key_exists('uri', $data)) { - $uri = $this->dom->createElement('uri'); - $author->appendChild($uri); - $text = $dom->createTextNode($data['uri']); - $uri->appendChild($text); - } - } - } - - /** - * Set feed identifier - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Feed\Exception\InvalidArgumentException - */ - protected function _setId(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getId() - && !$this->getDataContainer()->getLink()) { - $message = 'Atom 1.0 feed elements MUST contain exactly one ' - . 'atom:id element, or as an alternative, we can use the same ' - . 'value as atom:link however neither a suitable link nor an ' - . 'id have been set'; - $exception = new Feed\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - if (!$this->getDataContainer()->getId()) { - $this->getDataContainer()->setId( - $this->getDataContainer()->getLink()); - } - $id = $dom->createElement('id'); - $root->appendChild($id); - $text = $dom->createTextNode($this->getDataContainer()->getId()); - $id->appendChild($text); - } - - /** - * Set feed copyright - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCopyright(DOMDocument $dom, DOMElement $root) - { - $copyright = $this->getDataContainer()->getCopyright(); - if (!$copyright) { - return; - } - $copy = $dom->createElement('rights'); - $root->appendChild($copy); - $text = $dom->createTextNode($copyright); - $copy->appendChild($text); - } - /** - * Set feed level logo (image) - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setImage(DOMDocument $dom, DOMElement $root) - { - $image = $this->getDataContainer()->getImage(); - if (!$image) { - return; - } - $img = $dom->createElement('logo'); - $root->appendChild($img); - $text = $dom->createTextNode($image['uri']); - $img->appendChild($text); - } - - - /** - * Set date feed was created - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateCreated(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateCreated()) { - return; - } - if (!$this->getDataContainer()->getDateModified()) { - $this->getDataContainer()->setDateModified( - $this->getDataContainer()->getDateCreated() - ); - } - } - - /** - * Set base URL to feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBaseUrl(DOMDocument $dom, DOMElement $root) - { - $baseUrl = $this->getDataContainer()->getBaseUrl(); - if (!$baseUrl) { - return; - } - $root->setAttribute('xml:base', $baseUrl); - } - - /** - * Set hubs to which this feed pushes - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setHubs(DOMDocument $dom, DOMElement $root) - { - $hubs = $this->getDataContainer()->getHubs(); - if (!$hubs) { - return; - } - foreach ($hubs as $hubUrl) { - $hub = $dom->createElement('link'); - $hub->setAttribute('rel', 'hub'); - $hub->setAttribute('href', $hubUrl); - $root->appendChild($hub); - } - } - - /** - * Set feed categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $categories = $this->getDataContainer()->getCategories(); - if (!$categories) { - return; - } - foreach ($categories as $cat) { - $category = $dom->createElement('category'); - $category->setAttribute('term', $cat['term']); - if (isset($cat['label'])) { - $category->setAttribute('label', $cat['label']); - } else { - $category->setAttribute('label', $cat['term']); - } - if (isset($cat['scheme'])) { - $category->setAttribute('scheme', $cat['scheme']); - } - $root->appendChild($category); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/Feed/Atom/Source.php b/3rdparty/ZendFeed/Writer/Renderer/Feed/Atom/Source.php deleted file mode 100644 index 006c6ae4a..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/Feed/Atom/Source.php +++ /dev/null @@ -1,93 +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\Writer\Renderer\Feed\Atom; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer; -use Zend\Feed\Writer\Renderer; - -class Source extends AbstractAtom implements Renderer\RendererInterface -{ - - /** - * Constructor - * - * @param Writer\Source $container - */ - public function __construct(Writer\Source $container) - { - parent::__construct($container); - } - - /** - * Render Atom Feed Metadata (Source element) - * - * @return Writer\Renderer\Feed\Atom - */ - public function render() - { - if (!$this->container->getEncoding()) { - $this->container->setEncoding('UTF-8'); - } - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $root = $this->dom->createElement('source'); - $this->setRootElement($root); - $this->dom->appendChild($root); - $this->_setLanguage($this->dom, $root); - $this->_setBaseUrl($this->dom, $root); - $this->_setTitle($this->dom, $root); - $this->_setDescription($this->dom, $root); - $this->_setDateCreated($this->dom, $root); - $this->_setDateModified($this->dom, $root); - $this->_setGenerator($this->dom, $root); - $this->_setLink($this->dom, $root); - $this->_setFeedLinks($this->dom, $root); - $this->_setId($this->dom, $root); - $this->_setAuthors($this->dom, $root); - $this->_setCopyright($this->dom, $root); - $this->_setCategories($this->dom, $root); - - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDomDocument($this->getDomDocument(), $root); - $ext->render(); - } - return $this; - } - - /** - * Set feed generator string - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setGenerator(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getGenerator()) { - return; - } - - $gdata = $this->getDataContainer()->getGenerator(); - $generator = $dom->createElement('generator'); - $root->appendChild($generator); - $text = $dom->createTextNode($gdata['name']); - $generator->appendChild($text); - if (array_key_exists('uri', $gdata)) { - $generator->setAttribute('uri', $gdata['uri']); - } - if (array_key_exists('version', $gdata)) { - $generator->setAttribute('version', $gdata['version']); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/Feed/AtomSource.php b/3rdparty/ZendFeed/Writer/Renderer/Feed/AtomSource.php deleted file mode 100644 index 739c6f729..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/Feed/AtomSource.php +++ /dev/null @@ -1,95 +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\Writer\Renderer\Feed; - -use DOMDocument; -use DOMElement; -use Zend\Feed\Writer; -use Zend\Feed\Writer\Renderer; - -/** -*/ -class AtomSource extends AbstractAtom implements Renderer\RendererInterface -{ - - /** - * Constructor - * - * @param Writer\Source $container - */ - public function __construct(Writer\Source $container) - { - parent::__construct($container); - } - - /** - * Render Atom Feed Metadata (Source element) - * - * @return \Zend\Feed\Writer\Renderer\Feed\Atom - */ - public function render() - { - if (!$this->container->getEncoding()) { - $this->container->setEncoding('UTF-8'); - } - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $root = $this->dom->createElement('source'); - $this->setRootElement($root); - $this->dom->appendChild($root); - $this->_setLanguage($this->dom, $root); - $this->_setBaseUrl($this->dom, $root); - $this->_setTitle($this->dom, $root); - $this->_setDescription($this->dom, $root); - $this->_setDateCreated($this->dom, $root); - $this->_setDateModified($this->dom, $root); - $this->_setGenerator($this->dom, $root); - $this->_setLink($this->dom, $root); - $this->_setFeedLinks($this->dom, $root); - $this->_setId($this->dom, $root); - $this->_setAuthors($this->dom, $root); - $this->_setCopyright($this->dom, $root); - $this->_setCategories($this->dom, $root); - - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDOMDocument($this->getDOMDocument(), $root); - $ext->render(); - } - return $this; - } - - /** - * Set feed generator string - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setGenerator(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getGenerator()) { - return; - } - - $gdata = $this->getDataContainer()->getGenerator(); - $generator = $dom->createElement('generator'); - $root->appendChild($generator); - $text = $dom->createTextNode($gdata['name']); - $generator->appendChild($text); - if (array_key_exists('uri', $gdata)) { - $generator->setAttribute('uri', $gdata['uri']); - } - if (array_key_exists('version', $gdata)) { - $generator->setAttribute('version', $gdata['version']); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/Feed/Rss.php b/3rdparty/ZendFeed/Writer/Renderer/Feed/Rss.php deleted file mode 100644 index 75c502e32..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/Feed/Rss.php +++ /dev/null @@ -1,484 +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\Writer\Renderer\Feed; - -use DateTime; -use DOMDocument; -use DOMElement; -use Zend\Feed\Uri; -use Zend\Feed\Writer; -use Zend\Feed\Writer\Renderer; -use Zend\Feed\Writer\Version; - -/** -*/ -class Rss extends Renderer\AbstractRenderer implements Renderer\RendererInterface -{ - /** - * Constructor - * - * @param Writer\Feed $container - */ - public function __construct(Writer\Feed $container) - { - parent::__construct($container); - } - - /** - * Render RSS feed - * - * @return self - */ - public function render() - { - $this->dom = new DOMDocument('1.0', $this->container->getEncoding()); - $this->dom->formatOutput = true; - $this->dom->substituteEntities = false; - $rss = $this->dom->createElement('rss'); - $this->setRootElement($rss); - $rss->setAttribute('version', '2.0'); - - $channel = $this->dom->createElement('channel'); - $rss->appendChild($channel); - $this->dom->appendChild($rss); - $this->_setLanguage($this->dom, $channel); - $this->_setBaseUrl($this->dom, $channel); - $this->_setTitle($this->dom, $channel); - $this->_setDescription($this->dom, $channel); - $this->_setImage($this->dom, $channel); - $this->_setDateCreated($this->dom, $channel); - $this->_setDateModified($this->dom, $channel); - $this->_setLastBuildDate($this->dom, $channel); - $this->_setGenerator($this->dom, $channel); - $this->_setLink($this->dom, $channel); - $this->_setAuthors($this->dom, $channel); - $this->_setCopyright($this->dom, $channel); - $this->_setCategories($this->dom, $channel); - - foreach ($this->extensions as $ext) { - $ext->setType($this->getType()); - $ext->setRootElement($this->getRootElement()); - $ext->setDOMDocument($this->getDOMDocument(), $channel); - $ext->render(); - } - - foreach ($this->container as $entry) { - if ($this->getDataContainer()->getEncoding()) { - $entry->setEncoding($this->getDataContainer()->getEncoding()); - } - if ($entry instanceof Writer\Entry) { - $renderer = new Renderer\Entry\Rss($entry); - } else { - continue; - } - if ($this->ignoreExceptions === true) { - $renderer->ignoreExceptions(); - } - $renderer->setType($this->getType()); - $renderer->setRootElement($this->dom->documentElement); - $renderer->render(); - $element = $renderer->getElement(); - $imported = $this->dom->importNode($element, true); - $channel->appendChild($imported); - } - return $this; - } - - /** - * Set feed language - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLanguage(DOMDocument $dom, DOMElement $root) - { - $lang = $this->getDataContainer()->getLanguage(); - if (!$lang) { - return; - } - $language = $dom->createElement('language'); - $root->appendChild($language); - $language->nodeValue = $lang; - } - - /** - * Set feed title - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setTitle(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getTitle()) { - $message = 'RSS 2.0 feed elements MUST contain exactly one' - . ' title element but a title has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $title = $dom->createElement('title'); - $root->appendChild($title); - $text = $dom->createTextNode($this->getDataContainer()->getTitle()); - $title->appendChild($text); - } - - /** - * Set feed description - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setDescription(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDescription()) { - $message = 'RSS 2.0 feed elements MUST contain exactly one' - . ' description element but one has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $subtitle = $dom->createElement('description'); - $root->appendChild($subtitle); - $text = $dom->createTextNode($this->getDataContainer()->getDescription()); - $subtitle->appendChild($text); - } - - /** - * Set date feed was last modified - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateModified(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateModified()) { - return; - } - - $updated = $dom->createElement('pubDate'); - $root->appendChild($updated); - $text = $dom->createTextNode( - $this->getDataContainer()->getDateModified()->format(DateTime::RSS) - ); - $updated->appendChild($text); - } - - /** - * Set feed generator string - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setGenerator(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getGenerator()) { - $this->getDataContainer()->setGenerator('Zend_Feed_Writer', - Version::VERSION, 'http://framework.zend.com'); - } - - $gdata = $this->getDataContainer()->getGenerator(); - $generator = $dom->createElement('generator'); - $root->appendChild($generator); - $name = $gdata['name']; - if (array_key_exists('version', $gdata)) { - $name .= ' ' . $gdata['version']; - } - if (array_key_exists('uri', $gdata)) { - $name .= ' (' . $gdata['uri'] . ')'; - } - $text = $dom->createTextNode($name); - $generator->appendChild($text); - } - - /** - * Set link to feed - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setLink(DOMDocument $dom, DOMElement $root) - { - $value = $this->getDataContainer()->getLink(); - if (!$value) { - $message = 'RSS 2.0 feed elements MUST contain exactly one' - . ' link element but one has not been set'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $link = $dom->createElement('link'); - $root->appendChild($link); - $text = $dom->createTextNode($value); - $link->appendChild($text); - if (!Uri::factory($value)->isValid()) { - $link->setAttribute('isPermaLink', 'false'); - } - } - - /** - * Set feed authors - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setAuthors(DOMDocument $dom, DOMElement $root) - { - $authors = $this->getDataContainer()->getAuthors(); - if (!$authors || empty($authors)) { - return; - } - foreach ($authors as $data) { - $author = $this->dom->createElement('author'); - $name = $data['name']; - if (array_key_exists('email', $data)) { - $name = $data['email'] . ' (' . $data['name'] . ')'; - } - $text = $dom->createTextNode($name); - $author->appendChild($text); - $root->appendChild($author); - } - } - - /** - * Set feed copyright - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCopyright(DOMDocument $dom, DOMElement $root) - { - $copyright = $this->getDataContainer()->getCopyright(); - if (!$copyright) { - return; - } - $copy = $dom->createElement('copyright'); - $root->appendChild($copy); - $text = $dom->createTextNode($copyright); - $copy->appendChild($text); - } - - /** - * Set feed channel image - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - * @throws Writer\Exception\InvalidArgumentException - */ - protected function _setImage(DOMDocument $dom, DOMElement $root) - { - $image = $this->getDataContainer()->getImage(); - if (!$image) { - return; - } - - if (!isset($image['title']) || empty($image['title']) - || !is_string($image['title']) - ) { - $message = 'RSS 2.0 feed images must include a title'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - if (empty($image['link']) || !is_string($image['link']) - || !Uri::factory($image['link'])->isValid() - ) { - $message = 'Invalid parameter: parameter \'link\'' - . ' must be a non-empty string and valid URI/IRI'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - - $img = $dom->createElement('image'); - $root->appendChild($img); - - $url = $dom->createElement('url'); - $text = $dom->createTextNode($image['uri']); - $url->appendChild($text); - - $title = $dom->createElement('title'); - $text = $dom->createTextNode($image['title']); - $title->appendChild($text); - - $link = $dom->createElement('link'); - $text = $dom->createTextNode($image['link']); - $link->appendChild($text); - - $img->appendChild($url); - $img->appendChild($title); - $img->appendChild($link); - - if (isset($image['height'])) { - if (!ctype_digit((string) $image['height']) || $image['height'] > 400) { - $message = 'Invalid parameter: parameter \'height\'' - . ' must be an integer not exceeding 400'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $height = $dom->createElement('height'); - $text = $dom->createTextNode($image['height']); - $height->appendChild($text); - $img->appendChild($height); - } - if (isset($image['width'])) { - if (!ctype_digit((string) $image['width']) || $image['width'] > 144) { - $message = 'Invalid parameter: parameter \'width\'' - . ' must be an integer not exceeding 144'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $width = $dom->createElement('width'); - $text = $dom->createTextNode($image['width']); - $width->appendChild($text); - $img->appendChild($width); - } - if (isset($image['description'])) { - if (empty($image['description']) || !is_string($image['description'])) { - $message = 'Invalid parameter: parameter \'description\'' - . ' must be a non-empty string'; - $exception = new Writer\Exception\InvalidArgumentException($message); - if (!$this->ignoreExceptions) { - throw $exception; - } else { - $this->exceptions[] = $exception; - return; - } - } - $desc = $dom->createElement('description'); - $text = $dom->createTextNode($image['description']); - $desc->appendChild($text); - $img->appendChild($desc); - } - } - - /** - * Set date feed was created - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setDateCreated(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getDateCreated()) { - return; - } - if (!$this->getDataContainer()->getDateModified()) { - $this->getDataContainer()->setDateModified( - $this->getDataContainer()->getDateCreated() - ); - } - } - - /** - * Set date feed last build date - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setLastBuildDate(DOMDocument $dom, DOMElement $root) - { - if (!$this->getDataContainer()->getLastBuildDate()) { - return; - } - - $lastBuildDate = $dom->createElement('lastBuildDate'); - $root->appendChild($lastBuildDate); - $text = $dom->createTextNode( - $this->getDataContainer()->getLastBuildDate()->format(DateTime::RSS) - ); - $lastBuildDate->appendChild($text); - } - - /** - * Set base URL to feed links - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setBaseUrl(DOMDocument $dom, DOMElement $root) - { - $baseUrl = $this->getDataContainer()->getBaseUrl(); - if (!$baseUrl) { - return; - } - $root->setAttribute('xml:base', $baseUrl); - } - - /** - * Set feed categories - * - * @param DOMDocument $dom - * @param DOMElement $root - * @return void - */ - protected function _setCategories(DOMDocument $dom, DOMElement $root) - { - $categories = $this->getDataContainer()->getCategories(); - if (!$categories) { - return; - } - foreach ($categories as $cat) { - $category = $dom->createElement('category'); - if (isset($cat['scheme'])) { - $category->setAttribute('domain', $cat['scheme']); - } - $text = $dom->createTextNode($cat['term']); - $category->appendChild($text); - $root->appendChild($category); - } - } -} diff --git a/3rdparty/ZendFeed/Writer/Renderer/RendererInterface.php b/3rdparty/ZendFeed/Writer/Renderer/RendererInterface.php deleted file mode 100644 index b2e0e00a3..000000000 --- a/3rdparty/ZendFeed/Writer/Renderer/RendererInterface.php +++ /dev/null @@ -1,100 +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\Writer\Renderer; - -use DOMDocument; -use DOMElement; - -/** -*/ -interface RendererInterface -{ - /** - * Render feed/entry - * - * @return void - */ - public function render(); - - /** - * Save feed and/or entry to XML and return string - * - * @return string - */ - public function saveXml(); - - /** - * Get DOM document - * - * @return DOMDocument - */ - public function getDomDocument(); - - /** - * Get document element from DOM - * - * @return DOMElement - */ - public function getElement(); - - /** - * Get data container containing feed items - * - * @return mixed - */ - public function getDataContainer(); - - /** - * Should exceptions be ignored? - * - * @return mixed - */ - public function ignoreExceptions(); - - /** - * Get list of thrown exceptions - * - * @return array - */ - public function getExceptions(); - - /** - * Set the current feed type being exported to "rss" or "atom". This allows - * other objects to gracefully choose whether to execute or not, depending - * on their appropriateness for the current type, e.g. renderers. - * - * @param string $type - */ - public function setType($type); - - /** - * Retrieve the current or last feed type exported. - * - * @return string Value will be "rss" or "atom" - */ - public function getType(); - - /** - * Sets the absolute root element for the XML feed being generated. This - * helps simplify the appending of namespace declarations, but also ensures - * namespaces are added to the root element - not scattered across the entire - * XML file - may assist namespace unsafe parsers and looks pretty ;). - * - * @param DOMElement $root - */ - public function setRootElement(DOMElement $root); - - /** - * Retrieve the absolute root element for the XML feed being generated. - * - * @return DOMElement - */ - public function getRootElement(); -} diff --git a/3rdparty/ZendFeed/Writer/Source.php b/3rdparty/ZendFeed/Writer/Source.php deleted file mode 100644 index f0b4dcacb..000000000 --- a/3rdparty/ZendFeed/Writer/Source.php +++ /dev/null @@ -1,16 +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\Writer; - -/** -*/ -class Source extends AbstractFeed -{ -} diff --git a/3rdparty/ZendFeed/Writer/Version.php b/3rdparty/ZendFeed/Writer/Version.php deleted file mode 100644 index 8dd20df90..000000000 --- a/3rdparty/ZendFeed/Writer/Version.php +++ /dev/null @@ -1,15 +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\Writer; - -abstract class Version -{ - const VERSION = '2'; -} diff --git a/3rdparty/ZendFeed/Writer/Writer.php b/3rdparty/ZendFeed/Writer/Writer.php deleted file mode 100644 index ae8e15364..000000000 --- a/3rdparty/ZendFeed/Writer/Writer.php +++ /dev/null @@ -1,199 +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\Writer; - -/** -*/ -class Writer -{ - /** - * Namespace constants - */ - const NAMESPACE_ATOM_03 = 'http://purl.org/atom/ns#'; - const NAMESPACE_ATOM_10 = 'http://www.w3.org/2005/Atom'; - const NAMESPACE_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'; - const NAMESPACE_RSS_090 = 'http://my.netscape.com/rdf/simple/0.9/'; - const NAMESPACE_RSS_10 = 'http://purl.org/rss/1.0/'; - - /** - * Feed type constants - */ - const TYPE_ANY = 'any'; - const TYPE_ATOM_03 = 'atom-03'; - const TYPE_ATOM_10 = 'atom-10'; - const TYPE_ATOM_ANY = 'atom'; - const TYPE_RSS_090 = 'rss-090'; - const TYPE_RSS_091 = 'rss-091'; - const TYPE_RSS_091_NETSCAPE = 'rss-091n'; - const TYPE_RSS_091_USERLAND = 'rss-091u'; - const TYPE_RSS_092 = 'rss-092'; - const TYPE_RSS_093 = 'rss-093'; - const TYPE_RSS_094 = 'rss-094'; - const TYPE_RSS_10 = 'rss-10'; - const TYPE_RSS_20 = 'rss-20'; - const TYPE_RSS_ANY = 'rss'; - - /** - * @var ExtensionManagerInterface - */ - protected static $extensionManager = null; - - /** - * Array of registered extensions by class postfix (after the base class - * name) across four categories - data containers and renderers for entry - * and feed levels. - * - * @var array - */ - protected static $extensions = array( - 'entry' => array(), - 'feed' => array(), - 'entryRenderer' => array(), - 'feedRenderer' => array(), - ); - - /** - * Set plugin loader for use with Extensions - * - * @param ExtensionManagerInterface - */ - public static function setExtensionManager(ExtensionManagerInterface $extensionManager) - { - static::$extensionManager = $extensionManager; - } - - /** - * Get plugin manager for use with Extensions - * - * @return ExtensionManagerInterface - */ - public static function getExtensionManager() - { - if (!isset(static::$extensionManager)) { - static::setExtensionManager(new ExtensionManager()); - } - return static::$extensionManager; - } - - /** - * Register an Extension by name - * - * @param string $name - * @return void - * @throws Exception\RuntimeException if unable to resolve Extension class - */ - public static function registerExtension($name) - { - $feedName = $name . '\Feed'; - $entryName = $name . '\Entry'; - $feedRendererName = $name . '\Renderer\Feed'; - $entryRendererName = $name . '\Renderer\Entry'; - $manager = static::getExtensionManager(); - if (static::isRegistered($name)) { - if ($manager->has($feedName) - || $manager->has($entryName) - || $manager->has($feedRendererName) - || $manager->has($entryRendererName) - ) { - return; - } - } - if (!$manager->has($feedName) - && !$manager->has($entryName) - && !$manager->has($feedRendererName) - && !$manager->has($entryRendererName) - ) { - throw new Exception\RuntimeException('Could not load extension: ' . $name - . 'using Plugin Loader. Check prefix paths are configured and extension exists.'); - } - if ($manager->has($feedName)) { - static::$extensions['feed'][] = $feedName; - } - if ($manager->has($entryName)) { - static::$extensions['entry'][] = $entryName; - } - if ($manager->has($feedRendererName)) { - static::$extensions['feedRenderer'][] = $feedRendererName; - } - if ($manager->has($entryRendererName)) { - static::$extensions['entryRenderer'][] = $entryRendererName; - } - } - - /** - * Is a given named Extension registered? - * - * @param string $extensionName - * @return bool - */ - public static function isRegistered($extensionName) - { - $feedName = $extensionName . '\Feed'; - $entryName = $extensionName . '\Entry'; - $feedRendererName = $extensionName . '\Renderer\Feed'; - $entryRendererName = $extensionName . '\Renderer\Entry'; - if (in_array($feedName, static::$extensions['feed']) - || in_array($entryName, static::$extensions['entry']) - || in_array($feedRendererName, static::$extensions['feedRenderer']) - || in_array($entryRendererName, static::$extensions['entryRenderer']) - ) { - return true; - } - return false; - } - - /** - * Get a list of extensions - * - * @return array - */ - public static function getExtensions() - { - return static::$extensions; - } - - /** - * Reset class state to defaults - * - * @return void - */ - public static function reset() - { - static::$extensionManager = null; - static::$extensions = array( - 'entry' => array(), - 'feed' => array(), - 'entryRenderer' => array(), - 'feedRenderer' => array(), - ); - } - - /** - * Register core (default) extensions - * - * @return void - */ - public static function registerCoreExtensions() - { - static::registerExtension('DublinCore'); - static::registerExtension('Content'); - static::registerExtension('Atom'); - static::registerExtension('Slash'); - static::registerExtension('WellFormedWeb'); - static::registerExtension('Threading'); - static::registerExtension('ITunes'); - } - - public static function lcfirst($str) - { - $str[0] = strtolower($str[0]); - return $str; - } -} diff --git a/3rdparty/ZendFeed/composer.json b/3rdparty/ZendFeed/composer.json deleted file mode 100644 index 0c4d7dc18..000000000 --- a/3rdparty/ZendFeed/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "zendframework/zend-feed", - "description": "provides functionality for consuming RSS and Atom feeds", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "feed" - ], - "homepage": "https://github.com/zendframework/zf2", - "autoload": { - "psr-0": { - "Zend\\Feed\\": "" - } - }, - "target-dir": "Zend/Feed", - "require": { - "php": ">=5.3.23", - "zendframework/zend-escaper": "self.version", - "zendframework/zend-stdlib": "self.version" - }, - "require-dev": { - "zendframework/zend-db": "self.version", - "zendframework/zend-cache": "self.version", - "zendframework/zend-http": "self.version", - "zendframework/zend-servicemanager": "self.version", - "zendframework/zend-validator": "self.version" - }, - "suggest": { - "zendframework/zend-cache": "Zend\\Cache component", - "zendframework/zend-db": "Zend\\Db component", - "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader", - "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations", - "zendframework/zend-validator": "Zend\\Validator component" - }, - "extra": { - "branch-alias": { - "dev-master": "2.3-dev", - "dev-develop": "2.4-dev" - } - } -} diff --git a/3rdparty/ZendFeed/vendor/autoload.php b/3rdparty/ZendFeed/vendor/autoload.php deleted file mode 100644 index 95cf6c997..000000000 --- a/3rdparty/ZendFeed/vendor/autoload.php +++ /dev/null @@ -1,7 +0,0 @@ -<?php - -// autoload.php @generated by Composer - -require_once __DIR__ . '/composer' . '/autoload_real.php'; - -return ComposerAutoloaderInit6b3bb43e74f13034081041e60da844d5::getLoader(); diff --git a/3rdparty/ZendFeed/vendor/composer/ClassLoader.php b/3rdparty/ZendFeed/vendor/composer/ClassLoader.php deleted file mode 100644 index 443364959..000000000 --- a/3rdparty/ZendFeed/vendor/composer/ClassLoader.php +++ /dev/null @@ -1,383 +0,0 @@ -<?php - -/* - * This file is part of Composer. - * - * (c) Nils Adermann <naderman@naderman.de> - * Jordi Boggiano <j.boggiano@seld.be> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0 class loader - * - * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier <fabien@symfony.com> - * @author Jordi Boggiano <j.boggiano@seld.be> - */ -class ClassLoader -{ - // PSR-4 - private $prefixLengthsPsr4 = array(); - private $prefixDirsPsr4 = array(); - private $fallbackDirsPsr4 = array(); - - // PSR-0 - private $prefixesPsr0 = array(); - private $fallbackDirsPsr0 = array(); - - private $useIncludePath = false; - private $classMap = array(); - - public function getPrefixes() - { - return call_user_func_array('array_merge', $this->prefixesPsr0); - } - - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param array $classMap Class to filename map - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-0 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param array|string $paths The PSR-0 base directories - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param array|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - } - - /** - * Unregisters this instance as an autoloader. - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return bool|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - includeFile($file); - - return true; - } - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 - if ('\\' == $class[0]) { - $class = substr($class, 1); - } - - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if ($file === null && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if ($file === null) { - // Remember that this class does not exist. - return $this->classMap[$class] = false; - } - - return $file; - } - - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { - if (0 === strpos($class, $prefix)) { - foreach ($this->prefixDirsPsr4[$prefix] as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - } -} - -/** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - */ -function includeFile($file) -{ - include $file; -} diff --git a/3rdparty/ZendFeed/vendor/composer/autoload_classmap.php b/3rdparty/ZendFeed/vendor/composer/autoload_classmap.php deleted file mode 100644 index 7a91153b0..000000000 --- a/3rdparty/ZendFeed/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,9 +0,0 @@ -<?php - -// autoload_classmap.php @generated by Composer - -$vendorDir = dirname(dirname(__FILE__)); -$baseDir = dirname($vendorDir); - -return array( -); diff --git a/3rdparty/ZendFeed/vendor/composer/autoload_namespaces.php b/3rdparty/ZendFeed/vendor/composer/autoload_namespaces.php deleted file mode 100644 index b486bdc34..000000000 --- a/3rdparty/ZendFeed/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,10 +0,0 @@ -<?php - -// autoload_namespaces.php @generated by Composer - -$vendorDir = dirname(dirname(__FILE__)); -$baseDir = dirname($vendorDir); - -return array( - 'Zend\\Feed\\' => array($baseDir . '/'), -); diff --git a/3rdparty/ZendFeed/vendor/composer/autoload_psr4.php b/3rdparty/ZendFeed/vendor/composer/autoload_psr4.php deleted file mode 100644 index b265c64a2..000000000 --- a/3rdparty/ZendFeed/vendor/composer/autoload_psr4.php +++ /dev/null @@ -1,9 +0,0 @@ -<?php - -// autoload_psr4.php @generated by Composer - -$vendorDir = dirname(dirname(__FILE__)); -$baseDir = dirname($vendorDir); - -return array( -); diff --git a/3rdparty/ZendFeed/vendor/composer/autoload_real.php b/3rdparty/ZendFeed/vendor/composer/autoload_real.php deleted file mode 100644 index 0fc6e7639..000000000 --- a/3rdparty/ZendFeed/vendor/composer/autoload_real.php +++ /dev/null @@ -1,70 +0,0 @@ -<?php - -// autoload_real.php @generated by Composer - -class ComposerAutoloaderInit6b3bb43e74f13034081041e60da844d5 -{ - private static $loader; - - public static function loadClassLoader($class) - { - if ('Composer\Autoload\ClassLoader' === $class) { - require __DIR__ . '/ClassLoader.php'; - } - } - - public static function getLoader() - { - if (null !== self::$loader) { - return self::$loader; - } - - spl_autoload_register(array('ComposerAutoloaderInit6b3bb43e74f13034081041e60da844d5', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit6b3bb43e74f13034081041e60da844d5', 'loadClassLoader')); - - $map = require __DIR__ . '/autoload_namespaces.php'; - foreach ($map as $namespace => $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - - spl_autoload_register(array('ComposerAutoloaderInit6b3bb43e74f13034081041e60da844d5', 'autoload'), true, true); - - $loader->register(true); - - return $loader; - } - - public static function autoload($class) - { - $dir = dirname(dirname(__DIR__)) . '/'; - $prefixes = array('Zend\\Feed\\'); - foreach ($prefixes as $prefix) { - if (0 !== strpos($class, $prefix)) { - continue; - } - $path = $dir . implode('/', array_slice(explode('\\', $class), 2)).'.php'; - if (!$path = stream_resolve_include_path($path)) { - return false; - } - require $path; - - return true; - } - } -} - -function composerRequire6b3bb43e74f13034081041e60da844d5($file) -{ - require $file; -} |