]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - lib/subs.php
Merge branch '0.9.x' of git@gitorious.org:statusnet/mainline into 0.9.x
[quix0rs-gnu-social.git] / lib / subs.php
index 934380b76e88dc569e6bce478709e60ddfd85f1d..5ac1a75a5ce80aecf1fa70221451aa5edb0c3ae3 100644 (file)
@@ -44,6 +44,10 @@ 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!');
     }
@@ -52,35 +56,44 @@ function subs_subscribe_to($user, $other)
         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;
@@ -121,30 +134,45 @@ function subs_unsubscribe_user($user, $other_nickname)
 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;
 }