--- loncom/interface/Attic/lonspreadsheet.pm 2001/01/20 12:29:37 1.35 +++ loncom/interface/Attic/lonspreadsheet.pm 2001/01/20 22:57:05 1.36 @@ -6,7 +6,7 @@ # 01/01/01,02/01,03/01,19/01,20/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]) { @@ -1205,9 +1223,7 @@ sub loadcourse { map { if ($_=~/^A(\d+)/) { my $row=$1; - unless (($f{$_}=~/^\!/) -|| ($row>200)) - { + unless ($f{$_}=~/^\!/) { my @studentdata=&exportsheet(&getuname($safeeval), &getudom($safeeval), 'studentcalc'); @@ -1287,7 +1303,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) { @@ -1394,15 +1410,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 +1591,18 @@ ENDSCRIPT # ----------------------------------------------------- Update sheet, load rows + $r->print("Loaded sheet, updating rows ...
\n"); + $r->rflush(); + &updatesheet($asheet); + + $r->print("Updated rows, loading row data ...
\n"); + $r->rflush(); + &loadrows($asheet); + $r->print("Loaded row data, calculating sheet ...
\n"); + $r->rflush(); my $calcoutput=&calcsheet($asheet); $r->print('

'.$calcoutput.'

');