--- loncom/interface/Attic/lonspreadsheet.pm 2001/01/02 22:58:46 1.31 +++ loncom/interface/Attic/lonspreadsheet.pm 2001/01/20 12:29:37 1.35 @@ -3,7 +3,7 @@ # # 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 Gerd Kortemeyer +# 01/01/01,02/01,03/01,19/01,20/01 Gerd Kortemeyer package Apache::lonspreadsheet; @@ -20,7 +20,12 @@ use HTML::TokeParser; # These cache hashes need to be independent of user, resource and course # (user and course can/should be in the keys) # -use vars qw(%spreadsheets %courserdatas %userrdatas %defaultsheets); + +my %spreadsheets; +my %courserdatas; +my %userrdatas; +my %defaultsheets; +my %updatedata; # # These global hashes are dependent on user, course and resource, @@ -423,22 +428,22 @@ ENDDEFS # ------------------------------------------------ Add or change formula values sub setformulas { - my ($safeeval,@f)=@_; - $safeeval->reval('%f='."('".join("','",@f)."');"); + my ($safeeval,%f)=@_; + %{$safeeval->varglob('f')}=%f; } # ------------------------------------------------ Add or change formula values sub setconstants { - my ($safeeval,@c)=@_; - $safeeval->reval('%c='."('".join("','",@c)."');"); + my ($safeeval,%c)=@_; + %{$safeeval->varglob('c')}=%c; } # ------------------------------------------------ Add or change formula values sub setrowlabels { - my ($safeeval,@rl)=@_; - $safeeval->reval('%rl='."('".join("','",@rl)."');"); + my ($safeeval,%rl)=@_; + %{$safeeval->varglob('rl')}=%rl; } # ------------------------------------------------------- Calculate spreadsheet @@ -459,7 +464,7 @@ sub getvalues { sub getformulas { my $safeeval=shift; - return $safeeval->reval('%f'); + return %{$safeeval->varglob('f')}; } # -------------------------------------------------------------------- Get type @@ -1056,6 +1061,9 @@ sub updateclasssheet { sub updatestudentassesssheet { my $safeeval=shift; my %bighash; + my $stype=&gettype($safeeval); + my %current=(); + unless ($updatedata{$ENV{'request.course.fn'}.'_'.$stype}) { # -------------------------------------------------------------------- Tie hash if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', &GDBM_READER,0640)) { @@ -1064,8 +1072,6 @@ sub updatestudentassesssheet { my %allkeys=(); my %allassess=(); - my $stype=&gettype($safeeval); - map { if ($_=~/^src\_(\d+)\.(\d+)$/) { my $mapid=$1; @@ -1102,17 +1108,28 @@ sub updatestudentassesssheet { # %allkeys has a list of storage and parameter displays by unikey # %allassess has a list of all resource displays by symb # -# -------------------- Find discrepancies between the course row table and this -# - my %f=&getformulas($safeeval); - my $changed=0; - my %current=(); if ($stype eq 'assesscalc') { %current=%allkeys; } elsif ($stype eq 'studentcalc') { %current=%allassess; } + $updatedata{$ENV{'request.course.fn'}.'_'.$stype}= + join('___;___',%current); + undef %allkeys; + undef %allassess; + } else { + return 'Could not access course data'; + } +# ------------------------------------------------------ Get current from cache + } else { + %current=split(/\_\_\_\;\_\_\_/, + $updatedata{$ENV{'request.course.fn'}.'_'.$stype}); + } +# -------------------- Find discrepancies between the course row table and this +# + my %f=&getformulas($safeeval); + my $changed=0; my $maxrow=0; my %existing=(); @@ -1138,15 +1155,14 @@ sub updatestudentassesssheet { $f{'A'.$maxrow}=$_; } } keys %current; - + if ($changed) { &setformulas($safeeval,%f); } &setmaxrow($safeeval,$maxrow); &setrowlabels($safeeval,%current); - - } else { - return 'Could not access course data'; - } + + undef %current; + undef %existing; } # ------------------------------------------------ Load data for one assessment @@ -1190,13 +1206,12 @@ sub loadcourse { if ($_=~/^A(\d+)/) { my $row=$1; unless (($f{$_}=~/^\!/) - -|| ($row>25)) - +|| ($row>200)) { my @studentdata=&exportsheet(&getuname($safeeval), &getudom($safeeval), 'studentcalc'); + undef %userrdatas; my $index=0; map { if ($studentdata[$index]) { @@ -1260,7 +1275,7 @@ sub loadassessment { unless ($uhome eq 'no_host') { # -------------------------------------------------------------- Get coursedata unless - ((time-$courserdatas{$cid.'.last_cache'})<120) { + ((time-$courserdatas{$cid.'.last_cache'})<240) { my $reply=&Apache::lonnet::reply('dump:'.$cdom.':'.$cnum. ':resourcedata',$chome); if ($reply!~/^error\:/) { @@ -1275,7 +1290,7 @@ sub loadassessment { } split(/\&/,$courserdatas{$ENV{'request.course.id'}}); # --------------------------------------------------- Get userdata (if present) unless - ((time-$userrdatas{$uname.'___'.$udom.'.last_cache'})<120) { + ((time-$userrdatas{$uname.'___'.$udom.'.last_cache'})<240) { my $reply= &Apache::lonnet::reply('dump:'.$udom.':'.$uname.':resourcedata',$uhome); if ($reply!~/^error\:/) { @@ -1571,6 +1586,9 @@ ENDSCRIPT &outsheet($r,$asheet); $r->print(''); +# --------------------------------- We know this leaks, so terminate this child + + $r->child_terminate(); # ------------------------------------------------------------------------ Done } else {