Skip to content

Commit

Permalink
Merge branch 'w42_MDL-35904_m24_mainadmin' of git://github.com/skodak…
Browse files Browse the repository at this point in the history
…/moodle
  • Loading branch information
danpoltawski committed Oct 16, 2012
2 parents ea0a092 + 5507901 commit ac088b1
Show file tree
Hide file tree
Showing 11 changed files with 96 additions and 25 deletions.
4 changes: 1 addition & 3 deletions admin/cli/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -159,9 +159,7 @@
upgrade_noncore(true);

// log in as admin - we need doanything permission when applying defaults
$admins = get_admins();
$admin = reset($admins);
session_set_user($admin);
session_set_user(get_admin());

// apply all default settings, just in case do it twice to fill all defaults
admin_apply_default_settings(NULL, false);
Expand Down
4 changes: 2 additions & 2 deletions admin/handlevirus.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ function notify_admins($user,$subject,$a) {
foreach ($admins as $admin) {
$eventdata = new stdClass();
$eventdata->modulename = 'moodle';
$eventdata->userfrom = $admin;
$eventdata->userfrom = get_admin();
$eventdata->userto = $admin;
$eventdata->subject = $subject;
$eventdata->fullmessage = $body;
Expand All @@ -107,7 +107,7 @@ function notify_admins_unknown($file,$a) {
foreach ($admins as $admin) {
$eventdata = new stdClass();
$eventdata->modulename = 'moodle';
$eventdata->userfrom = $admin;
$eventdata->userfrom = get_admin();
$eventdata->userto = $admin;
$eventdata->subject = $subject;
$eventdata->fullmessage = $body;
Expand Down
26 changes: 21 additions & 5 deletions lib/datalib.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,18 @@ function get_admin() {
global $CFG, $DB;

static $mainadmin = null;
static $prevadmins = null;

if (isset($mainadmin)) {
return clone($mainadmin);
if (empty($CFG->siteadmins)) { // Should not happen on an ordinary site.
return false;
}

if (empty($CFG->siteadmins)) { // Should not happen on an ordinary site
return false;
if (isset($mainadmin) and $prevadmins === $CFG->siteadmins) {
return clone($mainadmin);
}

$mainadmin = null;

foreach (explode(',', $CFG->siteadmins) as $id) {
if ($user = $DB->get_record('user', array('id'=>$id, 'deleted'=>0))) {
$mainadmin = $user;
Expand All @@ -72,6 +75,7 @@ function get_admin() {
}

if ($mainadmin) {
$prevadmins = $CFG->siteadmins;
return clone($mainadmin);
} else {
// this should not happen
Expand All @@ -95,7 +99,19 @@ function get_admins() {
FROM {user} u
WHERE u.deleted = 0 AND u.id IN ($CFG->siteadmins)";

return $DB->get_records_sql($sql);
// We want the same order as in $CFG->siteadmins.
$records = $DB->get_records_sql($sql);
$admins = array();
foreach (explode(',', $CFG->siteadmins) as $id) {
$id = (int)$id;
if (!isset($records[$id])) {
// User does not exist, this should not happen.
continue;
}
$admins[$records[$id]->id] = $records[$id];
}

return $admins;
}

/**
Expand Down
4 changes: 1 addition & 3 deletions lib/installlib.php
Original file line number Diff line number Diff line change
Expand Up @@ -476,9 +476,7 @@ function install_cli_database(array $options, $interactive) {
upgrade_finished();

// log in as admin - we need do anything when applying defaults
$admins = get_admins();
$admin = reset($admins);
session_set_user($admin);
session_set_user(get_admin());

// apply all default settings, do it twice to fill all defaults - some settings depend on other setting
admin_apply_default_settings(NULL, true);
Expand Down
4 changes: 1 addition & 3 deletions lib/pluginlib.php
Original file line number Diff line number Diff line change
Expand Up @@ -1323,13 +1323,11 @@ protected function cron_notify(array $notifications) {
$html .= html_writer::tag('footer', html_writer::tag('p', get_string('updatenotificationfooter', 'core_admin', $a),
array('style' => 'font-size:smaller; color:#333;')));

$mainadmin = reset($admins);

foreach ($admins as $admin) {
$message = new stdClass();
$message->component = 'moodle';
$message->name = 'availableupdate';
$message->userfrom = $mainadmin;
$message->userfrom = get_admin();
$message->userto = $admin;
$message->subject = get_string('updatenotifications', 'core_admin');
$message->fullmessage = $text;
Expand Down
2 changes: 1 addition & 1 deletion lib/portfoliolib.php
Original file line number Diff line number Diff line change
Expand Up @@ -1120,7 +1120,7 @@ function portfolio_insane_notify_admins($insane, $instances=false) {
$eventdata->modulename = 'portfolio';
$eventdata->component = 'portfolio';
$eventdata->name = 'notices';
$eventdata->userfrom = $admin;
$eventdata->userfrom = get_admin();
$eventdata->userto = $admin;
$eventdata->subject = $subject;
$eventdata->fullmessage = $plainbody;
Expand Down
65 changes: 65 additions & 0 deletions lib/tests/datalib_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,69 @@ public function test_users_order_by_sql_search_with_extra_fields_and_prefix() {
$this->assertEquals(array('usersortexact1' => 'search', 'usersortexact2' => 'search',
'usersortexact3' => 'search', 'usersortexact4' => 'search', 'usersortexact5' => 'search'), $params);
}

public function test_get_admin() {
global $CFG, $DB;

$this->resetAfterTest();

$this->assertSame('2', $CFG->siteadmins); // Admin always has id 2 in new installs.
$defaultadmin = get_admin();
$this->assertEquals($defaultadmin->id, 2);

unset_config('siteadmins');
$this->assertFalse(get_admin());

set_config('siteadmins', -1);
$this->assertFalse(get_admin());

$user1 = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user();

set_config('siteadmins', $user1->id.','.$user2->id);
$admin = get_admin();
$this->assertEquals($user1->id, $admin->id);

set_config('siteadmins', '-1,'.$user2->id.','.$user1->id);
$admin = get_admin();
$this->assertEquals($user2->id, $admin->id);

$odlread = $DB->perf_get_reads();
get_admin(); // No DB queries on repeated call expected.
get_admin();
get_admin();
$this->assertEquals($odlread, $DB->perf_get_reads());
}

public function test_get_admins() {
global $CFG, $DB;

$this->resetAfterTest();

$this->assertSame('2', $CFG->siteadmins); // Admin always has id 2 in new installs.

$user1 = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user();
$user3 = $this->getDataGenerator()->create_user();
$user4 = $this->getDataGenerator()->create_user();

$admins = get_admins();
$this->assertEquals(1, count($admins));
$admin = reset($admins);
$this->assertTrue(isset($admins[$admin->id]));
$this->assertEquals(2, $admin->id);

unset_config('siteadmins');
$this->assertSame(array(), get_admins());

set_config('siteadmins', -1);
$this->assertSame(array(), get_admins());

set_config('siteadmins', '-1,'.$user2->id.','.$user1->id.','.$user3->id);
$this->assertEquals(array($user2->id=>$user2, $user1->id=>$user1, $user3->id=>$user3), get_admins());

$odlread = $DB->perf_get_reads();
get_admins(); // This should make just one query.
$this->assertEquals($odlread+1, $DB->perf_get_reads());
}
}
3 changes: 1 addition & 2 deletions portfolio/googledocs/db/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,14 @@ function portfolio_googledocs_admin_upgrade_notification() {
if (empty($admins)) {
return;
}
$mainadmin = reset($admins);
$a = new stdClass;
$a->docsurl = get_docs_url('Google_OAuth_2.0_setup');

foreach ($admins as $admin) {
$message = new stdClass();
$message->component = 'moodle';
$message->name = 'notices';
$message->userfrom = $mainadmin;
$message->userfrom = get_admin();
$message->userto = $admin;
$message->smallmessage = get_string('oauth2upgrade_message_small', 'portfolio_googledocs');
$message->subject = get_string('oauth2upgrade_message_subject', 'portfolio_googledocs');
Expand Down
3 changes: 1 addition & 2 deletions portfolio/picasa/db/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,14 @@ function portfolio_picasa_admin_upgrade_notification() {
if (empty($admins)) {
return;
}
$mainadmin = reset($admins);
$a = new stdClass;
$a->docsurl = get_docs_url('Google_OAuth_2.0_setup');

foreach ($admins as $admin) {
$message = new stdClass();
$message->component = 'moodle';
$message->name = 'notices';
$message->userfrom = $mainadmin;
$message->userfrom = get_admin();
$message->userto = $admin;
$message->smallmessage = get_string('oauth2upgrade_message_small', 'portfolio_picasa');
$message->subject = get_string('oauth2upgrade_message_subject', 'portfolio_picasa');
Expand Down
3 changes: 1 addition & 2 deletions repository/googledocs/db/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,14 @@ function repository_googledocs_admin_upgrade_notification() {
if (empty($admins)) {
return;
}
$mainadmin = reset($admins);

$a = new stdClass;
$a->docsurl = get_docs_url('Google_OAuth_2.0_setup');
foreach ($admins as $admin) {
$message = new stdClass();
$message->component = 'moodle';
$message->name = 'notices';
$message->userfrom = $mainadmin;
$message->userfrom = get_admin();
$message->userto = $admin;
$message->smallmessage = get_string('oauth2upgrade_message_small', 'repository_googledocs');
$message->subject = get_string('oauth2upgrade_message_subject', 'repository_googledocs');
Expand Down
3 changes: 1 addition & 2 deletions repository/picasa/db/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,14 @@ function repository_picasa_admin_upgrade_notification() {
if (empty($admins)) {
return;
}
$mainadmin = reset($admins);
$a = new stdClass;
$a->docsurl = get_docs_url('Google_OAuth_2.0_setup');

foreach ($admins as $admin) {
$message = new stdClass();
$message->component = 'moodle';
$message->name = 'notices';
$message->userfrom = $mainadmin;
$message->userfrom = get_admin();
$message->userto = $admin;
$message->smallmessage = get_string('oauth2upgrade_message_small', 'repository_picasa');
$message->subject = get_string('oauth2upgrade_message_subject', 'repository_picasa');
Expand Down

0 comments on commit ac088b1

Please sign in to comment.