in classes/feature/usergroups/utils.php [368:455]
public static function study_groups_list($userid, $filter, $manage = true, $start = 0, $max = 5, $mode = false) {
global $DB;
if (empty($filter['courseid']) || !empty($filter['courseid']) && $filter['courseid'] == SITEID) {
// Quering for all moodle groups that user has access to.
if (is_siteadmin($userid) && $manage) {
// This user is a site admin and can access all groups.
$moodlegroups = $DB->get_records('groups', [], 'name', '*', $start, $max + 1);
} else {
if ($manage) {
// Get groups that user can manage.
$roles = get_roles_with_capability('local/o365:managegroups', CAP_ALLOW);
if (empty($roles)) {
// No roles with capability, than user does not have access.
return [];
}
$roleids = [];
foreach ($roles as $role) {
$roleids[] = $role->id;
}
[$rolesql, $roleparams] = $DB->get_in_or_equal($roleids);
$params = array_merge($roleparams, [$userid]);
$groupssql = 'SELECT DISTINCT g.id id, g.name, g.courseid
FROM {groups} g, {role_assignments} ra, {context} c
WHERE ra.roleid '.$rolesql.'
AND ra.userid = ?
AND ra.contextid = c.id
AND contextlevel = '.CONTEXT_COURSE.'
AND g.courseid = c.instanceid
ORDER BY g.name';
$moodlegroups = $DB->get_records_sql($groupssql, $params);
} else {
// Get groups that user is enroled in.
$groupssql = 'SELECT DISTINCT g.id id, g.name, g.courseid
FROM {groups} g, {groups_members} gm
WHERE gm.userid = ?
AND gm.groupid = g.id
ORDER BY g.name';
$moodlegroups = $DB->get_records_sql($groupssql, [$userid]);
}
}
} else {
// Retrieve groups by filter.
$moodlegroups = $DB->get_records('groups', $filter, 'name', 'id,name,courseid');
}
// Ensure that user can access the group.
if ($manage) {
$capability = 'moodle/course:managegroups';
} else {
$capability = 'local/o365:viewgroups';
}
$grouplist = [];
$groupcount = 0;
foreach ($moodlegroups as $moodlegroup) {
$context = \context_course::instance($moodlegroup->courseid);
if (!has_capability($capability, $context, $userid)) {
continue;
}
if ($groupcount < $max) {
if (empty($moodlegroup->groupid) && !empty($moodlegroup->id)) {
$moodlegroup->groupid = $moodlegroup->id;
}
$params = ['courseid' => $moodlegroup->courseid, 'groupid' => $moodlegroup->id];
if ($manage) {
$groupurl = new \moodle_url('/local/o365/groupcp.php', $params);
} else {
$groupurl = new \moodle_url('/local/o365/groupcp.php', $params);
}
if ($mode == 1) {
$grouplist[] = $groupurl->out(false);
} else if ($mode == 2) {
$grouplist[] = $moodlegroup;
} else {
$attr = ['class' => 'servicelink'];
$grouplist[] = \html_writer::link($groupurl, $moodlegroup->name, $attr);
}
$groupcount++;
}
}
if (count($moodlegroups) > $max && !$mode) {
$morestr = get_string('groups_more', 'local_o365');
$moreurl = new \moodle_url('/local/o365/groupcp.php',
['action' => 'managecoursegroups', 'courseid' => $filter['courseid']]);
$grouplist[] = \html_writer::link($moreurl, $morestr, ['class' => 'servicelink']);
}
return $grouplist;
}