--- loncom/auth/lonroles.pm 2021/11/28 19:18:00 1.357 +++ loncom/auth/lonroles.pm 2022/05/25 18:04:17 1.364 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.357 2021/11/28 19:18:00 raeburn Exp $ +# $Id: lonroles.pm,v 1.364 2022/05/25 18:04:17 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -181,7 +181,8 @@ ENDREDIR sub finish_loading_course { my ($r,$msg,$url) = @_; - my $link = ''; + my $link = ''; my $end_page = &Apache::loncommon::end_page(); my $js_url = &js_escape($url); $r->print(< $link $end_page @@ -277,7 +279,8 @@ sub handler { $update = $then; } - my ($norolelist,$blocked_by_ip,$blocked_type,$blocked_ipaddr); + my ($norolelist,$blocked_by_ip,$blocked_type,$clientip); + $clientip = &Apache::lonnet::get_requestor_ip($r); if (($env{'request.course.id'}) && ($env{'request.deeplink.login'})) { my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; @@ -355,16 +358,15 @@ sub handler { unless (defined($cached)) { my %domconfig = &Apache::lonnet::get_dom('configuration',['ipaccess'],$cdom); - $ipaccessref = &do_cache_new('ipaccess',$cdom,$domconfig{'ipaccess'},1800); + $ipaccessref = &Apache::lonnet::do_cache_new('ipaccess',$cdom,$domconfig{'ipaccess'},1800); } if (ref($ipaccessref) eq 'HASH') { - my $remote_ip = &Apache::lonnet::get_requestor_ip(); foreach my $id (keys(%{$ipaccessref})) { if (ref($ipaccessref->{$id}) eq 'HASH') { my $range = $ipaccessref->{$id}->{'ip'}; if ($range) { my $type = 'exclude'; - if (&Apache::lonnet::ip_match($remote_ip,$range)) { + if (&Apache::lonnet::ip_match($clientip,$range)) { $type = 'include'; } if (ref($ipaccessref->{$id}->{'courses'}) eq 'HASH') { @@ -386,9 +388,6 @@ sub handler { } } } - unless ($showrole) { - $blocked_ipaddr = $remote_ip; - } } } } @@ -783,7 +782,7 @@ ENDCLOSE $r->rflush(); my ($msg,$blockcrit,$critmsg_check); $critmsg_check = 1; - $blockcrit = &Apache::loncommon::blocking_status('alert',$cnum,$cdom,undef,1); + $blockcrit = &Apache::loncommon::blocking_status('alert',$clientip,$cnum,$cdom,undef,1); if ($blockcrit) { my $checkrole = "cm./$cdom/$cnum"; if ($csec ne '') { @@ -900,6 +899,9 @@ ENDCLOSE ($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) { &process_lti($r,$cdom,$cnum); } + if ($env{'request.deeplink.login'}) { + &set_deeplink_target($cnum,$cdom); + } $msg = '

'.&mt('Entering [_1] ...', $env{'course.'.$cdom.'_'.$cnum.'.description'}). '

'; @@ -931,6 +933,9 @@ ENDCLOSE ($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) { &process_lti($r,$cdom,$cnum); } + if ($env{'request.deeplink.login'}) { + &set_deeplink_target($cnum,$cdom); + } # Check to see if the user is a CC entering a course # for the first time if ((($role eq 'cc') || ($role eq 'co')) @@ -1354,7 +1359,7 @@ ENDHEADER } $r->print('

'. &mt('The [_1] you selected is not available for access with a [_2] role from your current IP address: [_3].', - lc($blocked_type),$blocked_role,$blocked_ipaddr). + lc($blocked_type),$blocked_role,$clientip). '

'); } } @@ -1994,7 +1999,7 @@ sub findcourse_advice { } else { $r->print('

'.&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'

'); if ($elapsed > 600) { - $r->print('

'.&mt('You may also have been assigned to a course in the time since you last logged-in, or checked for changes'). + $r->print('

'.&mt('You may also have been assigned to a course in the time since you last logged-in, or checked for changes.'). '
'. &mt('If that is the case you can use the "Check for changes" link in the gray Functions bar to update the list of your available course roles.').'

'); } @@ -3549,6 +3554,34 @@ sub ltienroll { } } +sub set_deeplink_target { + my ($cnum,$cdom) = @_; + if (($cnum ne '') && ($cdom ne '')) { + my $deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom); + if ($deeplink_symb ne '') { + my $deeplink; + 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'); + } + } elsif ($deeplink_symb ne '') { + $deeplink = &Apache::lonnet::EXT('resource.0.deeplink',$deeplink_symb); + } + if ($deeplink ne '') { + my ($state,$others,$listed,$scope,$protect,$display,$target) = split(/,/,$deeplink); + if ($target ne '') { + &Apache::lonnet::appenv({'request.deeplink.target' => $target}); + } elsif (exists($env{'request.deeplink.target'})) { + &Apache::lonnet::delenv('request.deeplink.target'); + } + } + } + } + return; +} + 1; __END__