--- 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') {