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

matthew lon-capa-cvs@mail.lon-capa.org
Tue, 17 Sep 2002 15:32:46 -0000


This is a MIME encoded message

--matthew1032276766
Content-Type: text/plain

matthew		Tue Sep 17 11:32:46 2002 EDT

  Modified files:              
    /loncom/interface	lonhtmlcommon.pm 
  Log:
  Finally checking in some changes made a while ago.  Added POD header.
  Added &date_setter and &get_date_from_form which are used in londropadd
  to get and set date information.
  
  
--matthew1032276766
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20020917113246.txt"

Index: loncom/interface/lonhtmlcommon.pm
diff -u loncom/interface/lonhtmlcommon.pm:1.9 loncom/interface/lonhtmlcommon.pm:1.10
--- loncom/interface/lonhtmlcommon.pm:1.9	Fri Aug 30 11:35:08 2002
+++ loncom/interface/lonhtmlcommon.pm	Tue Sep 17 11:32:46 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common html routines
 #
-# $Id: lonhtmlcommon.pm,v 1.9 2002/08/30 15:35:08 stredwic Exp $
+# $Id: lonhtmlcommon.pm,v 1.10 2002/09/17 15:32:46 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -25,11 +25,230 @@
 #
 # http://www.lon-capa.org/
 #
+######################################################################
+######################################################################
+
+=pod
+
+=head1 NAME
+
+Apache::lonhtmlcommon - routines to do common html things
+
+=head1 SYNOPSIS
+
+Referenced by other mod_perl Apache modules.
+
+=head1 INTRODUCTION
+
+lonhtmlcommon is a collection of subroutines used to present information
+in a consistent html format, or provide other functionality related to
+html.
+
+=head2 General Subroutines
+
+=over 4
+
+=cut 
+
+######################################################################
+######################################################################
 
 package Apache::lonhtmlcommon;
 
+use Time::Local;
 use strict;
 
