version 1.269.2.42, 2024/12/29 02:02:29
|
version 1.358, 2021/11/30 14:16:13
|
Line 140 use Apache::lonnavdisplay();
|
Line 140 use Apache::lonnavdisplay();
|
use Apache::loncoursequeueadmin; |
use Apache::loncoursequeueadmin; |
use Apache::longroup; |
use Apache::longroup; |
use Apache::lonrss; |
use Apache::lonrss; |
|
use Apache::lonplacementtest; |
use GDBM_File; |
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 start_loading_course { |
sub start_loading_course { |
my ($r,$title) = @_; |
my ($r,$title) = @_; |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
Line 177 ENDREDIR
|
Line 181 ENDREDIR
|
|
|
sub finish_loading_course { |
sub finish_loading_course { |
my ($r,$msg,$url) = @_; |
my ($r,$msg,$url) = @_; |
my $link = '<div id="LC_course_loaded" style="display:none"><a href="'. |
my $link = '<div id="LC_course_loaded" style="display:none"><a href="'.$url.'">'.&mt('Continue').'</a></div>'; |
&HTML::Entities::encode($url,'"<>&').'">'.&mt('Continue').'</a></div>'; |
|
my $end_page = &Apache::loncommon::end_page(); |
my $end_page = &Apache::loncommon::end_page(); |
my $js_url = &js_escape($url); |
my $js_url = &js_escape($url); |
$r->print(<<END); |
$r->print(<<END); |
Line 192 $msg
|
Line 195 $msg
|
var url = "$js_url"; |
var url = "$js_url"; |
\$(location).attr('href',url); |
\$(location).attr('href',url); |
}); |
}); |
// ]]> |
|
</script> |
</script> |
$link |
$link |
$end_page |
$end_page |
Line 206 sub redirect_user {
|
Line 208 sub redirect_user {
|
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::no_cache($r); |
&Apache::loncommon::no_cache($r); |
$r->send_http_header; |
$r->send_http_header; |
my $swinfo=&Apache::lonmenu::rawconfig(); |
|
|
|
# Breadcrumbs |
my $start_page; |
my $brcrum = [{'href' => $url, |
if ($env{'request.lti.login'}) { |
'text' => 'Switching Role'},]; |
$start_page = &Apache::loncommon::start_page(undef,undef, |
my $start_page = &Apache::loncommon::start_page('Switching Role',undef, |
{'redirect' => [0,$url],}).$msg; |
{'redirect' => [1,$url], |
} else { |
'bread_crumbs' => $brcrum,}); |
# Breadcrumbs |
my $end_page = &Apache::loncommon::end_page(); |
my $brcrum = [{'href' => $url, |
|
'text' => 'Switching Role'},]; |
|
$start_page = &Apache::loncommon::start_page('Switching Role',undef, |
|
{'redirect' => [1,$url], |
|
'bread_crumbs' => $brcrum,}). |
|
"\n<p>$msg</p>"; |
|
} |
|
my $end_page = &Apache::loncommon::end_page(); |
|
|
# Note to style police: |
# Note to style police: |
# This must only replace the spaces, nothing else, or it bombs elsewhere. |
# This must only replace the spaces, nothing else, or it bombs elsewhere. |
$url=~s/ /\%20/g; |
$url=~s/ /\%20/g; |
$r->print(<<ENDREDIR); |
$r->print(<<ENDREDIR); |
$start_page |
$start_page |
<script type="text/javascript"> |
|
// <![CDATA[ |
|
$swinfo |
|
// ]]> |
|
</script> |
|
<p>$msg</p> |
|
$end_page |
$end_page |
ENDREDIR |
ENDREDIR |
return; |
return; |
Line 257 sub handler {
|
Line 259 sub handler {
|
my $r = shift; |
my $r = shift; |
|
|
# Check for critical messages and redirect if present. |
# Check for critical messages and redirect if present. |
my ($redirect,$url) = &Apache::loncommon::critical_redirect(300); |
my ($redirect,$url) = &Apache::loncommon::critical_redirect(300,'roles'); |
if ($redirect) { |
if ($redirect) { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->header_out(Location => $url); |
$r->header_out(Location => $url); |
Line 275 sub handler {
|
Line 277 sub handler {
|
$update = $then; |
$update = $then; |
} |
} |
|
|
my ($blocked_by_ip,$blocked_type,$clientip); |
my ($norolelist,$blocked_by_ip,$blocked_type,$blocked_ipaddr); |
$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'}; |
|
my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'}; |
|
my $deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom); |
|
if ($deeplink_symb) { |
|
my ($menucoll,$deeplinkmenu,$menuref) = &Apache::loncommon::menucoll_in_effect(); |
|
if (ref($menuref) eq 'HASH') { |
|
unless (($menuref->{'role'}) || ($env{'request.role.adv'})) { |
|
foreach my $envkey (keys(%env)) { |
|
next unless ($envkey =~ /^form\./); |
|
if ($envkey =~ m{\./($match_domain)/($match_courseid)(?:/(\w+)|$)}) { |
|
unless (($1 eq $cdom) && ($2 eq $cnum)) { |
|
delete($env{$envkey}); |
|
} |
|
} |
|
} |
|
if ($env{'form.selectrole'}) { |
|
if ($env{'form.switchrole'} =~ m{\./($match_domain)/($match_courseid)(?:/(\w+)|$)}) { |
|
unless (($1 eq $cdom) && ($2 eq $cnum)) { |
|
delete($env{'form.selectrole'}); |
|
delete($env{'form.switchrole'}); |
|
} |
|
} elsif ($env{'form.newrole'} =~ m{\./($match_domain)/($match_courseid)(?:/(\w+)|$)}) { |
|
unless (($1 eq $cdom) && ($2 eq $cnum)) { |
|
delete($env{'form.selectrole'}); |
|
delete($env{'form.newrole'}); |
|
} |
|
} |
|
} |
|
$norolelist = 1; |
|
} |
|
} |
|
} |
|
} |
|
|
if ($env{'form.selectrole'}) { |
if ($env{'form.selectrole'}) { |
my ($role,$cdom,$cnum,$rest); |
my ($role,$cdom,$cnum,$rest); |
Line 322 sub handler {
|
Line 358 sub handler {
|
$ipaccessref = &Apache::lonnet::do_cache_new('ipaccess',$cdom,$domconfig{'ipaccess'},1800); |
$ipaccessref = &Apache::lonnet::do_cache_new('ipaccess',$cdom,$domconfig{'ipaccess'},1800); |
} |
} |
if (ref($ipaccessref) eq 'HASH') { |
if (ref($ipaccessref) eq 'HASH') { |
|
my $remote_ip = &Apache::lonnet::get_requestor_ip(); |
foreach my $id (keys(%{$ipaccessref})) { |
foreach my $id (keys(%{$ipaccessref})) { |
if (ref($ipaccessref->{$id}) eq 'HASH') { |
if (ref($ipaccessref->{$id}) eq 'HASH') { |
my $range = $ipaccessref->{$id}->{'ip'}; |
my $range = $ipaccessref->{$id}->{'ip'}; |
if ($range) { |
if ($range) { |
my $type = 'exclude'; |
my $type = 'exclude'; |
if (&Apache::lonnet::ip_match($clientip,$range)) { |
if (&Apache::lonnet::ip_match($remote_ip,$range)) { |
$type = 'include'; |
$type = 'include'; |
} |
} |
if (ref($ipaccessref->{$id}->{'courses'}) eq 'HASH') { |
if (ref($ipaccessref->{$id}->{'courses'}) eq 'HASH') { |
Line 349 sub handler {
|
Line 386 sub handler {
|
} |
} |
} |
} |
} |
} |
|
unless ($showrole) { |
|
$blocked_ipaddr = $remote_ip; |
|
} |
} |
} |
} |
} |
} |
} |
Line 361 sub handler {
|
Line 401 sub handler {
|
} |
} |
} |
} |
|
|
|
$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 394 sub handler {
|
Line 436 sub handler {
|
|
|
my $envkey; |
my $envkey; |
my %dcroles = (); |
my %dcroles = (); |
my %helpdeskroles = (); |
my %helpdeskroles = (); |
my ($numdc,$numhelpdesk,$numadhoc) = |
my ($numdc,$numhelpdesk,$numadhoc) = |
&check_for_adhoc(\%dcroles,\%helpdeskroles,$update,$then); |
&check_for_adhoc(\%dcroles,\%helpdeskroles,$update,$then); |
my $loncaparev = $r->dir_config('lonVersion'); |
my $loncaparev = $r->dir_config('lonVersion'); |
|
|
# ================================================================== 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 453 sub handler {
|
Line 501 sub handler {
|
if ($custom_adhoc) { |
if ($custom_adhoc) { |
my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($cdom.'_'.$cnum,1); |
my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($cdom.'_'.$cnum,1); |
if (ref($possroles) eq 'ARRAY') { |
if (ref($possroles) eq 'ARRAY') { |
if (grep(/^\Q$rolename\E$/,@{$possroles})) { |
if (grep(/^\Q$rolename\E$/,@{$possroles})) { |
if (&Apache::lonnet::check_adhoc_privs($cdom,$cnum,$update,$refresh,$now, |
if (&Apache::lonnet::check_adhoc_privs($cdom,$cnum,$update,$refresh,$now, |
"cr/$cdom/$cdom".'-domainconfig/'.$rolename,undef,$sec)) { |
"cr/$cdom/$cdom".'-domainconfig/'.$rolename,undef,$sec)) { |
&Apache::lonnet::appenv({"environment.internal.$cdom.$cnum.cr/$cdom/$cdom".'-domainconfig/'."$rolename.adhoc" => time}); |
&Apache::lonnet::appenv({"environment.internal.$cdom.$cnum.cr/$cdom/$cdom".'-domainconfig/'."$rolename.adhoc" => time}); |
Line 465 sub handler {
|
Line 513 sub handler {
|
# Check if user is a DC trying to enter a course or author space and needs privs to be created |
# Check if user is a DC trying to enter a course or author space and needs privs to be created |
# Check if user is a DH or DA trying to enter a course and needs privs to be created |
# Check if user is a DH or DA trying to enter a course and needs privs to be created |
foreach my $envkey (keys(%env)) { |
foreach my $envkey (keys(%env)) { |
if ($numdc) { |
|
# Is this an ad-hoc Coordinator role? |
# Is this an ad-hoc Coordinator role? |
|
if ($numdc) { |
if (my ($ccrole,$domain,$coursenum) = |
if (my ($ccrole,$domain,$coursenum) = |
($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) { |
($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) { |
if ($dcroles{$domain}) { |
if ($dcroles{$domain}) { |
Line 557 sub handler {
|
Line 605 sub handler {
|
} |
} |
last; |
last; |
} |
} |
} |
} |
} |
} |
} |
} |
|
|
foreach $envkey (keys(%env)) { |
foreach $envkey (keys(%env)) { |
next if ($envkey!~/^user\.role\./); |
next if ($envkey!~/^user\.role\./); |
my ($where,$trolecode,$role,$tstatus,$tend,$tstart); |
my ($where,$trolecode,$role,$tstatus,$tend,$tstart); |
Line 639 sub handler {
|
Line 686 sub handler {
|
$env{'user.name'}, |
$env{'user.name'}, |
&mt('Assigned from [_1] at [_2] for [_3]' |
&mt('Assigned from [_1] at [_2] for [_3]' |
,$ip |
,$ip |
,&Apache::lonlocal::locallocaltime($now) |
,&Apache::lonlocal::locallocaltime() |
,$trolecode) |
,$trolecode) |
); |
); |
unless ($assignresult eq 'ok') { |
unless ($assignresult eq 'ok') { |
Line 734 ENDCLOSE
|
Line 781 ENDCLOSE
|
my %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,undef,$preamble); |
my %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,undef,$preamble); |
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Loading ...')); |
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Loading ...')); |
$r->rflush(); |
$r->rflush(); |
my ($msg,$critmsg_check); |
my ($msg,$blockcrit,$critmsg_check); |
$critmsg_check = 1; |
$critmsg_check = 1; |
|
$blockcrit = &Apache::loncommon::blocking_status('alert',$cnum,$cdom,undef,1); |
|
if ($blockcrit) { |
|
my $checkrole = "cm./$cdom/$cnum"; |
|
if ($csec ne '') { |
|
$checkrole .= "/$csec"; |
|
} |
|
unless ((&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) && |
|
($trolecode !~ m{^st\./$cdom/$cnum})) { |
|
$critmsg_check = 0; |
|
} |
|
} |
my ($furl,$ferr)= |
my ($furl,$ferr)= |
&Apache::lonuserstate::readmap($cdom.'/'.$cnum,$critmsg_check); |
&Apache::lonuserstate::readmap($cdom.'/'.$cnum,$critmsg_check); |
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Finished!')); |
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Finished!')); |
Line 746 ENDCLOSE
|
Line 804 ENDCLOSE
|
$furl = '/adm/roles?tryagain=1'; |
$furl = '/adm/roles?tryagain=1'; |
} else { |
} else { |
&Apache::lonnet::appenv({'request.course.timechecked'=>$now}); |
&Apache::lonnet::appenv({'request.course.timechecked'=>$now}); |
unless (($env{'form.switchrole'}) || |
unless (($env{'form.switchrole'}) || |
($env{"environment.internal.$cdom.$cnum.$role.adhoc"})) { |
($env{"environment.internal.$cdom.$cnum.$role.adhoc"})) { |
&Apache::lonnet::put('nohist_crslastlogin', |
&Apache::lonnet::put('nohist_crslastlogin', |
{$env{'user.name'}.':'.$env{'user.domain'}. |
{$env{'user.name'}.':'.$env{'user.domain'}. |
Line 788 ENDCLOSE
|
Line 846 ENDCLOSE
|
} |
} |
if (($env{'form.orgurl'}) && |
if (($env{'form.orgurl'}) && |
($env{'form.orgurl'}!~/^\/adm\/flip/) && |
($env{'form.orgurl'}!~/^\/adm\/flip/) && |
($env{'form.orgurl'} ne '/adm/roles')) { |
($env{'form.orgurl'} ne '/adm/roles')) { |
my $dest=$env{'form.orgurl'}; |
my $dest=$env{'form.orgurl'}; |
if ($env{'form.symb'}) { |
if ($env{'form.symb'}) { |
if ($dest =~ /\?/) { |
if ($dest =~ /\?/) { |
Line 809 ENDCLOSE
|
Line 867 ENDCLOSE
|
} |
} |
} |
} |
if (($ferr) && ($tadv)) { |
if (($ferr) && ($tadv)) { |
&error_page($r,$ferr,$furl); |
&error_page($r,$ferr,$furl); |
} else { |
} else { |
if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { |
if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { |
if (($env{'form.orgurl'} ne '') && ($env{'form.symb'} ne '')) { |
if (($env{'form.orgurl'} ne '') && ($env{'form.symb'} ne '')) { |
unless (&Apache::lonnet::symbverify($env{'form.symb'},$env{'form.orgurl'})) { |
unless (&Apache::lonnet::symbverify($env{'form.symb'},$env{'form.orgurl'})) { |
$dest=$env{'form.orgurl'}; |
$dest=$env{'form.orgurl'}; |
} |
} |
} |
} |
} |
} |
if ($dest =~ m{^/adm/coursedocs\?folderpath}) { |
if ($dest =~ m{^/adm/coursedocs\?folderpath}) { |
if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { |
if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { |
Line 838 ENDCLOSE
|
Line 896 ENDCLOSE
|
&Apache::loncommon::end_page()); |
&Apache::loncommon::end_page()); |
} |
} |
} else { |
} else { |
|
if (($env{'request.lti.login'}) && |
|
($env{'request.lti.rosterid'} || $env{'request.lti.passbackid'})) { |
|
&process_lti($r,$cdom,$cnum); |
|
} |
$msg = '<p>'.&mt('Entering [_1] ...', |
$msg = '<p>'.&mt('Entering [_1] ...', |
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
'</p>'; |
'</p>'; |
Line 850 ENDCLOSE
|
Line 912 ENDCLOSE
|
if (!$env{'request.course.id'}) { |
if (!$env{'request.course.id'}) { |
&Apache::lonnet::appenv( |
&Apache::lonnet::appenv( |
{"request.course.id" => $cdom.'_'.$cnum}); |
{"request.course.id" => $cdom.'_'.$cnum}); |
} |
} |
if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } |
if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } |
&Apache::lonnet::appenv({'request.role.adv'=>$tadv}); |
&Apache::lonnet::appenv({'request.role.adv'=>$tadv}); |
if ($ferr) { |
if ($ferr) { |
if ($tadv) { |
if ($tadv) { |
&error_page($r,$ferr,$furl); |
&error_page($r,$ferr,$furl); |
} else { |
} else { |
$r->print('<p class="LC_error">'. |
$r->print('<p class="LC_error">'. |
&mt('Could not initialize [_1] at this time.', |
&mt('Could not initialize [_1] at this time.', |
Line 865 ENDCLOSE
|
Line 927 ENDCLOSE
|
&Apache::loncommon::end_page()); |
&Apache::loncommon::end_page()); |
} |
} |
} 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 872 ENDCLOSE
|
Line 938 ENDCLOSE
|
$furl = "/adm/helper/course.initialization.helper"; |
$furl = "/adm/helper/course.initialization.helper"; |
# Send the user to the course they selected |
# Send the user to the course they selected |
} elsif ($env{'request.course.id'}) { |
} elsif ($env{'request.course.id'}) { |
|
if ((&Apache::loncommon::course_type() eq 'Placement') && |
|
(!$env{'request.role.adv'})) { |
|
my ($score,$incomplete) = |
|
&Apache::lonplacementtest::check_completion(undef,undef,1); |
|
if (($incomplete) && ($incomplete < 100)) { |
|
$msg = '<p>'.&mt('Entering [_1] ...', |
|
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
|
'</p>'; |
|
&finish_loading_course($r,$msg,'/adm/placement'); |
|
$r->rflush(); |
|
return OK; |
|
} |
|
} |
my ($dest,$destsymb,$checkenc); |
my ($dest,$destsymb,$checkenc); |
$dest = $env{'form.destinationurl'}; |
$dest = $env{'form.destinationurl'}; |
$destsymb = $env{'form.destsymb'}; |
$destsymb = $env{'form.destsymb'}; |
Line 900 ENDCLOSE
|
Line 979 ENDCLOSE
|
if ($env{'request.role.adv'}) { |
if ($env{'request.role.adv'}) { |
$dest = &Apache::lonenc::unencrypted($dest); |
$dest = &Apache::lonenc::unencrypted($dest); |
if ($destsymb eq '') { |
if ($destsymb eq '') { |
($destsymb) = ($dest =~ /(?:\?|\&)symb=([^\&]*)/); |
($destsymb) = ($dest =~ /(?:\?|\&)symb=([^\&]*)/); |
$destsymb = &unescape($destsymb); |
$destsymb = &unescape($destsymb); |
} |
} |
} |
} |
Line 925 ENDCLOSE
|
Line 1004 ENDCLOSE
|
} |
} |
} |
} |
} |
} |
unless (($dest =~ m{^/enc/}) || ($dest =~ /(\?|\&)symb=.+___\d+___.+/)) { |
unless (($dest =~ m{^/enc/}) || ($dest =~ /(\?|\&)symb=.+___\d+___.+/)) { |
if (($destsymb ne '') && ($destsymb !~ m{^/enc/})) { |
if (($destsymb ne '') && ($destsymb !~ m{^/enc/})) { |
my $esc_symb = &escape($destsymb); |
my $esc_symb = &escape($destsymb); |
$dest .= (($dest =~/\?/)? '&':'?').'symb='.$esc_symb; |
$dest .= (($dest =~/\?/)? '&':'?').'symb='.$esc_symb; |
} |
} |
} |
} |
$msg = '<p>'.&mt('Entering [_1] ...', |
if ($env{'form.ttoken'}) { |
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
$dest .= (($dest =~/\?/)? '&':'?').'ttoken='.$env{'form.ttoken'}; |
'</p>'; |
} |
|
unless ($env{'request.lti.login'}) { |
|
$msg = '<p>'.&mt('Entering [_1] ...', |
|
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
|
'</p>'; |
|
} |
&finish_loading_course($r,$msg,$dest); |
&finish_loading_course($r,$msg,$dest); |
$r->rflush(); |
$r->rflush(); |
return OK; |
return OK; |
Line 951 ENDCLOSE
|
Line 1035 ENDCLOSE
|
'</p>'; |
'</p>'; |
&finish_loading_course($r,$msg,'/adm/whatsnew?refpage=start'); |
&finish_loading_course($r,$msg,'/adm/whatsnew?refpage=start'); |
$r->rflush(); |
$r->rflush(); |
return OK; |
return OK; |
} |
} |
} |
} |
} |
} |
# Are we allowed to look at the first resource? |
# Are we allowed to look at the first resource? |
# |
# |
# $furl returned by lonuserstate::readmap() has format: |
# $furl returned by lonuserstate::readmap() has format: |
# $url?symb=escaped($symb). If the resource has the |
# $url?symb=escaped($symb). If the resource has the |
# encrypturl parameter in effect, the entire string |
# encrypturl parameter in effect, the entire string |
# $url?symb=escaped($symb) is encrypted as a string |
# $url?symb=escaped($symb) is encrypted as a string |
# beginning /enc/. |
# beginning /enc/. |
# |
# |
my ($access,$unencfurl,$unencsymb); |
my ($access,$unencfurl,$unencsymb); |
if ($furl =~ m{^(.+)(?:\?|\&)symb=([^&]+)(?:$|&)}) { |
if ($furl =~ m{^(.+)(?:\?|\&)symb=([^&]+)(?:$|&)}) { |
my ($poss_url,$poss_symb) = ($1,$2); |
my ($poss_url,$poss_symb) = ($1,$2); |
Line 989 ENDCLOSE
|
Line 1073 ENDCLOSE
|
} else { |
} else { |
$access = &Apache::lonnet::allowed('bre',$unencfurl); |
$access = &Apache::lonnet::allowed('bre',$unencfurl); |
} |
} |
if ((!$access) || ($access eq 'B')) { |
if ((!$access) || ($access eq 'B') || ($access eq 'D')) { |
$furl = &Apache::lonpageflip::first_accessible_resource(); |
$furl = &Apache::lonpageflip::first_accessible_resource(); |
if ($furl eq '') { |
if ($furl eq '') { |
$furl = '/adm/navmaps?showOnlyHomework=1'; |
$furl = '/adm/navmaps?showOnlyHomework=1'; |
} |
} |
} |
} |
$msg = '<p>'.&mt('Entering [_1] ...', |
if ($env{'request.lti.login'}) { |
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
undef($msg); |
'</p>'; |
&finish_loading_course($r,$msg,$furl); |
&finish_loading_course($r,$msg,$furl); |
} else { |
|
$msg = '<p>'.&mt('Entering [_1] ...', |
|
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
|
'</p>'; |
|
&finish_loading_course($r,$msg,$furl); |
|
} |
} |
} |
$r->rflush(); |
$r->rflush(); |
return OK; |
return OK; |
} |
} |
} |
} |
# |
# |
Line 1066 ENDCLOSE
|
Line 1155 ENDCLOSE
|
$recent = &mt('Recent Courses'); |
$recent = &mt('Recent Courses'); |
$standby = &mt('Course selected. Please stand by.'); |
$standby = &mt('Course selected. Please stand by.'); |
} |
} |
|
if (($norolelist) && ((split(/:/,$env{'user.error.msg'}))[2])) { |
|
$crumbtext = 'Access Denied'; |
|
$pagetitle = 'Unauthorized'; |
|
} |
my $brcrum =[{href=>"/adm/roles",text=>$crumbtext}]; |
my $brcrum =[{href=>"/adm/roles",text=>$crumbtext}]; |
|
|
my %roles_in_env; |
my %roles_in_env; |
Line 1077 ENDCLOSE
|
Line 1170 ENDCLOSE
|
if ($domdefs{'catauth'}) { |
if ($domdefs{'catauth'}) { |
$cattype = $domdefs{'catauth'}; |
$cattype = $domdefs{'catauth'}; |
} |
} |
my ($funcs,$crumbsright,$crumbs_style); |
my $placementonly; |
$funcs = &get_roles_functions($showcount,$cattype); |
if ($showcount == 1) { |
if ($env{'browser.mobile'}) { |
if ($env{'request.course.id'}) { |
$crumbsright = $funcs; |
if ($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') { |
undef($funcs); |
$placementonly = 1; |
$crumbs_style = 'overflow: visible;'; |
} |
} |
} else { |
my $start_page=&Apache::loncommon::start_page($pagetitle,undef,{bread_crumbs=>$brcrum, |
foreach my $rolecode (keys(%roles_in_env)) { |
bread_crumbs_component=>$crumbsright, |
my ($cid) = ($rolecode =~ m{^\Quser.role.st./\E($match_domain/$match_courseid)(?:/|$)}); |
bread_crumbs_style=>$crumbs_style,}); |
if ($cid) { |
|
my %coursedescription = |
|
&Apache::lonnet::coursedescription($cid,{'one_time' => '1'}); |
|
if ($coursedescription{'type'} eq 'Placement') { |
|
$placementonly = 1; |
|
} |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
my ($start_page,$funcs); |
|
if ($placementonly) { |
|
$start_page=&Apache::loncommon::start_page($pagetitle,undef, |
|
{bread_crumbs=>$brcrum,crstype=>'Placement'}); |
|
} else { |
|
my $crumbsright; |
|
unless (($norolelist) && ((split(/:/,$env{'user.error.msg'}))[2])) { |
|
$funcs = &get_roles_functions($showcount,$cattype); |
|
if ($env{'browser.mobile'}) { |
|
$crumbsright = $funcs; |
|
undef($funcs); |
|
} |
|
} |
|
$start_page=&Apache::loncommon::start_page($pagetitle,undef,{bread_crumbs=>$brcrum, |
|
bread_crumbs_component=>$crumbsright}); |
|
} |
&js_escape(\$standby); |
&js_escape(\$standby); |
my $noscript='<br /><span class="LC_error">'.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'<br />'.&mt('As this is not the case, most functionality in the system will be unavailable.').'</span><br />'; |
my $noscript='<br /><span class="LC_error">'.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'<br />'.&mt('As this is not the case, most functionality in the system will be unavailable.').'</span><br />'; |
|
|
Line 1120 function rolesView (caller) {
|
Line 1239 function rolesView (caller) {
|
document.rolechoice.display.value = caller; |
document.rolechoice.display.value = caller; |
} else { |
} else { |
if ((caller == 'doupdate') || (caller == 'requestauthor') || |
if ((caller == 'doupdate') || (caller == 'requestauthor') || |
(caller == 'queued')) { |
(caller == 'queued')) { |
document.rolechoice.state.value = caller; |
document.rolechoice.state.value = caller; |
} |
} |
} |
} |
Line 1190 ENDHEADER
|
Line 1309 ENDHEADER
|
} |
} |
if ($nochoose) { |
if ($nochoose) { |
$r->print("<h2>".&mt('Sorry ...')."</h2>\n<span class='LC_error'>". |
$r->print("<h2>".&mt('Sorry ...')."</h2>\n<span class='LC_error'>". |
&mt('This action is currently not authorized.').'</span>'. |
&mt('This action is currently not authorized.').'</span>'); |
&Apache::loncommon::end_page()); |
if ($error && $norolelist) { |
|
$r->print('<br /><br /><h4><span class="LC_error">'. |
|
&mt('As your session was launched from a web page external to LON-CAPA some course content may be unavailable, including the resource you were trying to access.'). |
|
'</span></h4>'. |
|
'<h4><span class="LC_error">'. |
|
&mt('You may need to login to LON-CAPA directly, or re-launch from a different external system.'). |
|
'</span></h4>'); |
|
} |
|
$r->print(&Apache::loncommon::end_page()); |
return OK; |
return OK; |
} else { |
} else { |
if ($updateresult || $reqauthor || $hotlist) { |
if ($updateresult || $reqauthor || $hotlist) { |
Line 1204 ENDHEADER
|
Line 1331 ENDHEADER
|
} |
} |
if ($hotlist) { |
if ($hotlist) { |
$showresult .= $hotlist; |
$showresult .= $hotlist; |
} |
} |
$showresult .= '</div>'; |
$showresult .= '</div>'; |
$r->print($showresult); |
$r->print($showresult); |
} elsif ($env{'form.state'} eq 'queued') { |
} elsif ($env{'form.state'} eq 'queued') { |
Line 1227 ENDHEADER
|
Line 1354 ENDHEADER
|
} |
} |
$r->print('<h3><span class="LC_error">'. |
$r->print('<h3><span class="LC_error">'. |
&mt('The [_1] you selected is not available for access with a [_2] role from your current IP address: [_3].', |
&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,$clientip). |
lc($blocked_type),$blocked_role,$blocked_ipaddr). |
'</span></h3>'); |
'</span></h3>'); |
} |
} |
} |
} |
Line 1239 ENDHEADER
|
Line 1366 ENDHEADER
|
\%sortrole,\%roleclass,\%futureroles,\%timezones,$loncaparev); |
\%sortrole,\%roleclass,\%futureroles,\%timezones,$loncaparev); |
$refresh = $now; |
$refresh = $now; |
&Apache::lonnet::appenv({'user.refresh.time' => $refresh}); |
&Apache::lonnet::appenv({'user.refresh.time' => $refresh}); |
if ((($cattype eq 'std') || ($cattype eq 'domonly')) && (!$env{'user.adv'})) { |
if ($countactive == 1) { |
|
if ($env{'request.course.id'}) { |
|
if ($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Placement') { |
|
$placementonly = 1; |
|
} |
|
} elsif ($possiblerole) { |
|
if ($possiblerole =~ m{^st\./($match_domain)/($match_courseid)(?:/|$)}) { |
|
if ($env{'course.'.$1.'_'.$2.'.type'} eq 'Placement') { |
|
$placementonly = 1; |
|
} |
|
} |
|
} |
|
} |
|
if ((($cattype eq 'std') || ($cattype eq 'domonly')) && (!$env{'user.adv'}) && |
|
(!$placementonly)) { |
if ($countactive > 0) { |
if ($countactive > 0) { |
my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description'); |
my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description'); |
my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); |
my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); |
Line 1261 ENDHEADER
|
Line 1402 ENDHEADER
|
} |
} |
} |
} |
|
|
|
if ($norolelist) { |
|
if ($env{'request.role'}) { |
|
my ($roletext,$role_text_end) = &display_curr_role($env{'request.role'}); |
|
if ($roletext) { |
|
$r->print(&Apache::loncommon::start_data_table('LC_textsize_mobile'). |
|
&Apache::loncommon::start_data_table_row(). |
|
$roletext. |
|
&Apache::loncommon::end_data_table_row()); |
|
if ($role_text_end) { |
|
$r->print(&Apache::loncommon::continue_data_table_row(). |
|
$role_text_end. |
|
&Apache::loncommon::end_data_table_row()); |
|
} |
|
$r->print(&Apache::loncommon::end_data_table()); |
|
} |
|
} |
|
$r->print(&Apache::loncommon::end_page()); |
|
return OK; |
|
} |
|
|
# No active roles |
# No active roles |
if ($countactive==0) { |
if ($countactive==0) { |
my $elapsed = 0; |
my $elapsed = 0; |
Line 1296 ENDHEADER
|
Line 1457 ENDHEADER
|
} |
} |
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
return OK; |
return OK; |
|
} elsif (($placementonly) && ($env{'request.role'} eq 'cm')) { |
|
$r->print('<h3>'.&mt('Please stand by.').'</h3> |
|
<input type="hidden" name="'.$possiblerole.'" value="1" /> |
|
<noscript><br /> |
|
<input type="submit" name="submit" value="'.&mt('Continue').'" /> |
|
</noscript></form>'); |
|
$r->rflush(); |
|
$r->print('<script type="text/javascript">document.forms.rolechoice.submit();</script>'); |
|
$r->print(&Apache::loncommon::end_page()); |
|
return OK; |
} |
} |
# ----------------------------------------------------------------------- Table |
# ----------------------------------------------------------------------- Table |
|
|
Line 1443 sub gather_roles {
|
Line 1614 sub gather_roles {
|
my $advanced = $env{'user.adv'}; |
my $advanced = $env{'user.adv'}; |
my $tryagain = $env{'form.tryagain'}; |
my $tryagain = $env{'form.tryagain'}; |
my @ids = &Apache::lonnet::current_machine_ids(); |
my @ids = &Apache::lonnet::current_machine_ids(); |
|
my (%willtrust,%trustchecked); |
if (ref($roles_in_env) eq 'HASH') { |
if (ref($roles_in_env) eq 'HASH') { |
my %adhocdesc; |
my %adhocdesc; |
foreach my $envkey (sort(keys(%{$roles_in_env}))) { |
foreach my $envkey (sort(keys(%{$roles_in_env}))) { |
Line 1511 sub gather_roles {
|
Line 1683 sub gather_roles {
|
if (($role eq 'ca') || ($role eq 'aa')) { |
if (($role eq 'ca') || ($role eq 'aa')) { |
my $home = &Apache::lonnet::homeserver($trest,$tdom); |
my $home = &Apache::lonnet::homeserver($trest,$tdom); |
my $allowed=0; |
my $allowed=0; |
|
my $prohibited; |
foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } |
foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } |
if (!$allowed) { |
if (!$allowed) { |
$button=0; |
$button=0; |
$switchserver='otherserver='.$home.'&role='.$trolecode; |
unless ($trustchecked{$tdom}) { |
|
if ((&Apache::lonnet::will_trust('othcoau',$env{'user.domain'},$tdom)) && |
|
(&Apache::lonnet::will_trust('coaurem',$tdom,$env{'user.domain'}))) { |
|
$willtrust{$tdom} = 1; |
|
$trustchecked{$tdom} = 1; |
|
} |
|
} |
|
if ($willtrust{$tdom}) { |
|
$switchserver='otherserver='.$home.'&role='.$trolecode; |
|
} else { |
|
$prohibited = 1; |
|
$tremark .= &mt('Session switch required but prohibited.'); |
|
} |
} |
} |
#next if ($home eq 'no_host'); |
#next if ($home eq 'no_host'); |
$home = &Apache::lonnet::hostname($home); |
$home = &Apache::lonnet::hostname($home); |
Line 1523 sub gather_roles {
|
Line 1708 sub gather_roles {
|
': '.$tdom.'<br />'. |
': '.$tdom.'<br />'. |
' '.&mt('Server').': '.$home; |
' '.&mt('Server').': '.$home; |
$env{'course.'.$tdom.'_'.$trest.'.description'}='ca'; |
$env{'course.'.$tdom.'_'.$trest.'.description'}='ca'; |
$tremark.=&Apache::lonhtmlcommon::authorbombs('/res/'.$tdom.'/'.$trest.'/'); |
unless ($prohibited) { |
|
$tremark.=&Apache::lonhtmlcommon::authorbombs('/res/'.$tdom.'/'.$trest.'/'); |
|
} |
$sortkey=$role."$trest:$tdom"; |
$sortkey=$role."$trest:$tdom"; |
} elsif ($role eq 'au') { |
} elsif ($role eq 'au') { |
# Authors |
# Authors |
Line 1559 sub gather_roles {
|
Line 1746 sub gather_roles {
|
foreach my $rolename (sort(keys(%{$domdef{'adhocroles'}}))) { |
foreach my $rolename (sort(keys(%{$domdef{'adhocroles'}}))) { |
if (ref($domdef{'adhocroles'}{$rolename}) eq 'HASH') { |
if (ref($domdef{'adhocroles'}{$rolename}) eq 'HASH') { |
$adhocdesc{$tdom}{$rolename} = $domdef{'adhocroles'}{$rolename}{'desc'}; |
$adhocdesc{$tdom}{$rolename} = $domdef{'adhocroles'}{$rolename}{'desc'}; |
|
$desc = $adhocdesc{$tdom}{$rolename}; |
} |
} |
} |
} |
$desc = $adhocdesc{$tdom}{$rolename}; |
|
} |
} |
} |
} |
if ($desc ne '') { |
if ($desc ne '') { |
Line 1622 sub gather_roles {
|
Line 1809 sub gather_roles {
|
$skipcal = 1; |
$skipcal = 1; |
} |
} |
} |
} |
|
if ($ttype eq 'Placement') { |
|
$ttype = 'Placement Test'; |
|
} |
if ($tsection) { |
if ($tsection) { |
$twhere.='<br />'.&mt('Section').': '.$tsection; |
$twhere.='<br />'.&mt('Section').': '.$tsection; |
} |
} |
Line 1737 sub roletable_headers {
|
Line 1927 sub roletable_headers {
|
} |
} |
|
|
sub roletypes { |
sub roletypes { |
my @types = ('Domain','Authoring Space','Course','Community','Unavailable','System'); |
my @types = ('Domain','Authoring Space','Course','Placement Test','Community','Unavailable','System'); |
return @types; |
return @types; |
} |
} |
|
|
Line 1799 sub findcourse_advice {
|
Line 1989 sub findcourse_advice {
|
<li>'.&mt('You are in a section of course for which automatic enrollment in the corresponding LON-CAPA course is not active.').'</li> |
<li>'.&mt('You are in a section of course for which automatic enrollment in the corresponding LON-CAPA course is not active.').'</li> |
<li>'.&mt('The start date for automated enrollment has yet to be reached.').'</li> |
<li>'.&mt('The start date for automated enrollment has yet to be reached.').'</li> |
<li>'.&mt('You registered for the course recently and there is a time lag between the time you register, and the time this information becomes available for the update of LON-CAPA course rosters.').'</li> |
<li>'.&mt('You registered for the course recently and there is a time lag between the time you register, and the time this information becomes available for the update of LON-CAPA course rosters.').'</li> |
<li>'.&mt('Automated enrollment added you to the course in the time since you last logged-in.').' '.&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.').'</li> |
<li>'.&mt('Automated enrollment added you to the course in the time since you last logged-in.').' '.&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.').'</li> |
</ul></p>'); |
</ul></p>'); |
} else { |
} else { |
$r->print('<p>'.&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'</p>'); |
$r->print('<p>'.&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'</p>'); |
if ($elapsed > 600) { |
if ($elapsed > 600) { |
$r->print('<p>'.&mt('You may also have been assigned to a course in the time since you last logged-in, or checked for changes.'). |
$r->print('<p>'.&mt('You may also have been assigned to a course in the time since you last logged-in, or checked for changes'). |
'<br />'. |
'<br />'. |
&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.').'</p>'); |
&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.').'</p>'); |
} |
} |
} |
} |
if (($cattype eq 'std') || ($cattype eq 'domonly')) { |
if (($cattype eq 'std') || ($cattype eq 'domonly')) { |
$r->print('<h3>'.&mt('Self-Enrollment').'</h3>'. |
$r->print('<h3>'.&mt('Self-Enrollment').'</h3>'. |
Line 2000 sub build_roletext {
|
Line 2190 sub build_roletext {
|
$trolecode."','".$buttonname.'\');" /></td>'; |
$trolecode."','".$buttonname.'\');" /></td>'; |
} |
} |
} |
} |
if (($trolecode !~ m/^(ca|aa)\./) && ($trest ne '') && (!$skipcal)) { |
if (($trolecode !~ m/^(dc|ca|au|aa)\./) && (!$skipcal)) { |
$tremark.=&Apache::lonannounce::showday(time,1, |
$tremark.=&Apache::lonannounce::showday(time,1, |
&Apache::lonannounce::readcalendar($tdom.'_'.$trest)); |
&Apache::lonannounce::readcalendar($tdom.'_'.$trest)); |
} |
} |
Line 2038 sub check_for_adhoc {
|
Line 2228 sub check_for_adhoc {
|
my $numdc = 0; |
my $numdc = 0; |
my $numhelpdesk = 0; |
my $numhelpdesk = 0; |
my $numadhoc = 0; |
my $numadhoc = 0; |
my $num_custom_adhoc = 0; |
my $num_custom_adhoc = 0; |
if (($env{'user.adv'}) || ($env{'user.rar'})) { |
if (($env{'user.adv'}) || ($env{'user.rar'})) { |
foreach my $envkey (sort(keys(%env))) { |
foreach my $envkey (sort(keys(%env))) { |
if ($envkey=~/^user\.role\.(dc|dh|da)\.\/($match_domain)\/$/) { |
if ($envkey=~/^user\.role\.(dc|dh|da)\.\/($match_domain)\/$/) { |
Line 2257 sub display_cc_role {
|
Line 2447 sub display_cc_role {
|
} else { |
} else { |
$twhere=&mt('Currently not available'); |
$twhere=&mt('Currently not available'); |
$env{'course.'.$tcourseid.'.description'}=$twhere; |
$env{'course.'.$tcourseid.'.description'}=$twhere; |
$skipcal = 1; |
$skipcal = 1; |
} |
} |
my $trole = &Apache::lonnet::plaintext($ccrole,$ttype,$tcourseid); |
my $trole = &Apache::lonnet::plaintext($ccrole,$ttype,$tcourseid); |
$twhere.="<br />".&mt('Domain').":".$tdom; |
$twhere.="<br />".&mt('Domain').":".$tdom; |
Line 2267 sub display_cc_role {
|
Line 2457 sub display_cc_role {
|
return ($roletext,$roletext_end); |
return ($roletext,$roletext_end); |
} |
} |
|
|
|
sub display_curr_role { |
|
my ($currentrole) = @_; |
|
my ($roletext,$roletext_end); |
|
my $advanced = $env{'user.adv'}; |
|
my $tryagain = $env{'form.tryagain'}; |
|
my ($role,$rest) = split(m{\./},$currentrole,2); |
|
unless (!defined($role) || $role eq '') { |
|
if ($rest =~ m{^($match_domain)/($match_courseid)(?:/(\w+)|$)}) { |
|
my $cdom = $1; |
|
my $cnum = $2; |
|
my $csec = $3; |
|
my $cid = $cdom.'_'.$cnum; |
|
my $ttype = $env{'course.'.$cid.'.type'}; |
|
my $skipcal = 1; |
|
my $tbg='LC_roles_is'; |
|
my $twhere = $env{'course.'.$cid.'.description'}. |
|
' <span class="LC_fontsize_small">'. |
|
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$cnum,$cdom). |
|
'</span>'; |
|
my $trole = &Apache::lonnet::plaintext($role,$ttype,$cid); |
|
if ($csec) { |
|
$twhere.= ' '.&mt('Section').': '.$csec; |
|
} |
|
if ($role ne 'st') { |
|
$twhere.= ' '.&mt('Domain').': '.$cdom; |
|
} |
|
($roletext,$roletext_end) = &build_roletext($currentrole,$cdom,$cnum,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,'','','',$skipcal); |
|
} |
|
} |
|
return ($roletext,$roletext_end); |
|
} |
|
|
sub adhoc_roles_row { |
sub adhoc_roles_row { |
my ($dcdom,$rowtype) = @_; |
my ($dcdom,$rowtype) = @_; |
my $output = &Apache::loncommon::continue_data_table_row() |
my $output = &Apache::loncommon::continue_data_table_row() |
Line 2296 sub adhoc_customroles_row {
|
Line 2518 sub adhoc_customroles_row {
|
if ($tstart && $tstart>$limit) { $liverole = 0; } |
if ($tstart && $tstart>$limit) { $liverole = 0; } |
if ($tend && $tend <$limit) { $liverole = 0; } |
if ($tend && $tend <$limit) { $liverole = 0; } |
return unless ($liverole); |
return unless ($liverole); |
my %domdefaults = &Apache::lonnet::get_domain_defaults($dhdom); |
my %domdefaults = &Apache::lonnet::get_domain_defaults($dhdom); |
if (ref($domdefaults{'adhocroles'}) eq 'HASH') { |
if (ref($domdefaults{'adhocroles'}) eq 'HASH') { |
if (scalar(keys(%{$domdefaults{'adhocroles'}})) > 0) { |
if (scalar(keys(%{$domdefaults{'adhocroles'}})) > 0) { |
return &Apache::loncommon::continue_data_table_row() |
return &Apache::loncommon::continue_data_table_row() |
Line 2626 sub update_session_roles {
|
Line 2848 sub update_session_roles {
|
&curr_role_status($currstart,$currend,$refresh,$update); |
&curr_role_status($currstart,$currend,$refresh,$update); |
my ($rolekey) = ($envkey =~ /^user\.role\.(.+)$/); |
my ($rolekey) = ($envkey =~ /^user\.role\.(.+)$/); |
my ($role,$rest)=split(m{\./},$rolekey,2); |
my ($role,$rest)=split(m{\./},$rolekey,2); |
$rest = '/'.$rest; |
$rest = '/'.$rest; |
if (&Apache::lonnet::delenv($envkey,undef,[$role])) { |
if (&Apache::lonnet::delenv($envkey,undef,[$role])) { |
if ($status_in_env eq 'active') { |
if ($status_in_env eq 'active') { |
if ($role eq 'gr') { |
if ($role eq 'gr') { |
Line 2826 sub update_session_roles {
|
Line 3048 sub update_session_roles {
|
} |
} |
my $groupdesc; |
my $groupdesc; |
unless (ref($curr_groups{$cdom.'_'.$cnum}) eq 'HASH') { |
unless (ref($curr_groups{$cdom.'_'.$cnum}) eq 'HASH') { |
%{$curr_groups{$cdom.'_'.$cnum}} = |
%{$curr_groups{$cdom.'_'.$cnum}} = |
&Apache::longroup::coursegroups($cdom,$cnum); |
&Apache::longroup::coursegroups($cdom,$cnum); |
} |
} |
unless ((ref($groupdescs{$cdom.'_'.$cnum}) eq 'HASH') && |
unless ((ref($groupdescs{$cdom.'_'.$cnum}) eq 'HASH') && |
($groupdescs{$cdom.'_'.$cnum}{$group})) { |
($groupdescs{$cdom.'_'.$cnum}{$group})) { |
|
|
my %groupinfo = |
my %groupinfo = |
&Apache::longroup::get_group_settings($curr_groups{$cdom.'_'.$cnum}{$group}); |
&Apache::longroup::get_group_settings($curr_groups{$cdom.'_'.$cnum}{$group}); |
$groupdescs{$cdom.'_'.$cnum}{$group} = |
$groupdescs{$cdom.'_'.$cnum}{$group} = |
&unescape($groupinfo{'description'}); |
&unescape($groupinfo{'description'}); |
} |
} |
$groupdesc = $groupdescs{$cdom.'_'.$cnum}{$group}; |
$groupdesc = $groupdescs{$cdom.'_'.$cnum}{$group}; |
Line 2953 sub update_session_roles {
|
Line 3175 sub update_session_roles {
|
my $cdom = $env{'course.'.$cid.'.domain'}; |
my $cdom = $env{'course.'.$cid.'.domain'}; |
my $cnum = $env{'course.'.$cid.'.num'}; |
my $cnum = $env{'course.'.$cid.'.num'}; |
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); |
my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum); |
my %groupdesc; |
my %groupdesc; |
if (ref($groupchange{$crs}) eq 'HASH') { |
if (ref($groupchange{$crs}) eq 'HASH') { |
$groupchgmsg .= '<li>'.&mt('Course/Community: [_1]','<b>'.$crsdesc.'</b><ul>'); |
$groupchgmsg .= '<li>'.&mt('Course/Community: [_1]','<b>'.$crsdesc.'</b><ul>'); |
foreach my $group (sort(keys(%{$groupchange{$crs}}))) { |
foreach my $group (sort(keys(%{$groupchange{$crs}}))) { |
Line 3186 sub get_queued {
|
Line 3408 sub get_queued {
|
if (ref($history{'details'}) eq 'HASH') { |
if (ref($history{'details'}) eq 'HASH') { |
$description = $history{details}{'cdescr'}; |
$description = $history{details}{'cdescr'}; |
} |
} |
@{$reqcrs{$reqtime}} = ($description,$showtype); |
@{$reqcrs{$reqtime}} = ($description,$showtype); |
} |
} |
} |
} |
my @sortedtimes = sort {$a <=> $b} (keys(%reqcrs)); |
my @sortedtimes = sort {$a <=> $b} (keys(%reqcrs)); |
Line 3249 sub get_queued {
|
Line 3471 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__ |
|
|