--- loncom/interface/lonhelper.pm	2007/09/08 23:41:49	1.164
+++ loncom/interface/lonhelper.pm	2008/12/13 04:36:28	1.166.2.1
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # .helper XML handler to implement the LON-CAPA helper
 #
-# $Id: lonhelper.pm,v 1.164 2007/09/08 23:41:49 albertel Exp $
+# $Id: lonhelper.pm,v 1.166.2.1 2008/12/13 04:36:28 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -624,9 +624,9 @@ HEADER
             $result .= "<a href=\"$returnPage\">" . &mt("End Helper") . "</a>";
         }
         else {
-            $result .= '<nobr><input name="back" type="button" ';
+            $result .= '<span class="LC_nobreak"><input name="back" type="button" ';
             $result .= 'value="' . $previous . '" onclick="history.go(-1)" /> ';
-            $result .= '<input name="SUBMIT" type="submit" value="' . $next . '" /></nobr>';
+            $result .= '<input name="SUBMIT" type="submit" value="' . $next . '" /></span>';
         }
     }
 
@@ -643,9 +643,9 @@ HEADER
             $result .= "<a href=\"$returnPage\">" . &mt('End Helper') . "</a>";
         }
         else {
-            $result .= '<nobr><input name="back" type="button" ';
+            $result .= '<span class="LC_nobreak"><input name="back" type="button" ';
             $result .= 'value="' . $previous . '" onclick="history.go(-1)" /> ';
-            $result .= '<input name="SUBMIT" type="submit" value="' . $next . '" /></nobr>';
+            $result .= '<input name="SUBMIT" type="submit" value="' . $next . '" /></span>';
         }
     }
 
@@ -1725,7 +1725,7 @@ no strict;
 use strict;
 use Apache::lonlocal; # A localization nightmare
 use Apache::lonnet;
