--- loncom/auth/lonroles.pm 2010/07/30 20:35:16 1.255 +++ 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.255 2010/07/30 20:35:16 raeburn Exp $ +# $Id: lonroles.pm,v 1.273 2012/08/15 16:56:52 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -203,12 +203,40 @@ sub handler { my $now=time; my $then=$env{'user.login.time'}; my $refresh=$env{'user.refresh.time'}; + my $update=$env{'user.update.time'}; if (!$refresh) { $refresh = $then; } + if (!$update) { + $update = $then; + } + +# -------------------------------------------------------- Check for new roles + my $updateresult; + if ($env{'form.doupdate'}) { + my $show_course=&Apache::loncommon::show_course(); + my $checkingtxt; + if ($show_course) { + $checkingtxt = &mt('Checking for new courses ...'); + } else { + $checkingtxt = &mt('Checking for new roles ...'); + } + $updateresult = ''.$checkingtxt.''; + $updateresult .= &update_session_roles(); + &Apache::lonnet::appenv({'user.update.time' => $now}); + $update = $now; + &Apache::loncoursequeueadmin::reqauthor_check(); + } + +# -------------------------------------------------- Check for author requests + my $reqauthor; + if ($env{'form.requestauthor'}) { + $reqauthor = &Apache::loncoursequeueadmin::process_reqauthor(\$update); + } + my $envkey; my %dcroles = (); - my $numdc = &check_fordc(\%dcroles,$then); + my $numdc = &check_fordc(\%dcroles,$update,$then); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}); my $loncaparev = $Apache::lonnet::perlvar{'lonVersion'}; @@ -228,13 +256,13 @@ sub handler { if (defined($env{'user.role.'.$env{'form.switchrole'}})) { my ($start,$end) = split(/\./,$env{'user.role.'.$env{'form.switchrole'}}); if (!$end || $end > $now) { - if (!$start || $start < $refresh) { + if (!$start || $start < $update) { $switch_is_active = 1; } } } unless ($switch_is_active) { - &adhoc_course_role($refresh,$then); + &adhoc_course_role($refresh,$update,$then); } } my %temp=('logout_'.$env{'request.course.id'} => time); @@ -245,6 +273,7 @@ sub handler { "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'}}); @@ -256,7 +285,7 @@ sub handler { ($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) { if ($dcroles{$domain}) { &Apache::lonnet::check_adhoc_privs($domain,$coursenum, - $then,$refresh,$now,$ccrole); + $update,$refresh,$now,$ccrole); } last; } @@ -296,7 +325,7 @@ sub handler { if ($dcroles{$domain}) { my ($server_status,$home) = &check_author_homeserver($user,$domain); if (($server_status eq 'ok') || ($server_status eq 'switchserver')) { - &Apache::lonnet::check_adhoc_privs($domain,$user,$then, + &Apache::lonnet::check_adhoc_privs($domain,$user,$update, $refresh,$now,'ca'); if ($server_status eq 'switchserver') { my $trolecode = 'ca./'.$domain.'/'.$user; @@ -318,7 +347,7 @@ sub handler { foreach $envkey (keys %env) { next if ($envkey!~/^user\.role\./); my ($where,$trolecode,$role,$tstatus,$tend,$tstart); - &Apache::lonnet::role_status($envkey,$then,$refresh,$now,\$role,\$where, + &Apache::lonnet::role_status($envkey,$update,$refresh,$now,\$role,\$where, \$trolecode,\$tstatus,\$tstart,\$tend); if ($env{'form.'.$trolecode}) { if ($tstatus eq 'is') { @@ -329,33 +358,34 @@ sub handler { my @ids = &Apache::lonnet::current_machine_ids(); unless ($loncaparev eq '' && $home && grep(/^\Q$home\E$/,@ids)) { my %curr_reqd_hash = &Apache::lonnet::userenvironment($cdom,$cnum,'internal.releaserequired'); - if ($curr_reqd_hash{'internal.releaserequired'} && - $curr_reqd_hash{'internal.releaserequired'} > $loncaparev) { + if ($curr_reqd_hash{'internal.releaserequired'} ne '') { my ($switchserver,$switchwarning) = &check_release_required($loncaparev,$cdom.'_'.$cnum,$trolecode,$curr_reqd_hash{'internal.releaserequired'}); - &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')); + 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(''); - } 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()); + return OK; } - $r->print('

'.&Apache::loncommon::end_page()); - return OK; } } } @@ -497,7 +527,8 @@ ENDENTERKEY if ($dest =~ m{^/adm/coursedocs\?folderpath}) { if ($env{'request.course.id'} eq $cdom.'_'.$cnum) { my $chome = &Apache::lonnet::homeserver($cnum,$cdom); - &update_content_constraints($cdom,$cnum,$chome,$cdom.'_'.$cnum); + &Apache::loncommon::update_content_constraints($cdom,$cnum,$chome, + $cdom.'_'.$cnum); } } $r->internal_redirect($dest); @@ -579,10 +610,9 @@ ENDENTERKEY if ($role =~ /^(au|ca|aa)$/) { my $redirect_url = '/priv/'; if ($role eq 'au') { - $redirect_url.=$env{'user.name'}; + $redirect_url.=$env{'user.domain'}.'/'.$env{'user.name'}; } else { - $where =~ /\/(.*)$/; - $redirect_url .= $1; + $redirect_url .= $where; } $redirect_url .= '/'; &redirect_user($r,&mt('Entering Construction Space'), @@ -652,8 +682,21 @@ function enterrole (thisform,rolecode,bu thisform.submit(); } else { alert('$standby'); - } + } } + +function setToUpdate(thisform) { + thisform.doupdate.value='1'; + thisform.selectrole.value=''; + thisform.submit(); +} + +function setToRequestAuthor(thisform) { + thisform.requestauthor.value='1'; + thisform.selectrole.value=''; + thisform.submit(); +} + // ]]> ENDHEADER @@ -714,13 +757,18 @@ ENDHEADER } } } -# -------------------------------------------------------- Choice or no choice? if ($nochoose) { $r->print("

".&mt('Sorry ...')."

\n". &mt('This action is currently not authorized.').''. &Apache::loncommon::end_page()); return OK; } else { + if ($updateresult || $reqauthor) { + $r->print('
'. + $updateresult. + $reqauthor. + '
'); + } if (($ENV{'REDIRECT_QUERY_STRING'}) && ($fn)) { $fn.='?'.$ENV{'REDIRECT_QUERY_STRING'}; } @@ -729,21 +777,99 @@ ENDHEADER $r->print(''); $r->print(''); } + $r->rflush(); my (%roletext,%sortrole,%roleclass,%futureroles,%timezones); my ($countactive,$countfuture,$inrole,$possiblerole) = - &gather_roles($then,$refresh,$now,$reinit,$nochoose,\%roletext,\%sortrole,\%roleclass, + &gather_roles($update,$refresh,$now,$reinit,$nochoose,\%roletext,\%sortrole,\%roleclass, \%futureroles,\%timezones,$loncaparev); - $refresh = $now; &Apache::lonnet::appenv({'user.refresh.time' => $refresh}); + my $updatebutton = &mt('Check for role changes'); + my $show_course=&Apache::loncommon::show_course(); + if ($show_course) { + $updatebutton = &mt('Check for new courses'); + } + my $do_update; + unless (($env{'form.source'} eq 'login') || ($env{'form.doupdate'})) { + $do_update = ''. + ''; + } + my ($requestauthor,$requestcrs); + unless ($reqauthor) { + if ($env{'environment.canrequest.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)); + } 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'}) { - $r->print('

' - .' ' - .'

'); + my $showall = '