--- rat/lonratedt.pm	2001/11/29 19:23:49	1.5
+++ rat/lonratedt.pm	2002/05/10 18:58:04	1.8
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Edit Handler for RAT Maps
 #
-# $Id: lonratedt.pm,v 1.5 2001/11/29 19:23:49 www Exp $
+# $Id: lonratedt.pm,v 1.8 2002/05/10 18:58:04 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -35,6 +35,43 @@ package Apache::lonratedt;
 use strict;
 use Apache::Constants qw(:common);
 use Apache::lonnet;
+use Apache::lonratsrv;
+
+my @links=();
+my @resources=();
+
+
+# Mapread read maps into global arrays @links and @resources, determines status
+
+sub mapread {
+    my $fn=shift;
+
+    undef @links;
+    undef @resources;
+
+    my ($outtext,$errtext)=&Apache::lonratsrv::loadmap($fn,'');
+    if ($errtext) { return ($errtext,2); }
+
+    foreach (split(/\<\&\>/,$outtext)) {
+	my ($command,$parms)=split(/\<\:\>/,$_);
+        my @item=split(/\:/,$parms);
+        if ($command eq 'objcont') {
+        }
+        if ($command eq 'objlinks') {
+	    if (defined($links[$item[0]])) {
+		return
+                 ('Map too complex, has branchings. Use advanced editor.',1);
+            }
+	    if ($links[$item[2]]) {
+		return
+                 ('Map too complex, has conditions. Use advanced editor.',1);
+            }
+	    $links[$item[0]]=$item[1];
+	}
+
+    }
+    return $errtext;
+}
 
 # --------------------------------------------------------- Build up RAT screen
 sub ratedt {
@@ -57,15 +94,118 @@ sub ratedt {
 ENDDOCUMENT
 }
 
+# ---------------------------------------------------------------- Make buttons
+
+sub buttons {
+    my $adv=shift;
+    my $output='<form method=post>';     
+    if ($adv==1) {
+	$output.='<input type=submit name=forceadv value="Edit">';
+    } else {
+        unless ($adv==2) {
+           $output.='<input type=submit name=forcesmp value="Simple Edit">';
+        }
+	$output.='<input type=submit name=forceadv value="Advanced Edit">';
+    }
+    return $output.'</form><hr>';
+}
+
 sub smpedt {
-   my ($r,$fn)=@_;
+   my ($r,$errtext)=@_;
+   my $buttons=&buttons(2);
+# ----------------------------------------------------- Start simple RAT screen
    $r->print(<<ENDSMPHEAD);
 <html>
+<head>
+<script>
+var srch;
+var srchflag=-1; // 1 means currently open
+                 // 0 means closed (but has been open)
+                 // -1 means never yet opened/defined
+var srchmode='';
+
+var idx;
+var idxflag=-1; // 1 means currently open
+                 // 0 means closed (but has been open)
+                 // -1 means never yet opened/defined
+var idxmode='';
+
+// ------------------------------------------------------ Clears indexer window
+function idxclear() {
+  idx.document.clear();
+}
+
+// ------------------------------------------------------- Clears search window
+function srchclear() {
+  srch.document.clear();
+}
+
+// ------------------------------------------------------ Closes indexer window
+function idxclose() {
+  if (idx && !idx.closed) {
+    idxflag=0;
+    idx.close();
+  }
+}
+
+// ------------------------------------------------------- Closes search window
+function srchclose() {
+  if (srch && !srch.closed) {
+    srchflag=0;
+    srch.close();
+  }
+}
+
+// -------------------------------------------------------- Open indexer window
+function idxopen(mode) {
+   var options="scrollbars=1,resizable=1,menubar=0";
+   idxmode=mode;
+   idxflag=1;
+   idx=open("/res/?launch=1&mode=simple&catalogmode="+mode,"idxout",options);
+   idx.focus();
+}
+
+// --------------------------------------------------------- Open search window
+function srchopen(mode) {
+   var options="scrollbars=1,resizable=1,menubar=0";
+   srchmode=mode;
+   srchflag=1;
+   srch=open("/adm/searchcat?launch=1&mode=simple&catalogmode="+mode,"srchout",options);
+   srch.focus();
+}
+// ----------------------------------------------------- launch indexer browser
+function groupsearch() {
+   srchcheck('groupsearch');
+}
+
+function groupimport() {
+   idxcheck('groupimport');
+}
+// ------------------------------------------------------- Do srch status check
+function srchcheck(mode) {
+   if (!srch || srch.closed || srchmode!=mode) {
+      srchopen(mode);
+   }
+   srch.focus();
+}
+
+// -------------------------------------------------------- Do idx status check
+function idxcheck(mode) {
+   if (!idx || idx.closed || idxmode!=mode) {
+      idxopen(mode);
+   }
+   idx.focus();
+}
+</script>
+</head>                 
 <body bgcolor='#FFFFFF'>
-<form method=post>
-<input type=submit name=forceadv 
-value="Advanced Map Editing - Resource Assembly Tool"><hr>
+$buttons
+<font color=red>$errtext</font>
+<a href="javascript:groupsearch()">Group Search</a>
+<a href="javascript:groupimport()">Group Import</a>
+
 ENDSMPHEAD
+
     $r->print(
       '<input type=submit name=forcesmp value="Store"></form></body></html>');
 }
@@ -82,6 +222,15 @@ sub nodir {
 ENDNODIR
 }
 
+# ---------------------------------------------------------------- View Handler
+
+sub viewmap {
+    my ($r,$adv)=@_;
+    $r->print('<html><body bgcolor="#FFFFFF">'.&buttons($adv));
+
+    $r->print('</body></html>');
+}
+
 # ================================================================ Main Handler
 
 sub handler {
@@ -99,6 +248,8 @@ sub handler {
       &nodir($r,$dir);
       return OK;
   }
+
+# ------------------------------------------- Determine which tools can be used
   my $adv=0;
 
   unless ($ENV{'form.forcesmp'}) {
@@ -110,10 +261,22 @@ sub handler {
      }
   }
 
-  if ($adv) {
+  my $errtext='';
+  my $fatal=0;
+
+# -------------------------------------------------------------------- Load map
+  ($errtext,$fatal)=&mapread($fn,$errtext);
+
+  if ($fatal==1) { $adv=1; }
+
+# ----------------------------------- adv==1 now means "graphical MUST be used"
+
+  if ($ENV{'form.forceadv'}) {
       &ratedt($r,$url);
+  } elsif ($ENV{'form.forcesmp'}) {
+      &smpedt($r,$errtext);
   } else {
-      &smpedt($r,$fn);
+      &viewmap($r,$adv);
   }
   return OK;
 }