--- loncom/interface/lonhtmlcommon.pm 2002/07/26 16:22:09 1.5 +++ loncom/interface/lonhtmlcommon.pm 2003/03/03 21:52:24 1.14 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.5 2002/07/26 16:22:09 stredwic Exp $ +# $Id: lonhtmlcommon.pm,v 1.14 2003/03/03 21:52:24 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,21 +25,269 @@ # # 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\n"; + $result .= < + 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; + } + } + +ENDJS + $result .= " \n"; + $result .= "  "; + $result .= " s\n"; + $result .= "\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)=@_; + + my $OpSel1 = ''; + my $OpSel2 = ''; + + if($order eq 'Ascending') { + $OpSel1 = ' selected'; + } else { + $OpSel2 = ' selected'; + } + + my $Str = ''; + $Str .= ''."\n"; + + return $Str; +} + sub MapOptions { - my ($data, $page)=@_; + my ($data, $page, $formName)=@_; my $Str = ''; $Str .= '{'orderedSequences'})) { + if($data->{$sequence.':title'} eq $map || $map eq 'All Maps') { + foreach my $problem (split(':', $data->{$sequence.':problems'})) { + $Str .= '{$page.'ProblemSelect'} eq + $data->{$problem.':title'}) { + $Str .= ' selected'; + $selected = 1; + } + $Str .= '>'.$data->{$problem.':title'}.''."\n"; + } + } + } + $Str .= '{$page.'PartSelect'} eq $part) { + $Str .= ' selected'; + $selected = 1; + } + $Str .= '>'.$part.''."\n"; + } + $Str .= ''."\n"; } $Str .= ''."\n"; - + return $Str; } +######################################################## +######################################################## + +=pod + +=item &Title() + +Inputs: $pageName a string containing the name of the page to be sent +to &Apache::loncommon::bodytag. + +Returns: string containing being and complete and +as well as a <script> to focus the current window and change its width +and height to 500. Why? I do not know. If you find out, please update +this documentation. + +=cut + +######################################################## +######################################################## sub Title { my ($pageName)=@_; my $Str = ''; $Str .= '<html><head><title>'.$pageName.''."\n"; - $Str .= ''."\n"; + $Str .= &Apache::loncommon::bodytag($pageName)."\n"; $Str .= ''."\n"; - $Str .= '
'; - $Str .= '

Course: '; - $Str .= $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; - $Str .= '

'."\n"; - $Str .= ''; - $Str .= '
'."\n"; return $Str; } +######################################################## +######################################################## + =pod -=item &CreateTableHeadings() +=item &CreateHeadings() This function generates the column headings for the chart. @@ -186,6 +549,8 @@ $Str: A formatted string of the table co =cut +######################################################## +######################################################## sub CreateHeadings { my ($data,$keyID,$headings,$displayString,$format)=@_; my $Str=''; @@ -212,11 +577,14 @@ sub CreateHeadings { return $Str; } +######################################################## +######################################################## + =pod =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 @@ -241,6 +609,8 @@ $Str: Formatted string. =cut +######################################################## +######################################################## sub FormatStudentInformation { my ($data,$name,$keyID,$displayString,$format)=@_; my $Str=''; @@ -265,5 +635,64 @@ sub FormatStudentInformation { return $Str; } +######################################################## +######################################################## + +# Create progress +sub Create_PrgWin { + my ($r, $title, $heading, $number_to_do)=@_; + $r->print('"); + + my %prog_state; + $prog_state{'now'}=0; + $prog_state{'since'}=time; + $prog_state{'started'}=time; + $prog_state{'total'}=$number_to_do; + + $r->rflush(); + return %prog_state; +} + +# update progress +sub Update_PrgWin { + my ($r,$prog_state,$displayString)=@_; + $r->print(''); + $$prog_state{'started'}=time; + $r->rflush(); +} + +# increment progress state +sub Increment_PrgWin { + my ($r,$prog_state,$extraInfo)=@_; + $$prog_state{'now'}++; + $r->print(''); + $$prog_state{'started'}=time; + sleep 1; + $r->rflush(); +} + +# close Progress Line +sub Close_PrgWin { + my ($r,$prog_state)=@_; + $r->print(''."\n"); + undef(%$prog_state); + $r->rflush(); +} + 1; __END__