Half hour time zones
authorTim Starling <tstarling@users.mediawiki.org>
Mon, 26 Jan 2004 02:55:07 +0000 (02:55 +0000)
committerTim Starling <tstarling@users.mediawiki.org>
Mon, 26 Jan 2004 02:55:07 +0000 (02:55 +0000)
includes/SpecialPreferences.php
languages/Language.php
stylesheets/wikibits.js

index cbfb1b6..902b919 100644 (file)
@@ -56,7 +56,28 @@ function wfSpecialPreferences()
        }
 }
 
-
+/* private */ function validateTimeZone( $s )
+{
+       
+       if ( $s !== "" ) {
+               if ( strpos( $s, ":" ) ) {
+                       # HH:MM
+                       $array = explode( ":" , $s );
+                       $hour = intval( $array[0] );
+                       $minute = intval( $array[1] );
+               } else {
+                       $minute = intval( $s * 60 );
+                       $hour = intval( $minute / 60 );
+                       $minute = abs( $minute ) % 60;
+               }
+               $hour = min( $hour, 15 );
+               $hour = max( $hour, -15 );
+               $minute = min( $minute, 59 );
+               $minute = max( $minute, 0 );
+               $s = sprintf( "%02d:%02d", $hour, $minute );
+       }
+       return $s;
+}
 
 /* private */ function savePreferences()
 {
@@ -93,7 +114,7 @@ function wfSpecialPreferences()
        $wgUser->setOption( "rows", validateInt( $wpRows, 4, 1000 ) );
        $wgUser->setOption( "cols", validateInt( $wpCols, 4, 1000 ) );
        $wgUser->setOption( "stubthreshold", validateIntOrNull( $wpStubs ) );
-       $wgUser->setOption( "timecorrection", validateIntOrNull( $wpHourDiff, -12, 14 ) );
+       $wgUser->setOption( "timecorrection", validateTimeZone( $wpHourDiff, -12, 14 ) );
        
        $namespaces = $wgLang->getNamespaces();
        # Set search namespace options
index 9b54441..8fa96b1 100644 (file)
@@ -1436,16 +1436,26 @@ class Language {
        {
                global $wgUser, $wgLocalTZoffset;
 
-               $diff = $wgUser->getOption( "timecorrection" );
-               if ( ! is_numeric( $diff ) ) {
-                       $diff = isset( $wgLocalTZoffset ) ? $wgLocalTZoffset : 0;
+               $tz = $wgUser->getOption( "timecorrection" );
+               if ( $tz === "" ) {
+                       $hrDiff = isset( $wgLocalTZoffset ) ? $wgLocalTZoffset : 0;
+                       $minDiff = 0;           
+               } elseif ( strpos( $tz, ":" ) !== false ) {
+                       $tzArray = explode( ":", $tz );
+                       $hrDiff = intval($tzArray[0]);
+                       $minDiff = intval($hrDiff < 0 ? -$tzArray[1] : $tzArray[1]);
+               } else {
+                       $hrDiff = intval( $tz );
                }
-               if ( 0 == $diff ) { return $ts; }
-
-               $t = mktime( ( (int)substr( $ts, 8, 2) ) + $diff,
-                 (int)substr( $ts, 10, 2 ), (int)substr( $ts, 12, 2 ),
-                 (int)substr( $ts, 4, 2 ), (int)substr( $ts, 6, 2 ),
-                 (int)substr( $ts, 0, 4 ) );
+               if ( 0 == $hrDiff && 0 == $minDiff ) { return $ts; }
+
+               $t = mktime( ( 
+                 (int)substr( $ts, 8, 2) ) + $hrDiff, # Hours
+                 (int)substr( $ts, 10, 2 ) + $minDiff, # Minutes
+                 (int)substr( $ts, 12, 2 ), # Seconds
+                 (int)substr( $ts, 4, 2 ), # Month
+                 (int)substr( $ts, 6, 2 ), # Day
+                 (int)substr( $ts, 0, 4 ) ); #Year
                return date( "YmdHis", $t );
        }
  
index bcd9ade..a76aeb2 100644 (file)
@@ -31,7 +31,7 @@ function checkTimezone( tz, msg ) {
        }
 }
 
-// in [-][H]H format...
+// in [-]HH:MM format...
 // won't yet work with non-even tzs
 function fetchTimezone() {
        // FIXME: work around Safari bug
@@ -39,7 +39,9 @@ function fetchTimezone() {
        // returns negative offset from GMT in minutes
        var tzRaw = localclock.getTimezoneOffset();
        var tzHour = Math.floor( Math.abs(tzRaw) / 60);
-       var tzString = ((tzRaw >= 0) ? "-" : "") + ((tzHour < 10) ? "" : "0") + tzHour;
+       var tzMin = Math.abs(tzRaw) % 60;
+       var tzString = ((tzRaw >= 0) ? "-" : "") + ((tzHour < 10) ? "0" : "") + tzHour + 
+               ":" + ((tzMin < 10) ? "0" : "") + tzMin;
        return tzString;
 }