*** /lib/accesslib.php Fri Feb 15 16:29:10 2008 --- /lib/accesslib.php Fri Feb 15 16:29:13 2008 *************** *** 4174,4180 **** * @param string $field * @return array */ ! function get_assignable_roles ($context, $field="name") { global $CFG; --- 4174,4180 ---- * @param string $field * @return array */ ! function get_assignable_roles ($context, $field="name", $required_cap='moodle/course:view', $nodoanything=true) { global $CFG; *************** *** 4191,4196 **** --- 4191,4207 ---- } $roleids = implode(',',$roleids); + + $capability_join = ''; + if (!empty($required_cap) || $nodoanything) { + $capability_join = "JOIN mdl_role_capabilities rc ON r.id = rc.roleid "; + if (!empty($required_cap)) { + $capability_join .= " AND rc.capability = 'moodle/course:view' AND rc.contextid = 1 "; + } + if ($nodoanything) { + $capability_join .= " AND rc.capability != 'moodle/site:doanything' "; + } + } // The subselect scopes the DISTINCT down to // the role ids - a DISTINCT over the whole of *************** *** 4201,4206 **** --- 4212,4218 ---- FROM {$CFG->prefix}role_allow_assign raa WHERE raa.roleid IN ($roleids) ) ar ON r.id=ar.allowedrole + $capability_join ORDER BY sortorder ASC"; $rs = get_recordset_sql($sql);