Parent Directory
|
Revision Log
|
Revision Graph
#440670, fix issues with timezones which affected ical
| 1 | <?php |
| 2 | // $Id: event.install,v 1.36 2008/12/30 21:44:03 killes Exp $ |
| 3 | |
| 4 | /** |
| 5 | * We need mysql >= 4.1.1 |
| 6 | */ |
| 7 | function event_requirements($phase) { |
| 8 | // Ensure translations don't break at install time |
| 9 | $t = get_t(); |
| 10 | global $db_type; |
| 11 | $requirements = array(); |
| 12 | if ($db_type == 'mysql' || $db_type == 'mysqli') { |
| 13 | $version = db_version(); |
| 14 | |
| 15 | $requirements['mysql_event'] = array( |
| 16 | 'title' => $t('MySQL database for event module'), |
| 17 | 'value' => ($phase == 'runtime') ? l($version, 'admin/reports/status/sql') : $version, |
| 18 | ); |
| 19 | |
| 20 | if (version_compare($version, '4.1.1') < 0) { |
| 21 | $requirements['mysql_event']['severity'] = REQUIREMENT_ERROR; |
| 22 | $requirements['mysql_event']['description'] = $t('Your MySQL Server is too old. Event module 6.2 requires at least MySQL %version.', array('%version' => '4.1.1')); |
| 23 | } |
| 24 | } |
| 25 | |
| 26 | return $requirements; |
| 27 | } |
| 28 | |
| 29 | /** |
| 30 | * Implementation of hook_schema(). |
| 31 | */ |
| 32 | function event_schema() { |
| 33 | $schema['event'] = array( |
| 34 | 'fields' => array( |
| 35 | 'nid' => array( |
| 36 | 'type' => 'int', |
| 37 | 'unsigned' => TRUE, |
| 38 | 'not null' => TRUE, |
| 39 | 'default' => 0), |
| 40 | 'event_start' => array( |
| 41 | 'type' => 'datetime', |
| 42 | 'not null' => TRUE), |
| 43 | 'event_end' => array( |
| 44 | 'type' => 'datetime', |
| 45 | 'not null' => TRUE), |
| 46 | 'timezone' => array( |
| 47 | 'type' => 'int', |
| 48 | 'not null' => TRUE, |
| 49 | 'default' => 0), |
| 50 | 'start_in_dst' => array( |
| 51 | 'type' => 'int', |
| 52 | 'not null' => TRUE, |
| 53 | 'default' => 0), |
| 54 | 'end_in_dst' => array( |
| 55 | 'type' => 'int', |
| 56 | 'not null' => TRUE, |
| 57 | 'default' => 0), |
| 58 | 'has_time' => array( |
| 59 | 'type' => 'int', |
| 60 | 'not null' => TRUE, |
| 61 | 'default' => 1), |
| 62 | 'has_end_date' => array( |
| 63 | 'type' => 'int', |
| 64 | 'not null' => TRUE, |
| 65 | 'default' => 1) |
| 66 | ), |
| 67 | 'indexes' => array( |
| 68 | 'event_start' => array('event_start'), |
| 69 | 'event_end' => array('event_end'), |
| 70 | 'timezone' => array('timezone') |
| 71 | ), |
| 72 | 'primary key' => array('nid'), |
| 73 | ); |
| 74 | |
| 75 | return $schema; |
| 76 | } |
| 77 | |
| 78 | /** |
| 79 | * Implementation of hook_install(). |
| 80 | */ |
| 81 | function event_install() { |
| 82 | drupal_install_schema('event'); |
| 83 | $ret = array(); |
| 84 | db_add_field($ret, 'users', 'timezone_id', array('type' => 'int', 'not null' => TRUE, 'default' => 0)); |
| 85 | |
| 86 | // Schema API doesn't have a TIME field reverting to old method. |
| 87 | switch ($GLOBALS['db_type']) { |
| 88 | case 'mysql': |
| 89 | case 'mysqli': |
| 90 | db_query("CREATE TABLE {event_timezones} ( |
| 91 | timezone int NOT NULL default '0', |
| 92 | name varchar(255) NOT NULL default '', |
| 93 | offset TIME NOT NULL default '0', |
| 94 | offset_dst TIME NOT NULL default '0', |
| 95 | dst_region int NOT NULL default '0', |
| 96 | is_dst int NOT NULL default '0', |
| 97 | PRIMARY KEY (timezone) |
| 98 | ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); |
| 99 | break; |
| 100 | case 'pgsql': |
| 101 | db_query("CREATE TABLE {event_timezones} ( |
| 102 | timezone integer NOT NULL default '0', |
| 103 | name varchar(255) NOT NULL default '', |
| 104 | \"offset\" interval NOT NULL default '0 seconds', |
| 105 | offset_dst interval NOT NULL default '0 seconds', |
| 106 | dst_region integer NOT NULL default '0', |
| 107 | is_dst integer NOT NULL default '0', |
| 108 | PRIMARY KEY (timezone) |
| 109 | ) "); |
| 110 | break; |
| 111 | } |
| 112 | $zones = event_install_timezones(); |
| 113 | foreach ($zones as $zone => $value) { |
| 114 | switch ($GLOBALS['db_type']) { |
| 115 | case 'mysql': |
| 116 | case 'mysqli': |
| 117 | db_query("INSERT INTO {event_timezones} (timezone, name, offset, offset_dst, dst_region) VALUES (%d, '%s', '%s', '%s', %d)", $zone, $value['timezone'], $value['offset'], $value['offset_dst'], $value['dst_region']); |
| 118 | break; |
| 119 | case 'pgsql': |
| 120 | db_query("INSERT INTO {event_timezones} (timezone, name, \"offset\", offset_dst, dst_region) VALUES (%d, '%s', '%s', '%s', %d)", $zone, $value['timezone'], $value['offset'], $value['offset_dst'], $value['dst_region']); |
| 121 | break; |
| 122 | } |
| 123 | } |
| 124 | variable_del('event_range_prev'); |
| 125 | variable_del('event_range_next'); |
| 126 | |
| 127 | // Create default event type |
| 128 | $type = array( |
| 129 | 'type' => 'event', |
| 130 | 'name' => t('Event'), |
| 131 | 'module' => 'node', |
| 132 | 'description' => t('Events have a start date and an optional end date as well as a teaser and a body. They can be extended by other modules, too.'), |
| 133 | 'custom' => TRUE, |
| 134 | 'modified' => TRUE, |
| 135 | 'locked' => FALSE, |
| 136 | ); |
| 137 | $type = (object) _node_type_set_defaults($type); |
| 138 | node_type_save($type); |
| 139 | variable_set('event_nodeapi_event', 'all'); |
| 140 | |
| 141 | // Notify of changes |
| 142 | drupal_set_message(t('Event module was successfully installed with default options. To customize event and/or location settings for events, please view the <a href="!settings">event content type settings page</a>. Make sure to <a href="!url">select the default timezone</a> for your website before creating events.', array('!settings' => url('admin/content/node-type/event'), '!url' => url('admin/settings/date-time')))); |
| 143 | drupal_set_message('A content type "event" was created.'); |
| 144 | } |
| 145 | |
| 146 | /** |
| 147 | * Implementation of hook_uninstall(). |
| 148 | */ |
| 149 | function event_uninstall() { |
| 150 | $ret = array(); |
| 151 | drupal_uninstall_schema('event'); |
| 152 | db_drop_field($ret, 'users', 'timezone_id'); |
| 153 | db_query('DROP TABLE {event_timezones}'); |
| 154 | variable_del('event_timezone_input'); |
| 155 | variable_del('event_timezone_display'); |
| 156 | variable_del('event_ampm'); |
| 157 | variable_del('event_upcoming_limit'); |
| 158 | variable_del('event_overview'); |
| 159 | variable_del('event_table_duration'); |
| 160 | variable_del('event_taxonomy_control'); |
| 161 | variable_del('event_type_control'); |
| 162 | variable_del('event_range_prev'); |
| 163 | variable_del('event_range_next'); |
| 164 | foreach (node_get_types() as $type => $info) { |
| 165 | variable_del('event_nodeapi_'. $type); |
| 166 | } |
| 167 | |
| 168 | drupal_set_message(t('Event module successfully uninstalled')); |
| 169 | } |
| 170 | |
| 171 | |
| 172 | /** |
| 173 | * Update 4.7 or 5.1 to 5.2 |
| 174 | */ |
| 175 | function event_update_3() { |
| 176 | $ret = array(); |
| 177 | variable_del('event_range_prev'); |
| 178 | variable_del('event_range_next'); |
| 179 | |
| 180 | switch ($GLOBALS['db_type']) { |
| 181 | case 'mysql': |
| 182 | case 'mysqli': |
| 183 | $ret[] = update_sql("RENAME TABLE {event} TO {event_backup}"); |
| 184 | $ret[] = update_sql("CREATE TABLE {event_timezones} ( |
| 185 | timezone int NOT NULL default '0', |
| 186 | name varchar(255) NOT NULL default '', |
| 187 | offset TIME NOT NULL default '0', |
| 188 | offset_dst TIME NOT NULL default '0', |
| 189 | dst_region int NOT NULL default '0', |
| 190 | PRIMARY KEY (timezone) |
| 191 | ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); |
| 192 | $zones = event_install_timezones(); |
| 193 | foreach ($zones as $zone => $value) { |
| 194 | db_query("INSERT INTO {event_timezones} (timezone, name, offset, offset_dst, dst_region) VALUES (%d, '%s', '%s', '%s', %d)", $zone, $value['timezone'], $value['offset'], $value['offset_dst'], $value['dst_region']); |
| 195 | } |
| 196 | |
| 197 | $ret[] = update_sql("CREATE TABLE {event} ( |
| 198 | nid int(10) unsigned NOT NULL default '0', |
| 199 | event_start datetime NOT NULL, |
| 200 | event_end datetime NOT NULL, |
| 201 | timezone int NOT NULL default '0', |
| 202 | start_in_dst int NOT NULL default '0', |
| 203 | end_in_dst int NOT NULL default '0' |
| 204 | ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); |
| 205 | |
| 206 | $ret[] = update_sql("SET time_zone = '+00:00'"); |
| 207 | $sql = "INSERT INTO {event} (nid, event_start, event_end, timezone, start_in_dst, end_in_dst) SELECT e.nid, IF(%cond_start, FROM_UNIXTIME(e.event_start) + INTERVAL ez.offset_dst HOUR_SECOND, FROM_UNIXTIME(e.event_start) + INTERVAL ez.offset HOUR_SECOND) AS event_start, IF(%cond_end, FROM_UNIXTIME(e.event_end) + INTERVAL ez.offset_dst HOUR_SECOND, FROM_UNIXTIME(e.event_end) + INTERVAL ez.offset HOUR_SECOND) AS event_end, e.timezone, IF(%cond_start, 1, 0), IF(%cond_end, 1, 0) FROM {event_backup} e INNER JOIN {event_timezones} ez ON e.timezone = ez.timezone WHERE ez.dst_region = %d"; |
| 208 | // Loop over the 21 supported DST regions. |
| 209 | for ($i = 0; $i <= 20; $i++) { |
| 210 | if ($i == 0) { |
| 211 | $ret[] = update_sql("INSERT INTO {event} (nid, event_start, event_end, timezone, start_in_dst, end_in_dst) SELECT e.nid, FROM_UNIXTIME(e.event_start) + INTERVAL ez.offset HOUR_SECOND AS event_start, FROM_UNIXTIME(e.event_end) + INTERVAL ez.offset HOUR_SECOND AS event_end, e.timezone, 0, 0 FROM {event_backup} e INNER JOIN {event_timezones} ez ON e.timezone = ez.timezone WHERE ez.dst_region = 0"); |
| 212 | } |
| 213 | else { |
| 214 | $start = str_replace('%date', 'e.event_start', _event_install_get_dst_dates($i)); |
| 215 | $end = str_replace('%date', 'e.event_end', _event_install_get_dst_dates($i)); |
| 216 | $ret[] = update_sql(str_replace(array('%cond_start', '%cond_end', '%d'), array($start, $end, $i), $sql)); |
| 217 | } |
| 218 | } |
| 219 | |
| 220 | $ret[] = update_sql('ALTER TABLE {event} ADD PRIMARY KEY nid (nid)'); |
| 221 | $ret[] = update_sql('ALTER TABLE {event} ADD KEY timezone (timezone)'); |
| 222 | $ret[] = update_sql("ALTER TABLE {users} ADD timezone_id int NOT NULL default '0'"); |
| 223 | break; |
| 224 | case 'pgsql': |
| 225 | $ret[] = update_sql("ALTER TABLE {event} RENAME TO {event_backup}"); |
| 226 | |
| 227 | $ret[] = update_sql("CREATE TABLE {event_timezones} ( |
| 228 | timezone integer NOT NULL default '0', |
| 229 | name varchar(255) NOT NULL default '', |
| 230 | \"offset\" interval NOT NULL default '0 seconds', |
| 231 | offset_dst interval NOT NULL default '0 seconds', |
| 232 | dst_region integer NOT NULL default '0', |
| 233 | PRIMARY KEY (timezone) |
| 234 | ) "); |
| 235 | $zones = event_install_timezones(); |
| 236 | foreach ($zones as $zone => $value) { |
| 237 | db_query("INSERT INTO {event_timezones} (timezone, name, \"offset\", offset_dst, dst_region) VALUES (%d, '%s', '%s', '%s', %d)", $zone, $value['timezone'], $value['offset'], $value['offset_dst'], $value['dst_region']); |
| 238 | } |
| 239 | |
| 240 | db_query("CREATE TABLE {event} ( |
| 241 | nid integer NOT NULL default '0', |
| 242 | event_start timestamp NOT NULL, |
| 243 | event_end timestamp NOT NULL, |
| 244 | timezone integer NOT NULL default '0', |
| 245 | start_in_dst integer NOT NULL default '0', |
| 246 | end_in_dst integer NOT NULL default '0' |
| 247 | ) "); |
| 248 | |
| 249 | // needs work? |
| 250 | $sql = "INSERT INTO {event} (nid, event_start, event_end, timezone, start_in_dst, end_in_dst) SELECT e.nid, IF(%cond_start, TIMESTAMP 'epoch' + event_start * INTERVAL '1 second' + ez.offset_dst, TIMESTAMP 'epoch' + event_start * INTERVAL '1 second' + ez.offset) AS event_start, IF(%cond_end, TIMESTAMP 'epoch' + event_end * INTERVAL '1 second' + ez.offset_dst, TIMESTAMP 'epoch' + event_end * INTERVAL '1 second' + ez.offset) AS event_end, e.timezone, IF(%cond_start, 1, 0), IF(%cond_end, 1, 0) FROM {event_backup} e INNER JOIN {event_timezones} ez ON e.timezone = ez.timezone WHERE ez.dst_region = %d"; |
| 251 | |
| 252 | // Loop over the 21 supported DST regions. |
| 253 | for ($i = 0; $i <= 20; $i++) { |
| 254 | if ($i == 0) { |
| 255 | // needs work? |
| 256 | $ret[] = update_sql("INSERT INTO {event} (nid, event_start, event_end, timezone, start_in_dst, end_in_dst) SELECT e.nid, TIMESTAMP 'epoch' + event_start * INTERVAL '1 second' + ez.offset AS event_start, TIMESTAMP 'epoch' + event_end * INTERVAL '1 second' + ez.offset AS event_end, e.timezone, 0, 0 FROM {event_backup} e INNER JOIN {event_timezones} ez ON e.timezone = ez.timezone WHERE ez.dst_region = 0"); |
| 257 | } |
| 258 | else { |
| 259 | $start = str_replace('%date', 'e.event_start', _event_install_get_dst_dates($i)); |
| 260 | $end = str_replace('%date', 'e.event_end', _event_install_get_dst_dates($i)); |
| 261 | $ret[] = update_sql(str_replace(array('%cond_start', '%cond_end', '%d'), array($start, $end, $i), $sql)); |
| 262 | } |
| 263 | } |
| 264 | |
| 265 | $ret[] = update_sql('ALTER TABLE {event} ADD PRIMARY KEY (nid)'); |
| 266 | $ret[] = update_sql('CREATE INDEX {event}_timezone_idx ON {event} (timezone)'); |
| 267 | $ret[] = update_sql("ALTER TABLE {users} ADD timezone_id integer NOT NULL default '0'"); |
| 268 | break; |
| 269 | } |
| 270 | return $ret; |
| 271 | } |
| 272 | |
| 273 | /** |
| 274 | * Replace basicevent module if installed |
| 275 | */ |
| 276 | function event_update_4() { |
| 277 | $is_existing = db_result(db_query("SELECT * FROM {node_type} WHERE type = '%s'", 'event')); |
| 278 | if ($is_existing != 1) { |
| 279 | // Create default event type |
| 280 | $type = array( |
| 281 | 'type' => 'event', |
| 282 | 'name' => t('Event'), |
| 283 | 'module' => 'node', |
| 284 | 'description' => t('Events have a start date and an optional end date as well as a teaser and a body. They can be extended by other modules, too.'), |
| 285 | 'custom' => TRUE, |
| 286 | 'modified' => TRUE, |
| 287 | 'locked' => FALSE, |
| 288 | ); |
| 289 | $type = (object) _node_type_set_defaults($type); |
| 290 | node_type_save($type); |
| 291 | variable_set('event_nodeapi_event', 'all'); |
| 292 | drupal_set_message('A content type "event" was created.'); |
| 293 | } |
| 294 | $basicevent = db_result(db_query("SELECT * FROM {system} WHERE name = '%s' AND status = 1", 'basicevent')); |
| 295 | if ($basicevent) { |
| 296 | db_query("UPDATE {system} SET status = 0 WHERE name = '%s'", 'basicevent'); |
| 297 | drupal_set_message(t('The basicevent module is no longer supported, it was disabled during the upgrade process.')); |
| 298 | } |
| 299 | |
| 300 | $basicevent = db_result(db_query("SELECT * FROM {node_type} WHERE module = '%s'", 'basicevent')); |
| 301 | if ($basicevent) { |
| 302 | db_query("UPDATE {node_type} SET module = 'node' WHERE module = '%s'", 'basicevent'); |
| 303 | } |
| 304 | |
| 305 | return array(); |
| 306 | } |
| 307 | |
| 308 | /** |
| 309 | * Set DST |
| 310 | */ |
| 311 | function event_update_5() { |
| 312 | $ret = array(); |
| 313 | switch ($GLOBALS['db_type']) { |
| 314 | case 'pgsql': |
| 315 | db_add_column($ret, 'event_timezones', 'is_dst', 'integer', array('default' => 0, 'not null' => TRUE)); |
| 316 | break; |
| 317 | case 'mysql': |
| 318 | case 'mysqli': |
| 319 | $ret[] = update_sql("ALTER TABLE {event_timezones} ADD is_dst int NOT NULL default 0"); |
| 320 | break; |
| 321 | } |
| 322 | // There's a bug in core that will runn this update funcvtion even |
| 323 | // if the module is not enabled. |
| 324 | if (!function_exists('_event_user_time')) { |
| 325 | include_once(drupal_get_path('module', 'event') .'/event.module'); |
| 326 | } |
| 327 | $time = _event_user_time(); |
| 328 | // Loop over the 21 supported DST regions. |
| 329 | for ($i = 0; $i <= 20; $i++) { |
| 330 | $is_dst = event_is_dst($i, $time); |
| 331 | $ret[] = update_sql("UPDATE {event_timezones} SET is_dst = $is_dst WHERE dst_region = $i"); |
| 332 | } |
| 333 | return $ret; |
| 334 | } |
| 335 | |
| 336 | /** |
| 337 | * Add keys |
| 338 | */ |
| 339 | function event_update_6() { |
| 340 | $ret = array(); |
| 341 | switch ($GLOBALS['db_type']) { |
| 342 | case 'pgsql': |
| 343 | $ret[] = update_sql('CREATE INDEX {event}_event_start_idx ON {event} (event_start)'); |
| 344 | $ret[] = update_sql('CREATE INDEX {event}_event_end_idx ON {event} (event_end)'); |
| 345 | break; |
| 346 | case 'mysql': |
| 347 | case 'mysqli': |
| 348 | $ret[] = update_sql("ALTER TABLE {event} ADD KEY event_start (event_start)"); |
| 349 | $ret[] = update_sql("ALTER TABLE {event} ADD KEY event_end (event_end)"); |
| 350 | break; |
| 351 | } |
| 352 | return $ret; |
| 353 | } |
| 354 | |
| 355 | /** |
| 356 | * Add all_day/end_date columns |
| 357 | */ |
| 358 | function event_update_7() { |
| 359 | $ret = array(); |
| 360 | switch ($GLOBALS['db_type']) { |
| 361 | case 'pgsql': |
| 362 | db_add_column($ret, 'event', 'has_time', 'integer', array('default' => 1, 'not null' => TRUE)); |
| 363 | db_add_column($ret, 'event', 'has_end_date', 'integer', array('default' => 1, 'not null' => TRUE)); |
| 364 | break; |
| 365 | case 'mysql': |
| 366 | case 'mysqli': |
| 367 | $ret[] = update_sql("ALTER TABLE {event} ADD has_time int NOT NULL default 1"); |
| 368 | $ret[] = update_sql("ALTER TABLE {event} ADD has_end_date int NOT NULL default 1"); |
| 369 | break; |
| 370 | } |
| 371 | return $ret; |
| 372 | } |
| 373 | |
| 374 | /** |
| 375 | * Update all_day/end_date columns |
| 376 | */ |
| 377 | function event_update_8() { |
| 378 | $ret = array(); |
| 379 | switch ($GLOBALS['db_type']) { |
| 380 | case 'pgsql': |
| 381 | $ret[] = update_sql('UPDATE {event} SET has_end_date = 0 WHERE event_start = event_end'); |
| 382 | // TODO: Check |
| 383 | $ret[] = update_sql("UPDATE {event} SET has_time = 0 WHERE EXTRACT(HOUR_SECOND FROM event_start) = 0 AND EXTRACT(HOUR_SECOND FROM event_end) = 235900"); |
| 384 | break; |
| 385 | case 'mysql': |
| 386 | case 'mysqli': |
| 387 | $ret[] = update_sql('UPDATE {event} SET has_end_date = 0 WHERE event_start = event_end'); |
| 388 | $ret[] = update_sql("UPDATE {event} SET has_time = 0 WHERE EXTRACT(HOUR_SECOND FROM event_start) = 0 AND EXTRACT(HOUR_SECOND FROM event_end) = 235900"); |
| 389 | break; |
| 390 | } |
| 391 | return $ret; |
| 392 | } |
| 393 | |
| 394 | /** |
| 395 | * Fix broken event_timezones table |
| 396 | */ |
| 397 | function event_update_6000() { |
| 398 | db_query('DROP TABLE {event_timezones}'); |
| 399 | // Schema API doesn't have a TIME field reverting to old method. |
| 400 | switch ($GLOBALS['db_type']) { |
| 401 | case 'mysql': |
| 402 | case 'mysqli': |
| 403 | db_query("CREATE TABLE {event_timezones} ( |
| 404 | timezone int NOT NULL default '0', |
| 405 | name varchar(255) NOT NULL default '', |
| 406 | offset TIME NOT NULL default '0', |
| 407 | offset_dst TIME NOT NULL default '0', |
| 408 | dst_region int NOT NULL default '0', |
| 409 | is_dst int NOT NULL default '0', |
| 410 | PRIMARY KEY (timezone) |
| 411 | ) /*!40100 DEFAULT CHARACTER SET utf8 */;"); |
| 412 | break; |
| 413 | case 'pgsql': |
| 414 | db_query("CREATE TABLE {event_timezones} ( |
| 415 | timezone integer NOT NULL default '0', |
| 416 | name varchar(255) NOT NULL default '', |
| 417 | \"offset\" interval NOT NULL default '0 seconds', |
| 418 | offset_dst interval NOT NULL default '0 seconds', |
| 419 | dst_region integer NOT NULL default '0', |
| 420 | is_dst integer NOT NULL default '0', |
| 421 | PRIMARY KEY (timezone) |
| 422 | ) "); |
| 423 | break; |
| 424 | } |
| 425 | $zones = event_install_timezones(); |
| 426 | foreach ($zones as $zone => $value) { |
| 427 | switch ($GLOBALS['db_type']) { |
| 428 | case 'mysql': |
| 429 | case 'mysqli': |
| 430 | db_query("INSERT INTO {event_timezones} (timezone, name, offset, offset_dst, dst_region) VALUES (%d, '%s', '%s', '%s', %d)", $zone, $value['timezone'], $value['offset'], $value['offset_dst'], $value['dst_region']); |
| 431 | break; |
| 432 | case 'pgsql': |
| 433 | db_query("INSERT INTO {event_timezones} (timezone, name, \"offset\", offset_dst, dst_region) VALUES (%d, '%s', '%s', '%s', %d)", $zone, $value['timezone'], $value['offset'], $value['offset_dst'], $value['dst_region']); |
| 434 | break; |
| 435 | } |
| 436 | } |
| 437 | return array(); |
| 438 | } |
| 439 | |
| 440 | /** |
| 441 | * Truncate cache because of new theme functions. |
| 442 | */ |
| 443 | function event_update_6001() { |
| 444 | db_query('TRUNCATE {cache}'); |
| 445 | return array(); |
| 446 | } |
| 447 | |
| 448 | /** |
| 449 | * Truncate cache because of new theme functions. |
| 450 | */ |
| 451 | function event_update_6002() { |
| 452 | db_query('TRUNCATE {cache}'); |
| 453 | return array(); |
| 454 | } |
| 455 | |
| 456 | /** |
| 457 | * Truncate cache because of new theme functions. |
| 458 | */ |
| 459 | function event_update_6003() { |
| 460 | db_query('TRUNCATE {cache}'); |
| 461 | return array(); |
| 462 | } |
| 463 | |
| 464 | /** |
| 465 | * Update DST in timezones, might be screwed up. |
| 466 | */ |
| 467 | function event_update_6004() { |
| 468 | include_once(drupal_get_path('module', 'event') .'/event.module'); |
| 469 | $timezones = event_install_timezones(); |
| 470 | foreach ($timezones as $id => $timezone) { |
| 471 | $timezone = event_zonelist_by_id($id); |
| 472 | $status = event_is_dst($timezone['dst_region'], gmdate('Y-m-d H:i', time())); |
| 473 | db_query('UPDATE {event_timezones} SET is_dst = %d WHERE timezone = %d', $status, $id); |
| 474 | } |
| 475 | return array(); |
| 476 | } |
| 477 | |
| 478 | /** |
| 479 | * Update DST in events, might be screwed up. |
| 480 | */ |
| 481 | function event_update_6005() { |
| 482 | include_once(drupal_get_path('module', 'event') .'/event.module'); |
| 483 | // get all events |
| 484 | $result = db_query('SELECT e.* FROM {event} e'); |
| 485 | while ($event = db_fetch_object($result)) { |
| 486 | $timezone = event_zonelist_by_id($event->timezone); |
| 487 | $status_start = event_is_dst($timezone['dst_region'], $event->event_start); |
| 488 | $status_end = event_is_dst($timezone['dst_region'], $event->event_end); |
| 489 | if ($event->start_in_dst != $status_start || $event->end_in_dst != $status_end) { |
| 490 | db_query('UPDATE {event} SET start_in_dst = %d, end_in_dst = %d WHERE nid = %d', $status_start, $status_end, $event->nid); |
| 491 | } |
| 492 | } |
| 493 | return array(); |
| 494 | } |
| 495 | |
| 496 | /** |
| 497 | * Timezones table used only during installation. |
| 498 | */ |
| 499 | function event_install_timezones() { |
| 500 | return array(1 => array('timezone' => 'Africa/Addis Ababa', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 501 | 2 => array('timezone' => 'Africa/Algiers', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 502 | 3 => array('timezone' => 'Africa/Asmera', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 503 | 4 => array('timezone' => 'Africa/Bangui', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 504 | 5 => array('timezone' => 'Africa/Blantyre', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 505 | 6 => array('timezone' => 'Africa/Brazzaville', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 506 | 7 => array('timezone' => 'Africa/Bujumbura', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 507 | 8 => array('timezone' => 'Africa/Cairo', 'offset' => '2:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '1'), |
| 508 | 9 => array('timezone' => 'Africa/Ceuta', 'offset' => '1:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '1'), |
| 509 | 10 => array('timezone' => 'Africa/Dar es Salaam', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 510 | 11 => array('timezone' => 'Africa/Djibouti', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 511 | 12 => array('timezone' => 'Africa/Douala', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 512 | 13 => array('timezone' => 'Africa/Gaborone', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 513 | 14 => array('timezone' => 'Africa/Harare', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 514 | 15 => array('timezone' => 'Africa/Johannesburg', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 515 | 16 => array('timezone' => 'Africa/Kampala', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 516 | 17 => array('timezone' => 'Africa/Khartoum', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 517 | 18 => array('timezone' => 'Africa/Kigali', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 518 | 19 => array('timezone' => 'Africa/Kinshasa', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 519 | 20 => array('timezone' => 'Africa/Lagos', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 520 | 21 => array('timezone' => 'Africa/Libreville', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 521 | 22 => array('timezone' => 'Africa/Luanda', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 522 | 23 => array('timezone' => 'Africa/Lubumbashi', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 523 | 24 => array('timezone' => 'Africa/Lusaka', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 524 | 25 => array('timezone' => 'Africa/Malabo', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 525 | 26 => array('timezone' => 'Africa/Maputo', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 526 | 27 => array('timezone' => 'Africa/Maseru', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 527 | 28 => array('timezone' => 'Africa/Mbabane', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 528 | 29 => array('timezone' => 'Africa/Mogadishu', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 529 | 30 => array('timezone' => 'Africa/Nairobi', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 530 | 31 => array('timezone' => 'Africa/Ndjamena', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 531 | 32 => array('timezone' => 'Africa/Niamey', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 532 | 33 => array('timezone' => 'Africa/Porto-Novo', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 533 | 34 => array('timezone' => 'Africa/Tripoli', 'offset' => '2:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '0'), |
| 534 | 35 => array('timezone' => 'Africa/Tunis', 'offset' => '1:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '0'), |
| 535 | 36 => array('timezone' => 'Africa/Windhoek', 'offset' => '2:00:00', 'offset_dst' => '1:00:00', 'dst_region' => '2'), |
| 536 | 37 => array('timezone' => 'America/Adak', 'offset' => '-10:00:00', 'offset_dst' => '-9:00:00', 'dst_region' => '15'), |
| 537 | 38 => array('timezone' => 'America/Anchorage', 'offset' => '-9:00:00', 'offset_dst' => '-8:00:00', 'dst_region' => '15'), |
| 538 | 39 => array('timezone' => 'America/Anguilla', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 539 | 40 => array('timezone' => 'America/Antigua', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 540 | 41 => array('timezone' => 'America/Araguaina', 'offset' => '-2:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '17'), |
| 541 | 42 => array('timezone' => 'America/Aruba', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 542 | 43 => array('timezone' => 'America/Asuncion', 'offset' => '-3:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '20'), |
| 543 | 44 => array('timezone' => 'America/Atka', 'offset' => '-10:00:00', 'offset_dst' => '-9:00:00', 'dst_region' => '15'), |
| 544 | 45 => array('timezone' => 'America/Barbados', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 545 | 46 => array('timezone' => 'America/Belem', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 546 | 47 => array('timezone' => 'America/Belize', 'offset' => '-6:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '0'), |
| 547 | 48 => array('timezone' => 'America/Boa Vista', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 548 | 49 => array('timezone' => 'America/Bogota', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 549 | 50 => array('timezone' => 'America/Boise', 'offset' => '-7:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '15'), |
| 550 | 51 => array('timezone' => 'America/Buenos Aires', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 551 | 52 => array('timezone' => 'America/Cambridge Bay', 'offset' => '-7:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '15'), |
| 552 | 53 => array('timezone' => 'America/Cancun', 'offset' => '-6:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '15'), |
| 553 | 54 => array('timezone' => 'America/Caracas', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 554 | 55 => array('timezone' => 'America/Catamarca', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 555 | 56 => array('timezone' => 'America/Cayenne', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 556 | 57 => array('timezone' => 'America/Cayman', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 557 | 58 => array('timezone' => 'America/Chicago', 'offset' => '-6:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '15'), |
| 558 | 59 => array('timezone' => 'America/Chihuahua', 'offset' => '-7:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '15'), |
| 559 | 60 => array('timezone' => 'America/Cordoba', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 560 | 61 => array('timezone' => 'America/Costa Rica', 'offset' => '-6:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '0'), |
| 561 | 62 => array('timezone' => 'America/Cuiaba', 'offset' => '-3:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '17'), |
| 562 | 63 => array('timezone' => 'America/Curacao', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 563 | 64 => array('timezone' => 'America/Dawson', 'offset' => '-8:00:00', 'offset_dst' => '-7:00:00', 'dst_region' => '15'), |
| 564 | 65 => array('timezone' => 'America/Dawson Creek', 'offset' => '-7:00:00', 'offset_dst' => '-7:00:00', 'dst_region' => '0'), |
| 565 | 66 => array('timezone' => 'America/Denver', 'offset' => '-7:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '15'), |
| 566 | 67 => array('timezone' => 'America/Detroit', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 567 | 68 => array('timezone' => 'America/Dominica', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 568 | 69 => array('timezone' => 'America/Edmonton', 'offset' => '-7:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '15'), |
| 569 | 70 => array('timezone' => 'America/Eirunepe', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 570 | 71 => array('timezone' => 'America/El Salvador', 'offset' => '-6:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '0'), |
| 571 | 72 => array('timezone' => 'America/Ensenada', 'offset' => '-8:00:00', 'offset_dst' => '-7:00:00', 'dst_region' => '15'), |
| 572 | 73 => array('timezone' => 'America/Fort Wayne', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 573 | 74 => array('timezone' => 'America/Fortaleza', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 574 | 75 => array('timezone' => 'America/Glace Bay', 'offset' => '-4:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '15'), |
| 575 | 76 => array('timezone' => 'America/Godthab', 'offset' => '-3:00:00', 'offset_dst' => '-2:00:00', 'dst_region' => '15'), |
| 576 | 77 => array('timezone' => 'America/Goose Bay', 'offset' => '-4:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '15'), |
| 577 | 78 => array('timezone' => 'America/Grand Turk', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '16'), |
| 578 | 79 => array('timezone' => 'America/Grenada', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 579 | 80 => array('timezone' => 'America/Guadeloupe', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 580 | 81 => array('timezone' => 'America/Guatemala', 'offset' => '-6:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '0'), |
| 581 | 82 => array('timezone' => 'America/Guayaquil', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 582 | 83 => array('timezone' => 'America/Guyana', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 583 | 84 => array('timezone' => 'America/Halifax', 'offset' => '-4:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '15'), |
| 584 | 85 => array('timezone' => 'America/Havana', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '16'), |
| 585 | 86 => array('timezone' => 'America/Hermosillo', 'offset' => '-7:00:00', 'offset_dst' => '-7:00:00', 'dst_region' => '0'), |
| 586 | 87 => array('timezone' => 'America/Indiana/Indianapolis', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 587 | 88 => array('timezone' => 'America/Indiana/Knox', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 588 | 89 => array('timezone' => 'America/Indiana/Marengo', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 589 | 90 => array('timezone' => 'America/Indiana/Vevay', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 590 | 91 => array('timezone' => 'America/Indianapolis', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 591 | 92 => array('timezone' => 'America/Inuvik', 'offset' => '-7:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '15'), |
| 592 | 93 => array('timezone' => 'America/Iqaluit', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 593 | 94 => array('timezone' => 'America/Jamaica', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 594 | 95 => array('timezone' => 'America/Jujuy', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 595 | 96 => array('timezone' => 'America/Juneau', 'offset' => '-9:00:00', 'offset_dst' => '-8:00:00', 'dst_region' => '15'), |
| 596 | 97 => array('timezone' => 'America/Kentucky/Louisville', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 597 | 98 => array('timezone' => 'America/Kentucky/Monticello', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 598 | 99 => array('timezone' => 'America/Knox IN', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 599 | 100 => array('timezone' => 'America/La Paz', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 600 | 101 => array('timezone' => 'America/Lima', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 601 | 102 => array('timezone' => 'America/Los Angeles', 'offset' => '-8:00:00', 'offset_dst' => '-7:00:00', 'dst_region' => '15'), |
| 602 | 103 => array('timezone' => 'America/Louisville', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 603 | 104 => array('timezone' => 'America/Maceio', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 604 | 105 => array('timezone' => 'America/Managua', 'offset' => '-6:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '0'), |
| 605 | 106 => array('timezone' => 'America/Manaus', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 606 | 107 => array('timezone' => 'America/Martinique', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 607 | 108 => array('timezone' => 'America/Mazatlan', 'offset' => '-7:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '15'), |
| 608 | 109 => array('timezone' => 'America/Mendoza', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 609 | 110 => array('timezone' => 'America/Menominee', 'offset' => '-6:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '15'), |
| 610 | 111 => array('timezone' => 'America/Merida', 'offset' => '-6:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '15'), |
| 611 | 112 => array('timezone' => 'America/Mexico City', 'offset' => '-6:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '15'), |
| 612 | 113 => array('timezone' => 'America/Miquelon', 'offset' => '-3:00:00', 'offset_dst' => '-2:00:00', 'dst_region' => '15'), |
| 613 | 114 => array('timezone' => 'America/Monterrey', 'offset' => '-6:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '15'), |
| 614 | 115 => array('timezone' => 'America/Montevideo', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 615 | 116 => array('timezone' => 'America/Montreal', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 616 | 117 => array('timezone' => 'America/Montserrat', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 617 | 118 => array('timezone' => 'America/Nassau', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 618 | 119 => array('timezone' => 'America/New York', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 619 | 120 => array('timezone' => 'America/Nipigon', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 620 | 121 => array('timezone' => 'America/Nome', 'offset' => '-9:00:00', 'offset_dst' => '-8:00:00', 'dst_region' => '15'), |
| 621 | 122 => array('timezone' => 'America/Noronha', 'offset' => '-2:00:00', 'offset_dst' => '-2:00:00', 'dst_region' => '0'), |
| 622 | 123 => array('timezone' => 'America/Panama', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 623 | 124 => array('timezone' => 'America/Pangnirtung', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 624 | 125 => array('timezone' => 'America/Paramaribo', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 625 | 126 => array('timezone' => 'America/Phoenix', 'offset' => '-7:00:00', 'offset_dst' => '-7:00:00', 'dst_region' => '0'), |
| 626 | 127 => array('timezone' => 'America/Port-au-Prince', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 627 | 128 => array('timezone' => 'America/Port of Spain', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 628 | 129 => array('timezone' => 'America/Porto Acre', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 629 | 130 => array('timezone' => 'America/Porto Velho', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 630 | 131 => array('timezone' => 'America/Puerto Rico', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 631 | 132 => array('timezone' => 'America/Rainy River', 'offset' => '-6:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '15'), |
| 632 | 133 => array('timezone' => 'America/Rankin Inlet', 'offset' => '-6:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '15'), |
| 633 | 134 => array('timezone' => 'America/Recife', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 634 | 135 => array('timezone' => 'America/Regina', 'offset' => '-6:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '0'), |
| 635 | 136 => array('timezone' => 'America/Rio Branco', 'offset' => '-5:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '0'), |
| 636 | 137 => array('timezone' => 'America/Rosario', 'offset' => '-3:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '0'), |
| 637 | 138 => array('timezone' => 'America/Santiago', 'offset' => '-3:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 638 | 139 => array('timezone' => 'America/Santo Domingo', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 639 | 140 => array('timezone' => 'America/Sao Paulo', 'offset' => '-2:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '15'), |
| 640 | 141 => array('timezone' => 'America/Scoresbysund', 'offset' => '-1:00:00', 'offset_dst' => '00:00:00', 'dst_region' => '15'), |
| 641 | 142 => array('timezone' => 'America/Shiprock', 'offset' => '-7:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '15'), |
| 642 | 143 => array('timezone' => 'America/St Johns', 'offset' => '-3:30:00', 'offset_dst' => '-2:30:00', 'dst_region' => '15'), |
| 643 | 144 => array('timezone' => 'America/St Kitts', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 644 | 145 => array('timezone' => 'America/St Lucia', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 645 | 146 => array('timezone' => 'America/St Thomas', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 646 | 147 => array('timezone' => 'America/St Vincent', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 647 | 148 => array('timezone' => 'America/Swift Current', 'offset' => '-6:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '0'), |
| 648 | 149 => array('timezone' => 'America/Tegucigalpa', 'offset' => '-6:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '0'), |
| 649 | 150 => array('timezone' => 'America/Thule', 'offset' => '-4:00:00', 'offset_dst' => '-3:00:00', 'dst_region' => '15'), |
| 650 | 151 => array('timezone' => 'America/Thunder Bay', 'offset' => '-5:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '15'), |
| 651 | 152 => array('timezone' => 'America/Tijuana', 'offset' => '-8:00:00', 'offset_dst' => '-7:00:00', 'dst_region' => '15'), |
| 652 | 153 => array('timezone' => 'America/Tortola', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 653 | 154 => array('timezone' => 'America/Vancouver', 'offset' => '-8:00:00', 'offset_dst' => '-7:00:00', 'dst_region' => '15'), |
| 654 | 155 => array('timezone' => 'America/Virgin', 'offset' => '-4:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '0'), |
| 655 | 156 => array('timezone' => 'America/Whitehorse', 'offset' => '-8:00:00', 'offset_dst' => '-7:00:00', 'dst_region' => '15'), |
| 656 | 157 => array('timezone' => 'America/Winnipeg', 'offset' => '-6:00:00', 'offset_dst' => '-5:00:00', 'dst_region' => '15'), |
| 657 | 158 => array('timezone' => 'America/Yakutat', 'offset' => '-9:00:00', 'offset_dst' => '-8:00:00', 'dst_region' => '15'), |
| 658 | 159 => array('timezone' => 'America/Yellowknife', 'offset' => '-7:00:00', 'offset_dst' => '-6:00:00', 'dst_region' => '15'), |
| 659 | 160 => array('timezone' => 'Antarctica/Casey', 'offset' => '8:00:00', 'offset_dst' => '8:00:00', 'dst_region' => '0'), |
| 660 | 161 => array('timezone' => 'Antarctica/Davis', 'offset' => '7:00:00', 'offset_dst' => '7:00:00', 'dst_region' => '0'), |
| 661 | 162 => array('timezone' => 'Antarctica/DumontDUrville', 'offset' => '10:00:00', 'offset_dst' => '10:00:00', 'dst_region' => '0'), |
| 662 | 163 => array('timezone' => 'Antarctica/Mawson', 'offset' => '6:00:00', 'offset_dst' => '6:00:00', 'dst_region' => '0'), |
| 663 | 164 => array('timezone' => 'Antarctica/McMurdo', 'offset' => '13:00:00', 'offset_dst' => '12:00:00', 'dst_region' => '11'), |
| 664 | 165 => array('timezone' => 'Antarctica/Palmer', 'offset' => '-3:00:00', 'offset_dst' => '-4:00:00', 'dst_region' => '18'), |
| 665 | 166 => array('timezone' => 'Antarctica/South Pole', 'offset' => '13:00:00', 'offset_dst' => '12:00:00', 'dst_region' => '11'), |
| 666 | 167 => array('timezone' => 'Antarctica/Syowa', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 667 | 168 => array('timezone' => 'Antarctica/Vostok', 'offset' => '6:00:00', 'offset_dst' => '6:00:00', 'dst_region' => '0'), |
| 668 | 169 => array('timezone' => 'Arctic/Longyearbyen', 'offset' => '1:00:00', 'offset_dst' => '2:00:00', 'dst_region' => '14'), |
| 669 | 170 => array('timezone' => 'Asia/Aden', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 670 | 171 => array('timezone' => 'Asia/Almaty', 'offset' => '6:00:00', 'offset_dst' => '6:00:00', 'dst_region' => '0'), |
| 671 | 172 => array('timezone' => 'Asia/Amman', 'offset' => '2:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '8'), |
| 672 | 173 => array('timezone' => 'Asia/Anadyr', 'offset' => '12:00:00', 'offset_dst' => '13:00:00', 'dst_region' => '3'), |
| 673 | 174 => array('timezone' => 'Asia/Aqtau', 'offset' => '4:00:00', 'offset_dst' => '5:00:00', 'dst_region' => '3'), |
| 674 | 175 => array('timezone' => 'Asia/Aqtobe', 'offset' => '5:00:00', 'offset_dst' => '6:00:00', 'dst_region' => '3'), |
| 675 | 176 => array('timezone' => 'Asia/Ashgabat', 'offset' => '5:00:00', 'offset_dst' => '5:00:00', 'dst_region' => '0'), |
| 676 | 177 => array('timezone' => 'Asia/Ashkhabad', 'offset' => '5:00:00', 'offset_dst' => '5:00:00', 'dst_region' => '0'), |
| 677 | 178 => array('timezone' => 'Asia/Baghdad', 'offset' => '3:00:00', 'offset_dst' => '4:00:00', 'dst_region' => '4'), |
| 678 | 179 => array('timezone' => 'Asia/Bahrain', 'offset' => '3:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '0'), |
| 679 | 180 => array('timezone' => 'Asia/Baku', 'offset' => '4:00:00', 'offset_dst' => '5:00:00', 'dst_region' => '3'), |
| 680 | 181 => array('timezone' => 'Asia/Bangkok', 'offset' => '7:00:00', 'offset_dst' => '7:00:00', 'dst_region' => '0'), |
| 681 | 182 => array('timezone' => 'Asia/Beirut', 'offset' => '2:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '6'), |
| 682 | 183 => array('timezone' => 'Asia/Bishkek', 'offset' => '5:00:00', 'offset_dst' => '6:00:00', 'dst_region' => '6'), |
| 683 | 184 => array('timezone' => 'Asia/Brunei', 'offset' => '8:00:00', 'offset_dst' => '8:00:00', 'dst_region' => '0'), |
| 684 | 185 => array('timezone' => 'Asia/Calcutta', 'offset' => '5:30:00', 'offset_dst' => '5:30:30', 'dst_region' => '0'), |
| 685 | 186 => array('timezone' => 'Asia/Chungking', 'offset' => '8:00:00', 'offset_dst' => '8:00:00', 'dst_region' => '0'), |
| 686 | 187 => array('timezone' => 'Asia/Colombo', 'offset' => '6:00:00', 'offset_dst' => '6:00:00', 'dst_region' => '0'), |
| 687 | 188 => array('timezone' => 'Asia/Dacca', 'offset' => '6:00:00', 'offset_dst' => '6:00:00', 'dst_region' => '0'), |
| 688 | 189 => array('timezone' => 'Asia/Damascus', 'offset' => '2:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '4'), |
| 689 | 190 => array('timezone' => 'Asia/Dhaka', 'offset' => '6:00:00', 'offset_dst' => '6:00:00', 'dst_region' => '0'), |
| 690 | 191 => array('timezone' => 'Asia/Dili', 'offset' => '9:00:00', 'offset_dst' => '9:00:00', 'dst_region' => '0'), |
| 691 | 192 => array('timezone' => 'Asia/Dubai', 'offset' => '4:00:00', 'offset_dst' => '4:00:00', 'dst_region' => '0'), |
| 692 | 193 => array('timezone' => 'Asia/Dushanbe', 'offset' => '5:00:00', 'offset_dst' => '5:00:00', 'dst_region' => '0'), |
| 693 | 194 => array('timezone' => 'Asia/Gaza', 'offset' => '2:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '7'), |
| 694 | 195 => array('timezone' => 'Asia/Harbin', 'offset' => '8:00:00', 'offset_dst' => '8:00:00', 'dst_region' => '0'), |
| 695 | 196 => array('timezone' => 'Asia/Hong Kong', 'offset' => '8:00:00', 'offset_dst' => '8:00:00', 'dst_region' => '0'), |
| 696 | 197 => array('timezone' => 'Asia/Hovd', 'offset' => '7:00:00', 'offset_dst' => '7:00:00', 'dst_region' => '0'), |
| 697 | 198 => array('timezone' => 'Asia/Irkutsk', 'offset' => '8:00:00', 'offset_dst' => '9:00:00', 'dst_region' => '3'), |
| 698 | 199 => array('timezone' => 'Asia/Istanbul', 'offset' => '2:00:00', 'offset_dst' => '3:00:00', 'dst_region' => '3'), |
| 699 | 200 => array('timezone' => 'Asia/Jakarta', 'offset' => '7:00:00', 'offset_dst' => '7:00:00', 'dst_region' => '0'), |
| 700 | 201 => array('timezone' => 'Asia/Jayapura' |