[LON-CAPA-cvs] cvs: loncom /localize lonlocal.pm

raeburn lon-capa-cvs-allow@mail.lon-capa.org
Wed, 02 Jul 2008 21:10:41 -0000


raeburn		Wed Jul  2 17:10:41 2008 EDT

  Modified files:              
    /loncom/localize	lonlocal.pm 
  Log:
  - Check the retrieved timezone is valid for the version of DateTime() on the server.
    If not default to local.  
  
  
Index: loncom/localize/lonlocal.pm
diff -u loncom/localize/lonlocal.pm:1.45 loncom/localize/lonlocal.pm:1.46
--- loncom/localize/lonlocal.pm:1.45	Sat May 31 19:37:49 2008
+++ loncom/localize/lonlocal.pm	Wed Jul  2 17:10:41 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Localization routines
 #
-# $Id: lonlocal.pm,v 1.45 2008/05/31 23:37:49 raeburn Exp $
+# $Id: lonlocal.pm,v 1.46 2008/07/02 21:10:41 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -165,6 +165,7 @@
 use locale;
 use POSIX qw(locale_h strftime);
 use DateTime();
+use DateTime::TimeZone;
 
 require Exporter;
 
@@ -267,17 +268,23 @@
 
 # ========================================================== Localize localtime
 sub gettimezone {
+    my $timezone; 
     if ($Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.timezone'}) {
-	return $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.timezone'};
+        $timezone = $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.timezone'};    
     } elsif ($Apache::lonnet::env{'request.course.id'} ne '') {
         my $cdom = $Apache::lonnet::env{'course.'.$Apache::lonnet::env{'request.course.id'}.'.domain'};
         if ($cdom ne '') {
             my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom);
             if ($domdefaults{'timezone_def'} ne '') {
-                return $domdefaults{'timezone_def'};
+                $timezone = $domdefaults{'timezone_def'};
             }
         }
     }
+    if ($timezone ne '') {
+        if (DateTime::TimeZone->is_valid_name($timezone)) {
+            return $timezone;
+        }
+    }
     return 'local';
 }