--- loncom/interface/statistics/lonstudentassessment.pm 2003/03/07 15:18:39 1.38 +++ loncom/interface/statistics/lonstudentassessment.pm 2003/03/07 17:01:45 1.39 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonstudentassessment.pm,v 1.38 2003/03/07 15:18:39 matthew Exp $ +# $Id: lonstudentassessment.pm,v 1.39 2003/03/07 17:01:45 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -305,11 +305,19 @@ my @OutputOptions = { name => 'HTML, totals', value => 'html, totals', description => 'Output HTML, but only the summary statistics for each'. - ' sequence selected.', + ' sequence selected for each student.', mode => 'html', show => 'totals', show_links => 'no', }, + { name => 'HTML, summary table only', + value => 'html summary table only', + description => 'Output HTML, but only the final summary table for '. + 'all students across all sequences.', + mode => 'html', + show => 'final table', + show_links => 'no', + }, { name => 'Excel, scores only', value => 'excel, scores only', description => 'Output an Excel file (compatable with Excel 95), '. @@ -446,14 +454,27 @@ Return a line of the chart for a student my $padding; my $count; + my $nodata_count; # The number of students for which there is no data + my %prog_state; # progress state used by loncommon PrgWin routines + sub html_initialize { my ($r) = @_; # $padding = ' 'x3; $count = 0; + $nodata_count = 0; # $r->print("

".$ENV{'course.'.$ENV{'request.course.id'}.'.description'}. "  ".localtime(time)."

"); + + # + # Set up progress window for 'final table' display only + if ($show eq 'final table') { + my $studentcount = scalar(@Apache::lonstatistics::Students); + %prog_state=&Apache::lonhtmlcommon::Create_PrgWin + ($r,'Summary Table Status', + 'Summary Table Compilation Progress', $studentcount); + } my $Str = "
\n";
     # First, the @StudentData fields need to be listed
     my @to_show = &get_student_fields_to_show();
@@ -472,6 +493,11 @@ sub html_initialize {
     }
     $Str .= "total (of shown problems)
\n"; $Str .= "
";
+    #
+    # Check for suppression of output
+    if ($show eq 'final table') {
+        $Str = '';
+    }
     $r->print($Str);
     $r->rflush();
     return;
@@ -501,6 +527,8 @@ sub html_outputstudent {
         %StudentsData = @tmp;
     }
     if (scalar(@tmp) < 1) {
+        $nodata_count++;
+        return if ($show eq 'final table');
         $Str .= 'No Course Data'."\n";
         $r->print($Str);
         $r->rflush();
@@ -545,6 +573,14 @@ sub html_outputstudent {
     }
     $Str .= ' '.' 'x(length($max)-length($score)).$score.'/'.$max;
     $Str .= " \n";
+    #
+    # Check for suppressed output and update the progress window if so...
+    if ($show eq 'final table') {
+        $Str = '';
+        &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
+                                                 'last student');
+    }
+    #
     $r->print($Str);
     #
     $r->rflush();
@@ -553,11 +589,51 @@ sub html_outputstudent {
 
 sub html_finish {
     my ($r) = @_;
-    $r->print("
\n"); + # + # Check for suppressed output and close the progress window if so + if ($show eq 'final table') { + &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); + } else { + $r->print("\n"); + } + $r->print(&StudentAverageTotal()); $r->rflush(); return; } +sub StudentAverageTotal { + my $Str = "

Summary Tables

\n"; + my $num_students = scalar(@Apache::lonstatistics::Students); + my $total_ave = 0; + my $total_max = 0; + $Str .= ''."\n"; + $Str .= "\n"; + foreach my $seq (&get_sequences_to_show) { + my $ave = int(100*($Statistics->{$seq->{'symb'}}->{'score'}/ + ($num_students-$nodata_count)))/100; + $total_ave += $ave; + my $max = $seq->{'num_assess_parts'}; + $total_max += $max; + if ($ave == 0) { + $ave = "0.00"; + } + $ave .= ' '; + $max .= '   '; + $Str .= ''. + ''. + ''."\n"; + } + $total_ave = int(100*$total_ave)/100; # only two digit + $Str .= "
TitleAverageMaximum
'.$seq->{'title'}.''.$ave.''.$max.'
\n"; + $Str .= ''."\n"; + $Str .= ''. + "\n"; + $Str .= ''. + ''; + $Str .= "
Number of StudentsAverageMaximum
'.($num_students-$nodata_count).''.$total_ave.''.$total_max.'
\n"; + return $Str; +} + } ####################################################### @@ -1085,69 +1161,6 @@ sub StudentPerformanceOnSequence { } ####################################################### -####################################################### -sub StudentAverageTotal { - my ($cache, $students, $sequenceKeys)=@_; - my $Str = "\nSummary Tables:\n"; - my %Correct = (); - my $ProblemsSolved = 0; - my $TotalProblems = 0; - my $StudentCount = 0; - - foreach my $name (@$students) { - $StudentCount++; - foreach my $sequence (@$sequenceKeys) { - $Correct{$sequence} += - $cache->{$name.':'.$sequence.':problemsCorrect'}; - } - $ProblemsSolved += $cache->{$name.':problemsSolved'}; - $TotalProblems += $cache->{$name.':totalProblems'}; - } - if ($StudentCount) { - $ProblemsSolved = sprintf( "%.2f", - $ProblemsSolved/$StudentCount); - $TotalProblems /= $StudentCount; - } else { - $ProblemsSolved = 0; - $TotalProblems = 0; - } - - $Str .= ''."\n"; - $Str .= ''."\n"; - $Str .= ''."\n"; - $Str .= ''."\n"; - $Str .= '
Students Count'. - $StudentCount.'
Total Problems'. - $TotalProblems.'
Average Correct'. - $ProblemsSolved.'
'."\n"; - - $Str .= ''."\n"; - $Str .= ''. - ''."\n"; - foreach my $S(@$sequenceKeys) { - my $title=$cache->{$S.':title'}; - #$Str .= $cache->{$S.':problems'}; - #my @problems=split(':', $cache->{$S.':problems'}); - #my $pCount=scalar @problems; - my $pCount=MaxSeqPr($cache,@$students[0],$S); - my $crr; - if ($StudentCount) { - $crr=sprintf( "%.2f", $Correct{$S}/$StudentCount ); - } else { - $crr="0.00"; - } - $Str .= ''."\n"; - } - - $Str .= '
TitleTotal ProblemsAverage Correct
'.$title. - ''.$pCount. - ''.$crr. - '
'."\n"; - - return $Str; -} - -####################################################### ####################################################### =pod