]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Subscription.php
Merge commit 'refs/merge-requests/230' of git://gitorious.org/statusnet/mainline...
[quix0rs-gnu-social.git] / classes / Subscription.php
index 8af414b3a7b3ff3048b565548e94260ed3bd3d46..70ccd724be66ee4f49679a528c01a2b7c20a8fdb 100644 (file)
@@ -24,7 +24,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
  */
 require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
 
-class Subscription extends Memcached_DataObject
+class Subscription extends Managed_DataObject
 {
     const CACHE_WINDOW = 201;
     const FORCE = true;
@@ -39,9 +39,36 @@ class Subscription extends Memcached_DataObject
     public $sms;                             // tinyint(1)   default_1
     public $token;                           // varchar(255)
     public $secret;                          // varchar(255)
+    public $uri;                             // varchar(255)
     public $created;                         // datetime()   not_null
     public $modified;                        // timestamp()   not_null default_CURRENT_TIMESTAMP
 
+    public static function schemaDef()
+    {
+        return array(
+            'fields' => array(
+                'subscriber' => array('type' => 'int', 'not null' => true, 'description' => 'profile listening'),
+                'subscribed' => array('type' => 'int', 'not null' => true, 'description' => 'profile being listened to'),
+                'jabber' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'deliver jabber messages'),
+                'sms' => array('type' => 'int', 'size' => 'tiny', 'default' => 1, 'description' => 'deliver sms messages'),
+                'token' => array('type' => 'varchar', 'length' => 255, 'description' => 'authorization token'),
+                'secret' => array('type' => 'varchar', 'length' => 255, 'description' => 'token secret'),
+                'uri' => array('type' => 'varchar', 'length' => 255, 'description' => 'universally unique identifier'),
+                'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
+                'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
+            ),
+            'primary key' => array('subscriber', 'subscribed'),
+            'unique keys' => array(
+                'subscription_uri_key' => array('uri'),
+            ),
+            'indexes' => array(
+                'subscription_subscriber_idx' => array('subscriber', 'created'),
+                'subscription_subscribed_idx' => array('subscribed', 'created'),
+                'subscription_token_idx' => array('token'),
+            ),
+        );
+    }
+
     /* Static get */
     function staticGet($k,$v=null)
     { return Memcached_DataObject::staticGet('Subscription',$k,$v); }
@@ -138,6 +165,9 @@ class Subscription extends Memcached_DataObject
         $sub->jabber     = 1;
         $sub->sms        = 1;
         $sub->created    = common_sql_now();
+        $sub->uri        = self::newURI($sub->subscriber,
+                                        $sub->subscribed,
+                                        $sub->created);
 
         $result = $sub->insert();
 
@@ -198,29 +228,6 @@ class Subscription extends Memcached_DataObject
 
             assert(!empty($sub));
 
-            // @todo: move this block to EndSubscribe handler for
-            // OMB plugin when it exists.
-
-            if (!empty($sub->token)) {
-
-                $token = new Token();
-
-                $token->tok    = $sub->token;
-
-                if ($token->find(true)) {
-
-                    $result = $token->delete();
-
-                    if (!$result) {
-                        common_log_db_error($token, 'DELETE', __FILE__);
-                        // TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
-                        throw new Exception(_('Could not delete subscription OMB token.'));
-                    }
-                } else {
-                    common_log(LOG_ERR, "Couldn't find credentials with token {$token->tok}");
-                }
-            }
-
             $result = $sub->delete();
 
             if (!$result) {
@@ -255,16 +262,21 @@ class Subscription extends Memcached_DataObject
         $subscriber = Profile::staticGet('id', $this->subscriber);
         $subscribed = Profile::staticGet('id', $this->subscribed);
 
+        if (empty($subscriber)) {
+            throw new Exception(sprintf(_('No profile for the subscriber: %d'), $this->subscriber));
+        }
+
+        if (empty($subscribed)) {
+            throw new Exception(sprintf(_('No profile for the subscribed: %d'), $this->subscribed));
+        }
+
         $act = new Activity();
 
         $act->verb = ActivityVerb::FOLLOW;
 
         // XXX: rationalize this with the URL
 
-        $act->id   = TagURI::mint('follow:%d:%d:%s',
-                                  $subscriber->id,
-                                  $subscribed->id,
-                                  common_date_iso8601($this->created));
+        $act->id   = $this->getURI();
 
         $act->time    = strtotime($this->created);
         // TRANS: Activity title when subscribing to another person.
@@ -427,4 +439,21 @@ class Subscription extends Memcached_DataObject
 
         return $result;
     }
+
+    function getURI()
+    {
+        if (!empty($this->uri)) {
+            return $this->uri;
+        } else {
+            return self::newURI($this->subscriber, $this->subscribed, $this->created);
+        }
+    }
+
+    static function newURI($subscriber_id, $subscribed_id, $created)
+    {
+        return TagURI::mint('follow:%d:%d:%s',
+                            $subscriber_id,
+                            $subscribed_id,
+                            common_date_iso8601($created));
+    }
 }