]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
add events for subscribing to people and joining groups
authorEvan Prodromou <evan@status.net>
Wed, 13 Jan 2010 10:16:13 +0000 (02:16 -0800)
committerEvan Prodromou <evan@status.net>
Wed, 13 Jan 2010 10:16:13 +0000 (02:16 -0800)
EVENTS.txt
actions/joingroup.php
actions/leavegroup.php
classes/Group_member.php
lib/command.php
lib/subs.php

index 64e345b6926b1800f12933d17453805a2de7dfcc..e6400244e41556309a3b59c5588c073410ae71dd 100644 (file)
@@ -655,3 +655,35 @@ StartUnblockProfile: when we're about to unblock
 EndUnblockProfile: when an unblock has succeeded
 - $user: the person doing the unblock
 - $profile: the person unblocked, can be remote
+
+StartSubscribe: when a subscription is starting
+- $user: the person subscribing
+- $other: the person being subscribed to
+
+EndSubscribe: when a subscription is finished
+- $user: the person subscribing
+- $other: the person being subscribed to
+
+StartUnsubscribe: when an unsubscribe is starting
+- $user: the person unsubscribing
+- $other: the person being unsubscribed from
+
+EndUnsubscribe: when an unsubscribe is done
+- $user: the person unsubscribing
+- $other: the person being unsubscribed to
+
+StartJoinGroup: when a user is joining a group
+- $group: the group being joined
+- $user: the user joining
+
+EndJoinGroup: when a user finishes joining a group
+- $group: the group being joined
+- $user: the user joining
+
+StartLeaveGroup: when a user is leaving a group
+- $group: the group being left
+- $user: the user leaving
+
+EndLeaveGroup: when a user has left a group
+- $group: the group being left
+- $user: the user leaving
index 05e33e7cb13163812117b47852cc403e4488e976..235e5ab4c2c8ea792de834ce745079bd7c7dc45c 100644 (file)
@@ -115,16 +115,12 @@ class JoingroupAction extends Action
 
         $cur = common_current_user();
 
