--- loncom/interface/statistics/lonstudentassessment.pm 2006/08/18 15:15:38 1.143 +++ loncom/interface/statistics/lonstudentassessment.pm 2008/10/14 15:16:58 1.151 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: lonstudentassessment.pm,v 1.143 2006/08/18 15:15:38 raeburn Exp $ +# $Id: lonstudentassessment.pm,v 1.151 2008/10/14 15:16:58 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -372,7 +372,7 @@ sub CreateInterface { $Str .= ' 'x5; $Str .= &mt('Status [_1]', - ''); + ''); $Str .= ''; return $Str; } @@ -671,9 +671,10 @@ sub html_initialize { # If we're showing links, show a checkbox to open in new # windows. if ($show_links ne 'no') { + my $labeltext = &mt('Show links in new window:'); $r->print(<new_window = true; -Show links in new window: +$labeltext NEW_WINDOW_CHECKBOX @@ -684,7 +685,7 @@ NEW_WINDOW_CHECKBOX " ".localtime(time).""); # if ($chosen_output->{'base'} !~ /^final table/) { - $r->print("".$chosen_output->{'shortdesc'}.""); + $r->print("".&mt($chosen_output->{'shortdesc'}).""); } my $Str = "\n"; # First, the @StudentData fields need to be listed @@ -712,8 +713,8 @@ NEW_WINDOW_CHECKBOX $width{$symb}->{'width_sum'} += 1; } $total_count += &count_parts($navmap,$seq); - # Use 3 digits for the sum - $width{$symb}->{'width_sum'} += 3; + # Use 6 digits for the sum + $width{$symb}->{'width_sum'} += 6; } # Compute width of maximum if ($chosen_output->{'sequence_max'}) { @@ -721,8 +722,8 @@ NEW_WINDOW_CHECKBOX # One digit for the '/' $width{$symb}->{'width_sum'} +=1; } - # Use 3 digits for the total - $width{$symb}->{'width_sum'}+=3; + # Use 6 digits for the total + $width{$symb}->{'width_sum'}+=6; } # if ($chosen_output->{'every_problem'}) { @@ -843,12 +844,20 @@ sub html_outputstudent { my @tmp = &Apache::loncoursedata::get_current_state ($student->{'username'},$student->{'domain'},undef, $env{'request.course.id'}); - if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) { + if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:(.*)/)) { %StudentsData = @tmp; - } - if (scalar(@tmp) < 1) { + } else { + my $error = $1; + if (scalar(@tmp) < 1) { + $Str .= '' + .&mt('No Course Data') + .''."\n"; + } else { + $Str .= '' + .&mt('Error getting student data ([_1])',$error) + .''."\n"; + } $nodata_count++; - $Str .= 'No Course Data'."\n"; $r->print($Str); $r->rflush(); return; @@ -876,16 +885,17 @@ sub html_outputstudent { $ratio .= ' '; } if ($chosen_output->{'sequence_sum'} && $score ne ' ') { - my $score .= sprintf("%3.0f",$score); - $ratio .= (' 'x(3-length($score))).$score; + my $score .= sprintf("%3.2f",$score); + $ratio .= (' 'x(6-length($score))).$score; } elsif($chosen_output->{'sequence_sum'}) { - $ratio .= ' 'x3; + $ratio .= ' 'x6; } if ($chosen_output->{'sequence_max'}) { if ($chosen_output->{'sequence_sum'}) { $ratio .= '/'; } - $ratio .= sprintf("%3.0f",$seq_max); + my $sequence_total=sprintf("%3.2f",$seq_max); + $ratio .= $sequence_total.(' 'x(6-length($sequence_total))); } # if (! $chosen_output->{'every_problem'}) { @@ -919,8 +929,8 @@ sub html_outputstudent { if (! defined($score)) { $score = ' ' x $total_sum_width; } else { - $score = sprintf("%.0f",$score); - $score = (' 'x(3-length($score))).$score; + $score = sprintf("%.2f",$score); + $score = (' 'x(6-length($score))).$score; } $Str .= ' '.' 'x($total_sum_width-length($score)).$score.' / '.$max; $Str .= " \n"; @@ -953,12 +963,12 @@ sub html_finish { sub StudentAverageTotal { my $Str = ''.&mt('Summary Tables').''.$/; - $Str .= ''."\n"; - $Str .= ''. + $Str .= &Apache::loncommon::start_data_table(); + $Str .= &Apache::loncommon::start_data_table_header_row(). ''.&mt('Title').''. ''.&mt('Average').''. ''.&mt('Maximum').''. - ''.$/; + &Apache::loncommon::end_data_table_header_row().$/; foreach my $seq (@sequences) { my $symb = $seq->symb; my $ave; @@ -972,11 +982,13 @@ sub StudentAverageTotal { } my $max = $Statistics->{$symb}->{'max'}; $ave = sprintf("%.2f",$ave); - $Str .= ''.$seq->compTitle.''. + $Str .= &Apache::loncommon::start_data_table_row(). + ''.$seq->compTitle.''. ''.$ave.' '. - ''.$max.' '.''."\n"; + ''.$max.' '.''. + &Apache::loncommon::end_data_table_row()."\n"; } - $Str .= "\n"; + $Str .= &Apache::loncommon::end_data_table()."\n"; return $Str; } @@ -987,31 +999,36 @@ sub SingleStudentTotal { $student->{'fullname'}, $student->{'username'},$student->{'domain'}).''; $Str .= $/; - $Str .= ''."\n"; + $Str .= &Apache::loncommon::start_data_table()."\n"; $Str .= - ''. + &Apache::loncommon::start_data_table_header_row(). ''.&mt('Sequence or Folder').''; if ($chosen_output->{'base'} eq 'tries') { $Str .= ''.&mt('Parts Correct').''; } else { $Str .= ''.&mt('Score').''; } - $Str .= ''.&mt('Maximum').''."\n"; + $Str .= ''.&mt('Maximum').''. + &Apache::loncommon::end_data_table_header_row()."\n"; my $total = 0; my $total_max = 0; foreach my $seq (@sequences) { my $value = $Statistics->{$seq->symb}->{'score'}; my $max = $Statistics->{$seq->symb}->{'max'}; - $Str .= ''.&HTML::Entities::encode($seq->compTitle).''. + $Str .= &Apache::loncommon::start_data_table_row(). + ''.&HTML::Entities::encode($seq->compTitle).''. ''.$value.''. - ''.$max.''."\n"; + ''.$max.''. + &Apache::loncommon::end_data_table_row()."\n"; $total += $value; $total_max +=$max; } - $Str .= ''.&mt('Total').''. + $Str .= &Apache::loncommon::start_data_table_row(). + ''.&mt('Total').''. ''.$total.''. - ''.$total_max."\n"; - $Str .= "\n"; + ''.$total_max.''. + &Apache::loncommon::end_data_table_row()."\n"; + $Str .= &Apache::loncommon::end_data_table()."\n"; return $Str; } @@ -1820,7 +1837,7 @@ sub csv_finish { # # Tell the user where to get their csv file $r->print(''. - ''.&mt('Your csv file.').''."\n"); + ''.&mt('Your CSV file.').''."\n"); $r->rflush(); &csv_cleanup(); return; @@ -1951,11 +1968,8 @@ sub student_tries_on_sequence { # if ( ($links eq 'yes' && $symbol ne ' ') || ($links eq 'all')) { - if (length($symbol) > 1) { - &Apache::lonnet::logthis('length of symbol "'.$symbol.'" > 1'); - } my $link = '/adm/grades'. - '?symb='.&escape($resource->symb). + '?symb='.&escape($resource->shown_symb). '&student='.$student->{'username'}. '&userdom='.$student->{'domain'}. '&command=submission'; @@ -2110,7 +2124,7 @@ sub student_performance_on_sequence { # if ( ($links eq 'yes' && $symbol ne ' ') || ($links eq 'all')) { my $link = '/adm/grades' . - '?symb='.&escape($symb). + '?symb='.&escape($resource->shown_symb). '&student='.$student->{'username'}. '&userdom='.$student->{'domain'}. '&command=submission';
Show links in new window: +$labeltext NEW_WINDOW_CHECKBOX @@ -684,7 +685,7 @@ NEW_WINDOW_CHECKBOX " ".localtime(time).""); # if ($chosen_output->{'base'} !~ /^final table/) { - $r->print("".$chosen_output->{'shortdesc'}.""); + $r->print("".&mt($chosen_output->{'shortdesc'}).""); } my $Str = "\n"; # First, the @StudentData fields need to be listed @@ -712,8 +713,8 @@ NEW_WINDOW_CHECKBOX $width{$symb}->{'width_sum'} += 1; } $total_count += &count_parts($navmap,$seq); - # Use 3 digits for the sum - $width{$symb}->{'width_sum'} += 3; + # Use 6 digits for the sum + $width{$symb}->{'width_sum'} += 6; } # Compute width of maximum if ($chosen_output->{'sequence_max'}) { @@ -721,8 +722,8 @@ NEW_WINDOW_CHECKBOX # One digit for the '/' $width{$symb}->{'width_sum'} +=1; } - # Use 3 digits for the total - $width{$symb}->{'width_sum'}+=3; + # Use 6 digits for the total + $width{$symb}->{'width_sum'}+=6; } # if ($chosen_output->{'every_problem'}) { @@ -843,12 +844,20 @@ sub html_outputstudent { my @tmp = &Apache::loncoursedata::get_current_state ($student->{'username'},$student->{'domain'},undef, $env{'request.course.id'}); - if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) { + if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:(.*)/)) { %StudentsData = @tmp; - } - if (scalar(@tmp) < 1) { + } else { + my $error = $1; + if (scalar(@tmp) < 1) { + $Str .= '' + .&mt('No Course Data') + .''."\n"; + } else { + $Str .= '' + .&mt('Error getting student data ([_1])',$error) + .''."\n"; + } $nodata_count++; - $Str .= 'No Course Data'."\n"; $r->print($Str); $r->rflush(); return; @@ -876,16 +885,17 @@ sub html_outputstudent { $ratio .= ' '; } if ($chosen_output->{'sequence_sum'} && $score ne ' ') { - my $score .= sprintf("%3.0f",$score); - $ratio .= (' 'x(3-length($score))).$score; + my $score .= sprintf("%3.2f",$score); + $ratio .= (' 'x(6-length($score))).$score; } elsif($chosen_output->{'sequence_sum'}) { - $ratio .= ' 'x3; + $ratio .= ' 'x6; } if ($chosen_output->{'sequence_max'}) { if ($chosen_output->{'sequence_sum'}) { $ratio .= '/'; } - $ratio .= sprintf("%3.0f",$seq_max); + my $sequence_total=sprintf("%3.2f",$seq_max); + $ratio .= $sequence_total.(' 'x(6-length($sequence_total))); } # if (! $chosen_output->{'every_problem'}) { @@ -919,8 +929,8 @@ sub html_outputstudent { if (! defined($score)) { $score = ' ' x $total_sum_width; } else { - $score = sprintf("%.0f",$score); - $score = (' 'x(3-length($score))).$score; + $score = sprintf("%.2f",$score); + $score = (' 'x(6-length($score))).$score; } $Str .= ' '.' 'x($total_sum_width-length($score)).$score.' / '.$max; $Str .= " \n"; @@ -953,12 +963,12 @@ sub html_finish { sub StudentAverageTotal { my $Str = ''.&mt('Summary Tables').''.$/; - $Str .= ''."\n"; - $Str .= ''. + $Str .= &Apache::loncommon::start_data_table(); + $Str .= &Apache::loncommon::start_data_table_header_row(). ''.&mt('Title').''. ''.&mt('Average').''. ''.&mt('Maximum').''. - ''.$/; + &Apache::loncommon::end_data_table_header_row().$/; foreach my $seq (@sequences) { my $symb = $seq->symb; my $ave; @@ -972,11 +982,13 @@ sub StudentAverageTotal { } my $max = $Statistics->{$symb}->{'max'}; $ave = sprintf("%.2f",$ave); - $Str .= ''.$seq->compTitle.''. + $Str .= &Apache::loncommon::start_data_table_row(). + ''.$seq->compTitle.''. ''.$ave.' '. - ''.$max.' '.''."\n"; + ''.$max.' '.''. + &Apache::loncommon::end_data_table_row()."\n"; } - $Str .= "\n"; + $Str .= &Apache::loncommon::end_data_table()."\n"; return $Str; } @@ -987,31 +999,36 @@ sub SingleStudentTotal { $student->{'fullname'}, $student->{'username'},$student->{'domain'}).''; $Str .= $/; - $Str .= ''."\n"; + $Str .= &Apache::loncommon::start_data_table()."\n"; $Str .= - ''. + &Apache::loncommon::start_data_table_header_row(). ''.&mt('Sequence or Folder').''; if ($chosen_output->{'base'} eq 'tries') { $Str .= ''.&mt('Parts Correct').''; } else { $Str .= ''.&mt('Score').''; } - $Str .= ''.&mt('Maximum').''."\n"; + $Str .= ''.&mt('Maximum').''. + &Apache::loncommon::end_data_table_header_row()."\n"; my $total = 0; my $total_max = 0; foreach my $seq (@sequences) { my $value = $Statistics->{$seq->symb}->{'score'}; my $max = $Statistics->{$seq->symb}->{'max'}; - $Str .= ''.&HTML::Entities::encode($seq->compTitle).''. + $Str .= &Apache::loncommon::start_data_table_row(). + ''.&HTML::Entities::encode($seq->compTitle).''. ''.$value.''. - ''.$max.''."\n"; + ''.$max.''. + &Apache::loncommon::end_data_table_row()."\n"; $total += $value; $total_max +=$max; } - $Str .= ''.&mt('Total').''. + $Str .= &Apache::loncommon::start_data_table_row(). + ''.&mt('Total').''. ''.$total.''. - ''.$total_max."\n"; - $Str .= "\n"; + ''.$total_max.''. + &Apache::loncommon::end_data_table_row()."\n"; + $Str .= &Apache::loncommon::end_data_table()."\n"; return $Str; } @@ -1820,7 +1837,7 @@ sub csv_finish { # # Tell the user where to get their csv file $r->print(''. - ''.&mt('Your csv file.').''."\n"); + ''.&mt('Your CSV file.').''."\n"); $r->rflush(); &csv_cleanup(); return; @@ -1951,11 +1968,8 @@ sub student_tries_on_sequence { # if ( ($links eq 'yes' && $symbol ne ' ') || ($links eq 'all')) { - if (length($symbol) > 1) { - &Apache::lonnet::logthis('length of symbol "'.$symbol.'" > 1'); - } my $link = '/adm/grades'. - '?symb='.&escape($resource->symb). + '?symb='.&escape($resource->shown_symb). '&student='.$student->{'username'}. '&userdom='.$student->{'domain'}. '&command=submission'; @@ -2110,7 +2124,7 @@ sub student_performance_on_sequence { # if ( ($links eq 'yes' && $symbol ne ' ') || ($links eq 'all')) { my $link = '/adm/grades' . - '?symb='.&escape($symb). + '?symb='.&escape($resource->shown_symb). '&student='.$student->{'username'}. '&userdom='.$student->{'domain'}. '&command=submission';
$labeltext
\n"; # First, the @StudentData fields need to be listed @@ -712,8 +713,8 @@ NEW_WINDOW_CHECKBOX $width{$symb}->{'width_sum'} += 1; } $total_count += &count_parts($navmap,$seq); - # Use 3 digits for the sum - $width{$symb}->{'width_sum'} += 3; + # Use 6 digits for the sum + $width{$symb}->{'width_sum'} += 6; } # Compute width of maximum if ($chosen_output->{'sequence_max'}) { @@ -721,8 +722,8 @@ NEW_WINDOW_CHECKBOX # One digit for the '/' $width{$symb}->{'width_sum'} +=1; } - # Use 3 digits for the total - $width{$symb}->{'width_sum'}+=3; + # Use 6 digits for the total + $width{$symb}->{'width_sum'}+=6; } # if ($chosen_output->{'every_problem'}) { @@ -843,12 +844,20 @@ sub html_outputstudent { my @tmp = &Apache::loncoursedata::get_current_state ($student->{'username'},$student->{'domain'},undef, $env{'request.course.id'}); - if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:/)) { + if ((scalar @tmp > 0) && ($tmp[0] !~ /^error:(.*)/)) { %StudentsData = @tmp; - } - if (scalar(@tmp) < 1) { + } else { + my $error = $1; + if (scalar(@tmp) < 1) { + $Str .= '' + .&mt('No Course Data') + .''."\n"; + } else { + $Str .= '' + .&mt('Error getting student data ([_1])',$error) + .''."\n"; + } $nodata_count++; - $Str .= 'No Course Data'."\n"; $r->print($Str); $r->rflush(); return; @@ -876,16 +885,17 @@ sub html_outputstudent { $ratio .= ' '; } if ($chosen_output->{'sequence_sum'} && $score ne ' ') { - my $score .= sprintf("%3.0f",$score); - $ratio .= (' 'x(3-length($score))).$score; + my $score .= sprintf("%3.2f",$score); + $ratio .= (' 'x(6-length($score))).$score; } elsif($chosen_output->{'sequence_sum'}) { - $ratio .= ' 'x3; + $ratio .= ' 'x6; } if ($chosen_output->{'sequence_max'}) { if ($chosen_output->{'sequence_sum'}) { $ratio .= '/'; } - $ratio .= sprintf("%3.0f",$seq_max); + my $sequence_total=sprintf("%3.2f",$seq_max); + $ratio .= $sequence_total.(' 'x(6-length($sequence_total))); } # if (! $chosen_output->{'every_problem'}) { @@ -919,8 +929,8 @@ sub html_outputstudent { if (! defined($score)) { $score = ' ' x $total_sum_width; } else { - $score = sprintf("%.0f",$score); - $score = (' 'x(3-length($score))).$score; + $score = sprintf("%.2f",$score); + $score = (' 'x(6-length($score))).$score; } $Str .= ' '.' 'x($total_sum_width-length($score)).$score.' / '.$max; $Str .= " \n"; @@ -953,12 +963,12 @@ sub html_finish { sub StudentAverageTotal { my $Str = ''.&mt('Summary Tables').''.$/; - $Str .= '