summaryrefslogtreecommitdiffstats
path: root/3rdparty/ZendFeed/PubSubHubbub/Model/Subscription.php
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/ZendFeed/PubSubHubbub/Model/Subscription.php')
-rw-r--r--3rdparty/ZendFeed/PubSubHubbub/Model/Subscription.php142
1 files changed, 142 insertions, 0 deletions
diff --git a/3rdparty/ZendFeed/PubSubHubbub/Model/Subscription.php b/3rdparty/ZendFeed/PubSubHubbub/Model/Subscription.php
new file mode 100644
index 000000000..9571106a4
--- /dev/null
+++ b/3rdparty/ZendFeed/PubSubHubbub/Model/Subscription.php
@@ -0,0 +1,142 @@
+<?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;
+ }
+}