X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FSubscription.php;h=70ccd724be66ee4f49679a528c01a2b7c20a8fdb;hb=3ad3535cd8d12787d1af95969b9576620abce4a9;hp=438f1dfe50f879d1766f4ed055ea8f7a700f9711;hpb=e862dcdb8a9cfc21cf00513d76f40d20dd3b1b7a;p=quix0rs-gnu-social.git diff --git a/classes/Subscription.php b/classes/Subscription.php index 438f1dfe50..70ccd724be 100644 --- a/classes/Subscription.php +++ b/classes/Subscription.php @@ -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,20 +262,25 @@ 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 tile when subscribing to another person. - $act->title = _("Follow"); + // TRANS: Activity title when subscribing to another person. + $act->title = _m('TITLE','Follow'); // TRANS: Notification given when one person starts following another. // TRANS: %1$s is the subscriber, %2$s is the subscribed. $act->content = sprintf(_('%1$s is now following %2$s.'), @@ -301,7 +313,6 @@ class Subscription extends Memcached_DataObject * * @return Subscription stream of subscriptions; use fetch() to iterate */ - static function bySubscriber($subscriberId, $offset = 0, $limit = PROFILES_PER_PAGE) @@ -362,7 +373,6 @@ class Subscription extends Memcached_DataObject * * @return Subscription stream of subscriptions; use fetch() to iterate */ - static function bySubscribed($subscribedId, $offset = 0, $limit = PROFILES_PER_PAGE) @@ -420,7 +430,6 @@ class Subscription extends Memcached_DataObject * * @return boolean success flag. */ - function update($orig=null) { $result = parent::update($orig); @@ -430,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)); + } }