--- loncom/interface/Attic/lonspreadsheet.pm 2002/09/27 18:29:15 1.111 +++ loncom/interface/Attic/lonspreadsheet.pm 2002/10/01 07:09:05 1.115 @@ -1,5 +1,5 @@ # -# $Id: lonspreadsheet.pm,v 1.111 2002/09/27 18:29:15 matthew Exp $ +# $Id: lonspreadsheet.pm,v 1.115 2002/10/01 07:09:05 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -62,6 +62,11 @@ use GDBM_File; use HTML::TokeParser; use Apache::lonhtmlcommon; # +# Caches for coursewide information +# +my %Section; + +# # Caches for previously calculated spreadsheets # @@ -852,7 +857,7 @@ sub sett { } # Deal with the normal cells foreach (keys(%f)) { - if (($f{$_}) && ($_!~/template\_/)) { + if (exists($f{$_}) && ($_!~/template\_/)) { my $matches=($_=~/^$pattern(\d+)/); if (($matches) && ($1)) { unless ($f{$_}=~/^\!/) { @@ -1467,8 +1472,7 @@ sub makenewsheet { $sheetdata{'sheettype'} = $stype; $sheetdata{'usymb'} = $usymb; $sheetdata{'cid'} = $ENV{'request.course.id'}; - $sheetdata{'csec'} = &Apache::lonnet::usection - ($udom,$uname,$ENV{'request.course.id'}); + $sheetdata{'csec'} = $Section{$uname.':'.$udom}; $sheetdata{'coursefilename'} = $ENV{'request.course.fn'}; $sheetdata{'cnum'} = $ENV{'course.'.$ENV{'request.course.id'}.'.num'}; $sheetdata{'cdom'} = $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; @@ -1646,24 +1650,24 @@ sub parmval { my $courselevelr = $usercourseprefix.'.'.$symbparm; my $courselevelm = $usercourseprefix.'.'.$mapparm; # fourth, check user - if ($uname) { - return $useropt{$courselevelr} if ($useropt{$courselevelr}); - return $useropt{$courselevelm} if ($useropt{$courselevelm}); - return $useropt{$courselevel} if ($useropt{$courselevel}); + if (defined($uname)) { + return $useropt{$courselevelr} if (defined($useropt{$courselevelr})); + return $useropt{$courselevelm} if (defined($useropt{$courselevelm})); + return $useropt{$courselevel} if (defined($useropt{$courselevel})); } # third, check course - if ($csec) { - return $courseopt{$seclevelr} if ($courseopt{$seclevelr}); - return $courseopt{$seclevelm} if ($courseopt{$seclevelm}); - return $courseopt{$seclevel} if ($courseopt{$seclevel}); + if (defined($csec)) { + return $courseopt{$seclevelr} if (defined($courseopt{$seclevelr})); + return $courseopt{$seclevelm} if (defined($courseopt{$seclevelm})); + return $courseopt{$seclevel} if (defined($courseopt{$seclevel})); } # - return $courseopt{$courselevelr} if ($courseopt{$courselevelr}); - return $courseopt{$courselevelm} if ($courseopt{$courselevelm}); - return $courseopt{$courselevel} if ($courseopt{$courselevel}); + return $courseopt{$courselevelr} if (defined($courseopt{$courselevelr})); + return $courseopt{$courselevelm} if (defined($courseopt{$courselevelm})); + return $courseopt{$courselevel} if (defined($courseopt{$courselevel})); # second, check map parms my $thisparm = $parmhash{$symbparm}; - return $thisparm if ($thisparm); + return $thisparm if (defined($thisparm)); # first, check default return &Apache::lonnet::metadata($fn,$rwhat.'.default'); } @@ -1676,6 +1680,9 @@ sub updateclasssheet { my $cid =$sheetdata->{'cid'}; my $chome =$sheetdata->{'chome'}; # + %Section = (); + + # # Read class list and row labels my %classlist; my @tmp = &Apache::lonnet::dump('classlist',$cdom,$cnum); @@ -1699,6 +1706,7 @@ sub updateclasssheet { my ($studentName,$studentDomain)=split(/\:/,$student); my $studentSection=&Apache::lonnet::usection($studentDomain, $studentName,$cid); + $Section{$studentName.':'.$studentDomain} = $studentSection; # if ($studentSection==-1) { # unless ($ENV{'form.showcsv'}) { # $rowlabel='Data not available: '. @@ -2088,8 +2096,11 @@ sub loadassessment { &Apache::lonnet::reply('dump:'.$udom.':'.$uname.':resourcedata',$uhome); if ($reply!~/^error\:/) { $userrdatas{$uname.'___'.$udom}=$reply; - $userrdatas{$uname.'___'.$udom.'.last_cache'}=time; } + # Most of the time the user does not have a 'resourcedata.db' + # file. We need to cache that we got nothing instead of bothering + # with requesting it every time. + $userrdatas{$uname.'___'.$udom.'.last_cache'}=time; } foreach (split(/\&/,$userrdatas{$uname.'___'.$udom})) { my ($name,$value)=split(/\=/,$_);