diff --git a/actions/apigroupjoin.php b/actions/apigroupjoin.php index 345fed2215..2e35cb87de 100644 --- a/actions/apigroupjoin.php +++ b/actions/apigroupjoin.php @@ -125,26 +125,17 @@ class ApiGroupJoinAction extends ApiAuthAction return; } - $member = new Group_member(); - - $member->group_id = $this->group->id; - $member->profile_id = $this->user->id; - $member->created = common_sql_now(); - - $result = $member->insert(); - - if (!$result) { - common_log_db_error($member, 'INSERT', __FILE__); - $this->serverError( - sprintf( - // TRANS: Server error displayed when joining a group fails. - // TRANS: %1$s is a user nickname, $2$s is a group nickname. - _('Could not join user %1$s to group %2$s.'), - $this->user->nickname, - $this->group->nickname - ) - ); - return; + try { + if (Event::handle('StartJoinGroup', array($this->group, $this->user))) { + Group_member::join($this->group->id, $this->user->id); + Event::handle('EndJoinGroup', array($this->group, $this->user)); + } + } catch (Exception $e) { + // TRANS: Server error displayed when joining a group failed in the database. + // TRANS: %1$s is the joining user's nickname, $2$s is the group nickname for which the join failed. + $this->serverError(sprintf(_('Could not join user %1$s to group %2$s.'), + $cur->nickname, $this->group->nickname)); + return; } switch($this->format) { diff --git a/actions/apigroupleave.php b/actions/apigroupleave.php index 0ceb3523c8..083ebd890f 100644 --- a/actions/apigroupleave.php +++ b/actions/apigroupleave.php @@ -116,22 +116,18 @@ class ApiGroupLeaveAction extends ApiAuthAction return; } - $result = $member->delete(); - - if (!$result) { - common_log_db_error($member, 'DELETE', __FILE__); - $this->serverError( - sprintf( - // TRANS: Server error displayed when leaving a group fails. - // TRANS: %1$s is a user nickname, $2$s is a group nickname. - _('Could not remove user %1$s from group %2$s.'), - $this->user->nickname, - $this->group->nickname - ) - ); + try { + if (Event::handle('StartLeaveGroup', array($this->group,$this->user))) { + Group_member::leave($this->group->id, $this->user->id); + Event::handle('EndLeaveGroup', array($this->group, $this->user)); + } + } catch (Exception $e) { + // TRANS: Server error displayed when leaving a group failed in the database. + // TRANS: %1$s is the leaving user's nickname, $2$s is the group nickname for which the leave failed. + $this->serverError(sprintf(_('Could not remove user %1$s from group %2$s.'), + $cur->nickname, $this->group->nickname)); return; } - switch($this->format) { case 'xml': $this->showSingleXmlGroup($this->group); diff --git a/actions/joingroup.php b/actions/joingroup.php index 7beaf4f64a..4c45ca8b9d 100644 --- a/actions/joingroup.php +++ b/actions/joingroup.php @@ -138,6 +138,7 @@ class JoingroupAction extends Action // TRANS: %1$s is the joining user's nickname, $2$s is the group nickname for which the join failed. $this->serverError(sprintf(_('Could not join user %1$s to group %2$s.'), $cur->nickname, $this->group->nickname)); + return; } if ($this->boolean('ajax')) {