--- 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__