--- loncom/interface/Attic/lonspreadsheet.pm 2001/01/20 12:29:37 1.35 +++ loncom/interface/Attic/lonspreadsheet.pm 2001/01/22 18:22:51 1.37 @@ -3,10 +3,10 @@ # # 11/11,11/15,11/27,12/04,12/05,12/06,12/07, # 12/08,12/09,12/11,12/12,12/15,12/16,12/18,12/19,12/30, -# 01/01/01,02/01,03/01,19/01,20/01 Gerd Kortemeyer +# 01/01/01,02/01,03/01,19/01,20/01,22/01 Gerd Kortemeyer package Apache::lonspreadsheet; - + use strict; use Safe; use Safe::Hole; @@ -40,11 +40,30 @@ my %parmhash; my $includedir; my $tmpdir; + +sub mdeb { + my $msg=shift; + my $mem=''; + { + my $mfh=Apache::File->new('/proc/'.$$.'/status'); + my $line; + while ($line=<$mfh>) { + my ($name,$value)=split(/\:/,$line); + if ($name eq 'VmSize') { $mem=$value; } + } + $mfh->close(); + } + print $msg.$mem."
\n"; +} + + + + # ============================================================================= # ===================================== Implements an instance of a spreadsheet sub initsheet { - my $safeeval = new Safe; + my $safeeval = new Safe(shift); my $safehole = new Safe::Hole; $safeeval->permit("entereval"); $safeeval->permit(":base_math"); @@ -61,11 +80,11 @@ sub initsheet { # c: preloaded constants (A-column) # rl: row label -%v=(); -%t=(); -%f=(); -%c=(); -%rl=(); +undef %v; +undef %t; +undef %f; +undef %c; +undef %rl; $maxrow=0; $sheettype=''; @@ -779,7 +798,7 @@ sub readsheet { sub makenewsheet { my ($uname,$udom,$stype,$usymb)=@_; - my $safeeval=initsheet(); + my $safeeval=initsheet($stype); $safeeval->reval( '$uname="'.$uname. '";$udom="'.$udom. @@ -1116,8 +1135,6 @@ sub updatestudentassesssheet { } $updatedata{$ENV{'request.course.fn'}.'_'.$stype}= join('___;___',%current); - undef %allkeys; - undef %allassess; } else { return 'Could not access course data'; } @@ -1171,13 +1188,14 @@ sub loadstudent { my $safeeval=shift; my %c=(); my %f=&getformulas($safeeval); + my @assessdata=(); map { if ($_=~/^A(\d+)/) { my $row=$1; unless ($f{$_}=~/^\!/) { - my @assessdata=&exportsheet(&getuname($safeeval), - &getudom($safeeval), - 'assesscalc',$f{$_}); + @assessdata=&exportsheet(&getuname($safeeval), + &getudom($safeeval), + 'assesscalc',$f{$_}); my $index=0; map { if ($assessdata[$index]) { @@ -1199,19 +1217,32 @@ sub loadstudent { # --------------------------------------------------- Load data for one student sub loadcourse { - my $safeeval=shift; + my ($safeeval,$r)=@_; my %c=(); my %f=&getformulas($safeeval); + my $total=0; + map { + if ($_=~/^A(\d+)/) { + unless ($f{$_}=~/^\!/) { $total++; } + } + } keys %f; + my $now=0; + my $since=time; + $r->print('
'); + $r->rflush(); map { if ($_=~/^A(\d+)/) { my $row=$1; - unless (($f{$_}=~/^\!/) -|| ($row>200)) - { - my @studentdata=&exportsheet(&getuname($safeeval), - &getudom($safeeval), + unless ($f{$_}=~/^\!/) { + my @studentdata=&exportsheet(split(/\:/,$f{$_}), 'studentcalc'); - undef %userrdatas; + undef %userrdatas; + $now++; + $r->print(''."\n"); + $r->rflush(); + my $index=0; map { if ($studentdata[$index]) { @@ -1228,6 +1259,9 @@ sub loadcourse { } keys %f; &setformulas($safeeval,%f); &setconstants($safeeval,%c); + $r->print(''. + "
\n"); + $r->rflush(); } # ------------------------------------------------ Load data for one assessment @@ -1287,7 +1321,7 @@ sub loadassessment { my ($name,$value)=split(/\=/,$_); $courseopt{$userprefix.&Apache::lonnet::unescape($name)}= &Apache::lonnet::unescape($value); - } split(/\&/,$courserdatas{$ENV{'request.course.id'}}); + } split(/\&/,$courserdatas{$cid}); # --------------------------------------------------- Get userdata (if present) unless ((time-$userrdatas{$uname.'___'.$udom.'.last_cache'})<240) { @@ -1376,11 +1410,11 @@ sub updatesheet { # Import the data for rows # -sub loadrows() { - my $safeeval=shift; +sub loadrows { + my ($safeeval,$r)=@_; my $stype=&gettype($safeeval); if ($stype eq 'classcalc') { - &loadcourse($safeeval); + &loadcourse($safeeval,$r); } elsif ($stype eq 'studentcalc') { &loadstudent($safeeval); } else { @@ -1394,15 +1428,14 @@ sub loadrows() { # sub exportsheet { + my ($uname,$udom,$stype,$usymb,$fn)=@_; my $thissheet=&makenewsheet($uname,$udom,$stype,$usymb); &readsheet($thissheet,$fn); &updatesheet($thissheet); &loadrows($thissheet); &calcsheet($thissheet); - my @returnthis=&exportdata($thissheet); - undef $thissheet; - return @returnthis; + return &exportdata($thissheet); } # ================================================================ Main handler @@ -1576,9 +1609,18 @@ ENDSCRIPT # ----------------------------------------------------- Update sheet, load rows + $r->print("Loaded sheet, updating rows ...
\n"); + $r->rflush(); + &updatesheet($asheet); - &loadrows($asheet); + $r->print("Updated rows, loading row data ...
\n"); + $r->rflush(); + + &loadrows($asheet,$r); + + $r->print("Loaded row data, calculating sheet ...
\n"); + $r->rflush(); my $calcoutput=&calcsheet($asheet); $r->print('

'.$calcoutput.'

');