--- loncom/interface/Attic/lonspreadsheet.pm 2001/03/17 20:43:57 1.46 +++ loncom/interface/Attic/lonspreadsheet.pm 2001/03/20 20:11:27 1.47 @@ -4,7 +4,8 @@ # 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,03/01,19/01,20/01,22/01, -# 03/05,03/08,03/10,03/12,03/13,03/15,03/17 Gerd Kortemeyer +# 03/05,03/08,03/10,03/12,03/13,03/15,03/17, +# 03/19,03/20 Gerd Kortemeyer package Apache::lonspreadsheet; @@ -23,6 +24,7 @@ use HTML::TokeParser; my %oldsheets; my %loadedcaches; +my %expiredates; # # Cache for stores of an individual user @@ -1486,6 +1488,34 @@ sub loadrows { } } +# ======================================================= Forced recalculation? + +sub checkthis { + my ($keyname,$time)=@_; + return ($time<$expiredates{$keyname}); +} +sub forcedrecalc { + my ($uname,$udom,$stype,$usymb)=@_; + my $key=$uname.':'.$udom.':'.$stype.':'.$usymb; + my $time=$oldsheets{$key.'.time'}; + unless ($time) { return 1; } + if ($stype eq 'assesscalc') { + my $map=(split(/\_\_\_/,$usymb))[0]; + if (&checkthis('::assesscalc:',$time) || + &checkthis('::assesscalc:'.$map,$time) || + &checkthis('::assesscalc:'.$usymb,$time) || + &checkthis($uname.':'.$udom.':assesscalc:',$time)) { + return 1; + } + } else { + if (&checkthis('::studentcalc:',$time) || + &checkthis($uname.':'.$udom.':studencalc:',$time)) { + return 1; + } + } + return 0; +} + # ============================================================== Export handler # # Non-interactive call from with program @@ -1521,7 +1551,15 @@ sub exportsheet { } split(/\_\_\_\&\_\_\_/,$oldsheets{$key}); } } - +# +# Check if still valid +# + if ($found) { + if (&forcedrecalc($uname,$udom,$stype,$usymb)) { + $found=''; + } + } + if ($found) { # # Return what was cached @@ -1543,7 +1581,7 @@ sub exportsheet { # Store now # my $cid=$ENV{'request.course.id'}; - my $current=(); + my $current=''; if ($stype eq 'studentcalc') { $current=&Apache::lonnet::reply('get:'. $ENV{'course.'.$cid.'.domain'}.':'. @@ -1575,13 +1613,15 @@ sub exportsheet { if ($newstore) { $newstore.='___&___'; } $newstore.=$_.'___=___'.$currentlystored{$_}; } keys %currentlystored; + my $now=time; 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), + &Apache::lonnet::escape($newstore).'&'. + &Apache::lonnet::escape($key).'.time='.$now, $ENV{'course.'.$cid.'.home'}); } else { &Apache::lonnet::reply('put:'. @@ -1590,7 +1630,8 @@ sub exportsheet { ':nohist_calculatedsheets_'. $ENV{'request.course.id'}.':'. &Apache::lonnet::escape($key).'='. - &Apache::lonnet::escape($newstore), + &Apache::lonnet::escape($newstore).'&'. + &Apache::lonnet::escape($key).'.time='.$now, &getuhome($thissheet)); } }