--- loncom/auth/lonroles.pm 2012/07/21 21:09:03 1.269 +++ loncom/auth/lonroles.pm 2012/08/14 15:45:25 1.270 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.269 2012/07/21 21:09:03 raeburn Exp $ +# $Id: lonroles.pm,v 1.270 2012/08/14 15:45:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -225,6 +225,95 @@ sub handler { $updateresult .= &update_session_roles(); &Apache::lonnet::appenv({'user.update.time' => $now}); $update = $now; + &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.'). + ''; + } + } + } + } + } } my $envkey; @@ -684,6 +773,12 @@ function setToUpdate(thisform) { thisform.submit(); } +function setToRequestAuthor(thisform) { + thisform.requestauthor.value='1'; + thisform.selectrole.value=''; + thisform.submit(); +} + // ]]> ENDHEADER @@ -750,7 +845,12 @@ ENDHEADER &Apache::loncommon::end_page()); return OK; } else { - $r->print($updateresult); + if ($updateresult || $reqauthor) { + $r->print('
'. + $updateresult. + $reqauthor. + '
'); + } if (($ENV{'REDIRECT_QUERY_STRING'}) && ($fn)) { $fn.='?'.$ENV{'REDIRECT_QUERY_STRING'}; } @@ -778,6 +878,42 @@ ENDHEADER ''; } + my ($requestauthor,$requestcrs); + unless ($reqauthor) { + if ($env{'environment.canrequest.author'}) { + unless (&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)); + } elsif (($status eq 'approved') && ($do_update)) { + my %roleshash = &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles', + ['active'],['au'],[$env{'user.domain'}]); + if (keys(%roleshash)) { + $requestauthor = &mt('Your request for an author role has been approved.').'
'; + if ($show_course) { + $requestauthor .= &mt('Use the "Check for new courses" button to update your list of roles.'); + } else { + $requestauthor .= &mt('Use the "Check for new roles" button to update your list of roles.'); + } + $requestauthor = ''.$requestauthor.''; + } + } + unless ($requestauthor) { + $requestauthor = + ''. + ''; + } + } + } + } + my $do_update; + unless (($env{'form.source'} eq 'login') || ($env{'form.doupdate'})) { + $do_update = ''. + ''; + } if ($env{'user.adv'}) { my $showall = '