--- loncom/auth/lonroles.pm 2008/11/12 20:01:09 1.210
+++ loncom/auth/lonroles.pm 2009/01/03 00:16:10 1.215
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.210 2008/11/12 20:01:09 jms Exp $
+# $Id: lonroles.pm,v 1.215 2009/01/03 00:16:10 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -369,7 +369,7 @@ $swinfo
$end_page
@@ -535,8 +535,9 @@ ENDENTERKEY
$r->send_http_header;
return OK if $r->header_only;
+ my $brcrum =[{href=>"/admm/roles",text=>"User Roles"}];
my $swinfo=&Apache::lonmenu::rawconfig();
- my $start_page=&Apache::loncommon::start_page('User Roles');
+ my $start_page=&Apache::loncommon::start_page('User 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.').'
';
@@ -645,24 +646,25 @@ ENDHEADER
my $possiblerole='';
my %futureroles;
my %roles_nextlogin;
+ my %timezones;
foreach $envkey (sort keys %env) {
my $button = 1;
my $switchserver='';
my $roletext;
my $sortkey;
if ($envkey=~/^user\.role\./) {
- my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont);
+ my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend);
&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';
@@ -674,30 +676,27 @@ ENDHEADER
|| ($tstatus eq 'future')
|| ($env{'form.showall'})) {
if ($tstatus eq 'is') {
- $tbg='#77FF77';
- $tfont='#003300';
+ $tbg='LC_roles_is';
$possiblerole=$trolecode;
$countactive++;
} elsif ($tstatus eq 'future') {
- $tbg='#FFFF77';
+ $tbg='LC_roles_future';
$button=0;
$futureroles{$trolecode} = $tstart.':'.$tend;
$countfuture ++;
} elsif ($tstatus eq 'will') {
- $tbg='#FFAA77';
+ $tbg='LC_roles_will';
$tremark.=&mt('Active at next login.').' ';
$roles_nextlogin{$trolecode} = $tstart.':'.$tend;
$countwill ++;
} elsif ($tstatus eq 'expired') {
- $tbg='#FF7777';
- $tfont='#330000';
+ $tbg='LC_roles_expired';
$button=0;
} elsif ($tstatus eq 'will_not') {
- $tbg='#AAFF77';
+ $tbg='LC_roles_will_not';
$tremark.=&mt('Expired after logout.').' ';
} elsif ($tstatus eq 'selected') {
- $tbg='#11CC55';
- $tfont='#002200';
+ $tbg='LC_roles_selected';
$inrole=1;
$countactive++;
$tremark.=&mt('Currently selected.').' ';
@@ -759,9 +758,9 @@ ENDHEADER
$twhere=$env{'course.'.$tcourseid.'.description'};
$sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey;
unless ($twhere eq &mt('Currently not available')) {
- $twhere.=' '.
- &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont).
- '';
+ $twhere.=' '.
+ &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom).
+ '';
}
} else {
my %newhash=&Apache::lonnet::coursedescription($tcourseid);
@@ -769,9 +768,9 @@ ENDHEADER
$sortkey=$role."\0".$tdom."\0".$newhash{'description'}.
"\0".$envkey;
$twhere=$newhash{'description'}.
- ' '.
- &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont).
- '';
+ ' '.
+ &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom).
+ '';
$ttype = $newhash{'type'};
$trole = &Apache::lonnet::plaintext($role,$ttype);
} else {
@@ -794,7 +793,7 @@ ENDHEADER
$twhere=&mt('system wide');
$sortkey=$role.$twhere;
}
- $roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit);
+ $roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit);
$roletext{$envkey}=$roletext;
if (!$sortkey) {$sortkey=$twhere."\0".$envkey;}
$sortrole{$sortkey}=$envkey;
@@ -804,9 +803,9 @@ ENDHEADER
}
if ($env{'user.adv'}) {
$r->print(
- '
');
+ $r->print(' />');
} else {
if ($countactive > 0) {
my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');
@@ -831,19 +830,23 @@ ENDHEADER
&print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles,
\%roletext);
my $tremark='';
- my $tfont='#003300';
+ my $tbg;
if ($env{'request.role'} eq 'cm') {
- $r->print('');
+ $tbg="LC_roles_selected";
$tremark=&mt('Currently selected.').' ';
- $tfont='#002200';
} else {
- $r->print('
');
+ $tbg="LC_roles_is";
}
- $r->print(' | '.&mt('No role specified').
- ' | '.$tremark.
- ' |
'."\n");
+ $r->print(&Apache::loncommon::start_data_table_row()
+ .' | '
+ .''
+ .&mt('No role specified')
+ .' | '
+ .''.$tremark.' | '
+ .&Apache::loncommon::end_data_table_row()
+ );
- $r->print('');
+ $r->print(&Apache::loncommon::end_data_table());
}
$r->print(&Apache::loncommon::end_page());
return OK;
@@ -871,8 +874,12 @@ ENDHEADER
}
}
if ($output) {
- $r->print("".
- &mt('Recent Roles')." |
");
+ $r->print(&Apache::loncommon::start_data_table_empty_row()
+ .''
+ .&mt('Recent Roles')
+ .' | '
+ .&Apache::loncommon::end_data_table_empty_row()
+ );
$r->print($output);
$doheaders ++;
}
@@ -886,33 +893,36 @@ ENDHEADER
&print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles,\%roletext);
if ($countactive > 1) {
my $tremark='';
- my $tfont='#003300';
+ my $tbg;
if ($env{'request.role'} eq 'cm') {
- $r->print('');
+ $tbg="LC_roles_selected";
$tremark=&mt('Currently selected.').' ';
- $tfont='#002200';
} else {
- $r->print('
');
+ $tbg="LC_roles_is";
}
+ $r->print(&Apache::loncommon::start_data_table_row());
unless ($nochoose) {
if ($env{'request.role'} ne 'cm') {
- $r->print(' | ');
} else {
- $r->print(' | ');
+ $r->print(' | ');
}
}
- $r->print(''.&mt('No role specified').
- ' | '.$tremark.
- ' |
'."\n");
+ $r->print(''
+ .&mt('No role specified')
+ .' | '
+ .''.$tremark.' | '
+ .&Apache::loncommon::end_data_table_row()
+ );
}
- $r->print('');
+ $r->print(&Apache::loncommon::end_data_table());
unless ($nochoose) {
$r->print("\n");
}
# ------------------------------------------------------------ Privileges Info
if (($advanced) && (($env{'user.error.msg'}) || ($error))) {
- $r->print('
Current Privileges
');
+ $r->print('
'.&mt('Current Privileges').'
');
$r->print(&privileges_info());
}
$r->print(&Apache::lonnet::getannounce());
@@ -930,15 +940,71 @@ 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;
if ((ref($sortrole) eq 'HASH') && (ref($roleclass) eq 'HASH')) {
- $r->print('