[LON-CAPA-cvs] cvs: rat / lonuserstate.pm
www
lon-capa-cvs@mail.lon-capa.org
Mon, 24 Jun 2002 14:09:49 -0000
www Mon Jun 24 10:09:49 2002 EDT
Modified files:
/rat lonuserstate.pm
Log:
Towards bug 150.
Puts "randomout_(resID)" into coursemap hash for resources that are
randomly NOT selected based on randompick parameter.
Index: rat/lonuserstate.pm
diff -u rat/lonuserstate.pm:1.28 rat/lonuserstate.pm:1.29
--- rat/lonuserstate.pm:1.28 Mon Jun 17 12:40:24 2002
+++ rat/lonuserstate.pm Mon Jun 24 10:09:49 2002
@@ -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.28 2002/06/17 16:40:24 www Exp $
+# $Id: lonuserstate.pm,v 1.29 2002/06/24 14:09:49 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -67,7 +67,7 @@
my @cond; # Array with all of the conditions
my $errtext; # variable with all errors
my $retfurl; # variable with the very first URL in the course
-
+my %randompick; # randomly picked resources
# --------------------------------------------------------- Loads map from disk
sub loadmap {
@@ -233,9 +233,12 @@
} else {
$hash{'param_'.$referid}=''.$newparam;
}
- if ($token->[2]->{'name'} eq 'mapalias') {
+ if ($token->[2]->{'name'} eq 'parameter_mapalias') {
$hash{'mapalias_'.$token->[2]->{'value'}}=$referid;
}
+ if ($token->[2]->{'name'} eq 'parameter_randompick') {
+ $randompick{$referid}=$token->[2]->{'value'};
+ }
}
}
@@ -275,7 +278,12 @@
unless ($beenhere=~/\&$rid\&/) {
$beenhere.=$rid.'&';
if ($retfurl eq '') {
- $retfurl=$hash{'src_'.$rid};
+ my ($mapid,$resid)=split(/\./,$rid);
+ $retfurl=$hash{'src_'.$rid}.'?symb='.
+ &Apache::lonnet::symbclean(
+ &Apache::lonnet::declutter($hash{'map_id_'.$mapid}).
+ '___'.$resid.'___'.
+ &Apache::lonnet::declutter($hash{'src_'.$rid}));
}
if (defined($hash{'conditions_'.$rid})) {
$hash{'conditions_'.$rid}=simplify(
@@ -398,6 +406,40 @@
"request.course.uri" => $courseuri);
}
+# ------------------------------------- Selectively delete from randompick maps
+
+sub pickrandom {
+ foreach my $rid (keys %randompick) {
+ my $rndpick=$randompick{$rid};
+ my $mpc=$hash{'map_pc_'.$hash{'src_'.$rid}};
+# ------------------------------------------- put existing resources into array
+ my @currentrids=();
+ foreach (keys %hash) {
+ if ($_=~/^src_($mpc\.\d+)/) {
+ if ($hash{'src_'.$1}) { push @currentrids, $1; }
+ }
+ }
+ next if ($#currentrids<$rndpick);
+# -------------------------------- randomly eliminate the ones that should stay
+ srand(&Apache::lonnet::rndseed($rid)); # use rid instead of symb
+ for (my $i=1;$i<=$#currentrids+1-$rndpick;$i++) {
+ while (1) {
+ my $randomidx=int(rand($#currentrids+1));
+ if ($currentrids[$randomidx]) {
+ $currentrids[$randomidx]='';
+ last;
+ }
+ }
+ }
+# -------------------------------------------------------- delete the leftovers
+ for (my $k=0; $k<=$#currentrids; $k++) {
+ if ($currentrids[$k]) {
+ $hash{'randomout_'.$currentrids[$k]}=1;
+ }
+ }
+ }
+}
+
# ---------------------------------------------------- Read map and all submaps
sub readmap {
@@ -417,6 +459,7 @@
unlink($fn.'_symb.db');
unlink($fn.'.state');
unlink($fn.'parms.db');
+ undef %randompick;
$retfurl='';
if ((tie(%hash,'GDBM_File',"$fn.db",&GDBM_WRCREAT,0640)) &&
(tie(%parmhash,'GDBM_File',$fn.'_parms.db',&GDBM_WRCREAT,0640))) {
@@ -428,6 +471,7 @@
if (defined($hash{'map_start_'.$uri})) {
&traceroute('0',$hash{'map_start_'.$uri},'&');
&accinit($uri,$short,$fn);
+ &pickrandom();
}
unless ((untie(%hash)) && (untie(%parmhash))) {
&Apache::lonnet::logthis("<font color=blue>WARNING: ".