--- loncom/interface/lonnavmaps.pm 2016/03/02 14:14:06 1.515 +++ loncom/interface/lonnavmaps.pm 2016/03/17 13:20:35 1.517 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.515 2016/03/02 14:14:06 raeburn Exp $ +# $Id: lonnavmaps.pm,v 1.517 2016/03/17 13:20:35 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -2768,11 +2768,13 @@ sub parmval_real { sub recurseup_maps { my ($self,$mapname) = @_; my @recurseup; - my @pcs = split(/,/,$self->getResourceByUrl(&Apache::lonnet::clutter($mapname))->map_hierarchy()); - shift(@pcs); - pop(@pcs); - if (@pcs) { - @recurseup = map { &Apache::lonnet::declutter($self->getByMapPc($_)->src()); } reverse(@pcs); + if ($mapname) { + my @pcs = split(/,/,$self->getResourceByUrl(&Apache::lonnet::clutter($mapname))->map_hierarchy()); + shift(@pcs); + pop(@pcs); + if (@pcs) { + @recurseup = map { &Apache::lonnet::declutter($self->getByMapPc($_)->src()); } reverse(@pcs); + } } return @recurseup; } @@ -2817,6 +2819,7 @@ sub get_mapparam { unless ($symb) { return ['']; } my $result=''; + my ($recursed,@recurseup); # Figure out which map we are in. @@ -2862,6 +2865,18 @@ sub get_mapparam { if (defined($$useropt{$courseleveli})) { return $$useropt{$courseleveli}; } + unless ($recursed) { + @recurseup = $self->recurseup_maps($mapname); + $recursed = 1; + } + foreach my $item (@recurseup) { + my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what; + last if (defined($$useropt{$norecursechk})); + my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; + if (defined($$useropt{$recursechk})) { + return $$useropt{$recursechk}; + } + } } # Check course -- group @@ -2875,18 +2890,42 @@ sub get_mapparam { if (defined($$courseopt{$grpleveli})) { return $$courseopt{$grpleveli}; } + unless ($recursed) { + @recurseup = $self->recurseup_maps($mapname); + $recursed = 1; + } + foreach my $item (@recurseup) { + my $norecursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(all).'.$what; + last if (defined($$courseopt{$norecursechk})); + my $recursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(rec).'.$what; + if (defined($$courseopt{$recursechk})) { + return $$courseopt{$recursechk}; + } + } } # Check course -- section - if ($csec and defined($courseopt)) { + if ($csec ne '' and defined($courseopt)) { if (defined($$courseopt{$seclevelm})) { return $$courseopt{$seclevelm}; } if (defined($$courseopt{$secleveli})) { return $$courseopt{$secleveli}; } + unless ($recursed) { + @recurseup = $self->recurseup_maps($mapname); + $recursed = 1; + } + foreach my $item (@recurseup) { + my $norecursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(all).'.$what; + last if (defined($$courseopt{$norecursechk})); + my $recursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(rec).'.$what; + if (defined($$courseopt{$recursechk})) { + return $$courseopt{$recursechk}; + } + } } # Check the map parameters themselves: @@ -2902,8 +2941,22 @@ sub get_mapparam { if (defined($$courseopt{$courselevelm})) { return $$courseopt{$courselevelm}; } + unless ($recursed) { + @recurseup = $self->recurseup_maps($mapname); + $recursed = 1; + } + if (@recurseup) { + foreach my $item (@recurseup) { + my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what; + last if (defined($$courseopt{$norecursechk})); + my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; + if (defined($$courseopt{$recursechk})) { + return $$courseopt{$recursechk}; + } + } + } } - return undef; # Unefined if we got here. + return undef; # Undefined if we got here. } sub course_printdates {