--- rat/lonuserstate.pm 2007/08/28 01:06:15 1.120 +++ rat/lonuserstate.pm 2007/08/28 01:09:14 1.121 @@ -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.121 2007/08/28 01:09:14 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,27 @@ 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$/) { + $hash{'mapalias_'.$token->[2]->{'value'}}=$referid; + } } # --------------------------------------------------------- Simplify expression