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

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


albertel		Mon Aug 27 21:13:19 2007 EDT

  Modified files:              
    /rat	lonuserstate.pm 
  Log:
  - count each usage of a specific mapalias, if the same one occurs multiple
    times throw an error message out
  
  
  
Index: rat/lonuserstate.pm
diff -u rat/lonuserstate.pm:1.121 rat/lonuserstate.pm:1.122
--- rat/lonuserstate.pm:1.121	Mon Aug 27 21:09:14 2007
+++ rat/lonuserstate.pm	Mon Aug 27 21:13:19 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.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 @@
     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 @@
 	%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 @@
 	    &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 @@
     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('</li><li>', 
+		     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 .= '<div class="LC_error">'.
+		&mt('Error: Found the mapalias "[_1]" defined multiple times.',
+		    $mapalias).
+		'</div><ul><li>'.$which.'</li></ul>';
+	}
+	&clear_mapalias_count();
+	return $error_text;
+    }
+    sub clear_mapalias_count {
+	undef(%mapalias_cache);
+    }
+}
 1;
 __END__