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

version 1.3, 2000/09/14 09:26:37 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,09/06,09/14 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}}))) {
                my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}};                my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}};
        $sofar=        $sofar=
                 &tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}},                  &tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}},
                 '&'.$frid.'&');                  '&'.$frid.'&');
                $sofar++;                $sofar++;
                 if ($hash{'src_'.$frid}) {
                my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$frid});                 my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$frid});
                if (($brepriv eq '2') || ($brepriv eq 'F')) {                 if (($brepriv eq '2') || ($brepriv eq 'F')) {
                  if (defined($rows[$sofar])) {                   if (defined($rows[$sofar])) {
Line 41  sub tracetable { Line 50  sub tracetable {
                    $rows[$sofar]=$frid;                     $rows[$sofar]=$frid;
                  }                   }
        }         }
         }
    }     }
        } else {         } else {
            $sofar++;            $sofar++;
             if ($hash{'src_'.$rid}) {
            my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$rid});             my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$rid});
            if (($brepriv eq '2') || ($brepriv eq 'F')) {             if (($brepriv eq '2') || ($brepriv eq 'F')) {
              if (defined($rows[$sofar])) {               if (defined($rows[$sofar])) {
Line 52  sub tracetable { Line 63  sub tracetable {
                $rows[$sofar]=$rid;                 $rows[$sofar]=$rid;
              }               }
    }     }
             }
        }         }
   
        if (defined($hash{'to_'.$rid})) {         if (defined($hash{'to_'.$rid})) {
Line 64  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
   
Line 97  sub handler { Line 119  sub handler {
                   @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;                    my $maxcols=-1;
                   my %ssibody=();  
                   my %ssibgcolor=();  
                   my %ssitext=();  
                   my %ssilink=();  
                   my %ssivlink=();  
                   my %ssialink=();  
                   my %cellemb=();  
   
 # --------------------------------------------- Get SSI output, post parameters  # --------------------------------------------- Get SSI output, post parameters
   
                   for ($i=0;$i<=$#rows;$i++) {                    for ($i=0;$i<=$#rows;$i++) {
        if ($rows[$i]) {
                       my @colcont=split(/\&/,$rows[$i]);                        my @colcont=split(/\&/,$rows[$i]);
                       $maxcols=$#colcont>$maxcols?$#colcont:$maxcols;                        $maxcols=$#colcont>$maxcols?$#colcont:$maxcols;
                       map {                        map {
                           my $src=$hash{'src_'.$_};                            my $src=$hash{'src_'.$_};
                           $src=~/\.\w+$/;                            $src=~/\.(\w+)$/;
                           $cellemb{$_}=Apache::lonnet::fileembstyle($1);                            $cellemb{$_}=Apache::lonnet::fileembstyle($1);
                           if ($cellemb{$_} eq 'ssi') {                            if ($cellemb{$_} eq 'ssi') {
 # --------------------------------------------------------- This is an SSI cell  # --------------------------------------------------------- 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  # ---------------------------------------------------------------- End SSI cell
                           }                            }
                       } @colcont;                        } @colcont;
                                              } 
                   }                    }
                   if ($maxcols<0) {                    if ($maxcols<0) {
                       $r->content_type('text/html');                        $r->content_type('text/html');
Line 132  sub handler { Line 167  sub handler {
                       $r->print('<html><body>Empty page.</body></html>');                        $r->print('<html><body>Empty page.</body></html>');
                   } else {                    } else {
 # ------------------------------------------------------------------ Build page  # ------------------------------------------------------------------ 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 page
                   }                                      }                  
 # ------------------------------------------------------------- End render page  # ------------------------------------------------------------- End render page

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


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