--- loncom/interface/Attic/lonspreadsheet.pm 2001/03/17 16:52:30 1.45 +++ loncom/interface/Attic/lonspreadsheet.pm 2001/03/17 20:43:57 1.46 @@ -22,6 +22,7 @@ use HTML::TokeParser; # my %oldsheets; +my %loadedcaches; # # Cache for stores of an individual user @@ -1496,6 +1497,7 @@ sub exportsheet { # # Check if cached # + my $key=$uname.':'.$udom.':'.$stype.':'.$usymb; my $found=''; @@ -1508,6 +1510,18 @@ sub exportsheet { } split(/\_\_\_\&\_\_\_/,$oldsheets{$key}); } + unless ($found) { + &cachedssheets($uname,$udom,&Apache::lonnet::homeserver($uname,$udom)); + if ($oldsheets{$key}) { + map { + my ($name,$value)=split(/\_\_\_\=\_\_\_/,$_); + if ($name eq $fn) { + $found=$value; + } + } split(/\_\_\_\&\_\_\_/,$oldsheets{$key}); + } + } + if ($found) { # # Return what was cached @@ -1517,7 +1531,8 @@ sub exportsheet { } else { # # Not cached -# +# + my $thissheet=&makenewsheet($uname,$udom,$stype,$usymb); &readsheet($thissheet,$fn); &updatesheet($thissheet); @@ -1528,12 +1543,24 @@ sub exportsheet { # Store now # my $cid=$ENV{'request.course.id'}; - my $current=&Apache::lonnet::reply('get:'. + my $current=(); + if ($stype eq 'studentcalc') { + $current=&Apache::lonnet::reply('get:'. $ENV{'course.'.$cid.'.domain'}.':'. $ENV{'course.'.$cid.'.num'}. ':nohist_calculatedsheets:'. &Apache::lonnet::escape($key), $ENV{'course.'.$cid.'.home'}); + } else { + $current=&Apache::lonnet::reply('get:'. + &getudom($thissheet).':'. + &getuname($thissheet). + ':nohist_calculatedsheets_'. + $ENV{'request.course.id'}.':'. + &Apache::lonnet::escape($key), + &getuhome($thissheet)); + + } my %currentlystored=(); unless ($current=~/^error\:/) { map { @@ -1548,30 +1575,40 @@ sub exportsheet { if ($newstore) { $newstore.='___&___'; } $newstore.=$_.'___=___'.$currentlystored{$_}; } keys %currentlystored; - &Apache::lonnet::reply('put:'. + if ($stype eq 'studentcalc') { + &Apache::lonnet::reply('put:'. $ENV{'course.'.$cid.'.domain'}.':'. $ENV{'course.'.$cid.'.num'}. ':nohist_calculatedsheets:'. &Apache::lonnet::escape($key).'='. &Apache::lonnet::escape($newstore), $ENV{'course.'.$cid.'.home'}); + } else { + &Apache::lonnet::reply('put:'. + &getudom($thissheet).':'. + &getuname($thissheet). + ':nohist_calculatedsheets_'. + $ENV{'request.course.id'}.':'. + &Apache::lonnet::escape($key).'='. + &Apache::lonnet::escape($newstore), + &getuhome($thissheet)); + } } return @exportarr; } # ===================================================== Calculated sheets cache # -# Load all previously cached spreadsheets for this course +# Load previously cached student spreadsheets for this course # -sub cachedsheets { +sub cachedcsheets { my $cid=$ENV{'request.course.id'}; my $reply=&Apache::lonnet::reply('dump:'. $ENV{'course.'.$cid.'.domain'}.':'. $ENV{'course.'.$cid.'.num'}. ':nohist_calculatedsheets', $ENV{'course.'.$cid.'.home'}); - undef %oldsheets; unless ($reply=~/^error\:/) { map { my ($name,$value)=split(/\=/,$_); @@ -1581,6 +1618,35 @@ sub cachedsheets { } } +# ===================================================== Calculated sheets cache +# +# Load previously cached assessment spreadsheets for this student +# + +sub cachedssheets { + my ($sname,$sdom,$shome)=@_; + unless (($loadedcaches{$sname.'_'.$sdom}) || ($shome eq 'no_host')) { + my $cid=$ENV{'request.course.id'}; + my $reply=&Apache::lonnet::reply('dump:'.$sdom.':'.$sname. + ':nohist_calculatedsheets_'. + $ENV{'request.course.id'}, + $shome); + unless ($reply=~/^error\:/) { + map { + my ($name,$value)=split(/\=/,$_); + $oldsheets{&Apache::lonnet::unescape($name)} + =&Apache::lonnet::unescape($value); + } split(/\&/,$reply); + } + $loadedcaches{$sname.'_'.$sdom}=1; + } +} + +# ===================================================== Calculated sheets cache +# +# Load previously cached assessment spreadsheets for this student +# + # ================================================================ Main handler # # Interactive call to screen @@ -1749,9 +1815,21 @@ ENDSCRIPT $r->print(&hiddenfield('ufn',&getfilename($asheet))); -# ----------------------------------------------------------- Get cached sheets +# --------------------------------------------------------------- Cached sheets + + undef %oldsheets; + undef %loadedcaches; - &cachedsheets(); + if (&gettype($asheet) eq 'classcalc') { + $r->print("Loading previously calculated student sheets ...
\n"); + $r->rflush(); + &cachedcsheets(); + } elsif (&gettype($asheet) eq 'studentcalc') { + $r->print("Loading previously calculated assessment sheets ...
\n"); + $r->rflush(); + &cachedssheets(&getuname($asheet),&getudom($asheet), + &getuhome($asheet)); + } # ----------------------------------------------------- Update sheet, load rows