Diff for /rat/lonpage.pm between versions 1.73 and 1.96

version 1.73, 2006/01/11 09:13:15 version 1.96, 2011/07/28 03:14:09
Line 27 Line 27
 #  #
 ###  ###
   
   
   
   
 package Apache::lonpage;  package Apache::lonpage;
   
 use strict;  use strict;
Line 39  use Apache::lonmenu; Line 42  use Apache::lonmenu;
 use HTML::TokeParser;  use HTML::TokeParser;
 use GDBM_File;  use GDBM_File;
 use Apache::lonsequence;  use Apache::lonsequence;
   use lib '/home/httpd/lib/perl/';
   use LONCAPA;
    
   
 # -------------------------------------------------------------- Module Globals  # -------------------------------------------------------------- Module Globals
 my %hash;  my %hash;
Line 75  sub tracetable { Line 81  sub tracetable {
                     my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}};                      my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}};
             $sofar=              $sofar=
                        &tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}},                         &tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}},
                        '&'.$frid.'&');                         '&'.$frid.$beenhere);
                     $sofar++;                      $sofar++;
                     if ($hash{'src_'.$frid}) {                      if ($hash{'src_'.$frid}) {
                         my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$frid});                          my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$frid});
Line 152  sub handler { Line 158  sub handler {
   my $number_of_columns = 1;    my $number_of_columns = 1;
   my $requrl=$r->uri;      my $requrl=$r->uri;  
   my $target = $env{'form.grade_target'};    my $target = $env{'form.grade_target'};
   
   # Short term solution: define target as 'tex_answer' when retrieving answers
   # for resources in a .page when generating printouts.
   # A better long-term fix would be to modify the way problem rendering, and 
   # answer rendering are retrieved for individual resources when printing a .page,
   # so rendered problem and answer are sequential for individual resources in 
   # the .page
   #
     if ($target eq 'answer') {
         if ($env{'form.answer_output_mode'} eq 'tex') {
             $target = 'tex_answer';
         }
     }
 #  &Apache::lonnet::logthis("Got a target of $target");  #  &Apache::lonnet::logthis("Got a target of $target");
   if ($target eq 'meta') {    if ($target eq 'meta') {
       &Apache::loncommon::content_type($r,'text/html');        &Apache::loncommon::content_type($r,'text/html');
Line 195  sub handler { Line 214  sub handler {
                   my $lcm=1;                    my $lcm=1;
                   my $contents=0;                    my $contents=0;
                   my $nforms=0;                    my $nforms=0;
                     my $nuploads=0;
                     my %turninpaths;
                     my %multiresps;
                     my $turninparent;
                                       
                   my %ssibody=();                    my %ssibody=();
                   my %ssibgcolor=();                    my %ssibgcolor=();
Line 203  sub handler { Line 226  sub handler {
                   my %ssivlink=();                    my %ssivlink=();
                   my %ssialink=();                    my %ssialink=();
             
                   my %metalink=();  
   
                   my %cellemb=();                    my %cellemb=();
   
                   my $allscript='';                    my $allscript='';
Line 227  sub handler { Line 248  sub handler {
   if ($hash{'encrypted_'.$_}) {    if ($hash{'encrypted_'.$_}) {
       $src=&Apache::lonenc::encrypted($src);        $src=&Apache::lonenc::encrypted($src);
   }    }
                           $metalink{$_}=$src.'.meta';  
                           $cellemb{$_}=                            $cellemb{$_}=
       &Apache::loncommon::fileembstyle($extension);        &Apache::loncommon::fileembstyle($extension);
                           if ($cellemb{$_} eq 'ssi') {                            if ($cellemb{$_} eq 'ssi') {
Line 239  sub handler { Line 259  sub handler {
                               my %posthash=('request.prefix' => $prefix,                                my %posthash=('request.prefix' => $prefix,
     'LONCAPA_INTERNAL_no_discussion' => 'true',      'LONCAPA_INTERNAL_no_discussion' => 'true',
     'symb' => $symb);      'symb' => $symb);
       if ($env{'form.grade_target'} eq 'tex') {        if (($env{'form.grade_target'} eq 'tex') ||
                                    ($env{'form.answer_output_mode'} eq 'tex')) {
   $posthash{'grade_target'}=$env{'form.grade_target'};    $posthash{'grade_target'}=$env{'form.grade_target'};
   $posthash{'textwidth'}=$env{'form.textwidth'};    $posthash{'textwidth'}=$env{'form.textwidth'};
   $posthash{'problem_split'}=$env{'form.problem_split'};    $posthash{'problem_split'}=$env{'form.problem_split'};
   $posthash{'latex_type'}=$env{'form.latex_type'};    $posthash{'latex_type'}=$env{'form.latex_type'};
   $posthash{'rndseed'}=$env{'form.rndseed'};    $posthash{'rndseed'}=$env{'form.rndseed'};
                                     $posthash{'answer_output_mode'} = $env{'form.answer_output_mode'};
       }        }
       my $submitted=exists($env{'form.all_submit'});        my $submitted=exists($env{'form.all_submit'});
       if (!$submitted) {        if (!$submitted) {
Line 267  sub handler { Line 289  sub handler {
   }    }
       }        }
                               my $output=Apache::lonnet::ssi($src,%posthash);                                my $output=Apache::lonnet::ssi($src,%posthash);
       $output=~s|//(\s*<!--)? BEGIN LON-CAPA Internal.+// END LON-CAPA Internal\s*(-->)?\s||gs;        $output=~s|//(\s*<!--)? BEGIN LON-CAPA Internal.+?// END LON-CAPA Internal\s*(-->)?\s||gs;
                               if ($target eq 'tex') {                                if (($target eq 'tex') || ($target eq 'tex_answer')) {
   $output =~ s/^([^&]+)\\begin{document}//;    $output =~ s/^([^&]+)\\begin{document}//;
   $output =~ s/\\end{document}//;    $output =~ s/\\end{document}//;
   $output = '\parbox{\minipagewidth}{ '.$output.' }';  #  $output = '\parbox{\minipagewidth}{ '.$output.' }';
                                   #some additional cleanup necessary for LateX (due to limitations of table environment                                     #some additional cleanup necessary for LateX (due to limitations of table environment 
   $output =~ s/(\\vskip\s*\d+mm)\s*(\\\\)+/$1/g;    $output =~ s/(\\vskip\s*\d+mm)\s*(\\\\)+/$1/g;
       }        }
Line 334  sub handler { Line 356  sub handler {
   $nforms++;    $nforms++;
                                   $output=~s/\<form[^\>]*\>//gsi;                                    $output=~s/\<form[^\>]*\>//gsi;
                                   $output=~s/\<\/form[^\>]*\>//gsi;                                    $output=~s/\<\/form[^\>]*\>//gsi;
                                     if ($output=~/\<input[^\>]+name\s*=\s*[\'\"]*HWFILE/) {
                                         $nuploads++;
                                     }
                                   $output=~                                    $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;
                                     if ($nuploads) {
                                         $output=~
                                             s/\<(input[^\>]+name=\"\Q$prefix\EHWFILE[^\>]+)\s*id\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\)]*)\>/\<$1 id="$prefix$2" $3\>/gsi;
                                          ($turninpaths{$prefix},$multiresps{$prefix}) = 
                                              &Apache::loncommon::get_turnedin_filepath($symb,$env{'user.name'},$env{'user.domain'});
                                          if ($turninparent eq '') {
                                              $turninparent = $turninpaths{$prefix};
                                              $turninparent =~ s{(/[^/]+)$}{}; 
                                          }
                                     }
                                     $output=~
                                         s/\<((?:input|select)[^\>]+\Qjavascript:setSubmittedPart\E)\(\s*[\'\"]([^\'\"]+)[\'\"]*\s*\)/\<$1('$2','$prefix')/gsi;
                               }                                }
                               $thisdir=~s/\/[^\/]*$//;                                $thisdir=~s/\/[^\/]*$//;
       foreach (@rlinks) {        foreach (@rlinks) {
   unless (($_=~/^http:\/\//i) ||    unless (($_=~/^https?\:\/\//i) ||
   ($_=~/^\//) ||    ($_=~/^\//) ||
   ($_=~/^javascript:/i) ||    ($_=~/^javascript:/i) ||
   ($_=~/^mailto:/i) ||    ($_=~/^mailto:/i) ||
Line 360  sub handler { Line 397  sub handler {
                   unless ($contents) {                    unless ($contents) {
                       &Apache::loncommon::content_type($r,'text/html');                        &Apache::loncommon::content_type($r,'text/html');
                       $r->send_http_header;                        $r->send_http_header;
                       $r->print('<html>'."\n".                        $r->print(&Apache::loncommon::start_page(undef,undef,
                                 '<head>'."\n".         {'force_register' => 1,}));
                                 &Apache::lonmenu::registerurl(1,undef)."\n".  
                                 '</head>'."\n".  
                                 '<body bgcolor="#FFFFFF" onLoad="'  
                                 .&Apache::lonmenu::loadevents.  
                                 '" onUnload="'.&Apache::lonmenu::unloadevents.'">'.  
                                  &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('This page is either empty or it only contains resources that are currently hidden').'. ');
                       $r->print('<br /><br />'.&mt('Please use the LON-CAPA navigation arrows to move to another item in the course').'.</body></html>');                        $r->print('<br /><br />'.&mt('Please use the LON-CAPA navigation arrows to move to another item in the course').
    &Apache::loncommon::end_page());
                   } else {                    } else {
 # ------------------------------------------------------------------ Build page  # ------------------------------------------------------------------ Build page
   
 # ---------------------------------------------------------------- Send headers  # ---------------------------------------------------------------- Send headers
       unless ($target eq 'tex') {        unless (($target eq 'tex') || ($target eq 'tex_answer')) {
   if ($isxml) {    if ($isxml) {
       &Apache::loncommon::content_type($r,'text/xml');        &Apache::loncommon::content_type($r,'text/xml');
       $r->send_http_header;  
       $r->print($xmlheader);  
   } else {    } else {
       &Apache::loncommon::content_type($r,'text/html');        &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;  
       $r->print('<html>');  
   }    }
     $r->send_http_header;
 # ------------------------------------------------------------------------ Head  # ------------------------------------------------------------------------ Head
   $r->print("\n<head>\n".$allmeta);  
   if ($allscript) {    if ($allscript) {
       $r->print("\n<script language='JavaScript'>\n".        $allscript = 
  $allscript."\n</script>\n");    "\n".'<script type="text/javascript">'."\n".
     $allscript.
     "\n</script>\n";
   }    }
   $r->print(&Apache::lonmenu::registerurl(1,undef));                            if (($nforms) && ($nuploads)) {
   $r->print("\n</head>\n");                                $allscript .= &Apache::lonhtmlcommon::file_submissionchk_js(\%turninpaths,\%multiresps);
                             }
 # ------------------------------------------------------------------ Start body  # ------------------------------------------------------------------ Start body
   if ($isxml) {    $r->print(&Apache::loncommon::start_page(undef,$allscript,
       $r->print($xmlbody);     {'force_register' => 1,
   } else {      'bgcolor'        => '#ffffff',}));
       $r->print(  
                '<body bgcolor="#FFFFFF" onLoad="'.&Apache::lonmenu::loadevents.  
                '" onUnload="'.&Apache::lonmenu::unloadevents.'">'.  
                               &Apache::lonmenu::menubuttons(undef,$target,1)  
  );  
   }  
 # ------------------------------------------------------------------ Start form  # ------------------------------------------------------------------ Start form
   if ($nforms) {    if ($nforms) {
       $r->print('<form method="post" action="'.        my $fmtag = '<form name="lonhomework" method="post"  enctype="multipart/form-data"';
                                 if ($nuploads) {
                                     my $multi;
                                     if ($nuploads > 1) {
                                         $multi = 1;
                                     }
                                     $fmtag .= 'onsubmit="return file_submission_check(this,'."'$turninparent','$multi'".');"';
                                 }
                                 $fmtag .= ' action="'.
  &Apache::lonenc::check_encrypt($requrl)   &Apache::lonenc::check_encrypt($requrl)
  .'">');   .'">';
                                 $r->print($fmtag);
   }    }
       } elsif ($target eq 'tex') {        } elsif (($target eq 'tex') || ($target eq 'tex_answer')) {
   $r->print('\documentclass{article}    #  I think this is not needed as the header
                                  \newcommand{\keephidden}[1]{}               # will be put in for each of the page parts
                                  \usepackage[dvips]{graphicx}    # by the londefdef.pm now that we are opening up
                                  \usepackage{epsfig}    # the parts of a page.
                                  \usepackage{calc}    #$r->print('\documentclass{article}
                                  \usepackage{longtable}                            #       \newcommand{\keephidden}[1]{}           
                                  \begin{document}');                            #       \usepackage[dvips]{graphicx}
                             #       \usepackage{epsfig}
                             #       \usepackage{calc}
                             #       \usepackage{longtable}
                             #       \begin{document}');
       }        }
 # ----------------------------------------------------------------- Start table  # ----------------------------------------------------------------- Start table
       if ($target eq 'tex') {        if (($target eq 'tex') || ($target eq 'tex_answer')) {
   $r->print('\begin{longtable}INSERTTHEHEADOFLONGTABLE\endfirsthead\endhead ');  # #  $r->print('\begin{longtable}INSERTTHEHEADOFLONGTABLE\endfirsthead\endhead ');
   if ($number_of_columns le $lcm) {$number_of_columns=$lcm;};    if ($number_of_columns le $lcm) {$number_of_columns=$lcm;};
       } else {        } else {
   $r->print('<table width="100%" cols="'.$lcm.'" border="0">');    $r->print('<table width="100%" cols="'.$lcm.'" border="0">');
       }        }
   # generate rows
                       for ($i=0;$i<=$#rows;$i++) {                        for ($i=0;$i<=$#rows;$i++) {
  if ($rows[$i]) {   if ($rows[$i]) {
     unless ($target eq 'tex') {      unless (($target eq 'tex') || ($target eq 'tex_answer')) {
  $r->print("\n<tr>");   $r->print("\n<tr>");
     }      }
                           my @colcont=split(/\&/,$rows[$i]);                            my @colcont=split(/\&/,$rows[$i]);
                           my $avespan=$lcm/($#colcont+1);                            my $avespan=$lcm/($#colcont+1);
                           for ($j=0;$j<=$#colcont;$j++) {                            for ($j=0;$j<=$#colcont;$j++) {
                               my $rid=$colcont[$j];                                my $rid=$colcont[$j];
                               my $metainfo = '';  
       my $esrc=&Apache::lonnet::declutter($hash{'src_'.$rid});        my $metainfo =&get_buttons(\%hash,$rid).'<br />';
       my ($mapid,$resid)=split(/\./,$rid);      unless (($target eq 'tex') || ($target eq 'tex_answer')) {
       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 ='<a name="'.&Apache::lonnet::escape($symb).'" />'.  
                                   '<a href="'.$metalink{$rid}.'" target="LONcatInfo">'.  
                                   '<img src="/adm/lonMisc/cat_button.gif" border=0>'.  
                                   '</img></a>';  
                               }  
                               $metainfo .= '<a href="/adm/evaluate?postdata='.  
   &Apache::lonnet::escape($esrc).  
                                   '" target="LONcatInfo">'.  
                                   '<img src="/adm/lonMisc/eval_button.gif" border=0>'.  
                                   '</img></a>';  
                               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.=  
                   '<a href="/adm/grades?symb='.&Apache::lonnet::escape($symb).  
 #                 '&command=submission" target="LONcatInfo">'.  
                   '&command=submission">'.  
                           '<img src="/adm/lonMisc/subm_button.gif" border=0>'.  
   '</img></a>'.  
                   '<a href="/adm/grades?symb='.&Apache::lonnet::escape($symb).  
 #                  '&command=gradingmenu" target="LONcatInfo">'.  
                   '&command=gradingmenu">'.  
                           '<img src="/adm/lonMisc/pgrd_button.gif" border=0>'.  
   '</img></a>'.  
                   '<a href="/adm/parmset?symb='.&Apache::lonnet::escape($symb).  
 #                          '" target="LONcatInfo">'.  
                           '" >'.  
                           '<img src="/adm/lonMisc/pprm_button.gif" border=0>'.  
       '</img></a>';  
                               }  
                               $metainfo.='<br></br>';  
     unless ($target eq 'tex') {  
  $r->print('<td colspan="'.$avespan.'"');   $r->print('<td colspan="'.$avespan.'"');
     }      }
                               if ($cellemb{$rid} eq 'ssi') {                                if ($cellemb{$rid} eq 'ssi') {
   unless ($target eq 'tex') {    unless (($target eq 'tex') || ($target eq 'tex_answer')) {
       if ($ssibgcolor{$rid}) {        if ($ssibgcolor{$rid}) {
   $r->print(' bgcolor="'.    $r->print(' bgcolor="'.
     $ssibgcolor{$rid}.'"');      $ssibgcolor{$rid}.'"');
Line 506  sub handler { Line 500  sub handler {
       $r->print('>');        $r->print('>');
   }    }
                                   $r->print($ssibody{$rid});                                    $r->print($ssibody{$rid});
   unless ($target eq 'tex') {    unless (($target eq 'tex') || ($target eq 'tex_answer')) {
       $r->print('</font>');        $r->print('</font>');
                                   }                                    }
                                   if ($env{'course.'.                                    if ($env{'course.'.
                                       $env{'request.course.id'}.                                        $env{'request.course.id'}.
                                       '.pageseparators'} eq 'yes') {                                        '.pageseparators'} eq 'yes') {
                                       unless($target eq 'tex') {                                        unless (($target eq 'tex') || ($target eq 'tex_answer')) {
                                           $r->print('<hr />');                                            $r->print('<hr />');
                                       } else {                                        } 
                                           $r->print('\hline');  
                                       }  
   }    }
       } elsif ($cellemb{$rid} eq 'img') {        } elsif ($cellemb{$rid} eq 'img') {
                                   $r->print('>'.$metainfo.'<img src="'.                                    $r->print('>'.$metainfo.'<img src="'.
                                     $hash{'src_'.$rid}.'"></img>');                                      $hash{'src_'.$rid}.'" />');
       } elsif ($cellemb{$rid} eq 'emb') {        } elsif ($cellemb{$rid} eq 'emb') {
                                   $r->print('>'.$metainfo.'<embed src="'.                                    $r->print('>'.$metainfo.'<embed src="'.
                                     $hash{'src_'.$rid}.'"></embed>');                                      $hash{'src_'.$rid}.'"></embed>');
Line 529  sub handler { Line 521  sub handler {
                                   &mt('It is recommended that you use an up-to-date virus scanner before handling this file.').'</p><p><table>'.                                    &mt('It is recommended that you use an up-to-date virus scanner before handling this file.').'</p><p><table>'.
                                   &Apache::londocs::entryline(0,&mt("Click to download or use your browser's Save Link function"),'/'.&Apache::lonnet::declutter($hash{'src_'.$rid})).'</table></p><br />');                                    &Apache::londocs::entryline(0,&mt("Click to download or use your browser's Save Link function"),'/'.&Apache::lonnet::declutter($hash{'src_'.$rid})).'</table></p><br />');
                               }                                }
       unless ($target eq 'tex') {        unless (($target eq 'tex') || ($target eq 'tex_answer')) {
   $r->print('</td>');    $r->print('</td>');
       } else {        } else {
                                   for (my $incol=1;$incol<=$avespan;$incol++) {  #                                  for (my $incol=1;$incol<=$avespan;$incol++) {
       $r->print(' & ');  #      $r->print(' & ');
   }  #  }
       }        }
                           }                            }
       unless ($target eq 'tex') {        unless (($target eq 'tex') || ($target eq 'tex_answer')) {
   $r->print('</tr>');    $r->print('</tr>');
       } else {        } else {
   $r->print('REMOVETHEHEADOFLONGTABLE\\\\');  #  $r->print('REMOVETHEHEADOFLONGTABLE\\\\');
       }        }
         }          }
                       }                        }
       unless ($target eq 'tex') {        unless (($target eq 'tex') || ($target eq 'tex_answer')) {
   $r->print("\n</table>");    $r->print("\n</table>");
       } else {        } else {
   $r->print('\end{longtable}\strut');  #  $r->print('\end{longtable}\strut');
       }        }
 # ---------------------------------------------------------------- Submit, etc.  # ---------------------------------------------------------------- Submit, etc.
                       if ($nforms) {                        if ($nforms) {
Line 555  sub handler { Line 547  sub handler {
                   '<input name="all_submit" value="Submit All" type="'.                    '<input name="all_submit" value="Submit All" type="'.
   (($nforms>1)?'submit':'hidden').'"></input></form>');    (($nforms>1)?'submit':'hidden').'"></input></form>');
                       }                        }
       unless ($target eq 'tex') {        unless (($target eq 'tex') || ($target eq 'tex_answer')) {
   $r->print('</body>'.&Apache::lonxml::xmlend());    $r->print(&Apache::loncommon::end_page({'discussion'
         => 1,}));
       } else {        } else {
   $r->print('\end{document}'.$number_of_columns);    $r->print('\end{document}'.$number_of_columns);
       }        }
Line 588  sub handler { Line 581  sub handler {
   return OK;     return OK; 
 }  }
   
   sub get_buttons {
       my ($hash,$rid) = @_;
   
       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 .='<a name="'.&escape($symb).'" />'.
       '<a href="'.$hash->{'src_'.$rid}.'.meta'.'" target="LONcatInfo">'.
       '<img src="/adm/lonMisc/cat_button.png" class="LC_icon" />'.
       '</a>';
       }
       $metainfo .= '<a href="/adm/evaluate?postdata='.
    &escape($esrc).
    '" target="LONcatInfo">'.
    '<img src="/adm/lonMisc/eval_button.png" class="LC_icon" />'.
    '</a>';
       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.=
    '<a href="/adm/grades?symb='.&escape($symb).
   #               '&command=submission" target="LONcatInfo">'.
    '&command=submission">'.
    '<img src="/adm/lonMisc/subm_button.png" class="LC_icon" />'.
    '</a>'.
    '<a href="/adm/grades?symb='.&escape($symb).
   #               '&command=gradingmenu" target="LONcatInfo">'.
    '&command=gradingmenu">'.
    '<img src="/adm/lonMisc/pgrd_button.png" class="LC_icon" />'.
    '</a>';
    }
    if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {
       $metainfo.=
    '<a href="/adm/parmset?symb='.&escape($symb).
   #               '" target="LONcatInfo">'.
    '" >'.
    '<img src="/adm/lonMisc/pprm_button.png" class="LC_icon" />'.
    '</a>';
    }
       }
       return $metainfo;
   }
   
 1;  1;
 __END__  __END__
   
   
 =head1 NAME  =head1 NAME
   
 Apache::lonpage - Page Handler  Apache::lonpage - Page Handler
Line 692  tracetable() : Build page table. Line 741  tracetable() : Build page table.
 =cut  =cut
   
   
   
   

Removed from v.1.73  
changed lines
  Added in v.1.96


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.