diff options
author | Zach Copley <zach@status.net> | 2010-03-05 03:56:04 +0000 |
---|---|---|
committer | Zach Copley <zach@status.net> | 2010-03-05 03:56:04 +0000 |
commit | b8001ea1079c4c8895fd2323e1e4a47c0d71fde3 (patch) | |
tree | b732b239bf790c78c90f4c7d3be7044ce9f7da45 /lib/subs.php | |
parent | e3c4b0c85d3fbae9604b22d3666fe36a3c1c7551 (diff) | |
parent | 064c45890f896f2af8a0231449fa5337bb79c509 (diff) |
Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x
Diffstat (limited to 'lib/subs.php')
-rw-r--r-- | lib/subs.php | 141 |
1 files changed, 25 insertions, 116 deletions
diff --git a/lib/subs.php b/lib/subs.php index 5ac1a75a5..e2ce0667e 100644 --- a/lib/subs.php +++ b/lib/subs.php @@ -19,24 +19,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } -require_once('XMPPHP/XMPP.php'); - -/* Subscribe $user to nickname $other_nickname - Returns true or an error message. -*/ - -function subs_subscribe_user($user, $other_nickname) -{ - - $other = User::staticGet('nickname', $other_nickname); - - if (!$other) { - return _('No such user.'); - } - - return subs_subscribe_to($user, $other); -} - /* Subscribe user $user to other user $other. * Note: $other must be a local user, not a remote profile. * Because the other way is quite a bit more complicated. @@ -44,111 +26,40 @@ function subs_subscribe_user($user, $other_nickname) 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!'); - } - - if ($other->hasBlocked($user)) { - return _('User has blocked you.'); - } - try { - if (Event::handle('StartSubscribe', array($user, $other))) { - - if (!$user->subscribeTo($other)) { - return _('Could not subscribe.'); - return; - } - - subs_notify($other, $user); - - $cache = common_memcache(); - - if ($cache) { - $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id)); - } - - $profile = $user->getProfile(); - - $profile->blowSubscriptionsCount(); - $other->blowSubscribersCount(); - - if ($other->autosubscribe && !$other->isSubscribed($user) && !$user->hasBlocked($other)) { - if (!$other->subscribeTo($user)) { - return _('Could not subscribe other to you.'); - } - $cache = common_memcache(); - - if ($cache) { - $cache->delete(common_cache_key('user:notices_with_friends:' . $other->id)); - } - - subs_notify($user, $other); - } - - Event::handle('EndSubscribe', array($user, $other)); - } + Subscription::start($user->getProfile(), $other); + return true; } catch (Exception $e) { return $e->getMessage(); } - - return true; -} - -function subs_notify($listenee, $listener) -{ - # XXX: add other notifications (Jabber, SMS) here - # XXX: queue this and handle it offline - # XXX: Whatever happens, do it in Twitter-like API, too - subs_notify_email($listenee, $listener); } -function subs_notify_email($listenee, $listener) -{ - mail_subscribe_notify($listenee, $listener); -} - -/* Unsubscribe $user from nickname $other_nickname - Returns true or an error message. -*/ - -function subs_unsubscribe_user($user, $other_nickname) -{ - - $other = User::staticGet('nickname', $other_nickname); - - if (!$other) { - return _('No such user.'); - } - - return subs_unsubscribe_to($user, $other->getProfile()); -} - -/* Unsubscribe user $user from profile $other - * NB: other can be a remote user. */ - function subs_unsubscribe_to($user, $other) { - if (!$user->isSubscribed($other)) - return _('Not subscribed!'); - - // Don't allow deleting self subs - - if ($user->id == $other->id) { - return _('Couldn\'t delete self-subscription.'); + try { + Subscription::cancel($user->getProfile(), $other); + return true; + } catch (Exception $e) { + return $e->getMessage(); } +} +function subs_unsubscribe_from($user, $other){ + $local = User::staticGet("nickname",$other); + if($local){ + return subs_unsubscribe_to($local,$user); + } else { try { - if (Event::handle('StartUnsubscribe', array($user, $other))) { + $remote = Profile::staticGet("nickname",$other); + if(is_string($remote)){ + return $remote; + } + if (Event::handle('StartUnsubscribe', array($remote,$user))) { $sub = DB_DataObject::factory('subscription'); - $sub->subscriber = $user->id; - $sub->subscribed = $other->id; + $sub->subscriber = $remote->id; + $sub->subscribed = $user->id; $sub->find(true); @@ -160,20 +71,18 @@ function subs_unsubscribe_to($user, $other) $cache = common_memcache(); if ($cache) { - $cache->delete(common_cache_key('user:notices_with_friends:' . $user->id)); + $cache->delete(common_cache_key('user:notices_with_friends:' . $remote->id)); } - $profile = $user->getProfile(); - $profile->blowSubscriptionsCount(); - $other->blowSubscribersCount(); + $user->blowSubscribersCount(); + $remote->blowSubscribersCount(); - Event::handle('EndUnsubscribe', array($user, $other)); + Event::handle('EndUnsubscribe', array($remote, $user)); } } catch (Exception $e) { return $e->getMessage(); } - - return true; + } } |