--- rat/map.pm 2006/12/04 14:59:55 1.2 +++ rat/map.pm 2007/07/12 01:04:32 1.7 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # routines for modyfing .sequence and .page files # -# $Id: map.pm,v 1.2 2006/12/04 14:59:55 raeburn Exp $ +# $Id: map.pm,v 1.7 2007/07/12 01:04:32 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -29,6 +29,7 @@ package LONCAPA::map; use HTML::TokeParser; +use HTML::Entities(); use Apache::lonnet; use Apache::lonlocal; use File::Copy; @@ -244,14 +245,21 @@ sub attemptread { # ------------------------------------- Revive zombie idx or get unused number sub getresidx { - my $url=shift; + my ($url,$residx)= @_; my $max=1+($#resources>$#zombies?$#resources:$#zombies); unless ($url) { return $max; } for (my $i=0; $i<=$#zombies; $i++) { my ($title,$src,$ext,$type)=split(/\:/,$zombies[$i]); if ($src eq $url) { - undef($zombies[$i]); - return $i; + if ($residx) { + if ($i == $residx) { + undef($zombies[$i]); + return $i; + } + } else { + undef($zombies[$i]); + return $i; + } } } return $max; @@ -439,7 +447,7 @@ sub qtescape { $str=~s/\&\#58\;/\:/g; $str=~s/\&\#39\;/\'/g; $str=~s/\&\#44\;/\,/g; - $str=~s/\"/\&\#34\;/g; + $str=~s/\&\#34\;/\"/g; return $str; } @@ -476,7 +484,7 @@ sub loadmap { if ($instr eq -2) { $errtext.='Map not loaded: An error occured while trying to load the map.'; } elsif ($instr eq '-1') { - $errtext.=&mt('Map not loaded: The file [_1] does not exist.',$fn); + # Map doesn't exist } elsif ($instr) { my $parser = HTML::TokeParser->new(\$instr); my $token; @@ -625,6 +633,8 @@ sub savemap { # --------------------------------------------------------------- Logical input if (($comp[$#comp] eq 'res') || ($comp[$#comp] eq 'zombie')) { $comp[0]=qtescape($comp[0]); + $comp[0] = &HTML::Entities::encode($comp[0],'&<>"'); + $comp[1]=qtescape($comp[1]); if ($comp[2] eq 'true') { if ($comp[1]!~/^http\:\/\//) { @@ -690,7 +700,7 @@ sub savemap { } } $outstr.="\n"; - if ($fn=~/^\/*uploaded\/(\w+)\/(\w+)\/(.*)$/) { + if ($fn=~m{^/*uploaded/($LONCAPA::domain_re)/($LONCAPA::courseid_re)/(.*)$}) { $env{'form.output'}=$outstr; my $result=&Apache::lonnet::finishuserfileupload($2,$1, 'output',$3);