';
diff --git a/admin/roles/allowoverride.php b/admin/roles/allowoverride.php
deleted file mode 100755
index 1d1dd2fb395..00000000000
--- a/admin/roles/allowoverride.php
+++ /dev/null
@@ -1,126 +0,0 @@
-libdir.'/adminlib.php');
-
- require_login();
- $systemcontext = get_context_instance(CONTEXT_SYSTEM);
- require_capability('moodle/role:manage', $systemcontext);
-
-/// Get all roles
- $roles = get_all_roles();
- role_fix_names($roles, $systemcontext, ROLENAME_ORIGINAL);
-
-/// Process form submission
- if (optional_param('submit', false, PARAM_BOOL) && data_submitted() && confirm_sesskey()) {
- /// Delete all records, then add back the ones that should be allowed.
- $DB->delete_records('role_allow_override');
- foreach ($roles as $fromroleid => $notused) {
- foreach ($roles as $targetroleid => $alsonotused) {
- if (optional_param('s_' . $fromroleid . '_' . $targetroleid, false, PARAM_BOOL)) {
- allow_override($fromroleid, $targetroleid);
- }
- }
- }
-
- /// Updated allowoverrides sitewide, so force a premissions refresh, and redirect.
- mark_context_dirty($systemcontext->path);
- add_to_log(SITEID, 'role', 'edit allow override', 'admin/roles/allowoverride.php', '', '', $USER->id);
- redirect($CFG->wwwroot . '/' . $CFG->admin . '/roles/allowoverride.php');
- }
-
-/// Load the current settings
- $allowed = array();
- foreach ($roles as $role) {
- // Make an array $role->id => false. This is probalby too clever for its own good.1
- $allowed[$role->id] = array_combine(array_keys($roles), array_fill(0, count($roles), false));
- }
- $raas = $DB->get_recordset('role_allow_override');
- foreach ($raas as $raa) {
- $allowed[$raa->roleid][$raa->allowoverride] = true;
- }
-
-/// Display the editing form.
- admin_externalpage_setup('defineroles', '', array(), $CFG->wwwroot . '/' . $CFG->admin . '/roles/allowoverride.php');
- admin_externalpage_print_header();
-
- $currenttab='allowoverride';
- require_once('managetabs.php');
-
- $table->tablealign = 'center';
- $table->cellpadding = 5;
- $table->cellspacing = 0;
- $table->width = '90%';
- $table->align[] = 'left';
- $table->rotateheaders = true;
- $table->head = array(' ');
-
-/// Add role name headers.
- foreach ($roles as $targetrole) {
- $table->head[] = $targetrole->localname;
- $table->align[] = 'left';
- }
-
-/// Now the rest of the table.
- foreach ($roles as $fromrole) {
- $row = array($fromrole->localname);
- $a = new stdClass;
- $a->fromrole = $fromrole->localname;
- foreach ($roles as $targetrole) {
- if ($allowed[$fromrole->id][$targetrole->id]) {
- $checked = ' checked="checked"';
- } else {
- $checked = '';
- }
- $a->targetrole = $targetrole->localname;
- $name = 's_' . $fromrole->id . '_' . $targetrole->id;
- $tooltip = get_string('allowroletooverride', 'role', $a);
- $row[] = '
' .
- '
';
- }
- $table->data[] = $row;
- }
-
- print_simple_box(get_string('configallowoverride2', 'admin'), 'center');
-
- echo '
';
-
- admin_externalpage_print_footer();
-?>
diff --git a/admin/roles/lib.php b/admin/roles/lib.php
index a32ddba6833..911f6b67b73 100644
--- a/admin/roles/lib.php
+++ b/admin/roles/lib.php
@@ -1257,31 +1257,22 @@ class existing_role_holders_site_admin extends existing_role_holders {
abstract class role_allow_role_page {
protected $tablename;
protected $targetcolname;
- protected $systemcontext;
protected $roles;
protected $allowed = null;
public function __construct($tablename, $targetcolname) {
$this->tablename = $tablename;
$this->targetcolname = $targetcolname;
- $this->systemcontext = get_context_instance(CONTEXT_SYSTEM);
$this->load_required_roles();
}
- /**
- * @return object the context we need. (The system context.)
- */
- public function get_context() {
- return $this->systemcontext;
- }
-
/**
* Load all the roles we will need information about.
*/
protected function load_required_roles() {
/// Get all roles
$this->roles = get_all_roles();
- role_fix_names($this->roles, $this->systemcontext, ROLENAME_ORIGINAL);
+ role_fix_names($this->roles, get_context_instance(CONTEXT_SYSTEM), ROLENAME_ORIGINAL);
}
/**
@@ -1354,6 +1345,8 @@ abstract class role_allow_role_page {
return $table;
}
+
+ public abstract function get_intro_text();
}
class role_allow_assign_page extends role_allow_role_page {
@@ -1371,6 +1364,31 @@ class role_allow_assign_page extends role_allow_role_page {
$a->targetrole = $targetrole->localname;
return get_string('allowroletoassign', 'role', $a);
}
+
+ public function get_intro_text() {
+ return get_string('configallowassign', 'admin');
+ }
+}
+
+class role_allow_override_page extends role_allow_role_page {
+ public function __construct() {
+ parent::__construct('role_allow_override', 'allowoverride');
+ }
+
+ protected function set_allow($fromroleid, $targetroleid) {
+ allow_override($fromroleid, $targetroleid);
+ }
+
+ protected function get_cell_tooltip($fromrole, $targetrole) {
+ $a = new stdClass;
+ $a->fromrole = $fromrole->localname;
+ $a->targetrole = $targetrole->localname;
+ return get_string('allowroletooverride', 'role', $a);
+ }
+
+ public function get_intro_text() {
+ return get_string('configallowoverride2', 'admin');
+ }
}
?>
\ No newline at end of file
diff --git a/admin/roles/managetabs.php b/admin/roles/managetabs.php
index efe8de986fd..bb969c67046 100755
--- a/admin/roles/managetabs.php
+++ b/admin/roles/managetabs.php
@@ -35,13 +35,10 @@
}
$toprow = array();
-
$toprow[] = new tabobject('manage', $CFG->wwwroot.'/'.$CFG->admin.'/roles/manage.php', get_string('manageroles', 'role'));
-
- $toprow[] = new tabobject('allowassign', $CFG->wwwroot.'/'.$CFG->admin.'/roles/allowassign.php', get_string('allowassign', 'role'));
-
- $toprow[] = new tabobject('allowoverride', $CFG->wwwroot.'/'.$CFG->admin.'/roles/allowoverride.php', get_string('allowoverride', 'role'));
-
+ $toprow[] = new tabobject('assign', $CFG->wwwroot.'/'.$CFG->admin.'/roles/allow.php?mode=assign', get_string('allowassign', 'role'));
+ $toprow[] = new tabobject('override', $CFG->wwwroot.'/'.$CFG->admin.'/roles/allow.php?mode=override', get_string('allowoverride', 'role'));
+ $toprow[] = new tabobject('switch', $CFG->wwwroot.'/'.$CFG->admin.'/roles/allow.php?mode=switch', get_string('allowswitch', 'role'));
$tabs = array($toprow);
print_tabs($tabs, $currenttab);
diff --git a/lang/en_utf8/error.php b/lang/en_utf8/error.php
index fc423af5de6..023f984183e 100644
--- a/lang/en_utf8/error.php
+++ b/lang/en_utf8/error.php
@@ -277,6 +277,7 @@ $string['invalidipformat'] = 'Invalid IP address format';
$string['invalidlegacy'] = 'Incorrect legacy role definition for type: $a';
$string['invalidkey'] = 'Incorrect key';
$string['invalidmd5'] = 'Invalid md5';
+$string['invalidmode'] = 'Invalid mode ($a)';
$string['invalidmodule'] = 'Invalid module';
$string['invalidmoduleid'] = 'Invalid module ID: $a';
$string['invalidmodulename'] = 'Invalid module name: $a';
diff --git a/lang/en_utf8/role.php b/lang/en_utf8/role.php
index c778666282d..d5d2c9442fd 100644
--- a/lang/en_utf8/role.php
+++ b/lang/en_utf8/role.php
@@ -11,6 +11,7 @@ $string['allowed'] = 'Allowed';
$string['allowoverride'] = 'Allow role overrides';
$string['allowroletoassign'] = 'Allow users with role $a->fromrole to assign the role $a->targetrole';
$string['allowroletooverride'] = 'Allow users with role $a->fromrole to override the role $a->targetrole';
+$string['allowswitch'] = 'Allow role switches';
$string['allsiteusers'] = 'All site users';
$string['assignanotherrole'] = 'Assign another role';
$string['assignerror'] = 'Error while assigning the role $a->role to user $a->user.';
diff --git a/theme/standard/styles_layout.css b/theme/standard/styles_layout.css
index 5caa061c4d8..b9f930e542f 100644
--- a/theme/standard/styles_layout.css
+++ b/theme/standard/styles_layout.css
@@ -1115,8 +1115,7 @@ body#admin-modules table.generaltable td.c0
#admin-qtypes #qtypes img.spacer {
width: 16px;
}
-#admin-roles-allowassign .buttons,
-#admin-roles-allowoverride .buttons,
+#admin-roles-allow .buttons,
#admin-roles-manage .buttons,
#admin-roles-define .buttons,
#admin-roles-override .buttons {