--- loncom/interface/Attic/lonspreadsheet.pm 2002/11/19 19:20:50 1.142 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/11/19 22:36:09 1.143 @@ -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 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); } @@ -1189,7 +1189,7 @@ sub sort_indicies { 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 @@ sub sort_indicies { } @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 @@ sub sort_indicies { 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 @@ END 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 @@ END last; } } - next if $row_is_empty; + next if ($row_is_empty); } # my $defaultbg='#E0FF'; @@ -1535,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'}); @@ -1651,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)); @@ -1680,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'; } @@ -3211,7 +3225,7 @@ ENDSCRIPT #value='Insert Row Bottom'>
#ENDINSERTBUTTONS # Print out sheet - &outsheet($r,$sheet); + &outsheet($sheet,$r); $r->print(''); # Done return OK;