[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