$labeltext
+
+$labeltext
NEW_WINDOW_CHECKBOX
}
@@ -715,8 +710,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'}) {
@@ -724,8 +719,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'}) {
@@ -749,8 +744,6 @@ NEW_WINDOW_CHECKBOX
$total_sum_width = length($total_count)+1;
$Str .= " total\n";
$Str .= "";
- $r->print($Str);
- $r->rflush();
$r->print(<
@@ -811,13 +804,13 @@ JS
}
#
# Initialize progress window
- %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
- ($r,'HTML Chart Status',
- 'HTML Chart Progress', $studentcount,
- 'inline',undef,'Statistics','stats_status');
#
+ %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$studentcount);
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,
'Processing first student');
+ $r->print($Str);
+ $r->rflush();
+
return;
}
@@ -827,7 +820,12 @@ sub html_outputstudent {
return if (! defined($navmap));
#
if($count++ % 5 == 0 && $count > 0) {
- $r->print(" ");
+# $r->print(" ");
+ $r->print(' ');
+ &Apache::lonhtmlcommon::Increment_PrgWin(
+ $r,\%prog_state,'last five students',5);
+ $r->rflush();
+ $r->print('');
}
# First, the @StudentData fields need to be listed
my @to_show = &get_student_fields_to_show();
@@ -837,6 +835,7 @@ sub html_outputstudent {
if ($field eq 'comments') {
$title = ''.&mt('Comments').' ';
}
+ utf8::decode($title);
my $base = length($title);
my $width=$Apache::lonstatistics::StudentData{$field}->{'width'};
$Str .= $title.' 'x($width-$base).$padding;
@@ -870,16 +869,18 @@ sub html_outputstudent {
my $PerformanceStr = '';
foreach my $seq (@sequences) {
my $symb = $seq->symb;
+ my $randompick = $seq->randompick();
my ($performance,$performance_length,$score,$seq_max,$rawdata);
if ($chosen_output->{'tries'}) {
($performance,$performance_length,$score,$seq_max,$rawdata) =
&student_tries_on_sequence($student,\%StudentsData,
- $navmap,$seq,$show_links);
+ $navmap,$seq,$show_links,$randompick);
} else {
($performance,$performance_length,$score,$seq_max,$rawdata) =
&student_performance_on_sequence($student,\%StudentsData,
$navmap,$seq,$show_links,
- $chosen_output->{ignore_weight});
+ $chosen_output->{ignore_weight},
+ $randompick);
}
my $ratio='';
if ($chosen_output->{'every_problem'} &&
@@ -887,16 +888,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'}) {
@@ -930,16 +932,16 @@ 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";
#
$r->print($Str);
#
- $r->rflush();
- &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student');
+# $r->rflush();
+# &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,'last student');
return;
}
@@ -1098,9 +1100,9 @@ sub excel_initialize {
&Apache::lonstatistics::selected_sequences_with_assessments();
if (! ref($navmap)) {
# Unable to get data, so bail out
- $r->print("".
+ $r->print(' '.
&mt('Unable to retrieve course information.').
- '');
+ '
');
}
#
my $total_columns = scalar(&get_student_fields_to_show());
@@ -1115,9 +1117,9 @@ sub excel_initialize {
}
my $too_many_cols_error_message =
''.&mt('Unable to Complete Request').' '.$/.
- ''.&mt('LON-CAPA is unable to produce your Excel spreadsheet because your selections will result in more than 255 columns. Excel allows only 255 columns in a spreadsheet.').'
'.$/.
- ''.&mt('You may consider reducing the number of Sequences or Folders you have selected.').'
'.$/.
- ''.&mt('LON-CAPA can produce CSV files of this data or Excel files of the Scores Summary data.').'
'.$/;
+ ''.&mt('LON-CAPA is unable to produce your Excel spreadsheet because your selections will result in more than 255 columns. Excel allows only 255 columns in a spreadsheet.').'
'.$/.
+ ''.&mt('You may consider reducing the number of [_1]Sequences or Folders[_2] you have selected.','',' ').'
'.$/.
+ ''.&mt('LON-CAPA can produce [_1]CSV[_2] files of this data or Excel files of the [_1]Scores Summary[_2] data.','',' ').'
'.$/;
if ($chosen_output->{'base'} eq 'tries' && $total_columns > 255) {
$r->print($too_many_cols_error_message);
$request_aborted = 1;
@@ -1174,7 +1176,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('plaintext'),
+ &Apache::lonstatistics::section_and_enrollment_description('localized'),
$format->{'h3'});
#
# Put the date in there too
@@ -1198,7 +1200,7 @@ sub excel_initialize {
# Add the student headers
$cols_output = 0;
foreach my $field (&get_student_fields_to_show()) {
- $excel_sheet->write($resource_name_row,$cols_output++,$field,
+ $excel_sheet->write($resource_name_row,$cols_output++,&mt($field),
$format->{'bold'});
}
#
@@ -1447,10 +1449,7 @@ sub excel_initialize {
$r->rflush();
#
# Initialize progress window
- %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
- ($r,'Excel File Compilation Status',
- 'Excel File Compilation Progress', $studentcount,
- 'inline',undef,'Statistics','stats_status');
+ %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$studentcount);
#
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,
'Processing first student');
@@ -1490,6 +1489,7 @@ sub excel_outputstudent {
my %maximum_cell_translation;
foreach my $seq (@sequences) {
my $symb = $seq->symb;
+ my $randompick = $seq->randompick();
$cols_output = $formula_data{$symb}->{'Excel:startcol'};
# Keep track of cells to translate in total cell
$total_cell_translation{$formula_data{$symb}->{'Excel:scorecell'}} =
@@ -1504,12 +1504,13 @@ sub excel_outputstudent {
if ($chosen_output->{'tries'} || $chosen_output->{'correct'}){
($performance,$performance_length,$score,$seq_max,$rawdata) =
&student_tries_on_sequence($student,\%StudentsData,
- $navmap,$seq,'no');
+ $navmap,$seq,'no',$randompick);
} else {
($performance,$performance_length,$score,$seq_max,$rawdata) =
&student_performance_on_sequence($student,\%StudentsData,
$navmap,$seq,'no',
- $chosen_output->{ignore_weight});
+ $chosen_output->{ignore_weight},
+ $randompick);
}
if ($chosen_output->{'every_problem'}) {
if ($chosen_output->{'correct'}) {
@@ -1642,30 +1643,28 @@ sub csv_initialize{
&Apache::lonstatistics::selected_sequences_with_assessments();
if (! ref($navmap)) {
# Unable to get data, so bail out
- $r->print("".
+ $r->print(' '.
&mt('Unable to retrieve course information.').
- '');
+ '
');
}
#
# Deal with unimplemented requests
$request_aborted = undef;
if ($chosen_output->{'base'} =~ /final table/) {
- $r->print(<Unable to Complete Request
-
-The Summary Table (Scores) option is not available for non-HTML output.
-
-END
- $request_aborted = 1;
+ $r->print(
+ ''.&mt('Unable to Complete Request').' '
+ .''
+ .&mt('The [_1]Summary Table (Scores)[_2] option'
+ .' is not available for non-HTML output.','',' ')
+ .'
'
+ );
+ $request_aborted = 1;
}
return if ($request_aborted);
#
# Initialize progress window
my $studentcount = scalar(@Apache::lonstatistics::Students);
- %prog_state=&Apache::lonhtmlcommon::Create_PrgWin
- ($r,'CSV File Compilation Status',
- 'CSV File Compilation Progress', $studentcount,
- 'inline',undef,'Statistics','stats_status');
+ %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,$studentcount);
#
# Open a file
($outputfile,$filename) = &Apache::loncommon::create_text_file($r,'csv');
@@ -1674,7 +1673,7 @@ END
# Datestamp
my $description = $env{'course.'.$env{'request.course.id'}.'.description'};
print $outputfile '"'.&Apache::loncommon::csv_translate($description).'",'.
- '"'.&Apache::loncommon::csv_translate(scalar(localtime(time))).'"'.
+ '"'.&Apache::loncommon::csv_translate(scalar(&Apache::lonlocal::locallocaltime(time))).'"'.
"\n";
print $outputfile '"'.
&Apache::loncommon::csv_translate
@@ -1771,16 +1770,18 @@ sub csv_outputstudent {
my $total = 0;
my $maximum = 0;
foreach my $seq (@sequences) {
+ my $randompick = $seq->randompick();
my ($performance,$performance_length,$score,$seq_max,$rawdata);
if ($chosen_output->{'tries'}){
($performance,$performance_length,$score,$seq_max,$rawdata) =
&student_tries_on_sequence($student,\%StudentsData,
- $navmap,$seq,'no');
+ $navmap,$seq,'no',$randompick);
} else {
($performance,$performance_length,$score,$seq_max,$rawdata) =
&student_performance_on_sequence($student,\%StudentsData,
$navmap,$seq,'no',
- $chosen_output->{ignore_weight});
+ $chosen_output->{ignore_weight},
+ $randompick);
}
if ($chosen_output->{'every_problem'}) {
if ($chosen_output->{'correct'}) {
@@ -1881,7 +1882,7 @@ Inputs:
#######################################################
#######################################################
sub student_tries_on_sequence {
- my ($student,$studentdata,$navmap,$seq,$links) = @_;
+ my ($student,$studentdata,$navmap,$seq,$links,$randompick) = @_;
$links = 'no' if (! defined($links));
my $Str = '';
my ($sum,$max) = (0,0);
@@ -1967,17 +1968,17 @@ sub student_tries_on_sequence {
($links eq 'all')) {
my $link = '/adm/grades'.
'?symb='.&escape($resource->shown_symb).
- '&student='.$student->{'username'}.
- '&userdom='.$student->{'domain'}.
- '&command=submission';
+ '&student='.$student->{'username'}.
+ '&userdom='.$student->{'domain'}.
+ '&command=submission';
$symbol = &link($symbol, $link);
}
$value .= $symbol;
}
$Str .= $value;
}
- if ($seq->randompick()) {
- $max = $seq->randompick();
+ if ($randompick) {
+ $max = $randompick;
}
if (! $hasdata && $sum == 0) {
$sum = ' ';
@@ -2042,7 +2043,7 @@ Inputs:
#######################################################
#######################################################
sub student_performance_on_sequence {
- my ($student,$studentdata,$navmap,$seq,$links,$awarded_only) = @_;
+ my ($student,$studentdata,$navmap,$seq,$links,$awarded_only,$randompick) = @_;
$links = 'no' if (! defined($links));
my $Str = ''; # final result string
my ($score,$max) = (0,0);
@@ -2051,9 +2052,11 @@ sub student_performance_on_sequence {
my @ScoreData = ();
my $partscore;
my $hasdata = 0; # flag, 0 if there were no submissions on the sequence
+ my %ptsfreq;
foreach my $resource (&get_resources($navmap,$seq)) {
my $symb = $resource->symb;
my $resource_data = $studentdata->{$symb};
+ my $resmax = 0;
foreach my $part (@{$resource->parts()}) {
$partscore = undef;
my $weight;
@@ -2069,6 +2072,7 @@ sub student_performance_on_sequence {
}
#
$max += $weight; # see the 'excused' branch below...
+ $resmax += $weight;
$performance_length++; # one character per part
$symbol = ' '; # default to space
#
@@ -2122,13 +2126,24 @@ sub student_performance_on_sequence {
if ( ($links eq 'yes' && $symbol ne ' ') || ($links eq 'all')) {
my $link = '/adm/grades' .
'?symb='.&escape($resource->shown_symb).
- '&student='.$student->{'username'}.
- '&userdom='.$student->{'domain'}.
- '&command=submission';
+ '&student='.$student->{'username'}.
+ '&userdom='.$student->{'domain'}.
+ '&command=submission';
$symbol = &link($symbol, $link);
}
$Str .= $symbol;
}
+ if ($ptsfreq{$resmax}) {
+ $ptsfreq{$resmax} ++;
+ } else {
+ $ptsfreq{$resmax} = 1;
+ }
+ }
+ if ($randompick) {
+ my @uniquetotals = keys(%ptsfreq);
+ if ((@uniquetotals == 1) && ($ptsfreq{$uniquetotals[0]} > 0)) {
+ $max = $max * $randompick/$ptsfreq{$uniquetotals[0]};
+ }
}
if (! $hasdata && $score == 0) {
$score = ' ';