--- rat/lonpage.pm 2004/08/29 18:34:36 1.57 +++ rat/lonpage.pm 2005/06/29 19:02:14 1.71 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Page Handler # -# $Id: lonpage.pm,v 1.57 2004/08/29 18:34:36 raeburn Exp $ +# $Id: lonpage.pm,v 1.71 2005/06/29 19:02:14 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -25,24 +25,13 @@ # # http://www.lon-capa.org/ # -# (TeX Content Handler -# -# YEAR=2000 -# 05/29/00,05/30 Gerd Kortemeyer) -# 08/30,08/31,09/06,09/14,09/15,09/16,09/19,09/20,09/21,09/23, -# 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 -# YEAR=2002 -# 03/19 Gerd Kortemeyer -# ### package Apache::lonpage; use strict; use Apache::Constants qw(:common :http); -use Apache::lonnet(); +use Apache::lonnet; use Apache::loncommon(); use Apache::lonxml(); use Apache::lonlocal; @@ -74,7 +63,7 @@ sub tracetable { my ($sofar,$rid,$beenhere)=@_; my $further=$sofar; my $randomout=0; - if ($ENV{'request.role'} =~ /^st/) { + unless ($env{'request.role.adv'}) { $randomout = $hash{'randomout_'.$rid}; } unless ($beenhere=~/\&$rid\&/) { @@ -149,7 +138,7 @@ sub handler { # ------------------------------------------- Set document type for header only if ($r->header_only) { - if ($ENV{'browser.mathml'}) { + if ($env{'browser.mathml'}) { &Apache::loncommon::content_type($r,'text/xml'); } else { &Apache::loncommon::content_type($r,'text/html'); @@ -162,7 +151,7 @@ sub handler { ['forceselect','launch']); my $number_of_columns = 1; my $requrl=$r->uri; - my $target = $ENV{'form.grade_target'}; + my $target = $env{'form.grade_target'}; # &Apache::lonnet::logthis("Got a target of $target"); if ($target eq 'meta') { &Apache::loncommon::content_type($r,'text/html'); @@ -170,8 +159,8 @@ sub handler { return OK; } # ----------------------------------------------------------------- Tie db file - if (($ENV{'request.course.fn'}) && (!$ENV{'form.forceselect'})) { - my $fn=$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)) { # ------------------------------------------------------------------- Hash tied @@ -192,7 +181,7 @@ sub handler { if ($rows[$i]) { my @colcont=split(/\&/,$rows[$i]); foreach (@colcont) { - $symbhash{$hash{'src_'.$_}}=''; + $symbhash{$hash{'src_'.$_}}=['page','notasymb']; } } } @@ -232,33 +221,41 @@ sub handler { $lcm*=($#colcont+1)/euclid($lcm,($#colcont+1)); foreach (@colcont) { my $src=$hash{'src_'.$_}; - $src=~/\.(\w+)$/; + my ($extension)=($src=~/\.(\w+)$/); + if ($hash{'encrypted_'.$_}) { + $src=&Apache::lonenc::encrypted($src); + } $metalink{$_}=$src.'.meta'; - $cellemb{$_}=Apache::loncommon::fileembstyle($1); + $cellemb{$_}= + &Apache::loncommon::fileembstyle($extension); if ($cellemb{$_} eq 'ssi') { # --------------------------------------------------------- This is an SSI cell + my ($mapid,$resid)=split(/\./,$_); + my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$src); + my $prefix=$_.'_'; - my %posthash=('request.prefix' => $prefix); - if ($ENV{'form.grade_target'} eq 'tex') { - $posthash{'grade_target'}=$ENV{'form.grade_target'}; - $posthash{'textwidth'}=$ENV{'form.textwidth'}; - $posthash{'problem_split'}=$ENV{'form.problem_split'}; - $posthash{'latex_type'}=$ENV{'form.latex_type'}; - $posthash{'rndseed'}=$ENV{'form.rndseed'}; + my %posthash=('request.prefix' => $prefix, + 'LONCAPA_INTERNAL_no_discussion' => 'true', + 'symb' => $symb); + if ($env{'form.grade_target'} eq 'tex') { + $posthash{'grade_target'}=$env{'form.grade_target'}; + $posthash{'textwidth'}=$env{'form.textwidth'}; + $posthash{'problem_split'}=$env{'form.problem_split'}; + $posthash{'latex_type'}=$env{'form.latex_type'}; + $posthash{'rndseed'}=$env{'form.rndseed'}; } - if (($ENV{'form.'.$prefix.'submit'}) - || ($ENV{'form.all_submit'})) { - foreach (keys %ENV) { + if (($env{'form.'.$prefix.'submit'}) + || ($env{'form.all_submit'})) { + foreach (keys %env) { if ($_=~/^form.$prefix/) { my $name=$_; $name=~s/^form.$prefix//; - $posthash{$name}=$ENV{$_}; + $posthash{$name}=$env{$_}; } } } my $output=Apache::lonnet::ssi($src,%posthash); - $output=~ - s/\/\/ BEGIN LON\-CAPA Internal.+\/\/ END LON\-CAPA Internal\s//gs; + $output=~s|//(\s*)?\s||gs; if ($target eq 'tex') { $output =~ s/^([^&]+)\\begin{document}//; $output =~ s/\\end{document}//; @@ -351,7 +348,17 @@ sub handler { unless ($contents) { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - $r->print(''.&mt('Empty page').'.'); + $r->print(''."\n". + ''."\n". + &Apache::lonmenu::registerurl(1,undef)."\n". + ''."\n". + ''. + &Apache::lonmenu::menubuttons(undef,$target,1) + ); + $r->print(&mt('This page is either empty or it only contains resources that are currently hidden').'. '); + $r->print('

