--- loncom/auth/lonroles.pm 2008/10/20 03:25:48 1.209 +++ loncom/auth/lonroles.pm 2009/09/23 19:42:20 1.209.4.2 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.209 2008/10/20 03:25:48 raeburn Exp $ +# $Id: lonroles.pm,v 1.209.4.2 2009/09/23 19:42:20 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -548,6 +548,12 @@ ENDHEADER my $possiblerole=''; my %futureroles; my %roles_nextlogin; + my %timezones; + my $numcourses; + if ($env{'user.adv'}) { + my %courses = &Apache::lonnet::courseiddump($env{'user.domain'},'.','.','.','.','.',undef,undef,'Course'); + $numcourses = keys(%courses); + } foreach $envkey (sort keys %env) { my $button = 1; my $switchserver=''; @@ -557,15 +563,16 @@ ENDHEADER my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont); &role_status($envkey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); next if (!defined($role) || $role eq '' || $role =~ /^gr/); + my $timezone = &role_timezone($where,\%timezones); $tremark=''; $tpstart=' '; $tpend=' '; $tfont='#000000'; if ($tstart) { - $tpstart=&Apache::lonlocal::locallocaltime($tstart); + $tpstart=&Apache::lonlocal::locallocaltime($tstart,$timezone); } if ($tend) { - $tpend=&Apache::lonlocal::locallocaltime($tend); + $tpend=&Apache::lonlocal::locallocaltime($tend,$timezone); } if ($env{'request.role'} eq $trolecode) { $tstatus='selected'; @@ -712,9 +719,12 @@ ENDHEADER $r->print(' />'); } else { if ($countactive > 0) { - my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description'); - my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); - $r->print('

'.&mt('[_1]Visit the [_2]Course Catalog[_3] to view all [_4] LON-CAPA courses.','','','',$domdesc).'
'.&mt('If a course is [_1]not[_2] in your list of current courses below, you may be able to enroll if self-enrollment is permitted.','','').'

