X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=classes%2FSubscription.php;h=c532a3c3de67474b0ca7a638b4cdac939527bcd3;hb=57163e6fd69d560b462a1b9eaee054126e029703;hp=4d7eb524dcf8d89da61e4ba15d9a2bac39d7b7cc;hpb=b63f6e949cd4703b93bf667e08f110b26e895ba4;p=quix0rs-gnu-social.git diff --git a/classes/Subscription.php b/classes/Subscription.php index 4d7eb524dc..c532a3c3de 100644 --- a/classes/Subscription.php +++ b/classes/Subscription.php @@ -32,9 +32,9 @@ class Subscription extends Managed_DataObject public $subscribed; // int(4) primary_key not_null public $jabber; // tinyint(1) default_1 public $sms; // tinyint(1) default_1 - public $token; // varchar(255) - public $secret; // varchar(255) - public $uri; // varchar(255) + public $token; // varchar(191) not 255 because utf8mb4 takes more space + public $secret; // varchar(191) not 255 because utf8mb4 takes more space + public $uri; // varchar(191) not 255 because utf8mb4 takes more space public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP @@ -46,9 +46,9 @@ class Subscription extends Managed_DataObject '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'), + 'token' => array('type' => 'varchar', 'length' => 191, 'description' => 'authorization token'), + 'secret' => array('type' => 'varchar', 'length' => 191, 'description' => 'token secret'), + 'uri' => array('type' => 'varchar', 'length' => 191, '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'), ), @@ -92,12 +92,17 @@ class Subscription extends Managed_DataObject } if (Event::handle('StartSubscribe', array($subscriber, $other))) { - $otherUser = User::getKV('id', $other->id); - if ($otherUser instanceof User && $otherUser->subscribe_policy == User::SUBSCRIBE_POLICY_MODERATE && !$force) { - $sub = Subscription_queue::saveNew($subscriber, $other); - $sub->notify(); + // unless subscription is forced, the user policy for subscription approvals is tested + if (!$force && $other->requiresSubscriptionApproval($subscriber)) { + try { + $sub = Subscription_queue::saveNew($subscriber, $other); + $sub->notify(); + } catch (AlreadyFulfilledException $e) { + $sub = Subscription_queue::getSubQueue($subscriber, $other); + } } else { - $sub = self::saveNew($subscriber->id, $other->id); + $otherUser = User::getKV('id', $other->id); + $sub = self::saveNew($subscriber, $other); $sub->notify(); self::blow('user:notices_with_friends:%d', $subscriber->id); @@ -124,7 +129,7 @@ class Subscription extends Managed_DataObject } } - if ($sub instanceof Subscription) { // i.e. not SubscriptionQueue + if ($sub instanceof Subscription) { // i.e. not Subscription_queue Event::handle('EndSubscribe', array($subscriber, $other)); } } @@ -132,21 +137,31 @@ class Subscription extends Managed_DataObject return $sub; } + static function ensureStart(Profile $subscriber, Profile $other, $force=false) + { + try { + $sub = self::start($subscriber, $other, $force); + } catch (AlreadyFulfilledException $e) { + return self::getSubscription($subscriber, $other); + } + return $sub; + } + /** * Low-level subscription save. * Outside callers should use Subscription::start() */ - protected function saveNew($subscriber_id, $other_id) + protected static function saveNew(Profile $subscriber, Profile $other) { $sub = new Subscription(); - $sub->subscriber = $subscriber_id; - $sub->subscribed = $other_id; + $sub->subscriber = $subscriber->getID(); + $sub->subscribed = $other->getID(); $sub->jabber = 1; $sub->sms = 1; $sub->created = common_sql_now(); - $sub->uri = self::newURI($sub->subscriber, - $sub->subscribed, + $sub->uri = self::newUri($subscriber, + $other, $sub->created); $result = $sub->insert(); @@ -232,23 +247,41 @@ class Subscription extends Managed_DataObject static function exists(Profile $subscriber, Profile $other) { - $sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id, - 'subscribed' => $other->id)); - return ($sub instanceof Subscription); + try { + $sub = self::getSubscription($subscriber, $other); + } catch (NoResultException $e) { + return false; + } + + return true; } - function asActivity() + static function getSubscription(Profile $subscriber, Profile $other) { - $subscriber = Profile::getKV('id', $this->subscriber); - $subscribed = Profile::getKV('id', $this->subscribed); - - if (!$subscriber instanceof Profile) { - throw new NoProfileException($this->subscriber); + // This is essentially a pkeyGet but we have an object to return in NoResultException + $sub = new Subscription(); + $sub->subscriber = $subscriber->id; + $sub->subscribed = $other->id; + if (!$sub->find(true)) { + throw new NoResultException($sub); } + return $sub; + } - if (!$subscribed instanceof Profile) { - throw new NoProfileException($this->subscribed); - } + public function getSubscriber() + { + return Profile::getByID($this->subscriber); + } + + public function getSubscribed() + { + return Profile::getByID($this->subscribed); + } + + function asActivity() + { + $subscriber = $this->getSubscriber(); + $subscribed = $this->getSubscribed(); $act = new Activity(); @@ -256,7 +289,7 @@ class Subscription extends Managed_DataObject // XXX: rationalize this with the URL - $act->id = $this->getURI(); + $act->id = $this->getUri(); $act->time = strtotime($this->created); // TRANS: Activity title when subscribing to another person. @@ -401,20 +434,8 @@ class Subscription extends Managed_DataObject return parent::update($dataObject); } - 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) + public function getUri() { - return TagURI::mint('follow:%d:%d:%s', - $subscriber_id, - $subscribed_id, - common_date_iso8601($created)); + return $this->uri ?: self::newUri($this->getSubscriber(), $this->getSubscribed(), $this->created); } }