Annotation of rat/lonpage.pm, revision 1.54

1.1       www         1: # The LearningOnline Network with CAPA
                      2: # Page Handler
                      3: #
1.54    ! albertel    4: # $Id: lonpage.pm,v 1.53 2003/09/22 03:02:06 www Exp $
1.29      www         5: #
                      6: # Copyright Michigan State University Board of Trustees
                      7: #
                      8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
                      9: #
                     10: # LON-CAPA is free software; you can redistribute it and/or modify
                     11: # it under the terms of the GNU General Public License as published by
                     12: # the Free Software Foundation; either version 2 of the License, or
                     13: # (at your option) any later version.
                     14: #
                     15: # LON-CAPA is distributed in the hope that it will be useful,
                     16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     18: # GNU General Public License for more details.
                     19: #
                     20: # You should have received a copy of the GNU General Public License
                     21: # along with LON-CAPA; if not, write to the Free Software
                     22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     23: #
                     24: # /home/httpd/html/adm/gpl.txt
                     25: #
                     26: # http://www.lon-capa.org/
                     27: #
1.1       www        28: # (TeX Content Handler
                     29: #
1.30      harris41   30: # YEAR=2000
1.1       www        31: # 05/29/00,05/30 Gerd Kortemeyer)
1.10      www        32: # 08/30,08/31,09/06,09/14,09/15,09/16,09/19,09/20,09/21,09/23,
1.24      www        33: # 10/02,10/10,10/14,10/16,10/18,10/19,10/31,11/6,11/14,11/16,
1.30      harris41   34: # YEAR=2001
1.27      www        35: # 08/13/01,08/30,10/1 Gerd Kortemeyer
1.33      www        36: # YEAR=2002
                     37: # 03/19 Gerd Kortemeyer
1.30      harris41   38: #
                     39: ###
1.1       www        40: 
                     41: package Apache::lonpage;
                     42: 
                     43: use strict;
                     44: use Apache::Constants qw(:common :http);
                     45: use Apache::lonnet();
1.30      harris41   46: use Apache::loncommon();
1.21      www        47: use Apache::lonxml();
1.49      www        48: use Apache::lonmenu;
1.6       www        49: use HTML::TokeParser;
1.1       www        50: use GDBM_File;
1.39      www        51: use Apache::lonsequence;
1.1       www        52: 
1.2       www        53: # -------------------------------------------------------------- Module Globals
                     54: my %hash;
                     55: my @rows;
1.6       www        56: 
                     57: # ------------------------------------------------------------------ Euclid gcd
                     58: 
                     59: sub euclid {
                     60:     my ($e,$f)=@_;
                     61:     my $a; my $b; my $r;
                     62:     if ($e>$f) { $b=$e; $r=$f; } else { $r=$e; $b=$f; }
                     63:     while ($r!=0) {
                     64: 	$a=$b; $b=$r;
                     65:         $r=$a%$b;
                     66:     }
                     67:     return $b;
                     68: }
1.2       www        69: 
                     70: # ------------------------------------------------------------ Build page table
                     71: 
                     72: sub tracetable {
                     73:     my ($sofar,$rid,$beenhere)=@_;
                     74:     my $further=$sofar;
                     75:     unless ($beenhere=~/\&$rid\&/) {
                     76:        $beenhere.=$rid.'&';  
                     77: 
                     78:        if (defined($hash{'is_map_'.$rid})) {
                     79:            if ((defined($hash{'map_start_'.$hash{'src_'.$rid}})) &&
                     80:                (defined($hash{'map_finish_'.$hash{'src_'.$rid}}))) {
1.4       www        81:               my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}};
                     82: 	      $sofar=
1.2       www        83:                 &tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}},
1.3       www        84:                 '&'.$frid.'&');
1.4       www        85:               $sofar++;
                     86:               if ($hash{'src_'.$frid}) {
1.3       www        87:                my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$frid});
                     88:                if (($brepriv eq '2') || ($brepriv eq 'F')) {
                     89:                  if (defined($rows[$sofar])) {
                     90:                    $rows[$sofar].='&'.$frid;
                     91:                  } else {
                     92:                    $rows[$sofar]=$frid;
                     93:                  }
                     94: 	       }