'); + my $queuetotal = &queued_selfenrollment($r); + if (($numcourses-$queuetotal) > 1) { + my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description'); + my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); + $r->print('

'.&mt('[_1]Visit the [_2]Course Catalog[_3] to view all [_4] GCI WebCenter courses.','','','',$domdesc).'
'.&mt('If a course is [_1]not[_2] in your list of current courses below, you may be able to enroll if self-enrollment is permitted.','','').'

'); + } } } @@ -725,7 +735,7 @@ ENDHEADER } else { $r->print('

'.&mt('Currently no active roles or courses').'

'); } - &findcourse_advice($r); + &findcourse_advice($r,$numcourses); $r->print(''); if ($countfuture) { $r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture)); @@ -750,6 +760,27 @@ ENDHEADER } $r->print(&Apache::loncommon::end_page()); return OK; + } elsif ($countactive==1) { # Is there only one choice? + my $needs_switchserver; + if ($env{'user.author'}) { + $needs_switchserver = &check_needs_switchserver($possiblerole); + } + if ((!$needs_switchserver) && ($env{'request.role'} eq 'cm')) { + $r->print('

'.&mt('Please stand by.').'

'. + ''. + ''); + $r->print("\n"); + $r->rflush(); + $r->print(''); + $r->print(&Apache::loncommon::end_page()); + return OK; + } + if ($needs_switchserver) { + $r->print("

".&mt('Server Switch Required')."

\n". + &mt('Construction Space access is only available from '. + 'the home server of the corresponding Author.').'
'. + &mt("Click the 'Switch Server' link to go there.").'
'); + } } # ----------------------------------------------------------------------- Table unless ((!&Apache::lonmenu::show_course()) || ($nochoose) || ($countactive==1)) { @@ -824,15 +855,69 @@ ENDHEADER $r->print('

' .&mt('This is LON-CAPA [_1]',$r->dir_config('lonVersion')) .'
' - .''.&mt('Logout').'  ' - .'' - .&mt('Course Catalog') - .'

'); + .''.&mt('Logout').''); + if ($numcourses>1) { + $r->print('  '. + ''. + &mt('Course Catalog'). + ''); + } + $r->print('

'); } $r->print(&Apache::loncommon::end_page()); return OK; } +sub role_timezone { + my ($where,$timezones) = @_; + my $timezone; + if (ref($timezones) eq 'HASH') { + if ($where =~ m{^/($match_domain)/($match_courseid)}) { + my $cdom = $1; + my $cnum = $2; + if ($cdom && $cnum) { + if (!exists($timezones->{$cdom.'_'.$cnum})) { + my %timehash = + &Apache::lonnet::get('environment',['timezone'],$cdom,$cnum); + if ($timehash{'timezone'} eq '') { + if (!exists($timezones->{$cdom})) { + my %domdefaults = + &Apache::lonnet::get_domain_defaults($cdom); + if ($domdefaults{'timezone_def'} eq '') { + $timezones->{$cdom} = 'local'; + } else { + $timezones->{$cdom} = $domdefaults{'timezone_def'}; + } + } + $timezones->{$cdom.'_'.$cnum} = $timezones->{$cdom}; + } else { + $timezones->{$cdom.'_'.$cnum} = + &Apache::lonlocal::gettimezone($timehash{'timezone'}); + } + } + $timezone = $timezones->{$cdom.'_'.$cnum}; + } + } else { + my ($tdom) = ($where =~ m{^/($match_domain)}); + if ($tdom) { + if (!exists($timezones->{$tdom})) { + my %domdefaults = &Apache::lonnet::get_domain_defaults($tdom); + if ($domdefaults{'timezone_def'} eq '') { + $timezones->{$tdom} = 'local'; + } else { + $timezones->{$tdom} = $domdefaults{'timezone_def'}; + } + } + $timezone = $timezones->{$tdom}; + } + } + if ($timezone eq 'local') { + $timezone = undef; + } + } + return $timezone; +} + sub roletable_headers { my ($r,$roleclass,$sortrole,$nochoose) = @_; my $doheaders; @@ -895,7 +980,7 @@ sub print_rolerows { } sub findcourse_advice { - my ($r) = @_; + my ($r,$numcourses) = @_; my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description'); my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); if (&Apache::lonnet::auto_run(undef,$env{'user.domain'})) { @@ -910,11 +995,59 @@ sub findcourse_advice { } else { $r->print(&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'
'); } - $r->print('

'.&mt('The [_1]Course Catalog[_2] provides information about all [_3] classes for which LON-CAPA courses have been created.','','',$domdesc).'
'); - $r->print(&mt('You can search the course catalog for courses which permit self-enrollment, if you would like to enroll in a course.').'

'); + my $queuetotal = &queued_selfenrollment($r); + if (($numcourses - $queuetotal) > 0) { + $r->print('

'.&mt('The [_1]Course Catalog[_2] provides information about all [_3] classes for which LON-CAPA courses have been created.','','',$domdesc).'
'); + $r->print(&mt('You can search the course catalog for courses which permit self-enrollment, if you would like to enroll in a course.').'

'); + } return; } +sub queued_selfenrollment { + my ($r) = @_; + my %selfenrollrequests = &Apache::lonnet::dump('selfenrollrequests'); + my %reqs_by_date; + my $queuetotal = 0; + foreach my $item (keys(%selfenrollrequests)) { + if (ref($selfenrollrequests{$item}) eq 'HASH') { + if ($selfenrollrequests{$item}{'status'} eq 'request') { + if ($selfenrollrequests{$item}{'timestamp'}) { + push(@{$reqs_by_date{$selfenrollrequests{$item}{'timestamp'}}},$item); + } + } + } + } + if (keys(%reqs_by_date)) { + my $rolename = &Apache::lonnet::plaintext('st'); + $r->print(''.&mt('Enrollment requests pending Course Coordinator approval').'
'. + &Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + ''.&mt('Date requested').''.&mt('Course title').''. + ''.&mt('User role').''.&mt('Section').''. + &Apache::loncommon::end_data_table_header_row()); + my @sorted = sort { $a <=> $b } (keys(%reqs_by_date)); + foreach my $item (@sorted) { + if (ref($reqs_by_date{$item}) eq 'ARRAY') { + foreach my $crs (@{$reqs_by_date{$item}}) { + my %courseinfo = &Apache::lonnet::coursedescription($crs); + my $usec = $selfenrollrequests{$crs}{'section'}; + if ($usec eq '') { + $usec = &mt('No section'); + } + $r->print(&Apache::loncommon::start_data_table_row(). + ''.&Apache::lonlocal::locallocaltime($item).''. + ''.$courseinfo{'description'}.''. + ''.$rolename.''.$usec.''. + &Apache::loncommon::end_data_table_row()); + $queuetotal ++; + } + } + } + $r->print(&Apache::loncommon::end_data_table()); + } + return $queuetotal; +} + sub privileges_info { my ($which) = @_; my $output; @@ -1024,7 +1157,7 @@ sub build_roletext { } elsif ($advanced) { $roletext.= ''; } elsif ($reinit) { $roletext.= @@ -1034,7 +1167,7 @@ sub build_roletext { } else { $roletext.= ''; } }