(bug 32297) Use symbolic names, not offsets for a default timezone.
authorSzymon Świerkosz <beau@adres.pl>
Fri, 4 May 2012 16:59:16 +0000 (18:59 +0200)
committerSzymon Świerkosz <beau@adres.pl>
Fri, 4 May 2012 17:00:01 +0000 (19:00 +0200)
Change-Id: I4a12487487bbb7897911b13068e2d7a1340e7206

languages/Language.php
tests/phpunit/includes/TimeAdjustTest.php
tests/phpunit/includes/TitlePermissionTest.php

index e6feb45..45176b8 100644 (file)
@@ -1737,7 +1737,7 @@ class Language {
         * @return int
         */
        function userAdjust( $ts, $tz = false ) {
-               global $wgUser, $wgLocalTZoffset;
+               global $wgUser, $wgLocaltimezone, $wgLocalTZoffset;
 
                if ( $tz === false ) {
                        $tz = $wgUser->getOption( 'timecorrection' );
@@ -1745,6 +1745,18 @@ class Language {
 
                $data = explode( '|', $tz, 3 );
 
+               if ( $data[0] == 'System' || $tz == '' ) {
+                       # Global timezone
+                       if ( isset( $wgLocaltimezone ) ) {
+                               $data[0] = 'ZoneInfo';
+                               $data[2] = $wgLocaltimezone;
+                       }
+                       #  Global offset in minutes.
+                       if ( isset( $wgLocalTZoffset ) ) {
+                               $data[1] = $wgLocalTZoffset;
+                       }
+               }
+
                if ( $data[0] == 'ZoneInfo' ) {
                        wfSuppressWarnings();
                        $userTZ = timezone_open( $data[2] );
@@ -1760,12 +1772,7 @@ class Language {
                }
 
                $minDiff = 0;
-               if ( $data[0] == 'System' || $tz == '' ) {
-                       #  Global offset in minutes.
-                       if ( isset( $wgLocalTZoffset ) ) {
-                               $minDiff = $wgLocalTZoffset;
-                       }
-               } elseif ( $data[0] == 'Offset' ) {
+               if ( $data[0] == 'Offset' ) {
                        $minDiff = intval( $data[1] );
                } else {
                        $data = explode( ':', $tz );
index cd027c5..31304f3 100644 (file)
@@ -1,31 +1,47 @@
 <?php
 
 class TimeAdjustTest extends MediaWikiLangTestCase {
-       static $offset;
+       static $offset, $timezone;
 
        public function setUp() {
                parent::setUp();
-               global $wgLocalTZoffset;
+               global $wgLocalTZoffset, $wgLocaltimezone;
                self::$offset = $wgLocalTZoffset;
+               self::$timezone = $wgLocaltimezone;
 
                $this->iniSet( 'precision', 15 );
        }
 
        public function tearDown() {
-               global $wgLocalTZoffset;
+               global $wgLocalTZoffset, $wgLocaltimezone;
                $wgLocalTZoffset = self::$offset;
+               $wgLocaltimezone = self::$timezone;
                parent::tearDown();
        }
 
-       # Test offset usage for a given language::userAdjust
-       function testUserAdjust() {
-               global $wgLocalTZoffset, $wgContLang;
+       /**
+        * Test offset usage for a given language::userAdjust
+        * @dataProvider dataUserAdjustWithOffset
+        */
+       function testUserAdjustWithOffset( $inputDate, $offset, $expectedDate ) {
+               global $wgLocalTZoffset, $wgLocaltimezone, $wgContLang;
 
                $wgContLang = $en = Language::factory( 'en' );
 
+               $wgLocaltimezone = 'DummyTimezoneSoUserAdjustWillUseTzOffset';
+               $wgLocalTZoffset = $offset;
+
+               $this->assertEquals(
+                       strval( $expectedDate ),
+                       strval( $en->userAdjust( $inputDate, '' ) ),
+                       "User adjust {$inputDate} by {$offset} minutes should give {$expectedDate}"
+               );
+       }
+
+       function dataUserAdjustWithOffset() {
                #  Collection of parameters for Language_t_Offset.
                # Format: date to be formatted, localTZoffset value, expected date
-               $userAdjust_tests = array(
+               return array(
                        array( 20061231235959,   0, 20061231235959 ),
                        array( 20061231235959,   5, 20070101000459 ),
                        array( 20061231235959,  15, 20070101001459 ),
@@ -37,15 +53,32 @@ class TimeAdjustTest extends MediaWikiLangTestCase {
                        array( 20061231235959, -30, 20061231232959 ),
                        array( 20061231235959, -60, 20061231225959 ),
                );
+       }
+
+       /**
+        * Test timezone usage for a given language::userAdjust
+        * @dataProvider dataUserAdjustWithTimezone
+        */
+       function testUserAdjustWithTimezone( $inputDate, $timezone, $expectedDate ) {
+               global $wgLocalTZoffset, $wgLocaltimezone;
 
-               foreach ( $userAdjust_tests as $data ) {
-                       $wgLocalTZoffset = $data[1];
+               $wgContLang = $en = Language::factory( 'en' );
 
-                       $this->assertEquals(
-                               strval( $data[2] ),
-                               strval( $en->userAdjust( $data[0], '' ) ),
-                               "User adjust {$data[0]} by {$data[1]} minutes should give {$data[2]}"
-                       );
-               }
+               $wgLocaltimezone = $timezone;
+               $wgLocalTZoffset = 0;
+
+               $this->assertEquals(
+                       strval( $expectedDate ),
+                       strval( $en->userAdjust( $inputDate, '' ) ),
+                       "User adjust {$inputDate} with timezone {$timezone} should give {$expectedDate}"
+               );
+       }
+
+       function dataUserAdjustWithTimezone() {
+               return array(
+                       array( 20111028233711, 'Europe/Warsaw', 20111029013711 ),
+                       array( 20111108205929, 'Europe/Warsaw', 20111108215929 ),
+               );
        }
+
 }
index f62ac5d..6cf33f1 100644 (file)
@@ -643,8 +643,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                // quickUserCan should ignore user blocks
                $this->assertEquals( true, $this->title->quickUserCan( 'move-target' ) );
 
-               global $wgLocalTZoffset;
+               global $wgLocalTZoffset, $wgLocaltimezone;
                $wgLocalTZoffset = -60;
+               $wgLocaltimezone = 'DummyTimezoneSoUserAdjustWillUseTzOffset';
+
                $this->user->mBlockedby = $this->user->getName();
                $this->user->mBlock = new Block( '127.0.8.1', 0, 1, 'no reason given', $now, 0, 10 );
                $this->assertEquals( array( array( 'blockedtext',