Skip to content

Commit

Permalink
MDL-49828 timezones: improve settings performance
Browse files Browse the repository at this point in the history
  • Loading branch information
Petr Skoda committed Apr 12, 2015
1 parent 75a1e85 commit 91bafd7
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 20 deletions.
22 changes: 2 additions & 20 deletions admin/settings/location.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,8 @@

// "locations" settingpage
$temp = new admin_settingpage('locationsettings', new lang_string('locationsettings', 'admin'));

$current = isset($CFG->timezone) ? $CFG->timezone : null;
$options = core_date::get_list_of_timezones($current, false);
$default = core_date::get_default_php_timezone();
if ($current == 99) {
// Do not show 99 unless it is current value, we want to get rid of it over time.
$options['99'] = new lang_string('timezonephpdefault', 'core_admin', $default);
}
if ($default === 'UTC') {
// Nobody really wants UTC, so instead default selection to the country that is confused by the UTC the most.
$default = 'Europe/London';
}
$temp->add(new admin_setting_configselect('timezone', new lang_string('timezone', 'admin'),
new lang_string('configtimezone', 'admin'), $default, $options));

$options = core_date::get_list_of_timezones(isset($CFG->forcetimezone) ? $CFG->forcetimezone : null, true);
$options[99] = new lang_string('timezonenotforced', 'admin');
$temp->add(new admin_setting_configselect('forcetimezone', new lang_string('forcetimezone', 'admin'),
new lang_string('helpforcetimezone', 'admin'), 99, $options));

$temp->add(new admin_setting_servertimezone());
$temp->add(new admin_setting_forcetimezone());
$temp->add(new admin_settings_country_select('country', new lang_string('country', 'admin'), new lang_string('configcountry', 'admin'), 0));
$temp->add(new admin_setting_configtext('defaultcity', new lang_string('defaultcity', 'admin'), new lang_string('defaultcity_help', 'admin'), ''));

Expand Down
80 changes: 80 additions & 0 deletions lib/adminlib.php
Original file line number Diff line number Diff line change
Expand Up @@ -8997,3 +8997,83 @@ public function output_html($data, $query='') {
return $o;
}
}

/**
* Server timezone setting.
*
* @copyright 2015 Totara Learning Solutions Ltd {@link http://www.totaralms.com/}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @author Petr Skoda <[email protected]>
*/
class admin_setting_servertimezone extends admin_setting_configselect {
/**
* Constructor.
*/
public function __construct() {
$default = core_date::get_default_php_timezone();
if ($default === 'UTC') {
// Nobody really wants UTC, so instead default selection to the country that is confused by the UTC the most.
$default = 'Europe/London';
}

parent::__construct('timezone',
new lang_string('timezone', 'core_admin'),
new lang_string('configtimezone', 'core_admin'), $default, null);
}

/**
* Lazy load timezone options.
* @return bool true if loaded, false if error
*/
public function load_choices() {
global $CFG;
if (is_array($this->choices)) {
return true;
}

$current = isset($CFG->timezone) ? $CFG->timezone : null;
$this->choices = core_date::get_list_of_timezones($current, false);
if ($current == 99) {
// Do not show 99 unless it is current value, we want to get rid of it over time.
$this->choices['99'] = new lang_string('timezonephpdefault', 'core_admin',
core_date::get_default_php_timezone());
}

return true;
}
}

/**
* Forced user timezone setting.
*
* @copyright 2015 Totara Learning Solutions Ltd {@link http://www.totaralms.com/}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @author Petr Skoda <[email protected]>
*/
class admin_setting_forcetimezone extends admin_setting_configselect {
/**
* Constructor.
*/
public function __construct() {
parent::__construct('forcetimezone',
new lang_string('forcetimezone', 'core_admin'),
new lang_string('helpforcetimezone', 'core_admin'), '99', null);
}

/**
* Lazy load timezone options.
* @return bool true if loaded, false if error
*/
public function load_choices() {
global $CFG;
if (is_array($this->choices)) {
return true;
}

$current = isset($CFG->forcetimezone) ? $CFG->forcetimezone : null;
$this->choices = core_date::get_list_of_timezones($current, true);
$this->choices['99'] = new lang_string('timezonenotforced', 'core_admin');

return true;
}
}

0 comments on commit 91bafd7

Please sign in to comment.