[LON-CAPA-cvs] cvs: loncom /interface lonnavmaps.pm rat lonsequence.pm lonuserstate.pm

raeburn raeburn at source.lon-capa.org
Sun Sep 3 14:52:27 EDT 2017


raeburn		Sun Sep  3 18:52:27 2017 EDT

  Modified files:              
    /rat	lonuserstate.pm lonsequence.pm 
    /loncom/interface	lonnavmaps.pm 
  Log:
  - New items added to big hash, where keys are map_breadcrumbs_$pc. 
  - Values differ from those for corresponding map_hierarchy_$pc items
    through omission of intermediate folders not shown in Course Contents.    
  - Used to genarate breadcrumb trail when displaying resource in course 
    context contains with clickable links for folder hierarchy.
  
  
Index: rat/lonuserstate.pm
diff -u rat/lonuserstate.pm:1.152 rat/lonuserstate.pm:1.153
--- rat/lonuserstate.pm:1.152	Sun Sep  3 18:19:09 2017
+++ rat/lonuserstate.pm	Sun Sep  3 18:52:23 2017
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Construct and maintain state and binary representation of course for user
 #
-# $Id: lonuserstate.pm,v 1.152 2017/09/03 18:19:09 raeburn Exp $
+# $Id: lonuserstate.pm,v 1.153 2017/09/03 18:52:23 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -62,6 +62,8 @@
 my %randomizationcode; # code used to grade folder for bubblesheet exam 
 my %encurl; # URLs in this folder are supposed to be encrypted
 my %hiddenurl; # this URL (or complete folder) is supposed to be hidden
+my %rescount; # count of unhidden items in each map
+my %mapcount; # count of unhidden maps in each map
 
 # ----------------------------------- Remove version from URL and store in hash
 
@@ -240,6 +242,8 @@
 
     my @map_ids;
     my $codechecked;
+    $rescount{$lpc} = 0;
+    $mapcount{$lpc} = 0;
     while (my $token = $parser->get_token) {
 	next if ($token->[0] ne 'S');
 
@@ -249,6 +253,13 @@
 	    my $resource_id = &parse_resource($token,$lpc,$ispage,$uri,$courseid);
 	    if (defined $resource_id) {
 		push(@map_ids, $resource_id);
+                if ($hash{'src_'.$lpc.'.'.$resource_id}) {
+                    $rescount{$lpc} ++;
+                    if (($hash{'src_'.$lpc.'.'.$resource_id}=~/\.sequence$/) || 
+                        ($hash{'src_'.$lpc.'.'.$resource_id}=~/\.page$/)) {
+                        $mapcount{$lpc} ++; 
+                    }
+                }
                 unless ($codechecked) {
                     my $startsymb =
                        &Apache::lonnet::encode_symb($hash{'map_id_'.$lpc},$resource_id,
@@ -1114,6 +1125,14 @@
             if ($currentrids[$k]) {
 		$hash{'randomout_'.$currentrids[$k]}=1;
                 my ($mapid,$resid)=split(/\./,$currentrids[$k]);
+                if ($rescount{$mapid}) {
+                    $rescount{$mapid} --;
+                }
+                if ($hash{'is_map_'.$currentrids[$k]}) {
+                    if ($mapcount{$mapid}) {
+                        $mapcount{$mapid} --;
+                    }
+                }
                 $randomoutentry.='&'.
 		    &Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},
 						 $resid,
@@ -1126,6 +1145,14 @@
     foreach my $rid (keys(%hiddenurl)) {
 	$hash{'randomout_'.$rid}=1;
 	my ($mapid,$resid)=split(/\./,$rid);
+        if ($rescount{$mapid}) {
+            $rescount{$mapid} --;
+        }
+        if ($hash{'is_map_'.$rid}) {
+            if ($mapcount{$mapid}) {
+                $mapcount{$mapid} --;
+            }
+        }
 	$randomoutentry.='&'.
 	    &Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,
 					 $hash{'src_'.$rid}).'&';
@@ -1136,6 +1163,32 @@
     }
 }
 
+# -------------------------------------- populate big hash with map breadcrumbs
+
+# Create map_breadcrumbs_$pc from map_hierarchy_$pc by omitting intermediate
+# maps not shown in Course Contents table.
+
+sub mapcrumbs {
+    foreach my $key (keys(%rescount)) {
+        if ($hash{'map_hierarchy_'.$key}) {
+            my $skipnext = 0;
+            foreach my $id (split(/,/,$hash{'map_hierarchy_'.$key}),$key) {
+                unless ($skipnext) {
+                    $hash{'map_breadcrumbs_'.$key} .= "$id,";
+                }
+                unless (($id == 0) || ($id == 1)) {
+                    if ((!$rescount{$id}) || ($rescount{$id} == 1 && $mapcount{$id} == 1)) {
+                        $skipnext = 1;
+                    } else {
+                        $skipnext = 0;
+                    }
+                }
+            }
+            $hash{'map_breadcrumbs_'.$key} =~ s/,$//;
+        }
+    }
+}
+
 # ---------------------------------------------------- Read map and all submaps
 
 sub readmap {
@@ -1437,6 +1490,7 @@
         &traceroute('0',$hash{'map_start_'.$uri},'&');
         &accinit($uri,$short,$fn);
         &hiddenurls();
+        &mapcrumbs();
     }
     $errtext .= &get_mapalias_errors();
 # ------------------------------------------------------- Put versions into src
Index: rat/lonsequence.pm
diff -u rat/lonsequence.pm:1.46 rat/lonsequence.pm:1.47
--- rat/lonsequence.pm:1.46	Mon Aug 21 21:30:05 2017
+++ rat/lonsequence.pm	Sun Sep  3 18:52:23 2017
@@ -2,7 +2,7 @@
 #
 # Sequence Handler
 #
-# $Id: lonsequence.pm,v 1.46 2017/08/21 21:30:05 raeburn Exp $
+# $Id: lonsequence.pm,v 1.47 2017/09/03 18:52:23 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -261,9 +261,6 @@
                            my @mapcrumbs = $navmap->recursed_crumbs($parent);
                            if (@mapcrumbs) {
                                push(@crumbs, at mapcrumbs);
-                           } else {
-                               push(@crumbs,{text  => '...',
-                                             no_mt => 1});
                            }
                        }
                    }
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.533 loncom/interface/lonnavmaps.pm:1.534
--- loncom/interface/lonnavmaps.pm:1.533	Mon Aug 21 21:29:56 2017
+++ loncom/interface/lonnavmaps.pm	Sun Sep  3 18:52:27 2017
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Navigate Maps Handler
 #
