--- rat/lonuserstate.pm 2007/08/28 01:06:15 1.120
+++ rat/lonuserstate.pm 2007/08/28 01:13:19 1.122
@@ -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.120 2007/08/28 01:06:15 albertel Exp $
+# $Id: lonuserstate.pm,v 1.122 2007/08/28 01:13:19 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -293,9 +293,6 @@ sub loadmap {
} else {
$hash{'param_'.$referid}=''.$newparam;
}
- if ($token->[2]->{'name'}=~/^parameter_(0_)*mapalias$/) {
- $hash{'mapalias_'.$token->[2]->{'value'}}=$referid;
- }
if ($token->[2]->{'name'}=~/^parameter_(0_)*randompick$/) {
$randompick{$referid}=$token->[2]->{'value'};
}
@@ -320,6 +317,28 @@ sub loadmap {
} else {
$errtext.=&mt('
Map not loaded: The file [_1] does not exist.',$fn);
}
+
+ my $parser = HTML::TokeParser->new(\$instr);
+ $parser->attr_encoded(1);
+ # last parse out the mapalias params so as to ignore anything
+ # refering to non-existant resources
+ while (my $token = $parser->get_token) {
+ next if ($token->[0] ne 'S');
+ if ($token->[1] eq 'param') {
+ &parse_mapalias_param($token,$lpc);
+ }
+ }
+}
+
+sub parse_mapalias_param {
+ my ($token,$lpc) = @_;
+ my $referid=$lpc.'.'.$token->[2]->{'to'};
+ return if (!exists($hash{'src_'.$referid}));
+
+ if ($token->[2]->{'name'}=~/^parameter_(0_)*mapalias$/) {
+ &count_mapalias($token->[2]->{'value'},$referid);
+ $hash{'mapalias_'.$token->[2]->{'value'}}=$referid;
+ }
}
# --------------------------------------------------------- Simplify expression
@@ -581,6 +600,7 @@ sub readmap {
%parmhash=();
$errtext='';
$pc=0;
+ &clear_mapalias_count();
&processversionfile(%cenv);
my $furi=&Apache::lonnet::clutter($uri);
$hash{'src_0.0'}=&versiontrack($furi);
@@ -597,6 +617,7 @@ sub readmap {
&accinit($uri,$short,$fn);
&hiddenurls();
}
+ $errtext .= &get_mapalias_errors();
# ------------------------------------------------------- Put versions into src
foreach my $key (keys(%hash)) {
if ($key=~/^src_/) {
@@ -728,6 +749,43 @@ sub evalstate {
return $state;
}
+{
+ my %mapalias_cache;
+ sub count_mapalias {
+ my ($value,$resid) = @_;
+ push(@{ $mapalias_cache{$value} }, $resid);
+ }
+
+ sub get_mapalias_errors {
+ my $error_text;
+ foreach my $mapalias (sort(keys(%mapalias_cache))) {
+ next if (scalar(@{ $mapalias_cache{$mapalias} } ) == 1);
+ my $count;
+ my $which =
+ join('