--- rat/lonuserstate.pm 2007/08/28 01:09:14 1.121 +++ 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.121 2007/08/28 01:09:14 albertel Exp $ +# $Id: lonuserstate.pm,v 1.122 2007/08/28 01:13:19 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -336,6 +336,7 @@ sub parse_mapalias_param { 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; } } @@ -599,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); @@ -615,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_/) { @@ -746,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('
  • ', + map { + my $id = $_; + if (exists($hash{'src_'.$id})) { + $count++; + } + my ($mapid) = split(/\./,$id); + &mt('[_1] in [_2]', $hash{'title_'.$id}, + + $hash{'title_'.$hash{'ids_'.$hash{'map_id_'.$mapid}}}); + } (@{ $mapalias_cache{$mapalias} })); + next if ($count < 2); + $error_text .= '
    '. + &mt('Error: Found the mapalias "[_1]" defined multiple times.', + $mapalias). + '
    '; + } + &clear_mapalias_count(); + return $error_text; + } + sub clear_mapalias_count { + undef(%mapalias_cache); + } +} 1; __END__