Roles without moodle/course:view capability are now ignored in participant lists MDL-7943 MDL-8093
This commit is contained in:
+19
-9
@@ -49,18 +49,31 @@
|
||||
}
|
||||
|
||||
$rolenames = array();
|
||||
$avoidroles = array();
|
||||
|
||||
if ($roles = get_roles_used_in_context($context, true)) {
|
||||
// We should exclude "admin" users (those with "doanything" at site level) because
|
||||
// We should ONLY allow roles with moodle/course:view because otherwise we get little niggly issues
|
||||
// like MDL-8093
|
||||
// We should further exclude "admin" users (those with "doanything" at site level) because
|
||||
// Otherwise they appear in every participant list
|
||||
|
||||
$canviewroles = get_roles_with_capability('moodle/course:view', CAP_ALLOW, $context);
|
||||
$doanythingroles = get_roles_with_capability('moodle/site:doanything', CAP_ALLOW, $sitecontext);
|
||||
|
||||
foreach ($roles as $role) {
|
||||
if (isset($doanythingroles[$role->id])) { // Avoid this role (ie admin)
|
||||
if (!isset($canviewroles[$role->id])) { // Avoid this role (eg course creator)
|
||||
$avoidroles[] = $role->id;
|
||||
unset($roles[$role->id]);
|
||||
continue;
|
||||
}
|
||||
if (isset($doanythingroles[$role->id])) { // Avoid this role (ie admin)
|
||||
$avoidroles[] = $role->id;
|
||||
unset($roles[$role->id]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($roles as $role) {
|
||||
$rolenames[$role->id] = strip_tags(format_string($role->name)); // Used in menus etc later on
|
||||
}
|
||||
}
|
||||
@@ -138,6 +151,7 @@
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// setting up tags
|
||||
if ($course->id == SITEID) {
|
||||
$filtertype = 'site';
|
||||
@@ -327,14 +341,10 @@
|
||||
|
||||
$hiddensql = has_capability('moodle/role:viewhiddenassigns', $context)? '':' AND r.hidden = 0 ';
|
||||
|
||||
// excluse users with these admin role assignments
|
||||
if ($doanythingroles) {
|
||||
// exclude users with roles we are avoiding
|
||||
if ($avoidroles) {
|
||||
$adminroles = 'AND r.roleid NOT IN (';
|
||||
|
||||
foreach ($doanythingroles as $aroleid=>$role) {
|
||||
$adminroles .= "$aroleid,";
|
||||
}
|
||||
$adminroles = rtrim($adminroles,",");
|
||||
$adminroles .= implode(',', $avoidroles);
|
||||
$adminroles .= ')';
|
||||
} else {
|
||||
$adminroles = '';
|
||||
|
||||
Reference in New Issue
Block a user