jenkins-bot has submitted this change and it was merged.

Change subject: Use localization for server default timezone on 
Special:Preferences
......................................................................


Use localization for server default timezone on Special:Preferences

The timezone list on Special:Preferences contains all time zones with a
localized region and also an option to use the system default value.
The message for this option gets the current server timezone as
parameter, but that parameter is not localized.
Refactor the timezone list processing into a new function and call it at
the beginning to do a lookup for the localized name and use it, if it
exists in the array.

Also changed from procedural style to object oriented style for the
DateTime processing.

Bug: T33516
Change-Id: I00e81324d0d16fbe6c9811480210ab6513461823
---
M includes/Preferences.php
1 file changed, 75 insertions(+), 43 deletions(-)

Approvals:
  Nikerabbit: Looks good to me, approved
  Siebrand: Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/includes/Preferences.php b/includes/Preferences.php
index ecb2294..9497ee7 100644
--- a/includes/Preferences.php
+++ b/includes/Preferences.php
@@ -1294,12 +1294,19 @@
                $opt = array();
 
                $localTZoffset = $context->getConfig()->get( 'LocalTZoffset' );
+               $timeZoneList = self::getTimeZoneList( $context->getLanguage() 
);
+
                $timestamp = MWTimestamp::getLocalInstance();
                // Check that the LocalTZoffset is the same as the local time 