-use Time::localtime;
+use DateTime;
 
 BEGIN {
     &Apache::lonhelper::register('Apache::lonhelper::date',
@@ -1775,14 +1775,13 @@ sub render {
     my $time=time;
     my ($anytime,$onclick);
 
-
     # first check VARS for a valid new value from the user
     # then check DEFAULT_VALUE for a valid default time value
     # otherwise pick now as reasonably good time
 
     if (defined($helper->{VARS}{$var})
 	&&  $helper->{VARS}{$var} > 0) {
-	$date = localtime($helper->{VARS}{$var});
+        $date = &get_date_object($helper->{VARS}{$var}); 
     } elsif (defined($self->{DEFAULT_VALUE})) {
         my $valueFunc = eval($self->{DEFAULT_VALUE});
         die('Error in default value code for variable ' . 
@@ -1790,17 +1789,17 @@ sub render {
         $time = &$valueFunc($helper, $self);
 	if (lc($time) eq 'anytime') {
 	    $anytime=1;
-	    $date = localtime(time);
+	    $date = &get_date_object(time);
 	    $date->min(0);
 	} elsif (defined($time) && $time ne 0) {
-	    $date = localtime($time);
+	    $date = &get_date_object($time);
 	} else {
 	    # leave date undefined so it'll default to now
 	}
     }
 
     if (!defined($date)) {
-	$date = localtime(time);
+	$date = &get_date_object(time);
 	$date->min(0);
     }
 
@@ -1817,12 +1816,12 @@ sub render {
     my $i;
     $result .= "<select $onclick name='${var}month'>\n";
     for ($i = 0; $i < 12; $i++) {
-        if ($i == $date->mon) {
+        if (($i + 1) == $date->mon) {
             $result .= "<option value='$i' selected='selected'>";
         } else {
             $result .= "<option value='$i'>";
         }
-        $result .= &mt($months[$i]) . "</option>\n";
+        $result .= &mt($months[$i])."</option>\n";
     }
     $result .= "</select>\n";
 
@@ -1841,7 +1840,7 @@ sub render {
     # Year
     $result .= "<select $onclick name='${var}year'>\n";
     for ($i = 2000; $i < 2030; $i++) { # update this after 64-bit dates
-        if ($date->year + 1900 == $i) {
+        if ($date->year == $i) {
             $result .= "<option selected='selected'>";
         } else {
             $result .= "<option>";
@@ -1896,6 +1895,7 @@ sub render {
         }
         $result .= "</select>\n";
     }
+    $result  .= ' '.$date->time_zone_short_name().' ';
     if ($self->{'anytime'}) {
 	$result.=(<<CHECK);
 <script type="text/javascript">
@@ -1923,7 +1923,8 @@ sub postprocess {
     if ($env{'form.' . $var . 'anytime'}) {
 	$helper->{VARS}->{$var} = undef;
     } else {
-	my $month = $env{'form.' . $var . 'month'}; 
+	my $month = $env{'form.' . $var . 'month'};
+        $month ++;
 	my $day = $env{'form.' . $var . 'day'}; 
 	my $year = $env{'form.' . $var . 'year'}; 
 	my $min = 0; 
@@ -1933,25 +1934,40 @@ sub postprocess {
 	    $hour = $env{'form.' . $var . 'hour'};
 	}
 
-	my $chosenDate;
-	eval {$chosenDate = Time::Local::timelocal(0, $min, $hour, $day, $month, $year);};
+	my ($chosenDate,$checkDate);
+        my $timezone = &Apache::lonlocal::gettimezone();
+        my $dt;
+	eval {
+               $dt = DateTime->new( year   => $year,
+                                    month  => $month,
+                                    day    => $day,
+                                    hour   => $hour,
+                                    minute => $min,
+                                    second => 0,
+                                    time_zone => $timezone,
+                             );
+        };
+
 	my $error = $@;
+        if (!$error) {
+            $chosenDate  = $dt->epoch;
+            $checkDate = &get_date_object($chosenDate);
+        }
 
 	# Check to make sure that the date was not automatically co-erced into a 
 	# valid date, as we want to flag that as an error
 	# This happens for "Feb. 31", for instance, which is coerced to March 2 or
 	# 3, depending on if it's a leap year
-	my $checkDate = localtime($chosenDate);
 	
 	if ($error || $checkDate->mon != $month || $checkDate->mday != $day ||
-	    $checkDate->year + 1900 != $year) {
+	    $checkDate->year != $year) {
 	    unless (Apache::lonlocal::current_language()== ~/^en/) {
 		$self->{ERROR_MSG} = &mt("Invalid date entry");
 		return 0;
 	    }
 	    # LOCALIZATION FIXME: Needs to be parameterized
-	    $self->{ERROR_MSG} = "Can't use " . $months[$month] . " $day, $year as a "
-		. "date because it doesn't exist. Please enter a valid date.";
+	    $self->{ERROR_MSG} = "Can't use ".$months[$env{'form.'.$var.'month'}].                                 " $day, $year as a ".
+		                 "date because it doesn't exist. Please enter a valid date.";
 
 	    return 0;
 	}
@@ -1974,6 +1990,20 @@ sub postprocess {
 
     return 1;
 }
+
+sub get_date_object {
+    my ($epoch) = @_;
+    my $dt = DateTime->from_epoch(epoch => $epoch)
+                     ->set_time_zone(&Apache::lonlocal::gettimezone());
+    my $lang = Apache::lonlocal::current_language();
+    if ($lang ne '') {
+        eval {
+            $dt->set_locale($lang);
+        };
+    }
+    return $dt;
+}
+
 1;
 
 package Apache::lonhelper::resource;
@@ -2832,17 +2862,17 @@ BUTTONS
 	    &Apache::loncacc::constructaccess($subdir,
 				     $Apache::lonnet::perlvar{'lonDefDomain'});
 	$metadir='/res/'.$domain.'/'.$user.'/'.$2;
-        @fileList = &Apache::lonnet::dirlist($subdir, $domain, $user, '');
+        @fileList = &Apache::lonnet::dirlist($subdir,$domain,$user,undef,undef,'/');
     } elsif ($subdir =~ m|^~([^/]+)/(.*)$|) {
 	$subdir='/home/'.$1.'/public_html/'.$2;
 	my ($user,$domain)= 
 	    &Apache::loncacc::constructaccess($subdir,
 				     $Apache::lonnet::perlvar{'lonDefDomain'});
 	$metadir='/res/'.$domain.'/'.$user.'/'.$2;
-        @fileList = &Apache::lonnet::dirlist($subdir, $domain, $user, '');
+        @fileList = &Apache::lonnet::dirlist($subdir,$domain,$user,undef,undef,'/');
     } else {
         # local library server resource space
-        @fileList = &Apache::lonnet::dirlist($subdir, $env{'user.domain'}, $env{'user.name'}, '');
+        @fileList = &Apache::lonnet::dirlist($subdir,$env{'user.domain'},$env{'user.name'},undef,undef,'/');
     }
 
     # Sort the fileList into order
@@ -3744,7 +3774,8 @@ sub render {
 
     # Print value
     if ($vars->{ACTION_TYPE} ne 'tries' && $vars->{ACTION_TYPE} ne 'weight') {
-	$result .= '<li>'.&mt('to [_1] ([_2])',"<b>".ctime($vars->{PARM_DATE})."</b>",Apache::lonnavmaps::timeToHumanString($vars->{PARM_DATE}))."</li>\n";
+        my $showdate = &Apache::lonlocal::locallocaltime($vars->{PARM_DATE});
+	$result .= '<li>'.&mt('to [_1] ([_2])',"<b>".$showdate."</b>",Apache::lonnavmaps::timeToHumanString($vars->{PARM_DATE}))."</li>\n";
     }
  
     # print pres_marker