--- loncom/auth/lonroles.pm 2008/12/10 21:46:50 1.213
+++ loncom/auth/lonroles.pm 2009/05/17 23:34:05 1.221
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.213 2008/12/10 21:46:50 kaisler Exp $
+# $Id: lonroles.pm,v 1.221 2009/05/17 23:34:05 bisitz Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -236,7 +236,8 @@ sub handler {
if (my ($domain,$coursenum) =
($envkey =~ m-^form\.cc\./($match_domain)/($match_courseid)$-)) {
if ($dcroles{$domain}) {
- &check_privs($domain,$coursenum,$then,$now,'cc');
+ &Apache::lonnet::check_adhoc_privs($domain,$coursenum,
+ $then,$now,'cc');
}
last;
}
@@ -276,7 +277,8 @@ sub handler {
if ($dcroles{$domain}) {
my ($server_status,$home) = &check_author_homeserver($user,$domain);
if (($server_status eq 'ok') || ($server_status eq 'switchserver')) {
- &check_privs($domain,$user,$then,$now,'ca');
+ &Apache::lonnet::check_adhoc_privs($domain,$user,$then,
+ $now,'ca');
if ($server_status eq 'switchserver') {
my $trolecode = 'ca./'.$domain.'/'.$user;
my $switchserver = '/adm/switchserver?'
@@ -297,7 +299,8 @@ sub handler {
foreach $envkey (keys %env) {
next if ($envkey!~/^user\.role\./);
my ($where,$trolecode,$role,$tstatus,$tend,$tstart);
- &role_status($envkey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend);
+ &Apache::lonnet::role_status($envkey,$then,$now,\$role,\$where,
+ \$trolecode,\$tstatus,\$tstart,\$tend);
if ($env{'form.'.$trolecode}) {
if ($tstatus eq 'is') {
$where=~s/^\///;
@@ -420,6 +423,14 @@ ENDENTERKEY
if (($env{'form.orgurl'}) &&
($env{'form.orgurl'}!~/^\/adm\/flip/)) {
my $dest=$env{'form.orgurl'};
+ if ($env{'form.symb'}) {
+ if ($dest =~ /\?/) {
+ $dest .= '&';
+ } else {
+ $dest .= '?'
+ }
+ $dest .= 'symb='.$env{'form.symb'};
+ }
if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
&Apache::lonnet::appenv({'request.role.adv'=>$tadv});
if (($ferr) && ($tadv)) {
@@ -433,11 +444,12 @@ ENDENTERKEY
&Apache::lonnet::appenv(
{"request.course.id" => $cdom.'_'.$cnum});
$furl='/adm/roles?tryagain=1';
- $msg=
- '
'.
- &mt('Could not initialize [_1] at this time.',
- $env{'course.'.$cdom.'_'.$cnum.'.description'}).
- '
'.&mt('Please try again.').'
'.$ferr;
+ $msg='
'
+ .&mt('Could not initialize [_1] at this time.',
+ $env{'course.'.$cdom.'_'.$cnum.'.description'})
+ .'
'
+ .'
'.&mt('Please try again.').'
'
+ .'
'.$ferr.'
';
}
if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
&Apache::lonnet::appenv({'request.role.adv'=>$tadv});
@@ -522,6 +534,12 @@ ENDENTERKEY
$redirect_url);
return OK;
}
+ if ($role eq 'sc') {
+ my $redirect_url = '/adm/grades?command=scantronupload';
+ &redirect_user($r,&mt('Loading Data Upload Page'),
+ $redirect_url);
+ return OK;
+ }
}
}
}
@@ -535,9 +553,9 @@ ENDENTERKEY
$r->send_http_header;
return OK if $r->header_only;
- my @brcrum =[{href=>"/admmm/roles",text=>"User Roles"}];
+ my $brcrum =[{href=>"/admm/roles",text=>"User Roles"}];
my $swinfo=&Apache::lonmenu::rawconfig();
- my $start_page=&Apache::loncommon::start_page('User Roles',undef,{bread_crumbs=>@brcrum});
+ my $start_page=&Apache::loncommon::start_page('My Roles',undef,{bread_crumbs=>$brcrum});
my $standby=&mt('Role selected. Please stand by.');
$standby=~s/\n/\\n/g;
my $noscript=''.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').' '.&mt('As this is not the case, most functionality in the system will be unavailable.').' ';
@@ -646,6 +664,7 @@ ENDHEADER
my $possiblerole='';
my %futureroles;
my %roles_nextlogin;
+ my %timezones;
foreach $envkey (sort keys %env) {
my $button = 1;
my $switchserver='';
@@ -653,16 +672,18 @@ ENDHEADER
my $sortkey;
if ($envkey=~/^user\.role\./) {
my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend);
- &role_status($envkey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend);
+ &Apache::lonnet::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=' ';
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';
@@ -806,6 +827,7 @@ ENDHEADER
$r->print(' />');
} else {
if ($countactive > 0) {
+ &queued_selfenrollment($r);
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.','','').'
');
@@ -938,6 +960,56 @@ ENDHEADER
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;
@@ -1026,6 +1098,50 @@ sub findcourse_advice {
}
$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.').'
');
+ &queued_selfenrollment($r);
+ return;
+}
+
+sub queued_selfenrollment {
+ my ($r) = @_;
+ my %selfenrollrequests = &Apache::lonnet::dump('selfenrollrequests');
+ my %reqs_by_date;
+ 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());
+ }
+ }
+ }
+ $r->print(&Apache::loncommon::end_data_table());
+ }
return;
}
@@ -1084,31 +1200,6 @@ sub privileges_info {
return $output;
}
-sub role_status {
- my ($rolekey,$then,$now,$role,$where,$trolecode,$tstatus,$tstart,$tend) = @_;
- my @pwhere = ();
- if (exists($env{$rolekey}) && $env{$rolekey} ne '') {
- (undef,undef,$$role,@pwhere)=split(/\./,$rolekey);
- unless (!defined($$role) || $$role eq '') {
- $$where=join('.',@pwhere);
- $$trolecode=$$role.'.'.$$where;
- ($$tstart,$$tend)=split(/\./,$env{$rolekey});
- $$tstatus='is';
- if ($$tstart && $$tstart>$then) {
- $$tstatus='future';
- if ($$tstart<$now) { $$tstatus='will'; }
- }
- if ($$tend) {
- if ($$tend<$then) {
- $$tstatus='expired';
- } elsif ($$tend<$now) {
- $$tstatus='will_not';
- }
- }
- }
- }
-}
-
sub build_roletext {
my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit) = @_;
my $roletext=&Apache::loncommon::start_data_table_row();
@@ -1213,20 +1304,6 @@ sub check_author_homeserver {
}
}
-sub check_privs {
- my ($cdom,$cnum,$then,$now,$checkrole) = @_;
- my $cckey = 'user.role.'.$checkrole.'./'.$cdom.'/'.$cnum;
- if ($env{$cckey}) {
- my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend);
- &role_status($cckey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend);
- unless (($tstatus eq 'is') || ($tstatus eq 'will_not')) {
- &set_privileges($cdom,$cnum,$checkrole);
- }
- } else {
- &set_privileges($cdom,$cnum,$checkrole);
- }
-}
-
sub check_fordc {
my ($dcroles,$then) = @_;
my $numdc = 0;
@@ -1438,32 +1515,6 @@ sub recent_filename {
return 'nohist_recent_'.&escape($area);
}
-sub set_privileges {
-# role can be cc or ca
- my ($dcdom,$pickedcourse,$role) = @_;
- my $area = '/'.$dcdom.'/'.$pickedcourse;
- my $spec = $role.'.'.$area;
- my %userroles = &Apache::lonnet::set_arearole($role,$area,'','',
- $env{'user.domain'},
- $env{'user.name'});
- my %ccrole = ();
- &Apache::lonnet::standard_roleprivs(\%ccrole,$role,$dcdom,$spec,$pickedcourse,$area);
- my ($author,$adv)= &Apache::lonnet::set_userprivs(\%userroles,\%ccrole);
- &Apache::lonnet::appenv(\%userroles,[$role,'cm']);
-
- &Apache::lonnet::log($env{'user.domain'},
- $env{'user.name'},
- $env{'user.home'},
- "Role ".$role);
- &Apache::lonnet::appenv(
- {'request.role' => $spec,
- 'request.role.domain' => $dcdom,
- 'request.course.sec' => ''});
- my $tadv=0;
- if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
- &Apache::lonnet::appenv({'request.role.adv' => $tadv});
-}
-
sub courseloadpage {
my ($courseid) = @_;
my $startpage;