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, 8 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.

# 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 $
#
# Copyright Michigan State University Board of Trustees
#
# This file is part of the LearningOnline Network with CAPA (LON-CAPA).
#
# LON-CAPA is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# LON-CAPA is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with LON-CAPA; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# /home/httpd/html/adm/gpl.txt
#
# http://www.lon-capa.org/
#

package Apache::lonhtmlcommon;

use strict;

sub AscendOrderOptions {
    my ($order, $page, $formName)=@_;

    my $OpSel1 = '';
    my $OpSel2 = '';

    if($order eq 'Ascending') {
        $OpSel1 = ' selected';
    } else {
        $OpSel2 = ' selected';
    }

    my $Str = '';
    $Str .= '<select name="'.(($page)?$page:'').'Ascend"';
    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;
}

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';
        if($data->{$page.'Maps'} eq $data->{$sequence.':title'}) {
            $Str .= ' selected';
            $selected = 1;
        }
	$Str .= '>'.$data->{$sequence.':title'}.'</option>'."\n";	     
    }
    $Str .= '<option';
    if(!$selected) {
        $Str .= ' selected';
    }
    $Str .= '>All Maps</option>'."\n";

    $Str .= '</select>'."\n";

    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;
    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";

    return $Str;
}

sub PartOptions {
    my ($data, $page, $parts, $formName)=@_;
    my $Str = '';

    if(!defined($parts)) {
	return '';
    }

    $Str .= '<select name="';
    $Str .= (($page)?$page:'').'PartSelect"';
    if($formName) {
        $Str .= ' onchange="document.'.$formName.'.submit()"';
    }
    $Str .= '>'."\n";

    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;
}

sub StudentOptions {
    my ($cache, $students, $selectedName, $page, $formName)=@_;

    my $Str = '';
    $Str .= '<select name="'.(($page)?$page:'').'Student"';
    if($formName) {
        $Str .= ' onchange="document.'.$formName.'.submit()"';
    }
    $Str .= '>'."\n";

    my $selected=0;

    foreach (@$students) {
	$Str .= '<option';
	if($selectedName eq $_) {
            $Str .= ' selected';
            $selected = 1;
        }
        $Str .= '>';
        $Str .= $cache->{$_.':fullname'};
        $Str .= '</option>'."\n";	     
    }

    $Str .= '<option';
    if($selectedName eq 'No Student Selected') {
        $Str .= ' selected';
        $selected = 1;
    }
    $Str .= '>No Student Selected</option>'."\n";

    $Str .= '<option';
    if(!$selected) {
        $Str .= ' selected';
    }
    $Str .= '>All Students</option>'."\n";

    $Str .= '</select>'."\n";

    return $Str;
}

sub StatusOptions {
    my ($status, $formName)=@_;

    my $OpSel1 = '';
    my $OpSel2 = '';
    my $OpSel3 = '';

    if($status eq 'Any')         { $OpSel3 = ' selected'; }
    elsif($status eq 'Expired' ) { $OpSel2 = ' selected'; }
    else                         { $OpSel1 = ' selected'; }

    my $Str = '';
    $Str .= '<select name="Status"';
    if(defined($formName) && $formName ne '') {
        $Str .= ' onchange="document.'.$formName.'.submit()"';
    }
    $Str .= '>'."\n";
    $Str .= '<option'.$OpSel1.'>Active</option>'."\n";
    $Str .= '<option'.$OpSel2.'>Expired</option>'."\n";
    $Str .= '<option'.$OpSel3.'>Any</option>'."\n";
    $Str .= '</select>'."\n";
}

sub MultipleSectionSelect {
    my ($sections,$selectedSections)=@_;

    my $Str = '';
    $Str .= '<select name="Section" multiple="true" size="4">'."\n";

    foreach (@$sections) {
        $Str .= '<option';
        foreach my $selected (@$selectedSections) {
            if($_ eq $selected) {
                $Str .= ' selected=""';
            }
        }
        $Str .= '>'.$_.'</option>'."\n";
    }
    $Str .= '</select>'."\n";

    return $Str;
}

