version 1.337, 2018/04/28 00:57:58
|
version 1.341, 2018/12/08 16:34:15
|
Line 145 use GDBM_File;
|
Line 145 use GDBM_File;
|
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
use HTML::Entities; |
use HTML::Entities; |
|
|
|
my $registered_cleanup; |
|
my $rosterupdates; |
|
|
sub redirect_user { |
sub redirect_user { |
my ($r,$title,$url,$msg) = @_; |
my ($r,$title,$url,$msg) = @_; |
Line 228 sub handler {
|
Line 230 sub handler {
|
$update = $then; |
$update = $then; |
} |
} |
|
|
|
$registered_cleanup=0; |
|
@{$rosterupdates}=(); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); |
|
|
# -------------------------------------------------- Check if setting hot list |
# -------------------------------------------------- Check if setting hot list |
Line 268 sub handler {
|
Line 272 sub handler {
|
|
|
# ================================================================== Roles Init |
# ================================================================== Roles Init |
if ($env{'form.selectrole'}) { |
if ($env{'form.selectrole'}) { |
|
if (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq '')) { |
|
if ($env{'form.ltitarget'} eq 'iframe') { |
|
&Apache::lonnet::appenv({'request.lti.target' => 'iframe'}); |
|
delete($env{'form.ltitarget'}); |
|
} |
|
} |
|
|
my $locknum=&Apache::lonnet::get_locks(); |
my $locknum=&Apache::lonnet::get_locks(); |
if ($locknum) { return 409; } |
if ($locknum) { return 409; } |
Line 649 ENDENTERKEY
|
Line 659 ENDENTERKEY
|
$cdom.'_'.$cnum); |
$cdom.'_'.$cnum); |
} |
} |
} |
} |
|
if (($env{'request.lti.login'}) && |
|
($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) { |
|
&process_lti($r,$cdom,$cnum); |
|
} |
$r->internal_redirect($dest); |
$r->internal_redirect($dest); |
} |
} |
return OK; |
return OK; |
Line 670 ENDENTERKEY
|
Line 684 ENDENTERKEY
|
if (($ferr) && ($tadv)) { |
if (($ferr) && ($tadv)) { |
&error_page($r,$ferr,$furl); |
&error_page($r,$ferr,$furl); |
} else { |
} else { |
|
if (($env{'request.lti.login'}) && |
|
($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) { |
|
&process_lti($r,$cdom,$cnum); |
|
} |
# Check to see if the user is a CC entering a course |
# Check to see if the user is a CC entering a course |
# for the first time |
# for the first time |
if ((($role eq 'cc') || ($role eq 'co')) |
if ((($role eq 'cc') || ($role eq 'co')) |
Line 1348 sub gather_roles {
|
Line 1366 sub gather_roles {
|
if (!$allowed) { |
if (!$allowed) { |
$button=0; |
$button=0; |
unless ($trustchecked{$tdom}) { |
unless ($trustchecked{$tdom}) { |
if ((&Apache::lonnet::will_trust('othcoau',$tdom,$env{'user.domain'})) && |
if ((&Apache::lonnet::will_trust('othcoau',$env{'user.domain'},$tdom)) && |
(&Apache::lonnet::will_trust('coremau',$env{'user.domain'},$tdom))) { |
(&Apache::lonnet::will_trust('coaurem',$tdom,$env{'user.domain'}))) { |
$willtrust{$tdom} = 1; |
$willtrust{$tdom} = 1; |
$trustchecked{$tdom} = 1; |
$trustchecked{$tdom} = 1; |
} |
} |
Line 3094 sub get_queued {
|
Line 3112 sub get_queued {
|
$output.'</fieldset></div><br clear="all" />'; |
$output.'</fieldset></div><br clear="all" />'; |
} |
} |
|
|
|
sub process_lti { |
|
my ($r,$cdom,$cnum) = @_; |
|
my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider'); |
|
my $uriscope = &LONCAPA::ltiutils::lti_provider_scope($env{'request.lti.uri'}, |
|
$cdom,$cnum); |
|
my $lonhost = $r->dir_config('lonHostID'); |
|
my $internet_names = &Apache::lonnet::get_internet_names($lonhost); |
|
if ($env{'request.lti.rosterid'} && |
|
$env{'request.lti.rosterurl'}) { |
|
if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') { |
|
if ($lti{$env{'request.lti.login'}}{'roster'}) { |
|
my @lcroles = ('in','ta','ep','st'); |
|
my @possibleroles; |
|
foreach my $role (@lcroles) { |
|
if (&Apache::lonnet::allowed('c'.$role,"$cdom/$cnum")) { |
|
push(@possibleroles,$role); |
|
} |
|
} |
|
my $owner = $env{'course.'.$cdom.'_'.$cnum.'.internal.courseowner'}; |
|
if ($owner eq $env{'user.name'}.':'.$env{'user.domain'}) { |
|
my $crstype = &Apache::loncommon::course_type($cdom.'_'.$cnum); |
|
if ($crstype eq 'Community') { |
|
unshift(@possibleroles,'co'); |
|
} else { |
|
unshift(@possibleroles,'cc'); |
|
} |
|
} |
|
if (@possibleroles) { |
|
push(@{$rosterupdates},{cid => $cdom.'_'.$cnum, |
|
lti => $env{'request.lti.login'}, |
|
ltiref => $lti{$env{'request.lti.login'}}, |
|
id => $env{'request.lti.rosterid'}, |
|
url => $env{'request.lti.rosterurl'}, |
|
sourcecrs => $env{'request.lti.sourcecrs'}, |
|
uriscope => $uriscope, |
|
possroles => \@possibleroles, |
|
intdoms => $internet_names, |
|
}); |
|
unless ($registered_cleanup) { |
|
my $handlers = $r->get_handlers('PerlCleanupHandler'); |
|
$r->set_handlers('PerlCleanupHandler' => |
|
[\<ienroll,@{$handlers}]); |
|
$registered_cleanup=1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if ($env{'request.lti.passbackid'} && |
|
$env{'request.lti.passbackurl'}) { |
|
if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') { |
|
if ($lti{$env{'request.lti.login'}}{'passback'}) { |
|
my ($pbnum,$error) = |
|
&LONCAPA::ltiutils::store_passbackurl($env{'request.lti.login'}, |
|
$env{'request.lti.passbackurl'}, |
|
$cdom,$cnum); |
|
if ($pbnum eq '') { |
|
$pbnum = $env{'request.lti.passbackurl'}; |
|
} |
|
&Apache::lonnet::put('nohist_'.$cdom.'_'.$cnum.'_passback', |
|
{"$uriscope\0$env{'request.lti.sourcecrs'}\0$env{'request.lti.login'}" => |
|
"$pbnum\0$env{'request.lti.passbackid'}"}); |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
sub ltienroll { |
|
if (ref($rosterupdates) eq 'ARRAY') { |
|
foreach my $item (@{$rosterupdates}) { |
|
if (ref($item) eq 'HASH') { |
|
&LONCAPA::ltiutils::batchaddroster($item); |
|
} |
|
} |
|
} |
|
} |
|
|
1; |
1; |
__END__ |
__END__ |
|
|