--- loncom/auth/lonlinkexit.pm 2022/06/30 21:04:13 1.1 +++ loncom/auth/lonlinkexit.pm 2022/07/07 15:28:08 1.2 @@ -1,7 +1,7 @@ # The LearningOnline Network # Re-launch guidance for deep linked access with username mismatch # -# $Id: lonlinkexit.pm,v 1.1 2022/06/30 21:04:13 raeburn Exp $ +# $Id: lonlinkexit.pm,v 1.2 2022/07/07 15:28:08 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,6 +33,7 @@ use lib '/home/httpd/lib/perl/'; use Apache::Constants qw(:common); use Apache::lonnet; use Apache::loncommon; +use Apache::lonnavmaps; use Apache::lonlocal; use LONCAPA; use CGI::Cookie(); @@ -49,9 +50,36 @@ sub handler { if ($env{'request.deeplink.target'} ne '') { $deeplinktarget = $env{'request.deeplink.target'}; } - if ($env{'request.linkprotexit'} =~ m{^https?://}) { - $exiturl = $env{'request.linkprotexit'}; - &js_escape(\$exiturl); + if ($env{'request.course.id'}) { + my ($deeplink_symb,$deeplink); + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + if (($cnum ne '') && ($cdom ne '')) { + $deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom); + if ($deeplink_symb) { + if ($deeplink_symb =~ /\.(page|sequence)$/) { + my $mapname = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($deeplink_symb))[2]); + my $navmap = Apache::lonnavmaps::navmap->new(); + if (ref($navmap)) { + $deeplink = $navmap->get_mapparam(undef,$mapname,'0.deeplink'); + } + } else { + $deeplink = &Apache::lonnet::EXT('resource.0.deeplink',$deeplink_symb); + } + if ($deeplink ne '') { + my ($state,$others,$listed,$scope,$protect,$display,$target,$exit) = split(/,/,$deeplink); + if ($exit) { + my ($show,$text) = split(/:/,$exit); + if ($show eq 'url') { + if ($env{'request.linkprotexit'} =~ m{^https?://}) { + $exiturl = $env{'request.linkprotexit'}; + &js_escape(\$exiturl); + } + } + } + } + } + } } } if (unlink("$lonidsdir/$handle.id")) {