Diff for /rat/lonratsrv.pm between versions 1.3 and 1.7

version 1.3, 2000/07/05 21:05:28 version 1.7, 2000/10/02 16:10:12
Line 6 Line 6
 #  #
 # 05/29/00,05/30 Gerd Kortemeyer)  # 05/29/00,05/30 Gerd Kortemeyer)
 # 7/1 Gerd Kortemeyer)  # 7/1 Gerd Kortemeyer)
 # 7/1,7/3,7/4 Gerd Kortemeyer  # 7/1,7/3,7/4,7/7,7/8,7/10,7/26,10/2 Gerd Kortemeyer
   
 package Apache::lonratsrv;  package Apache::lonratsrv;
   
Line 16  use Apache::File; Line 16  use Apache::File;
 use HTML::TokeParser;  use HTML::TokeParser;
   
   
 # ---------------------------------------------------------- Escape Quote Chars  # ------------------------------------------------------------- From RAT to XML
   
 sub qtescape {  sub qtescape {
     my $str=shift;      my $str=shift;
     $str =~ s/([\"\%])/"%".unpack('H2',$1)/eg;      $str=~s/\&\#58\;/\:/g;
       $str=~s/\&\#39\;/\'/g;
       $str=~s/\&\#44\;/\,/g;
       $str=~s/\"/\&\#34\;/g;
     return $str;      return $str;
 }  }
   
 # ----------------------------------------------------- Un-Escape Special Chars  # ------------------------------------------------------------- From XML to RAT
   
 sub unescape {  sub qtunescape {
     my $str=shift;      my $str=shift;
     $str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;      $str=~s/\:/\&\#58\;/g;
       $str=~s/\'/\&\#39\;/g;
       $str=~s/\,/\&\#44\;/g;
       $str=~s/\"/\&\#34\;/g;
     return $str;      return $str;
 }  }
   
Line 74  sub loadmap { Line 80  sub loadmap {
                         $obj[$i]=1;                          $obj[$i]=1;
                     }                      }
                     $outstr.='<:>';                      $outstr.='<:>';
                       $outstr.=qtunescape($token->[2]->{'title'}).":";
                       $outstr.=qtunescape($token->[2]->{'src'}).":";
                       if ($token->[2]->{'src'}=~/\/\//) {
                           $outstr.='true:';
                       } else {
                           $outstr.='false:';
                       }
                       if ($token->[2]->{'type'}) {
    $outstr.=$token->[2]->{'type'}.':';
                       }  else {
                           $outstr.='normal:';
                       }
                       $outstr.='res';
                 } elsif ($token->[1] eq 'condition') {                  } elsif ($token->[1] eq 'condition') {
 # ------------------------------------------------------------------- Condition  # ------------------------------------------------------------------- Condition
                     $outstr.='<&>objcont';                      $outstr.='<&>objcont';
Line 91  sub loadmap { Line 110  sub loadmap {
                         $obj[$i]=1;                          $obj[$i]=1;
                     }                      }
                     $outstr.='<:>';                      $outstr.='<:>';
                       $outstr.=qtunescape($token->[2]->{'value'}).':';
                       if ($token->[2]->{'type'}) {
    $outstr.=$token->[2]->{'type'}.':';
                       } else {
                           $outstr.='normal:';
                       }
                       $outstr.='cond';
                 } elsif ($token->[1] eq 'link') {                  } elsif ($token->[1] eq 'link') {
 # ----------------------------------------------------------------------- Links  # ----------------------------------------------------------------------- Links
                     $outstr.='<&>objlinks';                      $outstr.='<&>objlinks';
                     if ($graphmode) {  
                         if ($token->[2]->{'index'}) {                          if ($token->[2]->{'index'}) {
                            $errtext.='Error: multiple use of link index '.     if ($links[$token->[2]->{'index'}]) {
                                  $errtext.='Error: multiple use of link index '.
        $token->[2]->{'index'}.'. ';         $token->[2]->{'index'}.'. ';
  $outstr.='<:>'.$token->[2]->{'index'};                             }
                         $links[$token->[2]->{'index'}]=1;     $outstr.='<:>'.$token->[2]->{'index'};
                     } else {                             $links[$token->[2]->{'index'}]=1;
                         my $i=1;                          } else {
                         while (($i<=$#links) && ($links[$i]==1)) { $i++; }                             my $i=1;
                         $outstr.='<:>'.$i;                             while (($i<=$#links) && ($links[$i]==1)) { $i++; }
                         $links[$i]=1;                             $outstr.='<:>'.$i;
     }                             $links[$i]=1;
          }
       
                     $outstr.='<:>'.$token->[2]->{'from'}.                      $outstr.='<:>'.$token->[2]->{'from'}.
                              '<:>'.$token->[2]->{'to'};                               ':'.$token->[2]->{'to'};
                     if ($token->[2]->{'condition'}) {                      if ($token->[2]->{'condition'}) {
  $outstr.='<:>'.$token->[2]->{'condition'};   $outstr.=':'.$token->[2]->{'condition'};
                     } else {                      } else {
   $outstr.='<:>0';    $outstr.=':0';
                    }                      }
                 } elsif ($graphmode) {                  } elsif ($graphmode) {
 # --------------------------------------------- All other tags (graphical only)  # --------------------------------------------- All other tags (graphical only)
                     $outstr.='<&>'.$token->[1];                      $outstr.='<&>'.$token->[1];
                     if ($token->[2]->{'index'}) {                      if (defined($token->[2]->{'index'})) {
  $outstr.='<:>'.$token->[2]->{'index'};   $outstr.='<:>'.$token->[2]->{'index'};
                         if ($token->[1] eq 'obj') {                          if ($token->[1] eq 'obj') {
     $obj[$token->[2]->{'index'}]=2;      $obj[$token->[2]->{'index'}]=2;
Line 138  sub loadmap { Line 167  sub loadmap {
   
 sub savemap {  sub savemap {
     my ($fn,$errtext)=@_;      my ($fn,$errtext)=@_;
     if (($fn=~/\.course$/) ||      if (($fn=~/\.sequence$/) ||
         ($fn=~/\.sequence$/) ||  
         ($fn=~/\.page$/)) {          ($fn=~/\.page$/)) {
   
 # ------------------------------------------------------------- Deal with input  # ------------------------------------------------------------- Deal with input
         my @tags=split(/<&>/,$ENV{'form.output'});          my @tags=split(/<&>/,$ENV{'form.output'});
         my $outstr='';          my $outstr='';
Line 157  sub savemap { Line 186  sub savemap {
                my @comp=split(/:/,$parts[$#parts]);                 my @comp=split(/:/,$parts[$#parts]);
 # --------------------------------------------------------------- Logical input  # --------------------------------------------------------------- Logical input
        if ($comp[$#comp] eq 'res') {         if ($comp[$#comp] eq 'res') {
                    $comp[0]=~s/\&\#(\d+)\;/pack("C",$1)/eg;                     $comp[0]=qtescape($comp[0]);
                    $comp[1]=~s/\&\#(\d+)\;/pack("C",$1)/eg;                     $comp[1]=qtescape($comp[1]);
                    if ($comp[2] eq 'true') {                     if ($comp[2] eq 'true') {
        if ($comp[1]!~/^http\:\/\//) {         if ($comp[1]!~/^http\:\/\//) {
    $comp[1]='http://'.$comp[1];     $comp[1]='http://'.$comp[1];
Line 169  sub savemap { Line 198  sub savemap {
                        }                         }
                    }                     }
    $outstr.='<resource id="'.$parts[1].'" src="'     $outstr.='<resource id="'.$parts[1].'" src="'
                           .qtescape($comp[1]).'"';                            .$comp[1].'"';
   
                    if (($comp[3] ne '') && ($comp[3] ne 'normal')) {                     if (($comp[3] ne '') && ($comp[3] ne 'normal')) {
        $outstr.=' type="'.$comp[3].'"';         $outstr.=' type="'.$comp[3].'"';
                    }                     }
                    if ($comp[0] ne '') {                     if ($comp[0] ne '') {
        $outstr.=' title="'.qtescape($comp[0]).'"';         $outstr.=' title="'.$comp[0].'"';
                    }                     }
                    $outstr.="></resource>\n";                     $outstr.="></resource>\n";
                } elsif ($comp[$#comp] eq 'cond') {                 } elsif ($comp[$#comp] eq 'cond') {
Line 241  sub handler { Line 270  sub handler {
   my $fn=$r->filename;    my $fn=$r->filename;
   my $errtext='';    my $errtext='';
   my $outtext='';    my $outtext='';
     my $onload='';
   
   if ($mode ne 'loadonly') {    if ($mode ne 'loadonly') {
      $errtext=&savemap($fn,$errtext);       $errtext=&savemap($fn,$errtext);
        $onload='onLoad="parent.code.srvloaded();"';
   }    }
   ($outtext,$errtext)=&loadmap($fn,$errtext);    ($outtext,$errtext)=&loadmap($fn,$errtext);
   
   $r->print(<<ENDDOCUMENT);    $r->print(<<ENDDOCUMENT);
 <html>  <html>
 <body bgcolor="#FFFFFF">  <body bgcolor="#FFFFFF" $onload>
 <form name=storage method=post action="$url">  <form name=storage method=post action="$url">
 <input type=hidden name=output value="$outtext">  <input type=hidden name=output value="$outtext">
 </form>  </form>

Removed from v.1.3  
changed lines
  Added in v.1.7


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>