--- rat/lonratedt.pm 2001/05/26 19:55:07 1.3 +++ rat/lonratedt.pm 2002/05/10 18:58:04 1.8 @@ -1,15 +1,77 @@ # The LearningOnline Network with CAPA # Edit Handler for RAT Maps +# +# $Id: lonratedt.pm,v 1.8 2002/05/10 18:58:04 www Exp $ +# +# Copyright Michigan State University Board of Trustees +# +# This file is part of the LearningOnline Network with CAPA (LON-CAPA). +# +# LON-CAPA is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# LON-CAPA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LON-CAPA; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# /home/httpd/html/adm/gpl.txt +# +# http://www.lon-capa.org/ +# # (TeX Content Handler # # 05/29/00,05/30 Gerd Kortemeyer) -# 7/1 Gerd Kortemeyer +# 7/1,6/30 Gerd Kortemeyer 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 { @@ -32,19 +94,143 @@ sub ratedt { ENDDOCUMENT } +# ---------------------------------------------------------------- Make buttons + +sub buttons { + my $adv=shift; + my $output='
'; + if ($adv==1) { + $output.=''; + } else { + unless ($adv==2) { + $output.=''; + } + $output.=''; + } + return $output.'

'; +} + sub smpedt { - my ($r,$fn)=@_; + my ($r,$errtext)=@_; + my $buttons=&buttons(2); +# ----------------------------------------------------- Start simple RAT screen $r->print(< + + + -
-
+$buttons +$errtext +Group Search +Group Import + ENDSMPHEAD + $r->print( '
'); } +sub nodir { + my ($r,$dir)=@_; + $dir=~s/^\/home\/\w+\/public\_html//; + $r->print(< + +

No such directory: $dir

+ + +ENDNODIR +} + +# ---------------------------------------------------------------- View Handler + +sub viewmap { + my ($r,$adv)=@_; + $r->print(''.&buttons($adv)); + + $r->print(''); +} + # ================================================================ Main Handler sub handler { @@ -57,6 +243,13 @@ sub handler { my $url=$r->uri; my $fn=&Apache::lonnet::filelocation('',$url); + my ($dir)=($fn=~/^(.+)\/[^\/]+$/); + unless (-e $dir) { + &nodir($r,$dir); + return OK; + } + +# ------------------------------------------- Determine which tools can be used my $adv=0; unless ($ENV{'form.forcesmp'}) { @@ -68,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; }