--- rat/lonpage.pm 2000/09/14 09:26:37 1.3
+++ 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,09/06,09/14 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,11 +36,12 @@ sub tracetable {
if (defined($hash{'is_map_'.$rid})) {
if ((defined($hash{'map_start_'.$hash{'src_'.$rid}})) &&
(defined($hash{'map_finish_'.$hash{'src_'.$rid}}))) {
- my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}};
- $sofar=
+ my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}};
+ $sofar=
&tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}},
'&'.$frid.'&');
- $sofar++;
+ $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])) {
@@ -41,9 +50,11 @@ sub tracetable {
$rows[$sofar]=$frid;
}
}
+ }
}
} else {
- $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])) {
@@ -52,6 +63,7 @@ sub tracetable {
$rows[$sofar]=$rid;
}
}
+ }
}
if (defined($hash{'to_'.$rid})) {
@@ -64,6 +76,16 @@ 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
@@ -97,34 +119,47 @@ sub handler {
@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;
- my %ssibody=();
- my %ssibgcolor=();
- my %ssitext=();
- my %ssilink=();
- my %ssivlink=();
- my %ssialink=();
- my %cellemb=();
# --------------------------------------------- Get SSI output, post parameters
for ($i=0;$i<=$#rows;$i++) {
+ if ($rows[$i]) {
my @colcont=split(/\&/,$rows[$i]);
$maxcols=$#colcont>$maxcols?$#colcont:$maxcols;
map {
my $src=$hash{'src_'.$_};
- $src=~/\.\w+$/;
+ $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');
@@ -132,7 +167,29 @@ sub handler {
$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