Diff for /rat/lonpage.pm between versions 1.6 and 1.7

version 1.6, 2000/09/16 17:42:01 version 1.7, 2000/09/22 10:28:41
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,09/15,09/16 Gerd Kortemeyer  # 08/30,08/31,09/06,09/14,09/15,09/16,09/19,09/20,09/21 Gerd Kortemeyer
   
 package Apache::lonpage;  package Apache::lonpage;
   
Line 104  sub handler { Line 104  sub handler {
   if ($ENV{'request.course.fn'}) {    if ($ENV{'request.course.fn'}) {
       my $fn=$ENV{'request.course.fn'};        my $fn=$ENV{'request.course.fn'};
       if (-e "$fn.db") {        if (-e "$fn.db") {
           if (tie(%hash,'GDBM_File',"$fn.db",&GDBM_WRCREAT,0640)) {            if (tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER,0640)) {
 # ------------------------------------------------------------------- Hash tied  # ------------------------------------------------------------------- Hash tied
               my $firstres=$hash{'map_start_'.$requrl};                my $firstres=$hash{'map_start_'.$requrl};
               my $lastres=$hash{'map_finish_'.$requrl};                my $lastres=$hash{'map_finish_'.$requrl};
Line 126  sub handler { Line 126  sub handler {
                   my $j;                    my $j;
                   my $lcm=1;                    my $lcm=1;
                   my $contents=0;                    my $contents=0;
                     my $nforms=0;
                                       
                   my %ssibody=();                    my %ssibody=();
                   my %ssibgcolor=();                    my %ssibgcolor=();
Line 135  sub handler { Line 136  sub handler {
                   my %ssialink=();                    my %ssialink=();
                   my %cellemb=();                    my %cellemb=();
   
                     my $allscript='';
                     my $allmeta='';
   
                     my $isxml=0;
                     my $xmlheader='';
                     my $xmlbody='';
   
 # --------------------------------------------- Get SSI output, post parameters  # --------------------------------------------- Get SSI output, post parameters
   
                   for ($i=0;$i<=$#rows;$i++) {                    for ($i=0;$i<=$#rows;$i++) {
Line 150  sub handler { Line 158  sub handler {
 # --------------------------------------------------------- This is an SSI cell  # --------------------------------------------------------- This is an SSI cell
       my $prefix=$_.'_';        my $prefix=$_.'_';
                               my %posthash=('request.prefix' => $prefix);                                my %posthash=('request.prefix' => $prefix);
                               map {                                if (($ENV{'$form.'.$prefix.'submit'}) 
                                  || ($ENV{'form.all_submit'})) {
                                  map {
   if ($_=~/^form.$prefix/) {    if ($_=~/^form.$prefix/) {
       my $name=$_;        my $name=$_;
                                       $name=~s/^form.$prefix//;                                        $name=~s/^form.$prefix//;
                                       $posthash{$name}=$ENV{$_};                                        $posthash{$name}=$ENV{$_};
                                   }                                    }
                               } keys %ENV;                                 } keys %ENV;
         }
                               my $output=Apache::lonnet::ssi($src,%posthash);                                my $output=Apache::lonnet::ssi($src,%posthash);
                               my $parser=HTML::TokeParser->new(\$output);                                my $parser=HTML::TokeParser->new(\$output);
                               my $token;                                my $token;
                               my $bodydef=0;                                my $bodydef=0;
                                 my $thisxml=0;
                                 if ($output=~/\?xml/) {
                                    $isxml=1;
                                    $thisxml=1;
                                    $output=~
            /((?:\<(?:\?xml|\!DOC|html)[^\>]*(?:\>|\>\]\>)\s*)+)\<body[^\>]*\>/si;
                                    $xmlheader=$1;
         }
                               while (($bodydef==0) &&                                while (($bodydef==0) &&
                                      ($token=$parser->get_token)) {                                       ($token=$parser->get_token)) {
   if ($token->[1] eq 'body') {    if ($token->[1] eq 'body') {
                                      $bodydef=1        $bodydef=1;
                                         $ssibgcolor{$_}=$token->[2]->{'bgcolor'};
                                         $ssitext{$_}=$token->[2]->{'text'};
                                         $ssilink{$_}=$token->[2]->{'link'};
                                         $ssivlink{$_}=$token->[2]->{'vlink'};
                                         $ssialink{$_}=$token->[2]->{'alink'};
                                         if ($thisxml) {
     $xmlbody=$token->[4];
                                         }
                                   }                                    }
                                   if ($token->[1] eq 'meta') {                                    if ($token->[1] eq 'meta') {
         $allmeta.="\n".$token->[4].'</meta>';
                                   }                                    }
                                   if ($token->[1] eq 'script') {                                    if ($token->[1] eq 'script') {
                                   }        $allscript.="\n\n"
                                   if ($token->[1] eq 'basefont') {                                                  .$parser->get_text('/script');
                                   }                                    }
                               }                                }
                               if ($output=~/\<body[^\>]*\>(.*)/si) {                                if ($output=~/\<body[^\>]*\>(.*)/si) {
                                  $output=$1;                                    $output=$1; 
                               }                                }
                               $output=~s/\<\/body\>.*//si;                                $output=~s/\<\/body\>.*//si;
                                 if ($output=~/\<form/si) {
     $nforms++;
                                     $output=~s/\<form[^\>]*\>//gsi;
                                     $output=~s/\<\/form[^\>]*\>//gsi;
                                 }
       $ssibody{$_}=$output;        $ssibody{$_}=$output;
   
 # ---------------------------------------------------------------- End SSI cell  # ---------------------------------------------------------------- End SSI cell
Line 190  sub handler { Line 223  sub handler {
                       $r->print('<html><body>Empty page.</body></html>');                        $r->print('<html><body>Empty page.</body></html>');
                   } else {                    } else {
 # ------------------------------------------------------------------ Build page  # ------------------------------------------------------------------ Build page
                       $r->content_type('text/html');  
                       $r->send_http_header;  # ---------------------------------------------------------------- Send headers
                       $r->print('<html><body>');                        if ($isxml) {
      $r->content_type('text/xml');
                       $r->print('<table cols="'.$lcm.'" border="1">');                            $r->send_http_header;
                             $r->print($xmlheader);
         } else {
                             $r->content_type('text/html');
                             $r->send_http_header;
                             $r->print('<html>');
         }
   # ------------------------------------------------------------------------ Head
                         $r->print("\n<head>\n".$allmeta);
                         if ($allscript) {
     $r->print("\n<script>\n".$allscript."\n</script>\n");
                         }
                         $r->print("\n</head>\n");
   # ------------------------------------------------------------------ Start body
                         if ($isxml) {
                             $r->print($xmlbody);
                         } else {
     $r->print('<body bgcolor="#FFFFFF">');
                         }
   
   # ------------------------------------------------------------------ Start form
                         if ($nforms) {
     $r->print('<form method="post" action="'.
       $requrl.'">');
                         }
   # ----------------------------------------------------------------- Start table
                         $r->print('<table cols="'.$lcm.'" border="0">');
                       for ($i=0;$i<=$#rows;$i++) {                        for ($i=0;$i<=$#rows;$i++) {
  if ($rows[$i]) {   if ($rows[$i]) {
                           $r->print("\n<tr>");                            $r->print("\n<tr>");
Line 204  sub handler { Line 263  sub handler {
                               my $rid=$colcont[$j];                                my $rid=$colcont[$j];
                               $r->print('<td colspan="'.$avespan.'"');                                $r->print('<td colspan="'.$avespan.'"');
                               if ($cellemb{$rid} eq 'ssi') {                                if ($cellemb{$rid} eq 'ssi') {
                                  $r->print('>'.$ssibody{$rid});    if ($ssibgcolor{$rid}) {
                                        $r->print(' bgcolor="'.
                                                  $ssibgcolor{$rid}.'"');
                                     }
                                     $r->print('><font');
                                     if ($ssitext{$rid}) {
        $r->print(' text="'.$ssitext{$rid}.'"');
                                     }
                                     if ($ssilink{$rid}) {
        $r->print(' link="'.$ssilink{$rid}.'"');
                                     }
                                     if ($ssitext{$rid}) {
        $r->print(' vlink="'.$ssivlink{$rid}.'"');
                                     }
                                     if ($ssialink{$rid}) {
        $r->print(' alink="'.$ssialink{$rid}.'"');
                                     }
                               
                                     $r->print('>'.$ssibody{$rid}.'</font>');
                               } elsif ($cellemb{$rid} eq 'img') {                                } elsif ($cellemb{$rid} eq 'img') {
                                  $r->print('><img src="'.                                    $r->print('><img src="'.
                                     $hash{'src_'.$rid}.'">');                                      $hash{'src_'.$rid}.'"></img>');
       }        }
                               $r->print('</td>');                                $r->print('</td>');
                           }                            }
Line 215  sub handler { Line 292  sub handler {
         }          }
                       }                        }
                       $r->print("\n</table>");                        $r->print("\n</table>");
   # ---------------------------------------------------------------- Submit, etc.
                         if ($nforms) {
                             $r->print(
                     '<input name="all_submit" value="Submit All" type="'.
     (($nforms>1)?'submit':'hidden').'"></input></form>');
                         }
                       $r->print('</body></html>');                        $r->print('</body></html>');
 # -------------------------------------------------------------------- End page  # -------------------------------------------------------------------- End page
                   }                                      }                  

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


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