Diff for /rat/lonpage.pm between versions 1.2 and 1.5

version 1.2, 2000/08/31 10:14:08 version 1.5, 2000/09/15 20:03:48
Line 4 Line 4
 # (TeX Content Handler  # (TeX Content Handler
 #  #
 # 05/29/00,05/30 Gerd Kortemeyer)  # 05/29/00,05/30 Gerd Kortemeyer)
 # 08/30,08/31 Gerd Kortemeyer  # 08/30,08/31,09/06,09/14,09/15 Gerd Kortemeyer
   
 package Apache::lonpage;  package Apache::lonpage;
   
Line 16  use GDBM_File; Line 16  use GDBM_File;
 # -------------------------------------------------------------- Module Globals  # -------------------------------------------------------------- Module Globals
 my %hash;  my %hash;
 my @rows;  my @rows;
                     
   my %ssibody=();
   my %ssibgcolor=();
   my %ssitext=();
   my %ssilink=();
   my %ssivlink=();
   my %ssialink=();
   my %cellemb=();
   
 # ------------------------------------------------------------ Build page table  # ------------------------------------------------------------ Build page table
   
Line 28  sub tracetable { Line 36  sub tracetable {
        if (defined($hash{'is_map_'.$rid})) {         if (defined($hash{'is_map_'.$rid})) {
            if ((defined($hash{'map_start_'.$hash{'src_'.$rid}})) &&             if ((defined($hash{'map_start_'.$hash{'src_'.$rid}})) &&
                (defined($hash{'map_finish_'.$hash{'src_'.$rid}}))) {                 (defined($hash{'map_finish_'.$hash{'src_'.$rid}}))) {
        $sofar=                my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}};
         $sofar=
                 &tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}},                  &tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}},
                 '&'.$hash{'map_finish_'.$hash{'src_'.$rid}}.'&');                  '&'.$frid.'&');
                $sofar++;                $sofar++;
                if (defined($rows[$sofar])) {                if ($hash{'src_'.$frid}) {
                    $rows[$sofar].='&'.$hash{'map_finish_'.$hash{'src_'.$rid}};                 my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$frid});
                } else {                 if (($brepriv eq '2') || ($brepriv eq 'F')) {
                    $rows[$sofar]=$hash{'map_finish_'.$hash{'src_'.$rid}};                   if (defined($rows[$sofar])) {
                }                     $rows[$sofar].='&'.$frid;
                    } else {
                      $rows[$sofar]=$frid;
                    }
          }
         }
    }     }
        } else {         } else {
            $sofar++;            $sofar++;
            if (defined($rows[$sofar])) {            if ($hash{'src_'.$rid}) {
              my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$rid});
              if (($brepriv eq '2') || ($brepriv eq 'F')) {
                if (defined($rows[$sofar])) {
                $rows[$sofar].='&'.$rid;                 $rows[$sofar].='&'.$rid;
            } else {               } else {
                $rows[$sofar]=$rid;                 $rows[$sofar]=$rid;
            }               }
      }
             }
        }         }
   
        if (defined($hash{'to_'.$rid})) {         if (defined($hash{'to_'.$rid})) {
Line 57  sub tracetable { Line 76  sub tracetable {
     return $further;      return $further;
 }  }
   
   sub cell {
       my ($r,$colspan,$rid)=@_;
       $r->print('<td colspan="'.$colspan.'"');
       if ($cellemb{$rid} eq 'ssi') {
          $r->print('>'.$ssibody{$rid});
       } elsif ($cellemb{$rid} eq 'img') {
          $r->print('><img src="'.$hash{'src_'.$rid}.'">');
       }
       $r->print('</td>');
   }
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
   
 sub handler {  sub handler {
   my $r=shift;    my $r=shift;
   
 # ----------------------------------------------------------- Set document type  # ------------------------------------------- Set document type for header only
   
   if ($ENV{'browser.mathml'}) {    if ($r->header_only) {
     $r->content_type('text/xml');         if ($ENV{'browser.mathml'}) {
   } else {             $r->content_type('text/xml');
     $r->content_type('text/html');         } else {
   }             $r->content_type('text/html');
   $r->send_http_header;         }
          $r->send_http_header;
   return OK if $r->header_only;         return OK;
      }
   
   my $requrl=$r->uri;    my $requrl=$r->uri;
 # ----------------------------------------------------------------- Tie db file  # ----------------------------------------------------------------- Tie db file
Line 86  sub handler { Line 116  sub handler {
               if (($firstres) && ($lastres)) {                if (($firstres) && ($lastres)) {
 # ----------------------------------------------------------------- Render page  # ----------------------------------------------------------------- Render page
   
   $r->print("<h2>All is cool.</h2>");  
   
                   @rows=();                    @rows=();
   
                   &tracetable(0,$firstres,'&'.$lastres.'&');                    &tracetable(0,$firstres,'&'.$lastres.'&');
                   $rows[$#rows+1]=''.$lastres;                    if ($hash{'src_'.$lastres}) {
                        my $brepriv=
                           &Apache::lonnet::allowed('bre',$hash{'src_'.$lastres});
                        if (($brepriv eq '2') || ($brepriv eq 'F')) {
                           $rows[$#rows+1]=''.$lastres;
        }
     }
   
                   my $i;                    my $i;
                     my $j;
                     my $maxcols=-1;
   
   # --------------------------------------------- Get SSI output, post parameters
   
                   for ($i=0;$i<=$#rows;$i++) {                    for ($i=0;$i<=$#rows;$i++) {
                       $r->print($i.' - '.$rows[$i].'<br>');       if ($rows[$i]) {
                         my @colcont=split(/\&/,$rows[$i]);
                         $maxcols=$#colcont>$maxcols?$#colcont:$maxcols;
                         map {
                             my $src=$hash{'src_'.$_};
                             $src=~/\.(\w+)$/;
                             $cellemb{$_}=Apache::lonnet::fileembstyle($1);
                             if ($cellemb{$_} eq 'ssi') {
   # --------------------------------------------------------- This is an SSI cell
         my $prefix=$_.'_';
                                 my %posthash=('request.prefix' => $prefix);
                                 map {
     if ($_=~/^form.$prefix/) {
         my $name=$_;
                                         $name=~s/^form.$prefix//;
                                         $posthash{$name}=$ENV{$_};
                                     }
                                 } keys %ENV;
                                 my $output=Apache::lonnet::ssi($src,%posthash);
   
         $ssibody{$_}=$output;
   
   # ---------------------------------------------------------------- End SSI cell
                             }
                         } @colcont;
                        } 
                   }                    }
                     if ($maxcols<0) {
                         $r->content_type('text/html');
                         $r->send_http_header;
                         $r->print('<html><body>Empty page.</body></html>');
                     } else {
   # ------------------------------------------------------------------ Build page
                         $maxcols++;
                         $r->content_type('text/html');
                         $r->send_http_header;
                         $r->print('<html><body>');
    
                         $r->print('<table cols="'.$maxcols.'" rows="'.
                                    $#rows.'" border="0">');
                         for ($i=0;$i<=$#rows;$i++) {
    if ($rows[$i]) {
                             $r->print("\n<tr>");
                             my @colcont=split(/\&/,$rows[$i]);
                             my $avespan=int($maxcols/($#colcont+1));
                             my $lastspan=$maxcols-$avespan*$#colcont;
                             for ($j=0;$j<$#colcont;$j++) {
                                 &cell($r,$avespan,$colcont[$j]);
                             }
                             &cell($r,$lastspan,$colcont[$#colcont]);
                             $r->print('</tr>');
           }
                         }
                         $r->print("\n</table>");
   
                         $r->print('</body></html>');
   # -------------------------------------------------------------------- End page
                     }                  
 # ------------------------------------------------------------- End render page  # ------------------------------------------------------------- End render page
               } else {                } else {
   $r->print("<h2>Page undefined.</h2>");                    $r->content_type('text/html');
                     $r->send_http_header;
     $r->print('<html><body>Page undefined.</body></html>');
               }                }
 # ------------------------------------------------------------------ Untie hash  # ------------------------------------------------------------------ Untie hash
               unless (untie(%hash)) {                unless (untie(%hash)) {

Removed from v.1.2  
changed lines
  Added in v.1.5


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