sub Title {
    my ($pageName)=@_;

    my $Str = '';

    $Str .= '<html><head><title>'.$pageName.'</title></head>'."\n";
    $Str .= &Apache::loncommon::bodytag($pageName)."\n";
    $Str .= '<script>window.focus(); window.width=500;window.height=500;';
    $Str .= '</script>'."\n";

    return $Str;
}

=pod

=item &CreateTableHeadings()

This function generates the column headings for the chart.

=over 4

Inputs: $CacheData, $keyID, $headings, $spacePadding

$CacheData: pointer to a hash tied to the cached data database

$keyID: a pointer to an array containing the names of the data 
held in a column and is used as part of a key into $CacheData

$headings: The names of the headings for the student information

$spacePadding: The spaces to go between columns

Output: $Str

$Str: A formatted string of the table column headings.

=back

=cut

sub CreateHeadings {
    my ($data,$keyID,$headings,$displayString,$format)=@_;
    my $Str='';
    my $formatting = '';

    for(my $index=0; $index<(scalar @$headings); $index++) {
 	my $currentHeading=$headings->[$index];
        if($format eq 'preformatted') {
            my @dataLength=split(//,$currentHeading);
            my $length=scalar @dataLength;
            $formatting = (' 'x
                      ($data->{$keyID->[$index].':columnWidth'}-$length));
        }
        my $linkdata=$keyID->[$index];

        my $tempString = $displayString;
        $tempString =~ s/LINKDATA/$linkdata/;
        $tempString =~ s/DISPLAYDATA/$currentHeading/;
        $tempString =~ s/FORMATTING/$formatting/;

        $Str .= $tempString;
    }

    return $Str;
}

=pod

=item &FormatStudentInformation()

This function produces a formatted string of the student's information:
username, domain, section, full name, and PID.

=over 4

Input: $cache, $name, $keyID, $spacePadding

$cache: This is a pointer to a hash that is tied to the cached data

$name:  The name and domain of the current student in name:domain format

$keyID: A pointer to an array holding the names used to

remove data from the hash.  They represent the name of the data to be removed.

$spacePadding: Extra spaces that represent the space between columns

Output: $Str

$Str: Formatted string.

=back

=cut

sub FormatStudentInformation {
    my ($data,$name,$keyID,$displayString,$format)=@_;
    my $Str='';
    my $currentColumn;

    for(my $index=0; $index<(scalar @$keyID); $index++) {
        $currentColumn=$data->{$name.':'.$keyID->[$index]};

        if($format eq 'preformatted') {
            my @dataLength=split(//,$currentColumn);
            my $length=scalar @dataLength;
            $currentColumn.= (' 'x
                     ($data->{$keyID->[$index].':columnWidth'}-$length));
        }

        my $tempString = $displayString;
        $tempString =~ s/DISPLAYDATA/$currentColumn/;

        $Str .= $tempString;
    }

    return $Str;
}

# Create progress
sub Create_PrgWin {
    my ($r, $title, $heading)=@_;
    $r->print('<script>'.
    "popwin=open(\'\',\'popwin\',\'width=400,height=100\');".
    "popwin.document.writeln(\'<html><body bgcolor=\"#88DDFF\">".
              "<title>$title</title>".
              "<h4>$heading</h4>".
              "<form name=popremain>".
              "<input type=text size=35 name=remaining value=Starting></form>".
              "</body></html>\');".
    "popwin.document.close();".
    "</script>");

    $r->rflush();
}

# update progress
sub Update_PrgWin {
    my ($displayString,$r)=@_;
    $r->print('<script>popwin.document.popremain.remaining.value="'.
              $displayString.'";</script>');
    $r->rflush();
}

# close Progress Line
sub Close_PrgWin {
    my ($r)=@_;
    $r->print('<script>popwin.close()</script>'."\n");
    $r->rflush(); 
}

1;
__END__

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