function subs_subscribe_to($user, $other)
{
+ if (!$user->hasRight(Right::SUBSCRIBE)) {
+ return _('You have been banned from subscribing.');
+ }
+
if ($user->isSubscribed($other)) {
return _('Already subscribed!');
}
return _('User has blocked you.');
}
- if (!$user->subscribeTo($other)) {
- return _('Could not subscribe.');
- return;
- }
+ try {
+ if (Event::handle('StartSubscribe', array($user, $other))) {
- subs_notify($other, $user);
+ if (!$user->subscribeTo($other)) {
+ return _('Could not subscribe.');
+ return;
+ }
- $cache = common_memcache();
+ subs_notify($other, $user);
- if ($cache) {
- $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id));
- }
+ $cache = common_memcache();
- $profile = $user->getProfile();
+ if ($cache) {
+ $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id));
+ }
- $profile->blowSubscriptionsCount();
- $other->blowSubscribersCount();
+ $profile = $user->getProfile();
- if ($other->autosubscribe && !$other->isSubscribed($user) && !$user->hasBlocked($other)) {
- if (!$other->subscribeTo($user)) {
- return _('Could not subscribe other to you.');
- }
- $cache = common_memcache();
+ $profile->blowSubscriptionsCount();
+ $other->blowSubscribersCount();
- if ($cache) {
- $cache->delete(common_cache_key('user:notices_with_friends:' . $other->id));
- }
+ if ($other->autosubscribe && !$other->isSubscribed($user) && !$user->hasBlocked($other)) {
+ if (!$other->subscribeTo($user)) {
+ return _('Could not subscribe other to you.');
+ }
+ $cache = common_memcache();
- subs_notify($user, $other);
+ if ($cache) {
+ $cache->delete(common_cache_key('user:notices_with_friends:' . $other->id));
+ }
+
+ subs_notify($user, $other);
+ }
+
+ Event::handle('EndSubscribe', array($user, $other));
+ }
+ } catch (Exception $e) {
+ return $e->getMessage();
}
return true;
function subs_unsubscribe_to($user, $other)
{
if (!$user->isSubscribed($other))
- return _('Not subscribed!.');
+ return _('Not subscribed!');
- $sub = DB_DataObject::factory('subscription');
+ // Don't allow deleting self subs
- $sub->subscriber = $user->id;
- $sub->subscribed = $other->id;
+ if ($user->id == $other->id) {
+ return _('Couldn\'t delete self-subscription.');
+ }
+
+ try {
+ if (Event::handle('StartUnsubscribe', array($user, $other))) {
+
+ $sub = DB_DataObject::factory('subscription');
+
+ $sub->subscriber = $user->id;
+ $sub->subscribed = $other->id;
- $sub->find(true);
+ $sub->find(true);
- // note we checked for existence above
+ // note we checked for existence above
- if (!$sub->delete())
- return _('Couldn\'t delete subscription.');
+ if (!$sub->delete())
+ return _('Couldn\'t delete subscription.');
- $cache = common_memcache();
+ $cache = common_memcache();
- if ($cache) {
- $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id));
- }
+ if ($cache) {
+ $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id));
+ }
- $profile = $user->getProfile();
+ $profile = $user->getProfile();
- $profile->blowSubscriptionsCount();
- $other->blowSubscribersCount();
+ $profile->blowSubscriptionsCount();
+ $other->blowSubscribersCount();
+
+ Event::handle('EndUnsubscribe', array($user, $other));
+ }
+ } catch (Exception $e) {
+ return $e->getMessage();
+ }
return true;
}