[LON-CAPA-cvs] cvs: rat(version_2_11_X) / lonuserstate.pm

raeburn raeburn at source.lon-capa.org
Wed Feb 6 20:51:34 EST 2019


raeburn		Thu Feb  7 01:51:34 2019 EDT

  Modified files:              (Branch: version_2_11_X)
    /rat	lonuserstate.pm 
  Log:
  - For 2.11
    Backport 1.152, 1.153, 1.154, 1.156.  
  
  
Index: rat/lonuserstate.pm
diff -u rat/lonuserstate.pm:1.149.2.1 rat/lonuserstate.pm:1.149.2.2
--- rat/lonuserstate.pm:1.149.2.1	Thu Mar 29 20:10:47 2018
+++ rat/lonuserstate.pm	Thu Feb  7 01:51:34 2019
@@ -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.149.2.1 2018/03/29 20:10:47 raeburn Exp $
+# $Id: lonuserstate.pm,v 1.149.2.2 2019/02/07 01:51:34 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,
@@ -278,7 +289,6 @@
     }
     undef($codechecked);
 
-
     # Handle randomization and random selection
 
     if ($randomize) {
@@ -338,7 +348,6 @@
 	    @map_ids=&Math::Random::random_permutation(@map_ids);
 	}
 
-
 	my $from = shift(@map_ids);
 	my $from_rid = $lpc.'.'.$from;
 	$hash{'map_start_'.$uri} = $from_rid;
@@ -363,7 +372,7 @@
     $parser = HTML::TokeParser->new(\$instr);
     $parser->attr_encoded(1);
 
-    # last parse out the mapalias params.  Thes provide mnemonic
+    # last parse out the mapalias params.  These provide mnemonic
     # tags to resources that can be used in conditions
 
     while (my $token = $parser->get_token) {
@@ -706,7 +715,7 @@
 #  Typical attributes:
 #     to=n      - Number of the resource the parameter applies to.
 #     type=xx   - Type of parameter value (e.g. string_yesno or int_pos).
-#     name=xxx  - Name ofr parameter (e.g. parameter_randompick or parameter_randomorder).
+#     name=xxx  - Name of parameter (e.g. parameter_randompick or parameter_randomorder).
 #     value=xxx - value of the parameter.
 
 sub parse_param {
@@ -1114,6 +1123,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 +1143,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 +1161,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 {
@@ -1156,7 +1207,7 @@
     }
     @cond=('true:normal');
 
-    unless (open(LOCKFILE,">$fn.db.lock")) {
+    unless (open(LOCKFILE,">","$fn.db.lock")) {
 	# 
 	# Most likely a permissions problem on the lockfile or its directory.
 	#
@@ -1176,8 +1227,11 @@
     undef %randompick;
     undef %randompickseed;
     undef %randomorder;
+    undef %randomizationcode;
     undef %hiddenurl;
     undef %encurl;
+    undef %rescount;
+    undef %mapcount;
     $retfrid='';
     $errtext='';
     my ($untiedhash,$untiedparmhash,$tiedhash,$tiedparmhash); # More state flags.
@@ -1321,8 +1375,11 @@
         undef %randompick;
         undef %randompickseed;
         undef %randomorder;
+        undef %randomizationcode;
         undef %hiddenurl;
         undef %encurl;
+        undef %rescount;
+        undef %mapcount;
         $errtext='';
         $retfrid='';
 	#
@@ -1441,6 +1498,7 @@
         &traceroute('0',$hash{'map_start_'.$uri},'&');
         &accinit($uri,$short,$fn);
         &hiddenurls();
+        &mapcrumbs();
     }
     $errtext .= &get_mapalias_errors();
 # ------------------------------------------------------- Put versions into src
@@ -1472,7 +1530,7 @@
 # ---------------------------------------------------- Store away initial state
     {
         my $cfh;
-        if (open($cfh,">$fn.state")) {
+        if (open($cfh,">","$fn.state")) {
             print $cfh join("\n", at cond);
             $gotstate = 1;
         } else {
@@ -1509,7 +1567,7 @@
     if (-e $fn) {
 	my @conditions=();
 	{
-	    open(my $fh,"<$fn");
+	    open(my $fh,"<",$fn);
 	    @conditions=<$fh>;
             close($fh);
 	}  




More information about the LON-CAPA-cvs mailing list