--- rat/lonpage.pm 2000/08/31 10:14:08 1.2
+++ rat/lonpage.pm 2000/09/15 20:03:48 1.5
@@ -4,7 +4,7 @@
# (TeX Content Handler
#
# 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;
@@ -16,6 +16,14 @@ use GDBM_File;
# -------------------------------------------------------------- Module Globals
my %hash;
my @rows;
+
+my %ssibody=();
+my %ssibgcolor=();
+my %ssitext=();
+my %ssilink=();
+my %ssivlink=();
+my %ssialink=();
+my %cellemb=();
# ------------------------------------------------------------ Build page table
@@ -28,23 +36,34 @@ sub tracetable {
if (defined($hash{'is_map_'.$rid})) {
if ((defined($hash{'map_start_'.$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}},
- '&'.$hash{'map_finish_'.$hash{'src_'.$rid}}.'&');
- $sofar++;
- if (defined($rows[$sofar])) {
- $rows[$sofar].='&'.$hash{'map_finish_'.$hash{'src_'.$rid}};
- } else {
- $rows[$sofar]=$hash{'map_finish_'.$hash{'src_'.$rid}};
- }
+ '&'.$frid.'&');
+ $sofar++;
+ if ($hash{'src_'.$frid}) {
+ my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$frid});
+ if (($brepriv eq '2') || ($brepriv eq 'F')) {
+ if (defined($rows[$sofar])) {
+ $rows[$sofar].='&'.$frid;
+ } else {
+ $rows[$sofar]=$frid;
+ }
+ }
+ }
}
} else {
- $sofar++;
- if (defined($rows[$sofar])) {
+ $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;
- } else {
+ } else {
$rows[$sofar]=$rid;
- }
+ }
+ }
+ }
}
if (defined($hash{'to_'.$rid})) {
@@ -57,22 +76,33 @@ sub tracetable {
return $further;
}
+sub cell {
+ my ($r,$colspan,$rid)=@_;
+ $r->print('
print('>'.$ssibody{$rid});
+ } elsif ($cellemb{$rid} eq 'img') {
+ $r->print('>');
+ }
+ $r->print(' | ');
+}
# ================================================================ Main Handler
sub handler {
my $r=shift;
-# ----------------------------------------------------------- Set document type
+# ------------------------------------------- Set document type for header only
- if ($ENV{'browser.mathml'}) {
- $r->content_type('text/xml');
- } else {
- $r->content_type('text/html');
- }
- $r->send_http_header;
-
- return OK if $r->header_only;
+ if ($r->header_only) {
+ if ($ENV{'browser.mathml'}) {
+ $r->content_type('text/xml');
+ } else {
+ $r->content_type('text/html');
+ }
+ $r->send_http_header;
+ return OK;
+ }
my $requrl=$r->uri;
# ----------------------------------------------------------------- Tie db file
@@ -86,20 +116,87 @@ sub handler {
if (($firstres) && ($lastres)) {
# ----------------------------------------------------------------- Render page
- $r->print("All is cool.
");
-
@rows=();
+
&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 $j;
+ my $maxcols=-1;
+
+# --------------------------------------------- Get SSI output, post parameters
+
for ($i=0;$i<=$#rows;$i++) {
- $r->print($i.' - '.$rows[$i].'
');
+ 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('Empty page.');
+ } else {
+# ------------------------------------------------------------------ Build page
+ $maxcols++;
+ $r->content_type('text/html');
+ $r->send_http_header;
+ $r->print('');
+
+ $r->print('');
+ for ($i=0;$i<=$#rows;$i++) {
+ if ($rows[$i]) {
+ $r->print("\n");
+ 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('
');
+ }
+ }
+ $r->print("\n
");
+
+ $r->print('');
+# -------------------------------------------------------------------- End page
+ }
# ------------------------------------------------------------- End render page
} else {
- $r->print("Page undefined.
");
+ $r->content_type('text/html');
+ $r->send_http_header;
+ $r->print('Page undefined.');
}
# ------------------------------------------------------------------ Untie hash
unless (untie(%hash)) {