--- rat/lonratsrv.pm 2000/07/04 16:24:17 1.2 +++ rat/lonratsrv.pm 2011/10/25 19:23:20 1.42 @@ -1,221 +1,89 @@ # The LearningOnline Network with CAPA # Server for RAT Maps # -# (Edit Handler for RAT Maps -# (TeX Content Handler +# $Id: lonratsrv.pm,v 1.42 2011/10/25 19:23:20 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/ # -# 05/29/00,05/30 Gerd Kortemeyer) -# 7/1 Gerd Kortemeyer) -# 7/1,7/3,7/4 Gerd Kortemeyer + package Apache::lonratsrv; use strict; use Apache::Constants qw(:common); -use Apache::File; -use HTML::TokeParser; - - -# ---------------------------------------------------------- Escape Quote Chars - -sub qtescape { - my $str=shift; - $str =~ s/([\"\%])/"%".unpack('H2',$1)/eg; - return $str; -} - -# ----------------------------------------------------- Un-Escape Special Chars - -sub unescape { - my $str=shift; - $str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; - return $str; -} - -# --------------------------------------------------------- Loads map from disk - -sub loadmap { - my ($fn,$errtext)=@_; - my $outstr=''; - my @content=(); - my @obj=(); - my @links=(); - if (-e $fn) { - { - my $fh=Apache::File->new($fn); - @content=<$fh>; - } - my $instr=join('',@content); - my $parser = HTML::TokeParser->new(\$instr); - my $token; - my $graphmode=0; - - $fn=~/\.(\w+)$/; - $outstr="mode<:>$1"; - - while ($token = $parser->get_token) { - if ($token->[0] eq 'S') { - if ($token->[1] eq 'map') { - $graphmode=($token->[2]->{'mode'} eq 'rat/graphical'); - } elsif ($token->[1] eq 'resource') { - } elsif ($token->[1] eq 'condition') { - } elsif ($token->[1] eq 'link') { - $outstr.='<&>objlinks'; - if ($graphmode) { - $outstr.='<:>'.$token->[2]->{'index'}; - @links[$token->[2]->{'index'}]=1; - } else { - my $i=1; - while (($i<=$#links) && ($links[$i]==1)) { $i++; } - $outstr.='<:>'.$i; - } - $outstr.='<:>'.$token->[2]->{'from'}. - '<:>'.$token->[2]->{'to'}; - if ($token->[2]->{'condition'}) { - $outstr.='<:>'.$token->[2]->{'condition'}; - } else { - $outstr.='<:>0'; - } - } elsif ($graphmode) { - } - } - } - - } else { - $errtext.='Map not loaded: The file does not exist.'; - } - return($outstr,$errtext); -} +use LONCAPA(); +use LONCAPA::map(); -# ----------------------------------------------------------- Saves map to disk - -sub savemap { - my ($fn,$errtext)=@_; - if (($fn=~/\.course$/) || - ($fn=~/\.sequence$/) || - ($fn=~/\.page$/)) { -# ------------------------------------------------------------- Deal with input - my @tags=split(/<&>/,$ENV{'form.output'}); - my $outstr=''; - my $graphdef=0; - if ($tags[0] eq 'graphdef<:>yes') { - $outstr=''."\n"; - $graphdef=1; - } else { - $outstr="\n"; - } - map { - my @parts=split(/<:>/,$_); - if ($parts[0] eq 'objcont') { - my @comp=split(/:/,$parts[$#parts]); -# --------------------------------------------------------------- Logical input - if ($comp[$#comp] eq 'res') { - $comp[0]=~s/\&\#(\d+)\;/pack("C",$1)/eg; - $comp[1]=~s/\&\#(\d+)\;/pack("C",$1)/eg; - if ($comp[2] eq 'true') { - if ($comp[1]!~/^http\:\/\//) { - $comp[1]='http://'.$comp[1]; - } - } else { - if ($comp[1]=~/^http\:\/\//) { - $comp[1]=~s/^http\:\/\/[^\/]*\//\//; - } - } - $outstr.='\n"; - } - } @tags; - $outstr.="\n"; - { - my $fh; - if ($fh=Apache::File->new(">$fn")) { - print $fh $outstr; - $errtext.="Map saved as $fn."; - } else { - $errtext.='Could not write file $fn. Map not saved.'; - } - } - } else { -# -------------------------------------------- Cannot write to that file, error - $errtext.='Map not saved: The specified path does not exist.'; - } - return $errtext; -} - # ================================================================ Main Handler sub handler { my $r=shift; - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK if $r->header_only; my $url=$r->uri; - $url=~/\/(\w+)\/ratserver$/; + $url=~m{/(\w+)/ratserver$}; my $mode=$1; - $url=~s/\/loadonly\/ratserver$/\/save\/ratserver/; + $url=~s{/loadonly/ratserver$}{/save/ratserver}; my $fn=$r->filename; my $errtext=''; + my $infotext=''; my $outtext=''; if ($mode ne 'loadonly') { - $errtext=&savemap($fn,$errtext); + ($errtext,$infotext)=&LONCAPA::map::savemap($fn,$errtext); } - ($outtext,$errtext)=&loadmap($fn,$errtext); + ($outtext,$errtext,$infotext)=&LONCAPA::map::loadmap($fn,$errtext,$infotext); + + my $start_page = + &Apache::loncommon::start_page('Alert',undef, + {'only_body' => 1, + 'bgcolor' => '#FFFFFF',}); + my $end_page = + &Apache::loncommon::end_page(); $r->print(< - -
- +$start_page + +
+ ENDDOCUMENT - if ($errtext ne '') { + if (($errtext ne '') || ($infotext ne '')) { $r->print(< - alert("$errtext"); + ENDSCRIPT } - $r->print("\n\n"); + $r->print($end_page); return OK; } @@ -224,8 +92,20 @@ ENDSCRIPT __END__ +=head1 NAME +Apache::lonratsrv +=head1 SYNOPSIS +Handler that takes output from RAT and stores +it on disk. Handles the upper hidden frame of +the added window that comes up in RAT. (3 +frames come up in RAT server, code, and +output. This module handles server +connection.) +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. +=cut