version 1.269.2.30, 2017/01/22 14:28:20
|
version 1.269.2.39.2.5, 2022/07/08 15:45:20
|
Line 144 use GDBM_File;
|
Line 144 use GDBM_File;
|
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
use HTML::Entities; |
use HTML::Entities; |
|
|
|
sub start_loading_course { |
|
my ($r,$title,$only_body) = @_; |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
&Apache::loncommon::no_cache($r); |
|
$r->send_http_header; |
|
if ($only_body) { |
|
$r->print(&Apache::loncommon::start_page($title,undef,{'only_body' => 1, |
|
'add_progressbar' => 1})); |
|
} else { |
|
my $swinfo=&Apache::lonmenu::rawconfig(); |
|
# Breadcrumbs |
|
my $brcrum = [{'href' => '', |
|
'text' => $title},]; |
|
my $start_page = &Apache::loncommon::start_page($title,undef, |
|
{'bread_crumbs' => $brcrum, |
|
'bread_crumbs_nomenu' => 1, |
|
'links_disabled' => 1}); |
|
$r->print(<<ENDREDIR); |
|
$start_page |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
$swinfo |
|
|
|
document.body.addEventListener('click', function (event) { |
|
// filter out clicks on any other elements |
|
if (event.target.nodeName == 'A' && event.target.getAttribute('aria-disabled') == 'true') { |
|
event.preventDefault(); |
|
} |
|
}); |
|
// ]]> |
|
</script> |
|
ENDREDIR |
|
} |
|
return; |
|
} |
|
|
|
sub finish_loading_course { |
|
my ($r,$msg,$url,$only_body) = @_; |
|
my $link = '<div id="LC_course_loaded" style="display:none"><a href="'. |
|
&HTML::Entities::encode($url,'"<>&').'">'.&mt('Continue').'</a></div>'; |
|
my $end_page = &Apache::loncommon::end_page(); |
|
my $js_url = &js_escape($url); |
|
my $remote_js; |
|
if ($env{'environment.remote'} eq 'on') { |
|
my ($menucoll,$deeplinkmenu,$menuref) = &Apache::loncommon::menucoll_in_effect(); |
|
if ($menucoll) { |
|
&Apache::lonnet::put('environment',{'remote' => 'off'}); |
|
&Apache::lonnet::appenv({'environment.remote' => 'off'}); |
|
my $menu_name = &Apache::lonmenu::get_menu_name(); |
|
$remote_js = <<ENDCLOSE; |
|
window.status='Accessing Remote Control'; |
|
menu=window.open("/adm/rat/empty.html","$menu_name", |
|
"height=350,width=150,scrollbars=no,menubar=no"); |
|
window.status='Disabling Remote Control'; |
|
menu.active=0; |
|
menu.autologout=0; |
|
window.status='Closing Remote Control'; |
|
menu.close(); |
|
window.status='Done.'; |
|
ENDCLOSE |
|
} |
|
} |
|
my $reenable; |
|
unless ($only_body) { |
|
$reenable = <<REENABLE; |
|
\$('.isDisabled > a').removeAttr("aria-disabled"); |
|
\$('.isDisabled').removeClass("isDisabled"); |
|
REENABLE |
|
} |
|
$r->print(<<END); |
|
$msg |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
\$(document).ready(function() { |
|
\$("#LC_course_loaded").css("display","block"); |
|
$reenable |
|
$remote_js |
|
var url = "$js_url"; |
|
\$(location).attr('href',url); |
|
}); |
|
// ]]> |
|
</script> |
|
$link |
|
$end_page |
|
END |
|
return; |
|
} |
|
|
sub redirect_user { |
sub redirect_user { |
my ($r,$title,$url,$msg) = @_; |
my ($r,$title,$url,$msg) = @_; |
Line 179 ENDREDIR
|
Line 266 ENDREDIR
|
|
|
sub error_page { |
sub error_page { |
my ($r,$error,$dest)=@_; |
my ($r,$error,$dest)=@_; |
&Apache::loncommon::content_type($r,'text/html'); |
my %lt = &Apache::lonlocal::texthash( |
&Apache::loncommon::no_cache($r); |
pdc => 'Problems during Course Initialization', |
$r->send_http_header; |
tfp => 'The following problems occurred:', |
return OK if $r->header_only; |
con => 'Continue', |
# Breadcrumbs |
|
my $brcrum = [{'href' => $dest, |
|
'text' => 'Problems during Course Initialization'},]; |
|
$r->print(&Apache::loncommon::start_page('Problems during Course Initialization', |
|
undef, |
|
{'bread_crumbs' => $brcrum,}) |
|
); |
); |
$r->print( |
my $end_page = &Apache::loncommon::end_page(); |
'<script type="text/javascript">'. |
$dest = &HTML::Entities::encode($dest,'"<>&'); |
'// <![CDATA['. |
$r->print(<<END); |
&Apache::lonmenu::rawconfig(). |
<h3>$lt{'pdc'}</h3> |
'// ]]>'. |
<p class="LC_error">$lt{'tfp'} |
'</script>'. |
<br /> |
'<p class="LC_error">'.&mt('The following problems occurred:'). |
$error |
'<br />'. |
</p><br /><a href="$dest">$lt{'con'}</a> |
$error. |
$end_page |
'</p><br /><a href="'.$dest.'">'.&mt('Continue').'</a>' |
END |
); |
return; |
$r->print(&Apache::loncommon::end_page()); |
|
} |
} |
|
|
sub handler { |
sub handler { |
Line 209 sub handler {
|
Line 289 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 227 sub handler {
|
Line 307 sub handler {
|
$update = $then; |
$update = $then; |
} |
} |
|
|
|
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'}; |
|
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'}) { |
|
my ($role,$cdom,$cnum,$rest); |
|
if ($env{'form.switchrole'} =~ m{^(co|cc|in|ta|ep|ad|st|cr).*?\./($match_domain)/($match_courseid)(/(\w+)|$)}) { |
|
($role,$cdom,$cnum,$rest) = ($1,$2,$3,$4); |
|
} elsif ($env{'form.newrole'} =~ m{^(co|cc|in|ta|ep|ad|st|cr).*?\./($match_domain)/($match_courseid)(/(\w+)|$)}) { |
|
($role,$cdom,$cnum,$rest) = ($1,$2,$3,$4); |
|
} |
|
if ($cdom ne '') { |
|
my ($has_evb,$check_ipaccess,$showrole); |
|
$showrole = 1; |
|
my $checkrole = "cm./$cdom/$cnum"; |
|
if ($rest ne '') { |
|
$checkrole .= "/$rest"; |
|
} |
|
if ((&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) && |
|
($role ne 'st')) { |
|
$has_evb = 1; |
|
} |
|
unless ($has_evb) { |
|
my @machinedoms = &Apache::lonnet::current_machine_domains(); |
|
my $udom = $env{'user.domain'}; |
|
if ($udom eq $cdom) { |
|
$check_ipaccess = 1; |
|
} elsif (($udom ne '') && (grep(/^\Q$udom\E$/,@machinedoms))) { |
|
$check_ipaccess = 1; |
|
} else { |
|
my $lonhost = $Apache::lonnet::perlvar{'lonHostID'}; |
|
my $internet_names = &Apache::lonnet::get_internet_names($lonhost); |
|
my $cprim = &Apache::lonnet::domain($cdom,'primary'); |
|
my $cintdom = &Apache::lonnet::internet_dom($cprim); |
|
if (($cintdom ne '') && (ref($internet_names) eq 'ARRAY')) { |
|
if (grep(/^\Q$cintdom\E$/,@{$internet_names})) { |
|
$check_ipaccess = 1; |
|
} |
|
} |
|
} |
|
if ($check_ipaccess) { |
|
my ($ipaccessref,$cached)=&Apache::lonnet::is_cached_new('ipaccess',$cdom); |
|
unless (defined($cached)) { |
|
my %domconfig = |
|
&Apache::lonnet::get_dom('configuration',['ipaccess'],$cdom); |
|
$ipaccessref = &Apache::lonnet::do_cache_new('ipaccess',$cdom,$domconfig{'ipaccess'},1800); |
|
} |
|
if (ref($ipaccessref) eq 'HASH') { |
|
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($clientip,$range)) { |
|
$type = 'include'; |
|
} |
|
if (ref($ipaccessref->{$id}->{'courses'}) eq 'HASH') { |
|
if ($ipaccessref->{$id}->{'courses'}{$cdom.'_'.$cnum}) { |
|
if ($type eq 'include') { |
|
$showrole = 1; |
|
last; |
|
} else { |
|
$showrole = 0; |
|
} |
|
} else { |
|
if ($type eq 'include') { |
|
$showrole = 0; |
|
} else { |
|
$showrole = 1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
unless ($showrole) { |
|
$blocked_by_ip = 1; |
|
$blocked_type = &Apache::loncommon::course_type($cdom.'_'.$cnum); |
|
delete($env{'form.selectrole'}); |
|
delete($env{'form.newrole'}); |
|
} |
|
} |
|
} |
|
|
&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 260 sub handler {
|
Line 461 sub handler {
|
|
|
my $envkey; |
my $envkey; |
my %dcroles = (); |
my %dcroles = (); |
my %dhroles = (); |
my %helpdeskroles = (); |
my ($numdc,$numdh,$numadhoc) = &check_for_adhoc(\%dcroles,\%dhroles,$update,$then); |
my ($numdc,$numhelpdesk,$numadhoc) = |
|
&check_for_adhoc(\%dcroles,\%helpdeskroles,$update,$then); |
my $loncaparev = $r->dir_config('lonVersion'); |
my $loncaparev = $r->dir_config('lonVersion'); |
|
|
# ================================================================== Roles Init |
# ================================================================== Roles Init |
Line 273 sub handler {
|
Line 475 sub handler {
|
my $custom_adhoc; |
my $custom_adhoc; |
if ($env{'form.newrole'}) { |
if ($env{'form.newrole'}) { |
$env{'form.'.$env{'form.newrole'}}=1; |
$env{'form.'.$env{'form.newrole'}}=1; |
# Check if this is a Domain Helpdesk role trying to enter a course |
# Check if this is a Domain Helpdesk or Domain Helpdesk Assistant role trying to enter a course |
if ($env{'form.newrole'} =~ m{^cr/($match_domain)/\1\-domainconfig/\w+\./\1/$match_courseid$}) { |
if ($env{'form.newrole'} =~ m{^cr/($match_domain)/\1\-domainconfig/\w+\./\1/$match_courseid$}) { |
if ($dhroles{$1}) { |
if ($helpdeskroles{$1}) { |
$custom_adhoc = 1; |
$custom_adhoc = 1; |
} |
} |
} |
} |
Line 326 sub handler {
|
Line 528 sub handler {
|
} |
} |
} |
} |
} |
} |
} elsif (($numdc > 0) || ($numdh > 0)) { |
} elsif (($numdc > 0) || ($numhelpdesk > 0)) { |
# 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 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) { |
if ($numdc) { |
# Is this an ad-hoc Coordinator role? |
# Is this an ad-hoc Coordinator role? |
Line 398 sub handler {
|
Line 600 sub handler {
|
last; |
last; |
} |
} |
} |
} |
if ($numdh) { |
if ($numhelpdesk) { |
# Is this an ad hoc custom role in a course/community? |
# Is this an ad hoc custom role in a course/community? |
if (my ($domain,$rolename,$coursenum,$sec) = ($envkey =~ m{^form\.cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)(?:/(\w+)|$)})) { |
if (my ($domain,$rolename,$coursenum,$sec) = ($envkey =~ m{^form\.cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)(?:/(\w+)|$)})) { |
if ($dhroles{$domain}) { |
if ($helpdeskroles{$domain}) { |
my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($domain.'_'.$coursenum,1); |
my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($domain.'_'.$coursenum,1); |
if (ref($possroles) eq 'ARRAY') { |
if (ref($possroles) eq 'ARRAY') { |
if (grep(/^\Q$rolename\E$/,@{$possroles})) { |
if (grep(/^\Q$rolename\E$/,@{$possroles})) { |
Line 494 sub handler {
|
Line 696 sub handler {
|
my $end_page=&Apache::loncommon::end_page(); |
my $end_page=&Apache::loncommon::end_page(); |
my $buttontext=&mt('Enter Course'); |
my $buttontext=&mt('Enter Course'); |
my $message=&mt('Successfully registered key'); |
my $message=&mt('Successfully registered key'); |
|
my $ip = &Apache::lonnet::get_requestor_ip(); |
my $assignresult= |
my $assignresult= |
&Apache::lonnet::assign_access_key( |
&Apache::lonnet::assign_access_key( |
$env{'form.newkey'}, |
$env{'form.newkey'}, |
Line 502 sub handler {
|
Line 705 sub handler {
|
$env{'user.domain'}, |
$env{'user.domain'}, |
$env{'user.name'}, |
$env{'user.name'}, |
&mt('Assigned from [_1] at [_2] for [_3]' |
&mt('Assigned from [_1] at [_2] for [_3]' |
,$ENV{'REMOTE_ADDR'} |
,$ip |
,&Apache::lonlocal::locallocaltime() |
,&Apache::lonlocal::locallocaltime() |
,$trolecode) |
,$trolecode) |
); |
); |
Line 579 ENDENTERKEY
|
Line 782 ENDENTERKEY
|
} |
} |
} |
} |
} |
} |
my $msg; |
my $crstype = &Apache::loncommon::course_type($cdom.'_'.$cnum); |
|
$crstype = lc($crstype); |
|
my ($msg,$critmsg_check,$title,$loadmsg,$only_body); |
|
$critmsg_check = 1; |
|
$title = &mt("Loading $crstype"); |
|
$loadmsg = &mt("Please be patient while your $crstype loads"); |
|
if (($env{'request.deeplink.login'}) && ($env{'request.linkprot'})) { |
|
if ($env{'request.linkprot'} =~ /^\d+(c|d):\Q$env{'form.destinationurl'}\E$/) { |
|
$title = &mt('Loading LON-CAPA session'); |
|
$loadmsg = &mt('Please be patient while LON-CAPA loads'); |
|
$only_body = 1; |
|
$critmsg_check = 0; |
|
} |
|
} |
|
my $preamble = '<div id="LC_update_'.$cdom.'_'.$cnum.'" class="LC_info">'. |
|
'<br />'. |
|
$loadmsg. |
|
'<br /></div>'. |
|
'<div style="padding:0;clear:both;margin:0;border:0"></div>'; |
|
my $closure = <<ENDCLOSE; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
\$("#LC_update_${cdom}_${cnum}").hide('slow'); |
|
// ]]> |
|
</script> |
|
ENDCLOSE |
|
&start_loading_course($r,$title,$only_body); |
|
my %prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,undef,$preamble); |
|
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Loading ...')); |
|
$r->rflush(); |
|
if ($critmsg_check) { |
|
my $blockcrit = &Apache::loncommon::blocking_status('alert',$clientip,$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); |
&Apache::lonuserstate::readmap($cdom.'/'.$cnum,$critmsg_check); |
unless ($ferr) { |
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Finished!')); |
|
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
|
$r->print($closure); |
|
$r->rflush(); |
|
if ($ferr) { |
|
$furl = '/adm/roles?tryagain=1'; |
|
} else { |
|
&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'}. |
':'.$csec.':'.$role => $now},$cdom,$cnum); |
':'.$csec.':'.$role => $now},$cdom,$cnum); |
} |
} |
|
if (($env{"environment.internal.$cdom.$cnum.$role.adhoc"}) && |
|
(&Apache::lonnet::allowed('vxc',$cdom.'_'.$cnum))) { |
|
my $owner = $env{'course.'.$cdom.'_'.$cnum.'.internal.courseowner'}; |
|
my @coowners = split(/,/,$env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}); |
|
my %auaccess; |
|
foreach my $user ($owner,@coowners) { |
|
my ($cpname,$cpdom) = split(/:/,$user); |
|
my %auroles = &Apache::lonnet::get_my_roles($cpname,$cpdom,'userroles',undef,['au','ca','aa'],[$cdom]); |
|
foreach my $key (keys(%auroles)) { |
|
my ($auname,$audom,$aurole) = split(/:/,$key); |
|
if ($aurole eq 'au') { |
|
$auaccess{$cpname} = 1; |
|
} else { |
|
$auaccess{$auname} = 1; |
|
} |
|
} |
|
} |
|
&Apache::lonnet::appenv({'request.course.adhocsrcaccess' => join(',',sort(keys(%auaccess))) }); |
|
} |
my ($feeds,$syllabus_time); |
my ($feeds,$syllabus_time); |
&Apache::lonrss::advertisefeeds($cnum,$cdom,undef,\$feeds); |
&Apache::lonrss::advertisefeeds($cnum,$cdom,undef,\$feeds); |
&Apache::lonnet::appenv({'request.course.feeds' => $feeds}); |
&Apache::lonnet::appenv({'request.course.feeds' => $feeds}); |
Line 618 ENDENTERKEY
|
Line 889 ENDENTERKEY
|
} |
} |
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 ($env{'form.orgurl'}) { |
|
$furl .= '&orgurl='.&HTML::Entities::encode($env{'form.orgurl'},'<>&"'); |
|
} |
|
if ($env{'form.symb'}) { |
|
$furl .= '&symb='.&HTML::Entities::encode($env{'form.symb'},'<>&"'); |
|
} |
|
} |
if (($ferr) && ($tadv)) { |
if (($ferr) && ($tadv)) { |
&error_page($r,$ferr,$dest); |
&error_page($r,$ferr,$furl); |
} else { |
} else { |
|
if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { |
|
if (($env{'form.orgurl'} ne '') && ($env{'form.symb'} ne '')) { |
|
unless (&Apache::lonnet::symbverify($env{'form.symb'},$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) { |
my $chome = &Apache::lonnet::homeserver($cnum,$cdom); |
my $chome = &Apache::lonnet::homeserver($cnum,$cdom); |
Line 628 ENDENTERKEY
|
Line 914 ENDENTERKEY
|
$cdom.'_'.$cnum); |
$cdom.'_'.$cnum); |
} |
} |
} |
} |
$r->internal_redirect($dest); |
if ($ferr) { |
|
if (!$env{'request.course.id'}) { |
|
&Apache::lonnet::appenv( |
|
{"request.course.id" => $cdom.'_'.$cnum}); |
|
$r->print('<p class="LC_error">'. |
|
&mt('Could not initialize [_1] at this time.', |
|
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
|
'</p>'. |
|
'<p><a href="'.$furl.'">'. |
|
&mt('Please try again.').'</a></p>'. |
|
&Apache::loncommon::end_page()); |
|
} |
|
} else { |
|
if ($env{'request.deeplink.login'}) { |
|
&set_deeplink_target($cnum,$cdom); |
|
} |
|
$msg = '<p>'.&mt('Entering [_1] ...', |
|
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
|
'</p>'; |
|
&finish_loading_course($r,$msg,$dest,$only_body); |
|
} |
} |
} |
|
$r->rflush(); |
return OK; |
return OK; |
} else { |
} else { |
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}); |
$furl='/adm/roles?tryagain=1'; |
} |
$msg='<p><span class="LC_error">' |
|
.&mt('Could not initialize [_1] at this time.', |
|
$env{'course.'.$cdom.'_'.$cnum.'.description'}) |
|
.'</span></p>' |
|
.'<p>'.&mt('Please try again.').'</p>' |
|
.'<p>'.$ferr.'</p>'; |
|
} |
|
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) && ($tadv)) { |
if ($tadv) { |
&error_page($r,$ferr,$furl); |
&error_page($r,$ferr,$furl); |
|
} else { |
|
$r->print('<p class="LC_error">'. |
|
&mt('Could not initialize [_1] at this time.', |
|
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
|
'</p>'. |
|
'<p><a href="'.$furl.'">'.&mt('Please try again.').'</a></p>'. |
|
&Apache::loncommon::end_page()); |
|
} |
} else { |
} else { |
|
if ($env{'request.deeplink.login'}) { |
|
&set_deeplink_target($cnum,$cdom); |
|
} |
# 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 668 ENDENTERKEY
|
Line 979 ENDENTERKEY
|
} |
} |
} |
} |
} |
} |
|
if (($dest =~ m{^\Q/public/$cdom/$cnum/syllabus\E.*(\?|\&)usehttp=1}) || |
|
($dest =~ m{^\Q/adm/wrapper/ext/\E(?!https:)})) { |
|
if ($ENV{'SERVER_PORT'} == 443) { |
|
my $hostname = $r->hostname(); |
|
unless ((&Apache::lonnet::uses_sts()) || |
|
(&Apache::lonnet::waf_allssl($hostname))) { |
|
if ($hostname ne '') { |
|
$dest = 'http://'.$hostname.$dest; |
|
} |
|
} |
|
} |
|
} |
if ($dest =~ m{^/enc/}) { |
if ($dest =~ m{^/enc/}) { |
if ($env{'request.role.adv'}) { |
if ($env{'request.role.adv'}) { |
$dest = &Apache::lonenc::unencrypted($dest); |
$dest = &Apache::lonenc::unencrypted($dest); |
Line 700 ENDENTERKEY
|
Line 1023 ENDENTERKEY
|
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 .= '?symb='.$esc_symb; |
$dest .= (($dest =~/\?/)? '&':'?').'symb='.$esc_symb; |
} |
} |
} |
} |
&redirect_user($r, &mt('Entering [_1]', |
if ($env{'form.ttoken'}) { |
$env{'course.'.$cdom.'_'.$cnum.'.description'}), |
$dest .= (($dest =~/\?/)? '&':'?').'ttoken='.$env{'form.ttoken'}; |
$dest, $msg); |
} |
|
unless ($env{'request.deeplink.login'}) { |
|
$msg = '<p>'.&mt('Entering [_1] ...', |
|
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
|
'</p>'; |
|
} |
|
&finish_loading_course($r,$msg,$dest,$only_body); |
|
$r->rflush(); |
return OK; |
return OK; |
} |
} |
if (&Apache::lonnet::allowed('whn', |
if (&Apache::lonnet::allowed('whn', |
Line 716 ENDENTERKEY
|
Line 1046 ENDENTERKEY
|
) { |
) { |
my $startpage = &courseloadpage($env{'request.course.id'}); |
my $startpage = &courseloadpage($env{'request.course.id'}); |
unless ($startpage eq 'firstres') { |
unless ($startpage eq 'firstres') { |
$msg = &mt('Entering [_1] ...', |
$msg = '<p>'.&mt('Entering [_1] ...', |
$env{'course.'.$env{'request.course.id'}.'.description'}); |
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
&redirect_user($r, &mt('New in course'), |
'</p>'; |
'/adm/whatsnew?refpage=start', $msg); |
&finish_loading_course($r,$msg,'/adm/whatsnew?refpage=start',$only_body); |
return OK; |
$r->rflush(); |
|
return OK; |
} |
} |
} |
} |
} |
} |
# Are we allowed to look at the first resource? |
# Are we allowed to look at the first resource? |
my $access; |
# |
if ($furl =~ m{^(/adm/wrapper|)/ext/}) { |
# $furl returned by lonuserstate::readmap() has format: |
# If it's an external resource, |
# $url?symb=escaped($symb). If the resource has the |
# strip off the symb argument and possible query |
# encrypturl parameter in effect, the entire string |
my ($exturl,$symb) = ($furl =~ m{^(.+)(?:\?|\&)symb=(.+)$}); |
# $url?symb=escaped($symb) is encrypted as a string |
# Unencode $symb |
# beginning /enc/. |
$symb = &unescape($symb); |
# |
# Then check for permission |
my ($access,$unencfurl,$unencsymb); |
$access = &Apache::lonnet::allowed('bre',$exturl,$symb); |
if ($furl =~ m{^(.+)(?:\?|\&)symb=([^&]+)(?:$|&)}) { |
# For other resources just check for permission |
my ($poss_url,$poss_symb) = ($1,$2); |
|
$unencsymb = &unescape($poss_symb); |
|
$unencfurl = $poss_url; |
|
} elsif ($furl =~ m{^/enc/}) { |
|
my $unenc = &Apache::lonenc::unencrypted($furl); |
|
if ($unenc =~ m{^(.+)(?:\?|\&)symb=([^&]+)(?:$|&)}) { |
|
($unencfurl,$unencsymb) = ($1,$2); |
|
$unencsymb = &unescape($unencsymb); |
|
} else { |
|
$unencfurl = $unenc; |
|
} |
} else { |
} else { |
$access = &Apache::lonnet::allowed('bre',$furl); |
$unencfurl = $furl; |
} |
} |
if (!$access) { |
if ($unencsymb) { |
|
my $symb = &Apache::lonnet::symbclean($unencsymb); |
|
if (($symb ne '') && (&Apache::lonnet::symbverify($symb,$unencfurl))) { |
|
$access = &Apache::lonnet::allowed('bre',$unencfurl,$symb); |
|
} else { |
|
$access = &Apache::lonnet::allowed('bre',$unencfurl); |
|
} |
|
} else { |
|
$access = &Apache::lonnet::allowed('bre',$unencfurl); |
|
} |
|
if ((!$access) || ($access eq 'B') || ($access eq 'D')) { |
$furl = &Apache::lonpageflip::first_accessible_resource(); |
$furl = &Apache::lonpageflip::first_accessible_resource(); |
} elsif ($access eq 'B') { |
if ($furl eq '') { |
$furl = '/adm/navmaps?showOnlyHomework=1'; |
$furl = '/adm/navmaps?showOnlyHomework=1'; |
|
} |
} |
} |
$msg = &mt('Entering [_1] ...', |
$msg = '<p>'.&mt('Entering [_1] ...', |
$env{'course.'.$cdom.'_'.$cnum.'.description'}); |
$env{'course.'.$cdom.'_'.$cnum.'.description'}). |
&redirect_user($r, &mt('Entering [_1]', |
'</p>'; |
$env{'course.'.$cdom.'_'.$cnum.'.description'}), |
&finish_loading_course($r,$msg,$furl,$only_body); |
$furl, $msg); |
|
} |
} |
return OK; |
$r->rflush(); |
|
return OK; |
} |
} |
} |
} |
# |
# |
Line 778 ENDENTERKEY
|
Line 1130 ENDENTERKEY
|
$redirect_url); |
$redirect_url); |
return OK; |
return OK; |
} |
} |
|
if ($role eq 'da') { |
|
my $redirect_url = '/adm/menu/'; |
|
&redirect_user($r,&mt('Loading Domain Helpdesk Assistant Menu'), |
|
$redirect_url); |
|
return OK; |
|
} |
if ($role eq 'sc') { |
if ($role eq 'sc') { |
my $redirect_url = '/adm/grades?command=scantronupload'; |
my $redirect_url = '/adm/grades?command=scantronupload'; |
&redirect_user($r,&mt('Loading Data Upload Page'), |
&redirect_user($r,&mt('Loading Data Upload Page'), |
Line 808 ENDENTERKEY
|
Line 1166 ENDENTERKEY
|
$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 819 ENDENTERKEY
|
Line 1181 ENDENTERKEY
|
if ($domdefs{'catauth'}) { |
if ($domdefs{'catauth'}) { |
$cattype = $domdefs{'catauth'}; |
$cattype = $domdefs{'catauth'}; |
} |
} |
my $funcs = &get_roles_functions($showcount,$cattype); |
my ($funcs,$crumbsright); |
my $crumbsright; |
unless (($norolelist) && ((split(/:/,$env{'user.error.msg'}))[2])) { |
if ($env{'browser.mobile'}) { |
$funcs = &get_roles_functions($showcount,$cattype); |
$crumbsright = $funcs; |
if ($env{'browser.mobile'}) { |
undef($funcs); |
$crumbsright = $funcs; |
|
undef($funcs); |
|
} |
} |
} |
my $start_page=&Apache::loncommon::start_page($pagetitle,undef,{bread_crumbs=>$brcrum, |
my $start_page=&Apache::loncommon::start_page($pagetitle,undef,{bread_crumbs=>$brcrum, |
bread_crumbs_component=>$crumbsright}); |
bread_crumbs_component=>$crumbsright}); |
Line 930 ENDHEADER
|
Line 1294 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 960 ENDHEADER
|
Line 1332 ENDHEADER
|
$r->print('<input type="hidden" name="newrole" value="" />'); |
$r->print('<input type="hidden" name="newrole" value="" />'); |
$r->print('<input type="hidden" name="display" value="'.$display.'" />'); |
$r->print('<input type="hidden" name="display" value="'.$display.'" />'); |
$r->print('<input type="hidden" name="state" value="" />'); |
$r->print('<input type="hidden" name="state" value="" />'); |
|
if ($blocked_by_ip) { |
|
my $blocked_role = 'student'; |
|
if ($blocked_type eq 'Community') { |
|
$blocked_role = 'member'; |
|
} |
|
$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].', |
|
lc($blocked_type),$blocked_role,$clientip). |
|
'</span></h3>'); |
|
} |
} |
} |
$r->rflush(); |
$r->rflush(); |
|
|
Line 991 ENDHEADER
|
Line 1373 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) { |
&requestcourse_advice($r,$cattype,$inrole); |
my $elapsed = 0; |
|
if ($now && $update) { |
|
$elapsed = $now - $update; |
|
} |
|
&requestcourse_advice($r,$cattype,$inrole,$elapsed); |
$r->print('</form>'); |
$r->print('</form>'); |
if ($countfuture) { |
if ($countfuture) { |
$r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture)); |
$r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture)); |
Line 1025 ENDHEADER
|
Line 1431 ENDHEADER
|
} |
} |
# ----------------------------------------------------------------------- Table |
# ----------------------------------------------------------------------- Table |
|
|
if (($numdc > 0) || (($numdh > 0) && ($numadhoc > 0))) { |
if (($numdc > 0) || (($numhelpdesk > 0) && ($numadhoc > 0))) { |
$r->print(&coursepick_jscript()); |
$r->print(&coursepick_jscript(). |
$r->print(&Apache::loncommon::coursebrowser_javascript(). |
&Apache::loncommon::coursebrowser_javascript()); |
&Apache::loncommon::authorbrowser_javascript()); |
} |
|
if ($numdc > 0) { |
|
$r->print(&Apache::loncommon::authorbrowser_javascript()); |
} |
} |
|
|
unless ((!&Apache::loncommon::show_course()) || ($nochoose) || ($countactive==1)) { |
unless ((!&Apache::loncommon::show_course()) || ($nochoose) || ($countactive==1)) { |
Line 1061 ENDHEADER
|
Line 1469 ENDHEADER
|
if ($role =~ m{^dc\./($match_domain)/$} |
if ($role =~ m{^dc\./($match_domain)/$} |
&& $dcroles{$1}) { |
&& $dcroles{$1}) { |
$output .= &adhoc_roles_row($1,'recent'); |
$output .= &adhoc_roles_row($1,'recent'); |
} elsif ($role =~ m{^(dh)\./($match_domain)/$}) { |
} elsif ($role =~ m{^(dh|da)\./($match_domain)/$}) { |
$output .= &adhoc_customroles_row($1,$2,'recent',$update,$then); |
$output .= &adhoc_customroles_row($1,$2,'recent',$update,$then); |
} |
} |
} elsif ($numdc > 0) { |
} elsif ($numdc > 0) { |
Line 1228 sub gather_roles {
|
Line 1636 sub gather_roles {
|
$trole=Apache::lonnet::plaintext($role); |
$trole=Apache::lonnet::plaintext($role); |
my $ttype; |
my $ttype; |
my $twhere; |
my $twhere; |
|
my $skipcal; |
my ($tdom,$trest,$tsection)= |
my ($tdom,$trest,$tsection)= |
split(/\//,Apache::lonnet::declutter($where)); |
split(/\//,Apache::lonnet::declutter($where)); |
# First, Co-Authorship roles |
# First, Co-Authorship roles |
Line 1342 sub gather_roles {
|
Line 1751 sub gather_roles {
|
$env{'course.'.$tcourseid.'.description'}=$twhere; |
$env{'course.'.$tcourseid.'.description'}=$twhere; |
$sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey; |
$sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey; |
$ttype = 'Unavailable'; |
$ttype = 'Unavailable'; |
|
$skipcal = 1; |
} |
} |
} |
} |
if ($tsection) { |
if ($tsection) { |
Line 1360 sub gather_roles {
|
Line 1770 sub gather_roles {
|
($role_text,$role_text_end) = |
($role_text,$role_text_end) = |
&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain, |
&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain, |
$advanced,$tremark,$tbg,$trole,$twhere,$tpstart, |
$advanced,$tremark,$tbg,$trole,$twhere,$tpstart, |
$tpend,$nochoose,$button,$switchserver,$reinit,$switchwarning); |
$tpend,$nochoose,$button,$switchserver,$reinit, |
|
$switchwarning,$skipcal); |
$roletext->{$envkey}=[$role_text,$role_text_end]; |
$roletext->{$envkey}=[$role_text,$role_text_end]; |
if (!$sortkey) {$sortkey=$twhere."\0".$envkey;} |
if (!$sortkey) {$sortkey=$twhere."\0".$envkey;} |
$sortrole->{$sortkey}=$envkey; |
$sortrole->{$sortkey}=$envkey; |
Line 1487 sub print_rolerows {
|
Line 1898 sub print_rolerows {
|
$output .= &adhoc_roles_row($1,''); |
$output .= &adhoc_roles_row($1,''); |
} |
} |
} |
} |
} elsif ($sortrole->{$which} =~ m{^user\.role\.(dh)\./($match_domain)/}) { |
} elsif ($sortrole->{$which} =~ m{^user\.role\.(dh|da)\./($match_domain)/}) { |
$output .= &adhoc_customroles_row($1,$2,'',$update,$then); |
$output .= &adhoc_customroles_row($1,$2,'',$update,$then); |
} |
} |
} |
} |
Line 1509 sub print_rolerows {
|
Line 1920 sub print_rolerows {
|
} |
} |
|
|
sub findcourse_advice { |
sub findcourse_advice { |
my ($r,$cattype) = @_; |
my ($r,$cattype,$elapsed) = @_; |
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'},'"<>&'); |
if (&Apache::lonnet::auto_run(undef,$env{'user.domain'})) { |
if (&Apache::lonnet::auto_run(undef,$env{'user.domain'})) { |
$r->print(&mt('If you were expecting to see an active role listed for a particular course in the [_1] domain, it may be missing for one of the following reasons:',$domdesc).' |
$r->print('<p>'.&mt('If you were expecting to see an active role listed for a particular course in the [_1] domain, it may be missing for one of the following reasons:',$domdesc).' |
<ul> |
<ul> |
<li>'.&mt('The course has yet to be created.').'</li> |
<li>'.&mt('The course has yet to be created.').'</li> |
<li>'.&mt('Automatic enrollment of registered students has not been enabled for the course.').'</li> |
<li>'.&mt('Automatic enrollment of registered students has not been enabled for the course.').'</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('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> |
</ul>'); |
<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>'); |
} else { |
} 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.').'<br />'); |
$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) { |
|
$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 />'. |
|
&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 1534 sub findcourse_advice {
|
Line 1951 sub findcourse_advice {
|
} |
} |
|
|
sub requestcourse_advice { |
sub requestcourse_advice { |
my ($r,$cattype,$inrole) = @_; |
my ($r,$cattype,$inrole,$elapsed) = @_; |
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'},'"<>&'); |
my (%can_request,%request_doms,$output); |
my (%can_request,%request_doms,$output); |
Line 1595 sub requestcourse_advice {
|
Line 2012 sub requestcourse_advice {
|
} else { |
} else { |
$r->print('<h3>'.&mt('Currently no active roles, courses or communities').'</h3>'); |
$r->print('<h3>'.&mt('Currently no active roles, courses or communities').'</h3>'); |
} |
} |
&findcourse_advice($r,$cattype); |
&findcourse_advice($r,$cattype,$elapsed); |
} |
} |
return; |
return; |
} |
} |
Line 1657 sub privileges_info {
|
Line 2074 sub privileges_info {
|
|
|
sub build_roletext { |
sub build_roletext { |
my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$trole,$twhere, |
my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$trole,$twhere, |
$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit,$switchwarning) = @_; |
$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit,$switchwarning,$skipcal) = @_; |
my ($roletext,$roletext_end); |
my ($roletext,$roletext_end,$poss_adhoc); |
my $is_dc=($trolecode =~ m/^dc\./); |
if ($trolecode =~ m/^d(c|h|a)\./) { |
my $rowspan=($is_dc) ? '' |
$poss_adhoc = 1; |
|
} |
|
my $rowspan=($poss_adhoc) ? '' |
: ' rowspan="2" '; |
: ' rowspan="2" '; |
|
|
unless ($nochoose) { |
unless ($nochoose) { |
Line 1713 sub build_roletext {
|
Line 2132 sub build_roletext {
|
$trolecode."','".$buttonname.'\');" /></td>'; |
$trolecode."','".$buttonname.'\');" /></td>'; |
} |
} |
} |
} |
if ($trolecode !~ m/^(dc|ca|au|aa)\./) { |
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 1721 sub build_roletext {
|
Line 2140 sub build_roletext {
|
.'<td>'.$twhere.'</td>' |
.'<td>'.$twhere.'</td>' |
.'<td>'.$tpstart.'</td>' |
.'<td>'.$tpstart.'</td>' |
.'<td>'.$tpend.'</td>'; |
.'<td>'.$tpend.'</td>'; |
if (!$is_dc) { |
unless ($poss_adhoc) { |
$roletext_end = '<td colspan="4">'. |
$roletext_end = '<td colspan="4">'. |
$tremark.' '. |
$tremark.' '. |
'</td>'; |
'</td>'; |
Line 1747 sub check_author_homeserver {
|
Line 2166 sub check_author_homeserver {
|
} |
} |
|
|
sub check_for_adhoc { |
sub check_for_adhoc { |
my ($dcroles,$dhroles,$update,$then) = @_; |
my ($dcroles,$helpdeskroles,$update,$then) = @_; |
my $numdc = 0; |
my $numdc = 0; |
my $numdh = 0; |
my $numhelpdesk = 0; |
my $numadhoc = 0; |
my $numadhoc = 0; |
my $num_custom_adhoc = 0; |
my $num_custom_adhoc = 0; |
if ($env{'user.adv'}) { |
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)\.\/($match_domain)\/$/) { |
if ($envkey=~/^user\.role\.(dc|dh|da)\.\/($match_domain)\/$/) { |
my $role = $1; |
my $role = $1; |
my $roledom = $2; |
my $roledom = $2; |
my $liverole = 1; |
my $liverole = 1; |
my ($tstart,$tend)=split(/\./,$env{$envkey}); |
my ($tstart,$tend)=split(/\./,$env{$envkey}); |
my $limit = $update; |
my $limit = $update; |
if ((($role eq 'dc') && ($env{'request.role'} eq 'dc./'.$roledom.'/')) || |
if ($env{'request.role'} eq "$role./$roledom/") { |
(($role eq 'dh') && ($env{'request.role'} eq 'dh./'.$roledom.'/'))) { |
|
$limit = $then; |
$limit = $then; |
} |
} |
if ($tstart && $tstart>$limit) { $liverole = 0; } |
if ($tstart && $tstart>$limit) { $liverole = 0; } |
Line 1771 sub check_for_adhoc {
|
Line 2189 sub check_for_adhoc {
|
$dcroles->{$roledom} = $envkey; |
$dcroles->{$roledom} = $envkey; |
$numdc++; |
$numdc++; |
} else { |
} else { |
$dhroles->{$roledom} = $envkey; |
$helpdeskroles->{$roledom} = $envkey; |
my %domdefaults = &Apache::lonnet::get_domain_defaults($roledom); |
my %domdefaults = &Apache::lonnet::get_domain_defaults($roledom); |
if (ref($domdefaults{'adhocroles'}) eq 'HASH') { |
if (ref($domdefaults{'adhocroles'}) eq 'HASH') { |
if (keys(%{$domdefaults{'adhocroles'}})) { |
if (keys(%{$domdefaults{'adhocroles'}})) { |
$numadhoc ++; |
$numadhoc ++; |
} |
} |
} |
} |
$numdh++; |
$numhelpdesk++; |
} |
} |
} |
} |
} |
} |
} |
} |
} |
} |
return ($numdc,$numdh,$numadhoc); |
return ($numdc,$numhelpdesk,$numadhoc); |
} |
} |
|
|
sub adhoc_course_role { |
sub adhoc_course_role { |
Line 1959 sub display_cc_role {
|
Line 2377 sub display_cc_role {
|
my $trolecode = $ccrole.'./'.$tdom.'/'.$trest; |
my $trolecode = $ccrole.'./'.$tdom.'/'.$trest; |
my $twhere; |
my $twhere; |
my $ttype; |
my $ttype; |
|
my $skipcal; |
my $tbg='LC_roles_is'; |
my $tbg='LC_roles_is'; |
my %newhash=&Apache::lonnet::coursedescription($tcourseid); |
my %newhash=&Apache::lonnet::coursedescription($tcourseid); |
if (%newhash) { |
if (%newhash) { |
Line 1970 sub display_cc_role {
|
Line 2389 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; |
} |
} |
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; |
($roletext,$roletext_end) = &build_roletext($trolecode,$tdom,$trest,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,''); |
($roletext,$roletext_end) = &build_roletext($trolecode,$tdom,$trest,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,'','','',$skipcal); |
|
} |
|
} |
|
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); |
return ($roletext,$roletext_end); |
Line 1983 sub adhoc_roles_row {
|
Line 2435 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() |
.' <td colspan="5" class="LC_textsize_mobile">' |
.' <td colspan="5" class="LC_textsize_mobile">' |
.&mt('[_1]Ad hoc[_2] roles in domain [_3] --' |
.&mt('[_1]Ad hoc[_2] roles in domain [_3]' |
,'<span class="LC_cusr_emph">','</span>',$dcdom) |
,'<span class="LC_cusr_emph">','</span>',$dcdom) |
.' '; |
.' -- '; |
my $role = 'cc'; |
my $role = 'cc'; |
my $selectcclink = &courselink($dcdom,$rowtype,$role); |
my $selectcclink = &courselink($dcdom,$rowtype,$role); |
my $ccrole = &Apache::lonnet::plaintext('co',undef,undef,1); |
my $ccrole = &Apache::lonnet::plaintext('co',undef,undef,1); |
Line 2013 sub adhoc_customroles_row {
|
Line 2465 sub adhoc_customroles_row {
|
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() |
.' <td colspan="5" class="LC_textsize_mobile">' |
.' <td colspan="5" class="LC_textsize_mobile">' |
.&mt('[_1]Ad hoc[_2] course/community roles in domain [_3] --', |
.&mt('[_1]Ad hoc[_2] course/community roles in domain [_3]', |
'<span class="LC_cusr_emph">','</span>',$dhdom) |
'<span class="LC_cusr_emph">','</span>',$dhdom) |
.' '.&courselink($dhdom,$rowtype,$role); |
.' -- '.&courselink($dhdom,$rowtype,$role); |
} |
} |
} |
} |
return; |
return; |
Line 2961 sub get_queued {
|
Line 3413 sub get_queued {
|
$output.'</fieldset></div><br clear="all" />'; |
$output.'</fieldset></div><br clear="all" />'; |
} |
} |
|
|
|
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; |
1; |
__END__ |
__END__ |
|
|