-        $member = new Group_member();
-
-        $member->group_id   = $this->group->id;
-        $member->profile_id = $cur->id;
-        $member->created    = common_sql_now();
-
-        $result = $member->insert();
-
-        if (!$result) {
-            common_log_db_error($member, 'INSERT', __FILE__);
+        try {
+            if (Event::handle('StartJoinGroup', array($this->group, $cur))) {
+                Group_member::join($this->group->id, $cur->id);
+                Event::handle('EndJoinGroup', array($this->group, $cur));
+            }
+        } catch (Exception $e) {
             $this->serverError(sprintf(_('Could not join user %1$s to group %2$s.'),
                                        $cur->nickname, $this->group->nickname));
         }
index b0f973e1acf5867b8aa246858943f0d12a49b4e3..9b9d83b6caae243befbd9e43a43eb6b137be53f5 100644 (file)
@@ -110,22 +110,15 @@ class LeavegroupAction extends Action
 
         $cur = common_current_user();
 
-        $member = new Group_member();
-
-        $member->group_id   = $this->group->id;
-        $member->profile_id = $cur->id;
-
-        if (!$member->find(true)) {
-            $this->serverError(_('Could not find membership record.'));
-            return;
-        }
-
-        $result = $member->delete();
-
-        if (!$result) {
-            common_log_db_error($member, 'DELETE', __FILE__);
+        try {
+            if (Event::handle('StartLeaveGroup', array($this->group, $cur))) {
+                Group_member::leave($this->group->id, $cur->id);
+                Event::handle('EndLeaveGroup', array($this->group, $cur));
+            }
+        } catch (Exception $e) {
             $this->serverError(sprintf(_('Could not remove user %1$s from group %2$s.'),
                                        $cur->nickname, $this->group->nickname));
+            return;
         }
 
         if ($this->boolean('ajax')) {
index 069b2c7a1c75c4150a2a0263473ad60e9069868d..7b1760f767e489ee068f70e8ce9c3ffee310a424 100644 (file)
@@ -25,4 +25,41 @@ class Group_member extends Memcached_DataObject
     {
         return Memcached_DataObject::pkeyGet('Group_member', $kv);
     }
+
+    static function join($group_id, $profile_id)
+    {
+        $member = new Group_member();
+
+        $member->group_id   = $group_id;
+        $member->profile_id = $profile_id;
+        $member->created    = common_sql_now();
+
+        $result = $member->insert();
+
+        if (!$result) {
+            common_log_db_error($member, 'INSERT', __FILE__);
+            throw new Exception(_("Group join failed."));
+        }
+
+        return true;
+    }
+
+    static function leave($group_id, $profile_id)
+    {
+        $member = Group_member::pkeyGet(array('group_id' => $group_id,
+                                              'profile_id' => $profile_id));
+
+        if (empty($member)) {
+            throw new Exception(_("Not part of group."));
+        }
+
+        $result = $member->delete();
+
+        if (!$result) {
+            common_log_db_error($member, 'INSERT', __FILE__);
+            throw new Exception(_("Group leave failed."));
+        }
+
+        return true;
+    }
 }
index f846fb823fdd1dacd3eea1d21369b39a41909915..c0a32e1b1a4cb2184434e96bc5423a57749262cd 100644 (file)
@@ -222,18 +222,15 @@ class JoinCommand extends Command
             return;
         }
 
-        $member = new Group_member();
-
-        $member->group_id   = $group->id;
-        $member->profile_id = $cur->id;
-        $member->created    = common_sql_now();
-
-        $result = $member->insert();
-        if (!$result) {
-          common_log_db_error($member, 'INSERT', __FILE__);
-          $channel->error($cur, sprintf(_('Could not join user %s to group %s'),
-                                       $cur->nickname, $group->nickname));
-          return;
+        try {
+            if (Event::handle('StartJoinGroup', array($group, $cur))) {
+                Group_member::join($group->id, $cur->id);
+                Event::handle('EndJoinGroup', array($group, $cur));
+            }
+        } catch (Exception $e) {
+            $channel->error($cur, sprintf(_('Could not join user %s to group %s'),
+                                          $cur->nickname, $group->nickname));
+            return;
         }
 
         $channel->output($cur, sprintf(_('%s joined group %s'),
@@ -269,21 +266,15 @@ class DropCommand extends Command
             return;
         }
 
-        $member = new Group_member();
-
-        $member->group_id   = $group->id;
-        $member->profile_id = $cur->id;
-
-        if (!$member->find(true)) {
-          $channel->error($cur,_('Could not find membership record.'));
-          return;
-        }
-        $result = $member->delete();
-        if (!$result) {
-          common_log_db_error($member, 'INSERT', __FILE__);
-          $channel->error($cur, sprintf(_('Could not remove user %s to group %s'),
-                                       $cur->nickname, $group->nickname));
-          return;
+        try {
+            if (Event::handle('StartLeaveGroup', array($group, $cur))) {
+                Group_member::leave($group->id, $cur->id);
+                Event::handle('EndLeaveGroup', array($group, $cur));
+            }
+        } catch (Exception $e) {
+            $channel->error($cur, sprintf(_('Could not remove user %s to group %s'),
+                                          $cur->nickname, $group->nickname));
+            return;
         }
 
         $channel->output($cur, sprintf(_('%s left group %s'),
index 4b6b03967aee356bccbcd0675dfe3defe1ec0adb..5ac1a75a5ce80aecf1fa70221451aa5edb0c3ae3 100644 (file)
@@ -56,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 ($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));
-               }
+                if ($cache) {
+                    $cache->delete(common_cache_key('user:notices_with_friends:' . $other->id));
+                }
 
-        subs_notify($user, $other);
+                subs_notify($user, $other);
+            }
+
+            Event::handle('EndSubscribe', array($user, $other));
+        }
+    } catch (Exception $e) {
+        return $e->getMessage();
     }
 
     return true;
@@ -133,28 +142,37 @@ function subs_unsubscribe_to($user, $other)
         return _('Couldn\'t delete self-subscription.');
     }
 
-    $sub = DB_DataObject::factory('subscription');
+    try {
+        if (Event::handle('StartUnsubscribe', array($user, $other))) {
 
-    $sub->subscriber = $user->id;
-    $sub->subscribed = $other->id;
+            $sub = DB_DataObject::factory('subscription');
 
-    $sub->find(true);
+            $sub->subscriber = $user->id;
+            $sub->subscribed = $other->id;
 
-    // note we checked for existence above
+            $sub->find(true);
 
-    if (!$sub->delete())
-        return _('Couldn\'t delete subscription.');
+            // note we checked for existence above
 
-    $cache = common_memcache();
+            if (!$sub->delete())
+              return _('Couldn\'t delete subscription.');
 
-    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();
+
+            $profile->blowSubscriptionsCount();
+            $other->blowSubscribersCount();
+
+            Event::handle('EndUnsubscribe', array($user, $other));
+        }
+    } catch (Exception $e) {
+        return $e->getMessage();
+    }
 
     return true;
 }