[LON-CAPA-cvs] cvs: loncom /interface lonspreadsheet.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Tue, 19 Nov 2002 22:36:09 -0000
matthew Tue Nov 19 17:36:09 2002 EDT
Modified files:
/loncom/interface lonspreadsheet.pm
Log:
Fixed bad parameter passing for connection interruption testing.
Fixed bug in sort_indicies which existed prior to my changes today - off
by one in my data. Also added secondary sorting in student sheet by
title of assessment.
Fixed bug which prevented the display of empty rows despite form.showall
setting.
Implemented empty row skipping for the excel sheet so what appears in the
html version will appear in the excel version.
Index: loncom/interface/lonspreadsheet.pm
diff -u loncom/interface/lonspreadsheet.pm:1.142 loncom/interface/lonspreadsheet.pm:1.143
--- loncom/interface/lonspreadsheet.pm:1.142 Tue Nov 19 14:20:50 2002
+++ loncom/interface/lonspreadsheet.pm Tue Nov 19 17:36:09 2002
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.142 2002/11/19 19:20:50 matthew Exp $
+# $Id: lonspreadsheet.pm,v 1.143 2002/11/19 22:36:09 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1149,7 +1149,7 @@
sub update_student_sheet{
- my ($sheet,$c) = @_;
+ my ($sheet,$r,$c) = @_;
# Load in the studentcalc sheet
&readsheet($sheet,'default_studentcalc');
# Determine the structure (contained assessments, etc) of the sheet
@@ -1157,7 +1157,7 @@
# Load in the cached sheets for this student
&cachedssheets($sheet);
# Load in the (possibly cached) data from the assessment sheets
- &loadstudent($sheet,$c);
+ &loadstudent($sheet,$r,$c);
# Compute the sheet
&calcsheet($sheet);
}
@@ -1189,7 +1189,7 @@
my @sortidx=();
#
if ($sheet->{'sheettype'} eq 'classcalc') {
- my @sortby=();
+ my @sortby=(undef);
# Skip row 0
for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
my (undef,$sname,$sdom,$fullname,$section,$id) =
@@ -1199,9 +1199,9 @@
}
@sortidx = sort { $sortby[$a] cmp $sortby[$b]; } @sortidx;
} elsif ($sheet->{'sheettype'} eq 'studentcalc') {
- my @sortby=();
+ my @sortby1=(undef);
+ my @sortby2=(undef);
# Skip row 0
- &Apache::lonnet::logthis('starting sort for studentcalc');
for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
my (undef,$symb,$uname,$udom,$mapid,$resid,$title) =
split(':',$sheet->{'rowlabel'}->{$sheet->{'f'}->{'A'.$row}});
@@ -1210,12 +1210,14 @@
if ($sequence eq '') {
$sequence = $symb;
}
- push (@sortby, $sequence);
+ push (@sortby1, $sequence);
+ push (@sortby2, $title);
push (@sortidx, $row);
}
- @sortidx = sort { $sortby[$a] cmp $sortby[$b]; } @sortidx;
+ @sortidx = sort { $sortby1[$a] cmp $sortby1[$b] ||
+ $sortby2[$a] cmp $sortby2[$b] } @sortidx;
} else {
- my @sortby=();
+ my @sortby=(undef);
# Skip row 0
for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
push (@sortby, $sheet->{'safe'}->reval('$f{"A'.$row.'"}'));
@@ -1361,7 +1363,8 @@
next if (($sheet->{'sheettype'} eq 'assesscalc') &&
(! $ENV{'form.showall'}) &&
($rowdata[0]->{'value'} =~ /^\s*$/));
- if ($sheet->{'sheettype'} =~ /^(studentcalc|classcalc)$/) {
+ if (! $ENV{'form.showall'} &&
+ $sheet->{'sheettype'} =~ /^(studentcalc|classcalc)$/) {
my $row_is_empty = 1;
foreach my $cell (@rowdata) {
if ($cell->{'value'} !~ /^\s*$/) {
@@ -1369,7 +1372,7 @@
last;
}
}
- next if $row_is_empty;
+ next if ($row_is_empty);
}
#
my $defaultbg='#E0FF';
@@ -1535,7 +1538,7 @@
# Create a new spreadsheet
my $studentsheet = &makenewsheet($sname,$sdom,'studentcalc',undef);
# Read in the spreadsheet definition
- &update_student_sheet($studentsheet,$c);
+ &update_student_sheet($studentsheet,$r,$c);
# Stuff the sheet into excel
&export_sheet_as_excel($studentsheet,$student_excel_worksheet);
my $totaltime = int((time - $starttime) / $count * $sheet->{'maxrow'});
@@ -1651,9 +1654,20 @@
# Loop through the rows and output them one at a time
foreach my $rownum (@Rows) {
my ($rowlabel,@rowdata) = &get_row($sheet,$rownum);
- next if ($rowlabel =~ /^\s*$/);
+ next if ($rowlabel =~ /^[\s]*$/);
$cols_output = 0;
my $label = &format_excel_rowlabel($rowlabel);
+ if ( ! $ENV{'form.showall'} &&
+ $sheet->{'sheettype'} =~ /^(studentcalc|classcalc)$/) {
+ my $row_is_empty = 1;
+ foreach my $cell (@rowdata) {
+ if ($cell->{'value'} !~ /^\s*$/) {
+ $row_is_empty = 0;
+ last;
+ }
+ }
+ next if ($row_is_empty);
+ }
$worksheet->write($rows_output,$cols_output++,$label);
if (ref($label)) {
$cols_output = (scalar(@$label));
@@ -1680,7 +1694,7 @@
## Outsheet - calls other outsheet_* functions
##
sub outsheet {
- my ($r,$sheet)=@_;
+ my ($sheet,$r)=@_;
if (! exists($ENV{'form.output'})) {
$ENV{'form.output'} = 'HTML';
}
@@ -3211,7 +3225,7 @@
#value='Insert Row Bottom'><br>
#ENDINSERTBUTTONS
# Print out sheet
- &outsheet($r,$sheet);
+ &outsheet($sheet,$r);
$r->print('</form></body></html>');
# Done
return OK;