version 1.2, 2003/05/19 14:34:54
|
version 1.8, 2003/05/29 13:39:38
|
Line 48 package Apache::studentcalc;
|
Line 48 package Apache::studentcalc;
|
use strict; |
use strict; |
use Apache::Constants qw(:common :http); |
use Apache::Constants qw(:common :http); |
use Apache::lonnet; |
use Apache::lonnet; |
|
use Apache::loncommon(); |
|
use Apache::loncoursedata(); |
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
use Apache::Spreadsheet; |
use Apache::Spreadsheet(); |
use Apache::assesscalc; |
use Apache::assesscalc(); |
use HTML::Entities(); |
use HTML::Entities(); |
use Spreadsheet::WriteExcel; |
use Spreadsheet::WriteExcel; |
use Time::HiRes; |
use Time::HiRes; |
Line 62 my %Exportrows = ();
|
Line 64 my %Exportrows = ();
|
|
|
my $current_course; |
my $current_course; |
|
|
|
sub initialize { |
|
&initialize_sequence_cache(); |
|
} |
|
|
sub initialize_package { |
sub initialize_package { |
$current_course = $ENV{'request.course.id'}; |
$current_course = $ENV{'request.course.id'}; |
&initialize_sequence_cache(); |
&initialize_sequence_cache(); |
&load_cached_export_rows(); |
&load_cached_export_rows(); |
} |
} |
|
|
|
sub ensure_correct_sequence_data { |
|
if ($current_course ne $ENV{'request.course.id'}) { |
|
&initialize_sequence_cache(); |
|
$current_course = $ENV{'request.course.id'}; |
|
} |
|
return; |
|
} |
|
|
sub initialize_sequence_cache { |
sub initialize_sequence_cache { |
# |
# |
# Set up the sequences and assessments |
# Set up the sequences and assessments |
Line 89 sub clear_package {
|
Line 103 sub clear_package {
|
|
|
sub get_title { |
sub get_title { |
my $self = shift; |
my $self = shift; |
my $title = ''; |
my @title = (); |
$title .= '<h2>Spreadsheet for '. |
# |
$self->{'name'}.'@'.$self->{'domain'}.'</h2>'; |
# Determine the students name |
|
my %userenv = &Apache::loncoursedata::GetUserName($self->{'name'}, |
|
$self->{'domain'}); |
|
my $name = join(' ', |
|
@userenv{'firstname','middlename','lastname','generation'}); |
|
$name =~ s/\s+$//; |
|
|
|
push (@title,$name); |
|
push (@title,$self->{'coursedesc'}); |
|
push (@title,scalar(localtime(time))); |
|
return @title; |
|
} |
|
|
|
sub get_html_title { |
|
my $self = shift; |
|
my ($name,$desc,$time) = $self->get_title(); |
|
my $title = '<h1>'.$name; |
|
if ($ENV{'user.name'} ne $self->{'name'} && |
|
$ENV{'user.domain'} ne $self->{'domain'}) { |
|
$title .= &Apache::loncommon::aboutmewrapper |
|
($self->{'name'}.'@'.$self->{'domain'}, |
|
$self->{'name'},$self->{'domain'}); |
|
} |
|
$title .= "</h1>\n"; |
|
$title .= '<h2>'.$desc."</h2>\n"; |
|
$title .= '<h3>'.$time.'</h3>'; |
return $title; |
return $title; |
} |
} |
|
|
Line 140 END
|
Line 179 END
|
$label_num++; |
$label_num++; |
} |
} |
$tableheader .="</tr>\n"; |
$tableheader .="</tr>\n"; |
# |
if ($self->blackout()) { |
$r->print($tableheader); |
$r->print('<font color="red" size="+2"><p>'. |
# |
'Some computations are not available at this time.<br />'. |
# Print out template row |
'There are problems whose status you are allowed to view.'. |
$r->print('<tr><td>Template</td><td> </td>'. |
'</font></p>'."\n"); |
$self->html_template_row($num_uneditable)."</tr>\n"); |
} else { |
# |
$r->print($tableheader); |
# Print out summary/export row |
# |
$r->print('<tr><td>Export</td><td>0</td>'. |
# Print out template row |
$self->html_export_row()."</tr>\n"); |
if (exists($ENV{'request.role.adv'}) && $ENV{'request.role.adv'}) { |
|
$r->print('<tr><td>Template</td><td> </td>'. |
|
$self->html_template_row($num_uneditable)."</tr>\n"); |
|
} |
|
# |
|
# Print out summary/export row |
|
$r->print('<tr><td>Summary</td><td>0</td>'. |
|
$self->html_export_row()."</tr>\n"); |
|
} |
$r->print("</table>\n"); |
$r->print("</table>\n"); |
# |
# |
# Prepare to output rows |
# Prepare to output rows |
$tableheader =<<"END"; |
if (exists($ENV{'request.role.adv'}) && $ENV{'request.role.adv'}) { |
|
$tableheader =<<"END"; |
</p><p> |
</p><p> |
<table border="2"> |
<table border="2"> |
<tr><th>Row</th><th>Assessment</th> |
<tr><th>Row</th><th>Assessment</th> |
END |
END |
|
} else { |
|
$tableheader =<<"END"; |
|
</p><p> |
|
<table border="2"> |
|
<tr><th> </th><th>Assessment</th> |
|
END |
|
} |
foreach (split(//,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')){ |
foreach (split(//,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')){ |
if ($label_num<$num_uneditable) { |
if ($label_num<$num_uneditable) { |
$tableheader.='<td bgcolor="#FFDDDD">'; |
$tableheader.='<td bgcolor="#FFDDDD">'; |
Line 187 END
|
Line 242 END
|
'<a href="/adm/assesscalc?sname='.$self->{'name'}. |
'<a href="/adm/assesscalc?sname='.$self->{'name'}. |
'&sdomain='.$self->{'domain'}. |
'&sdomain='.$self->{'domain'}. |
'&filename='.$assess_filename. |
'&filename='.$assess_filename. |
'&usymb='.&Apache::lonnet::escape($resource->{'symb'}).'">'. |
'&usymb='.&Apache::lonnet::escape($resource->{'symb'}). |
$resource->{'title'}.'</a><br />'; |
'">'.$resource->{'title'}.'</a><br />'; |
$row_output .= &assess_file_selector($rownum, |
$row_output .= &assess_file_selector($rownum, |
$assess_filename, |
$assess_filename, |
\@AssessFileNames). |
\@AssessFileNames). |
'</td>'; |
'</td>'; |
} else { |
} else { |
$row_output .= '<td><a href="'.$resource->{'src'}.'?symb='. |
$row_output .= '<td><a href="'.$resource->{'src'}.'?symb='. |
&Apache::lonnet::escape($resource->{'symb'}).'>Go To</a>'; |
&Apache::lonnet::escape($resource->{'symb'}). |
|
'">Go To</a>'; |
$row_output .= '</td><td>'.$resource->{'title'}.'</td>'; |
$row_output .= '</td><td>'.$resource->{'title'}.'</td>'; |
} |
} |
$row_output .= $self->html_row($num_uneditable,$rownum). |
if ($self->blackout() && $self->{'blackout_rows'}->{$rownum}>0) { |
"</tr>\n"; |
$row_output .= |
|
'<td colspan="52">Unavailable at this time</td></tr>'."\n"; |
|
} else { |
|
$row_output .= $self->html_row($num_uneditable,$rownum). |
|
"</tr>\n"; |
|
} |
$r->print($row_output); |
$r->print($row_output); |
} |
} |
$r->print("</table>\n"); |
$r->print("</table>\n"); |
Line 263 sub modify_cell {
|
Line 324 sub modify_cell {
|
return; |
return; |
} |
} |
|
|
sub outsheet_csv { |
sub csv_rows { |
|
# writes the meat of the spreadsheet to an excel worksheet. Called |
|
# by Spreadsheet::outsheet_excel; |
my $self = shift; |
my $self = shift; |
my ($r) = @_; |
my ($filehandle) = @_; |
|
# |
|
# Write a header row |
|
$self->csv_output_row($filehandle,undef, |
|
('Container','Assessment title')); |
|
# |
|
# Write each assessments row |
|
if (scalar(@Sequences)< 1) { |
|
&initialize_sequence_cache(); |
|
} |
|
foreach my $Sequence (@Sequences) { |
|
next if ($Sequence->{'num_assess'} < 1); |
|
foreach my $resource (@{$Sequence->{'contents'}}) { |
|
my $rownum = $self->get_row_number_from_key($resource->{'symb'}); |
|
my @assessdata = ($Sequence->{'title'}, |
|
$resource->{'title'}); |
|
$self->csv_output_row($filehandle,$rownum,@assessdata); |
|
} |
|
} |
|
return; |
} |
} |
sub outsheet_excel { |
|
|
sub excel_rows { |
|
# writes the meat of the spreadsheet to an excel worksheet. Called |
|
# by Spreadsheet::outsheet_excel; |
my $self = shift; |
my $self = shift; |
my ($r) = @_; |
my ($worksheet,$cols_output,$rows_output) = @_; |
|
# |
|
# Write a header row |
|
$cols_output = 0; |
|
foreach my $value ('Container','Assessment title') { |
|
$worksheet->write($rows_output,$cols_output++,$value); |
|
} |
|
$rows_output++; |
|
# |
|
# Write each assessments row |
|
if (scalar(@Sequences)< 1) { |
|
&initialize_sequence_cache(); |
|
} |
|
foreach my $Sequence (@Sequences) { |
|
next if ($Sequence->{'num_assess'} < 1); |
|
foreach my $resource (@{$Sequence->{'contents'}}) { |
|
my $rownum = $self->get_row_number_from_key($resource->{'symb'}); |
|
my @assessdata = ($Sequence->{'title'}, |
|
$resource->{'title'}); |
|
$self->excel_output_row($worksheet,$rownum,$rows_output++, |
|
@assessdata); |
|
} |
|
} |
|
return; |
} |
} |
|
|
sub outsheet_recursive_excel { |
sub outsheet_recursive_excel { |
my $self = shift; |
my $self = shift; |
my ($r) = @_; |
my ($r) = @_; |
} |
} |
|
|
sub display { |
|
my $self = shift; |
|
my ($r) = @_; |
|
$self->compute(); |
|
$self->outsheet_html($r); |
|
return; |
|
} |
|
|
|
sub set_row_sources { |
sub set_row_sources { |
my $self = shift; |
my $self = shift; |
while (my ($cell,$value) = each(%{$self->{'formulas'}})) { |
while (my ($cell,$value) = each(%{$self->{'formulas'}})) { |
Line 340 sub compute {
|
Line 441 sub compute {
|
$assess_filename, |
$assess_filename, |
$resource->{'symb'}); |
$resource->{'symb'}); |
my @exportdata = $assessSheet->export_data(); |
my @exportdata = $assessSheet->export_data(); |
|
if ($assessSheet->blackout()) { |
|
$self->blackout(1); |
|
$self->{'blackout_rows'}->{$rownum} = 1; |
|
} |
# |
# |
# Be sure not to disturb the formulas in the 'A' column |
# Be sure not to disturb the formulas in the 'A' column |
my $data = shift(@exportdata); |
my $data = shift(@exportdata); |
Line 448 Writes the export data for this student
|
Line 553 Writes the export data for this student
|
############################################# |
############################################# |
sub save_export_data { |
sub save_export_data { |
my $self = shift; |
my $self = shift; |
|
return if ($self->temporary()); |
my $student = $self->{'name'}.':'.$self->{'domain'}; |
my $student = $self->{'name'}.':'.$self->{'domain'}; |
return if (! exists($Exportrows{$student})); |
return if (! exists($Exportrows{$student})); |
return if (! $self->is_default()); |
return if (! $self->is_default()); |