1.4       www        95: 	      }
1.2       www        96: 	   }
                     97:        } else {
1.4       www        98:           $sofar++;
                     99:           if ($hash{'src_'.$rid}) {
1.3       www       100:            my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$rid});
                    101:            if (($brepriv eq '2') || ($brepriv eq 'F')) {
                    102:              if (defined($rows[$sofar])) {
1.2       www       103:                $rows[$sofar].='&'.$rid;
1.3       www       104:              } else {
1.2       www       105:                $rows[$sofar]=$rid;
1.3       www       106:              }
                    107: 	   }
1.4       www       108:           }
1.2       www       109:        }
                    110: 
                    111:        if (defined($hash{'to_'.$rid})) {
1.11      www       112: 	  my $mincond=1;
                    113:           my $next='';
1.30      harris41  114:           foreach (split(/\,/,$hash{'to_'.$rid})) {
1.11      www       115:               my $thiscond=
                    116:       &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$_}});
                    117:               if ($thiscond>=$mincond) {
                    118: 		  if ($next) {
                    119: 		      $next.=','.$_.':'.$thiscond;
                    120:                   } else {
                    121:                       $next=$_.':'.$thiscond;
                    122: 		  }
                    123:                   if ($thiscond>$mincond) { $mincond=$thiscond; }
                    124: 	      }
1.30      harris41  125:           }
                    126:           foreach (split(/\,/,$next)) {
1.11      www       127:               my ($linkid,$condval)=split(/\:/,$_);
                    128:               if ($condval>=$mincond) {
                    129:                 my $now=&tracetable($sofar,$hash{'goesto_'.$linkid},$beenhere);
                    130:                 if ($now>$further) { $further=$now; }
                    131: 	      }
1.30      harris41  132:           }
1.11      www       133: 
1.2       www       134:        }
                    135:     }
                    136:     return $further;
                    137: }
                    138: 
1.1       www       139: # ================================================================ Main Handler
                    140: 
                    141: sub handler {
                    142:   my $r=shift;
                    143: 
1.3       www       144: # ------------------------------------------- Set document type for header only
1.1       www       145: 
1.3       www       146:   if ($r->header_only) {
                    147:        if ($ENV{'browser.mathml'}) {
1.53      www       148:            &Apache::loncommon::content_type($r,'text/xml');
1.3       www       149:        } else {
1.53      www       150:            &Apache::loncommon::content_type($r,'text/html'); 
1.3       www       151:        }
                    152:        $r->send_http_header;
                    153:        return OK;
                    154:    }
1.43      sakharuk  155:   
1.39      www       156:    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                    157:                                           ['forceselect','launch']);
1.43      sakharuk  158:   my $number_of_columns = 1;
1.37      sakharuk  159:   my $requrl=$r->uri;  
                    160:   my $target = $ENV{'form.grade_target'};
1.54    ! albertel  161:   &Apache::lonnet::logthis("Got a target of $target");
        !           162:   if ($target eq 'meta') {
        !           163:       &Apache::loncommon::content_type($r,'text/html');
        !           164:       $r->send_http_header;
        !           165:       return OK;
        !           166:   }
