--- loncom/interface/lonparmset.pm 2005/06/01 21:44:00 1.197 +++ loncom/interface/lonparmset.pm 2005/06/02 13:34:14 1.199 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set parameters for assessments # -# $Id: lonparmset.pm,v 1.197 2005/06/01 21:44:00 www Exp $ +# $Id: lonparmset.pm,v 1.199 2005/06/02 13:34:14 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -64,10 +64,20 @@ use Apache::lonxml; use Apache::lonlocal; use Apache::lonnavmaps; +# --- Caches local to lonparmset + +my $courseoptid; my %courseopt; +my $useroptid; my %useropt; +my $parmhashid; my %parmhash; +# --- end local caches + +# +# FIXME: get rid of items below +# my @ids; my %symbp; my %mapp; @@ -109,6 +119,11 @@ Returns: A list, the first item is the ################################################## sub parmval { my ($what,$id,$def,$uname,$udom,$csec)=@_; +# load caches + &cacheparmhash(); + &cacheuseropt($uname,$udom); + &cachecourseopt(); + my $result=''; my @outpar=(); # ----------------------------------------------------- Cascading lookup scheme @@ -190,6 +205,45 @@ sub parmval { return ($result,@outpar); } +sub resetparmhash { + $parmhashid=''; +} + +sub cacheparmhash { + if ($parmhashid eq $env{'request.course.fn'}) { return; } + my %parmhashfile; + if (tie(%parmhashfile,'GDBM_File', + $env{'request.course.fn'}.'_parms.db',&GDBM_READER(),0640)) { + %parmhash=%parmhashfile; + untie %parmhashfile; + $parmhashid=$env{'request.course.fn'}; + } +} + +sub resetuseropt { + $useroptid=''; +} + +sub cacheuseropt { + my ($uname,$udom)=@_; + unless ($uname) { return; } + if ($useroptid eq $uname.'@'.$udom) { return; } + %useropt=&Apache::lonnet::dump('resourcedata',$udom,$uname); + $useroptid=$uname.'@'.$udom; +} + +sub resetcourseopt { + $courseoptid=''; +} + +sub cachecourseopt { + if ($courseoptid eq $env{'request.course.id'}) { return; }; + %courseopt = &Apache::lonnet::dump + ('resourcedata', + $env{'course.'.$env{'request.course.id'}.'.domain'}, + $env{'course.'.$env{'request.course.id'}.'.num'}); + $courseoptid=$env{'request.course.id'}; +} ################################################## ################################################## @@ -271,6 +325,7 @@ sub storeparm_by_symb { } else { &Apache::lonnet::expirespread('','','assesscalc'); } + &resetcourseopt(); # Store parameter if ($delete) { $reply=&Apache::lonnet::del @@ -297,6 +352,7 @@ sub storeparm_by_symb { } else { &Apache::lonnet::expirespread($uname,$udom,'assesscalc'); } + &resetuseropt(); # Store parameter if ($delete) { $reply=&Apache::lonnet::del @@ -825,8 +881,6 @@ sub assessparms { my %allparts; my %defp; - %courseopt=(); - %useropt=(); @ids=(); %symbp=(); @@ -928,14 +982,6 @@ sub assessparms { my $fcat=$env{'form.fcat'}; unless ($fcat) { $fcat=''; } -# ------------------------------------------------------------------- Tie hashs - - if (!(tie(%parmhash,'GDBM_File', - $env{'request.course.fn'}.'_parms.db',&GDBM_READER(),0640))) { - $r->print("Unable to access parameter data. (File $env{'request.course.fn'}_parms.db not tieable)"); - return ; - } - # --------------------------------------------------------- Get all assessments &extractResourceInformation(\@ids, \%typep,\%keyp, \%allparms, \%allparts, \%allkeys, \%allmaps, $fcat, \%defp, \%mapp, \%symbp,\%maptitles,\%uris); @@ -956,15 +1002,6 @@ sub assessparms { $env{'course.'.$env{'request.course.id'}.'.num'}, $env{'course.'.$env{'request.course.id'}.'.domain'}); #&Apache::lonnet::clear_EXT_cache_status(); -# -------------------------------------------------------------- Get coursedata - %courseopt = &Apache::lonnet::dump - ('resourcedata', - $env{'course.'.$env{'request.course.id'}.'.domain'}, - $env{'course.'.$env{'request.course.id'}.'.num'}); -# --------------------------------------------------- Get userdata (if present) - if ($uname) { - %useropt=&Apache::lonnet::dump('resourcedata',$udom,$uname); - } # ------------------------------------------------------------------- Sort this @@ -990,10 +1027,6 @@ sub assessparms { $trimheader = 'yes'; &startpage($r,$id,$udom,$csec,$uname,$have_assesments,$trimheader); - if (!$have_assesments) { - untie(%parmhash); - return ''; - } # if ($env{'form.url'}) { # $r->print(''); @@ -1503,7 +1536,6 @@ ENDMAPONE } # end of $parmlev eq general } $r->print(''); - untie(%parmhash); } # end sub assessparms @@ -2186,9 +2218,6 @@ sub handler { # ----------------------------------------------------------- Clear out garbage - %courseopt=(); - %useropt=(); - %parmhash=(); @ids=(); %symbp=();