id == $sitecontext->id) { error('Can not override base role capabilities'); } if (!has_capability('moodle/role:override', $context)) { error('You do not have permission to change overrides in this context!'); } if ($courseid) { if (!$course = get_record('course', 'id', $courseid)) { error('Bad course ID'); } } else { $course = clone($SITE); $courseid = SITEID; } require_login($course); $baseurl = 'override.php?contextid='.$context->id; if (!empty($userid)) { $baseurl .= '&userid='.$userid; } if ($courseid != SITEID) { $baseurl .= '&courseid='.$courseid; } if ($cancel) { redirect($baseurl); } /// needed for tabs.php $overridableroles = get_overridable_roles($context); $assignableroles = get_assignable_roles($context); /// Get some language strings $strroletooverride = get_string('roletooverride', 'role'); $stroverrideusers = get_string('overrideusers', 'role'); $straction = get_string('overrideroles', 'role'); $strcurrentrole = get_string('currentrole', 'role'); $strcurrentcontext = get_string('currentcontext', 'role'); $strparticipants = get_string('participants'); /// Make sure this user can override that role if ($roleid) { if (!user_can_override($context, $roleid)) { error ('you can not override this role in this context'); } } if ($userid) { $user = get_record('user', 'id', $userid); $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context)); } /// get all cababilities $capabilities = fetch_context_capabilities($context); /// Process incoming role override if ($data = data_submitted() and $roleid and confirm_sesskey()) { $allowed_values = array(CAP_INHERIT, CAP_ALLOW, CAP_PREVENT, CAP_PROHIBIT); $localoverrides = get_records_select('role_capabilities', "roleid = $roleid AND contextid = $context->id", '', 'capability, permission, id'); foreach ($capabilities as $cap) { if (!isset($data->{$cap->name})) { //cap not specified in form continue; } $capname = $cap->name; $value = clean_param($data->{$cap->name}, PARAM_INT); if (!in_array($value, $allowed_values)) { continue; } if (isset($localoverrides[$capname])) { // Something exists, so update it if ($value == CAP_INHERIT) { // inherit = delete delete_records('role_capabilities', 'roleid', $roleid, 'contextid', $context->id, 'capability', $capname); } else { $localoverride = new object(); $localoverride->id = $localoverrides[$capname]->id; $localoverride->permission = $value; $localoverride->timemodified = time(); $localoverride->modifierid = $USER->id; if (!update_record('role_capabilities', $localoverride)) { error('Could not update a capability!'); } } } else { // insert a record if ($value != CAP_INHERIT) { // Ignore inherits $localoverride = new object(); $localoverride->capability = $capname; $localoverride->contextid = $context->id; $localoverride->roleid = $roleid; $localoverride->permission = $value; $localoverride->timemodified = time(); $localoverride->modifierid = $USER->id; if (!insert_record('role_capabilities', $localoverride)) { error('Could not insert a capability!'); } } } } redirect($baseurl); } /// Print the header and tabs if ($context->contextlevel == CONTEXT_USER) { /// course header if ($course->id != SITEID) { print_header("$fullname", "$fullname", "wwwroot/course/view.php?id=$course->id\">$course->shortname -> wwwroot/user/index.php?id=$course->id\">$strparticipants -> wwwroot/user/view.php?id=$userid&course=$course->id\">$fullname -> $straction", "", "", true, " ", navmenu($course)); /// site header } else { print_header("$course->fullname: $fullname", $course->fullname, "wwwroot/user/view.php?id=$userid&course=$course->id\">$fullname -> $straction", "", "", true, " ", navmenu($course)); } $showroles = 1; $currenttab = 'override'; include_once($CFG->dirroot.'/user/tabs.php'); } else if ($context->contextlevel==CONTEXT_COURSE and $context->instanceid == SITEID) { require_once($CFG->libdir.'/adminlib.php'); $adminroot = admin_get_root(); admin_externalpage_setup('frontpageroles', $adminroot); admin_externalpage_print_header($adminroot); $currenttab = ''; $tabsmode = 'override'; include_once('tabs.php'); } else { $currenttab = ''; $tabsmode = 'override'; include_once('tabs.php'); } print_heading_with_help(get_string('overrides', 'role'), 'overrides'); if ($roleid) { /// prints a form to swap roles echo '