Diff for /rat/lonpage.pm between versions 1.83 and 1.111

version 1.83, 2007/06/25 23:27:10 version 1.111, 2015/07/17 19:11:03
Line 27 Line 27
 #  #
 ###  ###
   
   
   
   
 package Apache::lonpage;  package Apache::lonpage;
   
 use strict;  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
   use Apache::lonhtmlcommon;
 use Apache::lonxml();  use Apache::lonxml();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonmenu;  use Apache::lonmenu;
   use Apache::lonhomework;
 use HTML::TokeParser;  use HTML::TokeParser;
 use GDBM_File;  use GDBM_File;
 use Apache::lonsequence;  use Apache::lonsequence;
Line 78  sub tracetable { Line 83  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 155  sub handler { Line 160  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 170  sub handler { Line 188  sub handler {
               my $firstres=$hash{'map_start_'.$requrl};                my $firstres=$hash{'map_start_'.$requrl};
               my $lastres=$hash{'map_finish_'.$requrl};                my $lastres=$hash{'map_finish_'.$requrl};
               if (($firstres) && ($lastres)) {                if (($firstres) && ($lastres)) {
   # ------------------------------------------------------------- Countdown Timer
                     my $now = time;
                     my ($pagefirstaccess,%hastimeleft,%countdowndisp);
                     my ($pagesymb,$courseid,$domain,$name)=&Apache::lonnet::whichuser();
                     if (($pagesymb && ($courseid ne '') && ($domain ne '') && ($name ne '')) {
                         my %times=&Apache::lonnet::get('firstaccesstimes',
                                                        [$courseid."\0".$pagesymb],
                                                        $domain,$name);
                         if ($times{$courseid."\0".$pagesymb} =~ /^\d+$/) {
                             $pagefirstaccess = $times{$courseid."\0".$pagesymb};
                         }
                     }
 # ----------------------------------------------------------------- Render page  # ----------------------------------------------------------------- Render page
   
                   @rows=();                    @rows=();
Line 198  sub handler { Line 228  sub handler {
                   my $lcm=1;                    my $lcm=1;
                   my $contents=0;                    my $contents=0;
                   my $nforms=0;                    my $nforms=0;
                     my $nuploads=0;
                     my $ntimers=0;
                     my %turninpaths;
                     my %multiresps;
                     my $turninparent;
                                       
                   my %ssibody=();                    my %ssibody=();
                   my %ssibgcolor=();                    my %ssibgcolor=();
Line 207  sub handler { Line 242  sub handler {
                   my %ssialink=();                    my %ssialink=();
             
                   my %cellemb=();                    my %cellemb=();
                     my %cellexternal=();
   
                   my $allscript='';                    my $allscript='';
                   my $allmeta='';                    my $allmeta='';
Line 224  sub handler { Line 260  sub handler {
                       $lcm*=($#colcont+1)/euclid($lcm,($#colcont+1));                        $lcm*=($#colcont+1)/euclid($lcm,($#colcont+1));
                       foreach (@colcont) {                        foreach (@colcont) {
                           my $src=$hash{'src_'.$_};                            my $src=$hash{'src_'.$_};
   my ($extension)=($src=~/\.(\w+)$/);                            my ($extension)=($src=~/\.(\w+)$/);
     $cellexternal{$_}=($hash{'ext_'.$_} eq 'true:');
   if ($hash{'encrypted_'.$_}) {    if ($hash{'encrypted_'.$_}) {
       $src=&Apache::lonenc::encrypted($src);        $src=&Apache::lonenc::encrypted($src);
   }    }
                           $cellemb{$_}=                            $cellemb{$_}=
       &Apache::loncommon::fileembstyle($extension);        &Apache::loncommon::fileembstyle($extension);
                           if ($cellemb{$_} eq 'ssi') {                            if ($cellexternal{$_}) {
                                 unless (($target eq 'tex') || ($target eq 'tex_answer')) {
                                     $ssibody{$_} = <<ENDEXT;
   <iframe src="$src" width="100%">No iframe support!</iframe>
   ENDEXT
                                 }
                             } elsif ($cellemb{$_} eq 'ssi') {
 # --------------------------------------------------------- This is an SSI cell  # --------------------------------------------------------- This is an SSI cell
       my ($mapid,$resid)=split(/\./,$_);        my ($mapid,$resid)=split(/\./,$_);
       my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$src);        my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$src);
               
       my $prefix=$_.'_';        my $prefix=$_.'_';
                                 my $idprefix= join('_',($mapid,$resid,''));
                               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 268  sub handler { Line 314  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;
       }        }
                                 my $matheditor;
                                 if ($output =~ /\Qjavascript:LC_mathedit_HWVAL_\E/) {
                                     $matheditor = 'dragmath';
                                 } elsif ($output =~ /LCmathField/) {
                                     $matheditor = 'lcmath';
                                 }
                               my $parser=HTML::TokeParser->new(\$output);                                my $parser=HTML::TokeParser->new(\$output);
                               my $token;                                my $token;
                               my $thisdir=$src;                                my $thisdir=$src;
Line 331  sub handler { Line 383  sub handler {
                               }                                }
                               $output=~s/\<\/body\>.*//si;                                $output=~s/\<\/body\>.*//si;
                               if ($output=~/\<form/si) {                                if ($output=~/\<form/si) {
                                     my $hastimer; 
   $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++;
                                     }
                                     if ($output=~/\<input[^\>]+name\s*=\s*[\'\"]*accessbutton/) {
                                         $ntimers++;
                                         $hastimer = 1;
                                     }
                                   $output=~                                    $output=~
       s/\<((?:input|select|button|textarea)[^\>]+)name\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\>]*)\>/\<$1 name="$prefix$2" $3\>/gsi;        s/\<((?:input|select|button|textarea)[^\>]+)name\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\>]*)\>/\<$1 name="$prefix$2" $3\>/gsi;
                                     $output=~
                                         s/\<((?:input|select|button|textarea)[^\>]+)id\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\>]*)\>/\<$1 id="$idprefix$2" $3\>/gsi;
                                     if ($hastimer) {
                                         $output=~
                                             s/\<(input[^\>]+name=\Q"$prefix\Eaccessbutton"[^\>]+)(?:\Qdocument.markaccess.submit();\E)([^\>]*)\>/\<$1pageTimer(this.form,'$prefix')$2\>/gsi;
                                         $output=~  s/\<(input[^\>]+name=\Q"$prefix\Emarkaccess"[^\>]+value=["'])(?:yes)(['"][^\>]*)\>/\<$1$2\>/gsi;
                                     }
                                     if ($matheditor eq 'dragmath') {
                                         $output=~
                                             s/(\Qjavascript:LC_mathedit_\E)(HWVAL_)([^'"]+?)(\(['"]*)(\QHWVAL_\E\3['"]\)\;void\(0\)\;)/$1$idprefix$2$3$4$idprefix$5/g;
                                         $output=~
                                             s/(function\s+LC_mathedit_)(HWVAL_)([^'"]+?)(\s+\(LCtextline\))/$1$idprefix$2$3$4/g;
                                     } elsif ($matheditor eq 'lcmath') {
                                         $output=~
                                             s/(var\s+LCmathField\s+=\s+document\.getElementById\(['"])([^'"]+?)(['"]\)\;)/$1$idprefix$2$3/g;
                                     }
                                     $output=~
                                         s/(\Q<div id="msg_\E)(\Qsubmit_\E)([^"]*)(\Q" style="display:none">\E)/<input type="hidden" name="$prefix$2$3_pressed" id="$idprefix$2$3_pressed" value="" \/>$1$idprefix$2$3$4/g;
                                     $output=~
                                         s/(\Q<td class="LC_status_\E)(\Qsubmit_\E)([^\"]*)(\s*[^\"]*"\>)/$1$idprefix$2$3$4/g;
                                     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;
                                     $output=~
                                         s/\<(input[^\>]+\Qonfocus=\"javascript:disableAutoComplete\E)\(\'([^\']+)\'\)(;\")/\<$1('$idprefix$2')$3/gsi;
                                     unless ($hastimer) {
                                         if ($src =~ /$LONCAPA::assess_re/) {
                                             %Apache::lonhomework::history =
                                                 &Apache::lonnet::restore($symb,$courseid,$domain,$name);
                                             my $type = 'problem';
                                             if ($src =~ /\.task$/) {
                                                 $type = 'Task';
                                             }
                                             my ($status,$accessmsg,$slot_name,$slot) =
                                                 &Apache::lonhomework::check_slot_access('0',$type,$symb);
                                             undef(%Apache::lonhomework::history);
                                             my $probstatus = &Apache::lonnet::EXT("resource.0.problemstatus",$symb);
                                             if (($status eq 'CAN_ANSWER') || (($status eq 'CANNOT_ANSWER') && 
                                                 (($probstatus eq 'no') || ($probstatus eq 'no_feedback_ever')))) {
                                                 my ($slothastime,$timerhastime);
                                                 if ($slot_name ne '') {
                                                     if (ref($slot) eq 'HASH') {
                                                         if (($slot->{'starttime'} < $now) &&
                                                             ($slot->{'endtime'} > $now)) {
                                                             $slothastime = $now - $slot->{'endtime'};
                                                         }
                                                     }
                                                 }
                                                 my $duedate = &Apache::lonnet::EXT("resource.0.duedate",$symb);
                                                 my @interval=&Apache::lonnet::EXT("resource.0.interval",$symb);
                                                 if (@interval > 1) {
                                                     my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb);
                                                     if ($first_access > 0) {
                                                         my $timeremains = $first_access+$interval[0] - $now;
                                                         if ($timeremains > 0) {
                                                             $timerhastime = $timeremains;
                                                         }
                                                     }
                                                 }
                                                 if (($duedate && $duedate > $now) ||
                                                     (!$duedate && $timerhastime > 0) ||
                                                     ($slot_name ne '' && $slothastime)) {
                                                     if ((@interval > 1 && $timerhastime) ||
                                                         ($type eq 'Task' && $slothastime)) {
                                                         $countdowndisp{$symb} = 'inline';
                                                         if ((@interval > 1) && ($timerhastime)) {
                                                             $hastimeleft{$symb} = $timerhastime;
                                                         } else {
                                                             $hastimeleft{$symb} = $slothastime;
                                                         }
                                                     } else {
                                                         $hastimeleft{$symb} = $duedate - $now;
                                                         $countdowndisp{$symb} = 'none';
                                                     }
                                                 }
                                             }
                                         }
                                     }
                               }                                }
                               $thisdir=~s/\/[^\/]*$//;                                $thisdir=~s/\/[^\/]*$//;
       foreach (@rlinks) {        foreach (@rlinks) {
   unless (($_=~/^http:\/\//i) ||    unless (($_=~/^https?\:\/\//i) ||
   ($_=~/^\//) ||    ($_=~/^\//) ||
   ($_=~/^javascript:/i) ||    ($_=~/^javascript:/i) ||
   ($_=~/^mailto:/i) ||    ($_=~/^mailto:/i) ||
Line 369  sub handler { Line 516  sub handler {
 # ------------------------------------------------------------------ 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');
   } else {    } else {
Line 378  sub handler { Line 525  sub handler {
   $r->send_http_header;    $r->send_http_header;
 # ------------------------------------------------------------------------ Head  # ------------------------------------------------------------------------ Head
   if ($allscript) {    if ($allscript) {
       $allscript .=         $allscript = 
   "\n<script type=\"text/javascript\">\n".    "\n".'<script type="text/javascript">'."\n".
   $allscript."\n</script>\n";    $allscript.
     "\n</script>\n";
   }    }
                             if (($nforms) && ($nuploads)) {
                                 $allscript .= &Apache::lonhtmlcommon::file_submissionchk_js(\%turninpaths,\%multiresps);
                             }
                             if (($nforms) && (&Apache::lonhtmlcommon::htmlareabrowser())) {
                                 my %textarea_args = (
                                     dragmath => 'math',
                                 );
                                 $allscript .= &Apache::lonhtmlcommon::htmlareaselectactive(\%textarea_args);
                             }
                             if ($ntimers) {
                                 $allscript .= '<script type="text/javascript">'."\n".
                                               '// <![CDATA['."\n".
                                               'function pageTimer(form,prefix) {'."\n".
                                               "   form.elements[prefix+'markaccess'].value = 'yes';\n".
                                               "   form.submit();\n".
                                               '}'."\n".
                                               '// ]]>'.
                                               "\n</script>\n";
                             }
                             if (keys(%hastimeleft)) {
                                 my (%uniquetimes,%uniquedisplays);
                                 foreach my $item (values(%hastimeleft)) {
                                     if (exists($uniquetimes{$item})) {
                                         $uniquetimes{$item} ++; 
                                     } else {
                                         $uniquetimes{$item} = 1;
                                     }
                                 }
                                 if (keys(%uniquetimes) == 1) {
                                     my (%uniquedisplays,%uniquedones,$currdisp);
                                     if (keys(%countdowndisp)) {
                                         foreach my $item (values(%countdowndisp)) {
                                             if (exists($uniquedisplays{$item})) {
                                                 $uniquedisplays{$item} ++;
                                             } else {
                                                 $uniquedisplays{$item} = 1;
                                             }
                                         }
                                         my @countdowndisplay = keys(%uniquedisplays);
                                         if (scalar(@countdowndisplay) == 1) {
                                             $currdisp = $countdowndisplay[0];
                                         }
                                     }
                                     &add_countdown_timer($currdisp);
                                 }
                             }
 # ------------------------------------------------------------------ Start body  # ------------------------------------------------------------------ Start body
   $r->print(&Apache::loncommon::start_page(undef,undef,    $r->print(&Apache::loncommon::start_page(undef,$allscript,
    {'force_register' => 1,     {'force_register' => 1,
     'bgcolor'        => '#ffffff',}));      'bgcolor'        => '#ffffff',}));
 # ------------------------------------------------------------------ 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)
  .'">');   .'" id="LC_page">';
                                 $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">');
Line 411  sub handler { Line 618  sub handler {
 # generate rows  # 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 =&get_buttons(\%hash,$rid).'<br />';        my $metainfo =&get_buttons(\%hash,$rid).'<br />';
     unless ($target eq 'tex') {      unless (($target eq 'tex') || ($target eq 'tex_answer')) {
  $r->print('<td colspan="'.$avespan.'"');   $r->print('<td colspan="'.$avespan.'"');
     }      }
                               if ($cellemb{$rid} eq 'ssi') {                                if (($cellemb{$rid} eq 'ssi') || ($cellexternal{$rid})) {
   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 445  sub handler { Line 651  sub handler {
       }                     }             
       $r->print('>');        $r->print('>');
   }    }
                                   $r->print($ssibody{$rid});                                    unless (($cellexternal{$rid}) && 
   unless ($target eq 'tex') {                                            ($target eq 'tex') && ($target eq 'tex_answer')) {
                                         $r->print($ssibody{$rid});
                                     }
     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 />');
                                       }                                         } 
   }    }
Line 463  sub handler { Line 672  sub handler {
                                   $r->print('>'.$metainfo.'<embed src="'.                                    $r->print('>'.$metainfo.'<embed src="'.
                                     $hash{'src_'.$rid}.'"></embed>');                                      $hash{'src_'.$rid}.'"></embed>');
                               } elsif (&Apache::lonnet::declutter($hash{'src_'.$rid}) !~/\.(sequence|page)$/) {                                } elsif (&Apache::lonnet::declutter($hash{'src_'.$rid}) !~/\.(sequence|page)$/) {
                                   $r->print($metainfo.'<b>'.$hash{'title_'.$rid}.'</b><br />'.                                    $r->print($metainfo.'<b>'.$hash{'title_'.$rid}.'</b><br />');
                                   &mt('It is recommended that you use an up-to-date virus scanner before handling this file.').'</p><p><table>'.                                    unless ($cellemb{$rid} eq 'wrp') {
                                   &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 />');                                        $r->print(&mt('It is recommended that you use an up-to-date virus scanner before handling this file.'));
                                     }
                                     $r->print('</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 />');
                               }                                }
       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) {
                             my $class;
                             if ($nforms > 1) {
                                 $class = ' class="LC_hwk_submit"';
                                 if ($ntimers) {
                                     $nforms = 1;
                                     $class = '';
                                 }
                             }
                           $r->print(                            $r->print(
                   '<input name="all_submit" value="Submit All" type="'.                    '<input name="all_submit" value="'.&mt('Submit All').'" type="'.
   (($nforms>1)?'submit':'hidden').'"></input></form>');    (($nforms>1)?'submit':'hidden').'"'.$class.' id="all_submit" />'.
                             '<div id="msg_all_submit" style="display:none">'.
                             &mt('Processing your submission ...').'</div></form>');
                       }                        }
       unless ($target eq 'tex') {        unless (($target eq 'tex') || ($target eq 'tex_answer')) {
   $r->print(&Apache::loncommon::end_page({'discussion'    $r->print(&Apache::loncommon::end_page({'discussion'
       => 1,}));        => 1,}));
       } else {        } else {
Line 530  sub handler { Line 755  sub handler {
 sub get_buttons {  sub get_buttons {
     my ($hash,$rid) = @_;      my ($hash,$rid) = @_;
   
     # which icons do we use?  
     my $extension='png';  
     if ($env{'environment.icons'} eq 'classic') { $extension='gif'; }  
   
     my $metainfo = '';      my $metainfo = '';
     my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});      my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});
     my ($mapid,$resid)=split(/\./,$rid);      my ($mapid,$resid)=split(/\./,$rid);
     my $symb=&Apache::lonnet::encode_symb($hash->{'map_id_'.$mapid},      my $symb=&Apache::lonnet::encode_symb($hash->{'map_id_'.$mapid},
   $resid,    $resid,
   $hash->{'src_'.$rid});    $hash->{'src_'.$rid});
       unless ($env{'request.role.adv'}) {
           if (&Apache::lonnet::EXT('resource.0.buttonshide',$symb)) {
               return;
           }
       }
     if ($hash->{'encrypted_'.$rid}) {      if ($hash->{'encrypted_'.$rid}) {
  $symb=&Apache::lonenc::encrypted($symb);   $symb=&Apache::lonenc::encrypted($symb);
  $esrc=&Apache::lonenc::encrypted($esrc);   $esrc=&Apache::lonenc::encrypted($esrc);
     }      }
     if ($hash->{'src_'.$rid} !~ m-^/uploaded/-      if ($hash->{'src_'.$rid} !~ m-^/uploaded/-
           && $hash->{'src_'.$rid} !~ m{^https?://}
  && !$env{'request.enc'}   && !$env{'request.enc'}
  && ($env{'request.role.adv'}   && ($env{'request.role.adv'}
     || !$hash->{'encrypted_'.$rid})) {       || !$hash->{'encrypted_'.$rid})) { 
  $metainfo .='<a name="'.&escape($symb).'" />'.   $metainfo .='<a name="'.&escape($symb).'" />'.
     '<a href="'.$hash->{'src_'.$rid}.'.meta'.'" target="LONcatInfo">'.      '<a href="'.$hash->{'src_'.$rid}.'.meta'.'" target="LONcatInfo">'.
     '<img src="/adm/lonMisc/cat_button.'.$extension.'" class="LC_icon" />'.              '<img src="/res/adm/pages/catalog.png" class="LC_icon"'.
               ' alt="'.&mt('Show Metadata').'"'.
               ' title="'.&mt('Show Metadata').'" />'.
       '</a>';
       }
       if (($hash->{'src_'.$rid} !~ m{^/uploaded/}) &&
           ($hash->{'src_'.$rid} !~ m{^https?://})) {
           $metainfo .= '<a href="/adm/evaluate?postdata='.
       &escape($esrc).
       '" target="LONcatInfo">'.
               '<img src="/res/adm/pages/eval.png" class="LC_icon"'.
               ' alt="'.&mt('Provide my evaluation of this resource').'"'.
               ' title="'.&mt('Provide my evaluation of this resource').'" />'.
     '</a>';      '</a>';
     }      }
     $metainfo .= '<a href="/adm/evaluate?postdata='.      if (($hash->{'src_'.$rid}=~/$LONCAPA::assess_re/) &&
  &escape($esrc).  
  '" target="LONcatInfo">'.  
  '<img src="/adm/lonMisc/eval_button.'.$extension.'" class="LC_icon" />'.  
  '</a>';  
     if (($hash->{'src_'.$rid}=~/\.(problem|exam|quiz|assess|survey|form)$/) &&  
  ($hash->{'src_'.$rid} !~ m-^/uploaded/-)) {   ($hash->{'src_'.$rid} !~ m-^/uploaded/-)) {
   
  if (&Apache::lonnet::allowed('mgr',$env{'request.course.id'})) {   if (&Apache::lonnet::allowed('mgr',$env{'request.course.id'})) {
Line 566  sub get_buttons { Line 800  sub get_buttons {
  '<a href="/adm/grades?symb='.&escape($symb).   '<a href="/adm/grades?symb='.&escape($symb).
 #               '&command=submission" target="LONcatInfo">'.  #               '&command=submission" target="LONcatInfo">'.
  '&command=submission">'.   '&command=submission">'.
  '<img src="/adm/lonMisc/subm_button.'.$extension.'" class="LC_icon" />'.                  '<img src="/adm/lonMisc/subm_button.png" class="LC_icon"'.
                   ' alt="'.&mt('View Submissions for a Student or a Group of Students').'"'.
                   ' title="'.&mt('View Submissions for a Student or a Group of Students').'" />'.
  '</a>'.   '</a>'.
  '<a href="/adm/grades?symb='.&escape($symb).   '<a href="/adm/grades?symb='.&escape($symb).
 #               '&command=gradingmenu" target="LONcatInfo">'.  #               '&command=gradingmenu" target="LONcatInfo">'.
  '&command=gradingmenu">'.   '&command=gradingmenu">'.
  '<img src="/adm/lonMisc/pgrd_button.'.$extension.'" class="LC_icon" />'.                  '<img src="/res/adm/pages/pgrd.png" class="LC_icon"'.
                   ' alt="'.&mt('Content Grades').'"'.
                   ' title="'.&mt('Content Grades').'" />'.
  '</a>';   '</a>';
  }   }
  if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {   if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {
Line 579  sub get_buttons { Line 817  sub get_buttons {
  '<a href="/adm/parmset?symb='.&escape($symb).   '<a href="/adm/parmset?symb='.&escape($symb).
 #               '" target="LONcatInfo">'.  #               '" target="LONcatInfo">'.
  '" >'.   '" >'.
  '<img src="/adm/lonMisc/pprm_button.'.$extension.'" class="LC_icon" />'.                  '<img src="/adm/lonMisc/pprm_button.png" class="LC_icon"'.
                   ' alt="'.&mt('Content Settings').'"'.
                   ' title="'.&mt('Content Settings').'" />'.
  '</a>';   '</a>';
  }   }
     }      }
       if (($env{'request.course.id'}) && (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
           my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
           my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
           my $file=&Apache::lonnet::declutter($hash->{'src_'.$rid});
           my ($cfile,$home,$switchserver,$forceedit,$forceview) =
               &Apache::lonnet::can_edit_resource($file,$cnum,$cdom,$hash->{'src_'.$rid},$symb);
           if ($cfile ne '') {
               my $jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver,
                                                                    $forceedit,1,$symb,undef,
                                                                    &escape($env{'form.title'}));
               if ($jscall) {
                   my $icon = 'pcstr.png';
                   my $label = &mt('Edit');
                   my $title = &mt('Edit this resource');
                   my $pic = '<img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/'.$icon).'"'.
                             ' class="LC_icon" alt="'.$label.'" title="'.$title.'" />';
                   $metainfo .= '&nbsp;<a href="javascript:'.$jscall.';">'.$pic.'</a>';
               }
           }
       }
     return $metainfo;      return $metainfo;
 }  }
   
   sub add_countdown_timer {
       my ($currdisp) = @_;
       my ($collapse,$expand,$alttxt,$title);
       if ($currdisp eq 'inline') {
           $collapse = '&#9658;&nbsp;';
       } else {
           $expand = '&#9668;&nbsp;';
       }
       unless ($env{'environment.icons'} eq 'iconsonly') {
           $alttxt = &mt('Timer');
           $title = $alttxt.'&nbsp;';
       }
       my $desc = &mt('Countdown to due date/time');
       my $output = <<END;
   <a href="javascript:toggleCountdown();" class="LC_menubuttons_link">
   <span id="ddcountcollapse" class="LC_menubuttons_inline_text">
   $collapse
   </span></a>
   <span id="duedatecountdown" class="LC_menubuttons_inline_text" style="display: $currdisp;"></span>
   <a href="javascript:toggleCountdown();" class="LC_menubuttons_link">
   <span id="ddcountexpand" class="LC_menubuttons_inline_text" >$expand</span>
   <img src="/res/adm/pages/timer.png" title="$desc" class="LC_icon" alt="$alttxt" /><span class="LC_menubuttons_inline_text">$title</span></a>
   END
       &Apache::lonhtmlcommon::clear_breadcrumb_tools();
       &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$output);
       return;
   }
   
   
 1;  1;
 __END__  __END__
   
   
 =head1 NAME  =head1 NAME
   
 Apache::lonpage - Page Handler  Apache::lonpage - Page Handler
Line 690  tracetable() : Build page table. Line 980  tracetable() : Build page table.
 =cut  =cut
   
   
   
   

Removed from v.1.83  
changed lines
  Added in v.1.111


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.