$labeltext
+
+$labeltext
NEW_WINDOW_CHECKBOX
}
#
$r->print("".$env{'course.'.$env{'request.course.id'}.'.description'}.
- " ".localtime(time)." ");
+ " ".&Apache::lonlocal::locallocaltime(time)."");
#
if ($chosen_output->{'base'} !~ /^final table/) {
$r->print("".&mt($chosen_output->{'shortdesc'})." ");
@@ -747,8 +744,6 @@ NEW_WINDOW_CHECKBOX
$total_sum_width = length($total_count)+1;
$Str .= " total\n";
$Str .= "";
- $r->print($Str);
- $r->rflush();
$r->print(<
@@ -809,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;
}
@@ -825,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();
@@ -835,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;
@@ -868,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'} &&
@@ -937,8 +940,8 @@ sub html_outputstudent {
#
$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;
}
@@ -995,9 +998,9 @@ sub StudentAverageTotal {
sub SingleStudentTotal {
return if (! defined($navmap));
my $student = &Apache::lonstatistics::current_student();
- my $Str = ''.&mt('Summary table for [_1] ([_2]@[_3])',
+ my $Str = ''.&mt('Summary table for [_1] ([_2])',
$student->{'fullname'},
- $student->{'username'},$student->{'domain'}).' ';
+ $student->{'username'}.':'.$student->{'domain'}).' ';
$Str .= $/;
$Str .= &Apache::loncommon::start_data_table()."\n";
$Str .=
@@ -1097,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());
@@ -1114,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;
@@ -1173,16 +1176,16 @@ 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
$excel_sheet->write($header_row,$cols_output++,
- 'Compiled on '.localtime(time),$format->{'h3'});
+ &mt('Compiled on [_1]',&Apache::lonlocal::locallocaltime(time)),$format->{'h3'});
#
$cols_output = 0;
$excel_sheet->write($description_row,$cols_output++,
- $chosen_output->{'shortdesc'},
+ &mt($chosen_output->{'shortdesc'}),
$format->{'b'});
#
$cols_output = 0;
@@ -1197,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'});
}
#
@@ -1260,17 +1263,17 @@ sub excel_initialize {
$formula_data{$symb}->{'Excel:scorecol'}=$cols_output;
if ($chosen_output->{'base'} eq 'parts correct total') {
$excel_sheet->write($resource_name_row,$cols_output++,
- 'parts correct',
+ &mt('parts correct'),
$format->{'bold'});
} elsif ($chosen_output->{'sequence_sum'}) {
if ($chosen_output->{'correct'}) {
# Only reporting the number correct, so do not call it score
$excel_sheet->write($resource_name_row,$cols_output++,
- 'sum',
+ &mt('sum'),
$format->{'bold'});
} else {
$excel_sheet->write($resource_name_row,$cols_output++,
- 'score',
+ &mt('score'),
$format->{'bold'});
}
}
@@ -1280,7 +1283,7 @@ sub excel_initialize {
($first_data_row,$cols_output-1);
if ($chosen_output->{'sequence_max'}) {
$excel_sheet->write($resource_name_row,$cols_output,
- 'maximum',
+ &mt('maximum'),
$format->{'bold'});
$formula_data{$symb}->{'Excel:maxcell'} =
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell
@@ -1294,11 +1297,11 @@ sub excel_initialize {
}
}
if ($chosen_output->{'grand_total'}) {
- $excel_sheet->write($resource_name_row,$cols_output++,'Total',
+ $excel_sheet->write($resource_name_row,$cols_output++,&mt('Total'),
$format->{'bold'});
}
if ($chosen_output->{'grand_maximum'}) {
- $excel_sheet->write($resource_name_row,$cols_output++,'Max. Total',
+ $excel_sheet->write($resource_name_row,$cols_output++,&mt('Max. Total'),
$format->{'bold'});
}
$total_formula = $excel_sheet->store_formula($total_formula_string);
@@ -1389,17 +1392,17 @@ sub excel_initialize {
if ($chosen_output->{'summary_table'}) {
$cols_output = 0;
$excel_sheet->write($summary_header_row,$cols_output++,
- 'Summary Table',$format->{'bold'});
+ &mt('Summary Table'),$format->{'bold'});
if ($chosen_output->{'maximum_row'}) {
$excel_sheet->write($summary_header_row,$cols_output++,
- 'Maximum',$format->{'bold'});
+ &mt('Maximum'),$format->{'bold'});
}
$excel_sheet->write($summary_header_row,$cols_output++,
- 'Average',$format->{'bold'});
+ &mt('Average'),$format->{'bold'});
$excel_sheet->write($summary_header_row,$cols_output++,
- 'Median',$format->{'bold'});
+ &mt('Median'),$format->{'bold'});
$excel_sheet->write($summary_header_row,$cols_output++,
- 'Std Dev',$format->{'bold'});
+ &mt('Std Dev'),$format->{'bold'});
my $row = $summary_header_row+1;
foreach my $seq (@sequences) {
my $symb = $seq->symb;
@@ -1446,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');
@@ -1489,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'}} =
@@ -1503,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'}) {
@@ -1641,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');
@@ -1673,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
@@ -1713,23 +1713,23 @@ END
$sequence_row.='"",'x$count;
if ($chosen_output->{'sequence_sum'}) {
if($chosen_output->{'correct'}) {
- $resource_row .= '"sum",';
+ $resource_row .= '"'.&mt('sum').'",';
} else {
- $resource_row .= '"score",';
+ $resource_row .= '"'.&mt('score').'",';
}
}
if ($chosen_output->{'sequence_max'}) {
$sequence_row.= '"",';
- $resource_row .= '"maximum possible",';
+ $resource_row .= '"'.&mt('maximum possible').'",';
}
}
if ($chosen_output->{'grand_total'}) {
$sequence_row.= '"",';
- $resource_row.= '"Total",';
+ $resource_row.= '"'.&mt('Total').'",';
}
if ($chosen_output->{'grand_maximum'}) {
$sequence_row.= '"",';
- $resource_row.= '"Maximum",';
+ $resource_row.= '"'.&mt('Maximum').'",';
}
chomp($sequence_row);
chomp($resource_row);
@@ -1770,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'}) {
@@ -1880,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);
@@ -1966,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 = ' ';
@@ -2041,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);
@@ -2050,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;
@@ -2068,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
#
@@ -2121,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 = ' ';