zone offset
                if ( $localTZoffset == $timestamp->format( 'Z' ) / 60 ) {
+                       $timezoneName = $timestamp->getTimezone()->getName();
+                       // Localize timezone
+                       if ( isset( $timeZoneList[$timezoneName] ) ) {
+                               $timezoneName = 
$timeZoneList[$timezoneName]['name'];
+                       }
                        $server_tz_msg = $context->msg(
                                'timezoneuseserverdefault',
-                               $timestamp->getTimezone()->getName()
+                               $timezoneName
                        )->text();
                } else {
                        $tzstring = sprintf(
@@ -1313,49 +1320,12 @@
                $opt[$context->msg( 'timezoneuseoffset' )->text()] = 'other';
                $opt[$context->msg( 'guesstimezone' )->text()] = 'guess';
 
-               if ( function_exists( 'timezone_identifiers_list' ) ) {
-                       # Read timezone list
-                       $tzs = timezone_identifiers_list();
-                       sort( $tzs );
-
-                       $tzRegions = array();
-                       $tzRegions['Africa'] = $context->msg( 
'timezoneregion-africa' )->text();
-                       $tzRegions['America'] = $context->msg( 
'timezoneregion-america' )->text();
-                       $tzRegions['Antarctica'] = $context->msg( 
'timezoneregion-antarctica' )->text();
-                       $tzRegions['Arctic'] = $context->msg( 
'timezoneregion-arctic' )->text();
-                       $tzRegions['Asia'] = $context->msg( 
'timezoneregion-asia' )->text();
-                       $tzRegions['Atlantic'] = $context->msg( 
'timezoneregion-atlantic' )->text();
-                       $tzRegions['Australia'] = $context->msg( 
'timezoneregion-australia' )->text();
-                       $tzRegions['Europe'] = $context->msg( 
'timezoneregion-europe' )->text();
-                       $tzRegions['Indian'] = $context->msg( 
'timezoneregion-indian' )->text();
-                       $tzRegions['Pacific'] = $context->msg( 
'timezoneregion-pacific' )->text();
-                       asort( $tzRegions );
-
-                       $prefill = array_fill_keys( array_values( $tzRegions ), 
array() );
-                       $opt = array_merge( $opt, $prefill );
-
-                       $now = date_create( 'now' );
-
-                       foreach ( $tzs as $tz ) {
-                               $z = explode( '/', $tz, 2 );
-
-                               # timezone_identifiers_list() returns a number 
of
-                               # backwards-compatibility entries. This filters 
them out of the
-                               # list presented to the user.
-                               if ( count( $z ) != 2 || !array_key_exists( 
$z[0], $tzRegions ) ) {
-                                       continue;
-                               }
-
-                               # Localize region
-                               $z[0] = $tzRegions[$z[0]];
-
-                               $minDiff = floor( timezone_offset_get( 
timezone_open( $tz ), $now ) / 60 );
-
-                               $display = str_replace( '_', ' ', $z[0] . '/' . 
$z[1] );
-                               $value = "ZoneInfo|$minDiff|$tz";
-
-                               $opt[$z[0]][$display] = $value;
+               foreach ( $timeZoneList as $timeZoneInfo ) {
+                       $region = $timeZoneInfo['region'];
+                       if ( !isset( $opt[$region] ) ) {
+                               $opt[$region] = array();
                        }
+                       $opt[$region][$timeZoneInfo['name']] = 
$timeZoneInfo['timecorrection'];
                }
                return $opt;
        }
@@ -1491,6 +1461,68 @@
 
                return Status::newGood();
        }
+
+       /**
+        * Get a list of all time zones
+        * @param Language $language Language used for the localized names
+        * @return array A list of all time zones. The system name of the time 
zone is used as key and
+        *  the value is an array which contains localized name, the 
timecorrection value used for
+        *  preferences and the region
+        * @since 1.26
+        */
+       public static function getTimeZoneList( Language $language ) {
+               $identifiers = DateTimeZone::listIdentifiers();
+               if ( $identifiers === false ) {
+                       return array();
+               }
+               sort( $identifiers );
+
+               $tzRegions = array(
+                       'Africa' => wfMessage( 'timezoneregion-africa' 
)->inLanguage( $language )->text(),
+                       'America' => wfMessage( 'timezoneregion-america' 
)->inLanguage( $language )->text(),
+                       'Antarctica' => wfMessage( 'timezoneregion-antarctica' 
)->inLanguage( $language )->text(),
+                       'Arctic' => wfMessage( 'timezoneregion-arctic' 
)->inLanguage( $language )->text(),
+                       'Asia' => wfMessage( 'timezoneregion-asia' 
)->inLanguage( $language )->text(),
+                       'Atlantic' => wfMessage( 'timezoneregion-atlantic' 
)->inLanguage( $language )->text(),
+                       'Australia' => wfMessage( 'timezoneregion-australia' 
)->inLanguage( $language )->text(),
+                       'Europe' => wfMessage( 'timezoneregion-europe' 
)->inLanguage( $language )->text(),
+                       'Indian' => wfMessage( 'timezoneregion-indian' 
)->inLanguage( $language )->text(),
+                       'Pacific' => wfMessage( 'timezoneregion-pacific' 
)->inLanguage( $language )->text(),
+               );
+               asort( $tzRegions );
+
+               $timeZoneList = array();
+
+               $now = new DateTime();
+
+               foreach ( $identifiers as $identifier ) {
+                       $parts = explode( '/', $identifier, 2 );
+
+                       // DateTimeZone::listIdentifiers() returns a number of
+                       // backwards-compatibility entries. This filters them 
out of the
+                       // list presented to the user.
+                       if ( count( $parts ) !== 2 || !array_key_exists( 
$parts[0], $tzRegions ) ) {
+                               continue;
+                       }
+
+                       // Localize region
+                       $parts[0] = $tzRegions[$parts[0]];
+
+                       $dateTimeZone = new DateTimeZone( $identifier );
+                       $minDiff = floor( $dateTimeZone->getOffset( $now ) / 60 
);
+
+                       $display = str_replace( '_', ' ', $parts[0] . '/' . 
$parts[1] );
+                       $value = "ZoneInfo|$minDiff|$identifier";
+
+                       $timeZoneList[$identifier] = array(
+                               'name' => $display,
+                               'timecorrection' => $value,
+                               'region' => $parts[0],
+                       );
+               }
+
+               return $timeZoneList;
+       }
 }
 
 /** Some tweaks to allow js prefs to work */

-- 
To view, visit https://gerrit.wikimedia.org/r/205101
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I00e81324d0d16fbe6c9811480210ab6513461823
Gerrit-PatchSet: 8
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Umherirrender <umherirrender_de...@web.de>
Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org>
Gerrit-Reviewer: Nikerabbit <niklas.laxst...@gmail.com>
Gerrit-Reviewer: Siebrand <siebr...@kitano.nl>
Gerrit-Reviewer: Umherirrender <umherirrender_de...@web.de>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to