--- rat/lonratedt.pm 2002/08/31 00:42:30 1.34
+++ rat/lonratedt.pm 2003/04/07 20:47:06 1.44
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Edit Handler for RAT Maps
#
-# $Id: lonratedt.pm,v 1.34 2002/08/31 00:42:30 www Exp $
+# $Id: lonratedt.pm,v 1.44 2003/04/07 20:47:06 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -103,7 +103,12 @@ sub mapread {
}
}
}
-
+# ---------------------------------------------- Did we just read an empty map?
+ if ($#resources<1) {
+ undef $resources[0];
+ $resources[1]=':::start';
+ $resources[2]=':::finish';
+ }
# -------------------------------------------------- This is a linear map, sort
my $startidx=0;
@@ -300,6 +305,7 @@ sub pastetarget {
my $ext='false';
if ($url=~/^http\:\/\//) { $ext='true'; }
$url=~s/\:/\:/g;
+ $name=~s/\:/\:/g;
$resources[$idx]=$name.':'.$url.':'.$ext.':normal:res';
}
}
@@ -312,18 +318,39 @@ sub pastetarget {
# modifies @resources
sub startfinish {
+# Remove all start and finish
foreach (@order) {
my ($name,$url,$ext)=split(/\:/,$resources[$_]);
if ($url=~/http\&colon\:\/\//) { $ext='true'; }
$resources[$_]=$name.':'.$url.':'.$ext.':normal:res';
}
+# Garbage collection
+ my $stillchange=1;
+ while (($#order>1) && ($stillchange)) {
+ $stillchange=0;
+ for (my $i=0;$i<=$#order;$i++) {
+ my ($name,$url,$ext)=split(/\:/,$resources[$order[$i]]);
+ unless ($url) {
+# Take out empty resource
+ for (my $j=$i+1;$j<=$#order;$j++) {
+ $order[$j-1]=$order[$j];
+ }
+ $#order--;
+ $stillchange=1;
+ last;
+ }
+ }
+ }
+# Put in a start resource
my ($name,$url,$ext)=split(/\:/,$resources[$order[0]]);
$resources[$order[0]]=$name.':'.$url.':'.$ext.':start:res';
+# Make sure this has at least start and finish
if ($#order==0) {
$resources[$#resources+1]='::false';
$order[1]=$#resources;
}
- my ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]);
+# Make the last one a finish resource
+ ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]);
$resources[$order[$#order]]=$name.':'.$url.':'.$ext.':finish:res';
}
@@ -331,10 +358,16 @@ sub startfinish {
sub storemap {
my $realfn=shift;
- my $fn=$realfn.'.tmp';
- unless (-e $fn) {
- copy($realfn,$fn);
+ my $fn=$realfn;
+# unless this is forced to work from the original file, use a temporary file
+# instead
+ unless (shift) {
+ $fn=$realfn.'.tmp';
+ unless (-e $fn) {
+ copy($realfn,$fn);
+ }
}
+# store data either into tmp or real file
&startfinish();
my $output='graphdef<:>no';
my $k=1;
@@ -474,10 +507,14 @@ sub smpedt {
$targetmsg='Saving ...
';
copy($tmpfn,&Apache::lonnet::filelocation('',$url));
unlink($tmpfn);
+ my ($errtext,$fatal)=
+ &mapread(&Apache::lonnet::filelocation('',$url),'');
}
if ($ENV{'form.revert'}) {
$targetmsg='Reverting ...
';
unlink($tmpfn);
+ my ($errtext,$fatal)=
+ &mapread(&Apache::lonnet::filelocation('',$url),'');
}
if (-e $tmpfn) {
$targetmsg=
@@ -670,7 +707,34 @@ sub smpedt {
}
&pastetarget($lastsel,@newsequence);
&storemap(&Apache::lonnet::filelocation('',$url));
-# ------------------------------------------------
+# -------------------------------------------------------------------- Move up
+ } elsif ($ENV{'form.moveup'}) {
+ foreach (sort @targetselect) {
+ if ($_-1>0) {
+ my $movethis=$order[$_-1];
+ $order[$_-1]=$order[$_-2];
+ $order[$_-2]=$movethis;
+ }
+ }
+ &storemap(&Apache::lonnet::filelocation('',$url));
+# ------------------------------------------------------------------ Move down
+ } elsif ($ENV{'form.movedown'}) {
+ foreach (reverse sort @targetselect) {
+ if ($_-1<$#order) {
+ my $movethis=$order[$_-1];
+ $order[$_-1]=$order[$_];
+ $order[$_]=$movethis;
+ }
+ }
+ &storemap(&Apache::lonnet::filelocation('',$url));
+# --------------------------------------------------------------------- Rename
+ } elsif ($ENV{'form.renameres'}) {
+ my $residx=$Apache::lonratedt::order[$ENV{'form.renameidx'}-1];
+ my ($name,@resrest)=split(/\:/,$Apache::lonratedt::resources[$residx]);
+ $name=$ENV{'form.renametitle'};
+ $name=~s/\:/\&colon\;/g;
+ $Apache::lonratedt::resources[$residx]=$name.':'.join(':',@resrest);
+ &storemap(&Apache::lonnet::filelocation('',$url));
}
# ------------------------------------------------------------ Assemble windows
@@ -691,6 +755,7 @@ sub smpedt {
} split(/\&/,$importdetail));
$idx=0;
+ $targetdetail='';
my $targetwindow=
''.
join("\n",map {
@@ -700,6 +765,7 @@ sub smpedt {
$targetdetail.='&'.&Apache::lonnet::escape($name).'='.
&Apache::lonnet::escape($url);
$idx++;
+ $name=~s/\:/\:/g;
'';
} @order);
@@ -731,21 +797,43 @@ sub smpedt {
[document.forms.simpleedit.importsel.selectedIndex]);
}
+ function renametarget() {
+ var selidx=document.forms.simpleedit.target.selectedIndex;
+ var entry=(document.forms.simpleedit.targetdetail.value.split('&'))
+ [selidx];
+ var oldname=unescape((entry.split('='))[0]);
+ var nameparts=oldname.split(':');
+ oldname=unescape(nameparts.join(':'));
+ nameparts=oldname.split('"');
+ oldname=unescape(nameparts.join('"'));
+ nameparts=oldname.split(''');
+ oldname=unescape(nameparts.join("'"));
+ newtitle=prompt('New Title',oldname);
+ if (newtitle) {
+ document.forms.simpleedit.renameres.value=1;
+ document.forms.simpleedit.renameidx.value=selidx;
+ document.forms.simpleedit.renametitle.value=newtitle;
+ document.forms.simpleedit.submit();
+ }
+ }
+
$bodytag
$buttons
$errtext
-