--- loncom/auth/lonroles.pm 2014/04/05 12:25:19 1.269.2.17
+++ loncom/auth/lonroles.pm 2012/08/14 17:35:04 1.271
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.269.2.17 2014/04/05 12:25:19 raeburn Exp $
+# $Id: lonroles.pm,v 1.271 2012/08/14 17:35:04 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -138,8 +138,6 @@ use Apache::lonlocal;
use Apache::lonpageflip();
use Apache::lonnavdisplay();
use Apache::loncoursequeueadmin;
-use Apache::longroup;
-use Apache::lonrss;
use GDBM_File;
use LONCAPA qw(:DEFAULT :match);
use HTML::Entities;
@@ -151,7 +149,6 @@ sub redirect_user {
&Apache::loncommon::content_type($r,'text/html');
&Apache::loncommon::no_cache($r);
$r->send_http_header;
- my $swinfo=&Apache::lonmenu::rawconfig();
# Breadcrumbs
my $brcrum = [{'href' => $url,
@@ -166,11 +163,6 @@ sub redirect_user {
$url=~s/ /\%20/g;
$r->print(< $msg
';
+ &update_session_roles();
+ &Apache::lonnet::appenv({'user.update.time' => $now});
+ $update = $now;
+ } else {
+ $reqauthor = ''.
+ &mt('An error occurred while activating your access to authoring space');
+ }
+ } elsif ($val eq 'approval') {
+ my $domconfiguser = &Apache::lonnet::get_domainconfiguser($env{'user.domain'});
+ if (&Apache::lonnet::put('requestauthorqueue',{ $env{'user.name'}.'_'.$val => $now },
+ $env{'user.domain'},$domconfiguser) eq 'ok') {
+ my %userrequest = (
+ author => {
+ timestamp => $now,
+ status => $val,
+ },
+ author_status => $val,
+ );
+ my $req_notifylist;
+ if (ref($domconfig{'requestauthor'}) eq 'HASH') {
+ if (ref($domconfig{'requestauthor'}{'notify'}) eq 'HASH') {
+ my $req_notifylist = $domconfig{'requestauthor'}{'notify'}{'approval'};
+ if ($req_notifylist) {
+ my $fullname = &Apache::loncommon::plainname($env{'user.name'},
+ $env{'user.domain'});
+ my $sender = $env{'user.name'}.':'.$env{'user.domain'};
+ my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');
+ &Apache::loncoursequeueadmin::send_selfserve_notification($req_notifylist,
+ "$fullname ($env{'user.name'}:$env{'user.domain'})",undef,$domdesc,
+ $now,'authorreq',$sender);
+ }
+ }
+ }
+ my $userresult =
+ &Apache::lonnet::put('requestauthor',\%userrequest,$env{'user.domain'},$env{'user.name'});
+ $reqauthor = ''.
+ &mt('Your request for authoring space has been submitted for approval.').
+ '';
+ &Apache::lonnet::appenv({'environment.requestauthorqueued' => $val.':'.$now});
+ } else {
+ $reqauthor = ''.
+ &mt('An error occurred saving your request for authoring space.').
+ '';
+ }
+ }
+ }
+ }
+ }
}
my $envkey;
my %dcroles = ();
my $numdc = &check_fordc(\%dcroles,$update,$then);
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});
my $loncaparev = $Apache::lonnet::perlvar{'lonVersion'};
# ================================================================== Roles Init
@@ -294,15 +362,13 @@ sub handler {
"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)) {
+ foreach my $envkey (keys %env) {
# Is this an ad-hoc Coordinator role?
if (my ($ccrole,$domain,$coursenum) =
($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) {
if ($dcroles{$domain}) {
- if (&Apache::lonnet::check_adhoc_privs($domain,$coursenum,
- $update,$refresh,$now,$ccrole)) {
- &Apache::lonnet::appenv({"environment.internal.$domain.$coursenum.$ccrole.adhoc" => time});
- }
+ &Apache::lonnet::check_adhoc_privs($domain,$coursenum,
+ $update,$refresh,$now,$ccrole);
}
last;
}
@@ -317,7 +383,6 @@ sub handler {
my $trolecode = 'au./'.$domain.'/';
my $switchserver = '/adm/switchserver?otherserver='.$home.'&role='.$trolecode;
$r->internal_redirect($switchserver);
- return OK;
}
last;
}
@@ -329,7 +394,6 @@ sub handler {
my $trolecode = 'ca./'.$domain.'/'.$user;
my $switchserver = '/adm/switchserver?otherserver='.$home.'&role='.$trolecode;
$r->internal_redirect($switchserver);
- return OK;
}
last;
}
@@ -351,7 +415,6 @@ sub handler {
my $switchserver = '/adm/switchserver?'
.'otherserver='.$home.'&role='.$trolecode;
$r->internal_redirect($switchserver);
- return OK;
}
} else {
delete($env{$envkey});
@@ -364,7 +427,7 @@ sub handler {
}
}
- foreach $envkey (keys(%env)) {
+ foreach $envkey (keys %env) {
next if ($envkey!~/^user\.role\./);
my ($where,$trolecode,$role,$tstatus,$tend,$tstart);
&Apache::lonnet::role_status($envkey,$update,$refresh,$now,\$role,\$where,
@@ -526,39 +589,16 @@ ENDENTERKEY
if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) {
my $msg;
- my ($furl,$ferr)=
- &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
- unless ($ferr) {
- unless (($env{'form.switchrole'}) ||
- ($env{"environment.internal.$cdom.$cnum.$role.adhoc"})) {
- &Apache::lonnet::put('nohist_crslastlogin',
- {$env{'user.name'}.':'.$env{'user.domain'}.
- ':'.$csec.':'.$role => $now},$cdom,$cnum);
- }
- my ($feeds,$syllabus_time);
- &Apache::lonrss::advertisefeeds($cnum,$cdom,undef,\$feeds);
- &Apache::lonnet::appenv({'request.course.feeds' => $feeds});
- &Apache::lonnet::get_numsuppfiles($cnum,$cdom,1);
- unless ($env{'course.'.$cdom.'_'.$cnum.'.updatedsyllabus'}) {
- unless (($env{'course.'.$cdom.'_'.$cnum.'.externalsyllabus'}) ||
- ($env{'course.'.$cdom.'_'.$cnum.'.uploadedsyllabus'})) {
- my %syllabus=&Apache::lonnet::dump('syllabus',$cdom,$cnum);
- $syllabus_time = $syllabus{'uploaded.lastmodified'};
- if ($syllabus_time) {
- &Apache::lonnet::appenv({'request.course.syllabustime' => $syllabus_time});
- }
- }
- }
- }
+ my ($furl,$ferr)=
+ &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
if (($env{'form.orgurl'}) &&
- ($env{'form.orgurl'}!~/^\/adm\/flip/) &&
- ($env{'form.orgurl'} ne '/adm/roles')) {
+ ($env{'form.orgurl'}!~/^\/adm\/flip/)) {
my $dest=$env{'form.orgurl'};
if ($env{'form.symb'}) {
if ($dest =~ /\?/) {
$dest .= '&';
} else {
- $dest .= '?';
+ $dest .= '?'
}
$dest .= 'symb='.$env{'form.symb'};
}
@@ -597,60 +637,24 @@ ENDENTERKEY
} else {
# Check to see if the user is a CC entering a course
# for the first time
+ my (undef, undef, $role, $courseid) = split(/\./, $envkey);
+ if (substr($courseid, 0, 1) eq '/') {
+ $courseid = substr($courseid, 1);
+ }
+ $courseid =~ s/\//_/;
if ((($role eq 'cc') || ($role eq 'co'))
- && ($env{'course.' .$cdom.'_'.$cnum.'.course.helper.not.run'})) {
+ && ($env{'course.' . $courseid .'.course.helper.not.run'})) {
$furl = "/adm/helper/course.initialization.helper";
# Send the user to the course they selected
} elsif ($env{'request.course.id'}) {
- my ($dest,$destsymb,$checkenc);
- $dest = $env{'form.destinationurl'};
- $destsymb = $env{'form.destsymb'};
- if ($dest ne '') {
- if ($env{'form.switchrole'}) {
- if ($destsymb ne '') {
- if ($destsymb !~ m{^/enc/}) {
- unless ($env{'request.role.adv'}) {
- $checkenc = 1;
- }
- }
- }
- if ($dest =~ m{^/enc/}) {
- if ($env{'request.role.adv'}) {
- $dest = &Apache::lonenc::unencrypted($dest);
- if ($destsymb eq '') {
- ($destsymb) = ($dest =~ /(?:\?|\&)symb=([^\&]*)/);
- $destsymb = &unescape($destsymb);
- }
- }
- } else {
- if ($destsymb eq '') {
- ($destsymb) = ($dest =~ /(?:\?|\&)symb=([^\&]+)/);
- $destsymb = &unescape($destsymb);
- }
- unless ($env{'request.role.adv'}) {
- $checkenc = 1;
- }
- }
- if (($checkenc) && ($destsymb ne '')) {
- my ($encstate,$unencsymb,$res);
- $unencsymb = &Apache::lonnet::symbclean($destsymb);
- (undef,undef,$res) = &Apache::lonnet::decode_symb($unencsymb);
- &Apache::lonnet::symbverify($unencsymb,$res,\$encstate);
- if ($encstate) {
- if (($dest ne '') && ($dest !~ m{^/enc/})) {
- $dest=&Apache::lonenc::encrypted($dest);
- }
- }
- }
- }
- unless (($dest =~ m{^/enc/}) || ($dest =~ /(\?|\&)symb=.+___\d+___.+/)) {
- if (($destsymb ne '') && ($destsymb !~ m{^/enc/})) {
- my $esc_symb = &escape($destsymb);
- $dest .= '?symb='.$esc_symb;
- }
+ if ($env{'form.destinationurl'}) {
+ my $dest = $env{'form.destinationurl'};
+ if ($env{'form.destsymb'} ne '') {
+ my $esc_symb = &HTML::Entities::encode($env{'form.destsymb'},'"<>&');
+ $dest .= '?symb='.$esc_symb;
}
&redirect_user($r, &mt('Entering [_1]',
- $env{'course.'.$env{'request.course.id'}.'.description'}),
+ $env{'course.'.$courseid.'.description'}),
$dest, $msg);
return OK;
}
@@ -660,36 +664,25 @@ ENDENTERKEY
$env{'request.course.id'}.'/'
.$env{'request.course.sec'})
) {
- my $startpage = &courseloadpage($env{'request.course.id'});
+ my $startpage = &courseloadpage($courseid);
unless ($startpage eq 'firstres') {
$msg = &mt('Entering [_1] ...',
- $env{'course.'.$env{'request.course.id'}.'.description'});
+ $env{'course.'.$courseid.'.description'});
&redirect_user($r, &mt('New in course'),
'/adm/whatsnew?refpage=start', $msg);
return OK;
}
}
}
- # Are we allowed to look at the first resource?
- if ($furl =~ m{^(/adm/wrapper|)/ext/}) {
- # If it's an external resource,
- # strip off the symb argument and possible query
- my ($exturl,$symb) = ($furl =~ m{^(.+)(?:\?|\&)symb=(.+)$});
- # Unencode $symb
- $symb = &unescape($symb);
- # Then check for permission
- if (!&Apache::lonnet::allowed('bre',$exturl,$symb)) {
- $furl = &Apache::lonpageflip::first_accessible_resource();
- }
- # For other resources just check for permission
- } elsif (!&Apache::lonnet::allowed('bre',$furl)) {
- $furl = &Apache::lonpageflip::first_accessible_resource();
- }
-
+# Are we allowed to look at the first resource?
+ if ($furl !~ m|^/adm/|) {
+# Guess not ...
+ $furl=&Apache::lonpageflip::first_accessible_resource();
+ }
$msg = &mt('Entering [_1] ...',
- $env{'course.'.$cdom.'_'.$cnum.'.description'});
+ $env{'course.'.$courseid.'.description'});
&redirect_user($r, &mt('Entering [_1]',
- $env{'course.'.$cdom.'_'.$cnum.'.description'}),
+ $env{'course.'.$courseid.'.description'}),
$furl, $msg);
}
return OK;
@@ -705,7 +698,7 @@ ENDENTERKEY
$redirect_url .= $where;
}
$redirect_url .= '/';
- &redirect_user($r,&mt('Entering Authoring Space'),
+ &redirect_user($r,&mt('Entering Construction Space'),
$redirect_url);
return OK;
}
@@ -737,28 +730,22 @@ ENDENTERKEY
my $crumbtext = 'User Roles';
my $pagetitle = 'My Roles';
my $recent = &mt('Recent Roles');
- my $standby = &mt('Role selected. Please stand by.');
my $show_course=&Apache::loncommon::show_course();
if ($show_course) {
$crumbtext = 'Courses';
$pagetitle = 'My Courses';
$recent = &mt('Recent Courses');
- $standby = &mt('Course selected. Please stand by.');
}
my $brcrum =[{href=>"/adm/roles",text=>$crumbtext}];
-
- my %roles_in_env;
- my $showcount = &roles_from_env(\%roles_in_env,$update);
-
my $swinfo=&Apache::lonmenu::rawconfig();
my $start_page=&Apache::loncommon::start_page($pagetitle,undef,{bread_crumbs=>$brcrum});
- my $funcs = &get_roles_functions($showcount);
+ my $standby=&mt('Role selected. Please stand by.');
$standby=~s/\n/\\n/g;
- my $noscript='
'.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'
'.&mt('As this is not the case, most functionality in the system will be unavailable.').'
';
+ my $noscript=''.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'
'.&mt('As this is not the case, most functionality in the system will be unavailable.').'
';
$r->print(<
'; + $msg .= '
'.&mt('Course/Community requests').'
'.
- &Apache::loncommon::start_data_table().
- &Apache::loncommon::start_data_table_header_row().
- '
'.&mt('Enrollment requests').'
'.
- $queuedselfenroll.'
'.&mt('Author role request').'
';
- if ($status eq 'approval') {
- $output .= &mt('A request for authoring space submitted on [_1] is awaiting approval',
- &Apache::lonlocal::locallocaltime($timestamp));
- } elsif ($status eq 'approved') {
- my %roleshash =
- &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',
- ['active'],['au'],[$env{'user.domain'}]);
- if (keys(%roleshash)) {
- $output .= ''.
- &mt('Your request for an author role has been approved.').'
'.
- &mt('Use the "Check for changes" link to update your list of roles.').
- '';
- }
- }
- $output .= '