--- loncom/interface/Attic/lonspreadsheet.pm 2002/11/15 18:19:10 1.140
+++ loncom/interface/Attic/lonspreadsheet.pm 2002/11/19 22:36:09 1.143
@@ -1,5 +1,5 @@
#
-# $Id: lonspreadsheet.pm,v 1.140 2002/11/15 18:19:10 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 exportdata {
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 @@ sub update_student_sheet{
# 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);
}
@@ -1186,17 +1186,45 @@ sub get_row {
########################################################################
sub sort_indicies {
my $sheet = shift;
- #
- # Sort the rows in some manner
- #
- my @sortby=();
my @sortidx=();
- # Skip row 0
- for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
- push (@sortby, $sheet->{'safe'}->reval('$f{"A'.$row.'"}'));
- push (@sortidx, $row);
+ #
+ if ($sheet->{'sheettype'} eq 'classcalc') {
+ my @sortby=(undef);
+ # Skip row 0
+ for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
+ my (undef,$sname,$sdom,$fullname,$section,$id) =
+ split(':',$sheet->{'rowlabel'}->{$sheet->{'f'}->{'A'.$row}});
+ push (@sortby, lc($fullname));
+ push (@sortidx, $row);
+ }
+ @sortidx = sort { $sortby[$a] cmp $sortby[$b]; } @sortidx;
+ } elsif ($sheet->{'sheettype'} eq 'studentcalc') {
+ my @sortby1=(undef);
+ my @sortby2=(undef);
+ # Skip row 0
+ for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
+ my (undef,$symb,$uname,$udom,$mapid,$resid,$title) =
+ split(':',$sheet->{'rowlabel'}->{$sheet->{'f'}->{'A'.$row}});
+ $symb = &Apache::lonnet::unescape($symb);
+ my ($sequence) = ($symb =~ /\/([^\/]*\.sequence)/);
+ if ($sequence eq '') {
+ $sequence = $symb;
+ }
+ push (@sortby1, $sequence);
+ push (@sortby2, $title);
+ push (@sortidx, $row);
+ }
+ @sortidx = sort { $sortby1[$a] cmp $sortby1[$b] ||
+ $sortby2[$a] cmp $sortby2[$b] } @sortidx;
+ } else {
+ my @sortby=(undef);
+ # Skip row 0
+ for (my $row=1;$row<=$sheet->{'maxrow'};$row++) {
+ push (@sortby, $sheet->{'safe'}->reval('$f{"A'.$row.'"}'));
+ push (@sortidx, $row);
+ }
+ @sortidx = sort { $sortby[$a] cmp $sortby[$b]; } @sortidx;
}
- @sortidx=sort { lc($sortby[$a]) cmp lc($sortby[$b]); } @sortidx;
return @sortidx;
}
@@ -1332,6 +1360,20 @@ END
foreach my $rownum (@Rows) {
my ($rowlabel,@rowdata) = &get_row($sheet,$rownum);
next if ($rowlabel =~ /^\s*$/);
+ next if (($sheet->{'sheettype'} eq 'assesscalc') &&
+ (! $ENV{'form.showall'}) &&
+ ($rowdata[0]->{'value'} =~ /^\s*$/));
+ 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);
+ }
#
my $defaultbg='#E0FF';
#
@@ -1496,7 +1538,7 @@ END
# 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'});
@@ -1612,9 +1654,20 @@ sub export_sheet_as_excel {
# 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));
@@ -1641,7 +1694,7 @@ sub outsheet_xml {
## Outsheet - calls other outsheet_* functions
##
sub outsheet {
- my ($r,$sheet)=@_;
+ my ($sheet,$r)=@_;
if (! exists($ENV{'form.output'})) {
$ENV{'form.output'} = 'HTML';
}
@@ -1753,7 +1806,8 @@ sub readsheet {
if ($fh=Apache::File->new($includedir.'/'.$dfn)) {
$sheetxml=join('',<$fh>);
} else {
- $sheetxml='
Show rows with empty A column: '); } else { $r->print('
Show empty rows: ');
@@ -3171,7 +3225,7 @@ ENDSCRIPT
#value='Insert Row Bottom'>
#ENDINSERTBUTTONS
# Print out sheet
- &outsheet($r,$sheet);
+ &outsheet($sheet,$r);
$r->print('