* Calendar: added windows timezones to all installations (was added in calendar update 1.7.005, but not to new installs)

This commit is contained in:
Ralf Becker 2011-10-07 05:09:08 +00:00
commit f40634fe6a
4 changed files with 164 additions and 123 deletions

View File

@ -170,6 +170,8 @@ class calendar_timezones
{ {
$msg = self::import_sqlite($updated); $msg = self::import_sqlite($updated);
if ($updated) error_log($msg); // log that timezones have been updated if ($updated) error_log($msg); // log that timezones have been updated
$msg = self::import_tz_aliases($updated);
if ($updated) error_log($msg); // log that timezone aliases have been updated
} }
catch (Exception $e) catch (Exception $e)
{ {
@ -182,7 +184,7 @@ class calendar_timezones
/** /**
* Import timezones from sqlite file * Import timezones from sqlite file
* *
* @param boolean $updated=null on return true if update was neccessary, false if tz's were already up to date * @param boolean &$updated=null on return true if update was neccessary, false if tz's were already up to date
* @param string $file='calendar/setup/timezones.sqlite' filename relative to EGW_SERVER_ROOT * @param string $file='calendar/setup/timezones.sqlite' filename relative to EGW_SERVER_ROOT
* @param boolean $check_version=true true: check version and only act, if it's different * @param boolean $check_version=true true: check version and only act, if it's different
* @return string message about update * @return string message about update
@ -217,12 +219,12 @@ class calendar_timezones
throw new egw_exception_wrong_parameter(__METHOD__."('$file') only schema version 1 supported!"); throw new egw_exception_wrong_parameter(__METHOD__."('$file') only schema version 1 supported!");
} }
$tz_version = $pdo->query('SELECT version FROM tz_version')->fetchColumn(); $tz_version = $pdo->query('SELECT version FROM tz_version')->fetchColumn();
$tz_db_version = $GLOBALS['egw']->db->query("SELECT config_value FROM egw_config WHERE config_name='tz_version' AND config_app='phpgwapi'",__LINE__,__FILE__)->fetchColumn(); $config = config::read('phpgwapi');
//echo "<p>tz_version($path)=$tz_version, tz_db_version=$tz_db_version</p>\n"; //echo "<p>tz_version($path)=$tz_version, tz_db_version=$config[tz_version]</p>\n";
if ($tz_version === $tz_db_version) if ($tz_version === $config['tz_version'])
{ {
$updated = false; $updated = false;
return lang('Nothing to update, version is already %1.',$tz_db_version); // we already have the right return lang('Nothing to update, version is already %1.',$config['tz_version']); // we already have the right
} }
$tz2id = array(); $tz2id = array();
foreach($pdo->query('SELECT * FROM tz_data ORDER BY alias') as $data) foreach($pdo->query('SELECT * FROM tz_data ORDER BY alias') as $data)
@ -249,16 +251,59 @@ class calendar_timezones
// only query last insert id, if not already in database (gives warning for PostgreSQL) // only query last insert id, if not already in database (gives warning for PostgreSQL)
if (!$tz2id[$data['tzid']]) $tz2id[$data['tzid']] = $GLOBALS['egw']->db->get_last_insert_id('egw_cal_timezones','tz_id'); if (!$tz2id[$data['tzid']]) $tz2id[$data['tzid']] = $GLOBALS['egw']->db->get_last_insert_id('egw_cal_timezones','tz_id');
} }
$GLOBALS['egw']->db->insert('egw_config',array('config_value' => $tz_version),array( config::save_value('tz_version', $tz_version, 'phpgwapi');
'config_name' => 'tz_version',
'config_app' => 'phpgwapi',
),__LINE__,__FILE__,'phpgwapi');
//_debug_array($tz2id); //_debug_array($tz2id);
$updated = true; $updated = true;
return lang('Timezones updated to version %1 (%2 records updated).',$tz_version,count($tz2id)); return lang('Timezones updated to version %1 (%2 records updated).',$tz_version,count($tz2id));
} }
/**
* Import timezone aliases
*
* @param boolean &$updated=null on return true if update was neccessary, false if tz's were already up to date
* @param string $file='calendar/setup/tz_aliases.inc.php' filename relative to EGW_SERVER_ROOT
* @param boolean $check_mtime=true true: check version and only act, if it's different
* @return string message about update
* @throws egw_exception_wrong_parameter if $file is not readable or wrong format/version
*/
public static function import_tz_aliases(&$updated=null,$file='calendar/setup/tz_aliases.inc.php',$check_mtime=true)
{
$path = EGW_SERVER_ROOT.'/'.$file;
if (!file_exists($path) || !is_readable($path))
{
throw new egw_exception_wrong_parameter(__METHOD__."('$file') not found or readable!");
}
$config = config::read('phpgwapi');
$tz_aliases_mtime = date('Y-m-d H:i:s', filemtime($path));
if ($tz_aliases_mtime === $config['tz_aliases_mtime'])
{
$updated = false;
return lang('Nothing to update, version is already %1.',$tz_aliases_mtime);
}
include($path); // sets $tz_aliases
$updated = 0;
foreach($tz_aliases as $alias => $tzid)
{
if (self::tz2id($tzid, 'alias') !== $alias) // not in DB or different
{
$GLOBALS['egw']->db->insert('egw_cal_timezones',array(
'tz_alias' => $alias,
),array(
'tz_tzid' => $tzid,
),__LINE__,__FILE__,'calendar');
++$updated;
}
}
config::save_value('tz_aliases_mtime',$tz_aliases_mtime,$app='phpgwapi');
//_debug_array($tz2id);
$updated = true;
return lang('Timezones aliases updated to version %1 (%2 records updated).', $tz_aliases_mtime, $updated);
}
/** /**
* Admin >> Update timezones * Admin >> Update timezones
* *
@ -269,7 +314,10 @@ class calendar_timezones
{ {
throw new egw_exception_no_permission_admin(); throw new egw_exception_no_permission_admin();
} }
$GLOBALS['egw']->framework->render('<h3>'.self::import_sqlite()."</h3>\n",lang('Update timezones'),true); $GLOBALS['egw']->framework->render(
'<h3>'.self::import_sqlite()."</h3>\n".
'<h3>'.self::import_tz_aliases()."</h3>\n",
lang('Update timezones'),true);
} }
} }
/* /*

View File

@ -27,6 +27,7 @@ foreach(array(
try try
{ {
calendar_timezones::import_sqlite(); calendar_timezones::import_sqlite();
calendar_timezones::import_tz_aliases();
} }
// catch broken sqlite extension exception and output message, as user can't do anything about it // catch broken sqlite extension exception and output message, as user can't do anything about it
// all other exceptions are fatal, to get user to fix them! // all other exceptions are fatal, to get user to fix them!

View File

@ -1882,119 +1882,8 @@ function calendar_upgrade1_7_004()
*/ */
function calendar_upgrade1_7_005() function calendar_upgrade1_7_005()
{ {
foreach(array( calendar_timezones::import_tz_aliases();
'AUS Central Standard Time' => 'Australia/Darwin',
'AUS Eastern Standard Time' => 'Australia/Sydney',
'Afghanistan Standard Time' => 'Asia/Kabul',
'Alaskan Standard Time' => 'America/Anchorage',
'Arab Standard Time' => 'Asia/Riyadh',
'Arabian Standard Time' => 'Asia/Dubai',
'Arabic Standard Time' => 'Asia/Baghdad',
'Argentina Standard Time' => 'America/Argentina/Buenos_Aires', // was 'America/Buenos_Aires',
'Armenian Standard Time' => 'Asia/Yerevan',
'Atlantic Standard Time' => 'America/Halifax',
'Azerbaijan Standard Time' => 'Asia/Baku',
'Azores Standard Time' => 'Atlantic/Azores',
'Canada Central Standard Time' => 'America/Regina',
'Cape Verde Standard Time' => 'Atlantic/Cape_Verde',
'Caucasus Standard Time' => 'Asia/Yerevan',
'Cen. Australia Standard Time' => 'Australia/Adelaide',
'Central America Standard Time' => 'America/Guatemala',
'Central Asia Standard Time' => 'Asia/Dhaka',
'Central Brazilian Standard Time' => 'America/Manaus',
'Central Europe Standard Time' => 'Europe/Budapest',
'Central European Standard Time' => 'Europe/Warsaw',
'Central Pacific Standard Time' => 'Pacific/Guadalcanal',
'Central Standard Time' => 'America/Chicago',
'Central Standard Time (Mexico)' => 'America/Mexico_City',
'China Standard Time' => 'Asia/Shanghai',
'Dateline Standard Time' => 'Etc/GMT+12',
'E. Africa Standard Time' => 'Africa/Nairobi',
'E. Australia Standard Time' => 'Australia/Brisbane',
'E. Europe Standard Time' => 'Europe/Minsk',
'E. South America Standard Time' => 'America/Sao_Paulo',
'Eastern Standard Time' => 'America/New_York',
'Egypt Standard Time' => 'Africa/Cairo',
'Ekaterinburg Standard Time' => 'Asia/Yekaterinburg',
'FLE Standard Time' => 'Europe/Kiev',
'Fiji Standard Time' => 'Pacific/Fiji',
'GMT Standard Time' => 'Europe/London',
'GTB Standard Time' => 'Europe/Istanbul',
'Georgian Standard Time' => 'Etc/GMT-3',
'Greenland Standard Time' => 'America/Godthab',
'Greenwich Standard Time' => 'Atlantic/Reykjavik', // was 'Africa/Reykjavik',
'Hawaiian Standard Time' => 'Pacific/Honolulu',
'India Standard Time' => 'Asia/Calcutta',
'Iran Standard Time' => 'Asia/Tehran',
'Israel Standard Time' => 'Asia/Jerusalem',
'Jordan Standard Time' => 'Asia/Amman',
'Korea Standard Time' => 'Asia/Seoul',
'Mauritius Standard Time' => 'Indian/Mauritius',
'Mexico Standard Time' => 'America/Mexico_City',
'Mexico Standard Time 2' => 'America/Chihuahua',
'Mid-Atlantic Standard Time' => 'Atlantic/South_Georgia',
'Middle East Standard Time' => 'Asia/Beirut',
'Montevideo Standard Time' => 'America/Montevideo',
'Morocco Standard Time' => 'Africa/Casablanca',
'Mountain Standard Time' => 'America/Denver',
'Mountain Standard Time (Mexico)' => 'America/Chihuahua',
'Myanmar Standard Time' => 'Asia/Rangoon',
'N. Central Asia Standard Time' => 'Asia/Novosibirsk',
'Namibia Standard Time' => 'Africa/Windhoek',
'Nepal Standard Time' => 'Asia/Katmandu',
'New Zealand Standard Time' => 'Pacific/Auckland',
'Newfoundland Standard Time' => 'America/St_Johns',
'North Asia East Standard Time' => 'Asia/Irkutsk',
'North Asia Standard Time' => 'Asia/Krasnoyarsk',
'Pacific SA Standard Time' => 'America/Santiago',
'Pacific Standard Time' => 'America/Los_Angeles',
'Pacific Standard Time (Mexico)' => 'America/Tijuana',
'Pakistan Standard Time' => 'Asia/Karachi',
'Romance Standard Time' => 'Europe/Paris',
'Russian Standard Time' => 'Europe/Moscow',
'SA Eastern Standard Time' => 'Etc/GMT+3',
'SA Pacific Standard Time' => 'America/Bogota',
'SA Western Standard Time' => 'America/La_Paz',
'SE Asia Standard Time' => 'Asia/Bangkok',
'Samoa Standard Time' => 'Pacific/Apia',
'Singapore Standard Time' => 'Asia/Singapore',
'South Africa Standard Time' => 'Africa/Johannesburg',
'Sri Lanka Standard Time' => 'Asia/Colombo',
'Taipei Standard Time' => 'Asia/Taipei',
'Tasmania Standard Time' => 'Australia/Hobart',
'Tokyo Standard Time' => 'Asia/Tokyo',
'Tonga Standard Time' => 'Pacific/Tongatapu',
'US Eastern Standard Time' => 'Etc/GMT+5',
'US Mountain Standard Time' => 'America/Phoenix',
'Venezuela Standard Time' => 'America/Caracas',
'Vladivostok Standard Time' => 'Asia/Vladivostok',
'W. Australia Standard Time' => 'Australia/Perth',
'W. Central Africa Standard Time' => 'Africa/Lagos',
'W. Europe Standard Time' => 'Europe/Berlin',
'West Asia Standard Time' => 'Asia/Tashkent',
'West Pacific Standard Time' => 'Pacific/Port_Moresby',
'Yakutsk Standard Time' => 'Asia/Yakutsk',
) as $win_tz => $tzid)
{
if (!(calendar_timezones::tz2id($win_tz))) // not already defined
{
if (!($id = calendar_timezones::tz2id($tzid)))
{
error_log(__METHOD__."() Windows timezone: '$win_tz': TZID='$tzid' is NOT defined!");
}
else
{
$GLOBALS['egw']->db->insert('egw_cal_timezones',array(
'tz_alias' => $id,
'tz_latitude' => null,
'tz_longitude' => null,
'tz_component' => null,
),array(
'tz_tzid' => $win_tz,
),__LINE__,__FILE__,'calendar');
}
}
}
return $GLOBALS['setup_info']['calendar']['currentver'] = '1.7.006'; return $GLOBALS['setup_info']['calendar']['currentver'] = '1.7.006';
} }

View File

@ -0,0 +1,103 @@
<?php
/**
* EGroupware - Windows timezone aliases
*
* @link http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/windows_tzid.html
* @link http://www.egroupware.org
* @package calendar
* @version $Id$
*/
$tz_aliases = array(
'AUS Central Standard Time' => 'Australia/Darwin',
'AUS Eastern Standard Time' => 'Australia/Sydney',
'Afghanistan Standard Time' => 'Asia/Kabul',
'Alaskan Standard Time' => 'America/Anchorage',
'Arab Standard Time' => 'Asia/Riyadh',
'Arabian Standard Time' => 'Asia/Dubai',
'Arabic Standard Time' => 'Asia/Baghdad',
'Argentina Standard Time' => 'America/Argentina/Buenos_Aires', // was 'America/Buenos_Aires',
'Armenian Standard Time' => 'Asia/Yerevan',
'Atlantic Standard Time' => 'America/Halifax',
'Azerbaijan Standard Time' => 'Asia/Baku',
'Azores Standard Time' => 'Atlantic/Azores',
'Canada Central Standard Time' => 'America/Regina',
'Cape Verde Standard Time' => 'Atlantic/Cape_Verde',
'Caucasus Standard Time' => 'Asia/Yerevan',
'Cen. Australia Standard Time' => 'Australia/Adelaide',
'Central America Standard Time' => 'America/Guatemala',
'Central Asia Standard Time' => 'Asia/Dhaka',
'Central Brazilian Standard Time' => 'America/Manaus',
'Central Europe Standard Time' => 'Europe/Budapest',
'Central European Standard Time' => 'Europe/Warsaw',
'Central Pacific Standard Time' => 'Pacific/Guadalcanal',
'Central Standard Time' => 'America/Chicago',
'Central Standard Time (Mexico)' => 'America/Mexico_City',
'China Standard Time' => 'Asia/Shanghai',
'Dateline Standard Time' => 'Etc/GMT+12',
'E. Africa Standard Time' => 'Africa/Nairobi',
'E. Australia Standard Time' => 'Australia/Brisbane',
'E. Europe Standard Time' => 'Europe/Minsk',
'E. South America Standard Time' => 'America/Sao_Paulo',
'Eastern Standard Time' => 'America/New_York',
'Egypt Standard Time' => 'Africa/Cairo',
'Ekaterinburg Standard Time' => 'Asia/Yekaterinburg',
'FLE Standard Time' => 'Europe/Kiev',
'Fiji Standard Time' => 'Pacific/Fiji',
'GMT Standard Time' => 'Europe/London',
'GTB Standard Time' => 'Europe/Istanbul',
'Georgian Standard Time' => 'Etc/GMT-3',
'Greenland Standard Time' => 'America/Godthab',
'Greenwich Standard Time' => 'Atlantic/Reykjavik', // was 'Africa/Reykjavik',
'Hawaiian Standard Time' => 'Pacific/Honolulu',
'India Standard Time' => 'Asia/Calcutta',
'Iran Standard Time' => 'Asia/Tehran',
'Israel Standard Time' => 'Asia/Jerusalem',
'Jordan Standard Time' => 'Asia/Amman',
'Korea Standard Time' => 'Asia/Seoul',
'Mauritius Standard Time' => 'Indian/Mauritius',
'Mexico Standard Time' => 'America/Mexico_City',
'Mexico Standard Time 2' => 'America/Chihuahua',
'Mid-Atlantic Standard Time' => 'Atlantic/South_Georgia',
'Middle East Standard Time' => 'Asia/Beirut',
'Montevideo Standard Time' => 'America/Montevideo',
'Morocco Standard Time' => 'Africa/Casablanca',
'Mountain Standard Time' => 'America/Denver',
'Mountain Standard Time (Mexico)' => 'America/Chihuahua',
'Myanmar Standard Time' => 'Asia/Rangoon',
'N. Central Asia Standard Time' => 'Asia/Novosibirsk',
'Namibia Standard Time' => 'Africa/Windhoek',
'Nepal Standard Time' => 'Asia/Katmandu',
'New Zealand Standard Time' => 'Pacific/Auckland',
'Newfoundland Standard Time' => 'America/St_Johns',
'North Asia East Standard Time' => 'Asia/Irkutsk',
'North Asia Standard Time' => 'Asia/Krasnoyarsk',
'Pacific SA Standard Time' => 'America/Santiago',
'Pacific Standard Time' => 'America/Los_Angeles',
'Pacific Standard Time (Mexico)' => 'America/Tijuana',
'Pakistan Standard Time' => 'Asia/Karachi',
'Romance Standard Time' => 'Europe/Paris',
'Russian Standard Time' => 'Europe/Moscow',
'SA Eastern Standard Time' => 'Etc/GMT+3',
'SA Pacific Standard Time' => 'America/Bogota',
'SA Western Standard Time' => 'America/La_Paz',
'SE Asia Standard Time' => 'Asia/Bangkok',
'Samoa Standard Time' => 'Pacific/Apia',
'Singapore Standard Time' => 'Asia/Singapore',
'South Africa Standard Time' => 'Africa/Johannesburg',
'Sri Lanka Standard Time' => 'Asia/Colombo',
'Taipei Standard Time' => 'Asia/Taipei',
'Tasmania Standard Time' => 'Australia/Hobart',
'Tokyo Standard Time' => 'Asia/Tokyo',
'Tonga Standard Time' => 'Pacific/Tongatapu',
'US Eastern Standard Time' => 'Etc/GMT+5',
'US Mountain Standard Time' => 'America/Phoenix',
'Venezuela Standard Time' => 'America/Caracas',
'Vladivostok Standard Time' => 'Asia/Vladivostok',
'W. Australia Standard Time' => 'Australia/Perth',
'W. Central Africa Standard Time' => 'Africa/Lagos',
'W. Europe Standard Time' => 'Europe/Berlin',
'West Asia Standard Time' => 'Asia/Tashkent',
'West Pacific Standard Time' => 'Pacific/Port_Moresby',
'Yakutsk Standard Time' => 'Asia/Yakutsk',
);