summaryrefslogtreecommitdiff
path: root/lib/subs.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/subs.php')
-rw-r--r--lib/subs.php141
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;
+ }
}