-# $Id: lonnavmaps.pm,v 1.533 2017/08/21 21:29:56 raeburn Exp $
+# $Id: lonnavmaps.pm,v 1.534 2017/09/03 18:52:27 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2886,37 +2886,17 @@
     my (@revmapinfo, at revmapres);
     my $mapres = $self->getResourceByUrl($mapurl);
     if (ref($mapres)) {
-        @revmapres = map { $self->getByMapPc($_); } split(/,/,$mapres->map_hierarchy());
+        @revmapres = map { $self->getByMapPc($_); } split(/,/,$mapres->map_breadcrumbs());
         shift(@revmapres);
-        push(@revmapres,$mapres);
     }
-    my %toplevel;
     foreach my $map (@revmapres) {
         my $pc = $map->map_pc();
         next if ((!$pc) || ($pc == 1));
-        my $func = sub { return ($_[0]->src() ne $map->src); };
-        my @resources = $self->retrieveResources($map->src,$func,0);
-        my $count = 0;
-        my $notmap = 0;
-        foreach my $res (@resources) {
-            next unless (ref($res));
-            my $symb = $res->symb();
-            unless ($toplevel{$symb}) {
-                $toplevel{$symb} = $res->src;
-                $count ++;
-                unless ($res->is_map()) {
-                    $notmap ++;
-                }
-            }
-        }
-        if (($count > 1) || ($count && $notmap)) {
-             push(@revmapinfo,{'href' => $map->link().'?navmap=1','text' => $map->title(),'no_mt' => 1,});
-        }
+        push(@revmapinfo,{'href' => $map->link().'?navmap=1','text' => $map->title(),'no_mt' => 1,});
     }
     return @revmapinfo;
 }
 
-
 #
 #  Determines the open/close dates for printing a map that
 #  encloses a resource.
@@ -4564,6 +4544,12 @@
 for the hierarchy of maps containing a map, with the top level
 map first, then descending to deeper levels, with the enclosing map last.
 
+=item * B<map_breadcrumbs>:
+
+Same as map_hierarchy, except maps containing only a single itemm if
+it's a map, or containing no items are omitted, unless it's the top
+level map (map_pc = 1), which is always included.
+
 =back
 
 =cut
@@ -4599,6 +4585,11 @@
     my $pc = $self->map_pc();
     return $self->navHash("map_hierarchy_$pc", 0);
 }
+sub map_breadcrumbs {
+    my $self = shift;
+    my $pc = $self->map_pc();
+    return $self->navHash("map_breadcrumbs_$pc", 0);
+}
 
 #####
 # Property queries




More information about the LON-CAPA-cvs mailing list