--- rat/lonratedt.pm 2002/08/26 12:38:40 1.33 +++ rat/lonratedt.pm 2002/12/06 12:58:11 1.42 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Edit Handler for RAT Maps # -# $Id: lonratedt.pm,v 1.33 2002/08/26 12:38:40 www Exp $ +# $Id: lonratedt.pm,v 1.42 2002/12/06 12:58:11 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,6 +37,8 @@ use Apache::Constants qw(:common); use Apache::lonnet; use Apache::lonratsrv; use Apache::lonsequence; +use Apache::loncommon; +use File::Copy; use vars qw(@order @resources); @@ -101,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; @@ -298,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'; } } @@ -321,14 +329,24 @@ sub startfinish { $resources[$#resources+1]='::false'; $order[1]=$#resources; } - my ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]); + ($name,$url,$ext)=split(/\:/,$resources[$order[$#order]]); $resources[$order[$#order]]=$name.':'.$url.':'.$ext.':finish:res'; } # ------------------------------------------------------------------- Store map sub storemap { - my $fn=shift; + my $realfn=shift; + 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; @@ -462,7 +480,26 @@ ENDSCRIPT sub smpedt { my ($r,$url,$errtext)=@_; my $buttons=&buttons(2); - + my $tmpfn=&Apache::lonnet::filelocation('',$url).'.tmp'; + my $targetmsg=''; + if ($ENV{'form.save'}) { + $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= + 'You are working with an unsaved version of your map.
'; + my ($errtext,$fatal)=&mapread($tmpfn,''); + } # ---------------------------------------------------------- Process form input my @importselect=(); @@ -649,11 +686,40 @@ 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 my $idx=-1; + $importdetail='&'.$importdetail; + $importdetail=~s/^\&+/\&/; my $importwindow= ''. join("\n",map { @@ -668,6 +734,7 @@ sub smpedt { } split(/\&/,$importdetail)); $idx=0; + $targetdetail=''; my $targetwindow= ''. join("\n",map { @@ -677,11 +744,13 @@ sub smpedt { $targetdetail.='&'.&Apache::lonnet::escape($name).'='. &Apache::lonnet::escape($url); $idx++; + $name=~s/\:/\:/g; ''; } @order); # ----------------------------------------------------- Start simple RAT screen my $editscript=&editscript('simple'); + my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1); $r->print(< @@ -699,29 +768,51 @@ sub smpedt { function viewtarget() { openview((document.forms.simpleedit.targetdetail.value.split('&')) - [document.forms.simpleedit.target.selectedIndex+1]); + [document.forms.simpleedit.target.selectedIndex]); } function viewimport() { openview((document.forms.simpleedit.curimpdetail.value.split('&')) - [document.forms.simpleedit.importsel.selectedIndex+1]); + [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 -

$url

+ + + - + - +
Import
Temporary Assembly Workspace  Target
File: $url
- - + + after selected
@@ -735,11 +826,18 @@ value="Browse">
  +"javascript:impfortarget.value=1;groupsearch()" value="Search"> +"javascript:impfortarget.value=1;groupimport();" value="Import"> after selected -
+
+ + + +
$targetmsg + + +