add events for subscribing to people and joining groups

This commit is contained in:
Evan Prodromou 2010-01-13 02:16:13 -08:00
parent 23599da91e
commit 430bd69312
6 changed files with 154 additions and 87 deletions

View File

@ -655,3 +655,35 @@ StartUnblockProfile: when we're about to unblock
EndUnblockProfile: when an unblock has succeeded EndUnblockProfile: when an unblock has succeeded
- $user: the person doing the unblock - $user: the person doing the unblock
- $profile: the person unblocked, can be remote - $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

View File

@ -115,16 +115,12 @@ class JoingroupAction extends Action
$cur = common_current_user(); $cur = common_current_user();
$member = new Group_member(); try {
if (Event::handle('StartJoinGroup', array($this->group, $cur))) {
$member->group_id = $this->group->id; Group_member::join($this->group->id, $cur->id);
$member->profile_id = $cur->id; Event::handle('EndJoinGroup', array($this->group, $cur));
$member->created = common_sql_now(); }
} catch (Exception $e) {
$result = $member->insert();
if (!$result) {
common_log_db_error($member, 'INSERT', __FILE__);
$this->serverError(sprintf(_('Could not join user %1$s to group %2$s.'), $this->serverError(sprintf(_('Could not join user %1$s to group %2$s.'),
$cur->nickname, $this->group->nickname)); $cur->nickname, $this->group->nickname));
} }

View File

@ -110,22 +110,15 @@ class LeavegroupAction extends Action
$cur = common_current_user(); $cur = common_current_user();
$member = new Group_member(); try {
if (Event::handle('StartLeaveGroup', array($this->group, $cur))) {
$member->group_id = $this->group->id; Group_member::leave($this->group->id, $cur->id);
$member->profile_id = $cur->id; Event::handle('EndLeaveGroup', array($this->group, $cur));
if (!$member->find(true)) {
$this->serverError(_('Could not find membership record.'));
return;
} }
} catch (Exception $e) {
$result = $member->delete();
if (!$result) {
common_log_db_error($member, 'DELETE', __FILE__);
$this->serverError(sprintf(_('Could not remove user %1$s from group %2$s.'), $this->serverError(sprintf(_('Could not remove user %1$s from group %2$s.'),
$cur->nickname, $this->group->nickname)); $cur->nickname, $this->group->nickname));
return;
} }
if ($this->boolean('ajax')) { if ($this->boolean('ajax')) {

View File

@ -25,4 +25,41 @@ class Group_member extends Memcached_DataObject
{ {
return Memcached_DataObject::pkeyGet('Group_member', $kv); 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;
}
} }

View File

@ -222,15 +222,12 @@ class JoinCommand extends Command
return; return;
} }
$member = new Group_member(); try {
if (Event::handle('StartJoinGroup', array($group, $cur))) {
$member->group_id = $group->id; Group_member::join($group->id, $cur->id);
$member->profile_id = $cur->id; Event::handle('EndJoinGroup', array($group, $cur));
$member->created = common_sql_now(); }
} catch (Exception $e) {
$result = $member->insert();
if (!$result) {
common_log_db_error($member, 'INSERT', __FILE__);
$channel->error($cur, sprintf(_('Could not join user %s to group %s'), $channel->error($cur, sprintf(_('Could not join user %s to group %s'),
$cur->nickname, $group->nickname)); $cur->nickname, $group->nickname));
return; return;
@ -269,18 +266,12 @@ class DropCommand extends Command
return; return;
} }
$member = new Group_member(); try {
if (Event::handle('StartLeaveGroup', array($group, $cur))) {
$member->group_id = $group->id; Group_member::leave($group->id, $cur->id);
$member->profile_id = $cur->id; Event::handle('EndLeaveGroup', array($group, $cur));
if (!$member->find(true)) {
$channel->error($cur,_('Could not find membership record.'));
return;
} }
$result = $member->delete(); } catch (Exception $e) {
if (!$result) {
common_log_db_error($member, 'INSERT', __FILE__);
$channel->error($cur, sprintf(_('Could not remove user %s to group %s'), $channel->error($cur, sprintf(_('Could not remove user %s to group %s'),
$cur->nickname, $group->nickname)); $cur->nickname, $group->nickname));
return; return;

View File

@ -56,6 +56,9 @@ function subs_subscribe_to($user, $other)
return _('User has blocked you.'); return _('User has blocked you.');
} }
try {
if (Event::handle('StartSubscribe', array($user, $other))) {
if (!$user->subscribeTo($other)) { if (!$user->subscribeTo($other)) {
return _('Could not subscribe.'); return _('Could not subscribe.');
return; return;
@ -87,6 +90,12 @@ function subs_subscribe_to($user, $other)
subs_notify($user, $other); subs_notify($user, $other);
} }
Event::handle('EndSubscribe', array($user, $other));
}
} catch (Exception $e) {
return $e->getMessage();
}
return true; return true;
} }
@ -133,6 +142,9 @@ function subs_unsubscribe_to($user, $other)
return _('Couldn\'t delete self-subscription.'); return _('Couldn\'t delete self-subscription.');
} }
try {
if (Event::handle('StartUnsubscribe', array($user, $other))) {
$sub = DB_DataObject::factory('subscription'); $sub = DB_DataObject::factory('subscription');
$sub->subscriber = $user->id; $sub->subscriber = $user->id;
@ -156,6 +168,12 @@ function subs_unsubscribe_to($user, $other)
$profile->blowSubscriptionsCount(); $profile->blowSubscriptionsCount();
$other->blowSubscribersCount(); $other->blowSubscribersCount();
Event::handle('EndUnsubscribe', array($user, $other));
}
} catch (Exception $e) {
return $e->getMessage();
}
return true; return true;
} }