roles MDL-22126 Fixed up usage of admin/roles/tags.php

This commit is contained in:
Sam Hemelryk
2010-04-21 02:43:02 +00:00
parent 905d7b3e29
commit ba9dc077c4
8 changed files with 886 additions and 1054 deletions
+50 -58
View File
@@ -31,41 +31,35 @@ define("MAX_USERS_TO_LIST_PER_ROLE", 10);
$contextid = required_param('contextid',PARAM_INT);
$roleid = optional_param('roleid', 0, PARAM_INT);
$courseid = optional_param('courseid', 0, PARAM_INT); // needed for user tabs
$extendperiod = optional_param('extendperiod', 0, PARAM_INT);
$extendbase = optional_param('extendbase', 3, PARAM_INT);
list($context, $course, $cm) = get_context_info_array($contextid);
$PAGE->set_url('/admin/roles/assign.php', array('contextid' => $contextid));
$PAGE->set_context($context);
$url = new moodle_url('/admin/roles/assign.php', array('contextid' => $contextid));
$userid = 0;
$tabfile = null;
if ($course) {
$isfrontpage = ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID);
} else {
$isfrontpage = false;
if (!$course) {
if ($context->contextlevel == CONTEXT_USER) {
$courseid = optional_param('courseid', SITEID, PARAM_INT); // needed for user/tabs.php
$course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
$PAGE->url->param('courseid', $courseid);
$userid = $context->instanceid;
$course = $DB->get_record('course', array('id'=>optional_param('courseid', SITEID, PARAM_INT)), '*', MUST_EXIST);
$user = $DB->get_record('user', array('id'=>$context->instanceid), '*', MUST_EXIST);
$url->param('courseid', $course->id);
$url->param('userid', $user->id);
} else {
$course = $SITE;
}
}
// security
require_login($course, false, $cm);
require_capability('moodle/role:assign', $context);
$PAGE->set_url($url);
$PAGE->set_context($context);
$contextname = print_context_name($context);
$courseid = $course->id;
$inmeta = $course->metacourse;
$isfrontpage = ($course->id == SITEID);
// These are needed early because of tabs.php
list($assignableroles, $assigncounts, $nameswithcounts) = get_assignable_roles($context, ROLENAME_BOTH, true);
@@ -79,9 +73,6 @@ if ($roleid && !isset($assignableroles[$roleid])) {
print_error('cannotassignrolehere', '', get_context_url($context), $a);
}
// Get some language strings
$straction = get_string('assignroles', 'role'); // Used by tabs.php
// Work out an appropriate page title.
if ($roleid) {
$a = new stdClass;
@@ -231,50 +222,49 @@ if ($roleid) {
}
}
// Print the header and tabs
if ($context->contextlevel == CONTEXT_USER) {
$user = $DB->get_record('user', array('id'=>$userid));
$fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
$PAGE->set_pagelayout('admin');
$PAGE->set_title($title);
$tabfile = $CFG->dirroot.'/'.$CFG->admin.'/roles/tabs.php';
/// course header
$PAGE->set_title($title);
if ($courseid != SITEID) {
if (has_capability('moodle/course:viewparticipants', get_context_instance(CONTEXT_COURSE, $courseid))) {
$PAGE->navbar->add(get_string('participants'), new moodle_url('/user/index.php', array('id'=>$courseid)));
switch ($context->contextlevel) {
case CONTEXT_SYSTEM:
admin_externalpage_setup('assignroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
break;
case CONTEXT_USER:
$tabfile = $CFG->dirroot.'/user/tabs.php';
if ($isfrontpage) {
$fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
$PAGE->set_heading($fullname);
} else {
$PAGE->set_heading($course->fullname);
}
$PAGE->set_heading($fullname);
} else {
$PAGE->set_heading($course->fullname);
}
$PAGE->navbar->add($fullname, new moodle_url("$CFG->wwwroot/user/view.php", array('id'=>$userid,'course'=>$courseid)));
$PAGE->navbar->add($straction);
echo $OUTPUT->header();
$showroles = 1;
$currenttab = 'assign';
echo $OUTPUT->header();
include($CFG->dirroot.'/user/tabs.php');
} else if ($context->contextlevel == CONTEXT_SYSTEM) {
admin_externalpage_setup('assignroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
echo $OUTPUT->header();
} else if ($isfrontpage) {
admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
echo $OUTPUT->header();
$currenttab = 'assign';
include('tabs.php');
} else {
$PAGE->set_title($title);
$PAGE->set_heading(print_context_name($context, false));
echo $OUTPUT->header();
$currenttab = 'assign';
include('tabs.php');
$showroles = 1;
break;
case CONTEXT_COURSECAT:
$PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
break;
case CONTEXT_COURSE:
if ($isfrontpage) {
admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
} else {
$PAGE->set_heading($course->fullname);
}
break;
case CONTEXT_MODULE:
$PAGE->set_heading(print_context_name($context, false));
$PAGE->set_cacheable(false);
break;
case CONTEXT_BLOCK:
$PAGE->set_heading($PAGE->course->fullname);
break;
}
$currenttab = 'assign';
echo $OUTPUT->header();
include($tabfile);
// Print heading.
echo $OUTPUT->heading_with_help($title, 'assignroles');
echo $OUTPUT->heading_with_help($title, 'assignroles', 'role');
if ($roleid) {
// Show UI for assigning a particular role to users.
@@ -417,7 +407,9 @@ $assignurl = new moodle_url($PAGE->url, array('roleid'=>$roleid));
echo html_writer::table($table);
if ($context->contextlevel > CONTEXT_USER) {
echo '<div class="backlink"><a href="' . get_context_url($context) . '">' . get_string('backto', '', $contextname) . '</a></div>';
echo html_writer::start_tag('div', array('class'=>'backlink'));
echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
echo html_writer::end_tag('div');
}
}
+57 -57
View File
@@ -30,19 +30,15 @@ require_once($CFG->dirroot . '/' . $CFG->admin . '/roles/lib.php');
$contextid = required_param('contextid',PARAM_INT);
list($context, $course, $cm) = get_context_info_array($contextid);
$PAGE->set_url('/admin/roles/check.php', array('contextid' => $contextid));
$PAGE->set_context($context);
if ($course) {
$isfrontpage = ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID);
$url = new moodle_url('/admin/roles/check.php', array('contextid' => $contextid));
} else {
$isfrontpage = false;
if (!$course) {
if ($context->contextlevel == CONTEXT_USER) {
$courseid = optional_param('courseid', SITEID, PARAM_INT); // needed for user/tabs.php
$course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
$PAGE->url->param('courseid', $courseid);
$userid = $context->instanceid;
$course = $DB->get_record('course', array('id'=>optional_param('courseid', SITEID, PARAM_INT)), '*', MUST_EXIST);
$user = $DB->get_record('user', array('id'=>$context->instanceid), '*', MUST_EXIST);
$url->param('courseid', $course->id);
$url->param('userid', $user->id);
} else {
$course = $SITE;
}
@@ -50,18 +46,15 @@ if ($course) {
// security first
require_login($course, false, $cm);
$canview = has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride',
'moodle/role:override', 'moodle/role:manage'), $context);
if (!$canview) {
if (!has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride', 'moodle/role:override', 'moodle/role:manage'), $context)) {
print_error('nopermissions', 'error', '', get_string('checkpermissions', 'role'));
}
$PAGE->set_url($url);
$PAGE->set_context($context);
$courseid = $course->id;
$contextname = print_context_name($context);
// These are needed early because of tabs.php
$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
$overridableroles = get_overridable_roles($context, ROLENAME_BOTH);
$isfrontpage = ($course->id == SITEID);
// Get the user_selector we will need.
// Teachers within a course just get to see the same list of people they can
@@ -77,48 +70,53 @@ $userselector->set_rows(10);
// Work out an appropriate page title.
$title = get_string('checkpermissionsin', 'role', $contextname);
$straction = get_string('checkpermissions', 'role'); // Used by tabs.php
// Print the header and tabs
if ($context->contextlevel == CONTEXT_USER) {
$user = $DB->get_record('user', array('id' => $userid));
$fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
$PAGE->set_pagelayout('admin');
$PAGE->set_title($title);
$tabfile = $CFG->dirroot.'/'.$CFG->admin.'/roles/tabs.php';
$PAGE->set_title($title);
if ($courseid != SITEID) {
if (has_capability('moodle/course:viewparticipants', get_context_instance(CONTEXT_COURSE, $courseid))) {
$PAGE->navbar->add(get_string('participants'), new moodle_url('/user/index.php', array('id'=>$courseid)));
switch ($context->contextlevel) {
case CONTEXT_SYSTEM:
admin_externalpage_setup('assignroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
break;
case CONTEXT_USER:
$tabfile = $CFG->dirroot.'/user/tabs.php';
if ($isfrontpage) {
$fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
$PAGE->set_heading($fullname);
} else {
$PAGE->set_heading($course->fullname);
}
$PAGE->set_heading($fullname);
} else {
$PAGE->set_heading($course->fullname);
}
$PAGE->navbar->add($fullname, new moodle_url("$CFG->wwwroot/user/view.php", array('id'=>$userid,'course'=>$courseid)));
$PAGE->navbar->add($straction);
echo $OUTPUT->header();
$showroles = 1;
$currenttab = 'check';
include($CFG->dirroot.'/user/tabs.php');
} else if ($context->contextlevel == CONTEXT_SYSTEM) {
admin_externalpage_setup('checkpermissions', '', array('contextid' => $contextid));
echo $OUTPUT->header();
} else if ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID) {
admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid), $CFG->wwwroot . '/' . $CFG->admin . '/roles/check.php');
echo $OUTPUT->header();
$currenttab = 'check';
include('tabs.php');
} else {
echo $OUTPUT->header();
$currenttab = 'check';
include('tabs.php');
$showroles = 1;
break;
case CONTEXT_COURSECAT:
$PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
break;
case CONTEXT_COURSE:
if ($isfrontpage) {
admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid), $CFG->wwwroot . '/' . $CFG->admin . '/roles/check.php');
} else {
$PAGE->set_heading($course->fullname);
}
break;
case CONTEXT_MODULE:
$PAGE->set_heading(print_context_name($context, false));
$PAGE->set_cacheable(false);
break;
case CONTEXT_BLOCK:
$PAGE->set_heading($PAGE->course->fullname);
break;
}
$currenttab = 'check';
echo $OUTPUT->header();
// These are needed early because of tabs.php
$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
$overridableroles = get_overridable_roles($context, ROLENAME_BOTH);
include($tabfile);
// Print heading.
echo $OUTPUT->heading_with_help($title, 'checkpermissions');
echo $OUTPUT->heading_with_help($title, 'checkpermissions', 'role');
// If a user has been chosen, show all the permissions for this user.
$reportuser = $userselector->get_selected_user();
@@ -141,10 +139,10 @@ echo '<form method="get" action="' . $CFG->wwwroot . '/' . $CFG->admin . '/roles
// Hidden fields.
echo '<input type="hidden" name="contextid" value="' . $context->id . '" />';
if (!empty($userid)) {
echo '<input type="hidden" name="userid" value="' . $userid . '" />';
if (!empty($user->id)) {
echo '<input type="hidden" name="userid" value="' . $user->id . '" />';
}
if ($courseid && $courseid != SITEID) {
if ($isfrontpage) {
echo '<input type="hidden" name="courseid" value="' . $courseid . '" />';
}
@@ -159,7 +157,9 @@ echo $OUTPUT->box_end();
// Appropriate back link.
if ($context->contextlevel > CONTEXT_USER) {
echo '<div class="backlink"><a href="' . get_context_url($context) . '">' . get_string('backto', '', $contextname) . '</a></div>';
echo html_writer::start_tag('div', array('class'=>'backlink'));
echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
echo html_writer::end_tag('div');
}
echo $OUTPUT->footer();
+73 -85
View File
@@ -32,22 +32,14 @@ $roleid = required_param('roleid', PARAM_INT); // requested role id
list($context, $course, $cm) = get_context_info_array($contextid);
$PAGE->set_url('/admin/roles/override.php', array('contextid' => $contextid, 'roleid' => $roleid));
$PAGE->set_context($context);
$url = new moodle_url('/admin/roles/override.php', array('contextid' => $contextid, 'roleid' => $roleid));
$userid = 0;
$tabfile = null;
if ($course) {
$isfrontpage = ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID);
} else {
$isfrontpage = false;
if (!$course) {
if ($context->contextlevel == CONTEXT_USER) {
$courseid = optional_param('courseid', SITEID, PARAM_INT); // needed for user/tabs.php
$course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
$PAGE->url->param('courseid', $courseid);
$userid = $context->instanceid;
$course = $DB->get_record('course', array('id'=>optional_param('courseid', SITEID, PARAM_INT)), '*', MUST_EXIST);
$user = $DB->get_record('user', array('id'=>$context->instanceid), '*', MUST_EXIST);
$url->param('courseid', $course->id);
$url->param('userid', $user->id);
} else {
$course = $SITE;
}
@@ -55,16 +47,22 @@ if ($course) {
// security first
require_login($course, false, $cm);
$safeoverridesonly = !has_capability('moodle/role:override', $context);
if ($safeoverridesonly) {
if (!has_capability('moodle/role:override', $context)) {
require_capability('moodle/role:safeoverride', $context);
}
$PAGE->set_url($url);
$PAGE->set_context($context);
$courseid = $course->id;
$isfrontpage = ($course->id == SITEID);
$baseurl = $PAGE->url->out();
$returnurl = new moodle_url('/admin/roles/permissions.php', array('contextid' => $context->id));
// Handle the cancel button.
if (optional_param('cancel', false, PARAM_BOOL)) {
redirect($returnurl);
}
$role = $DB->get_record('role', array('id'=>$roleid), '*', MUST_EXIST);
// These are needed early because of tabs.php
@@ -77,46 +75,43 @@ $straction = get_string('overrideroles', 'role'); // Used by tabs.php
$a = (object)array('context' => $contextname, 'role' => $overridableroles[$roleid]);
$title = get_string('overridepermissionsforrole', 'role', $a);
// Print the header and tabs
if ($context->contextlevel == CONTEXT_SYSTEM) {
print_error('cannotoverridebaserole', 'error');
$tabfile = $CFG->dirroot.'/'.$CFG->admin.'/roles/tabs.php';
$currenttab = 'permissions';
} else if ($context->contextlevel == CONTEXT_USER) {
// NOTE: this is not linked from UI for now
$userid = $context->instanceid;
$user = $DB->get_record('user', array('id'=>$userid, 'deleted'=>0), '*', MUST_EXIST);
$fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
// course header
if ($isfrontpage) {
$PAGE->set_heading($course->fullname);
} else {
if (has_capability('moodle/course:viewparticipants', get_context_instance(CONTEXT_COURSE, $courseid))) {
$PAGE->navbar->add(get_string('participants'), new moodle_url('/user/index.php', array('id'=>$courseid)));
$PAGE->set_pagelayout('admin');
$PAGE->set_title($title);
$PAGE->navbar->add($straction);
switch ($context->contextlevel) {
case CONTEXT_SYSTEM:
print_error('cannotoverridebaserole', 'error');
break;
case CONTEXT_USER:
$tabfile = $CFG->dirroot.'/user/tabs.php';
if ($isfrontpage) {
$fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
$PAGE->set_heading($fullname);
} else {
$PAGE->set_heading($course->fullname);
}
$PAGE->set_heading($fullname);
}
$PAGE->navbar->add($fullname, new moodle_url("$CFG->wwwroot/user/view.php", array('id'=>$userid,'course'=>$courseid)));
$PAGE->navbar->add($straction);
$showroles = 1;
$currenttab = 'permissions';
$tabfile = $CFG->dirroot.'/user/tabs.php';
} else if ($isfrontpage) {
admin_externalpage_setup('frontpageroles', '', array(), $PAGE->url);
$currenttab = 'permissions';
$tabfile = 'tabs.php';
} else {
$currenttab = 'permissions';
$tabfile = 'tabs.php';
}
// Handle the cancel button.
if (optional_param('cancel', false, PARAM_BOOL)) {
redirect($returnurl);
$showroles = 1;
break;
case CONTEXT_COURSECAT:
$PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
break;
case CONTEXT_COURSE:
if ($isfrontpage) {
admin_externalpage_setup('frontpageroles', '', array(), $PAGE->url);
} else {
$PAGE->set_heading($course->fullname);
}
break;
case CONTEXT_MODULE:
$PAGE->set_heading(print_context_name($context, false));
$PAGE->set_cacheable(false);
break;
case CONTEXT_BLOCK:
$PAGE->set_heading($PAGE->course->fullname);
break;
}
// Make sure this user can override that role
@@ -128,7 +123,7 @@ if (empty($overridableroles[$roleid])) {
}
// If we are actually overriding a role, create the table object, and save changes if appropriate.
$overridestable = new override_permissions_table_advanced($context, $roleid, $safeoverridesonly);
$overridestable = new override_permissions_table_advanced($context, $roleid, false);
$overridestable->read_submitted_permissions();
if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey()) {
@@ -140,10 +135,8 @@ if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey()) {
// Finally start page output
echo $OUTPUT->header();
if ($tabfile) {
include($tabfile);
}
echo $OUTPUT->heading_with_help($title, 'overrides');
include($tabfile);
echo $OUTPUT->heading_with_help($title, 'overrides', 'role');
// Show UI for overriding roles.
if (!empty($capabilities)) {
@@ -152,37 +145,32 @@ if (!empty($capabilities)) {
} else {
// Print the capabilities overrideable in this context
echo $OUTPUT->box_start('generalbox capbox');
echo html_writer::start_tag('form', array('id'=>'overrideform', 'action'=>$PAGE->url->out(), 'method'=>'post'));
echo html_writer::start_tag('div');
echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'sesskey', 'value'=>sesskey()));
echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'roleid', 'value'=>$roleid));
echo html_writer::tag('p', get_string('highlightedcellsshowinherit', 'role'), array('class'=>'overridenotice'));
$overridestable->display();
if ($overridestable->has_locked_capabiltites()) {
echo '<p class="overridenotice">' . get_string('safeoverridenotice', 'role') . "</p>\n";
}
?>
<form id="overrideform" action="<?php echo $baseurl ?>" method="post"><div>
<input type="hidden" name="sesskey" value="<?php p(sesskey()); ?>" />
<input type="hidden" name="roleid" value="<?php p($roleid); ?>" />
<?php
echo '<p class="overridenotice">' . get_string('highlightedcellsshowinherit', 'role') . ' </p>';
$overridestable->display();
if ($overridestable->has_locked_capabiltites()) {
echo '<p class="overridenotice">' . get_string('safeoverridenotice', 'role') . "</p>\n";
}
?>
<div class="submit buttons">
<input type="submit" name="savechanges" value="<?php print_string('savechanges') ?>" />
<input type="submit" name="cancel" value="<?php print_string('cancel') ?>" />
</div>
</div></form>
<?php
echo html_writer::start_tag('div', array('class'=>'submit_buttons'));
echo html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'savechanges', 'value'=>get_string('savechanges')));
echo html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'cancel', 'value'=>get_string('cancel')));
echo html_writer::end_tag('div');
echo html_writer::end_tag('div');
echo html_writer::end_tag('form');
echo $OUTPUT->box_end();
}
// Print a form to swap roles, and a link back to the all roles list.
echo '<div class="backlink">';
$select = new single_select(new moodle_url($baseurl), 'roleid', $nameswithcounts, $roleid, null);
echo html_writer::start_tag('div', array('class'=>'backlink'));
$select = new single_select($PAGE->url, 'roleid', $nameswithcounts, $roleid, null);
$select->label = get_string('overrideanotherrole', 'role');
echo $OUTPUT->render($select);
echo '<p><a href="' . $returnurl . '">' . get_string('backtoallroles', 'role') . '</a></p>';
echo '</div>';
echo html_writer::tag('p', html_writer::tag('a', get_string('backtoallroles', 'role'), array('href'=>$returnurl)));
echo html_writer::end_tag('div');
echo $OUTPUT->footer();
+113 -148
View File
@@ -40,22 +40,14 @@ $prohibit = optional_param('prohibit', 0, PARAM_BOOL);
list($context, $course, $cm) = get_context_info_array($contextid);
$PAGE->set_url('/admin/roles/permissions.php', array('contextid' => $contextid));
$PAGE->set_context($context);
$url = new moodle_url('/admin/roles/permissions.php', array('contextid' => $contextid));
$userid = 0;
$tabfile = null;
if ($course) {
$isfrontpage = ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID);
} else {
$isfrontpage = false;
if (!$course) {
if ($context->contextlevel == CONTEXT_USER) {
$courseid = optional_param('courseid', SITEID, PARAM_INT); // needed for user/tabs.php
$course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
$PAGE->url->param('courseid', $courseid);
$userid = $context->instanceid;
$course = $DB->get_record('course', array('id'=>optional_param('courseid', SITEID, PARAM_INT)), '*', MUST_EXIST);
$user = $DB->get_record('user', array('id'=>$context->instanceid), '*', MUST_EXIST);
$url->param('courseid', $course->id);
$url->param('userid', $user->id);
} else {
$course = $SITE;
}
@@ -64,14 +56,15 @@ if ($course) {
// security first
require_login($course, false, $cm);
require_capability('moodle/role:review', $context);
$PAGE->set_url($url);
$PAGE->set_context($context);
$courseid = $course->id;
$isfrontpage = ($course->id == SITEID);
// These are needed early because of tabs.php
$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
list($overridableroles, $overridecounts, $nameswithcounts) = get_overridable_roles($context, ROLENAME_BOTH, true);
if ($capability) {
$capability = $DB->get_record('capabilities', array('name'=>$capability), '*', MUST_EXIST);
}
@@ -82,154 +75,124 @@ $allowsafeoverrides = has_capability('moodle/role:safeoverride', $context);
$contextname = print_context_name($context);
$title = get_string('permissionsincontext', 'role', $contextname);
$straction = get_string('permissions', 'role'); // Used by tabs.php
$tabfile = $CFG->dirroot.'/'.$CFG->admin.'/roles/tabs.php';
$currenttab = 'permissions';
$PAGE->set_pagelayout('admin');
$PAGE->set_title($title);
// Print the header and tabs
if ($context->contextlevel == CONTEXT_SYSTEM) {
print_error('cannotoverridebaserole', 'error');
} else if ($context->contextlevel == CONTEXT_USER) {
// NOTE: this is not linked from UI for now
$userid = $context->instanceid;
$user = $DB->get_record('user', array('id'=>$userid, 'deleted'=>0), '*', MUST_EXIST);
$fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
// course header
if ($isfrontpage) {
$PAGE->set_heading($course->fullname);
} else {
if (has_capability('moodle/course:viewparticipants', get_context_instance(CONTEXT_COURSE, $courseid))) {
$PAGE->navbar->add(get_string('participants'), new moodle_url('/user/index.php', array('id'=>$courseid)));
switch ($context->contextlevel) {
case CONTEXT_SYSTEM:
print_error('cannotoverridebaserole', 'error');
break;
case CONTEXT_USER:
$tabfile = $CFG->dirroot.'/user/tabs.php';
if ($isfrontpage) {
$fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
$PAGE->set_heading($fullname);
} else {
$PAGE->set_heading($course->fullname);
}
$PAGE->set_heading($fullname);
}
$PAGE->navbar->add($fullname, new moodle_url("$CFG->wwwroot/user/view.php", array('id'=>$userid,'course'=>$courseid)));
$PAGE->navbar->add($straction);
$showroles = 1;
$currenttab = 'permissions';
$tabfile = $CFG->dirroot.'/user/tabs.php';
} else if ($isfrontpage) {
admin_externalpage_setup('frontpageroles', '', array(), $PAGE->url);
$currenttab = 'permissions';
$tabfile = 'tabs.php';
} else {
$currenttab = 'permissions';
$tabfile = 'tabs.php';
$showroles = 1;
break;
case CONTEXT_COURSECAT:
$PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
break;
case CONTEXT_COURSE:
if ($isfrontpage) {
admin_externalpage_setup('frontpageroles', '', array(), $PAGE->url);
} else {
$PAGE->set_heading($course->fullname);
}
break;
case CONTEXT_MODULE:
$PAGE->set_heading(print_context_name($context, false));
$PAGE->set_cacheable(false);
break;
case CONTEXT_BLOCK:
$PAGE->set_heading($PAGE->course->fullname);
break;
}
// handle confirmations and actions
if ($prevent and isset($overridableroles[$roleid]) and $capability) {
if ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability))) {
if ($confirm and data_submitted() and confirm_sesskey()) {
role_change_permission($roleid, $context, $capability->name, CAP_PREVENT);
redirect($PAGE->url);
// We have a capability and overrides are allowed or safe overrides are allowed and this is safe
if ($capability && ($allowoverrides || ($allowsafeoverrides && is_safe_capability($capability)))) {
// If we already know the the role ID, it is overrideable, and we are setting prevent or unprohibit
if (isset($overridableroles[$roleid]) && ($prevent || $unprohibit)) {
// We are preventing
if ($prevent) {
if ($confirm && data_submitted() && confirm_sesskey()) {
role_change_permission($roleid, $context, $capability->name, CAP_PREVENT);
redirect($PAGE->url);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'role'=>$overridableroles[$roleid], 'context'=>$contextname);
$message = get_string('confirmroleprevent', 'role', $a);
$continueurl = new moodle_url($PAGE->url, array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'prevent'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
echo $OUTPUT->header();
if ($tabfile) {
include($tabfile);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'role'=>$overridableroles[$roleid], 'context'=>$contextname);
$message = get_string('confirmroleprevent', 'role', $a);
$continueurl = new moodle_url($PAGE->url, array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'prevent'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
}
echo $OUTPUT->heading($title);
echo $OUTPUT->confirm($message, $continueurl, $PAGE->url);
echo $OUTPUT->footer();
die;
}
// We are unprohibiting
if ($unprohibit) {
if ($confirm && data_submitted() && confirm_sesskey()) {
role_change_permission($roleid, $context, $capability->name, CAP_INHERIT);
redirect($PAGE->url);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'role'=>$overridableroles[$roleid], 'context'=>$contextname);
$message = get_string('confirmroleunprohibit', 'role', $a);
$continueurl = new moodle_url($PAGE->url, array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'unprohibit'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
}
}
// Display and print
echo $OUTPUT->header();
include($tabfile);
echo $OUTPUT->heading($title);
echo $OUTPUT->confirm($message, $continueurl, $PAGE->url);
echo $OUTPUT->footer();
die;
}
}
if ($unprohibit and isset($overridableroles[$roleid]) and $capability) {
if ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability))) {
if ($confirm and data_submitted() and confirm_sesskey()) {
role_change_permission($roleid, $context, $capability->name, CAP_INHERIT);
redirect($PAGE->url);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'role'=>$overridableroles[$roleid], 'context'=>$contextname);
$message = get_string('confirmroleunprohibit', 'role', $a);
$continueurl = new moodle_url($PAGE->url, array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'unprohibit'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
echo $OUTPUT->header();
if ($tabfile) {
include($tabfile);
if ($allow || $prohibit) {
if ($allow) {
$mform = new role_allow_form(null, array($context, $capability, $overridableroles));
if ($mform->is_cancelled()) {
redirect($PAGE->url);
} else if ($data = $mform->get_data() and !empty($data->roleid)) {
$roleid = $data->roleid;
if (isset($overridableroles[$roleid])) {
role_change_permission($roleid, $context, $capability->name, CAP_ALLOW);
}
redirect($PAGE->url);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'context'=>$contextname);
$message = get_string('roleallowinfo', 'role', $a);
}
echo $OUTPUT->heading($title);
echo $OUTPUT->confirm($message, $continueurl, $PAGE->url);
echo $OUTPUT->footer();
die;
}
}
}
if ($allow and $capability) {
if ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability))) {
$mform = new role_allow_form(null, array($context, $capability, $overridableroles));
if ($mform->is_cancelled()) {
redirect($PAGE->url);
} else if ($data = $mform->get_data() and !empty($data->roleid)) {
$roleid = $data->roleid;
if (isset($overridableroles[$roleid])) {
role_change_permission($roleid, $context, $capability->name, CAP_ALLOW);
if ($prohibit) {
$mform = new role_prohibit_form(null, array($context, $capability, $overridableroles));
if ($mform->is_cancelled()) {
redirect($PAGE->url);
} else if ($data = $mform->get_data() and !empty($data->roleid)) {
$roleid = $data->roleid;
if (isset($overridableroles[$roleid])) {
role_change_permission($roleid, $context, $capability->name, CAP_PROHIBIT);
}
redirect($PAGE->url);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'context'=>$contextname);
$message = get_string('roleprohibitinfo', 'role', $a);
}
redirect($PAGE->url);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'context'=>$contextname);
$message = get_string('roleallowinfo', 'role', $a);
echo $OUTPUT->header();
if ($tabfile) {
include($tabfile);
}
echo $OUTPUT->heading($title);
echo $OUTPUT->box($message);
$mform->display();
echo $OUTPUT->footer();
die;
}
}
}
if ($prohibit and $capability) {
if ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability))) {
$mform = new role_prohibit_form(null, array($context, $capability, $overridableroles));
if ($mform->is_cancelled()) {
redirect($PAGE->url);
} else if ($data = $mform->get_data() and !empty($data->roleid)) {
$roleid = $data->roleid;
if (isset($overridableroles[$roleid])) {
role_change_permission($roleid, $context, $capability->name, CAP_PROHIBIT);
}
redirect($PAGE->url);
} else {
$a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'context'=>$contextname);
$message = get_string('roleprohibitinfo', 'role', $a);
echo $OUTPUT->header();
if ($tabfile) {
include($tabfile);
}
echo $OUTPUT->box($message);
$mform->display();
echo $OUTPUT->footer();
die;
}
echo $OUTPUT->header();
include($tabfile);
echo $OUTPUT->heading($title);
echo $OUTPUT->box($message);
$mform->display();
echo $OUTPUT->footer();
die;
}
}
echo $OUTPUT->header();
if ($tabfile) {
include($tabfile);
}
include($tabfile);
echo $OUTPUT->heading($title);
$table = new permissions_table($context, $contextname, $allowoverrides, $allowsafeoverrides, $overridableroles);
@@ -239,14 +202,16 @@ if ($overridableroles) {
$overrideurl = new moodle_url('/admin/roles/override.php', array('contextid' => $context->id));
$select = new single_select($overrideurl, 'roleid', $nameswithcounts);
$select->label = get_string('advancedoverride', 'role');
echo '<div class="advancedoverride">'.$OUTPUT->render($select).'</div>';
echo html_writer::tag('div', $OUTPUT->render($select), array('class'=>'advancedoverride'));
}
$table->display();
echo $OUTPUT->box_end();
if ($context->contextlevel > CONTEXT_USER) {
echo '<div class="backlink"><a href="' . get_context_url($context) . '">' . get_string('backto', '', $contextname) . '</a></div>';
echo html_writer::start_tag('div', array('class'=>'backlink'));
echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
echo html_writer::end_tag('div');
}
echo $OUTPUT->footer($course);
+11 -100
View File
@@ -38,90 +38,6 @@ if (!isset($availablefilters)) {
}
}
if ($currenttab != 'update') {
switch ($context->contextlevel) {
case CONTEXT_SYSTEM:
$stradministration = get_string('administration');
if (empty($title)) {
$title = $SITE->fullname;
}
$PAGE->navbar->add($stradministration, new moodle_url('/admin/'), navigation_node::TYPE_SETTING);
$PAGE->navbar->add($straction);
$PAGE->set_title($title);
$PAGE->set_heading($SITE->fullname);
break;
case CONTEXT_USER:
break;
case CONTEXT_COURSECAT:
$category = $DB->get_record('course_categories', array('id'=>$context->instanceid));
$strcategories = get_string("categories");
$strcategory = get_string("category");
$strcourses = get_string("courses");
if (empty($title)) {
$title = "$SITE->shortname: $category->name";
}
$PAGE->navbar->add($strcategories, new moodle_url('/course/index.php'), navigation_node::TYPE_SETTING);
$PAGE->navbar->add($category->name, new moodle_url('/course/category.php', array('id'=>$category->id)), navigation_node::TYPE_SETTING);
$PAGE->navbar->add(get_string("roles"));
$PAGE->set_title($title);
$PAGE->set_heading("$SITE->fullname: $strcourses");
break;
case CONTEXT_COURSE:
if ($context->instanceid != SITEID) {
$course = $DB->get_record('course', array('id'=>$context->instanceid));
if (empty($title)) {
$title = get_string("editcoursesettings");
}
$roleslink = new moodle_url("$CFG->wwwroot/$CFG->admin/roles/assign.php", array('contextid'=>$context->id));
$PAGE->navbar->add(get_string('roles'), $roleslink, navigation_node::TYPE_SETTING);
$PAGE->set_title($title);
$PAGE->set_heading($course->fullname);
}
break;
case CONTEXT_MODULE:
if (!$cm = get_coursemodule_from_id('', $context->instanceid)) {
print_error('invalidcoursemodule', 'error');
}
if (!$course = $DB->get_record('course', array('id' => $cm->course))) {
print_error('invalidcourse');
}
$PAGE->navigation->add(get_string('roles'));
if (empty($title)) {
$title = get_string("editinga", "moodle", $fullmodulename);
}
$PAGE->set_title($title);
$PAGE->set_cacheable(false);
break;
case CONTEXT_BLOCK:
if ($blockinstance = $DB->get_record('block_instances', array('id' => $context->instanceid))) {
$blockname = print_context_name($context);
$PAGE->navbar->add($blockname);
$PAGE->navbar->add($straction);
$PAGE->set_title("$straction: $blockname");
$PAGE->set_heading($PAGE->course->fullname);
}
break;
default:
print_error('unknowncontext');
return false;
}
}
$toprow = array();
$inactive = array();
$activetwo = array();
@@ -132,27 +48,23 @@ $permissionsrow = array();
if ($context->contextlevel != CONTEXT_SYSTEM) { // Print tabs for anything except SYSTEM context
if ($context->contextlevel == CONTEXT_MODULE) { // Only show update button if module
$toprow[] = new tabobject('update', $CFG->wwwroot.'/course/mod.php?update='.
$context->instanceid.'&amp;return=true&amp;sesskey='.sesskey(), get_string('settings'));
$url = new moodle_url('/course/mod.php', array('update'=>$context->instanceid, 'return'=>'true', 'sesskey'=>sesskey()));
$toprow[] = new tabobject('update', $url, get_string('settings'));
}
if (!empty($assignableroles) || $currenttab=='assign') {
$toprow[] = new tabobject('assign',
new moodle_url('/admin/roles/assign.php', array('contextid'=>$context->id)),
get_string('localroles', 'role'), '', true);
$url = new moodle_url('/admin/roles/assign.php', array('contextid'=>$context->id));
$toprow[] = new tabobject('assign', $url, get_string('localroles', 'role'), '', true);
}
if (has_capability('moodle/role:review', $context) or !empty($overridableroles)) {
$permissionsrow['permissions'] = new tabobject('permissions',
new moodle_url('/admin/roles/permissions.php', array('contextid'=>$context->id)),
get_string('permissions', 'role'), '', true);
$url = new moodle_url('/admin/roles/permissions.php', array('contextid'=>$context->id));
$permissionsrow['permissions'] = new tabobject('permissions', $url, get_string('permissions', 'role'), '', true);
}
if (has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride',
'moodle/role:override', 'moodle/role:assign'), $context)) {
$permissionsrow['check'] = new tabobject('check',
new moodle_url('/admin/roles/check.php', array('contextid'=>$context->id)),
get_string('checkpermissions', 'role'));
if (has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride', 'moodle/role:override', 'moodle/role:assign'), $context)) {
$url = new moodle_url('/admin/roles/check.php', array('contextid'=>$context->id));
$permissionsrow['check'] = new tabobject('check', $url, get_string('checkpermissions', 'role'));
}
if ($permissionsrow) {
@@ -166,9 +78,8 @@ if ($context->contextlevel != CONTEXT_SYSTEM) { // Print tabs for anything ex
}
if (!empty($availablefilters)) {
$toprow[] = new tabobject('filters',
new moodle_url('/filter/manage.php', array('contextid'=>$context->id)),
get_string('filters', 'admin'));
$url = new moodle_url('/filter/manage.php', array('contextid'=>$context->id));
$toprow[] = new tabobject('filters', $url, get_string('filters', 'admin'));
}
}
unset($permissionsrow);
+529 -568
View File
File diff suppressed because it is too large Load Diff
+40 -30
View File
@@ -36,9 +36,7 @@ require_once($CFG->libdir . '/adminlib.php');
$contextid = required_param('contextid',PARAM_INT);
$forfilter = optional_param('filter', '', PARAM_SAFEPATH);
if (!$context = get_context_instance_by_id($contextid)) {
print_error('wrongcontextid', 'error');
}
$context = get_context_instance_by_id($contextid, MUST_EXIST);
$args = array('contextid'=>$contextid);
$baseurl = new moodle_url('/filter/manage.php', $args);
@@ -52,26 +50,34 @@ if (!in_array($context->contextlevel, array(CONTEXT_COURSECAT, CONTEXT_COURSE, C
print_error('cannotcustomisefiltersblockuser', 'error');
}
$isfrontpage = $context->contextlevel == CONTEXT_COURSE && $context->instanceid == SITEID;
$isfrontpage = ($context->contextlevel == CONTEXT_COURSE && $context->instanceid == SITEID);
$contextname = print_context_name($context);
$cm = null;
if ($context->contextlevel == CONTEXT_COURSECAT) {
$course = clone($SITE);
$heading = "$SITE->fullname: ".get_string("categories");
$PAGE->set_heading();
} else if ($context->contextlevel == CONTEXT_COURSE) {
$course = $DB->get_record('course', array('id' => $context->instanceid));
$course = $DB->get_record('course', array('id' => $context->instanceid), '*', MUST_EXIST);
$heading = $course->fullname;
} else {
// Must be module context.
$course = $DB->get_record_sql('SELECT c.* FROM {course} c JOIN {context} ctx ON c.id = ctx.instanceid WHERE ctx.id = ?',
array(get_parent_contextid($context)));
}
if (!$course) {
print_error('invalidcourse', 'error');
$cm = get_coursemodule_from_id(null, $context->instanceid, false, 0, MUST_EXIST);
$course = $DB->get_record('course', array('id'=>$cm->course), '*', MUST_EXIST);
}
/// Check login and permissions.
require_login($course);
require_login($course, false, $cm);
require_capability('moodle/filter:manage', $context);
if ($cm) {
$heading = $PAGE->activityrecord->name;
}
$PAGE->set_context($context);
$PAGE->set_heading($heading);
/// Get the list of available filters.
$availablefilters = filter_get_available_in_context($context);
if (!$isfrontpage && empty($availablefilters)) {
@@ -106,10 +112,6 @@ if ($forfilter == '' && optional_param('savechanges', false, PARAM_BOOL) && conf
redirect($CFG->wwwroot . '/filter/manage.php?contextid=' . $context->id, get_string('changessaved'), 1);
}
/// These are needed early because of tabs.php
$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
$overridableroles = get_overridable_roles($context, ROLENAME_BOTH);
/// Work out an appropriate page title.
if ($forfilter) {
$a = new stdClass;
@@ -122,16 +124,24 @@ if ($forfilter) {
$straction = get_string('filters', 'admin'); // Used by tabs.php
/// Print the header and tabs
if ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID) {
if ($isfrontpage) {
admin_externalpage_setup('frontpagefilters');
echo $OUTPUT->header();
} else {
$PAGE->set_cacheable(false);
$PAGE->set_title($title);
$PAGE->set_pagelayout('admin');
echo $OUTPUT->header();
// These are because of /roles/tabs.php
$currenttab = 'filters';
include_once($CFG->dirroot . '/' . $CFG->admin . '/roles/tabs.php');
$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
$overridableroles = get_overridable_roles($context, ROLENAME_BOTH);
include($CFG->dirroot . '/' . $CFG->admin . '/roles/tabs.php');
}
/// Print heading.
echo $OUTPUT->heading_with_help($title, 'localfiltersettings');
echo $OUTPUT->heading_with_help($title, 'localfiltersettings', 'filters');
if (empty($availablefilters)) {
echo '<p class="centerpara">' . get_string('nofiltersenabled', 'filters') . "</p>\n";
@@ -158,9 +168,9 @@ if (empty($availablefilters)) {
TEXTFILTER_ON => $stron,
);
echo '<form action="'.$baseurl->out().'" method="post">';
echo "\n<div>\n";
echo '<input type="hidden" name="sesskey" value="' . sesskey() . '" />';
echo html_writer::start_tag('form', array('action'=>$baseurl->out(), 'method'=>'post'));
echo html_writer::start_tag('div');
echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'sesskey', 'value'=>sesskey()));
$table = new html_table();
$table->head = array(get_string('filter'), get_string('isactive', 'filters'));
@@ -200,18 +210,18 @@ if (empty($availablefilters)) {
}
echo html_writer::table($table);
echo '<div class="buttons">' . "\n";
echo '<input type="submit" name="savechanges" value="' . get_string('savechanges') . '" />';
echo "\n</div>\n";
echo "</div>\n";
echo "</form>\n";
echo html_writer::start_tag('div', array('class'=>'buttons'));
echo html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'savechanges', 'value'=>get_string('savechanges')));
echo html_writer::end_tag('div');
echo html_writer::end_tag('div');
echo html_writer::end_tag('form');
}
/// Appropriate back link.
if (!$isfrontpage && ($url = get_context_url($context))) {
echo '<div class="backlink"><a href="' . $url . '">' .
get_string('backto', '', $contextname) . '</a></div>';
if (!$isfrontpage) {
echo html_writer::start_tag('div', array('class'=>'backlink'));
echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
echo html_writer::end_tag('div');
}
echo $OUTPUT->footer();
+13 -8
View File
@@ -2733,30 +2733,35 @@ class settings_navigation extends navigation_node {
protected function load_category_settings() {
global $CFG;
$blocknode = $this->add(print_context_name($this->context));
$blocknode->force_open();
$categorynode = $this->add(print_context_name($this->context));
$categorynode->force_open();
if ($this->page->user_is_editing() && has_capability('moodle/category:manage', $this->context)) {
$blocknode->add(get_string('editcategorythis'), new moodle_url('/course/editcategory.php', array('id' => $this->context->instanceid)));
$blocknode->add(get_string('addsubcategory'), new moodle_url('/course/editcategory.php', array('parent' => $this->context->instanceid)));
$categorynode->add(get_string('editcategorythis'), new moodle_url('/course/editcategory.php', array('id' => $this->context->instanceid)));
$categorynode->add(get_string('addsubcategory'), new moodle_url('/course/editcategory.php', array('parent' => $this->context->instanceid)));
}
// Assign local roles
$assignurl = new moodle_url('/'.$CFG->admin.'/roles/assign.php', array('contextid'=>$this->context->id));
$blocknode->add(get_string('assignroles', 'role'), $assignurl, self::TYPE_SETTING);
$categorynode->add(get_string('assignroles', 'role'), $assignurl, self::TYPE_SETTING);
// Override roles
if (has_capability('moodle/role:review', $this->context) or count(get_overridable_roles($this->context))>0) {
$url = new moodle_url('/'.$CFG->admin.'/roles/permissions.php', array('contextid'=>$this->context->id));
$blocknode->add(get_string('permissions', 'role'), $url, self::TYPE_SETTING);
$categorynode->add(get_string('permissions', 'role'), $url, self::TYPE_SETTING);
}
// Check role permissions
if (has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride','moodle/role:override', 'moodle/role:assign'), $this->context)) {
$url = new moodle_url('/'.$CFG->admin.'/roles/check.php', array('contextid'=>$this->context->id));
$blocknode->add(get_string('checkpermissions', 'role'), $url, self::TYPE_SETTING);
$categorynode->add(get_string('checkpermissions', 'role'), $url, self::TYPE_SETTING);
}
// Manage filters
if (has_capability('moodle/filter:manage', $this->context) && count(filter_get_available_in_context($this->context))>0) {
$url = new moodle_url('/filter/manage.php', array('contextid'=>$this->context->id));
$categorynode->add(get_string('filters', 'admin'), $url, self::TYPE_SETTING);
}
return $blocknode;
return $categorynode;
}
/**