version 1.89, 2004/02/12 16:29:00
|
version 1.90, 2004/02/12 21:15:47
|
Line 474 my @OutputDataOptions =
|
Line 474 my @OutputDataOptions =
|
sequence_max => 1, |
sequence_max => 1, |
grand_total => 1, |
grand_total => 1, |
summary_table => 1, |
summary_table => 1, |
|
maximum_row => 1, |
shortdesc => 'Total Score and Maximum Possible for each '. |
shortdesc => 'Total Score and Maximum Possible for each '. |
'Sequence or Folder', |
'Sequence or Folder', |
longdesc => 'The score of each student as well as the '. |
longdesc => 'The score of each student as well as the '. |
Line 490 my @OutputDataOptions =
|
Line 491 my @OutputDataOptions =
|
sequence_max => 1, |
sequence_max => 1, |
grand_total => 1, |
grand_total => 1, |
summary_table => 1, |
summary_table => 1, |
|
maximum_row => 1, |
shortdesc => 'Score on each Problem Part', |
shortdesc => 'Score on each Problem Part', |
longdesc =>'The students score on each problem part, computed as'. |
longdesc =>'The students score on each problem part, computed as'. |
'the part weight * part awarded', |
'the part weight * part awarded', |
Line 504 my @OutputDataOptions =
|
Line 506 my @OutputDataOptions =
|
sequence_sum => 0, |
sequence_sum => 0, |
sequence_max => 0, |
sequence_max => 0, |
grand_total => 0, |
grand_total => 0, |
summary_table => 1, |
summary_table => 0, |
|
maximum_row => 0, |
shortdesc => 'Number of Tries before success on each Problem Part', |
shortdesc => 'Number of Tries before success on each Problem Part', |
longdesc =>'The number of tries before success on each problem part.', |
longdesc =>'The number of tries before success on each problem part.', |
}, |
}, |
Line 519 my @OutputDataOptions =
|
Line 522 my @OutputDataOptions =
|
sequence_max => 1, |
sequence_max => 1, |
grand_total => 1, |
grand_total => 1, |
summary_table => 1, |
summary_table => 1, |
|
maximum_row => 0, |
shortdesc => 'Number of Problem Parts completed successfully.', |
shortdesc => 'Number of Problem Parts completed successfully.', |
longdesc => 'The Number of Problem Parts completed successfully and '. |
longdesc => 'The Number of Problem Parts completed successfully and '. |
'the maximum possible for each student', |
'the maximum possible for each student', |
Line 757 sub html_finish {
|
Line 761 sub html_finish {
|
# |
# |
# Check for suppressed output and close the progress window if so |
# Check for suppressed output and close the progress window if so |
$r->print("</pre>\n"); |
$r->print("</pre>\n"); |
if ($single_student_mode) { |
if ($chosen_output->{'summary_table'}) { |
$r->print(&SingleStudentTotal()); |
if ($single_student_mode) { |
} else { |
$r->print(&SingleStudentTotal()); |
$r->print(&StudentAverageTotal()); |
} else { |
|
$r->print(&StudentAverageTotal()); |
|
} |
} |
} |
$r->rflush(); |
$r->rflush(); |
return; |
return; |
Line 873 sub excel_initialize {
|
Line 879 sub excel_initialize {
|
undef ($total_formula); |
undef ($total_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); |
|
# |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
if ($chosen_output->{'every_problem'}) { |
if ($chosen_output->{'every_problem'}) { |
$total_columns += $seq->{'num_assess_parts'}; |
$total_columns += $seq->{'num_assess_parts'}; |
Line 927 END
|
Line 934 END
|
$rows_output = 0; |
$rows_output = 0; |
$cols_output = 0; |
$cols_output = 0; |
# |
# |
|
# Determine rows |
|
my $header_row = $rows_output++; |
|
my $description_row = $rows_output++; |
|
$rows_output++; # blank row |
|
my $summary_header_row; |
|
if ($chosen_output->{'summary_table'}) { |
|
$summary_header_row = $rows_output++; |
|
$rows_output+= scalar(&Apache::lonstatistics::Sequences_with_Assess()); |
|
$rows_output++; |
|
} |
|
my $sequence_name_row = $rows_output++; |
|
my $resource_name_row = $rows_output++; |
|
my $maximum_data_row = $rows_output++; |
|
if (! $chosen_output->{'maximum_row'}) { |
|
$rows_output--; |
|
} |
|
my $first_data_row = $rows_output++; |
|
# |
# Create sheet |
# Create sheet |
$excel_workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename); |
$excel_workbook = Spreadsheet::WriteExcel->new('/home/httpd'.$filename); |
# |
# |
Line 963 END
|
Line 988 END
|
'mmm d yyyy hh:mm AM/PM'); |
'mmm d yyyy hh:mm AM/PM'); |
# |
# |
# Put the course description in the header |
# Put the course description in the header |
$excel_sheet->write($rows_output,$cols_output++, |
$excel_sheet->write($header_row,$cols_output++, |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}, |
$ENV{'course.'.$ENV{'request.course.id'}.'.description'}, |
$format->{'h1'}); |
$format->{'h1'}); |
$cols_output += 3; |
$cols_output += 3; |
Line 985 END
|
Line 1010 END
|
$sectionstring = "Section ".$Sections[0]; |
$sectionstring = "Section ".$Sections[0]; |
} |
} |
} |
} |
$excel_sheet->write($rows_output,$cols_output++,$sectionstring, |
$excel_sheet->write($header_row,$cols_output++,$sectionstring, |
$format->{'h3'}); |
$format->{'h3'}); |
$cols_output += scalar(@Sections); |
$cols_output += scalar(@Sections); |
# |
# |
# Put the date in there too |
# Put the date in there too |
$excel_sheet->write($rows_output++,$cols_output++, |
$excel_sheet->write($header_row,$cols_output++, |
'Compiled on '.localtime(time),$format->{'h3'}); |
'Compiled on '.localtime(time),$format->{'h3'}); |
# |
# |
$cols_output = 0; |
$cols_output = 0; |
$excel_sheet->write($rows_output++,$cols_output++, |
$excel_sheet->write($description_row,$cols_output++, |
$chosen_output->{'shortdesc'}, |
$chosen_output->{'shortdesc'}, |
$format->{'h3'}); |
$format->{'h3'}); |
# |
############################################## |
# Figure out the rows we need |
# Output headings for the raw data |
my $sequence_name_row = $rows_output+1; |
############################################## |
my $resource_name_row = $sequence_name_row+1; |
|
my $maximum_data_row = $sequence_name_row+2; |
|
my $first_data_row = $sequence_name_row+3; |
|
# |
# |
# Add the student headers |
# Add the student headers |
$cols_output = 0; |
$cols_output = 0; |
Line 1015 END
|
Line 1037 END
|
my $total_formula_string = '=0'; |
my $total_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->{'h3'}); |
$cols_output,$seq->{'title'},$format->{'bold'}); |
# Determine starting cell |
# Determine starting cell |
$seq->{'Excel:startcell'}= |
$seq->{'Excel:startcell'}= |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
($maximum_data_row,$cols_output); |
($first_data_row,$cols_output); |
$seq->{'Excel:startcol'}=$cols_output; |
$seq->{'Excel:startcol'}=$cols_output; |
my $count = 0; |
my $count = 0; |
if ($chosen_output->{'every_problem'}) { |
if ($chosen_output->{'every_problem'}) { |
Line 1053 END
|
Line 1075 END
|
} else { |
} else { |
$seq->{'Excel:endcell'} = |
$seq->{'Excel:endcell'} = |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
($maximum_data_row,$cols_output-1); |
($first_data_row,$cols_output-1); |
$seq->{'Excel:endcol'} = $cols_output-1; |
$seq->{'Excel:endcol'} = $cols_output-1; |
} |
} |
# Create the formula for summing up this sequence |
# Create the formula for summing up this sequence |
Line 1067 END
|
Line 1089 END
|
# Determine cell the score is held in |
# Determine cell the score is held in |
$seq->{'Excel:scorecell'} = |
$seq->{'Excel:scorecell'} = |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
($maximum_data_row,$cols_output); |
($first_data_row,$cols_output); |
$seq->{'Excel:scorecol'}=$cols_output; |
$seq->{'Excel:scorecol'}=$cols_output; |
if ($chosen_output->{'base'} eq 'parts correct total') { |
if ($chosen_output->{'base'} eq 'parts correct total') { |
$excel_sheet->write($resource_name_row,$cols_output++, |
$excel_sheet->write($resource_name_row,$cols_output++, |
Line 1088 END
|
Line 1110 END
|
# |
# |
$total_formula_string.='+'. |
$total_formula_string.='+'. |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
($maximum_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', |
Line 1100 END
|
Line 1122 END
|
$format->{'bold'}); |
$format->{'bold'}); |
} |
} |
$total_formula = $excel_sheet->store_formula($total_formula_string); |
$total_formula = $excel_sheet->store_formula($total_formula_string); |
# |
############################################## |
# Output a row for MAX, if appropriate |
# Output a row for MAX, if appropriate |
if ($chosen_output->{'scores'}) { |
############################################## |
|
if ($chosen_output->{'maximum_row'}) { |
$cols_output = 0; |
$cols_output = 0; |
foreach my $field (&get_student_fields_to_show()) { |
foreach my $field (&get_student_fields_to_show()) { |
if ($field eq 'username' || $field eq 'fullname' || |
if ($field eq 'username' || $field eq 'fullname' || |
Line 1169 END
|
Line 1192 END
|
$total_formula,undef, |
$total_formula,undef, |
%total_cell_translation); |
%total_cell_translation); |
} |
} |
} # End of MAXIMUM row output if ($chosen_output->{'scores'}) { |
} # End of MAXIMUM row output if ($chosen_output->{'maximum_row'}) { |
$rows_output = $first_data_row; |
$rows_output = $first_data_row; |
|
############################################## |
|
# Output summary table, which actually is above the sequence name row. |
|
############################################## |
|
if ($chosen_output->{'summary_table'}) { |
|
$cols_output = 0; |
|
$excel_sheet->write($summary_header_row,$cols_output++, |
|
'Summary Table',$format->{'bold'}); |
|
if ($chosen_output->{'maximum_row'}) { |
|
$excel_sheet->write($summary_header_row,$cols_output++, |
|
'Maximum',$format->{'bold'}); |
|
} |
|
$excel_sheet->write($summary_header_row,$cols_output++, |
|
'Average',$format->{'bold'}); |
|
$excel_sheet->write($summary_header_row,$cols_output++, |
|
'Median',$format->{'bold'}); |
|
$excel_sheet->write($summary_header_row,$cols_output++, |
|
'Std Dev',$format->{'bold'}); |
|
my $row = $summary_header_row+1; |
|
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
|
$cols_output = 0; |
|
$excel_sheet->write($row,$cols_output++, |
|
$seq->{'title'}, |
|
$format->{'bold'}); |
|
if ($chosen_output->{'maximum_row'}) { |
|
$excel_sheet->write |
|
($row,$cols_output++, |
|
'='. |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($maximum_data_row,$seq->{'Excel:scorecol'}) |
|
); |
|
} |
|
my $range = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($first_data_row,$seq->{'Excel:scorecol'}). |
|
':'. |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($first_data_row+$num_students-1,$seq->{'Excel:scorecol'}); |
|
$excel_sheet->write($row,$cols_output++, |
|
'=AVERAGE('.$range.')'); |
|
$excel_sheet->write($row,$cols_output++, |
|
'=MEDIAN('.$range.')'); |
|
$excel_sheet->write($row,$cols_output++, |
|
'=STDEV('.$range.')'); |
|
$row++; |
|
} |
|
} |
|
############################################## |
|
# Take care of non-excel initialization |
|
############################################## |
# |
# |
# Let the user know what we are doing |
# Let the user know what we are doing |
my $studentcount = scalar(@Apache::lonstatistics::Students); |
my $studentcount = scalar(@Apache::lonstatistics::Students); |