Diff for /rat/lonpageflip.pm between versions 1.102 and 1.105

version 1.102, 2021/02/18 14:48:02 version 1.105, 2021/07/19 14:26:40
Line 99  sub hash_src { Line 99  sub hash_src {
 }  }
   
 sub move {  sub move {
     my ($next,$endupmap,$direction) = @_;      my ($next,$endupmap,$direction,$firstres) = @_;
     my $safecount=0;      my $safecount=0;
     my $allowed=0;      my $allowed=0;
     my $deeplinkonly=0;      my $deeplinkonly=0;
Line 116  sub move { Line 116  sub move {
     $allowed = 0;      $allowed = 0;
  } else {   } else {
     my $priv = &Apache::lonnet::allowed('bre',$url,$symb);      my $priv = &Apache::lonnet::allowed('bre',$url,$symb);
     $allowed = (($priv eq 'F') || ($priv eq '2'));      $allowed = (($priv eq 'F') || ($priv eq '2') || ($priv eq 'A'));
  }   }
         $deeplinkonly = 0;          $deeplinkonly = 0;
         if ($hash{'deeplinkonly_'.$next}) {          if ($hash{'deeplinkonly_'.$next}) {
Line 128  sub move { Line 128  sub move {
                     $deeplinkonly = 1;                      $deeplinkonly = 1;
                 }                  }
             }              }
         } elsif ($hash{'deeplinkonly_'.$prev}) {          } elsif (($hash{'deeplinkonly_'.$prev}) && (!$firstres)) {
             my ($value,$level) = split(/:/,$hash{'deeplinkonly_'.$prev});              my ($value,$level) = split(/:/,$hash{'deeplinkonly_'.$prev});
             if ($level eq 'resource') {              if ($level eq 'resource') {
                 $deeplinkonly = 1;                  $deeplinkonly = 1;
Line 256  sub first_accessible_resource { Line 256  sub first_accessible_resource {
     if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',      if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db',
     &GDBM_READER(),0640)) {      &GDBM_READER(),0640)) {
  $furl=$hash{'first_url'};   $furl=$hash{'first_url'};
  my %args;   my (%args,$url,$argstr);
  my ($url,$args) = split(/\?/,$furl);   if ($furl =~ m{^/enc/}) {
  foreach my $pair (split(/\&/,$args)) {      ($url,$argstr) = split(/\?/,&Apache::lonenc::unencrypted($furl));
    } else {
       ($url,$argstr) = split(/\?/,$furl);
    }
    foreach my $pair (split(/\&/,$argstr)) {
     my ($name,$value) = split(/=/,$pair);      my ($name,$value) = split(/=/,$pair);
     $args{&unescape($name)} = &unescape($value);      $args{&unescape($name)} = &unescape($value);
  }   }
         if (!&Apache::lonnet::allowed('bre',$url,$args{'symb'})) {          my $priv = &Apache::lonnet::allowed('bre',$url,$args{'symb'});
           my $allowed = (($priv eq 'F') || ($priv eq '2') || ($priv eq 'A'));
           if (!$allowed) {
 # Wow, we cannot see this ... move forward to the next one that we can see  # Wow, we cannot see this ... move forward to the next one that we can see
     my ($newrid,$newmap)=&move($hash{'first_rid'},$hash{'first_mapurl'},'forward');      my ($newrid,$newmap)=&move($hash{'first_rid'},$hash{'first_mapurl'},'forward',1);
 # Build the new URL  # Build the new URL
     my ($newmapid,$newresid)=split(/\./,$newrid);              if ($newrid eq '') {
     my $symb=&Apache::lonnet::encode_symb($newmap,$newresid,$hash{'src_'.$newrid});                  $furl = '/adm/navmaps';
     $furl=&add_get_param($hash{'src_'.$newrid},{ 'symb' => $symb });              } else {
     if ($hash{'encrypted_'.$newrid}) {          my ($newmapid,$newresid)=split(/\./,$newrid);
  $furl=&Apache::lonenc::encrypted($furl);          my $symb=&Apache::lonnet::encode_symb($newmap,$newresid,$hash{'src_'.$newrid});
           $furl=&add_get_param($hash{'src_'.$newrid},{ 'symb' => $symb });
           if ($hash{'encrypted_'.$newrid}) {
       $furl=&Apache::lonenc::encrypted($furl);
           }
     }      }
  }          }
  untie(%hash);   untie(%hash);
  return $furl;   return $furl;
     } else {      } else {
Line 304  sub first_answerable_ressymb { Line 314  sub first_answerable_ressymb {
 }  }
   
 sub check_http_req {  sub check_http_req {
     my ($srcref) = @_;      my ($srcref,$hostname) = @_;
     return unless (ref($srcref) eq 'SCALAR');      return unless (ref($srcref) eq 'SCALAR');
     my $usehttp;      my $usehttp;
     if ($env{'request.course.id'}) {      if ($env{'request.course.id'}) {
Line 313  sub check_http_req { Line 323  sub check_http_req {
         if (($$srcref =~ m{^\Q/public/$cdom/$cnum/syllabus\E($|\?)}) &&          if (($$srcref =~ m{^\Q/public/$cdom/$cnum/syllabus\E($|\?)}) &&
             ($ENV{'SERVER_PORT'} == 443) &&              ($ENV{'SERVER_PORT'} == 443) &&
             ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) {              ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) {
             unless (&Apache::lonnet::uses_sts()) {              unless ((&Apache::lonnet::uses_sts()) ||
                       (&Apache::lonnet::waf_allssl($hostname))) {
                 $$srcref .= (($$srcref =~/\?/)? '&':'?') . 'usehttp=1';                  $$srcref .= (($$srcref =~/\?/)? '&':'?') . 'usehttp=1';
                 $usehttp = 1;                  $usehttp = 1;
             }              }
         } elsif (($$srcref =~ m{^\Q/adm/wrapper/ext/\E(?!https:)}) &&          } elsif (($$srcref =~ m{^\Q/adm/wrapper/ext/\E(?!https:)}) &&
                  ($ENV{'SERVER_PORT'} == 443)) {                   ($ENV{'SERVER_PORT'} == 443)) {
             unless (&Apache::lonnet::uses_sts()) {              unless ((&Apache::lonnet::uses_sts()) ||
                       (&Apache::lonnet::waf_allssl($hostname))) {
                 my ($url,$anchor) = ($$srcref =~ /^([^\#]+)(?:|(\#[^\#]+))$/);                  my ($url,$anchor) = ($$srcref =~ /^([^\#]+)(?:|(\#[^\#]+))$/);
                 $$srcref = $url . (($$srcref =~/\?/)? '&':'?') . 'usehttp=1' .$anchor;                   $$srcref = $url . (($$srcref =~/\?/)? '&':'?') . 'usehttp=1' .$anchor; 
                 $usehttp = 1;                  $usehttp = 1;
Line 390  sub handler { Line 402  sub handler {
           }            }
       } elsif ($direction eq 'firstanswerable') {        } elsif ($direction eq 'firstanswerable') {
           my $furl = &first_answerable_ressymb();            my $furl = &first_answerable_ressymb();
           my $usehttp = &check_http_req(\$furl);            my $usehttp = &check_http_req(\$furl,$hostname);
           if (($usehttp) && ($hostname ne '')) {            if (($usehttp) && ($hostname ne '')) {
               $furl='http://'.$hostname.$furl;                $furl='http://'.$hostname.$furl;
           } else {            } else {
Line 455  sub handler { Line 467  sub handler {
       }        }
       if ($direction eq 'firstres') {        if ($direction eq 'firstres') {
   my $furl=&first_accessible_resource();    my $furl=&first_accessible_resource();
           my $usehttp = &check_http_req(\$furl);            my $usehttp = &check_http_req(\$furl,$hostname);
           if (($usehttp) && ($hostname ne '')) {            if (($usehttp) && ($hostname ne '')) {
               $furl='http://'.$hostname.$furl;                $furl='http://'.$hostname.$furl;
           } else {            } else {
Line 481  sub handler { Line 493  sub handler {
     $id=$hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id;      $id=$hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id;
     $newloc=$hash{'src_'.$id};      $newloc=$hash{'src_'.$id};
     if ($newloc) {      if ($newloc) {
                 $usehttp = &check_http_req(\$newloc);                  $usehttp = &check_http_req(\$newloc,$hostname);
  if ($hash{'encrypted_'.$id}) {    if ($hash{'encrypted_'.$id}) { 
                     $newloc=&Apache::lonenc::encrypted($newloc);                      $newloc=&Apache::lonenc::encrypted($newloc);
                 }                  }
Line 623  sub handler { Line 635  sub handler {
 # ------------------------------------- Check for and display critical messages  # ------------------------------------- Check for and display critical messages
                   my ($redirect, $url) = &Apache::loncommon::critical_redirect(300,'flip');                    my ($redirect, $url) = &Apache::loncommon::critical_redirect(300,'flip');
                   unless ($redirect) {                    unless ($redirect) {
                       my $usehttp = &check_http_req(\$redirecturl);                        my $usehttp = &check_http_req(\$redirecturl,$hostname);
                       if (($usehttp) && ($hostname ne '')) {                        if (($usehttp) && ($hostname ne '')) {
                           $url='http://'.$hostname.$redirecturl;                            $url='http://'.$hostname.$redirecturl;
                       } else {                        } else {
Line 690  $lt{'pick'}: Line 702  $lt{'pick'}:
 ENDSTART  ENDSTART
                      foreach my $id (@possibilities) {                       foreach my $id (@possibilities) {
                         my $src = $multichoicehash{'src_'.$id};                          my $src = $multichoicehash{'src_'.$id};
                         my $usehttp = &check_http_req(\$src);                          my $usehttp = &check_http_req(\$src,$hostname);
                         if (($usehttp) && ($hostname ne '')) {                          if (($usehttp) && ($hostname ne '')) {
                             $src = 'http://'.$hostname.$src;                              $src = 'http://'.$hostname.$src;
                         }                          }

Removed from v.1.102  
changed lines
  Added in v.1.105


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