1.1       www       167: # ----------------------------------------------------------------- Tie db file
1.39      www       168:   if (($ENV{'request.course.fn'}) && (!$ENV{'form.forceselect'})) {
1.1       www       169:       my $fn=$ENV{'request.course.fn'};
                    170:       if (-e "$fn.db") {
1.44      albertel  171:           if (tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640)) {
1.1       www       172: # ------------------------------------------------------------------- Hash tied
                    173:               my $firstres=$hash{'map_start_'.$requrl};
                    174:               my $lastres=$hash{'map_finish_'.$requrl};
                    175:               if (($firstres) && ($lastres)) {
                    176: # ----------------------------------------------------------------- Render page
                    177: 
1.3       www       178:                   @rows=();
1.2       www       179: 
1.45      www       180:                   &tracetable(0,$firstres,'&');
1.2       www       181: 
1.9       www       182: # ------------------------------------------------------------ Add to symb list
                    183: 
1.2       www       184:                   my $i;
1.9       www       185:                   my %symbhash=();
                    186:                   for ($i=0;$i<=$#rows;$i++) {
                    187: 		     if ($rows[$i]) {
                    188:                         my @colcont=split(/\&/,$rows[$i]);
1.30      harris41  189:                         foreach (@colcont) {
1.9       www       190:                            $symbhash{$hash{'src_'.$_}}='';
1.30      harris41  191: 		        }
1.9       www       192: 		     }
                    193: 		  }
                    194:                   &Apache::lonnet::symblist($requrl,%symbhash);
                    195: 
                    196: # ------------------------------------------------------------------ Page parms
                    197: 
1.4       www       198:                   my $j;
1.6       www       199:                   my $lcm=1;
                    200:                   my $contents=0;
1.7       www       201:                   my $nforms=0;
1.6       www       202:                   
                    203:                   my %ssibody=();
                    204:                   my %ssibgcolor=();
                    205:                   my %ssitext=();
                    206:                   my %ssilink=();
                    207:                   my %ssivlink=();
                    208:                   my %ssialink=();
1.14      www       209:      
                    210:                   my %metalink=();
                    211: 
1.6       www       212:                   my %cellemb=();
1.3       www       213: 
1.7       www       214:                   my $allscript='';
                    215:                   my $allmeta='';
                    216: 
                    217:                   my $isxml=0;
                    218:                   my $xmlheader='';
                    219:                   my $xmlbody='';
                    220: 
1.3       www       221: # --------------------------------------------- Get SSI output, post parameters
                    222: 
1.2       www       223:                   for ($i=0;$i<=$#rows;$i++) {
1.4       www       224: 		     if ($rows[$i]) {
1.6       www       225: 		      $contents++;
1.3       www       226:                       my @colcont=split(/\&/,$rows[$i]);
1.6       www       227:                       $lcm*=($#colcont+1)/euclid($lcm,($#colcont+1));
1.30      harris41  228:                       foreach (@colcont) {
1.3       www       229:                           my $src=$hash{'src_'.$_};
1.5       www       230:                           $src=~/\.(\w+)$/;
1.14      www       231:                           $metalink{$_}=$src.'.meta';
1.30      harris41  232:                           $cellemb{$_}=Apache::loncommon::fileembstyle($1);
1.3       www       233:                           if ($cellemb{$_} eq 'ssi') {
                    234: # --------------------------------------------------------- This is an SSI cell
1.5       www       235: 			      my $prefix=$_.'_';
                    236:                               my %posthash=('request.prefix' => $prefix);
1.8       www       237:                               if (($ENV{'form.'.$prefix.'submit'}) 
1.7       www       238:                                || ($ENV{'form.all_submit'})) {
1.30      harris41  239:                                foreach (keys %ENV) {
1.5       www       240: 				  if ($_=~/^form.$prefix/) {
                    241: 				      my $name=$_;
                    242:                                       $name=~s/^form.$prefix//;
                    243:                                       $posthash{$name}=$ENV{$_};
                    244:                                   }
1.30      harris41  245:                                }
1.7       www       246: 			      }
1.5       www       247:                               my $output=Apache::lonnet::ssi($src,%posthash);
1.50      www       248: 			      $output=~
                    249: 	    s/\/\/ BEGIN LON\-CAPA Internal.+\/\/ END LON\-CAPA Internal\s//gs;
1.46      sakharuk  250:                               if ($target eq 'tex') {
                    251: 				  $output =~ s/^([^&]+)\\begin{document}//;
                    252: 				  $output =~ s/\\end{document}//;
                    253: 				  $output = '\parbox{\minipagewidth}{ '.$output.' }';
                    254:                                   #some additional cleanup necessary for LateX (due to limitations of table environment 
                    255: 				  $output =~ s/(\\vskip\s*\d+mm)\s*(\\\\)+/$1/g;
                    256: 			      }
1.6       www       257:                               my $parser=HTML::TokeParser->new(\$output);
                    258:                               my $token;
1.12      www       259:                               my $thisdir=$src;
1.6       www       260:                               my $bodydef=0;
1.7       www       261:                               my $thisxml=0;
1.12      www       262:                               my @rlinks=();
1.7       www       263:                               if ($output=~/\?xml/) {
                    264:                                  $isxml=1;
                    265:                                  $thisxml=1;
                    266:                                  $output=~
                    267:          /((?:\<(?:\?xml|\!DOC|html)[^\>]*(?:\>|\>\]\>)\s*)+)\<body[^\>]*\>/si;
                    268:                                  $xmlheader=$1;
                    269: 			      }
1.12      www       270:                               while ($token=$parser->get_token) {
                    271: 				if ($token->[0] eq 'S') {
                    272:                                   if ($token->[1] eq 'a') {
                    273: 				      if ($token->[2]->{'href'}) {
                    274:                                          $rlinks[$#rlinks+1]=
                    275: 					     $token->[2]->{'href'};
                    276: 				      }
                    277: 				  } elsif ($token->[1] eq 'img') {
                    278:                                          $rlinks[$#rlinks+1]=
                    279: 					     $token->[2]->{'src'};
                    280: 				  } elsif ($token->[1] eq 'embed') {
                    281:                                          $rlinks[$#rlinks+1]=
                    282: 					     $token->[2]->{'src'};
                    283: 				  } elsif ($token->[1] eq 'base') {
                    284: 				      $thisdir=$token->[2]->{'href'};
                    285: 				  } elsif ($token->[1] eq 'body') {
1.7       www       286: 				      $bodydef=1;
                    287:                                       $ssibgcolor{$_}=$token->[2]->{'bgcolor'};
                    288:                                       $ssitext{$_}=$token->[2]->{'text'};
                    289:                                       $ssilink{$_}=$token->[2]->{'link'};
                    290:                                       $ssivlink{$_}=$token->[2]->{'vlink'};
                    291:                                       $ssialink{$_}=$token->[2]->{'alink'};
                    292:                                       if ($thisxml) {
                    293: 					  $xmlbody=$token->[4];
                    294:                                       }
1.12      www       295:                                   } elsif ($token->[1] eq 'meta') {
1.28      albertel  296: 				    if ($token->[4] !~ m:/>$:) {
1.7       www       297: 				      $allmeta.="\n".$token->[4].'</meta>';
1.28      albertel  298: 				    } else {
                    299: 				      $allmeta.="\n".$token->[4];
                    300: 				    }
1.12      www       301:                                   } elsif (($token->[1] eq 'script') &&
                    302:                                            ($bodydef==0)) {
1.7       www       303: 				      $allscript.="\n\n"
                    304:                                                 .$parser->get_text('/script');
1.6       www       305:                                   }
1.12      www       306: 			        }
                    307: 			      }
1.6       www       308:                               if ($output=~/\<body[^\>]*\>(.*)/si) {
                    309:                                  $output=$1; 
                    310:                               }
                    311:                               $output=~s/\<\/body\>.*//si;
1.7       www       312:                               if ($output=~/\<form/si) {
                    313: 				  $nforms++;
                    314:                                   $output=~s/\<form[^\>]*\>//gsi;
                    315:                                   $output=~s/\<\/form[^\>]*\>//gsi;
1.17      www       316:                                   $output=~
1.18      www       317: 				      s/\<((?:input|select|button|textarea)[^\>]+)name\s*\=\s*[\'\"]*([\w\.\:]+)[\'\"]*([^\>]*)\>/\<$1 name="$prefix$2" $3\>/gsi;
1.7       www       318:                               }
1.12      www       319:                               $thisdir=~s/\/[^\/]*$//;
1.30      harris41  320: 			      foreach (@rlinks) {
1.12      www       321: 				  unless (($_=~/^http:\/\//i) ||
1.31      albertel  322: 					  ($_=~/^\//) ||
                    323: 					  ($_=~/^javascript:/i) ||
                    324: 					  ($_=~/^mailto:/i) ||
                    325: 					  ($_=~/^\#/)) {
1.12      www       326: 				      my $newlocation=
                    327: 				    &Apache::lonnet::hreflocation($thisdir,$_);
                    328:                      $output=~s/(\"|\'|\=\s*)$_(\"|\'|\s|\>)/$1$newlocation$2/;
                    329: 				  }
1.30      harris41  330: 			      }
1.24      www       331: # -------------------------------------------------- Deal with Applet codebases
                    332:   $output=~s/(\<applet[^\>]+)(codebase\=[^\S\>]+)*([^\>]*)\>/$1.($2?$2:' codebase="'.$thisdir.'"').$3.'>'/gei;
1.5       www       333: 			      $ssibody{$_}=$output;
1.3       www       334: # ---------------------------------------------------------------- End SSI cell
                    335:                           }
1.30      harris41  336:                       }
1.4       www       337:                      } 
1.2       www       338:                   }
1.6       www       339:                   unless ($contents) {
1.53      www       340:                       &Apache::loncommon::content_type($r,'text/html');
1.3       www       341:                       $r->send_http_header;
1.53      www       342:                       $r->print('<html><body>'.&mt('Empty page').'.</body></html>');
1.3       www       343:                   } else {
                    344: # ------------------------------------------------------------------ Build page
1.7       www       345: 
                    346: # ---------------------------------------------------------------- Send headers
1.37      sakharuk  347: 		      unless ($target eq 'tex') {
                    348: 			  if ($isxml) {
1.53      www       349: 			      &Apache::loncommon::content_type($r,'text/xml');
1.37      sakharuk  350: 			      $r->send_http_header;
                    351: 			      $r->print($xmlheader);
                    352: 			  } else {
1.53      www       353: 			      &Apache::loncommon::content_type($r,'text/html');
1.37      sakharuk  354: 			      $r->send_http_header;
                    355: 			      $r->print('<html>');
                    356: 			  }
1.7       www       357: # ------------------------------------------------------------------------ Head
1.37      sakharuk  358: 			  $r->print("\n<head>\n".$allmeta);
                    359: 			  if ($allscript) {
                    360: 			      $r->print("\n<script language='JavaScript'>\n".
                    361: 					$allscript."\n</script>\n");
                    362: 			  }
1.49      www       363: 			  $r->print(&Apache::lonmenu::registerurl(1,undef));
1.37      sakharuk  364: 			  $r->print("\n</head>\n");
1.7       www       365: # ------------------------------------------------------------------ Start body
1.37      sakharuk  366: 			  if ($isxml) {
                    367: 			      $r->print($xmlbody);
                    368: 			  } else {
1.51      www       369: 			      $r->print(
                    370:                '<body bgcolor="#FFFFFF" onLoad="'.&Apache::lonmenu::loadevents.
                    371:                '" onUnload="'.&Apache::lonmenu::unloadevents.'">'.
                    372:                               &Apache::lonmenu::menubuttons(undef,$target,1)
                    373: 					);
1.37      sakharuk  374: 			  }
1.7       www       375: # ------------------------------------------------------------------ Start form
1.37      sakharuk  376: 			  if ($nforms) {
                    377: 			      $r->print('<form method="post" action="'.
                    378: 					$requrl.'">');
1.40      sakharuk  379: 			  }
                    380: 		      } else {
1.47      sakharuk  381: 			  $r->print('\documentclass{article}
1.40      sakharuk  382:                                  \newcommand{\keephidden}[1]{}           
                    383:                                  \usepackage[dvips]{graphicx}
                    384:                                  \usepackage{epsfig}
                    385:                                  \usepackage{calc}
1.42      sakharuk  386:                                  \usepackage{longtable}
1.40      sakharuk  387:                                  \begin{document}');
                    388: 		      }
1.7       www       389: # ----------------------------------------------------------------- Start table
1.40      sakharuk  390: 		      if ($target eq 'tex') {
1.42      sakharuk  391: 			  $r->print('\begin{longtable}INSERTTHEHEADOFLONGTABLE\endfirsthead\endhead ');
1.43      sakharuk  392: 			  if ($number_of_columns le $lcm) {$number_of_columns=$lcm;};
1.40      sakharuk  393: 		      } else {
1.37      sakharuk  394: 			  $r->print('<table cols="'.$lcm.'" border="0">');
                    395: 		      }
1.5       www       396:                       for ($i=0;$i<=$#rows;$i++) {
                    397: 			if ($rows[$i]) {
1.37      sakharuk  398: 			    unless ($target eq 'tex') {
                    399: 				$r->print("\n<tr>");
                    400: 			    }
1.4       www       401:                           my @colcont=split(/\&/,$rows[$i]);
1.6       www       402:                           my $avespan=$lcm/($#colcont+1);
                    403:                           for ($j=0;$j<=$#colcont;$j++) {
                    404:                               my $rid=$colcont[$j];
1.23      www       405:                               my $metainfo='<a href="'.
                    406:                                     $metalink{$rid}.'" target="LONcatInfo">'.
                    407:                           '<img src="/adm/lonMisc/cat_button.gif" border=0>'.
1.34      www       408: 			  '</img></a><a href="/adm/evaluate?postdata='.
1.35      www       409:       &Apache::lonnet::escape(&Apache::lonnet::declutter($hash{'src_'.$rid}))
                    410:       .'" target="LONcatInfo">'.
1.33      www       411:                           '<img src="/adm/lonMisc/eval_button.gif" border=0>'.
                    412:                           '</img></a>';
1.27      www       413:                               if (
                    414:  ($hash{'src_'.$rid}=~/\.(problem|exam|quiz|assess|survey|form)$/) &&
                    415:  (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'}))) {
                    416: 				  my ($mapid,$resid)=split(/\./,$rid);
                    417:                                  my $symb=
                    418:                 &Apache::lonnet::declutter($hash{'map_id_'.$mapid}).
                    419:                 '___'.$resid.'___'.
                    420: 		&Apache::lonnet::declutter($hash{'src_'.$rid});
                    421:                                  $metainfo.=
1.36      www       422:                   '<a href="/adm/grades?symb='.&Apache::lonnet::escape($symb).
1.52      ng        423: #                 '&command=submission" target="LONcatInfo">'.
                    424:                   '&command=submission">'.
1.27      www       425:                           '<img src="/adm/lonMisc/subm_button.gif" border=0>'.
                    426: 			  '</img></a>'.
1.36      www       427:                   '<a href="/adm/grades?symb='.&Apache::lonnet::escape($symb).
1.52      ng        428: #                  '&command=gradingmenu" target="LONcatInfo">'.
                    429:                   '&command=gradingmenu">'.
1.27      www       430:                           '<img src="/adm/lonMisc/pgrd_button.gif" border=0>'.
                    431: 			  '</img></a>'.
1.36      www       432:                   '<a href="/adm/parmset?symb='.&Apache::lonnet::escape($symb).
1.52      ng        433: #                          '" target="LONcatInfo">'.
                    434:                           '" >'.
1.27      www       435:                           '<img src="/adm/lonMisc/pprm_button.gif" border=0>'.
                    436: 			      '</img></a>';
                    437:                               }
                    438:                               $metainfo.='<br></br>';
1.37      sakharuk  439: 			    unless ($target eq 'tex') {
                    440: 				$r->print('<td colspan="'.$avespan.'"');
                    441: 			    }
1.6       www       442:                               if ($cellemb{$rid} eq 'ssi') {
1.37      sakharuk  443: 				  unless ($target eq 'tex') {
                    444: 				      if ($ssibgcolor{$rid}) {
                    445: 					  $r->print(' bgcolor="'.
                    446: 						    $ssibgcolor{$rid}.'"');
                    447: 				      }
                    448: 				      $r->print('>'.$metainfo.'<font');
                    449: 		    
                    450: 				      if ($ssitext{$rid}) {
                    451: 					  $r->print(' text="'.$ssitext{$rid}.'"');
                    452: 				      }
                    453: 				      if ($ssilink{$rid}) {
                    454: 					  $r->print(' link="'.$ssilink{$rid}.'"');
                    455: 				      }
                    456: 				      if ($ssitext{$rid}) {
                    457: 					  $r->print(' vlink="'.$ssivlink{$rid}.'"');
                    458: 				      }
                    459: 				      if ($ssialink{$rid}) {
                    460: 					  $r->print(' alink="'.$ssialink{$rid}.'"');
                    461: 				      }             
                    462: 				      $r->print('>');
                    463: 				  }
                    464:                                   $r->print($ssibody{$rid});	
                    465: 				  unless ($target eq 'tex') {
                    466: 				      $r->print('</font>');
1.41      www       467:                                   }
                    468:                                   if ($ENV{'course.'.
                    469:                                       $ENV{'request.course.id'}.
                    470:                                       '.pageseparators'} eq 'yes') {
                    471:                                       unless($target eq 'tex') {
                    472:                                           $r->print('<hr />');
                    473:                                       } else {
                    474:                                           $r->print('\hline');
                    475:                                       }
1.37      sakharuk  476: 				  }
                    477: 			      } elsif ($cellemb{$rid} eq 'img') {
1.14      www       478:                                   $r->print('>'.$metainfo.'<img src="'.
1.7       www       479:                                     $hash{'src_'.$rid}.'"></img>');
1.13      www       480: 			      } elsif ($cellemb{$rid} eq 'emb') {
1.14      www       481:                                   $r->print('>'.$metainfo.'<embed src="'.
1.13      www       482:                                     $hash{'src_'.$rid}.'"></embed>');
                    483:                               }
1.37      sakharuk  484: 			      unless ($target eq 'tex') {
                    485: 				  $r->print('</td>');
1.40      sakharuk  486: 			      } else {
1.43      sakharuk  487:                                   for (my $incol=1;$incol<=$avespan;$incol++) {
                    488: 				      $r->print(' & ');
                    489: 				  }
1.37      sakharuk  490: 			      }
1.4       www       491:                           }
1.37      sakharuk  492: 			      unless ($target eq 'tex') {
                    493: 				  $r->print('</tr>');
1.40      sakharuk  494: 			      } else {
1.42      sakharuk  495: 				  $r->print('REMOVETHEHEADOFLONGTABLE\\\\');
1.37      sakharuk  496: 			      }
1.5       www       497: 		        }
1.4       www       498:                       }
1.37      sakharuk  499: 		      unless ($target eq 'tex') {
                    500: 			  $r->print("\n</table>");
1.40      sakharuk  501: 		      } else {
1.47      sakharuk  502: 			  $r->print('\end{longtable}\strut');
1.37      sakharuk  503: 		      }
1.7       www       504: # ---------------------------------------------------------------- Submit, etc.
                    505:                       if ($nforms) {
                    506:                           $r->print(
                    507: 	                  '<input name="all_submit" value="Submit All" type="'.
                    508: 			  (($nforms>1)?'submit':'hidden').'"></input></form>');
                    509:                       }
1.40      sakharuk  510: 		      unless ($target eq 'tex') {
                    511: 			  $r->print('</body>'.&Apache::lonxml::xmlend());
                    512: 		      } else {
                    513: 			  $r->print('\end{document}'.$number_of_columns);
                    514: 		      }
1.3       www       515: # -------------------------------------------------------------------- End page
                    516:                   }                  
1.1       www       517: # ------------------------------------------------------------- End render page
                    518:               } else {
1.3       www       519:                   $r->content_type('text/html');
                    520:                   $r->send_http_header;
1.39      www       521:                   &Apache::lonsequence::viewmap($r,$requrl);
1.1       www       522:               }
                    523: # ------------------------------------------------------------------ Untie hash
                    524:               unless (untie(%hash)) {
                    525:                    &Apache::lonnet::logthis("<font color=blue>WARNING: ".
                    526:                        "Could not untie coursemap $fn (browse).</font>"); 
                    527:               }
                    528: # -------------------------------------------------------------------- All done
                    529: 	      return OK;
                    530: # ----------------------------------------------- Errors, hash could no be tied
                    531:           }
                    532:       } 
                    533:   }
1.39      www       534:   $r->content_type('text/html');
                    535:   $r->send_http_header;
                    536:   &Apache::lonsequence::viewmap($r,$requrl);
                    537:   return OK; 
1.1       www       538: }
                    539: 
                    540: 1;
                    541: __END__
                    542: 
1.30      harris41  543: =head1 NAME
                    544: 
                    545: Apache::lonpage - Page Handler
                    546: 
                    547: =head1 SYNOPSIS
                    548: 
                    549: Invoked by /etc/httpd/conf/srm.conf:
                    550: 
                    551:  <LocationMatch "^/res/.*\.page$>
                    552:  SetHandler perl-script
                    553:  PerlHandler Apache::lonpage
                    554:  </LocationMatch>
                    555: 
                    556: =head1 INTRODUCTION
                    557: 
                    558: This module renders a .page resource.
                    559: 
                    560: This is part of the LearningOnline Network with CAPA project
                    561: described at http://www.lon-capa.org.
                    562: 
                    563: =head1 HANDLER SUBROUTINE
                    564: 
                    565: This routine is called by Apache and mod_perl.
                    566: 
                    567: =over 4
                    568: 
                    569: =item *
                    570: 
                    571: set document type for header only
                    572: 
                    573: =item *
                    574: 
                    575: tie db file
                    576: 
                    577: =item *
                    578: 
                    579: render page
                    580: 
                    581: =item *
                    582: 
                    583: add to symb list
                    584: 
                    585: =item *
                    586: 
                    587: page parms
                    588: 
                    589: =item *
                    590: 
                    591: Get SSI output, post parameters
                    592: 
                    593: =item *
                    594: 
                    595: SSI cell rendering
                    596: 
                    597: =item *
                    598: 
                    599: Deal with Applet codebases
                    600: 
                    601: =item *
                    602: 
                    603: Build page
                    604: 
                    605: =item *
                    606: 
                    607: send headers
                    608: 
                    609: =item *
                    610: 
                    611: start body
                    612: 
                    613: =item *
                    614: 
                    615: start form
                    616: 
                    617: =item *
                    618: 
                    619: start table
                    620: 
                    621: =item *
                    622: 
                    623: submit element, etc, render page, untie hash
                    624: 
                    625: =back
                    626: 
                    627: =head1 OTHER SUBROUTINES
                    628: 
                    629: =over 4
                    630: 
                    631: =item *
                    632: 
                    633: euclid() : Euclid's method for determining the greatest common denominator.
                    634: 
                    635: =item *
                    636: 
                    637: tracetable() : Build page table.
1.1       www       638: 
1.30      harris41  639: =back
1.1       www       640: 
1.30      harris41  641: =cut
1.1       www       642: 
                    643: 
                    644: 
                    645: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.