--- loncom/interface/lonparmset.pm 2005/06/17 18:29:45 1.225
+++ loncom/interface/lonparmset.pm 2005/06/17 20:56:06 1.227
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set parameters for assessments
#
-# $Id: lonparmset.pm,v 1.225 2005/06/17 18:29:45 albertel Exp $
+# $Id: lonparmset.pm,v 1.227 2005/06/17 20:56:06 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -291,7 +291,40 @@ sub storeparm {
# - username
# - userdomain
+my %recstack;
sub storeparm_by_symb {
+ my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec,$recflag)=@_;
+ unless ($recflag) {
+# first time call
+ %recstack=();
+ $recflag=1;
+ }
+# store parameter
+ &storeparm_by_symb_inner
+ ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec);
+ my ($prefix,$parm)=($spnam=~/^(.*[\_\.])([^\_\.]+)$/);
+# remember that this was set
+ $recstack{$parm}=1;
+# what does this trigger?
+ foreach my $triggered (split(/\:/,&rulescache($parm.'_triggers'))) {
+# don't backfire
+ unless ((!$triggered) || ($recstack{$triggered})) {
+ my $action=&rulescache($triggered.'_action');
+ my ($whichaction,$whichparm)=($action=~/^(.*\_)([^\_]+)$/);
+# set triggered parameter on same level
+ my $newspnam=$prefix.$triggered;
+ my $newvalue='';
+ if ($action eq 'when_setting_') {
+ } else {
+ my $totalsecs=((&rulescache($triggered.'_days')*24+&rulescache($triggered.'_hours'))*60+&rulescache($triggered.'_min'))*60+&rulescache($triggered.'_sec');
+ }
+ &Apache::lonnet::logthis('About to set '.$newspnam.' using action '.$whichaction.' with '.$parm.' ('.$whichparm.')');
+ }
+ }
+ return '';
+}
+
+sub storeparm_by_symb_inner {
# ---------------------------------------------------------- Get symb, map, etc
my ($symb,$spnam,$snum,$nval,$ntype,$uname,$udom,$csec)=@_;
# ---------------------------------------------------------- Construct prefixes
@@ -2590,20 +2623,30 @@ ENDDEFHEAD
if ($env{'form.storerules'}) {
my %newrules=();
my @delrules=();
+ my %triggers=();
foreach my $key (keys(%env)) {
if ($key=~/^form\.(\w+)\_action$/) {
my $tempkey=$1;
- if ($env{$key}) {
- $newrules{$tempkey.'_action'}=$env{$key};
+ my $action=$env{$key};
+ if ($action) {
+ $newrules{$tempkey.'_action'}=$action;
+ if ($action ne 'default') {
+ my ($whichaction,$whichparm)=($action=~/^(.*\_)([^\_]+)$/);
+ $triggers{$whichparm}.=$tempkey.':';
+ }
+ $newrules{$tempkey.'_type'}=$defkeytype{$tempkey};
if (&isdateparm($defkeytype{$tempkey})) {
+ $newrules{$tempkey.'_days'}=$env{'form.'.$tempkey.'_days'};
$newrules{$tempkey.'_hours'}=$env{'form.'.$tempkey.'_hours'};
$newrules{$tempkey.'_min'}=$env{'form.'.$tempkey.'_min'};
$newrules{$tempkey.'_sec'}=$env{'form.'.$tempkey.'_sec'};
} else {
$newrules{$tempkey.'_value'}=$env{'form.'.$tempkey.'_value'};
+ $newrules{$tempkey.'_triggervalue'}=$env{'form.'.$tempkey.'_triggervalue'};
}
} else {
push(@delrules,$tempkey.'_action');
+ push(@delrules,$tempkey.'_type');
push(@delrules,$tempkey.'_hours');
push(@delrules,$tempkey.'_min');
push(@delrules,$tempkey.'_sec');
@@ -2611,11 +2654,15 @@ ENDDEFHEAD
}
}
}
+ foreach my $key (keys %allparms) {
+ $newrules{$key.'_triggers'}=$triggers{$key};
+ }
&Apache::lonnet::put('parmdefactions',\%newrules,$dom,$crs);
&Apache::lonnet::del('parmdefactions',\@delrules,$dom,$crs);
&resetrulescache();
}
- my %lt=&Apache::lonlocal::texthash('hours' => 'Hours',
+ my %lt=&Apache::lonlocal::texthash('days' => 'Days',
+ 'hours' => 'Hours',
'min' => 'Minutes',
'sec' => 'Seconds',
'yes' => 'Yes',
@@ -2658,15 +2705,19 @@ ENDDEFHEAD
}
}
$r->print('');
-
-
+ unless (&isdateparm($defkeytype{$tempkey})) {
+ $r->print("\n
".&mt('Triggering value(s) of other parameter (optional, comma-separated):').
+ '');
+ }
$r->print("\n