--- rat/lonpage.pm 2002/02/14 20:45:16 1.31 +++ rat/lonpage.pm 2003/02/03 18:03:53 1.48 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Page Handler # -# $Id: lonpage.pm,v 1.31 2002/02/14 20:45:16 albertel Exp $ +# $Id: lonpage.pm,v 1.48 2003/02/03 18:03:53 harris41 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,7 +33,8 @@ # 10/02,10/10,10/14,10/16,10/18,10/19,10/31,11/6,11/14,11/16, # YEAR=2001 # 08/13/01,08/30,10/1 Gerd Kortemeyer -# 12/16 Scott Harrison +# YEAR=2002 +# 03/19 Gerd Kortemeyer # ### @@ -46,6 +47,7 @@ use Apache::loncommon(); use Apache::lonxml(); use HTML::TokeParser; use GDBM_File; +use Apache::lonsequence; # -------------------------------------------------------------- Module Globals my %hash; @@ -144,18 +146,22 @@ sub handler { if ($ENV{'browser.mathml'}) { $r->content_type('text/xml'); } else { - $r->content_type('text/html'); + $r->content_type('text/html'); } $r->send_http_header; return OK; } - - my $requrl=$r->uri; + + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['forceselect','launch']); + my $number_of_columns = 1; + my $requrl=$r->uri; + my $target = $ENV{'form.grade_target'}; # ----------------------------------------------------------------- Tie db file - if ($ENV{'request.course.fn'}) { + if (($ENV{'request.course.fn'}) && (!$ENV{'form.forceselect'})) { my $fn=$ENV{'request.course.fn'}; if (-e "$fn.db") { - if (tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER,0640)) { + if (tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640)) { # ------------------------------------------------------------------- Hash tied my $firstres=$hash{'map_start_'.$requrl}; my $lastres=$hash{'map_finish_'.$requrl}; @@ -164,14 +170,7 @@ sub handler { @rows=(); - &tracetable(0,$firstres,'&'.$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; - } - } + &tracetable(0,$firstres,'&'); # ------------------------------------------------------------ Add to symb list @@ -239,6 +238,13 @@ sub handler { } } my $output=Apache::lonnet::ssi($src,%posthash); + if ($target eq 'tex') { + $output =~ s/^([^&]+)\\begin{document}//; + $output =~ s/\\end{document}//; + $output = '\parbox{\minipagewidth}{ '.$output.' }'; + #some additional cleanup necessary for LateX (due to limitations of table environment + $output =~ s/(\\vskip\s*\d+mm)\s*(\\\\)+/$1/g; + } my $parser=HTML::TokeParser->new(\$output); my $token; my $thisdir=$src; @@ -329,43 +335,58 @@ sub handler { # ------------------------------------------------------------------ Build page # ---------------------------------------------------------------- Send headers - if ($isxml) { - $r->content_type('text/xml'); - $r->send_http_header; - $r->print($xmlheader); - } else { - $r->content_type('text/html'); - $r->send_http_header; - $r->print(''); - } + unless ($target eq 'tex') { + if ($isxml) { + $r->content_type('text/xml'); + $r->send_http_header; + $r->print($xmlheader); + } else { + $r->content_type('text/html'); + $r->send_http_header; + $r->print(''); + } # ------------------------------------------------------------------------ Head - $r->print("\n\n".$allmeta); - $allscript=~ - s/\/\/ BEGIN LON\-CAPA Internal.+\/\/ END LON\-CAPA Internal\s//gs; - if ($allscript) { - $r->print("\n\n"); - } - $r->print(&Apache::lonxml::registerurl(1)); - $r->print("\n\n"); + $r->print("\n\n".$allmeta); + $allscript=~ + s/\/\/ BEGIN LON\-CAPA Internal.+\/\/ END LON\-CAPA Internal\s//gs; + if ($allscript) { + $r->print("\n\n"); + } + $r->print(&Apache::lonxml::registerurl(1,undef)); + $r->print("\n\n"); # ------------------------------------------------------------------ Start body - if ($isxml) { - $r->print($xmlbody); - } else { - $r->print( - ''); - } + if ($isxml) { + $r->print($xmlbody); + } else { + $r->print(''); + } # ------------------------------------------------------------------ Start form - if ($nforms) { - $r->print('
'); - } + if ($nforms) { + $r->print(''); + } + } else { + $r->print('\documentclass{article} + \newcommand{\keephidden}[1]{} + \usepackage[dvips]{graphicx} + \usepackage{epsfig} + \usepackage{calc} + \usepackage{longtable} + \begin{document}'); + } # ----------------------------------------------------------------- Start table - $r->print(''); + if ($target eq 'tex') { + $r->print('\begin{longtable}INSERTTHEHEADOFLONGTABLE\endfirsthead\endhead '); + if ($number_of_columns le $lcm) {$number_of_columns=$lcm;}; + } else { + $r->print('
'); + } for ($i=0;$i<=$#rows;$i++) { if ($rows[$i]) { - $r->print("\n"); + unless ($target eq 'tex') { + $r->print("\n"); + } my @colcont=split(/\&/,$rows[$i]); my $avespan=$lcm/($#colcont+1); for ($j=0;$j<=$#colcont;$j++) { @@ -373,7 +394,11 @@ sub handler { my $metainfo=''. ''. - ''; + ''. + ''. + ''; if ( ($hash{'src_'.$rid}=~/\.(problem|exam|quiz|assess|survey|form)$/) && (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'}))) { @@ -383,67 +408,103 @@ sub handler { '___'.$resid.'___'. &Apache::lonnet::declutter($hash{'src_'.$rid}); $metainfo.= - ''. ''. ''. - ''. + ''. ''. ''. - ''. + ''. ''. ''; } $metainfo.='

'; - $r->print(''); + unless ($target eq 'tex') { + $r->print(''); + } else { + for (my $incol=1;$incol<=$avespan;$incol++) { + $r->print(' & '); + } + } } - $r->print(''); + unless ($target eq 'tex') { + $r->print(''); + } else { + $r->print('REMOVETHEHEADOFLONGTABLE\\\\'); + } } } - $r->print("\n
print('print(' bgcolor="'. - $ssibgcolor{$rid}.'"'); - } - $r->print('>'.$metainfo.'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}.'"'); + unless ($target eq 'tex') { + if ($ssibgcolor{$rid}) { + $r->print(' bgcolor="'. + $ssibgcolor{$rid}.'"'); + } + $r->print('>'.$metainfo.'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('>'); + } + $r->print($ssibody{$rid}); + unless ($target eq 'tex') { + $r->print(''); } - - $r->print('>'.$ssibody{$rid}.''); - } elsif ($cellemb{$rid} eq 'img') { + if ($ENV{'course.'. + $ENV{'request.course.id'}. + '.pageseparators'} eq 'yes') { + unless($target eq 'tex') { + $r->print('
'); + } else { + $r->print('\hline'); + } + } + } elsif ($cellemb{$rid} eq 'img') { $r->print('>'.$metainfo.''); } elsif ($cellemb{$rid} eq 'emb') { $r->print('>'.$metainfo.''); } - $r->print('
"); + unless ($target eq 'tex') { + $r->print("\n"); + } else { + $r->print('\end{longtable}\strut'); + } # ---------------------------------------------------------------- Submit, etc. if ($nforms) { $r->print( '
'); } - $r->print(''.&Apache::lonxml::xmlend()); + unless ($target eq 'tex') { + $r->print(''.&Apache::lonxml::xmlend()); + } else { + $r->print('\end{document}'.$number_of_columns); + } # -------------------------------------------------------------------- End page } # ------------------------------------------------------------- End render page } else { $r->content_type('text/html'); $r->send_http_header; - $r->print('Page undefined.'); + &Apache::lonsequence::viewmap($r,$requrl); } # ------------------------------------------------------------------ Untie hash unless (untie(%hash)) { @@ -456,8 +517,10 @@ sub handler { } } } - $ENV{'user.error.msg'}="$requrl:bre:0:0:Course not initialized"; - return HTTP_NOT_ACCEPTABLE; + $r->content_type('text/html'); + $r->send_http_header; + &Apache::lonsequence::viewmap($r,$requrl); + return OK; } 1;