MDL-61441 accesslib: get_users_by_capability groups perf improvement

This commit is contained in:
Tim Hunt 2018-12-13 16:04:28 +00:00
parent 4c5b60a0f9
commit a44065edaa

View File

@ -3542,19 +3542,21 @@ function get_users_by_capability(context $context, $capability, $fields = '', $s
if ($groups) {
$groups = (array)$groups;
list($grouptest, $grpparams) = $DB->get_in_or_equal($groups, SQL_PARAMS_NAMED, 'grp');
$grouptest = "u.id IN (SELECT userid FROM {groups_members} gm WHERE gm.groupid $grouptest)";
$joins[] = "LEFT OUTER JOIN (SELECT DISTINCT userid
FROM {groups_members}
WHERE groupid $grouptest
) gm ON gm.userid = u.id";
$params = array_merge($params, $grpparams);
$grouptest = 'gm.userid IS NOT NULL';
if ($useviewallgroups) {
$viewallgroupsusers = get_users_by_capability($context, 'moodle/site:accessallgroups', 'u.id, u.id', '', '', '', '', $exceptions);
if (!empty($viewallgroupsusers)) {
$wherecond[] = "($grouptest OR u.id IN (" . implode(',', array_keys($viewallgroupsusers)) . '))';
} else {
$wherecond[] = "($grouptest)";
$grouptest .= ' OR u.id IN (' . implode(',', array_keys($viewallgroupsusers)) . ')';
}
} else {
$wherecond[] = "($grouptest)";
}
$wherecond[] = "($grouptest)";
}
// User exceptions