--- loncom/auth/lonroles.pm 2012/08/14 15:45:25 1.270
+++ loncom/auth/lonroles.pm 2012/08/15 16:56:52 1.273
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.270 2012/08/14 15:45:25 raeburn Exp $
+# $Id: lonroles.pm,v 1.273 2012/08/15 16:56:52 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -225,95 +225,13 @@ sub handler {
$updateresult .= &update_session_roles();
&Apache::lonnet::appenv({'user.update.time' => $now});
$update = $now;
- &reqauthor_check();
+ &Apache::loncoursequeueadmin::reqauthor_check();
}
# -------------------------------------------------- Check for author requests
-
my $reqauthor;
if ($env{'form.requestauthor'}) {
- if ($env{'environment.canrequest.author'}) {
- unless (&is_active_author()) {
- my $queued = &reqauthor_check();
- my $skipreq;
- if ($queued =~ /^approval:\d+$/) {
- my ($status,$timestamp) = split(/:/,$env{'environment.requestauthorqueued'});
- if ($status eq 'approval') {
- $reqauthor = ''.
- &mt('A request for authoring space submitted on [_1] is awaiting approval',
- &Apache::lonlocal::locallocaltime($timestamp)).
- '';
- }
- $skipreq = 1;
- } elsif ($queued =~ /^approved:\d+$/) {
- my %roleshash = &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',
- ['active'],['au'],[$env{'user.domain'}]);
- if (keys(%roleshash) > 0) {
- $skipreq = 1;
- }
- }
- unless ($skipreq) {
- my (@inststatuses,%domconfig);
- %domconfig =
- &Apache::lonnet::get_dom('configuration',
- ['requestauthor'],$env{'user.domain'});
- my $val = &Apache::loncoursequeueadmin::get_processtype('requestauthor',$env{'user.name'},
- $env{'user.domain'},$env{'user.adv'},
- $env{'user.domain'},undef,
- \@inststatuses,\%domconfig);
- if ($val eq 'automatic') {
- if (&Apache::lonnet::assignrole($env{'user.domain'},$env{'user.name'},'/'.$env{'user.domain'}.'/',
- 'au',undef,$now,undef,undef,'requestauthor') eq 'ok') {
- $reqauthor = ''.
- &mt('Access to authoring space has been activated').'
';
- &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.').
- '';
- }
- }
- }
- }
- }
+ $reqauthor = &Apache::loncoursequeueadmin::process_reqauthor(\$update);
}
my $envkey;
@@ -881,7 +799,7 @@ ENDHEADER
my ($requestauthor,$requestcrs);
unless ($reqauthor) {
if ($env{'environment.canrequest.author'}) {
- unless (&is_active_author()) {
+ unless (&Apache::loncoursequeueadmin::is_active_author()) {
my ($status,$timestamp) = split(/:/,$env{'environment.requestauthorqueued'});
if ($status eq 'approval') {
$requestauthor = &mt('A request for authoring space submitted on [_1] is awaiting approval',&Apache::lonlocal::locallocaltime($timestamp));
@@ -1131,33 +1049,6 @@ ENDHEADER
return OK;
}
-sub is_active_author {
- if ($env{'user.role.au./'.$env{'user.domain'}.'/'} =~ /^(\d*)\.(\d*)$/) {
- if ((!$1 || $1 < time) &&
- (!$2 || $2 > time)) {
- return 1;
- }
- }
- return;
-}
-
-sub reqauthor_check {
- my $queued = $env{'environment.requestauthorqueued'};
- my %reqauthor = &Apache::lonnet::get('requestauthor',['author_status','author'],
- $env{'user.domain'},$env{'user.name'});
- my $reqstatus = $reqauthor{'author_status'};
- if (($reqstatus eq '' && $queued ne '') ||
- ($env{'environment.requestauthorqueued'} !~ /^\Q$reqstatus\E/)) {
- if (ref($reqauthor{'author'}) eq 'HASH') {
- $queued = $reqstatus.':'.$reqauthor{'author'}{'timestamp'};
- } else {
- undef($queued);
- }
- &Apache::lonnet::appenv({'environment.requestauthorqueued' => $queued});
- }
- return $queued;
-}
-
sub gather_roles {
my ($update,$refresh,$now,$reinit,$nochoose,$roletext,$sortrole,$roleclass,$futureroles,$timezones,$loncaparev) = @_;
my ($countactive,$countfuture,$inrole,$possiblerole) = (0,0,0,'');
@@ -2071,7 +1962,7 @@ sub update_session_roles {
}
if ($env{$envkey} eq '') {
my $status_in_db =
- &curr_role_status($tstart,$tend,$refresh,$now);
+ &curr_role_status($tstart,$tend,$now,$now);
&gather_roleprivs(\%allroles,\%allgroups,\%userroles,$where,$role,$tstart,$tend,$status_in_db);
if (($role eq 'st') && ($env{'request.role'} =~ m{^\Q$role\E\.\Q/$udom/$uname\E})) {
if ($status_in_db eq 'active') {
@@ -2115,7 +2006,7 @@ sub update_session_roles {
my $status_in_env =
&curr_role_status($currstart,$currend,$refresh,$update);
my $status_in_db =
- &curr_role_status($tstart,$tend,$refresh,$now);
+ &curr_role_status($tstart,$tend,$now,$now);
if ($status_in_env ne $status_in_db) {
if ($status_in_env eq 'active') {
if ($role eq 'st') {