--- loncom/interface/statistics/lonstudentassessment.pm	2005/04/07 06:56:24	1.121
+++ loncom/interface/statistics/lonstudentassessment.pm	2005/08/26 21:53:23	1.125
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: lonstudentassessment.pm,v 1.121 2005/04/07 06:56:24 albertel Exp $
+# $Id: lonstudentassessment.pm,v 1.125 2005/08/26 21:53:23 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -430,14 +430,9 @@ sub CreateAndParseOutputSelector {
                                             [$elementname]);
     #
     # Format for output options is 'mode, restrictions';
-    my $selected = 'html, without links';
-    if (exists($env{'form.'.$elementname})) {
-        if (ref($env{'form.'.$elementname} eq 'ARRAY')) {
-            $selected = $env{'form.'.$elementname}->[0];
-        } else {
-            $selected = $env{'form.'.$elementname};
-        }
-    }
+    my $selected = (&Apache::loncommon::get_env_multiple('form.'.$elementname))[0];
+    $selected = 'html, without links' if (!$selected);
+
     #
     # Set package variables describing output mode
     $show_links  = 'no';
@@ -551,14 +546,9 @@ sub CreateAndParseOutputDataSelector {
     my $Str = '';
     my $elementname = 'chartoutputdata';
     #
-    my $selected = 'scores';
-    if (exists($env{'form.'.$elementname})) {
-        if (ref($env{'form.'.$elementname} eq 'ARRAY')) {
-            $selected = $env{'form.'.$elementname}->[0];
-        } else {
-            $selected = $env{'form.'.$elementname};
-        }
-    }
+    my $selected = (&Apache::loncommon::get_env_multiple('form.'.$elementname))[0];
+    $selected = 'scores' if (!$selected);
+
     #
     $chosen_output = $OutputDataOptions[0];
     foreach my $option (@OutputDataOptions) {
@@ -632,17 +622,21 @@ Return a line of the chart for a student
     my @sequences;
     my $navmap; # Have to keep this around since weakref is a bit zealous
 
+sub html_cleanup {
+    undef(%prog_state);
+    undef(%width);
+    #
+    undef($navmap);
+    undef(@sequences);
+}
+
 sub html_initialize {
     my ($r) = @_;
     #
     $padding = ' 'x3;
     $count = 0;
     $nodata_count = 0;
-    undef(%prog_state);
-    undef(%width);
-    #
-    undef($navmap);
-    undef(@sequences);
+    &html_cleanup();
     ($navmap,@sequences) = 
         &Apache::lonstatistics::selected_sequences_with_assessments();
     if (! ref($navmap)) {
@@ -720,6 +714,21 @@ sub html_initialize {
     $Str .= "<pre>";
     $r->print($Str);
     $r->rflush();
+    #
+    # Let the user know what we are doing
+    my $studentcount = scalar(@Apache::lonstatistics::Students); 
+    if ($env{'form.SelectedStudent'}) {
+        $studentcount = '1';
+    }
+    #
+    # Initialize progress window
+    %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
+        ($r,'HTML Chart Status',
+         'HTML Chart Progress', $studentcount,
+         'inline',undef,'Statistics','stats_status');
+    #
+    &Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,
+                                          'Processing first student');
     return;
 }
 
@@ -832,6 +841,7 @@ sub html_outputstudent {
     $r->print($Str);
     #
     $r->rflush();
+    &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student');
     return;
 }    
 
@@ -849,7 +859,8 @@ sub html_finish {
         }
     }
     $r->rflush();
-    undef($navmap);
+    &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
+    &html_cleanup();
     return;
 }
 
@@ -956,8 +967,7 @@ my %formula_data;
 my $navmap;
 my @sequences;
 
-sub excel_initialize {
-    my ($r) = @_;
+sub excel_cleanup {
     #
     undef ($excel_sheet);
     undef ($excel_workbook);
@@ -973,6 +983,12 @@ sub excel_initialize {
     #
     undef($navmap);
     undef(@sequences);
+}
+
+sub excel_initialize {
+    my ($r) = @_;
+
+    &excel_cleanup();
     ($navmap,@sequences) = 
         &Apache::lonstatistics::selected_sequences_with_assessments();
     if (! ref($navmap)) {
@@ -1053,7 +1069,7 @@ sub excel_initialize {
     my $sectionstring = '';
     my @Sections = &Apache::lonstatistics::get_selected_sections();
     $excel_sheet->write($header_row,$cols_output++,
-                        &Apache::lonstatistics::section_and_enrollment_description('plain text'),
+                        &Apache::lonstatistics::section_and_enrollment_description('plaintext'),
                         $format->{'h3'});
     #
     # Put the date in there too
@@ -1458,14 +1474,12 @@ sub excel_outputstudent {
 sub excel_finish {
     my ($r) = @_;
     if ($request_aborted || ! defined($navmap) || ! defined($excel_sheet)) {
+	&excel_cleanup();
         return;
     }
     #
     # Write the excel file
     $excel_workbook->close();
-    my $c = $r->connection();
-    #
-    return if($c->aborted());
     #
     # Close the progress window
     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
@@ -1474,6 +1488,7 @@ sub excel_finish {
     $r->print('<br />'.
               '<a href="'.$filename.'">Your Excel spreadsheet.</a>'."\n");
     $r->rflush();
+    &excel_cleanup();
     return;
 }
 
@@ -1504,10 +1519,7 @@ my %prog_state; # progress window state
 my $navmap;
 my @sequences;
 
-sub csv_initialize{
-    my ($r) = @_;
-    # 
-    # Clean up
+sub csv_cleanup {
     undef($outputfile);
     undef($filename);
     undef($request_aborted);
@@ -1515,6 +1527,12 @@ sub csv_initialize{
     #
     undef($navmap);
     undef(@sequences);
+}
+
+sub csv_initialize{
+    my ($r) = @_;
+
+    &csv_cleanup();
     ($navmap,@sequences) = 
         &Apache::lonstatistics::selected_sequences_with_assessments();
     if (! ref($navmap)) {
@@ -1700,13 +1718,11 @@ sub csv_outputstudent {
 sub csv_finish {
     my ($r) = @_;
     if ($request_aborted || ! defined($navmap) || ! defined($outputfile)) {
+	&csv_cleanup();
         return;
     }
     close($outputfile);
     #
-    my $c = $r->connection();
-    return if ($c->aborted());
-    #
     # Close the progress window
     &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
     #
@@ -1714,6 +1730,7 @@ sub csv_finish {
     $r->print('<br />'.
               '<a href="'.$filename.'">'.&mt('Your csv file.').'</a>'."\n");
     $r->rflush();
+    &csv_cleanup();
     return;
     
 }
@@ -1807,7 +1824,7 @@ sub student_tries_on_sequence {
                 } elsif ($status eq 'incorrect_by_override') {
                     $symbol = '-';
                 } elsif ($status eq 'ungraded_attempted') {
-                    $symbol = '#';
+                    $symbol = 'u';
                 } elsif ($status eq 'incorrect_attempted' ||
                          $tries > 0)  {
                     $symbol = '.';
@@ -1924,13 +1941,19 @@ sub student_performance_on_sequence {
             if (length($symbol) > 1) {
                 $symbol = '*';
             }
-            if (exists($resource_data->{'resource.'.$part.'.solved'})) {
+            if (exists($resource_data->{'resource.'.$part.'.solved'}) &&
+                $resource_data->{'resource.'.$part.'.solved'} ne '') {
                 my $status = $resource_data->{'resource.'.$part.'.solved'};
                 if ($status eq 'excused') {
                     $symbol = 'x';
                     $max -= $weight; # Do not count 'excused' problems.
+                } elsif ($status eq 'ungraded_attempted') {
+                    $symbol = 'u';
                 }
                 $hasdata = 1;
+            } elsif ($resource_data->{'resource.'.$part.'.award'} eq 'DRAFT') {
+                $symbol = 'd';
+                $hasdata = 1;
             } elsif (!exists($resource_data->{'resource.'.$part.'.awarded'})){
                 # Unsolved.  Did they try?
                 if (exists($resource_data->{'resource.'.$part.'.tries'})){
@@ -1979,13 +2002,13 @@ problems.
 #######################################################
 sub CreateLegend {
     my $Str = "<p><pre>".
-              "   1  correct by student in 1 try\n".
-              "   7  correct by student in 7 tries\n".
+              " digit score or number of tries to get correct ".
               "   *  correct by student in more than 9 tries\n".
 	      "   +  correct by hand grading or override\n".
               "   -  incorrect by override\n".
 	      "   .  incorrect attempted\n".
-	      "   #  ungraded attempted\n".
+	      "   u  ungraded attempted\n".
+              "   d  draft answer saved but not submitted\n".
               "      not attempted (blank field)\n".
 	      "   x  excused".
               "</pre><p>";