[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;