--- loncom/interface/spreadsheet/assesscalc.pm 2014/02/11 19:11:30 1.60 +++ loncom/interface/spreadsheet/assesscalc.pm 2016/03/02 14:14:21 1.61 @@ -1,5 +1,5 @@ # -# $Id: assesscalc.pm,v 1.60 2014/02/11 19:11:30 bisitz Exp $ +# $Id: assesscalc.pm,v 1.61 2016/03/02 14:14:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -315,6 +315,7 @@ sub parmval { $symb = $self->{'symb'} if (! defined($symb)); # my $result=''; + my @recurseup; # # This should be a if (!defined($mapname) || !defined($id) || !defined($fn)) { @@ -327,32 +328,57 @@ sub parmval { $what =~ s/\_([^\_]+)$/\.$1/; # my $symbparm = $symb.'.'.$what; + my $recurseparm=$mapname.'___(rec).'.$what; my $mapparm = $mapname.'___(all).'.$what; my $courseprefix = $self->{'cid'}; my $usercourseprefix = $uname.'_'.$udom.'_'.$self->{'cid'}; # my $seclevel = $courseprefix.'.['.$csec.'].'.$what; my $seclevelr = $courseprefix.'.['.$csec.'].'.$symbparm; + my $secleveli = $courseprefix.'.['.$csec.'].'.$recurseparm; my $seclevelm = $courseprefix.'.['.$csec.'].'.$mapparm; # my $courselevel = $courseprefix.'.'.$what; my $courselevelr = $courseprefix.'.'.$symbparm; + my $courseleveli = $courseprefix.'.'.$recurseparm; my $courselevelm = $courseprefix.'.'.$mapparm; # my $ucourselevel = $usercourseprefix.'.'.$what; my $ucourselevelr = $usercourseprefix.'.'.$symbparm; + my $ucourseleveli = $usercourseprefix.'.'.$recurseparm; my $ucourselevelm = $usercourseprefix.'.'.$mapparm; # check user if (defined($uname)) { return $useropt{$ucourselevelr} if (defined($useropt{$ucourselevelr})); return $useropt{$ucourselevelm} if (defined($useropt{$ucourselevelm})); + return $useropt{$ucourseleveli} if (defined($useropt{$ucourseleveli})); + unless (@recurseup > 0) { + @recurseup = &Apache::lonnet::get_map_hierarchy($mapname); + } + foreach my $item (@recurseup) { + my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what; + last if (defined($useropt{$norecursechk})); + my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; + return $useropt{$recursechk} if (defined($useropt{$recursechk})); + } return $useropt{$ucourselevel} if (defined($useropt{$ucourselevel})); } # check groups if (defined($groups) && ref($groups) eq 'ARRAY') { foreach my $group (@{$groups}) { - foreach my $level ($symbparm,$mapparm,$what) { + foreach my $level ($symbparm,$mapparm,$recurseparm,$what) { my $item = $courseprefix.'.['.$group.'].'.$level; + if ($level eq $what) { + unless (@recurseup > 0) { + @recurseup = &Apache::lonnet::get_map_hierarchy($mapname); + } + foreach my $item (@recurseup) { + my $norecursechk=$courseprefix.'.['.$group.'].'.$item.'___(all).'.$what; + last if (defined($courseopt{$norecursechk})); + my $recursechk=$courseprefix.'.['.$group.'].'.$item.'___(rec).'.$what; + return $courseopt{$recursechk} if (defined($courseopt{$recursechk})); + } + } if (defined($courseopt{$item})) { return $courseopt{$item}; } @@ -363,6 +389,16 @@ sub parmval { if (defined($csec)) { return $courseopt{$seclevelr} if (defined($courseopt{$seclevelr})); return $courseopt{$seclevelm} if (defined($courseopt{$seclevelm})); + return $courseopt{$secleveli} if (defined($courseopt{$secleveli})); + unless (@recurseup > 0) { + @recurseup = &Apache::lonnet::get_map_hierarchy($mapname); + } + foreach my $item (@recurseup) { + my $norecursechk=$courseprefix.'.['.$csec.'].'.$item.'___(all).'.$what; + last if (defined($courseopt{$norecursechk})); + my $recursechk=$courseprefix.'.['.$csec.'].'.$item.'___(rec).'.$what; + return $courseopt{$recursechk} if (defined($courseopt{$secleveli})); + } return $courseopt{$seclevel} if (defined($courseopt{$seclevel})); } # @@ -376,6 +412,16 @@ sub parmval { return $thisparm if (defined($thisparm)); # check more course return $courseopt{$courselevelm} if (defined($courseopt{$courselevelm})); + return $courseopt{$courseleveli} if (defined($courseopt{$courseleveli})); + unless (@recurseup > 0) { + @recurseup = &Apache::lonnet::get_map_hierarchy($mapname); + } + foreach my $item (@recurseup) { + my $norecursechk=$courseprefix.'.'.$item.'___(all).'.$what; + last if (defined($courseopt{$norecursechk})); + my $recursechk=$courseprefix.'.'.$item.'___(rec).'.$what; + return $courseopt{$recursechk} if (defined($courseopt{$recursechk})); + } return $courseopt{$courselevel} if (defined($courseopt{$courselevel})); # Cascade Up