function leavegroup_submit(Pieform $form, $values) { global $USER, $SESSION, $groupid, $goto; group_remove_user($groupid, $USER->get('id')); $SESSION->add_ok_msg(get_string('leftgroup', 'group')); redirect($goto); }
function group_removeuser_submit(Pieform $form, $values) { global $SESSION; $group = (int) $values['group']; if (group_user_access($group) != 'admin') { $SESSION->add_error_msg(get_string('accessdenied', 'error')); redirect('/group/members.php?id=' . $group); } group_remove_user($group, $values['member']); $SESSION->add_ok_msg(get_string('userremoved', 'group')); redirect('/group/members.php?id=' . $group); }
/** * Deletes a user * * This function ensures that a user is deleted according to how Mahara wants a * deleted user to be. You can call it multiple times on the same user without * harm. * * @param int $userid The ID of the user to delete */ function delete_user($userid) { db_begin(); // We want to append 'deleted.timestamp' to some unique fields in the usr // table, so they can be reused by new accounts $fieldstomunge = array('username', 'email'); $datasuffix = '.deleted.' . time(); $user = get_record('usr', 'id', $userid, null, null, null, null, implode(', ', $fieldstomunge)); $deleterec = new StdClass(); $deleterec->id = $userid; $deleterec->deleted = 1; foreach ($fieldstomunge as $field) { if (!preg_match('/\\.deleted\\.\\d+$/', $user->{$field})) { $deleterec->{$field} = $user->{$field} . $datasuffix; } } // Set authinstance to default internal, otherwise the old authinstance can be blocked from deletion // by deleted users. $authinst = get_field('auth_instance', 'id', 'institution', 'mahara', 'authname', 'internal'); if ($authinst) { $deleterec->authinstance = $authinst; } update_record('usr', $deleterec); // Remove user from any groups they're in, invited to or want to be in $groupids = get_column('group_member', '"group"', 'member', $userid); if ($groupids) { require_once get_config('libroot') . 'group.php'; foreach ($groupids as $groupid) { group_remove_user($groupid, $userid, true); } } delete_records('group_member_request', 'member', $userid); delete_records('group_member_invite', 'member', $userid); // Remove any friend relationships the user is in execute_sql('DELETE FROM {usr_friend} WHERE usr1 = ? OR usr2 = ?', array($userid, $userid)); execute_sql('DELETE FROM {usr_friend_request} WHERE owner = ? OR requester = ?', array($userid, $userid)); delete_records('artefact_access_usr', 'usr', $userid); delete_records('auth_remote_user', 'localusr', $userid); delete_records('import_queue', 'usr', $userid); delete_records('usr_account_preference', 'usr', $userid); delete_records('usr_activity_preference', 'usr', $userid); delete_records('usr_infectedupload', 'usr', $userid); delete_records('usr_institution', 'usr', $userid); delete_records('usr_institution_request', 'usr', $userid); delete_records('usr_password_request', 'usr', $userid); delete_records('usr_watchlist_view', 'usr', $userid); delete_records('view_access', 'usr', $userid); // Remove the user's views & artefacts $viewids = get_column('view', 'id', 'owner', $userid); if ($viewids) { require_once get_config('libroot') . 'view.php'; foreach ($viewids as $viewid) { $view = new View($viewid); $view->delete(); } } $artefactids = get_column('artefact', 'id', 'owner', $userid); // @todo: test all artefact bulk_delete stuff, then replace the one-by-one // artefact deletion below with ArtefactType::delete_by_artefacttype($artefactids); if ($artefactids) { foreach ($artefactids as $artefactid) { try { $a = artefact_instance_from_id($artefactid); $a->delete(); } catch (ArtefactNotFoundException $e) { // Awesome, it's already gone. } } } db_commit(); handle_event('deleteuser', $userid); }
continue; } if (!in_array($loggedinrole, call_static_method('GroupType' . $groupdata[$groupid]->grouptype, 'get_view_assessing_roles'))) { json_reply('local', get_string('accessdenied', 'error')); } if (group_user_access($groupid, $userid) && in_array($groupid, array_diff($initialgroups, $resultgroups))) { json_reply('local', get_string('cantremovememberfromgroup', 'group', hsc($groupdata[$groupid]->name))); } } if ($addtype == 'add') { db_begin(); //remove group membership if ($groupstoremove = array_diff($initialgroups, $resultgroups)) { $groupstoremovemail = ''; foreach ($groupstoremove as $groupid) { group_remove_user($groupid, $userid, $role = null); $groupstoremovemail .= $groupdata[$groupid]->name . "\n"; } } //add group membership if ($groupstoadd = array_diff($resultgroups, $initialgroups)) { $groupstoaddmail = ''; foreach ($groupstoadd as $groupid) { group_add_user($groupid, $userid, $role = null); $groupstoaddmail .= $groupdata[$groupid]->name . "\n"; } } db_commit(); // Users notification $userrecord = get_record('usr', 'id', $userid); $lang = get_user_language($userid);