--- loncom/interface/loncommon.pm 2021/06/15 20:52:26 1.1361 +++ loncom/interface/loncommon.pm 2021/07/19 15:48:26 1.1362 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.1361 2021/06/15 20:52:26 raeburn Exp $ +# $Id: loncommon.pm,v 1.1362 2021/07/19 15:48:26 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -9142,9 +9142,33 @@ sub menucoll_in_effect { my ($menucoll,$deeplinkmenu,%menu); if ($env{'request.course.id'}) { $menucoll = $env{'course.'.$env{'request.course.id'}.'.menudefault'}; - if (($env{'request.deeplink.login'}) && - ($env{'request.noversionuri'} =~ m{^/(res|uploaded)/})) { - my $deeplink = &Apache::lonnet::EXT('resource.0.deeplink'); + if ($env{'request.deeplink.login'}) { + my ($deeplink_symb,$deeplink); + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + if ($env{'request.noversionuri'} =~ m{^/(res|uploaded)/}) { + if ($env{'request.noversionuri'} =~ /\.(page|sequence)$/) { + my $navmap = Apache::lonnavmaps::navmap->new(); + if (ref($navmap)) { + $deeplink = $navmap->get_mapparam(undef, + &Apache::lonnet::declutter($env{'request.noversionuri'}), + '0.deeplink'); + } + } else { + $deeplink = &Apache::lonnet::EXT('resource.0.deeplink'); + } + } else { + $deeplink_symb = &deeplink_login_symb($cnum,$cdom); + 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 ($listed,$scope,$access,$display) = split(/,/,$deeplink); if ($display =~ /^\d+$/) { @@ -9160,6 +9184,35 @@ sub menucoll_in_effect { return ($menucoll,$deeplinkmenu,\%menu); } +sub deeplink_login_symb { + my ($cnum,$cdom) = @_; + my $login_symb; + if ($env{'request.deeplink.login'}) { + if ($env{'request.deeplink.login'} =~ m{^\Q/tiny/$cdom/\E(\w+)$}) { + my $key = $1; + my ($tinyurl,$login); + my ($result,$cached)=&Apache::lonnet::is_cached_new('tiny',$cdom."\0".$key); + if (defined($cached)) { + $tinyurl = $result; + } else { + my $configuname = &Apache::lonnet::get_domainconfiguser($cdom); + my %currtiny = &Apache::lonnet::get('tiny',[$key],$cdom,$configuname); + if ($currtiny{$key} ne '') { + $tinyurl = $currtiny{$key}; + &Apache::lonnet::do_cache_new('tiny',$cdom."\0".$key,$currtiny{$key},600); + } + } + if ($tinyurl ne '') { + my ($cnumreq,$posslogin) = split(/\&/,$tinyurl); + if ($cnumreq eq $cnum) { + $login_symb = $posslogin; + } + } + } + } + return $login_symb; +} + sub wishlist_window { return(<<'ENDWISHLIST');