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