From d915137eff5bacdabafba50f14609489d3c9b64b Mon Sep 17 00:00:00 2001 From: Richard Underwood Date: Tue, 4 Oct 2016 10:05:22 +0100 Subject: [PATCH] Allow removal of members from groups. --- groups.php | 18 ++++++++++++++++-- includes/groups.inc.php | 28 ++++++++++++++++++++++++++-- index.php | 7 ++++++- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/groups.php b/groups.php index 3712782..59a0557 100644 --- a/groups.php +++ b/groups.php @@ -100,8 +100,8 @@ case "addmember": if (user_exists($user)) { if(is_group_member($groupid,$user)) { jtable_respond(null, 'error', "User already a member of the group"); - } elseif(add_group_member($groupid,$user)) { - $entry = array('user' => $user); + } elseif(!is_null($id=add_group_member($groupid,$user))) { + $entry = array('id' => $id,'user' => $user); jtable_respond($entry, 'single'); } else { jtable_respond(null, 'error', "Failed to add user to group"); @@ -114,6 +114,20 @@ case "addmember": } break; +case "removemember": + $id = isset($_POST['id']) ? $_POST['id'] : ''; + + if ($id != '') { + if(remove_group_member($id)) { + jtable_respond(null, 'delete'); + } else { + jtable_respond(null, 'error', "Failed to delete user from group"); + } + } else { + jtable_respond(null, 'error', 'ID not specified'); + } + break; + default: jtable_respond(null, 'error', 'Invalid action'); break; diff --git a/includes/groups.inc.php b/includes/groups.inc.php index a5983d8..597ab3f 100644 --- a/includes/groups.inc.php +++ b/includes/groups.inc.php @@ -24,7 +24,7 @@ function get_group_info($name) { function get_group_name($id) { $db = get_db(); - $q = $db->prepare('SELECT * FROM groups WHERE id = ?'); + $q = $db->prepare('SELECT name FROM groups WHERE id = ?'); $q->bindValue(1, $id, SQLITE3_INTEGER); $r = $q->execute(); $ret = $r->fetchArray(SQLITE3_NUM); @@ -142,12 +142,36 @@ function add_group_member($id,$user) { $q->bindValue(1, $id, SQLITE3_INTEGER); $q->bindValue(2, $userid, SQLITE3_INTEGER); $ret = $q->execute(); - $db->close(); if($ret) { writelog("Added user $user to group " . get_group_name($id) . "."); + return $db->lastInsertRowID(); } else { writelog("Failed to add user $user to group " . get_group_name($id) . "."); + return null; + } +} + +function remove_group_member($id) { + $db = get_db(); + + $q = $db->prepare('SELECT groups.name,users.emailaddress FROM groupmembers,users,groups WHERE groupmembers.id=? AND groupmembers.user=users.id AND groupmembers."group"=groups.id'); + $q->bindValue(1, $id, SQLITE3_INTEGER); + $r = $q->execute(); + $ret = $r->fetchArray(SQLITE3_NUM); + $group=$ret[0]; + $user=$ret[1]; + $q->close(); + + $q = $db->prepare('DELETE FROM groupmembers WHERE id=?'); + $q->bindValue(1, $id, SQLITE3_INTEGER); + $ret = $q->execute(); + $db->close(); + + if($ret) { + writelog("Removed user $user from group $group."); + } else { + writelog("Failed to remove user $user from group $group."); } return $ret; } diff --git a/index.php b/index.php index 072c9d0..ef52888 100644 --- a/index.php +++ b/index.php @@ -1069,9 +1069,14 @@ $(document).ready(function () { $('#Groups').jtable('openChildTable', $img.closest('tr'), { title: 'Members of ' + data.record.name, + messages: { + addNewRecord: 'Add group member', + deleteConfirmation: 'This user will be removed from the group. Are you sure?' + }, actions: { listAction: 'groups.php?action=listmembers&groupid=' + data.record.id, - createAction: 'groups.php?action=addmember&groupid=' + data.record.id + createAction: 'groups.php?action=addmember&groupid=' + data.record.id, + deleteAction: 'groups.php?action=removemember&groupid=' + data.record.id }, fields: { id: {