Diff for /rat/lonpage.pm between versions 1.95 and 1.111.2.3

version 1.95, 2011/07/28 02:53:33 version 1.111.2.3, 2016/10/29 05:59:30
Line 36  use strict; Line 36  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 181  sub handler { Line 183  sub handler {
   if (($env{'request.course.fn'}) && (!$env{'form.forceselect'})) {    if (($env{'request.course.fn'}) && (!$env{'form.forceselect'})) {
       my $fn=$env{'request.course.fn'};        my $fn=$env{'request.course.fn'};
       if (-e "$fn.db") {        if (-e "$fn.db") {
             my %buttonshide;
           if (tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640)) {            if (tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640)) {
 # ------------------------------------------------------------------- Hash tied  # ------------------------------------------------------------------- Hash tied
               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 214  sub handler { Line 229  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 223  sub handler { Line 243  sub handler {
                   my %ssialink=();                    my %ssialink=();
             
                   my %cellemb=();                    my %cellemb=();
                     my %cellexternal=();
   
                   my $allscript='';                    my $allscript='';
                   my $allmeta='';                    my $allmeta='';
Line 240  sub handler { Line 261  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 $plainsrc = $src;
                             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);
   }    }
                             my ($mapid,$resid)=split(/\./,$_);
                             my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$src);
                             unless ($env{'request.role.adv'}) {
                                 $buttonshide{$symb} = &Apache::lonnet::EXT("resource.0.buttonshide",$symb);
                             }
                           $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 $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);
Line 287  sub handler { Line 319  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') || ($target eq 'tex_answer')) {                                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 349  sub handler { Line 387  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=~                                    $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;                                        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 ($plainsrc =~ /$LONCAPA::assess_re/) {
                                             %Apache::lonhomework::history =
                                                 &Apache::lonnet::restore($symb,$courseid,$domain,$name);
                                             my $type = 'problem';
                                             if ($extension eq '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) {
Line 381  sub handler { Line 512  sub handler {
                       &Apache::loncommon::content_type($r,'text/html');                        &Apache::loncommon::content_type($r,'text/html');
                       $r->send_http_header;                        $r->send_http_header;
                       $r->print(&Apache::loncommon::start_page(undef,undef,                        $r->print(&Apache::loncommon::start_page(undef,undef,
        {'force_register' => 1,}));         {'force_register' => 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').                        $r->print('<br /><br />'.&mt('Please use the LON-CAPA navigation arrows to move to another item in the course').
  &Apache::loncommon::end_page());   &Apache::loncommon::end_page());
Line 403  sub handler { Line 534  sub handler {
   $allscript.    $allscript.
   "\n</script>\n";    "\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);
                                 }
                             }
                             my $pagebuttonshide;
                             if (keys(%buttonshide)) {
                                 my %uniquebuttonhide;
                                 foreach my $item (values(%buttonshide)) {
                                     if (exists($uniquebuttonhide{$item})) {
                                         $uniquebuttonhide{$item} ++;
                                     } else {
                                         $uniquebuttonhide{$item} = 1;
                                     }
                                 }
                                 if (keys(%uniquebuttonhide) == 1) {
                                     if (lc((keys(%uniquebuttonhide))[0]) eq 'yes') {
                                         $pagebuttonshide = 'yes';
                                     }
                                 }
                             }
 # ------------------------------------------------------------------ Start body  # ------------------------------------------------------------------ Start body
   $r->print(&Apache::loncommon::start_page(undef,$allscript,    $r->print(&Apache::loncommon::start_page(undef,$allscript,
    {'force_register' => 1,     {'force_register' => 1,
     'bgcolor'        => '#ffffff',}));      'bgcolor'        => '#ffffff',
       'hide_buttons'   => $pagebuttonshide}));
 # ------------------------------------------------------------------ Start form  # ------------------------------------------------------------------ Start form
   if ($nforms) {    if ($nforms) {
       $r->print('<form name="lonhomework" method="post"  enctype="multipart/form-data" 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') || ($target eq 'tex_answer')) {        } elsif (($target eq 'tex') || ($target eq 'tex_answer')) {
   #  I think this is not needed as the header    #  I think this is not needed as the header
Line 443  sub handler { Line 646  sub handler {
                           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,\%buttonshide).'<br />';
       my $metainfo =&get_buttons(\%hash,$rid).'<br />';  
     unless (($target eq 'tex') || ($target eq 'tex_answer')) {      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') || ($target eq 'tex_answer')) {    unless (($target eq 'tex') || ($target eq 'tex_answer')) {
       if ($ssibgcolor{$rid}) {        if ($ssibgcolor{$rid}) {
   $r->print(' bgcolor="'.    $r->print(' bgcolor="'.
Line 470  sub handler { Line 672  sub handler {
       }                     }             
       $r->print('>');        $r->print('>');
   }    }
                                   $r->print($ssibody{$rid});                                    unless (($cellexternal{$rid}) && 
                                             ($target eq 'tex') && ($target eq 'tex_answer')) {
                                         $r->print($ssibody{$rid});
                                     }
   unless (($target eq 'tex') || ($target eq 'tex_answer')) {    unless (($target eq 'tex') || ($target eq 'tex_answer')) {
       $r->print('</font>');        $r->print('</font>');
                                   }                                    }
Line 488  sub handler { Line 693  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') || ($target eq 'tex_answer')) {        unless (($target eq 'tex') || ($target eq 'tex_answer')) {
   $r->print('</td>');    $r->print('</td>');
Line 514  sub handler { Line 725  sub handler {
       }        }
 # ---------------------------------------------------------------- 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') || ($target eq 'tex_answer')) {        unless (($target eq 'tex') || ($target eq 'tex_answer')) {
   $r->print(&Apache::loncommon::end_page({'discussion'    $r->print(&Apache::loncommon::end_page({'discussion'
Line 553  sub handler { Line 774  sub handler {
 }  }
   
 sub get_buttons {  sub get_buttons {
     my ($hash,$rid) = @_;      my ($hash,$rid,$buttonshide) = @_;
   
     my $metainfo = '';      my $metainfo = '';
     my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});      my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});
Line 561  sub get_buttons { Line 782  sub get_buttons {
     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 ($buttonshide->{$symb} eq 'yes') {
               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.png" 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.png" 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 587  sub get_buttons { Line 821  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.png" 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.png" 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 600  sub get_buttons { Line 838  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.png" 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__
   

Removed from v.1.95  
changed lines
  Added in v.1.111.2.3


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.