[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