Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.16 and 1.24

version 1.16, 2003/03/07 19:09:11 version 1.24, 2003/06/18 15:02:20
Line 65  use strict; Line 65  use strict;
   
 =item &date_setter  =item &date_setter
   
   &date_setter returns html and javascript for a compact date-setting form.
   To retrieve values from it, use &get_date_from_form().
   
 Inputs  Inputs
   
 =over 4  =over 4
Line 82  The current setting for this time parame Line 85  The current setting for this time parame
 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.
 Also, to be explicit, a value of 'now' also indicates the current time.  Also, to be explicit, a value of 'now' also indicates the current time.
   
   =back
   
   Bugs
   
   The method used to restrict user input will fail in the year 2400.
   
 =cut  =cut
   
 ##############################################  ##############################################
Line 177  ENDJS Line 186  ENDJS
 ##############################################  ##############################################
 ##############################################  ##############################################
   
   =pod
   
 =item &get_date_from_form  =item &get_date_from_form
   
   get_date_from_form retrieves the date specified in an &date_setter form.
   
 Inputs:  Inputs:
   
 =over 4  =over 4
Line 239  sub get_date_from_form { Line 252  sub get_date_from_form {
             $year = $tmpyear - 1900;              $year = $tmpyear - 1900;
         }          }
     }      }
       if (($year<70) || ($year>137)) { return undef; }
     if (eval(&timelocal($sec,$min,$hour,$day,$month,$year))) {      if (eval(&timelocal($sec,$min,$hour,$day,$month,$year))) {
         return &timelocal($sec,$min,$hour,$day,$month,$year);          return &timelocal($sec,$min,$hour,$day,$month,$year);
     } else {      } else {
Line 249  sub get_date_from_form { Line 263  sub get_date_from_form {
 ##############################################  ##############################################
 ##############################################  ##############################################
   
 sub AscendOrderOptions {  =pod
     my ($order, $page, $formName)=@_;  
   
     my $OpSel1 = '';  
     my $OpSel2 = '';  
   
     if($order eq 'Ascending') {  =item &pjump_javascript_definition()
         $OpSel1 = ' selected';  
     } else {  
         $OpSel2 = ' selected';  
     }  
   
     my $Str = '';  Returns javascript defining the 'pjump' function, which opens up a
     $Str .= '<select name="'.(($page)?$page:'').'Ascend"';  parameter setting wizard.
     if($formName) {  
         $Str .= ' onchange="document.'.$formName.'.submit()"';  
     }  
     $Str .= '>'."\n";  
     $Str .= '<option'.$OpSel1.'>Ascending</option>'."\n".  
     '<option'.$OpSel2.'>Descending</option>'."\n";  
     $Str .= '</select>'."\n";  
   
     return $Str;  =cut
 }  
   
 sub MapOptions {  
     my ($data, $page, $formName)=@_;  
     my $Str = '';  
     $Str .= '<select name="';  
     $Str .= (($page)?$page:'').'Maps"';  
     if($formName) {  
         $Str .= ' onchange="document.'.$formName.'.submit()"';  
     }  
     $Str .= '>'."\n";  
   
     my $selected = 0;  ##############################################
     foreach my $sequence (split(':',$data->{'orderedSequences'})) {  ##############################################
  $Str .= '<option';  sub pjump_javascript_definition {
         if($data->{$page.'Maps'} eq $data->{$sequence.':title'}) {      my $Str = <<END;
             $Str .= ' selected';      function pjump(type,dis,value,marker,ret,call) {
             $selected = 1;          parmwin=window.open("/adm/rat/parameter.html?type="+escape(type)
         }                   +"&value="+escape(value)+"&marker="+escape(marker)
  $Str .= '>'.$data->{$sequence.':title'}.'</option>'."\n";                        +"&return="+escape(ret)
     }                   +"&call="+escape(call)+"&name="+escape(dis),"LONCAPAparms",
     $Str .= '<option';                   "height=350,width=350,scrollbars=no,menubar=no");
     if(!$selected) {  
         $Str .= ' selected';  
     }      }
     $Str .= '>All Maps</option>'."\n";  END
   
     $Str .= '</select>'."\n";  
   
     return $Str;      return $Str;
 }  }
   
 sub ProblemOptions {  ##############################################
     my ($data, $page, $map, $formName)=@_;  ##############################################
     my $Str = '';  
     $Str .= '<select name="';  
     $Str .= (($page)?$page:'').'ProblemSelect"';  
     if($formName) {  
         $Str .= ' onchange="document.'.$formName.'.submit()"';  
     }  
     $Str .= '>'."\n";  
   
     my $selected = 0;  =pod
     foreach my $sequence (split(':',$data->{'orderedSequences'})) {  
  if($data->{$sequence.':title'} eq $map || $map eq 'All Maps') {  
     foreach my $problem (split(':', $data->{$sequence.':problems'})) {  
  $Str .= '<option';  
  if($data->{$page.'ProblemSelect'} eq   
    $data->{$problem.':title'}) {  
     $Str .= ' selected';  
     $selected = 1;  
  }  
  $Str .= '>'.$data->{$problem.':title'}.'</option>'."\n";  
     }  
  }  
     }  
     $Str .= '<option';  
     if(!$selected) {  
         $Str .= ' selected';  
     }  
     $Str .= '>All Problems</option>'."\n";  
   
     $Str .= '</select>'."\n";  =item &javascript_nothing()
   
     return $Str;  Return an appropriate null for the users browser.  This is used
 }  as the first arguement for window.open calls when you want a blank
   window that you can then write to.
   
 sub PartOptions {  =cut
     my ($data, $page, $parts, $formName)=@_;  
     my $Str = '';  
   
     if(!defined($parts)) {  ##############################################
  return '';  ##############################################
   sub javascript_nothing {
       # mozilla and other browsers work with "''", but IE on mac does not.
       my $nothing = "''";
       my $user_browser;
       my $user_os;
       $user_browser = $ENV{'browser.type'} if (exists($ENV{'browser.type'}));
       $user_os      = $ENV{'browser.os'}   if (exists($ENV{'browser.os'}));
       if (! defined($user_browser) || ! defined($user_os)) {
           (undef,$user_browser,undef,undef,undef,$user_os) = 
                              &Apache::loncommon::decode_user_agent();
     }      }
       if ($user_browser eq 'explorer' && $user_os =~ 'mac') {
     $Str .= '<select name="';          $nothing = "'javascript:void(0);'";
     $Str .= (($page)?$page:'').'PartSelect"';  
     if($formName) {  
         $Str .= ' onchange="document.'.$formName.'.submit()"';  
     }      }
     $Str .= '>'."\n";      return $nothing;
   }
   
     my $selected = 0;  
     foreach my $part (@$parts) {  
  $Str .= '<option';  
  if($data->{$page.'PartSelect'} eq $part) {  
     $Str .= ' selected';  
     $selected = 1;  
  }  
  $Str .= '>'.$part.'</option>'."\n";       
     }  
     $Str .= '<option';  
     if(!$selected) {  
         $Str .= ' selected';  
     }  
     $Str .= '>All Parts</option>'."\n";  
   
     $Str .= '</select>'."\n";  ##############################################
   ##############################################
   
     return $Str;  =pod
 }  
   
 sub StudentOptions {  =item &StatusOptions()
     my ($cache, $students, $selectedName, $page, $formName)=@_;  
   
     my $Str = '';  Returns html for a selection box which allows the user to choose the
     $Str .= '<select name="'.(($page)?$page:'').'Student"';  enrollment status of students.  The selection box name is 'Status'.
     if($formName) {  
         $Str .= ' onchange="document.'.$formName.'.submit()"';  
     }  
     $Str .= '>'."\n";  
   
     my $selected=0;  Inputs:
   
     foreach (@$students) {  $status: the currently selected status.  If undefined the value of
  $Str .= '<option';  $ENV{'form.Status'} is taken.  If that is undefined, a value of 'Active'
  if($selectedName eq $_) {  is used.
             $Str .= ' selected';  
             $selected = 1;  
         }  
         $Str .= '>';  
         $Str .= $cache->{$_.':fullname'};  
         $Str .= '</option>'."\n";       
     }  
   
     $Str .= '<option';  $formname: The name of the form.  If defined the onchange attribute of
     if($selectedName eq 'No Student Selected') {  the selection box is set to document.$formname.submit().
         $Str .= ' selected';  
         $selected = 1;  
     }  
     $Str .= '>No Student Selected</option>'."\n";  
   
     $Str .= '<option';  $size: the size (number of lines) of the selection box.
     if(!$selected) {  
         $Str .= ' selected';  
     }  
     $Str .= '>All Students</option>'."\n";  
   
     $Str .= '</select>'."\n";  Returns: a perl string as described.
   
     return $Str;  =cut
 }  
   
   ##############################################
   ##############################################
 sub StatusOptions {  sub StatusOptions {
     my ($status, $formName)=@_;      my ($status, $formName,$size)=@_;
       $size = 1 if (!defined($size));
       if (! defined($status)) {
           $status = 'Active';
           $status = $ENV{'form.Status'} if (exists($ENV{'form.Status'}));
       }
   
     my $OpSel1 = '';      my $OpSel1 = '';
     my $OpSel2 = '';      my $OpSel2 = '';
Line 431  sub StatusOptions { Line 368  sub StatusOptions {
     if(defined($formName) && $formName ne '') {      if(defined($formName) && $formName ne '') {
         $Str .= ' onchange="document.'.$formName.'.submit()"';          $Str .= ' onchange="document.'.$formName.'.submit()"';
     }      }
       $Str .= ' size="'.$size.'" ';
     $Str .= '>'."\n";      $Str .= '>'."\n";
     $Str .= '<option'.$OpSel1.'>Active</option>'."\n";      $Str .= '<option value="Active" '.$OpSel1.'>'.
     $Str .= '<option'.$OpSel2.'>Expired</option>'."\n";          'Currently Enrolled</option>'."\n";
     $Str .= '<option'.$OpSel3.'>Any</option>'."\n";      $Str .= '<option value="Expired" '.$OpSel2.'>'.
           'Previously Enrolled</option>'."\n";
       $Str .= '<option value="Any" '.$OpSel3.'>'.
           'Any Enrollment Status</option>'."\n";
     $Str .= '</select>'."\n";      $Str .= '</select>'."\n";
 }  }
   
Line 638  sub FormatStudentInformation { Line 579  sub FormatStudentInformation {
 ########################################################  ########################################################
 ########################################################  ########################################################
   
   =pod
   
   =item Progess Window Handling Routines
   
   These routines handle the creation, update, increment, and closure of 
   progress windows.  The progress window reports to the user the number
   of items completed and an estimate of the time required to complete the rest.
   
   =over 4
   
   
   =item &Create_PrgWin
   
   Writes javascript to the client to open a progress window and returns a
   data structure used for bookkeeping.
   
   Inputs
   
   =over 4
   
   =item $r Apache request
   
   =item $title The title of the progress window
   
   =item $heading A description (usually 1 line) of the process being initiated.
   
   =item $number_to_do The total number of items being processed.
   
   =back
   
   Returns a hash containing the progress state data structure.
   
   
   =item &Update_PrgWin
   
   Updates the text in the progress indicator.  Does not increment the count.
   See &Increment_PrgWin.
   
   Inputs:
   
   =over 4
   
   =item $r Apache request
   
   =item $prog_state Pointer to the data structure returned by &Create_PrgWin
   
   =item $displaystring The string to write to the status indicator
   
   =back
   
   Returns: none
   
   
   =item Increment_PrgWin
   
   Increment the count of items completed for the progress window by 1.  
   
   Inputs:
   
   =over 4
   
   =item $r Apache request
   
   =item $prog_state Pointer to the data structure returned by Create_PrgWin
   
   =item $extraInfo A description of the items being iterated over.  Typically
   'student'.
   
   =back
   
   Returns: none
   
   
   =item Close_PrgWin
   
   Closes the progress window.
   
   Inputs:
   
   =over 4 
   
   =item $r Apache request
   
   =item $prog_state Pointer to the data structure returned by Create_PrgWin
   
   =back
   
   Returns: none
   
   =back
   
   =cut
   
   ########################################################
   ########################################################
   
 # Create progress  # Create progress
 sub Create_PrgWin {  sub Create_PrgWin {
     my ($r, $title, $heading, $number_to_do)=@_;      my ($r, $title, $heading, $number_to_do)=@_;
Line 654  sub Create_PrgWin { Line 691  sub Create_PrgWin {
   
     my %prog_state;      my %prog_state;
     $prog_state{'done'}=0;      $prog_state{'done'}=0;
     $prog_state{'firststart'}=time;      $prog_state{'firststart'}=&Time::HiRes::time();
     $prog_state{'laststart'}=time;      $prog_state{'laststart'}=&Time::HiRes::time();
     $prog_state{'max'}=$number_to_do;      $prog_state{'max'}=$number_to_do;
   
     $r->rflush();      $r->rflush();
Line 667  sub Update_PrgWin { Line 704  sub Update_PrgWin {
     my ($r,$prog_state,$displayString)=@_;      my ($r,$prog_state,$displayString)=@_;
     $r->print('<script>popwin.document.popremain.remaining.value="'.      $r->print('<script>popwin.document.popremain.remaining.value="'.
               $displayString.'";</script>');                $displayString.'";</script>');
     $$prog_state{'laststart'}=time;      $$prog_state{'laststart'}=&Time::HiRes::time();
     $r->rflush();      $r->rflush();
 }  }
   
Line 675  sub Update_PrgWin { Line 712  sub Update_PrgWin {
 sub Increment_PrgWin {  sub Increment_PrgWin {
     my ($r,$prog_state,$extraInfo)=@_;      my ($r,$prog_state,$extraInfo)=@_;
     $$prog_state{'done'}++;      $$prog_state{'done'}++;
     my $time_est= (time - $$prog_state{'firststart'})/$$prog_state{'done'} *      my $time_est= (&Time::HiRes::time() - $$prog_state{'firststart'})/
           $$prog_state{'done'} *
  ($$prog_state{'max'}-$$prog_state{'done'});   ($$prog_state{'max'}-$$prog_state{'done'});
     $time_est = int($time_est);      $time_est = int($time_est);
     if (int ($time_est/60) > 0) {      if (int ($time_est/60) > 0) {
Line 690  sub Increment_PrgWin { Line 728  sub Increment_PrgWin {
     } else {      } else {
  $time_est .= ' seconds';   $time_est .= ' seconds';
     }      }
       my $lasttime = &Time::HiRes::time()-$$prog_state{'laststart'};
       if ($lasttime > 9) {
           $lasttime = int($lasttime);
       } elsif ($lasttime < 0.01) {
           $lasttime = 0;
       } else {
           $lasttime = sprintf("%3.2f",$lasttime);
       }
       if ($lasttime == 1) {
           $lasttime = '('.$lasttime.' second for '.$extraInfo.')';
       } else {
           $lasttime = '('.$lasttime.' seconds for '.$extraInfo.')';
       }
     $r->print('<script>popwin.document.popremain.remaining.value="'.      $r->print('<script>popwin.document.popremain.remaining.value="'.
       $$prog_state{'done'}.'/'.$$prog_state{'max'}.        $$prog_state{'done'}.'/'.$$prog_state{'max'}.
       ': '.$time_est.' remaining ('.(time-$$prog_state{'laststart'}).        ': '.$time_est.' remaining '.$lasttime.'";'.'</script>');
       ' seconds for '.$extraInfo.')";'.'</script>');      $$prog_state{'laststart'}=&Time::HiRes::time();
     $$prog_state{'laststart'}=time;  
     $r->rflush();      $r->rflush();
 }  }
   
Line 708  sub Close_PrgWin { Line 757  sub Close_PrgWin {
 }  }
   
 1;  1;
   
 __END__  __END__

Removed from v.1.16  
changed lines
  Added in v.1.24


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>