More modern coding, stuff related to subscriptions

Also trying to use the newly implemented AlreadyFulfilledException
This commit is contained in:
Mikael Nordfeldth 2014-05-05 23:57:41 +02:00
parent b16d8cba1d
commit fc3125cf28
4 changed files with 30 additions and 30 deletions

View File

@ -17,21 +17,16 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } if (!defined('GNUSOCIAL')) { exit(1); }
/** /**
* Table Definition for subscription * Table Definition for subscription
*/ */
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
class Subscription extends Managed_DataObject class Subscription extends Managed_DataObject
{ {
const CACHE_WINDOW = 201; const CACHE_WINDOW = 201;
const FORCE = true; const FORCE = true;
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
public $__table = 'subscription'; // table name public $__table = 'subscription'; // table name
public $subscriber; // int(4) primary_key not_null public $subscriber; // int(4) primary_key not_null
public $subscribed; // int(4) primary_key not_null public $subscribed; // int(4) primary_key not_null
@ -88,7 +83,7 @@ class Subscription extends Managed_DataObject
if (self::exists($subscriber, $other)) { if (self::exists($subscriber, $other)) {
// TRANS: Exception thrown when trying to subscribe while already subscribed. // TRANS: Exception thrown when trying to subscribe while already subscribed.
throw new Exception(_('Already subscribed!')); throw new AlreadyFulfilledException(_('Already subscribed!'));
} }
if ($other->hasBlocked($subscriber)) { if ($other->hasBlocked($subscriber)) {
@ -98,7 +93,7 @@ class Subscription extends Managed_DataObject
if (Event::handle('StartSubscribe', array($subscriber, $other))) { if (Event::handle('StartSubscribe', array($subscriber, $other))) {
$otherUser = User::getKV('id', $other->id); $otherUser = User::getKV('id', $other->id);
if ($otherUser && $otherUser->subscribe_policy == User::SUBSCRIBE_POLICY_MODERATE && !$force) { if ($otherUser instanceof User && $otherUser->subscribe_policy == User::SUBSCRIBE_POLICY_MODERATE && !$force) {
$sub = Subscription_queue::saveNew($subscriber, $other); $sub = Subscription_queue::saveNew($subscriber, $other);
$sub->notify(); $sub->notify();
} else { } else {
@ -113,13 +108,16 @@ class Subscription extends Managed_DataObject
$subscriber->blowSubscriptionCount(); $subscriber->blowSubscriptionCount();
$other->blowSubscriberCount(); $other->blowSubscriberCount();
if (!empty($otherUser) && if ($otherUser instanceof User &&
$otherUser->autosubscribe && $otherUser->autosubscribe &&
!self::exists($other, $subscriber) && !self::exists($other, $subscriber) &&
!$subscriber->hasBlocked($other)) { !$subscriber->hasBlocked($other)) {
try { try {
self::start($other, $subscriber); self::start($other, $subscriber);
} catch (AlreadyFulfilledException $e) {
// This shouldn't happen due to !self::exists above
common_debug('Tried to autosubscribe a user to its new subscriber.');
} catch (Exception $e) { } catch (Exception $e) {
common_log(LOG_ERR, "Exception during autosubscribe of {$other->nickname} to profile {$subscriber->id}: {$e->getMessage()}"); common_log(LOG_ERR, "Exception during autosubscribe of {$other->nickname} to profile {$subscriber->id}: {$e->getMessage()}");
} }
@ -151,7 +149,7 @@ class Subscription extends Managed_DataObject
$result = $sub->insert(); $result = $sub->insert();
if (!$result) { if ($result===false) {
common_log_db_error($sub, 'INSERT', __FILE__); common_log_db_error($sub, 'INSERT', __FILE__);
// TRANS: Exception thrown when a subscription could not be stored on the server. // TRANS: Exception thrown when a subscription could not be stored on the server.
throw new Exception(_('Could not save subscription.')); throw new Exception(_('Could not save subscription.'));
@ -173,7 +171,7 @@ class Subscription extends Managed_DataObject
{ {
$subscribedUser = User::getKV('id', $this->subscribed); $subscribedUser = User::getKV('id', $this->subscribed);
if (!empty($subscribedUser)) { if ($subscribedUser instanceof User) {
$subscriber = Profile::getKV('id', $this->subscriber); $subscriber = Profile::getKV('id', $this->subscriber);
@ -189,7 +187,7 @@ class Subscription extends Managed_DataObject
{ {
if (!self::exists($subscriber, $other)) { if (!self::exists($subscriber, $other)) {
// TRANS: Exception thrown when trying to unsibscribe without a subscription. // TRANS: Exception thrown when trying to unsibscribe without a subscription.
throw new Exception(_('Not subscribed!')); throw new AlreadyFulfilledException(_('Not subscribed!'));
} }
// Don't allow deleting self subs // Don't allow deleting self subs
@ -234,7 +232,7 @@ class Subscription extends Managed_DataObject
{ {
$sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id, $sub = Subscription::pkeyGet(array('subscriber' => $subscriber->id,
'subscribed' => $other->id)); 'subscribed' => $other->id));
return (empty($sub)) ? false : true; return ($sub instanceof Subscription);
} }
function asActivity() function asActivity()
@ -242,12 +240,12 @@ class Subscription extends Managed_DataObject
$subscriber = Profile::getKV('id', $this->subscriber); $subscriber = Profile::getKV('id', $this->subscriber);
$subscribed = Profile::getKV('id', $this->subscribed); $subscribed = Profile::getKV('id', $this->subscribed);
if (empty($subscriber)) { if (!$subscriber instanceof Profile) {
throw new Exception(sprintf(_('No profile for the subscriber: %d'), $this->subscriber)); throw new NoProfileException($this->subscriber);
} }
if (empty($subscribed)) { if (!$subscribed instanceof Profile) {
throw new Exception(sprintf(_('No profile for the subscribed: %d'), $this->subscribed)); throw new NoProfileException($this->subscribed);
} }
$act = new Activity(); $act = new Activity();

View File

@ -1,22 +1,18 @@
<?php <?php
if (!defined('GNUSOCIAL')) { exit(1); }
/** /**
* Table Definition for subscription_queue * Table Definition for subscription_queue
*/ */
require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
class Subscription_queue extends Managed_DataObject class Subscription_queue extends Managed_DataObject
{ {
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
public $__table = 'subscription_queue'; // table name public $__table = 'subscription_queue'; // table name
public $subscriber; public $subscriber;
public $subscribed; public $subscribed;
public $created; public $created;
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
public static function schemaDef() public static function schemaDef()
{ {
return array( return array(
@ -48,11 +44,11 @@ class Subscription_queue extends Managed_DataObject
return $rq; return $rq;
} }
function exists($subscriber, $other) public function exists(Profile $subscriber, Profile $other)
{ {
$sub = Subscription_queue::pkeyGet(array('subscriber' => $subscriber->id, $sub = Subscription_queue::pkeyGet(array('subscriber' => $subscriber->id,
'subscribed' => $other->id)); 'subscribed' => $other->id));
return (empty($sub)) ? false : true; return ($sub instanceof Subscription_queue);
} }
/** /**
@ -64,9 +60,11 @@ class Subscription_queue extends Managed_DataObject
{ {
$subscriber = Profile::getKV('id', $this->subscriber); $subscriber = Profile::getKV('id', $this->subscriber);
$subscribed = Profile::getKV('id', $this->subscribed); $subscribed = Profile::getKV('id', $this->subscribed);
$sub = Subscription::start($subscriber, $subscribed, Subscription::FORCE); try {
if ($sub) { $sub = Subscription::start($subscriber, $subscribed, Subscription::FORCE);
$this->delete(); $this->delete();
} catch (AlreadyFulfilledException $e) {
common_debug('Tried to start a subscription which already existed.');
} }
return $sub; return $sub;
} }

View File

@ -134,7 +134,11 @@ class UsersalmonAction extends SalmonAction
$oprofile = $this->ensureProfile(); $oprofile = $this->ensureProfile();
if ($oprofile instanceof Ostatus_profile) { if ($oprofile instanceof Ostatus_profile) {
common_log(LOG_INFO, sprintf('Canceling subscription from remote %s to local %s', $oprofile->getUri(), $this->user->getNickname())); common_log(LOG_INFO, sprintf('Canceling subscription from remote %s to local %s', $oprofile->getUri(), $this->user->getNickname()));
Subscription::cancel($oprofile->localProfile(), $this->user->getProfile()); try {
Subscription::cancel($oprofile->localProfile(), $this->user->getProfile());
} catch (AlreadyFulfilledException $e) {
common_debug('Subscription did not exist, so there was nothing to cancel');
}
} else { } else {
common_log(LOG_ERR, "Can't cancel subscription from remote, didn't find the profile"); common_log(LOG_ERR, "Can't cancel subscription from remote, didn't find the profile");
} }

View File

@ -195,7 +195,7 @@ class SalmonAction extends Action
function handleUpdateProfile() function handleUpdateProfile()
{ {
$oprofile = Ostatus_profile::getActorProfile($this->activity); $oprofile = Ostatus_profile::getActorProfile($this->activity);
if ($oprofile) { if ($oprofile instanceof Ostatus_profile) {
common_log(LOG_INFO, "Got a profile-update ping from $oprofile->uri"); common_log(LOG_INFO, "Got a profile-update ping from $oprofile->uri");
$oprofile->updateFromActivityObject($this->activity->actor); $oprofile->updateFromActivityObject($this->activity->actor);
} else { } else {