--- rat/lonpage.pm 2006/12/12 18:49:27 1.76 +++ rat/lonpage.pm 2008/11/20 13:11:43 1.88 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Page Handler # -# $Id: lonpage.pm,v 1.76 2006/12/12 18:49:27 albertel Exp $ +# $Id: lonpage.pm,v 1.88 2008/11/20 13:11:43 jms Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,6 +27,107 @@ # ### +=head1 NAME + +Apache::lonpage - Page Handler + +=head1 SYNOPSIS + +Invoked by /etc/httpd/conf/srm.conf: + + + SetHandler perl-script + PerlHandler Apache::lonpage + + +=head1 INTRODUCTION + +This module renders a .page resource. + +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. + +=head1 HANDLER SUBROUTINE + +This routine is called by Apache and mod_perl. + +=over 4 + +=item * + +set document type for header only + +=item * + +tie db file + +=item * + +render page + +=item * + +add to symb list + +=item * + +page parms + +=item * + +Get SSI output, post parameters + +=item * + +SSI cell rendering + +=item * + +Deal with Applet codebases + +=item * + +Build page + +=item * + +send headers + +=item * + +start body + +=item * + +start form + +=item * + +start table + +=item * + +submit element, etc, render page, untie hash + +=back + +=head1 OTHER SUBROUTINES + +=over 4 + +=item * + +euclid() : Euclid's method for determining the greatest common denominator. + +=item * + +tracetable() : Build page table. + +=back + +=cut + + package Apache::lonpage; use strict; @@ -78,7 +179,7 @@ sub tracetable { my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}}; $sofar= &tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}}, - '&'.$frid.'&'); + '&'.$frid.$beenhere); $sofar++; if ($hash{'src_'.$frid}) { my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$frid}); @@ -206,8 +307,6 @@ sub handler { my %ssivlink=(); my %ssialink=(); - my %metalink=(); - my %cellemb=(); my $allscript=''; @@ -230,7 +329,6 @@ sub handler { if ($hash{'encrypted_'.$_}) { $src=&Apache::lonenc::encrypted($src); } - $metalink{$_}=$src.'.meta'; $cellemb{$_}= &Apache::loncommon::fileembstyle($extension); if ($cellemb{$_} eq 'ssi') { @@ -270,7 +368,7 @@ sub handler { } } my $output=Apache::lonnet::ssi($src,%posthash); - $output=~s|//(\s*)?\s||gs; + $output=~s|//(\s*)?\s||gs; if ($target eq 'tex') { $output =~ s/^([^&]+)\\begin{document}//; $output =~ s/\\end{document}//; @@ -338,7 +436,7 @@ sub handler { $output=~s/\]*\>//gsi; $output=~s/\<\/form[^\>]*\>//gsi; $output=~ - s/\<((?:input|select|button|textarea)[^\>]+)name\s*\=\s*[\'\"]*([\w\.\:]+)[\'\"]*([^\>]*)\>/\<$1 name="$prefix$2" $3\>/gsi; + s/\<((?:input|select|button|textarea)[^\>]+)name\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\>]*)\>/\<$1 name="$prefix$2" $3\>/gsi; } $thisdir=~s/\/[^\/]*$//; foreach (@rlinks) { @@ -381,17 +479,18 @@ sub handler { $r->send_http_header; # ------------------------------------------------------------------------ Head if ($allscript) { - $allscript .= - "\n\n"; + $allscript = + "\n".'\n"; } # ------------------------------------------------------------------ Start body - $r->print(&Apache::loncommon::start_page(undef,undef, + $r->print(&Apache::loncommon::start_page(undef,$allscript, {'force_register' => 1, 'bgcolor' => '#ffffff',})); # ------------------------------------------------------------------ Start form if ($nforms) { - $r->print('
'); } @@ -411,6 +510,7 @@ sub handler { } else { $r->print(''); } +# generate rows for ($i=0;$i<=$#rows;$i++) { if ($rows[$i]) { unless ($target eq 'tex') { @@ -420,52 +520,8 @@ sub handler { my $avespan=$lcm/($#colcont+1); for ($j=0;$j<=$#colcont;$j++) { my $rid=$colcont[$j]; - 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'})) && - ($hash{'src_'.$rid} !~ m-^/uploaded/-)) { - my ($mapid,$resid)=split(/\./,$rid); - my $symb= - &Apache::lonnet::declutter($hash{'map_id_'.$mapid}). - '___'.$resid.'___'. - &Apache::lonnet::declutter($hash{'src_'.$rid}); - $metainfo.= - ''. - '&command=submission">'. - ''. - ''. - ''. - '&command=gradingmenu">'. - ''. - ''. - ''. - '" >'. - ''. - ''; - } - $metainfo.='

'; + + my $metainfo =&get_buttons(\%hash,$rid).'
'; unless ($target eq 'tex') { $r->print('
print('
'); - } else { - $r->print('\hline'); - } + } } } elsif ($cellemb{$rid} eq 'img') { $r->print('>'.$metainfo.''); + $hash{'src_'.$rid}.'" />'); } elsif ($cellemb{$rid} eq 'emb') { $r->print('>'.$metainfo.''); @@ -575,108 +629,68 @@ sub handler { return OK; } -1; -__END__ - -=head1 NAME - -Apache::lonpage - Page Handler - -=head1 SYNOPSIS - -Invoked by /etc/httpd/conf/srm.conf: - - - SetHandler perl-script - PerlHandler Apache::lonpage - - -=head1 INTRODUCTION - -This module renders a .page resource. - -This is part of the LearningOnline Network with CAPA project -described at http://www.lon-capa.org. - -=head1 HANDLER SUBROUTINE - -This routine is called by Apache and mod_perl. - -=over 4 - -=item * - -set document type for header only - -=item * - -tie db file - -=item * - -render page - -=item * - -add to symb list - -=item * - -page parms - -=item * - -Get SSI output, post parameters - -=item * - -SSI cell rendering - -=item * - -Deal with Applet codebases - -=item * - -Build page - -=item * +sub get_buttons { + my ($hash,$rid) = @_; -send headers - -=item * - -start body - -=item * - -start form - -=item * - -start table - -=item * - -submit element, etc, render page, untie hash - -=back - -=head1 OTHER SUBROUTINES - -=over 4 - -=item * - -euclid() : Euclid's method for determining the greatest common denominator. - -=item * - -tracetable() : Build page table. + # which icons do we use? + my $extension='png'; + if ($env{'environment.icons'} eq 'classic') { $extension='gif'; } + + 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); + } + if ($hash->{'src_'.$rid} !~ m-^/uploaded/- + && !$env{'request.enc'} + && ($env{'request.role.adv'} + || !$hash->{'encrypted_'.$rid})) { + $metainfo .=''. + ''. + ''. + ''; + } + $metainfo .= ''. + ''. + ''; + if (($hash->{'src_'.$rid}=~/\.(problem|exam|quiz|assess|survey|form)$/) && + ($hash->{'src_'.$rid} !~ m-^/uploaded/-)) { + + if (&Apache::lonnet::allowed('mgr',$env{'request.course.id'})) { + $metainfo.= + ''. + '&command=submission">'. + ''. + ''. + ''. + '&command=gradingmenu">'. + ''. + ''; + } + if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) { + $metainfo.= + ''. + '" >'. + ''. + ''; + } + } + return $metainfo; +} -=back +1; +__END__ -=cut