Diff for /rat/lonpage.pm between versions 1.111.2.10.2.1 and 1.118

version 1.111.2.10.2.1, 2020/01/22 15:02:22 version 1.118, 2016/08/09 23:43:51
Line 42  use Apache::lonlocal; Line 42  use Apache::lonlocal;
 use Apache::lonmenu;  use Apache::lonmenu;
 use Apache::lonhomework;  use Apache::lonhomework;
 use Apache::lonparmset;  use Apache::lonparmset;
 use Apache::lonenc();  
 use HTML::TokeParser;  use HTML::TokeParser;
 use GDBM_File;  use GDBM_File;
 use Apache::lonsequence;  use Apache::lonsequence;
Line 185  sub handler { Line 184  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;  
           my $hostname = $r->hostname();  
           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};
Line 199  sub handler { Line 196  sub handler {
                   my ($pagesymb,$courseid,$domain,$name)=&Apache::lonnet::whichuser();                    my ($pagesymb,$courseid,$domain,$name)=&Apache::lonnet::whichuser();
                   unless ($pagesymb) {                    unless ($pagesymb) {
                       $pagesymb=&Apache::lonnet::symbread($requrl);                        $pagesymb=&Apache::lonnet::symbread($requrl);
                   }                                      }
                   if ($pagesymb && ($courseid ne '') && ($domain ne '') && ($name ne '')) {                    if ($pagesymb && ($courseid ne '') && ($domain ne '') && ($name ne '')) {
                       my %times=&Apache::lonnet::get('firstaccesstimes',                        my %times=&Apache::lonnet::get('firstaccesstimes',
                                                      [$courseid."\0".$pagesymb],                                                       [$courseid."\0".$pagesymb],
Line 303  sub handler { Line 300  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 $plainsrc = $src;  
                           my ($extension)=($src=~/\.(\w+)$/);                            my ($extension)=($src=~/\.(\w+)$/);
   $cellexternal{$_}=($hash{'ext_'.$_} eq 'true:');    $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 ($cellexternal{$_}) {                            if ($cellexternal{$_}) {
Line 324  ENDEXT Line 315  ENDEXT
                               }                                }
                           } elsif ($cellemb{$_} eq 'ssi') {                            } elsif ($cellemb{$_} eq 'ssi') {
 # --------------------------------------------------------- This is an SSI cell  # --------------------------------------------------------- This is an SSI cell
       my $prefix='p_'.$_.'_';        my ($mapid,$resid)=split(/\./,$_);
                               my $idprefix='p_'.join('_',($mapid,$resid,''));        my $symb=&Apache::lonnet::encode_symb($hash{'map_id_'.$mapid},$resid,$src);
         
         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 338  ENDEXT Line 332  ENDEXT
   $posthash{'rndseed'}=$env{'form.rndseed'};    $posthash{'rndseed'}=$env{'form.rndseed'};
                                   $posthash{'answer_output_mode'} = $env{'form.answer_output_mode'};                                    $posthash{'answer_output_mode'} = $env{'form.answer_output_mode'};
       }        }
       my $submitted=$env{'form.all_submit_pressed'};        my $submitted=exists($env{'form.all_submit'});
       if (!$submitted) {        if (!$submitted) {
   foreach my $key (keys(%env)) {    foreach my $key (keys(%env)) {
       if ($key=~/^\Qform.$prefix\Esubmit_(.+)_pressed$/) {        if ($key=~/^form.\Q$prefix\Esubmit_/) {
                                           if ($env{$key}) {    $submitted=1;last;
                                               $submitted=1;  
                                               last;  
                                           }  
       }        }
                                   }    }
       }        }
                               if ($submitted) {                                if ($submitted) {
   foreach my $key (keys(%env)) {    foreach my $key (keys(%env)) {
       if ($key=~/^\Qform.$prefix\E/) {        if ($key=~/^form.\Q$prefix\E/) {
   my $name=$key;    my $name=$key;
   $name=~s/^\Qform.$prefix\E//;    $name=~s/^form.\Q$prefix\E//;
   $posthash{$name}=$env{$key};    $posthash{$name}=$env{$key};
                                       }        }
   }    }
   if ($env{'form.all_submit_pressed'}) {    if (exists($env{'form.all_submit'})) {
       $posthash{'all_submit'}='yes';        $posthash{'all_submit'}='yes';
   }    }
       } elsif ($env{'form.'.$prefix.'markaccess'} eq 'yes') {        }
                   $posthash{'markaccess'} = $env{'form.'.$prefix.'markaccess'};  
               }  
                               if ($env{'environment.remote'} eq 'on') {  
                                   $posthash{'inhibitmenu'} = 'yes';  
                               }  
                               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')) {
Line 452  ENDEXT Line 438  ENDEXT
       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;                                        s/\<((?:input|select|button|textarea)[^\>]+)id\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\>]*)\>/\<$1 id="$idprefix$2" $3\>/gsi;
                                   $output=~  
                                       s/(\Qthis.form.elements['\E)(HW(?:VAL|CHK)_[^']+\'\]\.(?:value=\'|checked))/$1$prefix$2/gsi;  
                                   if ($hastimer) {                                    if ($hastimer) {
                                       $output=~                                        $output=~
                                           s/\<(input[^\>]+name=\Q"$prefix\Eaccessbutton"[^\>]+)(?:\Qdocument.markaccess.submit();\E)([^\>]*)\>/\<$1pageTimer(this.form,'$prefix')$2\>/gsi;                                            s/\<(input[^\>]+name=\Q"$prefix\Eaccessbutton"[^\>]+)(?:\Qdocument.markaccess.submit();\E)([^\>]*)\>/\<$1pageTimer(this.form,'$prefix')$2\>/gsi;
Line 473  ENDEXT Line 457  ENDEXT
                                   $output=~                                    $output=~
                                       s/(\Q<td class="LC_status_\E)(\Qsubmit_\E)([^\"]*)(\s*[^\"]*"\>)/$1$idprefix$2$3$4/g;                                        s/(\Q<td class="LC_status_\E)(\Qsubmit_\E)([^\"]*)(\s*[^\"]*"\>)/$1$idprefix$2$3$4/g;
                                   if ($nuploads) {                                    if ($nuploads) {
                                         $output=~
                                             s/\<(input[^\>]+name=\"\Q$prefix\EHWFILE[^\>]+)\s*id\s*\=\s*[\'\"]*([^\'\"]+)[\'\"]*([^\)]*)\>/\<$1 id="$prefix$2" $3\>/gsi;
                                        ($turninpaths{$prefix},$multiresps{$prefix}) =                                          ($turninpaths{$prefix},$multiresps{$prefix}) = 
                                            &Apache::loncommon::get_turnedin_filepath($symb,$env{'user.name'},$env{'user.domain'});                                             &Apache::loncommon::get_turnedin_filepath($symb,$env{'user.name'},$env{'user.domain'});
                                        if ($turninparent eq '') {                                         if ($turninparent eq '') {
Line 485  ENDEXT Line 471  ENDEXT
                                   $output=~                                    $output=~
                                       s/\<(input[^\>]+\Qonfocus=\"javascript:disableAutoComplete\E)\(\'([^\']+)\'\)(;\")/\<$1('$idprefix$2')$3/gsi;                                        s/\<(input[^\>]+\Qonfocus=\"javascript:disableAutoComplete\E)\(\'([^\']+)\'\)(;\")/\<$1('$idprefix$2')$3/gsi;
                                   unless ($hastimer) {                                    unless ($hastimer) {
                                       if ($plainsrc =~ /$LONCAPA::assess_re/) {                                        if ($src =~ /$LONCAPA::assess_re/) {
                                           %Apache::lonhomework::history =                                            %Apache::lonhomework::history =
                                               &Apache::lonnet::restore($symb,$courseid,$domain,$name);                                                &Apache::lonnet::restore($symb,$courseid,$domain,$name);
                                           my $type = 'problem';                                            my $type = 'problem';
                                           if ($extension eq 'task') {                                            if ($src =~ /\.task$/) {
                                               $type = 'Task';                                                $type = 'Task';
                                           }                                            }
                                           my ($status,$accessmsg,$slot_name,$slot) =                                            my ($status,$accessmsg,$slot_name,$slot) =
Line 603  ENDEXT Line 589  ENDEXT
                       &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 626  ENDEXT Line 612  ENDEXT
   "\n</script>\n";    "\n</script>\n";
   }    }
                           if (($nforms) && ($nuploads)) {                            if (($nforms) && ($nuploads)) {
                               $allscript .= &Apache::lonhtmlcommon::file_submissionchk_js(\%turninpaths,\%multiresps).                                $allscript .= &Apache::lonhtmlcommon::file_submissionchk_js(\%turninpaths,\%multiresps);
                                             '<script type="text/javascript" '.  
                                             'src="/res/adm/includes/file_upload.js"></script>';  
                           }                            }
                           if (($nforms) && (&Apache::lonhtmlcommon::htmlareabrowser())) {                            if (($nforms) && (&Apache::lonhtmlcommon::htmlareabrowser())) {
                               my %textarea_args = (                                my %textarea_args = (
Line 692  ENDEXT Line 676  ENDEXT
                                   &add_countdown_timer($currdisp,$donebuttontime,$donebuttonextras);                                    &add_countdown_timer($currdisp,$donebuttontime,$donebuttonextras);
                               }                                }
                           }                            }
                           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) {
       my $fmtag = '<form name="lonhomework" method="post"  enctype="multipart/form-data"';        my $fmtag = '<form name="lonhomework" method="post"  enctype="multipart/form-data"';
Line 758  ENDEXT Line 725  ENDEXT
                           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,$hostname).'<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.'"');
     }      }
Line 848  ENDEXT Line 815  ENDEXT
                           $r->print(                            $r->print(
                   '<input name="all_submit" value="'.&mt('Submit All').'" type="'.                    '<input name="all_submit" value="'.&mt('Submit All').'" type="'.
   (($nforms>1)?'submit':'hidden').'"'.$class.' id="all_submit" />'.    (($nforms>1)?'submit':'hidden').'"'.$class.' id="all_submit" />'.
                           '<input type="hidden" name="all_submit_pressed" '.  
                           'id="all_submit_pressed" value="" />'.  
                           '<div id="msg_all_submit" style="display:none">'.                            '<div id="msg_all_submit" style="display:none">'.
                           &mt('Processing your submission ...').'</div></form>');                            &mt('Processing your submission ...').'</div></form>');
                       }                        }
Line 888  ENDEXT Line 853  ENDEXT
 }  }
   
 sub get_buttons {  sub get_buttons {
     my ($hash,$rid,$buttonshide,$hostname) = @_;      my ($hash,$rid) = @_;
   
     my $metainfo = '';      my $metainfo = '';
     my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});      my $esrc=&Apache::lonnet::declutter($hash->{'src_'.$rid});
Line 897  sub get_buttons { Line 862  sub get_buttons {
   $resid,    $resid,
   $hash->{'src_'.$rid});    $hash->{'src_'.$rid});
     unless ($env{'request.role.adv'}) {      unless ($env{'request.role.adv'}) {
         if ($buttonshide->{$symb} eq 'yes') {          if (&Apache::lonnet::EXT('resource.0.buttonshide',$symb)) {
             return;              return;
         }          }
     }      }
Line 958  sub get_buttons { Line 923  sub get_buttons {
  '</a>';   '</a>';
  }   }
     }      }
     if ($env{'request.course.id'}) {      if (($env{'request.course.id'}) && (&Apache::lonnet::allowed('mdc',$env{'request.course.id'}))) {
         my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};          my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
         my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};          my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
         my $file=&Apache::lonnet::declutter($hash->{'src_'.$rid});          my $file=&Apache::lonnet::declutter($hash->{'src_'.$rid});
         my $editbutton = '';          my ($cfile,$home,$switchserver,$forceedit,$forceview) =
         if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) {              &Apache::lonnet::can_edit_resource($file,$cnum,$cdom,$hash->{'src_'.$rid},$symb);
             my ($cfile,$home,$switchserver,$forceedit,$forceview) =          if ($cfile ne '') {
                 &Apache::lonnet::can_edit_resource($file,$cnum,$cdom,$hash->{'src_'.$rid},$symb);              my $jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver,
             if ($cfile ne '') {                                                                   $forceedit,1,$symb,undef,
                 my $jscall = &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,$switchserver,                                                                   &escape($env{'form.title'}));
                                                                      $forceedit,1,$symb,undef,              if ($jscall) {
                                                                      &escape($env{'form.title'}),  
                                                                      $hostname);  
                 if ($jscall) {  
                     $editbutton = 1;  
                     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>';  
                 }  
             }  
         }  
         if ((!$editbutton) && ($file=~/$LONCAPA::assess_re/)) {  
             my $url = &Apache::lonnet::clutter($file);  
             my $viewsrcbutton;  
             if ((&Apache::lonnet::allowed('cre','/')) &&  
                 (&Apache::lonnet::metadata($url,'sourceavail') eq 'open')) {  
                 $viewsrcbutton = 1;  
             } elsif (&Apache::lonnet::allowed('vxc',$env{'request.course.id'})) {  
                 if ($url =~ m{^\Q/res/$cdom/\E($LONCAPA::match_username)/}) {  
                     my $auname = $1;  
                     if (($env{'request.course.adhocsrcaccess'} ne '') &&  
                         (grep(/^\Q$auname\E$/,split(/,/,$env{'request.course.adhocsrcaccess'})))) {  
                         $viewsrcbutton = 1;  
                     }  
                 }  
             }  
             if ($viewsrcbutton) {  
                 my $icon = 'pcstr.png';                  my $icon = 'pcstr.png';
                 my $label = &mt('View Source');                  my $label = &mt('Edit');
                 my $title = &mt('View source code');                  my $title = &mt('Edit this resource');
                 my $jsrid = $rid;  
                 $jsrid =~ s/\./_/g;  
                 my $showurl = &escape(&Apache::lonenc::check_encrypt($url));  
                 my $pic = '<img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/'.$icon).'"'.                  my $pic = '<img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/'.$icon).'"'.
                           ' class="LC_icon" alt="'.$label.'" title="'.$title.'" />';                            ' class="LC_icon" alt="'.$label.'" title="'.$title.'" />';
                 $metainfo .= '&nbsp;<a href="javascript:open_source_'.$jsrid.'();">'.$pic.'</a>'."\n".                  $metainfo .= '&nbsp;<a href="javascript:'.$jscall.';">'.$pic.'</a>';
                              '<script type="text/javascript">'."\n".  
                              "function open_source_$jsrid() {\n".  
                              "  sourcewin=window.open('/adm/source?inhibitmenu=yes&viewonly=1&filename=$showurl','LONsource',".  
                              "'height=500,width=600,resizable=yes,location=no,menubar=no,toolbar=no,scrollbars=yes');\n".  
                              "}\n".  
                              "</script>\n";  
             }              }
         }          }
     }      }
Line 1037  sub add_countdown_timer { Line 964  sub add_countdown_timer {
             $donebuttontext = &mt('Done');              $donebuttontext = &mt('Done');
             $type = 'map';              $type = 'map';
         }          }
         $donebutton =          $donebutton = 
             &Apache::lonmenu::done_button_js($type,'','',$proctor,$donebuttontext);              &Apache::lonmenu::done_button_js($type,'','',$proctor,$donebuttontext);
     }      }
     unless ($env{'environment.icons'} eq 'iconsonly') {      unless ($env{'environment.icons'} eq 'iconsonly') {

Removed from v.1.111.2.10.2.1  
changed lines
  Added in v.1.118


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>