}
/**
- * Remove all users from all groups in course
+ * Remove all users (or one user) from all groups in course
* @param int $courseid
+ * @param int $userid 0 means all users
* @param bool $showfeedback
* @return bool success
*/
-function groups_delete_group_members($courseid, $showfeedback=false) {
+function groups_delete_group_members($courseid, $userid=0, $showfeedback=false) {
global $DB;
- $groupssql = "SELECT id FROM {groups} g WHERE g.courseid = ?";
- $DB->delete_records_select('groups_members', "groupid IN ($groupssql)", array($courseid));
+ if (is_bool($userid)) {
+ debugging('Incorrect userid function parameter');
+ return false;
+ }
+
+ $params = array('courseid'=>$courseid);
+
+ if ($userid) {
+ $usersql = "AND userid = :userid";
+ $params['userid'] = $userid;
+ } else {
+ $usersql = "";
+ }
+
+ $groupssql = "SELECT id FROM {groups} g WHERE g.courseid = :courseid";
+ $DB->delete_records_select('groups_members', "groupid IN ($groupssql) $usersql", $params);
//trigger groups events
- events_trigger('groups_members_removed', $courseid);
+ $eventdata = new object();
+ $eventdata->courseid = $courseid;
+ $eventdata->userid = $userid;
+ events_trigger('groups_members_removed', $eventdata);
if ($showfeedback) {
notify(get_string('deleted').' groups_members');
// delete any uses of groups
groups_delete_groupings_groups($courseid, $showfeedback);
- groups_delete_group_members($courseid, $showfeedback);
+ groups_delete_group_members($courseid, 0, $showfeedback);
// delete group pictures
if ($groups = $DB->get_records('groups', array('courseid'=>$courseid))) {
*/
function role_assign($roleid, $userid, $groupid, $contextid, $timestart=0, $timeend=0, $hidden=0, $enrol='manual',$timemodified='') {
global $USER, $CFG, $DB;
+ require_once($CFG->dirroot.'/group/lib.php');
/// Do some data validation
// this may be slow, but this is the proper way of doing it
if (!has_capability('moodle/course:view', $context, $ra->userid)) {
// remove from groups
- if ($groups = groups_get_all_groups($context->instanceid)) {
- foreach ($groups as $group) {
- $DB->delete_records('groups_members', array('groupid'=>$group->id, 'userid'=>$ra->userid));
- }
- }
+ groups_delete_group_members($context->instanceid, $ra->userid);
// delete lastaccess records
$DB->delete_records('user_lastaccess', array('userid'=>$ra->userid, 'courseid'=>$context->instanceid));
groups_grouping_updated - object groups_grouping table record
groups_grouping_deleted - object groups_grouping table record
-groups_members_removed - int course id - removed all members from all groups in course
+groups_members_removed - object courseid+userid - removed all users (or one user) from all groups in course
groups_groupings_groups_removed - int course id - removed all groups from all groupings in course
groups_groups_deleted - int course id - deleted all course groups
groups_groupings_deleted - int course id - deleted all course groupings
// remove all group members
if (!empty($data->reset_groups_members)) {
- groups_delete_group_members($data->courseid, false);
+ groups_delete_group_members($data->courseid);
$status[] = array('component'=>$componentstr, 'item'=>get_string('removegroupsmembers', 'group'), 'error'=>false);
}