version 1.74, 2003/11/11 22:14:28
|
version 1.76, 2003/12/05 21:04:34
|
Line 54 use Apache::lonstatistics;
|
Line 54 use Apache::lonstatistics;
|
use Apache::lonhtmlcommon; |
use Apache::lonhtmlcommon; |
use Apache::loncoursedata; |
use Apache::loncoursedata; |
use Apache::lonnet; # for logging porpoises |
use Apache::lonnet; # for logging porpoises |
|
use Apache::lonlocal; |
use Spreadsheet::WriteExcel; |
use Spreadsheet::WriteExcel; |
|
use Spreadsheet::WriteExcel::Utility(); |
|
|
####################################################### |
####################################################### |
####################################################### |
####################################################### |
Line 316 sub CreateInterface {
|
Line 318 sub CreateInterface {
|
# $Str .= &CreateLegend(); |
# $Str .= &CreateLegend(); |
$Str .= '<table cellspacing="5">'."\n"; |
$Str .= '<table cellspacing="5">'."\n"; |
$Str .= '<tr>'; |
$Str .= '<tr>'; |
$Str .= '<td align="center"><b>Sections</b></td>'; |
$Str .= '<td align="center"><b>'.&mt('Sections').'</b></td>'; |
$Str .= '<td align="center"><b>Student Data</b></td>'; |
$Str .= '<td align="center"><b>'.&mt('Student Data</b>').'</td>'; |
$Str .= '<td align="center"><b>Enrollment Status</b></td>'; |
$Str .= '<td align="center"><b>'.&mt('Enrollment Status').'</b></td>'; |
$Str .= '<td align="center"><b>Sequences and Folders</b></td>'; |
$Str .= '<td align="center"><b>'.&mt('Sequences and Folders').'</b></td>'; |
$Str .= '<td align="center"><b>Output Format</b>'. |
$Str .= '<td align="center"><b>'.&mt('Output Format').'</b>'. |
&Apache::loncommon::help_open_topic("Chart_Output_Formats"). |
&Apache::loncommon::help_open_topic("Chart_Output_Formats"). |
'</td>'; |
'</td>'; |
$Str .= '<td align="center"><b>Output Data</b>'. |
$Str .= '<td align="center"><b>'.&mt('Output Data').'</b>'. |
&Apache::loncommon::help_open_topic("Chart_Output_Data"). |
&Apache::loncommon::help_open_topic("Chart_Output_Data"). |
'</td>'; |
'</td>'; |
$Str .= '</tr>'."\n"; |
$Str .= '</tr>'."\n"; |
Line 352 sub CreateInterface {
|
Line 354 sub CreateInterface {
|
$Str .= &CreateAndParseOutputDataSelector(); |
$Str .= &CreateAndParseOutputDataSelector(); |
$Str .= '</td></tr>'."\n"; |
$Str .= '</td></tr>'."\n"; |
$Str .= '</table>'."\n"; |
$Str .= '</table>'."\n"; |
$Str .= '<input type="submit" value="Generate Chart" />'; |
$Str .= '<input type="submit" name="Generate Chart" value="'. |
|
&mt('Generate Chart').'" />'; |
$Str .= ' 'x5; |
$Str .= ' 'x5; |
$Str .= '<input type="submit" name="selectstudent" '. |
$Str .= '<input type="submit" name="selectstudent" value="'. |
'value="Select One Student" />'; |
&mt('Select One Student').'" />'; |
$Str .= ' 'x5; |
$Str .= ' 'x5; |
$Str .= '<input type="submit" name="ClearCache" value="Clear Caches" />'; |
$Str .= '<input type="submit" name="ClearCache" value="'. |
|
&mt('Clear Caches').'" />'; |
$Str .= ' 'x5; |
$Str .= ' 'x5; |
$Str .= '<br />'; |
$Str .= '<br />'; |
return $Str; |
return $Str; |
Line 458 sub CreateAndParseOutputSelector {
|
Line 462 sub CreateAndParseOutputSelector {
|
foreach my $option (@OutputOptions) { |
foreach my $option (@OutputOptions) { |
$Str .= "\n".' <option value="'.$option->{'value'}.'"'; |
$Str .= "\n".' <option value="'.$option->{'value'}.'"'; |
$Str .= " selected " if ($option->{'value'} eq $selected); |
$Str .= " selected " if ($option->{'value'} eq $selected); |
$Str .= ">".$option->{'name'}."<\/option>"; |
$Str .= ">".&mt($option->{'name'})."<\/option>"; |
} |
} |
$Str .= "\n</select>"; |
$Str .= "\n</select>"; |
return $Str; |
return $Str; |
Line 566 sub CreateAndParseOutputDataSelector {
|
Line 570 sub CreateAndParseOutputDataSelector {
|
foreach my $option (@OutputDataOptions) { |
foreach my $option (@OutputDataOptions) { |
$Str .= "\n".' <option value="'.$option->{'value'}.'"'; |
$Str .= "\n".' <option value="'.$option->{'value'}.'"'; |
$Str .= " selected " if ($option->{'value'} eq $data); |
$Str .= " selected " if ($option->{'value'} eq $data); |
$Str .= ">".$option->{'name'}."<\/option>"; |
$Str .= ">".&mt($option->{'name'})."<\/option>"; |
} |
} |
$Str .= "\n</select>"; |
$Str .= "\n</select>"; |
return $Str; |
return $Str; |
Line 856 my $cols_output;
|
Line 860 my $cols_output;
|
my %prog_state; # progress window state |
my %prog_state; # progress window state |
my $request_aborted; |
my $request_aborted; |
|
|
|
my $total_formula; |
|
|
sub excel_initialize { |
sub excel_initialize { |
my ($r) = @_; |
my ($r) = @_; |
# |
# |
Line 866 sub excel_initialize {
|
Line 872 sub excel_initialize {
|
undef ($cols_output); |
undef ($cols_output); |
undef (%prog_state); |
undef (%prog_state); |
undef ($request_aborted); |
undef ($request_aborted); |
|
undef ($total_formula); |
# |
# |
my $total_columns = scalar(&get_student_fields_to_show()); |
my $total_columns = scalar(&get_student_fields_to_show()); |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
Line 997 END
|
Line 1004 END
|
} |
} |
# |
# |
# Add the remaining column headers |
# Add the remaining column headers |
|
my $total_formula_string = '=0'; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
$excel_sheet->write($rows_output+$row_offset, |
$excel_sheet->write($rows_output+$row_offset, |
$cols_output,$seq->{'title'}); |
$cols_output,$seq->{'title'}); |
if ($data eq 'tries' || $data eq 'scores') { |
if ($data eq 'tries' || $data eq 'scores') { |
|
# Determine starting cell |
|
$seq->{'Excel:startcell'}= |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$cols_output); |
|
$seq->{'Excel:startcol'}=$cols_output; |
|
# Put the names of the problems and parts into the sheet |
foreach my $res (@{$seq->{'contents'}}) { |
foreach my $res (@{$seq->{'contents'}}) { |
next if ($res->{'type'} ne 'assessment'); |
next if ($res->{'type'} ne 'assessment'); |
if (scalar(@{$res->{'parts'}}) > 1) { |
if (scalar(@{$res->{'parts'}}) > 1) { |
Line 1015 END
|
Line 1029 END
|
$res->{'title'}); |
$res->{'title'}); |
} |
} |
} |
} |
|
# Determine ending cell |
|
$seq->{'Excel:endcell'} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$cols_output-1); |
|
$seq->{'Excel:endcol'}=$cols_output-1; |
|
# Determine cell the score is held in |
|
$seq->{'Excel:scorecell'} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$cols_output); |
|
$seq->{'Excel:scorecol'}=$cols_output; |
$excel_sheet->write($rows_output,$cols_output++,'score'); |
$excel_sheet->write($rows_output,$cols_output++,'score'); |
|
# Create the formula for summing up this sequence |
|
$seq->{'Excel:sum'}= $excel_sheet->store_formula |
|
('=SUM('.$seq->{'Excel:startcell'}. |
|
':'.$seq->{'Excel:endcell'}.')'); |
|
# |
|
$total_formula_string.='+'. |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$cols_output-1); |
$excel_sheet->write($rows_output,$cols_output++,'maximum'); |
$excel_sheet->write($rows_output,$cols_output++,'maximum'); |
} elsif ($data eq 'sum and total' || $data eq 'parts correct total') { |
} elsif ($data eq 'sum and total') { |
$excel_sheet->write($rows_output+1,$cols_output,'score'); |
$excel_sheet->write($rows_output+1,$cols_output,'score'); |
|
$total_formula_string.='+'. |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output+1,$cols_output); |
|
$excel_sheet->write($rows_output+1,$cols_output+1,'maximum'); |
|
$cols_output += 2; |
|
} elsif ($data eq 'parts correct total') { |
|
$excel_sheet->write($rows_output+1,$cols_output,'parts correct'); |
|
$total_formula_string.='+'. |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output+1,$cols_output); |
$excel_sheet->write($rows_output+1,$cols_output+1,'maximum'); |
$excel_sheet->write($rows_output+1,$cols_output+1,'maximum'); |
$cols_output += 2; |
$cols_output += 2; |
} else { |
} else { |
$cols_output++; |
$cols_output++; |
} |
} |
} |
} |
|
$excel_sheet->write($rows_output,$cols_output,'Grand Total'); |
|
$total_formula = $excel_sheet->store_formula($total_formula_string); |
# |
# |
# Bookkeeping |
# Bookkeeping |
if ($data eq 'sum and total' || $data eq 'parts correct total') { |
if ($data eq 'sum and total' || $data eq 'parts correct total') { |
Line 1045 END
|
Line 1089 END
|
} |
} |
# |
# |
# Add the maximums for each sequence or assessment |
# Add the maximums for each sequence or assessment |
|
my %total_cell_translation; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
|
$total_cell_translation{$seq->{'Excel:scorecell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:scorecol'}); |
my $weight; |
my $weight; |
my $max = 0; |
my $max = 0; |
foreach my $resource (@{$seq->{'contents'}}) { |
foreach my $resource (@{$seq->{'contents'}}) { |
Line 1071 END
|
Line 1119 END
|
if (! ($data eq 'sum only' || $data eq 'parts correct')) { |
if (! ($data eq 'sum only' || $data eq 'parts correct')) { |
$excel_sheet->write($rows_output,$cols_output++,''); |
$excel_sheet->write($rows_output,$cols_output++,''); |
} |
} |
$excel_sheet->write($rows_output,$cols_output++,$max); |
my %replaceCells; |
} |
$replaceCells{$seq->{'Excel:startcell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:startcol'}); |
|
$replaceCells{$seq->{'Excel:endcell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:endcol'}); |
|
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
|
$seq->{'Excel:sum'},undef, |
|
%replaceCells); |
|
} |
|
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
|
$total_formula,undef, |
|
%total_cell_translation); |
$rows_output++; |
$rows_output++; |
# |
# |
# Let the user know what we are doing |
# Let the user know what we are doing |
Line 1116 sub excel_outputstudent {
|
Line 1176 sub excel_outputstudent {
|
} |
} |
# |
# |
# Write out sequence scores and totals data |
# Write out sequence scores and totals data |
|
my %total_cell_translation; |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
foreach my $seq (&Apache::lonstatistics::Sequences_with_Assess()) { |
|
# Keep track of cells to translate in total cell |
|
$total_cell_translation{$seq->{'Excel:scorecell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:scorecol'}); |
|
# |
my ($performance,$performance_length,$score,$seq_max,$rawdata); |
my ($performance,$performance_length,$score,$seq_max,$rawdata); |
if ($base eq 'tries') { |
if ($base eq 'tries') { |
($performance,$performance_length,$score,$seq_max,$rawdata) = |
($performance,$performance_length,$score,$seq_max,$rawdata) = |
Line 1131 sub excel_outputstudent {
|
Line 1197 sub excel_outputstudent {
|
foreach my $value (@$rawdata) { |
foreach my $value (@$rawdata) { |
$excel_sheet->write($rows_output,$cols_output++,$value); |
$excel_sheet->write($rows_output,$cols_output++,$value); |
} |
} |
$excel_sheet->write($rows_output,$cols_output++,$score); |
# Write a formula for the sum of this sequence |
|
my %replaceCells; |
|
$replaceCells{$seq->{'Excel:startcell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:startcol'}); |
|
$replaceCells{$seq->{'Excel:endcell'}} = |
|
&Spreadsheet::WriteExcel::Utility::xl_rowcol_to_cell |
|
($rows_output,$seq->{'Excel:endcol'}); |
|
# The undef is for the format |
|
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
|
$seq->{'Excel:sum'},undef, |
|
%replaceCells); |
|
# |
$excel_sheet->write($rows_output,$cols_output++,$seq_max); |
$excel_sheet->write($rows_output,$cols_output++,$seq_max); |
} elsif ($data eq 'sum and total' || $data eq 'sum only' || |
} elsif ($data eq 'sum and total' || $data eq 'sum only' || |
$data eq 'parts correct' || $data eq 'parts correct total') { |
$data eq 'parts correct' || $data eq 'parts correct total') { |
Line 1142 sub excel_outputstudent {
|
Line 1220 sub excel_outputstudent {
|
} |
} |
} |
} |
# |
# |
|
$excel_sheet->repeat_formula($rows_output,$cols_output++, |
|
$total_formula,undef, |
|
%total_cell_translation); |
|
|
|
# |
# Bookkeeping |
# Bookkeeping |
$rows_output++; |
$rows_output++; |
$cols_output=0; |
$cols_output=0; |