diff options
author | thomascube <thomas@roundcube.net> | 2012-01-04 12:47:50 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2012-01-04 12:47:50 +0000 |
commit | 5879c09ca046c483d4102f1dd21babfac1cd8057 (patch) | |
tree | 6b185e2b7b510d1e584c217351258703410ba6ff /program/steps/settings | |
parent | 7645a0a107d57c3e0efb70fe3bef7df5b26ddef5 (diff) |
Use proper timezones from PHP's internal timezonedb (#1485592)
Diffstat (limited to 'program/steps/settings')
-rw-r--r-- | program/steps/settings/func.inc | 71 | ||||
-rw-r--r-- | program/steps/settings/save_prefs.inc | 3 |
2 files changed, 20 insertions, 54 deletions
diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index 2050b9331..44d3610f9 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -177,48 +177,26 @@ function rcmail_user_prefs($current=null) // timezone selection if (!isset($no_override['timezone'])) { $field_id = 'rcmfd_timezone'; - $select_timezone = new html_select(array('name' => '_timezone', 'id' => $field_id, - 'onchange' => "$('#rcmfd_dst').attr('disabled', this.selectedIndex==0)")); + $select_timezone = new html_select(array('name' => '_timezone', 'id' => $field_id)); $select_timezone->add(rcube_label('autodetect'), 'auto'); - $select_timezone->add('(GMT -11:00) Midway Island, Samoa', '-11'); - $select_timezone->add('(GMT -10:00) Hawaii', '-10'); - $select_timezone->add('(GMT -9:30) Marquesas Islands', '-9.5'); - $select_timezone->add('(GMT -9:00) Alaska', '-9'); - $select_timezone->add('(GMT -8:00) Pacific Time (US/Canada)', '-8'); - $select_timezone->add('(GMT -7:00) Mountain Time (US/Canada)', '-7'); - $select_timezone->add('(GMT -6:00) Central Time (US/Canada), Mexico City', '-6'); - $select_timezone->add('(GMT -5:00) Eastern Time (US/Canada), Bogota, Lima', '-5'); - $select_timezone->add('(GMT -4:30) Caracas', '-4.5'); - $select_timezone->add('(GMT -4:00) Atlantic Time (Canada), La Paz', '-4'); - $select_timezone->add('(GMT -3:30) Nfld Time (Canada), Nfld, S. Labador', '-3.5'); - $select_timezone->add('(GMT -3:00) Brazil, Buenos Aires, Georgetown', '-3'); - $select_timezone->add('(GMT -2:00) Mid-Atlantic', '-2'); - $select_timezone->add('(GMT -1:00) Azores, Cape Verde Islands', '-1'); - $select_timezone->add('(GMT) Western Europe, London, Lisbon, Casablanca', '0'); - $select_timezone->add('(GMT +1:00) Central European Time', '1'); - $select_timezone->add('(GMT +2:00) EET: Tallinn, Helsinki, Kaliningrad, South Africa', '2'); - $select_timezone->add('(GMT +3:00) Baghdad, Kuwait, Riyadh, Moscow, Nairobi', '3'); - $select_timezone->add('(GMT +3:30) Tehran', '3.5'); - $select_timezone->add('(GMT +4:00) Abu Dhabi, Muscat, Baku, Tbilisi', '4'); - $select_timezone->add('(GMT +4:30) Kabul', '4.5'); - $select_timezone->add('(GMT +5:00) Ekaterinburg, Islamabad, Karachi', '5'); - $select_timezone->add('(GMT +5:30) Chennai, Kolkata, Mumbai, New Delhi', '5.5'); - $select_timezone->add('(GMT +5:45) Kathmandu', '5.75'); - $select_timezone->add('(GMT +6:00) Almaty, Dhaka, Colombo', '6'); - $select_timezone->add('(GMT +6:30) Cocos Islands, Myanmar', '6.5'); - $select_timezone->add('(GMT +7:00) Bangkok, Hanoi, Jakarta', '7'); - $select_timezone->add('(GMT +8:00) Beijing, Perth, Singapore, Taipei', '8'); - $select_timezone->add('(GMT +8:45) Caiguna, Eucla, Border Village', '8.75'); - $select_timezone->add('(GMT +9:00) Tokyo, Seoul, Yakutsk', '9'); - $select_timezone->add('(GMT +9:30) Adelaide, Darwin', '9.5'); - $select_timezone->add('(GMT +10:00) EAST/AEST: Sydney, Guam, Vladivostok', '10'); - $select_timezone->add('(GMT +10:30) New South Wales', '10.5'); - $select_timezone->add('(GMT +11:00) Magadan, Solomon Islands', '11'); - $select_timezone->add('(GMT +11:30) Norfolk Island', '11.5'); - $select_timezone->add('(GMT +12:00) Auckland, Wellington, Kamchatka', '12'); - $select_timezone->add('(GMT +12:45) Chatham Islands', '12.75'); - $select_timezone->add('(GMT +13:00) Tonga, Pheonix Islands', '13'); - $select_timezone->add('(GMT +14:00) Kiribati', '14'); + + $now = new DateTime(); + foreach (DateTimeZone::listIdentifiers() as $i => $tzs) { + $tz = new DateTimeZone($tzs); + $date = new DateTime('2012-12-21', $tz); + $offset = $date->format('Z') + 45000; + $sortkey = sprintf('%06d.%s', $offset, $tzs); + $zones[$sortkey] = array($tzs, $date->format('P')); + } + + ksort($zones); + foreach ($zones as $zone) { + list($tzs, $offset) = $zone; + $select_timezone->add('(GMT ' . $offset . ') ' . strtr($tzs, '_', ' '), $tzs); + } + + if (is_numeric($config['timezone'])) + timezone_name_from_abbr("", $config['timezone'] * 3600, 0); $blocks['main']['options']['timezone'] = array( 'title' => html::label($field_id, Q(rcube_label('timezone'))), @@ -226,17 +204,6 @@ function rcmail_user_prefs($current=null) ); } - // daylight savings - if (!isset($no_override['dst_active'])) { - $field_id = 'rcmfd_dst'; - $input_dst = new html_checkbox(array('name' => '_dst_active', 'id' => $field_id, 'value' => 1, 'disabled' => ($config['timezone'] === 'auto'))); - - $blocks['main']['options']['dstactive'] = array( - 'title' => html::label($field_id, Q(rcube_label('dstactive'))), - 'content' => $input_dst->show($config['dst_active']), - ); - } - // date/time formatting if (!isset($no_override['time_format'])) { $reftime = mktime(7,30,0); diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc index 2e89ce1c0..36d401ed4 100644 --- a/program/steps/settings/save_prefs.inc +++ b/program/steps/settings/save_prefs.inc @@ -29,8 +29,7 @@ switch ($CURR_SECTION) case 'general': $a_user_prefs = array( 'language' => isset($_POST['_language']) ? get_input_value('_language', RCUBE_INPUT_POST) : $CONFIG['language'], - 'timezone' => isset($_POST['_timezone']) ? (is_numeric($_POST['_timezone']) ? floatval($_POST['_timezone']) : get_input_value('_timezone', RCUBE_INPUT_POST)) : $CONFIG['timezone'], - 'dst_active' => isset($_POST['_dst_active']) ? TRUE : FALSE, + 'timezone' => isset($_POST['_timezone']) ? get_input_value('_timezone', RCUBE_INPUT_POST) : $CONFIG['timezone'], 'date_format' => isset($_POST['_date_format']) ? get_input_value('_date_format', RCUBE_INPUT_POST) : $CONFIG['date_format'], 'time_format' => isset($_POST['_time_format']) ? get_input_value('_time_format', RCUBE_INPUT_POST) : ($CONFIG['time_format'] ? $CONFIG['time_format'] : 'H:i'), 'prettydate' => isset($_POST['_pretty_date']) ? TRUE : FALSE, |