From 430bd69312a27f9f97bda78566a78c9f7eec1f14 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 13 Jan 2010 02:16:13 -0800 Subject: add events for subscribing to people and joining groups --- lib/command.php | 45 ++++++++++++----------------- lib/subs.php | 88 ++++++++++++++++++++++++++++++++++----------------------- 2 files changed, 71 insertions(+), 62 deletions(-) (limited to 'lib') diff --git a/lib/command.php b/lib/command.php index f846fb823..c0a32e1b1 100644 --- a/lib/command.php +++ b/lib/command.php @@ -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'), diff --git a/lib/subs.php b/lib/subs.php index 4b6b03967..5ac1a75a5 100644 --- a/lib/subs.php +++ b/lib/subs.php @@ -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; } -- cgit v1.2.3-54-g00ecf