Make WordPress Core

Ticket #11558: 11558.diff

File 11558.diff, 5.6 KB (added by ryan, 15 years ago)

Don't use Etc zones

  • wp-includes/functions.php

     
    33933393function wp_timezone_choice( $selected_zone ) {
    33943394        static $mo_loaded = false;
    33953395
    3396         $continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific', 'Etc' );
     3396        $continents = array( 'Africa', 'America', 'Antarctica', 'Arctic', 'Asia', 'Atlantic', 'Australia', 'Europe', 'Indian', 'Pacific');
    33973397
    33983398        // Load translations for continents and cities
    33993399        if ( !$mo_loaded ) {
     
    34093409                if ( !in_array( $zone[0], $continents ) ) {
    34103410                        continue;
    34113411                }
    3412                 if ( 'Etc' === $zone[0] && in_array( $zone[1], array( 'UCT', 'GMT', 'GMT0', 'GMT+0', 'GMT-0', 'Greenwich', 'Universal', 'Zulu' ) ) ) {
    3413                         continue;
    3414                 }
    34153412
    34163413                // This determines what gets set and translated - we don't translate Etc/* strings here, they are done later
    34173414                $exists = array(
     
    34523449
    34533450                        // Continent optgroup
    34543451                        if ( !isset( $zonen[$key - 1] ) || $zonen[$key - 1]['continent'] !== $zone['continent'] ) {
    3455                                 $label = ( 'Etc' === $zone['continent'] ) ? __( 'Manual offsets' ) : $zone['t_continent'];
     3452                                $label = $zone['t_continent'];
    34563453                                $structure[] = '<optgroup label="'. esc_attr( $label ) .'">';
    34573454                        }
    34583455
    34593456                        // Add the city to the value
    34603457                        $value[] = $zone['city'];
    3461                         if ( 'Etc' === $zone['continent'] ) {
    3462                                 if ( 'UTC' === $zone['city'] ) {
    3463                                         $display = '';
    3464                                 } else {
    3465                                         $display = str_replace( 'GMT', '', $zone['city'] );
    3466                                         $display = strtr( $display, '+-', '-+' ) . ':00';
    3467                                 }
    3468                                 $display = sprintf( __( 'UTC %s' ), $display );
    3469                         } else {
    3470                                 $display = $zone['t_city'];
    3471                                 if ( !empty( $zone['subcity'] ) ) {
    3472                                         // Add the subcity to the value
    3473                                         $value[] = $zone['subcity'];
    3474                                         $display .= ' - ' . $zone['t_subcity'];
    3475                                 }
     3458
     3459                        $display = $zone['t_city'];
     3460                        if ( !empty( $zone['subcity'] ) ) {
     3461                                // Add the subcity to the value
     3462                                $value[] = $zone['subcity'];
     3463                                $display .= ' - ' . $zone['t_subcity'];
    34763464                        }
    34773465                }
    34783466
     
    34903478                }
    34913479        }
    34923480
     3481        // Do UTC
     3482        $structure[] = '<optgroup label="'. esc_attr__( 'UTC' ) .'">';
     3483        $selected = '';
     3484        if ( 'UTC' === $selected_zone )
     3485                $selected = 'selected="selected" ';
     3486        $structure[] = '<option ' . $selected . 'value="' . esc_attr( 'UTC' ) . '">' . __('UTC') . '</option>';
     3487        $structure[] = '</optgroup>';
     3488
     3489        // Do manual UTC offsets
     3490        $structure[] = '<optgroup label="'. esc_attr__( 'Manual Offsets' ) .'">';
     3491        $offset_range = array (-12, -11.5, -11, -10.5, -10, -9.5, -9, -8.5, -8, -7.5, -7, -6.5, -6, -5.5, -5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0.5,
     3492                0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 5.75, 6, 6.5, 7, 7.5, 8, 8.5, 8.75, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.75, 13, 13.75, 14);
     3493        foreach ( $offset_range as $offset ) {
     3494                if ( 0 <= $offset )
     3495                        $offset_name = '+' . $offset;
     3496                else
     3497                        $offset_name = (string) $offset;
     3498
     3499                $offset_value = $offset_name;
     3500                $offset_name = str_replace(array('.25','.5','.75'), array(':15',':30',':45'), $offset_name);
     3501                $offset_name = 'UTC' . $offset_name;
     3502                $offset_value = 'UTC' . $offset_value;
     3503                $selected = '';
     3504                if ( $offset_value === $selected_zone )
     3505                        $selected = 'selected="selected" ';
     3506                $structure[] = '<option ' . $selected . 'value="' . esc_attr( $offset_value ) . '">' . esc_html( $offset_name ) . "</option>";
     3507               
     3508        }
     3509        $structure[] = '</optgroup>';
     3510
    34933511        return join( "\n", $structure );
    34943512}
    34953513
  • wp-admin/options-general.php

     
    139139else: // looks like we can do nice timezone selection!
    140140$current_offset = get_option('gmt_offset');
    141141$tzstring = get_option('timezone_string');
     142
     143$check_zone_info = true;
     144
     145// Remove old Etc mappings.  Fallback to gmt_offset.
     146if ( false !== strpos($tzstring,'Etc/GMT') )
     147        $tzstring = '';
     148
    142149if (empty($tzstring)) { // set the Etc zone if no timezone string exists
    143         if ($current_offset < 0) $offnum = - ceil($current_offset);
    144         else $offnum = - floor($current_offset);
    145         $tzstring = 'Etc/GMT' . (($offnum >= 0) ? '+' : '') . $offnum;
     150        $check_zone_info = false;
     151        if ( 0 == $current_offset )
     152                $tzstring = 'UTC+0';
     153        elseif ($current_offset < 0)
     154                $tzstring = 'UTC-' . $current_offset;
     155        else
     156                $tzstring = 'UTC+' . $current_offset;
    146157}
     158
    147159?>
    148160<th scope="row"><label for="timezone_string"><?php _e('Timezone') ?></label></th>
    149161<td>
     
    160172<span class="description"><?php _e('Choose a city in the same timezone as you.'); ?></span>
    161173<br />
    162174<span>
    163 <?php if ($tzstring) : ?>
     175<?php if ($check_zone_info && $tzstring) : ?>
    164176        <?php
    165177        $now = localtime(time(),true);
    166178        if ($now['tm_isdst']) _e('This timezone is currently in daylight savings time.');
  • wp-admin/options.php

     
    6565                        $_POST['date_format'] = $_POST['date_format_custom'];
    6666                if ( !empty($_POST['time_format']) && isset($_POST['time_format_custom']) && '\c\u\s\t\o\m' == stripslashes( $_POST['time_format'] ) )
    6767                        $_POST['time_format'] = $_POST['time_format_custom'];
     68                // Map UTC+- timezones to gmt_offsets and set timezone_string to empty.
     69                if ( !empty($_POST['timezone_string']) && preg_match('/^UTC[+-]/', $_POST['timezone_string']) ) {
     70                        $_POST['gmt_offset'] = $_POST['timezone_string'];
     71                        $_POST['gmt_offset'] = preg_replace('/UTC\+?/', '', $_POST['gmt_offset']);
     72                        $_POST['timezone_string'] = '';
     73                }
    6874        }
    6975
    7076        if ( $options ) {