--- 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; }