[LON-CAPA-cvs] cvs: loncom /interface lonhtmlcommon.pm

bisitz bisitz@source.lon-capa.org
Fri, 11 Dec 2009 17:25:01 -0000


bisitz		Fri Dec 11 17:25:01 2009 EDT

  Modified files:              
    /loncom/interface	lonhtmlcommon.pm 
  Log:
  - Corrected date setting logic:
    Empty date/time fields are not initialized anymore with current time, if empty fields are explicitly requested.
    This fixes bug 5795.
  - Overhauled code: simplified code structure
  - Added comments to code
  
  
Index: loncom/interface/lonhtmlcommon.pm
diff -u loncom/interface/lonhtmlcommon.pm:1.253 loncom/interface/lonhtmlcommon.pm:1.254
--- loncom/interface/lonhtmlcommon.pm:1.253	Thu Dec  3 02:13:28 2009
+++ loncom/interface/lonhtmlcommon.pm	Fri Dec 11 17:25:01 2009
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common html routines
 #
-# $Id: lonhtmlcommon.pm,v 1.253 2009/12/03 02:13:28 www Exp $
+# $Id: lonhtmlcommon.pm,v 1.254 2009/12/11 17:25:01 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -383,7 +383,8 @@
 
 The current setting for this time parameter.  A unix format time
 (time in seconds since the beginning of Jan 1st, 1970, GMT.  
-An undefined value is taken to indicate the value is the current time.
+An undefined value is taken to indicate the value is the current time
+unless it is requested to leave it empty. See $includeempty. 
 Also, to be explicit, a value of 'now' also indicates the current time.
 
 =item $special
@@ -393,6 +394,9 @@
 
 =item $includeempty 
 
+If it is set (true) and no date/time value is provided,
+the date/time fields are left empty.
+
 =item $state
 
 Specifies the initial state of the form elements.  Either 'disabled' or empty.
@@ -412,42 +416,40 @@
     my ($formname,$dname,$currentvalue,$special,$includeempty,$state,
         $no_hh_mm_ss,$defhour,$defmin,$defsec,$nolink) = @_;
     my $now = time;
-    my $wasdefined=1;
+
+    my $tzname;
+    my ($sec,$min,$hour,$mday,$month,$year) = ('','',undef,'','','');
+    # other potentially useful values:     wkday,yrday,is_daylight_savings
+
     if (! defined($state) || $state ne 'disabled') {
         $state = '';
     }
     if (! defined($no_hh_mm_ss)) {
         $no_hh_mm_ss = 0;
     }
+    
     if ($currentvalue eq 'now') {
-	$currentvalue = $now;
+        $currentvalue = $now;
     }
-    if ((!defined($currentvalue)) || ($currentvalue eq '')) {
-	$wasdefined=0;
-	if ($includeempty) {
-	    $currentvalue = 0;
-	} else {
-	    $currentvalue = $now;
-	}
+        
+    # Default value: Set empty date field to current time
+    # unless empty inclusion is requested
+    if ((!$includeempty) && (!$currentvalue)) {
+            $currentvalue = $now;
     }
-    # other potentially useful values:     wkday,yrday,is_daylight_savings
-    my $tzname;
-    my ($sec,$min,$hour,$mday,$month,$year)=('','',undef,'','','');
+    # Do we have a date? Split it!
     if ($currentvalue) {
-        ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($currentvalue); 
-    }
-    unless ($wasdefined) {
-        ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($now);
-	if (($defhour) || ($defmin) || ($defsec)) {
-	    $sec=($defsec?$defsec:0);
-	    $min=($defmin?$defmin:0);
-	    $hour=($defhour?$defhour:0);
-	} elsif (!$includeempty) {
-	    $sec=0;
-	    $min=0;
-	    $hour=0;
-	}
+        ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($currentvalue);
+
+        # No values provided for hour, min, sec? Use default 0
+        if (($defhour) || ($defmin) || ($defsec)) {
+            $sec  = ($defsec  ? $defsec  : 0);
+            $min  = ($defmin  ? $defmin  : 0);
+            $hour = ($defhour ? $defhour : 0);
+        }
     }
+
+    # Create Output
     my $result = "\n<!-- $dname date setting form -->\n";
     $result .= <<ENDJS;
 <script type="text/javascript">