+##############################################
+##############################################
+
+=pod
+
+=item &date_setter
+
+Inputs
+
+=over 4
+
+=item $dname 
+
+The name to prepend to the form elements.  
+The form elements defined will be dname_year, dname_month, dname_day,
+dname_hour, dname_min, and dname_sec.
+
+=item $currentvalue
+
+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.
+Also, to be explicit, a value of 'now' also indicates the current time.
+
+=cut
+
+##############################################
+##############################################
+sub date_setter {
+    my ($formname,$dname,$currentvalue) = @_;
+    if (! defined($currentvalue) || $currentvalue eq 'now') {
+        $currentvalue = time;
+    }
+    # other potentially useful values:     wkday,yrday,is_daylight_savings
+    my ($sec,$min,$hour,$mday,$month,$year,undef,undef,undef) = 
+        localtime($currentvalue);
+    $year += 1900;
+    my $result = "\n<!-- $dname date setting form -->\n";
+    $result .= <<ENDJS;
+<script language="Javascript">
+    function $dname\_checkday() {
+        var day   = document.$formname.$dname\_day.value;
+        var month = document.$formname.$dname\_month.value;
+        var year  = document.$formname.$dname\_year.value;
+        var valid = true;
+        if (day < 1) {
+            document.$formname.$dname\_day.value = 1;
+        } 
+        if (day > 31) {
+            document.$formname.$dname\_day.value = 31;
+        }
+        if ((month == 1)  || (month == 3)  || (month == 5)  ||
+            (month == 7)  || (month == 8)  || (month == 10) ||
+            (month == 12)) {
+            if (day > 31) {
+                document.$formname.$dname\_day.value = 31;
+                day = 31;
+            }
+        } else if (month == 2 ) {
+            if ((year % 4 == 0) && (year % 100 != 0)) {
+                if (day > 29) {
+                    document.$formname.$dname\_day.value = 29;
+                }
+            } else if (day > 29) {
+                document.$formname.$dname\_day.value = 28;
+            }
+        } else if (day > 30) {
+            document.$formname.$dname\_day.value = 30;
+        }
+    }
+</script>
+ENDJS
+    $result .= "  <select name=\"$dname\_month\" ".
+        "onChange=\"javascript:$dname\_checkday()\" >\n";
+    my @Months = qw/January February  March     April   May      June 
+                    July    August    September October November December/;
+    # Pad @Months with a bogus value to make indexing easier
+    unshift(@Months,'If you can read this an error occurred');
+    for(my $m = 1;$m <=$#Months;$m++) {
+        $result .= "      <option value=\"$m\" ";
+        $result .= "selected " if ($m-1 == $month);
+        $result .= "> $Months[$m] </option>\n";
+    }
+    $result .= "  </select>\n";
+    $result .= "  <input type=\"text\" name=\"$dname\_day\" ".
+            "value=\"$mday\" size=\"3\" ".
+            "onChange=\"javascript:$dname\_checkday()\" />\n";
+    $result .= "  <input type=\"year\" name=\"$dname\_year\" ".
+            "value=\"$year\" size=\"5\" ".
+            "onChange=\"javascript:$dname\_checkday()\" />\n";
+    $result .= "&nbsp;&nbsp;";
+    $result .= "  <select name=\"$dname\_hour\" >\n";
+    for (my $h = 0;$h<24;$h++) {
+        $result .= "      <option value=\"$h\" ";
+        $result .= "selected " if ($hour == $h);
+        $result .= "> ";
+        if ($h == 0) {
+            $result .= "12 am";
+        } elsif($h == 12) {
+            $result .= "12 noon";
+        } elsif($h < 12) {
+            $result .= "$h am";
+        } else {
+            $result .= $h-12 ." pm";
+        }
+        $result .= " </option>\n";
+    } 
+    $result .= "  </select>\n";
+    $result .= "  <input type=\"text\" name=\"$dname\_minute\" ".
+        "value=\"$min\" size=\"3\" /> m\n";
+    $result .= "  <input type=\"text\" name=\"$dname\_second\" ".
+        "value=\"$sec\" size=\"3\" /> s\n";
+    $result .= "<!-- end $dname date setting form -->\n";
+    return $result;
+}
+
+##############################################
+##############################################
+
+=item &get_date_from_form
+
+Inputs:
+
+=over 4
+
+=item $dname
+
+The name passed to &datesetter, which prefixes the form elements.
+
+=item $defaulttime
+
+The unix time to use as the default in case of poor inputs.
+
+=back
+
+Returns: Unix time represented in the form.
+
+=cut
+
+##############################################
+##############################################
+sub get_date_from_form {
+    my ($dname) = @_;
+    my ($sec,$min,$hour,$day,$month,$year);
+    #
+    if (defined($ENV{'form.'.$dname.'_second'})) {
+        my $tmpsec = $ENV{'form.'.$dname.'_second'};
+        if (($tmpsec =~ /^\d+$/) && ($tmpsec >= 0) && ($tmpsec < 60)) {
+            $sec = $tmpsec;
+        }
+    }
+    if (defined($ENV{'form.'.$dname.'_minute'})) {
+        my $tmpmin = $ENV{'form.'.$dname.'_minute'};
+        if (($tmpmin =~ /^\d+$/) && ($tmpmin >= 0) && ($tmpmin < 60)) {
+            $min = $tmpmin;
+        }
+    }
+    if (defined($ENV{'form.'.$dname.'_hour'})) {
+        my $tmphour = $ENV{'form.'.$dname.'_hour'};
+        if (($tmphour =~ /^\d+$/) && ($tmphour > 0) && ($tmphour < 32)) {
+            $hour = $tmphour;
+        }
+    }
+    if (defined($ENV{'form.'.$dname.'_day'})) {
+        my $tmpday = $ENV{'form.'.$dname.'_day'};
+        if (($tmpday =~ /^\d+$/) && ($tmpday > 0) && ($tmpday < 32)) {
+            $day = $tmpday;
+        }
+    }
+    if (defined($ENV{'form.'.$dname.'_month'})) {
+        my $tmpmonth = $ENV{'form.'.$dname.'_month'};
+        if (($tmpmonth =~ /^\d+$/) && ($tmpmonth > 0) && ($tmpmonth < 13)) {
+            $month = $tmpmonth - 1;
+        }
+    }
+    if (defined($ENV{'form.'.$dname.'_year'})) {
+        my $tmpyear = $ENV{'form.'.$dname.'_year'};
+        if (($tmpyear =~ /^\d+$/) && ($tmpyear > 1900)) {
+            $year = $tmpyear - 1900;
+        }
+    }
+    if (eval(&timelocal($sec,$min,$hour,$day,$month,$year))) {
+        return &timelocal($sec,$min,$hour,$day,$month,$year);
+    } else {
+        return undef;
+    }
+}
+
+##############################################
+##############################################
+
 sub AscendOrderOptions {
     my ($order, $page, $formName)=@_;
 
@@ -309,7 +528,7 @@
 
 =item &FormatStudentInformation()
 
-This function produces a formatted string of the student's information:
+This function produces a formatted string of the student\'s information:
 username, domain, section, full name, and PID.
 
 =over 4

--matthew1032276766--