version 1.97, 2004/03/10 18:41:37
|
version 1.104, 2004/08/25 21:04:37
|
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 |
$sequence->{'width_sum'} = 0; |
$sequence->{'width_sum'} = 0; |
if ($chosen_output->{'sequence_sum'}) { |
if ($chosen_output->{'sequence_sum'}) { |
|
if ($chosen_output->{'every_problem'}) { |
|
# Use 1 digit for a space |
|
$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; |
} |
} |
if ($chosen_output->{'sequence_max'}) { |
if ($chosen_output->{'sequence_max'}) { |
if ($sequence->{'width_sum'}>0) { |
if ($sequence->{'width_sum'}>0) { |
Line 662 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 680 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 715 sub html_outputstudent {
|
Line 733 sub html_outputstudent {
|
$seq,$show_links); |
$seq,$show_links); |
} |
} |
my $ratio=''; |
my $ratio=''; |
|
if ($chosen_output->{'every_problem'}) { |
|
$ratio .= ' '; |
|
} |
if ($chosen_output->{'sequence_sum'} && $score ne ' ') { |
if ($chosen_output->{'sequence_sum'} && $score ne ' ') { |
$ratio .= sprintf("%3d",$score); |
$ratio .= sprintf("%3.0f",$score); |
} else { |
} elsif($chosen_output->{'sequence_sum'}) { |
$ratio .= ' 'x3; |
$ratio .= ' 'x3; |
} |
} |
if ($chosen_output->{'sequence_max'}) { |
if ($chosen_output->{'sequence_max'}) { |
if ($chosen_output->{'sequence_sum'}) { |
if ($chosen_output->{'sequence_sum'}) { |
$ratio .= '/'; |
$ratio .= '/'; |
} |
} |
$ratio .= sprintf("%3d",$seq_max); |
$ratio .= sprintf("%3.0f",$seq_max); |
} |
} |
# |
# |
if (! $chosen_output->{'every_problem'}) { |
if (! $chosen_output->{'every_problem'}) { |
Line 754 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 879 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 891 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 1039 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 1116 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 1143 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 1196 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 1282 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 1297 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 1370 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 1517 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 1533 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 1548 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 1581 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; |
Line 1714 sub StudentTriesOnSequence {
|
Line 1786 sub StudentTriesOnSequence {
|
} |
} |
} |
} |
# |
# |
if (! defined($tries)) { |
if (! defined($tries) || $symbol eq '.') { |
$tries = $symbol; |
$tries = $symbol; |
} |
} |
push (@TriesData,$tries); |
push (@TriesData,$tries); |