version 1.99, 2004/03/31 19:34:10
|
version 1.103, 2004/07/15 21:08:45
|
Line 153 sub BuildStudentAssessmentPage {
|
Line 153 sub BuildStudentAssessmentPage {
|
# |
# |
$single_student_mode = 0; |
$single_student_mode = 0; |
$single_student_mode = 1 if ($ENV{'form.SelectedStudent'}); |
$single_student_mode = 1 if ($ENV{'form.SelectedStudent'}); |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['selectstudent']); |
if ($ENV{'form.selectstudent'}) { |
if ($ENV{'form.selectstudent'}) { |
&Apache::lonstatistics::DisplayClasslist($r); |
&Apache::lonstatistics::DisplayClasslist($r); |
return; |
return; |
Line 474 my @OutputDataOptions =
|
Line 476 my @OutputDataOptions =
|
sequence_sum => 1, |
sequence_sum => 1, |
sequence_max => 1, |
sequence_max => 1, |
grand_total => 1, |
grand_total => 1, |
|
grand_maximum => 1, |
summary_table => 1, |
summary_table => 1, |
maximum_row => 1, |
maximum_row => 1, |
shortdesc => 'Total Score and Maximum Possible for each '. |
shortdesc => 'Total Score and Maximum Possible for each '. |
Line 491 my @OutputDataOptions =
|
Line 494 my @OutputDataOptions =
|
sequence_sum => 1, |
sequence_sum => 1, |
sequence_max => 1, |
sequence_max => 1, |
grand_total => 1, |
grand_total => 1, |
|
grand_maximum => 1, |
summary_table => 1, |
summary_table => 1, |
maximum_row => 1, |
maximum_row => 1, |
shortdesc => 'Score on each Problem Part', |
shortdesc => 'Score on each Problem Part', |
Line 507 my @OutputDataOptions =
|
Line 511 my @OutputDataOptions =
|
sequence_sum => 0, |
sequence_sum => 0, |
sequence_max => 0, |
sequence_max => 0, |
grand_total => 0, |
grand_total => 0, |
|
grand_maximum => 0, |
summary_table => 0, |
summary_table => 0, |
maximum_row => 0, |
maximum_row => 0, |
shortdesc => 'Number of Tries before success on each Problem Part', |
shortdesc => 'Number of Tries before success on each Problem Part', |
Line 522 my @OutputDataOptions =
|
Line 527 my @OutputDataOptions =
|
sequence_sum => 1, |
sequence_sum => 1, |
sequence_max => 1, |
sequence_max => 1, |
grand_total => 1, |
grand_total => 1, |
|
grand_maximum => 1, |
summary_table => 1, |
summary_table => 1, |
maximum_row => 0, |
maximum_row => 0, |
shortdesc => 'Number of Problem Parts completed successfully.', |
shortdesc => 'Number of Problem Parts completed successfully.', |
Line 601 Return a line of the chart for a student
|
Line 607 Return a line of the chart for a student
|
|
|
my $nodata_count; # The number of students for which there is no data |
my $nodata_count; # The number of students for which there is no data |
my %prog_state; # progress state used by loncommon PrgWin routines |
my %prog_state; # progress state used by loncommon PrgWin routines |
|
my $total_sum_width; |
|
|
sub html_initialize { |
sub html_initialize { |
my ($r) = @_; |
my ($r) = @_; |
Line 627 sub html_initialize {
|
Line 634 sub html_initialize {
|
} |
} |
# |
# |
# Compute the column widths and output the sequence titles |
# Compute the column widths and output the sequence titles |
|
my $total_count; |
foreach my $sequence (&Apache::lonstatistics::Sequences_with_Assess()){ |
foreach my $sequence (&Apache::lonstatistics::Sequences_with_Assess()){ |
# |
# |
# Comptue column widths |
# Comptue column widths |
Line 636 sub html_initialize {
|
Line 644 sub html_initialize {
|
# Use 1 digit for a space |
# Use 1 digit for a space |
$sequence->{'width_sum'} += 1; |
$sequence->{'width_sum'} += 1; |
} |
} |
|
$total_count += $sequence->{'num_assess_parts'}; |
# Use 3 digits for the sum |
# Use 3 digits for the sum |
$sequence->{'width_sum'} += 3; |
$sequence->{'width_sum'} += 3; |
} |
} |
Line 666 sub html_initialize {
|
Line 675 sub html_initialize {
|
length($sequence->{'title'}) |
length($sequence->{'title'}) |
).$padding; |
).$padding; |
} |
} |
$Str .= "total</pre>\n"; |
$total_sum_width = length($total_count)+1; |
|
$Str .= " total</pre>\n"; |
$Str .= "<pre>"; |
$Str .= "<pre>"; |
$r->print($Str); |
$r->print($Str); |
$r->rflush(); |
$r->rflush(); |
Line 684 sub html_outputstudent {
|
Line 694 sub html_outputstudent {
|
my @to_show = &get_student_fields_to_show(); |
my @to_show = &get_student_fields_to_show(); |
foreach my $field (@to_show) { |
foreach my $field (@to_show) { |
my $title=$student->{$field}; |
my $title=$student->{$field}; |
|
# Deal with 'comments' - how I love special cases |
|
if ($field eq 'comments') { |
|
$title = '<a href="/adm/'.$student->{'domain'}.'/'.$student->{'username'}.'/'.'aboutme#coursecomment">'.&mt('Comments').'</a>'; |
|
} |
my $base = length($title); |
my $base = length($title); |
my $width=$Apache::lonstatistics::StudentData{$field}->{'width'}; |
my $width=$Apache::lonstatistics::StudentData{$field}->{'width'}; |
$Str .= $title.' 'x($width-$base).$padding; |
$Str .= $title.' 'x($width-$base).$padding; |
Line 761 sub html_outputstudent {
|
Line 775 sub html_outputstudent {
|
$max += $seq_stats->{'max'}; |
$max += $seq_stats->{'max'}; |
} |
} |
if (! defined($score)) { |
if (! defined($score)) { |
$score = ' 'x3; |
$score = ' ' x $total_sum_width; |
} |
} |
$Str .= ' '.' 'x(length($max)-length($score)).$score.'/'.$max; |
$Str .= ' '.' 'x($total_sum_width-length($score)).$score.' / '.$max; |
$Str .= " \n"; |
$Str .= " \n"; |
# |
# |
$r->print($Str); |
$r->print($Str); |
Line 886 my %prog_state; # progress window state
|
Line 900 my %prog_state; # progress window state
|
my $request_aborted; |
my $request_aborted; |
|
|
my $total_formula; |
my $total_formula; |
|
my $maximum_formula; |
|
|
sub excel_initialize { |
sub excel_initialize { |
my ($r) = @_; |
my ($r) = @_; |
Line 898 sub excel_initialize {
|
Line 913 sub excel_initialize {
|
undef (%prog_state); |
undef (%prog_state); |
undef ($request_aborted); |
undef ($request_aborted); |
undef ($total_formula); |
undef ($total_formula); |
|
undef ($maximum_formula); |
# |
# |
my $total_columns = scalar(&get_student_fields_to_show()); |
my $total_columns = scalar(&get_student_fields_to_show()); |
my $num_students = scalar(@Apache::lonstatistics::Students); |
my $num_students = scalar(@Apache::lonstatistics::Students); |
Line 1046 END
|
Line 1062 END
|
# |
# |
# Add the remaining column headers |
# Add the remaining column headers |
my $total_formula_string = '=0'; |
my $total_formula_string = '=0'; |
|
my $maximum_formula_string = '=0'; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
$excel_sheet->write($sequence_name_row,, |
$excel_sheet->write($sequence_name_row,, |
$cols_output,$seq->{'title'},$format->{'bold'}); |
$cols_output,$seq->{'title'},$format->{'bold'}); |
Line 1123 END
|
Line 1140 END
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
($first_data_row,$cols_output-1); |
($first_data_row,$cols_output-1); |
if ($chosen_output->{'sequence_max'}) { |
if ($chosen_output->{'sequence_max'}) { |
$excel_sheet->write($resource_name_row,$cols_output++, |
$excel_sheet->write($resource_name_row,$cols_output, |
'maximum', |
'maximum', |
$format->{'bold'}); |
$format->{'bold'}); |
|
$seq->{'Excel:maxcell'} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($first_data_row,$cols_output); |
|
$seq->{'Excel:maxcol'}=$cols_output; |
|
$maximum_formula_string.='+'. |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($first_data_row,$cols_output); |
|
$cols_output++; |
|
|
} |
} |
} |
} |
if ($chosen_output->{'grand_total'}) { |
if ($chosen_output->{'grand_total'}) { |
$excel_sheet->write($resource_name_row,$cols_output++,'Total', |
$excel_sheet->write($resource_name_row,$cols_output++,'Total', |
$format->{'bold'}); |
$format->{'bold'}); |
} |
} |
|
if ($chosen_output->{'grand_maximum'}) { |
|
$excel_sheet->write($resource_name_row,$cols_output++,'Max. Total', |
|
$format->{'bold'}); |
|
} |
$total_formula = $excel_sheet->store_formula($total_formula_string); |
$total_formula = $excel_sheet->store_formula($total_formula_string); |
|
$maximum_formula = $excel_sheet->store_formula($maximum_formula_string); |
############################################## |
############################################## |
# Output a row for MAX, if appropriate |
# Output a row for MAX, if appropriate |
############################################## |
############################################## |
Line 1150 END
|
Line 1181 END
|
# |
# |
# Add the maximums for each sequence or assessment |
# Add the maximums for each sequence or assessment |
my %total_cell_translation; |
my %total_cell_translation; |
|
my %maximum_cell_translation; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
$cols_output=$seq->{'Excel:startcol'}; |
$cols_output=$seq->{'Excel:startcol'}; |
$total_cell_translation{$seq->{'Excel:scorecell'}} = |
$total_cell_translation{$seq->{'Excel:scorecell'}} = |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
($maximum_data_row,$seq->{'Excel:scorecol'}); |
($maximum_data_row,$seq->{'Excel:scorecol'}); |
|
$maximum_cell_translation{$seq->{'Excel:maxcell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($maximum_data_row,$seq->{'Excel:maxcol'}); |
my $weight; |
my $weight; |
my $max = 0; |
my $max = 0; |
foreach my $resource (@{$seq->{'contents'}}) { |
foreach my $resource (@{$seq->{'contents'}}) { |
Line 1203 END
|
Line 1238 END
|
$total_formula,undef, |
$total_formula,undef, |
%total_cell_translation); |
%total_cell_translation); |
} |
} |
|
if ($chosen_output->{'grand_maximum'}) { |
|
$excel_sheet->repeat_formula($maximum_data_row,$cols_output++, |
|
$maximum_formula,undef, |
|
%total_cell_translation); |
|
} |
} # End of MAXIMUM row output if ($chosen_output->{'maximum_row'}) { |
} # End of MAXIMUM row output if ($chosen_output->{'maximum_row'}) { |
$rows_output = $first_data_row; |
$rows_output = $first_data_row; |
############################################## |
############################################## |
Line 1289 sub excel_outputstudent {
|
Line 1329 sub excel_outputstudent {
|
# Write out student data |
# Write out student data |
my @to_show = &get_student_fields_to_show(); |
my @to_show = &get_student_fields_to_show(); |
foreach my $field (@to_show) { |
foreach my $field (@to_show) { |
$excel_sheet->write($rows_output,$cols_output++,$student->{$field}); |
my $value = $student->{$field}; |
|
if ($field eq 'comments') { |
|
$value = &Apache::lonmsg::retrieve_instructor_comments |
|
($student->{'username'},$student->{'domain'}); |
|
} |
|
$excel_sheet->write($rows_output,$cols_output++,$value); |
} |
} |
# |
# |
# Get student assessment data |
# Get student assessment data |
Line 1304 sub excel_outputstudent {
|
Line 1349 sub excel_outputstudent {
|
# |
# |
# Write out sequence scores and totals data |
# Write out sequence scores and totals data |
my %total_cell_translation; |
my %total_cell_translation; |
|
my %maximum_cell_translation; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
$cols_output = $seq->{'Excel:startcol'}; |
$cols_output = $seq->{'Excel:startcol'}; |
# Keep track of cells to translate in total cell |
# Keep track of cells to translate in total cell |
Line 1377 sub excel_outputstudent {
|
Line 1423 sub excel_outputstudent {
|
$total_formula,undef, |
$total_formula,undef, |
%total_cell_translation); |
%total_cell_translation); |
} |
} |
|
if ($chosen_output->{'grand_maximum'}) { |
|
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
|
$maximum_formula,undef, |
|
%total_cell_translation); |
|
} |
# |
# |
# Bookkeeping |
# Bookkeeping |
$rows_output++; |
$rows_output++; |
Line 1524 END
|
Line 1575 END
|
$sequence_row.= '"",'; |
$sequence_row.= '"",'; |
$resource_row.= '"Total",'; |
$resource_row.= '"Total",'; |
} |
} |
|
if ($chosen_output->{'grand_maximum'}) { |
|
$sequence_row.= '"",'; |
|
$resource_row.= '"Maximum",'; |
|
} |
chomp($sequence_row); |
chomp($sequence_row); |
chomp($resource_row); |
chomp($resource_row); |
print $outputfile $sequence_row."\n"; |
print $outputfile $sequence_row."\n"; |
Line 1540 sub csv_outputstudent {
|
Line 1595 sub csv_outputstudent {
|
# Output student fields |
# Output student fields |
my @to_show = &get_student_fields_to_show(); |
my @to_show = &get_student_fields_to_show(); |
foreach my $field (@to_show) { |
foreach my $field (@to_show) { |
$Str .= '"'.&Apache::loncommon::csv_translate($student->{$field}).'",'; |
my $value = $student->{$field}; |
|
if ($field eq 'comments') { |
|
$value = &Apache::lonmsg::retrieve_instructor_comments |
|
($student->{'username'},$student->{'domain'}); |
|
} |
|
$Str .= '"'.&Apache::loncommon::csv_translate($value).'",'; |
} |
} |
# |
# |
# Get student assessment data |
# Get student assessment data |
Line 1555 sub csv_outputstudent {
|
Line 1615 sub csv_outputstudent {
|
# |
# |
# Output performance data |
# Output performance data |
my $total = 0; |
my $total = 0; |
|
my $maximum = 0; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
my ($performance,$performance_length,$score,$seq_max,$rawdata); |
my ($performance,$performance_length,$score,$seq_max,$rawdata); |
if ($chosen_output->{'tries'}){ |
if ($chosen_output->{'tries'}){ |
Line 1588 sub csv_outputstudent {
|
Line 1649 sub csv_outputstudent {
|
$Str .= '"'.$seq_max.'",'; |
$Str .= '"'.$seq_max.'",'; |
} |
} |
$total+=$score; |
$total+=$score; |
|
$maximum += $seq_max; |
} |
} |
if ($chosen_output->{'grand_total'}) { |
if ($chosen_output->{'grand_total'}) { |
$Str .= '"'.$total.'",'; |
$Str .= '"'.$total.'",'; |
} |
} |
|
if ($chosen_output->{'grand_maximum'}) { |
|
$Str .= '"'.$maximum.'",'; |
|
} |
chop($Str); |
chop($Str); |
$Str .= "\n"; |
$Str .= "\n"; |
print $outputfile $Str; |
print $outputfile $Str; |