]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/subs.php
Add lose <nickname> command to the command interpreter
[quix0rs-gnu-social.git] / lib / subs.php
index 68c89c84217f3e1228e436ef2f2eaecc64fce8eb..e2ce0667eb19f78e3c2e9f5aed9fb0fdcc76df47 100644 (file)
 
 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,108 +26,63 @@ function subs_subscribe_user($user, $other_nickname)
 
 function subs_subscribe_to($user, $other)
 {
-    if ($user->isSubscribed($other)) {
-        return _('Already subscribed!.');
-    }
-
-    if ($other->hasBlocked($user)) {
-        return _('User has blocked you.');
+    try {
+        Subscription::start($user->getProfile(), $other);
+        return true;
+    } catch (Exception $e) {
+        return $e->getMessage();
     }
-
-    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);
-    }
-
-    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)
+function subs_unsubscribe_to($user, $other)
 {
-
-    $other = User::staticGet('nickname', $other_nickname);
-
-    if (!$other) {
-        return _('No such user.');
+    try {
+        Subscription::cancel($user->getProfile(), $other);
+        return true;
+    } catch (Exception $e) {
+        return $e->getMessage();
     }
-
-    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!.');
+function subs_unsubscribe_from($user, $other){
+   $local = User::staticGet("nickname",$other);
+   if($local){
+     return subs_unsubscribe_to($local,$user);
+   } else {
+    try {
+        $remote = Profile::staticGet("nickname",$other);
+        if(is_string($remote)){
+          return $remote;
+        }
+        if (Event::handle('StartUnsubscribe', array($remote,$user))) {
 
-    $sub = DB_DataObject::factory('subscription');
+            $sub = DB_DataObject::factory('subscription');
 
-    $sub->subscriber = $user->id;
-    $sub->subscribed = $other->id;
+            $sub->subscriber = $remote->id;
+            $sub->subscribed = $user->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:' . $remote->id));
+            }
 
-    $profile = $user->getProfile();
 
-    $profile->blowSubscriptionsCount();
-    $other->blowSubscribersCount();
+            $user->blowSubscribersCount();
+            $remote->blowSubscribersCount();
 
-    return true;
+            Event::handle('EndUnsubscribe', array($remote, $user));
+        }
+    } catch (Exception $e) {
+        return $e->getMessage();
+    }
+   }
 }