--- loncom/interface/statistics/lonstudentassessment.pm 2002/07/24 14:52:32 1.1 +++ loncom/interface/statistics/lonstudentassessment.pm 2002/12/06 21:11:48 1.19 @@ -1,12 +1,11 @@ # The LearningOnline Network with CAPA # (Publication Handler # -# $Id: lonstudentassessment.pm,v 1.1 2002/07/24 14:52:32 stredwic Exp $ +# $Id: lonstudentassessment.pm,v 1.19 2002/12/06 21:11:48 minaeibi 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 @@ -42,205 +41,679 @@ use Apache::lonhtmlcommon; use Apache::loncoursedata; use GDBM_File; -sub BuildStudentAssessmentPage { - my ($cacheDB, $students, $courseID, $c)=@_; +#my $jr; +sub BuildStudentAssessmentPage { + my ($cacheDB,$students,$courseID,$formName,$headings,$spacing, + $studentInformation,$r,$c)=@_; +# $jr = $r; my %cache; - - my $Ptr = ''; - $Ptr .= '
Select Map | '."\n"; - $Ptr .= ''; - $Ptr .= &Apache::lonhtmlcommon::MapOptions(\%cache, 'StudentAssessment'); - $Ptr .= ' | |||||||||||||||
Select Student | '."\n"; - $Ptr .= ''."\n"; - $Ptr .= &Apache::lonhtmlcommon::StudentOptions(\%cache, $students, - $selectedName, - 'StudentAssessment'); - $Ptr .= ' | |||||||||||||||
';
- $Ptr .= 'print($Str);
+ return;
}
+ $r->print(&CreateTableHeadings(\%cache, $spacing, $infoKeys, $infoHeadings,
+ $sequenceKeys, $sequenceHeadings));
+ untie(%cache);
+ if($c->aborted()) { return $Str; }
+
my $selected=0;
+ $r->print(''."\n"); foreach (@$students) { - next if ($_ ne $selectedName && + if($c->aborted()) { return $Str; } + next if ($_ ne $selectedName && $selectedName ne 'All Students'); $selected = 1; - my $courseData = - &Apache::loncoursedata::DownloadCourseInformation($_, $courseID); - last if ($c->aborted()); - if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_WRCREAT,0640)) { - &Apache::loncoursedata::ProcessStudentData(\%cache, - $courseData, $_); - if(!$c->aborted()) { $Ptr .= &StudentReport(\%cache, $_); } + + my @who = ($_); + next if(&Apache::loncoursedata::DownloadStudentCourseData(\@who, 'true', + $cacheDB, 'true', + 'false', $courseID, + $r, $c) ne 'OK'); + next if($c->aborted()); + + if(tie(%cache,'GDBM_File',$cacheDB,&GDBM_READER(),0640)) { + my @before=(); + my @after=(); + my @updateColumn=(); + my $foundUpdate = 0; + foreach(@$infoKeys) { + if(/updateTime/) { + $foundUpdate=1; + push(@updateColumn, $_); + next; + } + if($foundUpdate) { + push(@after, $_); + } else { + push(@before, $_); + } + } + my $displayString = 'DISPLAYDATA'.$spacing; + $r->print(&Apache::lonhtmlcommon::FormatStudentInformation( + \%cache, $_, + \@before, + $displayString, + 'preformatted')); + + if($foundUpdate) { + $displayString = ''; + $displayString .= ''; + $displayString .= 'DISPLAYDATA'.$spacing; + $r->print(&Apache::lonhtmlcommon::FormatStudentInformation( + \%cache, $_, + \@updateColumn, + $displayString, + 'preformatted')); + } + + $displayString = 'DISPLAYDATA'.$spacing; + $r->print(&Apache::lonhtmlcommon::FormatStudentInformation( + \%cache, $_, + \@after, + $displayString, + 'preformatted')); + $r->print(&StudentReport(\%cache, $_, $spacing, $sequenceKeys)); + $r->print("\n"); + $r->rflush(); untie(%cache); } } + + +# $r->print("AverageTtal"); +# $r->print(&StudentAverageTotal(\%cache, $spacing, $sequenceKeys)); +# $r->print("\n"); +# $r->rflush(); + untie(%cache); + + + $r->print(''."\n"); if($selected == 0) { - $Ptr .= ' WARNING: '; - $Ptr .= 'Please select a student'; + $Str .= 'WARNING: '; + $Str .= 'Please select a student'; + $r->print($Str); } - return $Ptr; + return; } #---- Student Assessment Web Page -------------------------------------------- -# ------ Create different Student Report +sub CreateInterface { + my($cache,$selectedName,$students,$formName,$doNotShow)=@_; + + my $Str = ''; + $Str .= &CreateLegend(); + $Str .= '
'; return $Str; } - $Str .= "
". + " 1 correct by student in 1 try\n". + " 7 correct by student in 7 tries\n". + " * correct by student in more than 9 tries\n". + " + correct by override\n". + " - incorrect by override\n". + " . incorrect attempted\n". + " # ungraded attempted\n". + " not attempted (blank field)\n". + " x excused". + " "; return $Str; } +=pod + +=item &CreateColumnSelectionBox() + +If there are columns not being displayed then this selection box is created +with a list of those columns. When selections are made and the page +refreshed, the columns will be removed from this box and the column is +put back in the chart. If there is no columns to select, no row is added +to the interface table. + +=over 4 +Input: $CacheData, $headings + + +$CacheData: A pointer to a hash tied to the cached data + +$headings: An array of the names of the columns for the student information. +They are used for displaying which columns are missing. + +Output: $notThere + +$notThere: The string contains one row of a table. The first column has the +name of the selection box. The second contains the selection box +which has a size of four. + +=back + +=cut + +sub CreateColumnSelectionBox { + my ($doNotShow)=@_; + + my $notThere = ''; + $notThere .= ''; + + return $notThere; +} + +=pod + +=item &CreateColumnSelectors() + +This function generates the checkboxes above the column headings. The +column will be removed if the checkbox is unchecked. + +=over 4 + +Input: $CacheData, $headings + +$CacheData: A pointer to a hash tied to the cached data + +$headings: An array of the names of the columns for the student +information. They are used to know what are the student information columns + +Output: $present + +$present: The string contains the first row of a table. Each column contains +a checkbox which is left justified. Currently left justification is used +for consistency of location over the column in which it presides. + +=back + +=cut + +sub CreateColumnSelectors { + my ($infoHeadings, $sequenceHeadings, $sequenceKeys)=@_; + + my $present = ''; + for(my $index=0; $index<(scalar @$infoHeadings); $index++) { + $present .= ' | '; + $present .= '[$index].'" />'; + $present .= ' | '."\n"; + } + + for(my $index=0; $index<(scalar @$sequenceHeadings); $index++) { + $present .= ''; + $present .= '[$index].'" />'; + $present .= ' | '."\n"; + } + + return $present; +} + #---- END Student Assessment Web Page ---------------------------------------- + +#---- Student Assessment Worker Functions ------------------------------------ + +sub FindSelectedStudent { + my($cache, $selectedName, $students)=@_; + + if($selectedName eq 'All Students' || + $selectedName eq 'No Student Selected') { + return $selectedName; + } + + for(my $index=0; $index<(scalar @$students); $index++) { + my $fullname = $cache->{$students->[$index].':fullname'}; + if($fullname eq $selectedName) { + if($cache->{'StudentAssessmentMove'} eq 'next') { + if($index == ((scalar @$students) - 1)) { + $selectedName = $students->[0]; + return $selectedName; + } else { + $selectedName = $students->[$index+1]; + return $selectedName; + } + } elsif($cache->{'StudentAssessmentMove'} eq 'previous') { + if($index == 0) { + $selectedName = $students->[-1]; + return $selectedName; + } else { + $selectedName = $students->[$index-1]; + return $selectedName; + } + } else { + $selectedName = $students->[$index]; + return $selectedName; + } + last; + } + } + + return 'No Student Selected'; +} + +=pod + +=item &ShouldShowColumn() + +Determine if a specified column should be shown on the chart. + +=over 4 + +Input: $cache, $test + +$cache: A pointer to the hash tied to the cached data + +$test: The form name of the column (heading.$headingIndex) or +(sequence.$sequenceIndex) + +Output: 0 (false), 1 (true) + +=back + +=cut + +sub ShouldShowColumns { + my ($cache,$headings,$cacheKey)=@_; + + my @infoKeys=(); + my @infoHeadings=(); + + my @sequenceKeys=(); + my @sequenceHeadings=(); + + my %doNotShow; + + my $index; + my $count = 0; + my $check = ''; + for($index=0; $index < scalar @$headings; $index++) { + $check = 'HeadingColumn'.$headings->[$index]; + if($cache->{'HeadingsFound'} =~ /$check/) { + push(@infoHeadings, $headings->[$index]); + push(@infoKeys, $cacheKey->[$index]); + } else { + $doNotShow{$count.':name'} = $headings->[$index]; + $doNotShow{$count.':id'} = 'HeadingColumn'.$headings->[$index]; + $count++; + } + } + + foreach my $sequence (split(/\:/,$cache->{'orderedSequences'})) { + $check = 'SequenceColumn'.$sequence; + if($cache->{'SequencesFound'} eq 'All Sequences' || + $cache->{'SequencesFound'} =~ /$check/) { + push(@sequenceHeadings, $cache->{$sequence.':title'}); + push(@sequenceKeys, $sequence); + } else { + $doNotShow{$count.':name'} = $cache->{$sequence.':title'}; + $doNotShow{$count.':id'} = 'SequenceColumn'.$sequence; + $count++; + } + } + + $doNotShow{'count'} = $count; + + return (\@infoHeadings, \@infoKeys, \@sequenceHeadings, + \@sequenceKeys, \%doNotShow); +} + +#---- END Student Assessment Worker Functions -------------------------------- + 1; __END__