--- rat/lonratedt.pm	2002/05/15 20:24:32	1.18
+++ rat/lonratedt.pm	2002/05/21 13:41:13	1.23
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Edit Handler for RAT Maps
 #
-# $Id: lonratedt.pm,v 1.18 2002/05/15 20:24:32 www Exp $
+# $Id: lonratedt.pm,v 1.23 2002/05/21 13:41:13 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -37,8 +37,8 @@ use Apache::Constants qw(:common);
 use Apache::lonnet;
 use Apache::lonratsrv;
 
-my @order=();
-my @resources=();
+my @order;
+my @resources;
 
 
 # Mapread read maps into global arrays @links and @resources, determines status
@@ -52,6 +52,8 @@ sub mapread {
     undef @links;
     undef @resources;
     undef @order;
+    @resources=('');
+    @order=();
 
     my ($outtext,$errtext)=&Apache::lonratsrv::loadmap($fn,'');
     if ($errtext) { return ($errtext,2); }
@@ -88,7 +90,7 @@ sub mapread {
 	}
 
     }
-    for (my $i=0; $i<=$#resources; $i++) {
+    for (my $i=1; $i<=$#resources; $i++) {
         if (defined($resources[$i])) {
 	    unless (($starters[$i]) || ($endings[$i])) {
                 return
@@ -274,8 +276,75 @@ sub buttons {
     return $output.'</form><hr>';
 }
 
+# ----------------------------------------------------------- Paste into target
+# modifies @order, @resources
+
+sub pastetarget {
+    my ($after,@which)=@_;
+    my @insertorder=();
+    foreach (@which) {
+        if (defined($_)) {
+	    my ($name,$url)=split(/\=/,$_);
+            $name=&Apache::lonnet::unescape($name);
+            $url=&Apache::lonnet::unescape($url);
+            if ($url) {
+	       my $idx=$#resources+1;
+               $insertorder[$#insertorder+1]=$idx;
+               my $ext='false';
+               if ($url=~/^http\:\/\//) { $ext='true'; }
+               $url=~s/\:/\&colon;/g;
+               $resources[$idx]=$name.':'.$url.':'.$ext.':normal:res';
+	   }
+        }
+    }
+    my @oldorder=splice(@order,$after);
+    @order=(@order,@insertorder,@oldorder);
+}
+
+# ------------------------------------------------ Get start and finish correct
+# modifies @resources
+
+sub startfinish {
+    foreach (@order) {
+	my ($name,$url,$ext)=split(/\:/,$resources[$_]);
+        if ($url=~/http\&colon\:\/\//) { $ext='true'; }
+        $resources[$_]=$name.':'.$url.':'.$ext.':normal:res';
+    }
+   my ($name,$url,$ext)=split(/\:/,$resources[$order[0]]);
+   $resources[$order[0]]=$name.':'.$url.':'.$ext.':start:res';
+   my ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]);
+   $resources[$order[$#order]]=$name.':'.$url.':'.$ext.':finish:res';
+}
+
+# ------------------------------------------------------------------- Store map
+
+sub storemap {
+    my $fn=shift;
+    &startfinish();
+    my $output='graphdef<:>no';
+    my $k=1;
+    for (my $i=0; $i<=$#order; $i++) {
+        if (defined($resources[$order[$i]])) {
+	    $output.='<&>objcont<:>'.$order[$i].'<:>'.$resources[$order[$i]];
+        }
+        if (defined($order[$i+1])) {
+	    if (defined($resources[$order[$i+1]])) {
+               $output.='<&>objlinks<:>'.$k.'<:>'.
+		   $order[$i].':'.$order[$i+1].':0';
+	       $k++;
+            }
+        }
+    }
+    $output=~s/http\&colon\;\/\///g;
+    $ENV{'form.output'}=$output;
+    return 
+     &Apache::lonratsrv::loadmap($fn,&Apache::lonratsrv::savemap($fn,''));
+}
+
+# ------------------------------------------------------- Simple edit processor
+
 sub smpedt {
-   my ($r,$errtext)=@_;
+   my ($r,$url,$errtext)=@_;
    my $buttons=&buttons(2);
 
 # ---------------------------------------------------------- Process form input
@@ -389,11 +458,24 @@ sub smpedt {
        $importdetail=~s/\&+/\&/g;
        $importdetail=~s/^\&//;
 
-# ------------------------------------
+# ------------------------------------------------ Groupimport/search to target
+   } elsif ($ENV{'form.importdetail'}) {
+       my $lastsel;
+       if (defined($targetselect[-1])) {
+	   $lastsel=$targetselect[-1];
+       } else {
+           $lastsel=$#order+1;
+       }
+       &pastetarget($lastsel,split(/\&/,$ENV{'form.importdetail'}));
+       &storemap(&Apache::lonnet::filelocation('',$url));
+# ------------------------------------------------------------------------- Cut
+   } elsif ($ENV{'form.cut'}) {
+# ----------------------------------------------------------------------- Paste
+   } elsif ($ENV{'form.paste'}) {
+# ------------------------------------------------ 
    }
-
 # ------------------------------------------------------------ Assemble windows
-
+   
    my $idx=-1;
    my $importwindow=join("\n",map {
        $idx++;
@@ -414,7 +496,7 @@ sub smpedt {
        $targetdetail.='&'.&Apache::lonnet::escape($name).'='.
 	                  &Apache::lonnet::escape($url);
        $idx++;
-       '<option value="'.$idx.'_'.$_.'">'.$name.'</option>';
+       '<option value="'.$idx.'">'.$name.'</option>';
    } @order);
 
 # ----------------------------------------------------- Start simple RAT screen
@@ -524,6 +606,25 @@ function idxcheck(mode) {
         editbrowser = open(url,title,options,'1');
         editbrowser.focus();
     }
+
+   function openview(entry) {
+       var url=unescape((entry.split('='))[1]);
+       var parts=new Array;
+       parts=url.split('&colon;');
+       url=parts.join(':');
+       if (url) { open(url,'cat'); }
+   }
+
+   function viewtarget() {
+       openview((document.forms.simpleedit.targetdetail.value.split('&'))
+                [document.forms.simpleedit.target.selectedIndex+1]);
+   }
+
+   function viewimport() {
+       openview((document.forms.simpleedit.curimpdetail.value.split('&'))
+                [document.forms.simpleedit.import.selectedIndex+1]);
+   }
+
 </script>
 </head>                 
 <body bgcolor='#FFFFFF'>
@@ -664,7 +765,7 @@ sub handler {
   if ($ENV{'form.forceadv'}) {
       &ratedt($r,$url);
   } elsif ($ENV{'form.forcesmp'}) {
-      &smpedt($r,$errtext);
+      &smpedt($r,$url,$errtext);
   } else {
       &viewmap($r,$url,$adv,$errtext);
   }