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

www lon-capa-cvs@mail.lon-capa.org
Sat, 11 May 2002 23:23:01 -0000


www		Sat May 11 19:23:01 2002 EDT

  Modified files:              
    /rat	lonratedt.pm 
  Log:
  Sorts map and looks for unconnected resources
  
  
Index: rat/lonratedt.pm
diff -u rat/lonratedt.pm:1.9 rat/lonratedt.pm:1.10
--- rat/lonratedt.pm:1.9	Fri May 10 15:46:52 2002
+++ rat/lonratedt.pm	Sat May 11 19:23:01 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Edit Handler for RAT Maps
 #
-# $Id: lonratedt.pm,v 1.9 2002/05/10 19:46:52 www Exp $
+# $Id: lonratedt.pm,v 1.10 2002/05/11 23:23:01 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -37,17 +37,21 @@
 use Apache::lonnet;
 use Apache::lonratsrv;
 
-my @links=();
+my @order=();
 my @resources=();
 
 
 # Mapread read maps into global arrays @links and @resources, determines status
-
+# sets @order - pointer to resources in right order
+# sets @resources - array with the resources with correct idx
+#
 sub mapread {
     my $fn=shift;
 
+    my @links;
     undef @links;
     undef @resources;
+    undef @order;
 
     my ($outtext,$errtext)=&Apache::lonratsrv::loadmap($fn,'');
     if ($errtext) { return ($errtext,2); }
@@ -73,17 +77,52 @@
 	    my ($start,$end,$cond)=split(/\:/,$_);
             if ((defined($starters[$start])) || (defined($endings[$end]))) { 
 		return
-                 ('Map too complex, has branchings. Use advanced editor.',1);
+                 ('Map has branchings. Use advanced editor.',1);
             }
 	    $starters[$start]=1;
 	    $endings[$end]=1;
 	    if ($cond) {
 		return
-                 ('Map too complex, has conditions. Use advanced editor.',1);
+                 ('Map has conditions. Use advanced editor.',1);
             }
 	}
 
     }
+    for (my $i=0; $i<=$#resources; $i++) {
+        if (defined($resources[$i])) {
+	    unless (($starters[$i]) || ($endings[$i])) {
+                return
+		 ('Map has unconnected resources. Use advanced editor.',1);
+            }
+        }
+    }
+
+# -------------------------------------------------- This is a linear map, sort
+
+    my $startidx=0;
+    my $endidx=0;
+    for (my $i=0; $i<=$#resources; $i++) {
+        if (defined($resources[$i])) {
+            my ($title,$url,$ext,$type)=split(/\:/,$resources[$i]);
+	    if ($type eq 'start') { $startidx=$i; }
+            if ($type eq 'finish') { $endidx=$i; }
+        }
+    }
+    my $k=0;
+    my $currentidx=$startidx;
+    $order[$k]=$currentidx;
+    for (my $i=0; $i<=$#resources; $i++) {
+        foreach (@links) {
+	    my ($start,$end)=split(/\:/,$_);
+            if ($start==$currentidx) {
+		$currentidx=$end;
+                $k++;
+                $order[$k]=$currentidx;
+                last;
+            }
+        }
+        if ($currentidx==$endidx) { last; }
+    }
     return $errtext;
 }
 
@@ -239,8 +278,11 @@
 # ---------------------------------------------------------------- View Handler
 
 sub viewmap {
-    my ($r,$adv)=@_;
+    my ($r,$adv,$errtext)=@_;
     $r->print('<html><body bgcolor="#FFFFFF">'.&buttons($adv));
+    if ($errtext) {
+	$r->print($errtext.'<hr>');
+    }
     foreach (@resources) {
 	if (defined($_)) {
 	    my ($title,$url)=split(/\:/,$_);
@@ -303,7 +345,7 @@
   } elsif ($ENV{'form.forcesmp'}) {
       &smpedt($r,$errtext);
   } else {
-      &viewmap($r,$adv);
+      &viewmap($r,$adv,$errtext);
   }
   return OK;
 }