--- loncom/auth/lonroles.pm 2014/05/20 20:46:13 1.305
+++ loncom/auth/lonroles.pm 2015/04/13 18:32:43 1.311
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.305 2014/05/20 20:46:13 raeburn Exp $
+# $Id: lonroles.pm,v 1.311 2015/04/13 18:32:43 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -202,7 +202,7 @@ sub handler {
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);
if ($redirect) {
&Apache::loncommon::content_type($r,'text/html');
@@ -286,14 +286,15 @@ sub handler {
&Apache::lonnet::put('email_status',\%temp);
&Apache::lonnet::delenv('user.state.'.$env{'request.course.id'});
}
- &Apache::lonnet::appenv({"request.course.id" => '',
- "request.course.fn" => '',
- "request.course.uri" => '',
- "request.course.sec" => '',
- "request.course.tied" => '',
- "request.role" => 'cm',
- "request.role.adv" => $env{'user.adv'},
- "request.role.domain" => $env{'user.domain'}});
+ &Apache::lonnet::appenv({"request.course.id" => '',
+ "request.course.fn" => '',
+ "request.course.uri" => '',
+ "request.course.sec" => '',
+ "request.course.tied" => '',
+ "request.course.timechecked" => '',
+ "request.role" => 'cm',
+ "request.role.adv" => $env{'user.adv'},
+ "request.role.domain" => $env{'user.domain'}});
# Check if user is a DC trying to enter a course or author space and needs privs to be created
if ($numdc > 0) {
foreach my $envkey (keys(%env)) {
@@ -382,30 +383,13 @@ sub handler {
my %curr_reqd_hash = &Apache::lonnet::userenvironment($cdom,$cnum,'internal.releaserequired');
if ($curr_reqd_hash{'internal.releaserequired'} ne '') {
my ($switchserver,$switchwarning) =
- &check_release_required($loncaparev,$cdom.'_'.$cnum,$trolecode,$curr_reqd_hash{'internal.releaserequired'});
+ &Apache::loncommon::check_release_required($loncaparev,$cdom.'_'.$cnum,$trolecode,
+ $curr_reqd_hash{'internal.releaserequired'});
if ($switchwarning ne '' || $switchserver ne '') {
&Apache::loncommon::content_type($r,'text/html');
&Apache::loncommon::no_cache($r);
$r->send_http_header;
- my $end_page=&Apache::loncommon::end_page();
- $r->print(&Apache::loncommon::start_page('Selected course unavailable on this server').
- '
');
- if ($switchwarning) {
- $r->print($switchwarning.'
');
- if (&Apache::loncommon::show_course()) {
- $r->print(&mt('Display courses'));
- } else {
- $r->print(&mt('Display roles'));
- }
- $r->print('');
- } elsif ($switchserver) {
- $r->print(&mt('This course requires a newer version of LON-CAPA than is installed on this server.').
- '
'.
- ''.
- &mt('Switch Server').
- '');
- }
- $r->print('
'.&Apache::loncommon::end_page());
+ $r->print(&Apache::loncommon::check_release_result($switchwarning,$switchserver));
return OK;
}
}
@@ -673,6 +657,7 @@ ENDENTERKEY
}
}
# Are we allowed to look at the first resource?
+ my $access;
if ($furl =~ m{^(/adm/wrapper|)/ext/}) {
# If it's an external resource,
# strip off the symb argument and possible query
@@ -680,14 +665,16 @@ ENDENTERKEY
# Unencode $symb
$symb = &unescape($symb);
# Then check for permission
- if (!&Apache::lonnet::allowed('bre',$exturl,$symb)) {
- $furl = &Apache::lonpageflip::first_accessible_resource();
- }
+ $access = &Apache::lonnet::allowed('bre',$exturl,$symb);
# For other resources just check for permission
- } elsif (!&Apache::lonnet::allowed('bre',$furl)) {
+ } else {
+ $access = &Apache::lonnet::allowed('bre',$furl);
+ }
+ if (!$access) {
$furl = &Apache::lonpageflip::first_accessible_resource();
+ } elsif ($access eq 'B') {
+ $furl = '/adm/navmaps?showOnlyHomework=1';
}
-
$msg = &mt('Entering [_1] ...',
$env{'course.'.$cdom.'_'.$cnum.'.description'});
&redirect_user($r, &mt('Entering [_1]',
@@ -926,12 +913,7 @@ ENDHEADER
# No active roles
if ($countactive==0) {
- if ($inrole) {
- $r->print(''.&mt('Currently no additional roles, courses or communities').'
');
- } else {
- $r->print(''.&mt('Currently no active roles, courses or communities').'
');
- }
- &requestcourse_advice($r,$cattype);
+ &requestcourse_advice($r,$cattype,$inrole);
$r->print('');
if ($countfuture) {
$r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture));
@@ -1072,11 +1054,7 @@ ENDHEADER
my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&');
$r->print(''
.&mt('This LON-CAPA server is version [_1]',$r->dir_config('lonVersion'))
- .'
'
- .''.&mt('Logout').' '
- .''
- .&mt('Course/Community Catalog')
- .'
');
+ .'');
}
$r->print(&Apache::loncommon::end_page());
return OK;
@@ -1220,7 +1198,7 @@ sub gather_roles {
my $required = $env{'course.'.$tcourseid.'.internal.releaserequired'};
if ($required ne '') {
($switchserver,$switchwarning) =
- &check_release_required($loncaparev,$tcourseid,$trolecode,$required);
+ &Apache::loncommon::check_release_required($loncaparev,$tcourseid,$trolecode,$required);
if ($switchserver || $switchwarning) {
$button = 0;
}
@@ -1243,7 +1221,7 @@ sub gather_roles {
my $required = $newhash{'internal.releaserequired'};
if ($required ne '') {
($switchserver,$switchwarning) =
- &check_release_required($loncaparev,$tcourseid,$trolecode,$required);
+ &Apache::loncommon::check_release_required($loncaparev,$tcourseid,$trolecode,$required);
if ($switchserver || $switchwarning) {
$button = 0;
}
@@ -1444,29 +1422,26 @@ sub findcourse_advice {
}
sub requestcourse_advice {
- my ($r,$cattype) = @_;
+ my ($r,$cattype,$inrole) = @_;
my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');
my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&');
- my (%can_request,%request_doms);
+ my (%can_request,%request_doms,$output);
&Apache::lonnet::check_can_request($env{'user.domain'},\%can_request,\%request_doms);
if (keys(%request_doms) > 0) {
my ($types,$typename) = &Apache::loncommon::course_types();
if ((ref($types) eq 'ARRAY') && (ref($typename) eq 'HASH')) {
- $r->print(''.&mt('Request creation of a course or community').'
'.
- ''.&mt('You have rights to request the creation of courses and/or communities in the following domain(s):').'
');
my (@reqdoms,@reqtypes);
foreach my $type (sort(keys(%request_doms))) {
push(@reqtypes,$type);
if (ref($request_doms{$type}) eq 'ARRAY') {
my $domstr = join(', ',map { &Apache::lonnet::domain($_) } sort(@{$request_doms{$type}}));
- $r->print(
+ $output .=
'- '
.&mt('[_1]'.$typename->{$type}.'[_2] in domain: [_3]',
'',
'',
''.$domstr.'')
- .'
'
- );
+ .'';
foreach my $dom (@{$request_doms{$type}}) {
unless (grep(/^\Q$dom\E/,@reqdoms)) {
push(@reqdoms,$dom);
@@ -1489,10 +1464,25 @@ sub requestcourse_advice {
}
if (@reqdoms == 1 || @showtypes > 0) {
$requrl .= '&state=crstype&action=new';
- }
- $r->print('
'.&mt('Use the [_1]request form[_2] to submit a request for creation of a new course or community.','','').'');
+ }
+ if ($output) {
+ $r->print(''.&mt('Request creation of a course or community').'
'.
+ ''.
+ &mt('You have rights to request the creation of courses and/or communities in the following domain(s):').
+ '
'.
+ &mt('Use the [_1]request form[_2] to submit a request for creation of a new course or community.',
+ '','').
+ '');
+ }
}
} elsif (!$env{'user.adv'}) {
+ if ($inrole) {
+ $r->print(''.&mt('Currently no additional roles, courses or communities').'
');
+ } else {
+ $r->print(''.&mt('Currently no active roles, courses or communities').'
');
+ }
&findcourse_advice($r,$cattype);
}
return;
@@ -1647,7 +1637,7 @@ sub check_fordc {
my ($dcroles,$update,$then) = @_;
my $numdc = 0;
if ($env{'user.adv'}) {
- foreach my $envkey (sort keys %env) {
+ foreach my $envkey (sort(keys(%env))) {
if ($envkey=~/^user\.role\.dc\.\/($match_domain)\/$/) {
my $dcdom = $1;
my $livedc = 1;
@@ -1756,58 +1746,6 @@ sub check_forcc {
return $is_cc;
}
-sub check_release_required {
- my ($loncaparev,$tcourseid,$trolecode,$required) = @_;
- my ($switchserver,$warning);
- if ($required ne '') {
- my ($reqdmajor,$reqdminor) = ($required =~ /^(\d+)\.(\d+)$/);
- my ($major,$minor) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/);
- if ($reqdmajor ne '' && $reqdminor ne '') {
- my $otherserver;
- if (($major eq '' && $minor eq '') ||
- (($reqdmajor > $major) || (($reqdmajor == $major) && ($reqdminor > $minor)))) {
- my ($userdomserver) = &Apache::lonnet::choose_server($env{'user.domain'},undef,$required,1);
- my $switchlcrev =
- &Apache::lonnet::get_server_loncaparev($env{'user.domain'},
- $userdomserver);
- my ($swmajor,$swminor) = ($switchlcrev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/);
- if (($swmajor eq '' && $swminor eq '') || ($reqdmajor > $swmajor) ||
- (($reqdmajor == $swmajor) && ($reqdminor > $swminor))) {
- my $cdom = $env{'course.'.$tcourseid.'.domain'};
- if ($cdom ne $env{'user.domain'}) {
- my ($coursedomserver,$coursehostname) = &Apache::lonnet::choose_server($cdom,undef,$required,1);
- my $serverhomeID = &Apache::lonnet::get_server_homeID($coursehostname);
- my $serverhomedom = &Apache::lonnet::host_domain($serverhomeID);
- my %defdomdefaults = &Apache::lonnet::get_domain_defaults($serverhomedom);
- my %udomdefaults = &Apache::lonnet::get_domain_defaults($env{'user.domain'});
- my $remoterev = &Apache::lonnet::get_server_loncaparev($serverhomedom,$coursedomserver);
- my $canhost =
- &Apache::lonnet::can_host_session($env{'user.domain'},
- $coursedomserver,
- $remoterev,
- $udomdefaults{'remotesessions'},
- $defdomdefaults{'hostedsessions'});
-
- if ($canhost) {
- $otherserver = $coursedomserver;
- } else {
- $warning = &mt('Requires LON-CAPA version [_1].',$env{'course.'.$tcourseid.'.internal.releaserequired'}).'
'. &mt("No suitable server could be found amongst servers in either your own domain or in the course's domain.");
- }
- } else {
- $warning = &mt('Requires LON-CAPA version [_1].',$env{'course.'.$tcourseid.'.internal.releaserequired'}).'
'.&mt("No suitable server could be found amongst servers in your own domain (which is also the course's domain).");
- }
- } else {
- $otherserver = $userdomserver;
- }
- }
- if ($otherserver ne '') {
- $switchserver = 'otherserver='.$otherserver.'&role='.$trolecode;
- }
- }
- }
- return ($switchserver,$warning);
-}
-
sub courselink {
my ($dcdom,$rowtype) = @_;
my $courseform=&Apache::loncommon::selectcourse_link