From bb6ccfa53d27b437eb21a7e964fb9a20068db602 Mon Sep 17 00:00:00 2001 From: Petr Skoda Date: Wed, 7 Dec 2011 11:18:10 +0100 Subject: [PATCH] MDL-30625 full support for main admin --- admin/roles/admins.php | 21 +++++++++++++++++++++ admin/roles/lib.php | 28 +++++++++++++++++++++++----- lang/en/role.php | 2 ++ lib/datalib.php | 28 ++++++++++++++++++---------- 4 files changed, 64 insertions(+), 15 deletions(-) diff --git a/admin/roles/admins.php b/admin/roles/admins.php index 450d432028e..1f5a8fe7217 100644 --- a/admin/roles/admins.php +++ b/admin/roles/admins.php @@ -67,6 +67,26 @@ if (optional_param('add', false, PARAM_BOOL) and confirm_sesskey()) { } } +} else if (optional_param('main', false, PARAM_BOOL) and confirm_sesskey()) { + if ($newmain = $admisselector->get_selected_users()) { + $newmain = reset($newmain); + $newmain = $newmain->id; + $admins = array(); + foreach(explode(',', $CFG->siteadmins) as $admin) { + $admin = (int)$admin; + if ($admin) { + $admins[$admin] = $admin; + } + } + + if (isset($admins[$newmain])) { + unset($admins[$newmain]); + array_unshift($admins, $newmain); + set_config('siteadmins', implode(',', $admins)); + redirect($PAGE->url); + } + } + } else if ($confirmadd and confirm_sesskey()) { $admins = array(); foreach(explode(',', $CFG->siteadmins) as $admin) { @@ -115,6 +135,7 @@ echo $OUTPUT->header();


+

diff --git a/admin/roles/lib.php b/admin/roles/lib.php index b09ed4f688a..68a3c8bb1c7 100644 --- a/admin/roles/lib.php +++ b/admin/roles/lib.php @@ -1584,13 +1584,31 @@ class admins_existing_selector extends user_selector_base { return array(); } - if ($search) { - $groupname = get_string('extusersmatching', 'role', $search); - } else { - $groupname = get_string('extusers', 'role'); + $mainadmin = array(); + $adminids = explode(',', $CFG->siteadmins); + foreach ($adminids as $id) { + if (isset($availableusers[$id])) { + $mainadmin = array($id=>$availableusers[$id]); + unset($availableusers[$id]); + break; + } } - return array($groupname => $availableusers); + $result = array(); + if ($mainadmin) { + $result[get_string('mainadmin', 'role')] = $mainadmin; + } + + if ($availableusers) { + if ($search) { + $groupname = get_string('extusersmatching', 'role', $search); + } else { + $groupname = get_string('extusers', 'role'); + } + $result[$groupname] = $availableusers; + } + + return $result; } protected function get_options() { diff --git a/lang/en/role.php b/lang/en/role.php index 2bf28ccfee1..971722c4fb2 100644 --- a/lang/en/role.php +++ b/lang/en/role.php @@ -212,6 +212,8 @@ $string['legacytype'] = 'Legacy role type'; $string['legacy:user'] = 'LEGACY ROLE: Authenticated user'; $string['listallroles'] = 'List all roles'; $string['localroles'] = 'Locally assigned roles'; +$string['mainadmin'] = 'Main administrator'; +$string['mainadminset'] = 'Set main admin'; $string['manageadmins'] = 'Manage site administrators'; $string['manager'] = 'Manager'; $string['managerdescription'] = 'Managers can access course and modify them, they usually do not participate in courses.'; diff --git a/lib/datalib.php b/lib/datalib.php index e888b23149d..0b86106e1db 100644 --- a/lib/datalib.php +++ b/lib/datalib.php @@ -49,24 +49,32 @@ define('LASTACCESS_UPDATE_SECS', 60); /** * Returns $user object of the main admin user - * primary admin = admin with lowest role_assignment id among admins * * @static stdClass $mainadmin * @return stdClass {@link $USER} record from DB, false if not found */ function get_admin() { + global $CFG, $DB; + static $mainadmin = null; - if (!isset($mainadmin)) { - if (! $admins = get_admins()) { - return false; - } - //TODO: add some admin setting for specifying of THE main admin - // for now return the first assigned admin - $mainadmin = reset($admins); + if (isset($mainadmin)) { + return clone($mainadmin); + } + + foreach (explode(',', $CFG->siteadmins) as $id) { + if ($user = $DB->get_record('user', array('id'=>$id, 'deleted'=>0))) { + $mainadmin = $user; + break; + } + } + + if ($mainadmin) { + return clone($mainadmin); + } else { + // this should not happen + return false; } - // we must clone this otherwise code outside can break the static var - return clone($mainadmin); } /**