[LON-CAPA-cvs] cvs: loncom(version_2_11_X) /interface lonnavmaps.pm
raeburn
raeburn at source.lon-capa.org
Wed Aug 10 17:29:52 EDT 2016
raeburn Wed Aug 10 21:29:52 2016 EDT
Modified files: (Branch: version_2_11_X)
/loncom/interface lonnavmaps.pm
Log:
- For 2.11
- Backport 1.518
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.509.2.2 loncom/interface/lonnavmaps.pm:1.509.2.3
--- loncom/interface/lonnavmaps.pm:1.509.2.2 Sat Aug 6 23:22:30 2016
+++ loncom/interface/lonnavmaps.pm Wed Aug 10 21:29:52 2016
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.509.2.2 2016/08/06 23:22:30 raeburn Exp $
+# $Id: lonnavmaps.pm,v 1.509.2.3 2016/08/10 21:29:52 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
@@ -1006,10 +1006,13 @@
'</a>';
}
}
- }
-
- if ($resource->randomout()) {
- $nonLinkedText .= ' <span class="LC_warning">('.&mt('hidden').')</span> ';
+ if ($params->{'mapHidden'} || $resource->randomout()) {
+ $nonLinkedText .= ' <span class="LC_warning">('.&mt('hidden').')</span> ';
+ }
+ } else {
+ if ($resource->randomout()) {
+ $nonLinkedText .= ' <span class="LC_warning">('.&mt('hidden').')</span> ';
+ }
}
if (!$resource->condval()) {
$nonLinkedText .= ' <span class="LC_info">('.&mt('conditionally hidden').')</span> ';
@@ -1584,41 +1587,46 @@
$args->{'indentString'} = setDefault($args->{'indentString'}, "<img src='$location' alt='' />");
$args->{'displayedHereMarker'} = 0;
- # If we're suppressing empty sequences, look for them here. Use DFS for speed,
- # since structure actually doesn't matter, except what map has what resources.
- if ($args->{'suppressEmptySequences'}) {
- my $dfsit = Apache::lonnavmaps::DFSiterator->new($navmap,
- $it->{FIRST_RESOURCE},
- $it->{FINISH_RESOURCE},
- {}, undef, 1);
- my $depth = 0;
- $dfsit->next();
- my $curRes = $dfsit->next();
- while ($depth > -1) {
- if ($curRes == $dfsit->BEGIN_MAP()) { $depth++; }
- if ($curRes == $dfsit->END_MAP()) { $depth--; }
-
- if (ref($curRes)) {
- # Parallel pre-processing: Do sequences have non-filtered-out children?
- if ($curRes->is_map()) {
- $curRes->{DATA}->{HAS_VISIBLE_CHILDREN} = 0;
- # Sequences themselves do not count as visible children,
- # unless those sequences also have visible children.
- # This means if a sequence appears, there's a "promise"
- # that there's something under it if you open it, somewhere.
- } else {
- # Not a sequence: if it's filtered, ignore it, otherwise
- # rise up the stack and mark the sequences as having children
- if (&$filterFunc($curRes)) {
- for my $sequence (@{$dfsit->getStack()}) {
- $sequence->{DATA}->{HAS_VISIBLE_CHILDREN} = 1;
- }
+ # If we're suppressing empty sequences, look for them here.
+ # We also do this even if $args->{'suppressEmptySequences'}
+ # is not true, so we can hide empty sequences for which the
+ # hiddenresource parameter is set to yes (at map level), or
+ # mark as hidden for users who have $userCanSeeHidden.
+ # Use DFS for speed, since structure actually doesn't matter,
+ # except what map has what resources.
+
+ my $dfsit = Apache::lonnavmaps::DFSiterator->new($navmap,
+ $it->{FIRST_RESOURCE},
+ $it->{FINISH_RESOURCE},
+ {}, undef, 1);
+
+ my $depth = 0;
+ $dfsit->next();
+ my $curRes = $dfsit->next();
+ while ($depth > -1) {
+ if ($curRes == $dfsit->BEGIN_MAP()) { $depth++; }
+ if ($curRes == $dfsit->END_MAP()) { $depth--; }
+
+ if (ref($curRes)) {
+ # Parallel pre-processing: Do sequences have non-filtered-out children?
+ if ($curRes->is_map()) {
+ $curRes->{DATA}->{HAS_VISIBLE_CHILDREN} = 0;
+ # Sequences themselves do not count as visible children,
+ # unless those sequences also have visible children.
+ # This means if a sequence appears, there's a "promise"
+ # that there's something under it if you open it, somewhere.
+ } elsif ($curRes->src()) {
+ # Not a sequence: if it's filtered, ignore it, otherwise
+ # rise up the stack and mark the sequences as having children
+ if (&$filterFunc($curRes)) {
+ for my $sequence (@{$dfsit->getStack()}) {
+ $sequence->{DATA}->{HAS_VISIBLE_CHILDREN} = 1;
}
}
}
- } continue {
- $curRes = $dfsit->next();
}
+ } continue {
+ $curRes = $dfsit->next();
}
my $displayedJumpMarker = 0;
@@ -1711,9 +1719,21 @@
}
# If this is an empty sequence and we're filtering them, continue on
- if ($curRes->is_map() && $args->{'suppressEmptySequences'} &&
- !$curRes->{DATA}->{HAS_VISIBLE_CHILDREN}) {
- next;
+ $args->{'mapHidden'} = 0;
+ if (($curRes->is_map()) && (!$curRes->{DATA}->{HAS_VISIBLE_CHILDREN})) {
+ if ($args->{'suppressEmptySequences'}) {
+ next;
+ } else {
+ my $mapname = &Apache::lonnet::declutter($curRes->src());
+ $mapname = &Apache::lonnet::deversion($mapname);
+ if (lc($navmap->get_mapparam(undef,$mapname,"0.hiddenresource")) eq 'yes') {
+ if ($userCanSeeHidden) {
+ $args->{'mapHidden'} = 1;
+ } else {
+ next;
+ }
+ }
+ }
}
# If we're suppressing navmaps and this is a navmap, continue on
@@ -2723,15 +2743,15 @@
- my $opendate = $self->get_mapparam($res->symb(), "$part.printstartdate");
- my $closedate= $self->get_mapparam($res->symb(), "$part.printenddate");
+ my $opendate = $self->get_mapparam($res->symb(),'',"$part.printstartdate");
+ my $closedate= $self->get_mapparam($res->symb(),'', "$part.printenddate");
return ($opendate, $closedate);
}
sub get_mapparam {
- my ($self, $symb, $what) = @_;
+ my ($self, $symb, $mapname, $what) = @_;
# Ensure the course option hash is populated:
@@ -2750,15 +2770,17 @@
my $uname=$self->{USERNAME};
my $udom=$self->{DOMAIN};
- unless ($symb) { return ['']; }
+ unless ($symb || $mapname) { return; }
my $result='';
-
+ my ($recursed, at recurseup);
# Figure out which map we are in.
- my ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb);
- $mapname = &Apache::lonnet::deversion($mapname);
-
+ if ($symb && !$mapname) {
+ my ($id,$fn);
+ ($mapname,$id,$fn)=&Apache::lonnet::decode_symb($symb);
+ $mapname = &Apache::lonnet::deversion($mapname);
+ }
my $rwhat=$what;
$what=~s/^parameter\_//;
@@ -2815,9 +2837,12 @@
}
# Check the map parameters themselves:
- my $thisparm = $$parmhash{$symbparm};
- if (defined($thisparm)) {
- return $thisparm;
+ if ($symb) {
+ my $symbparm=$symb.'.'.$what;
+ my $thisparm = $$parmhash{$symbparm};
+ if (defined($thisparm)) {
+ return $thisparm;
+ }
}
More information about the LON-CAPA-cvs
mailing list