[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