'.&mt('Please use the LON-CAPA navigation arrows to move to another item in the course').'.'); } else { # ------------------------------------------------------------------ Build page @@ -387,7 +394,8 @@ sub handler { # ------------------------------------------------------------------ Start form if ($nforms) { $r->print('
'); + &Apache::lonenc::check_encrypt($requrl) + .'">'); } } elsif ($target eq 'tex') { $r->print('\documentclass{article} @@ -403,7 +411,7 @@ sub handler { $r->print('\begin{longtable}INSERTTHEHEADOFLONGTABLE\endfirsthead\endhead '); if ($number_of_columns le $lcm) {$number_of_columns=$lcm;}; } else { - $r->print(''); + $r->print('
'); } for ($i=0;$i<=$#rows;$i++) { if ($rows[$i]) { @@ -414,19 +422,29 @@ sub handler { my $avespan=$lcm/($#colcont+1); for ($j=0;$j<=$#colcont;$j++) { my $rid=$colcont[$j]; - my $metainfo=''. - ''. - ''. - ''. - ''. - ''; + my $metainfo = ''; + my $esrc=&Apache::lonnet::declutter($hash{'src_'.$rid}); + my ($mapid,$resid)=split(/\./,$rid); + my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$hash{'src_'.$rid}); + if ($hash{'encrypted_'.$rid}) { + $symb=&Apache::lonenc::encrypted($symb); + $esrc=&Apache::lonenc::encrypted($esrc); + } + unless ($hash{'src_'.$rid} =~ m-^/uploaded/-) { + $metainfo =''. + ''. + ''. + ''; + } + $metainfo .= ''. + ''. + ''; if ( ($hash{'src_'.$rid}=~/\.(problem|exam|quiz|assess|survey|form)$/) && - (&Apache::lonnet::allowed('mgr',$ENV{'request.course.id'}))) { + (&Apache::lonnet::allowed('mgr',$env{'request.course.id'})) && + ($hash{'src_'.$rid} !~ m-^/uploaded/-)) { my ($mapid,$resid)=split(/\./,$rid); my $symb= &Apache::lonnet::declutter($hash{'map_id_'.$mapid}). @@ -479,8 +497,8 @@ sub handler { unless ($target eq 'tex') { $r->print(''); } - if ($ENV{'course.'. - $ENV{'request.course.id'}. + if ($env{'course.'. + $env{'request.course.id'}. '.pageseparators'} eq 'yes') { unless($target eq 'tex') { $r->print('
'); @@ -494,6 +512,10 @@ sub handler { } elsif ($cellemb{$rid} eq 'emb') { $r->print('>'.$metainfo.''); + } elsif (&Apache::lonnet::declutter($hash{'src_'.$rid}) !~/\.(sequence|page)$/) { + $r->print($metainfo.''.$hash{'title_'.$rid}.'
'. + &mt('It is recommended that you use an up-to-date virus scanner before handling this file.').'

'. + &Apache::londocs::entryline(0,&mt("Click to download or use your browser's Save Link function"),'/'.&Apache::lonnet::declutter($hash{'src_'.$rid})).'


'); } unless ($target eq 'tex') { $r->print(''); @@ -526,11 +548,14 @@ sub handler { } else { $r->print('\end{document}'.$number_of_columns); } + &Apache::lonnet::symblist($requrl,%symbhash); + my ($map,$id,$url)=&Apache::lonnet::decode_symb(&Apache::lonnet::symbread()); + &Apache::lonnet::symblist($map,'last_known'=>[$url,$id]); # -------------------------------------------------------------------- End page } # ------------------------------------------------------------- End render page } else { - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; &Apache::lonsequence::viewmap($r,$requrl); } @@ -545,7 +570,7 @@ sub handler { } } } - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; &Apache::lonsequence::viewmap($r,$requrl); return OK;