--- loncom/auth/lonroles.pm 2011/10/25 15:15:02 1.263 +++ 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.263 2011/10/25 15:15:02 www Exp $ +# $Id: lonroles.pm,v 1.273 2012/08/15 16:56:52 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -221,10 +221,17 @@ sub handler { } else { $checkingtxt = &mt('Checking for new roles ...'); } - $updateresult = '
'.$checkingtxt.'
'; + $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; @@ -266,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'}}); @@ -519,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); @@ -682,6 +691,12 @@ function setToUpdate(thisform) { thisform.submit(); } +function setToRequestAuthor(thisform) { + thisform.requestauthor.value='1'; + thisform.selectrole.value=''; + thisform.submit(); +} + // ]]> ENDHEADER @@ -748,7 +763,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'}; } @@ -776,25 +796,80 @@ ENDHEADER ''; } + 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'}) { my $showall = ' '. ''; - if ($do_update) { + if ($do_update || $requestauthor) { $r->print('
'. ''. &mt('Display').''. - $showall.'
'. - '
'. - &mt('Changes?').''. - $do_update.'

'); + $showall.''); + if ($do_update) { + $r->print('
'. + '
'.&mt('Changes?').''. + $do_update.'
'); + } + if ($requestauthor) { + $r->print('
'. + '
'.&mt('Add author role').''. + $requestauthor.'
'); + } + $r->print('

'); } else { $r->print($showall); } } else { - $r->print('

'.$do_update.'

'); + if ($do_update && $requestauthor) { + $r->print('
'. + '
'.&mt('Changes?').''. + $do_update.'
'. + '
'. + '
'.&mt('Add author role').''. + $requestauthor.'

'); + } elsif ($do_update) { + $r->print('

'.$do_update.'

'); + } elsif ($requestauthor) { + $r->print('

'.$requestauthor.'

'); + } if ($countactive > 0) { $r->print(&Apache::loncoursequeueadmin::queued_selfenrollment()); my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description'); @@ -954,7 +1029,12 @@ ENDHEADER $r->print('

'.&mt('Current Privileges').'

'); $r->print(&privileges_info()); } - $r->print(&Apache::lonnet::getannounce()); + my $announcements = &Apache::lonnet::getannounce(); + $r->print( + '
'. + '

'.&mt('Announcements').'

'. + $announcements + ) unless (!$announcements); if ($advanced) { my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); $r->print('

' @@ -1613,19 +1693,17 @@ sub check_forcc { } else { $ccrole = 'cc'; } - if ($cdom ne '' && $cnum ne '') { - if (&Apache::lonnet::is_course($cdom,$cnum)) { - my $envkey = 'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum; - if (defined($env{$envkey})) { - $is_cc = 1; - my ($tstart,$tend)=split(/\./,$env{$envkey}); - my $limit = $update; - if ($env{'request.role'} eq $ccrole.'./'.$cdom.'/'.$cnum) { - $limit = $then; - } - if ($tstart && $tstart>$refresh) { $is_cc = 0; } - if ($tend && $tend <$limit) { $is_cc = 0; } + if (&Apache::lonnet::is_course($cdom,$cnum)) { + my $envkey = 'user.role.'.$ccrole.'./'.$cdom.'/'.$cnum; + if (defined($env{$envkey})) { + $is_cc = 1; + my ($tstart,$tend)=split(/\./,$env{$envkey}); + my $limit = $update; + if ($env{'request.role'} eq $ccrole.'./'.$cdom.'/'.$cnum) { + $limit = $then; } + if ($tstart && $tstart>$refresh) { $is_cc = 0; } + if ($tend && $tend <$limit) { $is_cc = 0; } } } return $is_cc; @@ -1683,43 +1761,6 @@ sub check_release_required { return ($switchserver,$warning); } -sub update_content_constraints { - my ($cdom,$cnum,$chome,$cid) = @_; - my %curr_reqd_hash = &Apache::lonnet::userenvironment($cdom,$cnum,'internal.releaserequired'); - my ($reqdmajor,$reqdminor) = split(/\./,$curr_reqd_hash{'internal.releaserequired'}); - my %checkresponsetypes; - foreach my $key (keys(%Apache::lonnet::needsrelease)) { - my ($item,$name,$value) = split(/:/,$key); - if ($item eq 'resourcetag') { - if ($name eq 'responsetype') { - $checkresponsetypes{$value} = $Apache::lonnet::needsrelease{$key} - } - } - } - my $navmap = Apache::lonnavmaps::navmap->new(); - if (defined($navmap)) { - my %allresponses; - foreach my $res ($navmap->retrieveResources(undef,sub { $_[0]->is_problem() },1,0)) { - my %responses = $res->responseTypes(); - foreach my $key (keys(%responses)) { - next unless(exists($checkresponsetypes{$key})); - $allresponses{$key} += $responses{$key}; - } - } - foreach my $key (keys(%allresponses)) { - my ($major,$minor) = split(/\./,$checkresponsetypes{$key}); - if (($major > $reqdmajor) || ($major == $reqdmajor && $minor > $reqdminor)) { - ($reqdmajor,$reqdminor) = ($major,$minor); - } - } - undef($navmap); - } - unless (($reqdmajor eq '') && ($reqdminor eq '')) { - &Apache::lonnet::update_released_required($reqdmajor.'.'.$reqdminor,$cdom,$cnum,$chome,$cid); - } - return; -} - sub courselink { my ($dcdom,$rowtype) = @_; my $courseform=&Apache::loncommon::selectcourse_link @@ -1871,7 +1912,7 @@ sub update_session_roles { ['active','future','previous'], undef,undef,1); my ($msg,@newsec,$oldsec,$currrole_expired,@changed_roles, - %changed_groups,%dbroles, %deletedroles,%allroles,%allgroups, + %changed_groups,%dbroles,%deletedroles,%allroles,%allgroups, %userroles,%checkedgroup,%crprivs,$hasgroups,%rolechange, %groupchange,%newrole,%newgroup,%customprivchg,%groups_roles, @rolecodes); @@ -1921,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') { @@ -1965,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') { @@ -2108,7 +2149,9 @@ sub update_session_roles { foreach my $priv (@privs) { my ($blank,@prv) = split(/:/,$priv); @prv = map { $_ .= (/\&\w+$/ ? '':'&F') } @prv; - $priv = ':'.join(':',sort(@prv)); + if (@prv) { + $priv = ':'.join(':',sort(@prv)); + } $crprivs{$rest}{$scopes[$i]} = $priv; $i++; } @@ -2212,21 +2255,30 @@ sub update_session_roles { $msg .= '
'.&mt('However you can continue to use this role until you logout, click the "Re-Select" button, or your session has been idle for more than 24 hours.').''; } if (!@changed_roles || !(keys(%changed_groups))) { - $msg .= '

'; if (!@changed_roles && !(keys(%changed_groups))) { + if (($msg ne '') || ($groupsmsg ne '')) { + $msg .= ''; + } else { + $msg = ' '.$rolesmsg.'
'; + } return $msg; } } @@ -2279,7 +2331,7 @@ sub update_session_roles { } if (keys(%deletedroles) > 0) { $changemsg .= '
  • '. - &mt('Existing roles deleted').'
  • '. + &mt('Existing roles now expired').''. '