From e9ca9d30630f1856ad8ab2bb3ef2ed5dc9d95961 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20S=CC=8Ckoda?= Date: Wed, 26 Dec 2012 12:02:08 +0100 Subject: [PATCH] MDL-37302 allow admin to unassign any role on enrolment and other users pages --- enrol/locallib.php | 9 +++++++-- enrol/renderer.php | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/enrol/locallib.php b/enrol/locallib.php index 0c15e79a306..984354a0ce2 100644 --- a/enrol/locallib.php +++ b/enrol/locallib.php @@ -586,7 +586,8 @@ class course_enrolment_manager { */ public function unassign_role_from_user($userid, $roleid) { global $DB; - if (!array_key_exists($roleid, $this->get_assignable_roles())) { + // Admins may unassign any role, others only those they could assign. + if (!is_siteadmin() and !array_key_exists($roleid, $this->get_assignable_roles())) { if (defined('AJAX_SCRIPT')) { throw new moodle_exception('invalidrole'); } @@ -922,7 +923,11 @@ class course_enrolment_manager { // Roles $details['roles'] = array(); foreach ($this->get_user_roles($user->id) as $rid=>$rassignable) { - $details['roles'][$rid] = array('text'=>$allroles[$rid]->localname, 'unchangeable'=>(!$rassignable || !isset($assignable[$rid]))); + $unchangeable = !$rassignable; + if (!is_siteadmin() and !isset($assignable[$rid])) { + $unchangeable = true; + } + $details['roles'][$rid] = array('text'=>$allroles[$rid]->localname, 'unchangeable'=>$unchangeable); } // Users diff --git a/enrol/renderer.php b/enrol/renderer.php index 05e43f513f9..de8505c262b 100644 --- a/enrol/renderer.php +++ b/enrol/renderer.php @@ -189,7 +189,7 @@ class core_enrol_renderer extends plugin_renderer_base { // get list of roles $rolesoutput = ''; foreach ($roles as $roleid=>$role) { - if ($canassign && !$role['unchangeable']) { + if ($canassign and (is_siteadmin() or isset($assignableroles[$roleid])) and !$role['unchangeable']) { $strunassign = get_string('unassignarole', 'role', $role['text']); $icon = html_writer::empty_tag('img', array('alt'=>$strunassign, 'src'=>$iconenrolremove)); $url = new moodle_url($pageurl, array('action'=>'unassign', 'role'=>$roleid, 'user'=>$userid));