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

albertel lon-capa-cvs-allow@mail.lon-capa.org
Tue, 28 Aug 2007 01:09:15 -0000


albertel		Mon Aug 27 21:09:15 2007 EDT

  Modified files:              
    /rat	lonuserstate.pm 
  Log:
  - appears advanced rat can leaving <param> deifitions for deleted resources
    hanging around, ignore any mapalias that are set to apply to resources
    that don't exist
  
  
Index: rat/lonuserstate.pm
diff -u rat/lonuserstate.pm:1.120 rat/lonuserstate.pm:1.121
--- rat/lonuserstate.pm:1.120	Mon Aug 27 21:06:15 2007
+++ rat/lonuserstate.pm	Mon Aug 27 21:09:14 2007
@@ -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 @@
                     } 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 @@
     } else {
         $errtext.=&mt('<br />Map not loaded: The file <tt>[_1]</tt> 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