From 3056b8dfd261f7fe431b5c634f691571835f5941 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Szymon=20=C5=9Awierkosz?= Date: Fri, 4 May 2012 18:59:16 +0200 Subject: [PATCH] (bug 32297) Use symbolic names, not offsets for a default timezone. Change-Id: I4a12487487bbb7897911b13068e2d7a1340e7206 --- languages/Language.php | 21 ++++--- tests/phpunit/includes/TimeAdjustTest.php | 63 ++++++++++++++----- .../phpunit/includes/TitlePermissionTest.php | 4 +- 3 files changed, 65 insertions(+), 23 deletions(-) diff --git a/languages/Language.php b/languages/Language.php index e6feb45edf..45176b80ba 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -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 ); diff --git a/tests/phpunit/includes/TimeAdjustTest.php b/tests/phpunit/includes/TimeAdjustTest.php index cd027c5b84..31304f35c5 100644 --- a/tests/phpunit/includes/TimeAdjustTest.php +++ b/tests/phpunit/includes/TimeAdjustTest.php @@ -1,31 +1,47 @@ 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 ), + ); } + } diff --git a/tests/phpunit/includes/TitlePermissionTest.php b/tests/phpunit/includes/TitlePermissionTest.php index f62ac5dd72..6cf33f1aae 100644 --- a/tests/phpunit/includes/TitlePermissionTest.php +++ b/tests/phpunit/includes/TitlePermissionTest.php @@ -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', -- 2.20.1