version 1.89, 2004/02/12 16:29:00
|
version 1.91, 2004/02/18 15:43:00
|
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 945 END
|
Line 970 END
|
# File::Temp is used to determine the temporary directory. |
# File::Temp is used to determine the temporary directory. |
$excel_workbook->set_tempdir($Apache::lonnet::tmpdir); |
$excel_workbook->set_tempdir($Apache::lonnet::tmpdir); |
# |
# |
|
my $format = &Apache::loncommon::define_excel_formats($excel_workbook); |
|
# |
# Add a worksheet |
# Add a worksheet |
my $sheetname = $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; |
my $sheetname = $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; |
$sheetname = &Apache::loncommon::clean_excel_name($sheetname); |
$sheetname = &Apache::loncommon::clean_excel_name($sheetname); |
$excel_sheet = $excel_workbook->addworksheet($sheetname); |
$excel_sheet = $excel_workbook->addworksheet($sheetname); |
# |
# |
# Define some potentially useful formats |
|
my $format; |
|
$format->{'header'} = $excel_workbook->add_format(bold => 1, |
|
bottom => 1, |
|
align => 'center'); |
|
$format->{'bold'} = $excel_workbook->add_format(bold=>1); |
|
$format->{'h1'} = $excel_workbook->add_format(bold=>1, size=>18); |
|
$format->{'h2'} = $excel_workbook->add_format(bold=>1, size=>16); |
|
$format->{'h3'} = $excel_workbook->add_format(bold=>1, size=>14); |
|
$format->{'date'} = $excel_workbook->add_format(num_format=> |
|
'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 1000 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 1027 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 1065 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 1079 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 1100 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 1112 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 1182 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); |