--- rat/lonpageflip.pm 2017/11/16 13:42:01 1.97 +++ rat/lonpageflip.pm 2021/02/18 14:48:02 1.102 @@ -2,7 +2,7 @@ # # Page flip handler # -# $Id: lonpageflip.pm,v 1.97 2017/11/16 13:42:01 raeburn Exp $ +# $Id: lonpageflip.pm,v 1.102 2021/02/18 14:48:02 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -102,6 +102,9 @@ sub move { my ($next,$endupmap,$direction) = @_; my $safecount=0; my $allowed=0; + my $deeplinkonly=0; + my $prev=$next; + my ($prevmapid)=split(/\./,$next); do { ($next,$endupmap)=&get_next_possible_move($next,$endupmap,$direction); @@ -115,14 +118,35 @@ sub move { my $priv = &Apache::lonnet::allowed('bre',$url,$symb); $allowed = (($priv eq 'F') || ($priv eq '2')); } + $deeplinkonly = 0; + if ($hash{'deeplinkonly_'.$next}) { + my ($value,$level) = split(/:/,$hash{'deeplinkonly_'.$next}); + if ($level eq 'resource') { + $deeplinkonly = 1; + } elsif ($level eq 'map') { + if ($mapid != $prevmapid) { + $deeplinkonly = 1; + } + } + } elsif ($hash{'deeplinkonly_'.$prev}) { + my ($value,$level) = split(/:/,$hash{'deeplinkonly_'.$prev}); + if ($level eq 'resource') { + $deeplinkonly = 1; + } elsif ($level eq 'map') { + if ($mapid != $prevmapid) { + $deeplinkonly = 1; + } + } + } $safecount++; } while ( ($next) && ($next!~/\,/) && ( (!$hash{'src_'.$next}) || ( - (!$env{'request.role.adv'}) - && $hash{'randomout_'.$next} + (!$env{'request.role.adv'}) + && (($hash{'randomout_'.$next}) + || ($deeplinkonly)) ) || (!$allowed) ) @@ -289,11 +313,17 @@ sub check_http_req { if (($$srcref =~ m{^\Q/public/$cdom/$cnum/syllabus\E($|\?)}) && ($ENV{'SERVER_PORT'} == 443) && ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) { - $$srcref .= (($$srcref =~/\?/)? '&':'?') . 'usehttp=1'; - $usehttp = 1; + unless (&Apache::lonnet::uses_sts()) { + $$srcref .= (($$srcref =~/\?/)? '&':'?') . 'usehttp=1'; + $usehttp = 1; + } } elsif (($$srcref =~ m{^\Q/adm/wrapper/ext/\E(?!https:)}) && ($ENV{'SERVER_PORT'} == 443)) { - $usehttp = 1; + unless (&Apache::lonnet::uses_sts()) { + my ($url,$anchor) = ($$srcref =~ /^([^\#]+)(?:|(\#[^\#]+))$/); + $$srcref = $url . (($$srcref =~/\?/)? '&':'?') . 'usehttp=1' .$anchor; + $usehttp = 1; + } } } return $usehttp; @@ -338,7 +368,7 @@ sub handler { my $multichoice=0; my %multichoicehash=(); my %prog_state=(); - my ($redirecturl,$redirectsymb,$enc,$anchor); + my ($redirecturl,$redirectsymb,$enc,$anchor,$deeplinklevel); my $next=''; my $hostname = $r->hostname(); my @possibilities=(); @@ -401,12 +431,12 @@ sub handler { my $preamble = '
'.$lt{'explain'}.'
'); + &Apache::loncommon::start_page('No Resource')); + if ($deeplinklevel eq 'resource') { + $r->print(''.$lt{'deeplinkres'}.'
'); + } elsif ($deeplinklevel eq 'map') { + $r->print(''.$lt{'deeplinkmap'}.'
'); + } else { + $r->print(''.$lt{'explain'}.'
'); + } } } } unless (($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') || ($env{'request.role.adv'})) { - if ((!@possibilities) && ($reinitcheck)) { + if ($deeplinklevel) { + $r->print( + &Apache::lonhtmlcommon::actionbox( + [''.$lt{'back'}.''])); + } elsif ((!@possibilities) && ($reinitcheck)) { $r->print( &Apache::lonhtmlcommon::actionbox( [''.$lt{'nav'}.''