File:  [LON-CAPA] / loncom / interface / lonhtmlcommon.pm
Revision 1.9: download - view: text, annotated - select for diffs
Fri Aug 30 15:35:08 2002 UTC (21 years, 9 months ago) by stredwic
Branches: MAIN
CVS tags: HEAD
Fixed an error for map selection in problem statistics.  Added a new
module that will display a graph of percentage correctness for
a problem or series of problems based on input.  It doesn't quite
look correct yet, because of graph.gif.  I will have to edit graph.gif
in order to get ranges for the x axis etc.  This was also an
experiment to see multiple dependent selections.  Will probably do
that with student assessment next, but with students.

    1: # The LearningOnline Network with CAPA
    2: # a pile of common html routines
    3: #
    4: # $Id: lonhtmlcommon.pm,v 1.9 2002/08/30 15:35:08 stredwic Exp $
    5: #
    6: # Copyright Michigan State University Board of Trustees
    7: #
    8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
    9: #
   10: # LON-CAPA is free software; you can redistribute it and/or modify
   11: # it under the terms of the GNU General Public License as published by
   12: # the Free Software Foundation; either version 2 of the License, or
   13: # (at your option) any later version.
   14: #
   15: # LON-CAPA is distributed in the hope that it will be useful,
   16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
   17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   18: # GNU General Public License for more details.
   19: #
   20: # You should have received a copy of the GNU General Public License
   21: # along with LON-CAPA; if not, write to the Free Software
   22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   23: #
   24: # /home/httpd/html/adm/gpl.txt
   25: #
   26: # http://www.lon-capa.org/
   27: #
   28: 
   29: package Apache::lonhtmlcommon;
   30: 
   31: use strict;
   32: 
   33: sub AscendOrderOptions {
   34:     my ($order, $page, $formName)=@_;
   35: 
   36:     my $OpSel1 = '';
   37:     my $OpSel2 = '';
   38: 
   39:     if($order eq 'Ascending') {
   40:         $OpSel1 = ' selected';
   41:     } else {
   42:         $OpSel2 = ' selected';
   43:     }
   44: 
   45:     my $Str = '';
   46:     $Str .= '<select name="'.(($page)?$page:'').'Ascend"';
   47:     if($formName) {
   48:         $Str .= ' onchange="document.'.$formName.'.submit()"';
   49:     }
   50:     $Str .= '>'."\n";
   51:     $Str .= '<option'.$OpSel1.'>Ascending</option>'."\n".
   52: 	    '<option'.$OpSel2.'>Descending</option>'."\n";
   53:     $Str .= '</select>'."\n";
   54: 
   55:     return $Str;
   56: }
   57: 
   58: sub MapOptions {
   59:     my ($data, $page, $formName)=@_;
   60:     my $Str = '';
   61:     $Str .= '<select name="';
   62:     $Str .= (($page)?$page:'').'Maps"';
   63:     if($formName) {
   64:         $Str .= ' onchange="document.'.$formName.'.submit()"';
   65:     }
   66:     $Str .= '>'."\n";
   67: 
   68:     my $selected = 0;
   69:     foreach my $sequence (split(':',$data->{'orderedSequences'})) {
   70: 	$Str .= '<option';
   71:         if($data->{$page.'Maps'} eq $data->{$sequence.':title'}) {
   72:             $Str .= ' selected';
   73:             $selected = 1;
   74:         }
   75: 	$Str .= '>'.$data->{$sequence.':title'}.'</option>'."\n";	     
   76:     }
   77:     $Str .= '<option';
   78:     if(!$selected) {
   79:         $Str .= ' selected';
   80:     }
   81:     $Str .= '>All Maps</option>'."\n";
   82: 
   83:     $Str .= '</select>'."\n";
   84: 
   85:     return $Str;
   86: }
   87: 
   88: sub ProblemOptions {
   89:     my ($data, $page, $map, $formName)=@_;
   90:     my $Str = '';
   91:     $Str .= '<select name="';
   92:     $Str .= (($page)?$page:'').'ProblemSelect"';
   93:     if($formName) {
   94:         $Str .= ' onchange="document.'.$formName.'.submit()"';
   95:     }
   96:     $Str .= '>'."\n";
   97: 
   98:     my $selected = 0;
   99:     foreach my $sequence (split(':',$data->{'orderedSequences'})) {
  100: 	if($data->{$sequence.':title'} eq $map || $map eq 'All Maps') {
  101: 	    foreach my $problem (split(':', $data->{$sequence.':problems'})) {
  102: 		$Str .= '<option';
  103: 		if($data->{$page.'ProblemSelect'} eq 
  104: 		   $data->{$problem.':title'}) {
  105: 		    $Str .= ' selected';
  106: 		    $selected = 1;
  107: 		}
  108: 		$Str .= '>'.$data->{$problem.':title'}.'</option>'."\n";
  109: 	    }
  110: 	}
  111:     }
  112:     $Str .= '<option';
  113:     if(!$selected) {
  114:         $Str .= ' selected';
  115:     }
  116:     $Str .= '>All Problems</option>'."\n";
  117: 
  118:     $Str .= '</select>'."\n";
  119: 
  120:     return $Str;
  121: }
  122: 
  123: sub PartOptions {
  124:     my ($data, $page, $parts, $formName)=@_;
  125:     my $Str = '';
  126: 
  127:     if(!defined($parts)) {
  128: 	return '';
  129:     }
  130: 
  131:     $Str .= '<select name="';
  132:     $Str .= (($page)?$page:'').'PartSelect"';
  133:     if($formName) {
  134:         $Str .= ' onchange="document.'.$formName.'.submit()"';
  135:     }
  136:     $Str .= '>'."\n";
  137: 
  138:     my $selected = 0;
  139:     foreach my $part (@$parts) {
  140: 	$Str .= '<option';
  141: 	if($data->{$page.'PartSelect'} eq $part) {
  142: 	    $Str .= ' selected';
  143: 	    $selected = 1;
  144: 	}
  145: 	$Str .= '>'.$part.'</option>'."\n";	     
  146:     }
  147:     $Str .= '<option';
  148:     if(!$selected) {
  149:         $Str .= ' selected';
  150:     }
  151:     $Str .= '>All Parts</option>'."\n";
  152: 
  153:     $Str .= '</select>'."\n";
  154: 
  155:     return $Str;
  156: }
  157: 
  158: sub StudentOptions {
  159:     my ($cache, $students, $selectedName, $page, $formName)=@_;
  160: 
  161:     my $Str = '';
  162:     $Str .= '<select name="'.(($page)?$page:'').'Student"';
  163:     if($formName) {
  164:         $Str .= ' onchange="document.'.$formName.'.submit()"';
  165:     }
  166:     $Str .= '>'."\n";
  167: 
  168:     my $selected=0;
  169: 
  170:     foreach (@$students) {
  171: 	$Str .= '<option';
  172: 	if($selectedName eq $_) {
  173:             $Str .= ' selected';
  174:             $selected = 1;
  175:         }
  176:         $Str .= '>';
  177:         $Str .= $cache->{$_.':fullname'};
  178:         $Str .= '</option>'."\n";	     
  179:     }
  180: 
  181:     $Str .= '<option';
  182:     if($selectedName eq 'No Student Selected') {
  183:         $Str .= ' selected';
  184:         $selected = 1;
  185:     }
  186:     $Str .= '>No Student Selected</option>'."\n";
  187: 
  188:     $Str .= '<option';
  189:     if(!$selected) {
  190:         $Str .= ' selected';
  191:     }
  192:     $Str .= '>All Students</option>'."\n";
  193: 
  194:     $Str .= '</select>'."\n";
  195: 
  196:     return $Str;
  197: }
  198: 
  199: sub StatusOptions {
  200:     my ($status, $formName)=@_;
  201: 
  202:     my $OpSel1 = '';
  203:     my $OpSel2 = '';
  204:     my $OpSel3 = '';
  205: 
  206:     if($status eq 'Any')         { $OpSel3 = ' selected'; }
  207:     elsif($status eq 'Expired' ) { $OpSel2 = ' selected'; }
  208:     else                         { $OpSel1 = ' selected'; }
  209: 
  210:     my $Str = '';
  211:     $Str .= '<select name="Status"';
  212:     if(defined($formName) && $formName ne '') {
  213:         $Str .= ' onchange="document.'.$formName.'.submit()"';
  214:     }
  215:     $Str .= '>'."\n";
  216:     $Str .= '<option'.$OpSel1.'>Active</option>'."\n";
  217:     $Str .= '<option'.$OpSel2.'>Expired</option>'."\n";
  218:     $Str .= '<option'.$OpSel3.'>Any</option>'."\n";
  219:     $Str .= '</select>'."\n";
  220: }
  221: 
  222: sub MultipleSectionSelect {
  223:     my ($sections,$selectedSections)=@_;
  224: 
  225:     my $Str = '';
  226:     $Str .= '<select name="Section" multiple="true" size="4">'."\n";
  227: 
  228:     foreach (@$sections) {
  229:         $Str .= '<option';
  230:         foreach my $selected (@$selectedSections) {
  231:             if($_ eq $selected) {
  232:                 $Str .= ' selected=""';
  233:             }
  234:         }
  235:         $Str .= '>'.$_.'</option>'."\n";
  236:     }
  237:     $Str .= '</select>'."\n";
  238: 
  239:     return $Str;
  240: }
  241: 
  242: sub Title {
  243:     my ($pageName)=@_;
  244: 
  245:     my $Str = '';
  246: 
  247:     $Str .= '<html><head><title>'.$pageName.'</title></head>'."\n";
  248:     $Str .= &Apache::loncommon::bodytag($pageName)."\n";
  249:     $Str .= '<script>window.focus(); window.width=500;window.height=500;';
  250:     $Str .= '</script>'."\n";
  251: 
  252:     return $Str;
  253: }
  254: 
  255: =pod
  256: 
  257: =item &CreateTableHeadings()
  258: 
  259: This function generates the column headings for the chart.
  260: 
  261: =over 4
  262: 
  263: Inputs: $CacheData, $keyID, $headings, $spacePadding
  264: 
  265: $CacheData: pointer to a hash tied to the cached data database
  266: 
  267: $keyID: a pointer to an array containing the names of the data 
  268: held in a column and is used as part of a key into $CacheData
  269: 
  270: $headings: The names of the headings for the student information
  271: 
  272: $spacePadding: The spaces to go between columns
  273: 
  274: Output: $Str
  275: 
  276: $Str: A formatted string of the table column headings.
  277: 
  278: =back
  279: 
  280: =cut
  281: 
  282: sub CreateHeadings {
  283:     my ($data,$keyID,$headings,$displayString,$format)=@_;
  284:     my $Str='';
  285:     my $formatting = '';
  286: 
  287:     for(my $index=0; $index<(scalar @$headings); $index++) {
  288:  	my $currentHeading=$headings->[$index];
  289:         if($format eq 'preformatted') {
  290:             my @dataLength=split(//,$currentHeading);
  291:             my $length=scalar @dataLength;
  292:             $formatting = (' 'x
  293:                       ($data->{$keyID->[$index].':columnWidth'}-$length));
  294:         }
  295:         my $linkdata=$keyID->[$index];
  296: 
  297:         my $tempString = $displayString;
  298:         $tempString =~ s/LINKDATA/$linkdata/;
  299:         $tempString =~ s/DISPLAYDATA/$currentHeading/;
  300:         $tempString =~ s/FORMATTING/$formatting/;
  301: 
  302:         $Str .= $tempString;
  303:     }
  304: 
  305:     return $Str;
  306: }
  307: 
  308: =pod
  309: 
  310: =item &FormatStudentInformation()
  311: 
  312: This function produces a formatted string of the student's information:
  313: username, domain, section, full name, and PID.
  314: 
  315: =over 4
  316: 
  317: Input: $cache, $name, $keyID, $spacePadding
  318: 
  319: $cache: This is a pointer to a hash that is tied to the cached data
  320: 
  321: $name:  The name and domain of the current student in name:domain format
  322: 
  323: $keyID: A pointer to an array holding the names used to
  324: 
  325: remove data from the hash.  They represent the name of the data to be removed.
  326: 
  327: $spacePadding: Extra spaces that represent the space between columns
  328: 
  329: Output: $Str
  330: 
  331: $Str: Formatted string.
  332: 
  333: =back
  334: 
  335: =cut
  336: 
  337: sub FormatStudentInformation {
  338:     my ($data,$name,$keyID,$displayString,$format)=@_;
  339:     my $Str='';
  340:     my $currentColumn;
  341: 
  342:     for(my $index=0; $index<(scalar @$keyID); $index++) {
  343:         $currentColumn=$data->{$name.':'.$keyID->[$index]};
  344: 
  345:         if($format eq 'preformatted') {
  346:             my @dataLength=split(//,$currentColumn);
  347:             my $length=scalar @dataLength;
  348:             $currentColumn.= (' 'x
  349:                      ($data->{$keyID->[$index].':columnWidth'}-$length));
  350:         }
  351: 
  352:         my $tempString = $displayString;
  353:         $tempString =~ s/DISPLAYDATA/$currentColumn/;
  354: 
  355:         $Str .= $tempString;
  356:     }
  357: 
  358:     return $Str;
  359: }
  360: 
  361: # Create progress
  362: sub Create_PrgWin {
  363:     my ($r, $title, $heading)=@_;
  364:     $r->print('<script>'.
  365:     "popwin=open(\'\',\'popwin\',\'width=400,height=100\');".
  366:     "popwin.document.writeln(\'<html><body bgcolor=\"#88DDFF\">".
  367:               "<title>$title</title>".
  368:               "<h4>$heading</h4>".
  369:               "<form name=popremain>".
  370:               "<input type=text size=35 name=remaining value=Starting></form>".
  371:               "</body></html>\');".
  372:     "popwin.document.close();".
  373:     "</script>");
  374: 
  375:     $r->rflush();
  376: }
  377: 
  378: # update progress
  379: sub Update_PrgWin {
  380:     my ($displayString,$r)=@_;
  381:     $r->print('<script>popwin.document.popremain.remaining.value="'.
  382:               $displayString.'";</script>');
  383:     $r->rflush();
  384: }
  385: 
  386: # close Progress Line
  387: sub Close_PrgWin {
  388:     my ($r)=@_;
  389:     $r->print('<script>popwin.close()</script>'."\n");
  390:     $r->rflush(); 
  391: }
  392: 
  393: 1;
  394: __END__

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