diff --git a/group/autogroup.php b/group/autogroup.php index 7372678..a2cbc52 100644 --- a/group/autogroup.php +++ b/group/autogroup.php @@ -80,7 +80,7 @@ default: print_error('unknoworder'); } - $users = groups_get_potential_members($data->courseid, $data->roleid, $data->cohortid, $orderby); + $users = groups_get_potential_members($data->courseid, $data->roleid, $data->cohortid, $data->groupid, $data->groupingid, $orderby); $usercnt = count($users); if ($data->allocateby == 'random') { diff --git a/group/autogroup_form.php b/group/autogroup_form.php index 8c67714..1e4fdfd 100644 --- a/group/autogroup_form.php +++ b/group/autogroup_form.php @@ -76,6 +76,30 @@ function definition() { $mform->setType('cohortid', PARAM_INT); $mform->setConstant('cohortid', '0'); } + + $groupings = groups_get_all_groupings($COURSE->id); + $options = array(); + $options[0] = get_string('none'); + foreach ($groupings as $grouping) { + $options[$grouping->id] = $grouping->name; + } + $mform->addElement('select', 'groupingid', get_string('selectfromgrouping', 'group'), $options); + $mform->addHelpButton('groupingid', 'selectfromgrouping', 'group'); + $mform->setDefault('groupingid', 0); + $mform->setAdvanced('groupingid'); + $mform->disabledIf('groupingid', 'groupid', 'neq', 0); + + $groups = groups_get_all_groups($COURSE->id); + $options = array(); + $options[0] = get_string('none'); + foreach ($groups as $group) { + $options[$group->id] = $group->name; + } + $mform->addElement('select', 'groupid', get_string('selectfromgroup', 'group'), $options); + $mform->addHelpButton('groupid', 'selectfromgroup', 'group'); + $mform->setDefault('groupid', 0); + $mform->setAdvanced('groupid'); + $mform->disabledIf('groupid', 'groupingid', 'neq', 0); $options = array('groups' => get_string('numgroups', 'group'), 'members' => get_string('nummembers', 'group')); @@ -152,7 +176,7 @@ function validation($data, $files) { $errors = parent::validation($data, $files); if ($data['allocateby'] != 'no') { - if (!$users = groups_get_potential_members($data['courseid'], $data['roleid'], $data['cohortid'])) { + if (!$users = groups_get_potential_members($data['courseid'], $data['roleid'], $data['cohortid'], $data['groupid'], $data['groupingid'])) { $errors['roleid'] = get_string('nousersinrole', 'group'); } diff --git a/group/lib.php b/group/lib.php index 96ecb6e..59ce2f7 100644 --- a/group/lib.php +++ b/group/lib.php @@ -651,7 +651,7 @@ function groups_get_possible_roles($context) { * @param string $orderby The column to sort users by * @return array An array of the users */ -function groups_get_potential_members($courseid, $roleid = null, $cohortid = null, $orderby = 'lastname ASC, firstname ASC') { +function groups_get_potential_members($courseid, $roleid = null, $cohortid = null, $groupid = null, $groupingid = null, $orderby = 'lastname ASC, firstname ASC') { global $DB; $context = context_course::instance($courseid); @@ -676,11 +676,33 @@ function groups_get_potential_members($courseid, $roleid = null, $cohortid = nul } else { $cohortjoin = ""; } + + if ($groupid) { + $groupjoin = "JOIN {groups_members} gp ON (gp.userid = u.id AND gp.groupid = :groupid)"; + $params['groupid'] = $groupid; + } else { + $groupjoin = ""; + } + + if ($groupingid) { + $groupingjoin = "JOIN {groupings_groups} gg"; + $groupingjoin .= " JOIN {groups_members} gm ON (gm.userid = u.id AND gm.groupid = gg.groupid)"; + if($where == "") { + $where .= "WHERE gg.groupingid = :groupingid"; + } else { + $where .= " AND gg.groupingid = :groupingid"; + } + $params['groupingid'] = $groupingid; + } else { + $groupingjoin = ""; + } $sql = "SELECT u.id, u.username, u.firstname, u.lastname, u.idnumber FROM {user} u JOIN ($esql) e ON e.id = u.id $cohortjoin + $groupjoin + $groupingjoin $where ORDER BY $orderby"; diff --git a/lang/en/group.php b/lang/en/group.php index 807a806..20af4d6 100644 --- a/lang/en/group.php +++ b/lang/en/group.php @@ -158,6 +158,10 @@ $string['removegroupingsmembers'] = 'Remove all groups from groupings'; $string['removegroupsmembers'] = 'Remove all group members'; $string['removeselectedusers'] = 'Remove selected users'; +$string['selectfromgroup'] = 'Select members from group'; +$string['selectfromgroup_help'] = 'Choose a group to restrict the members used in the autocreate groups process'; +$string['selectfromgrouping'] = 'Select members from grouping'; +$string['selectfromgrouping_help'] = 'Choose a grouping to restrict the members used in the autocreate groups process'; $string['selectfromrole'] = 'Select members from role'; $string['showgroupsingrouping'] = 'Show groups in grouping'; $string['showmembersforgroup'] = 'Show members for group';