's C<&allowed> function. When a user first logs in, their role is the "common" role, which means that they have the sum of all of their privileges. During a session it might become necessary to choose a particular role, which as a consequence also limits the user to only the privileges in that particular role.
+
+=head1 INTRODUCTION
+
+This module enables a user to select what role he wishes to
+operate under (instructor, student, teaching assistant, course
+coordinator, etc). These roles are pre-established by the actions
+of upper-level users.
+
+This is part of the LearningOnline Network with CAPA project
+described at http://www.lon-capa.org.
+
+=head1 HANDLER SUBROUTINE
+
+This routine is called by Apache and mod_perl.
+
+=over 4
+
+=item *
+
+Roles Initialization (yes/no)
+
+=item *
+
+Get Error Message from Environment
+
+=item *
+
+Who is this?
+
+=item *
+
+Generate Page Output
+
+=item *
+
+Choice or no choice
+
+=item *
+
+Table
+
+=item *
+
+Privileges
+
+=back
+
+=cut
+
+
package Apache::lonroles;
use strict;
@@ -272,7 +369,7 @@ $swinfo
$end_page
@@ -548,7 +645,6 @@ ENDHEADER
my $possiblerole='';
my %futureroles;
my %roles_nextlogin;
- my %timezones;
foreach $envkey (sort keys %env) {
my $button = 1;
my $switchserver='';
@@ -558,16 +654,15 @@ 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,$timezone);
+ $tpstart=&Apache::lonlocal::locallocaltime($tstart);
}
if ($tend) {
- $tpend=&Apache::lonlocal::locallocaltime($tend,$timezone);
+ $tpend=&Apache::lonlocal::locallocaltime($tend);
}
if ($env{'request.role'} eq $trolecode) {
$tstatus='selected';
@@ -664,9 +759,9 @@ ENDHEADER
$twhere=$env{'course.'.$tcourseid.'.description'};
$sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey;
unless ($twhere eq &mt('Currently not available')) {
- $twhere.=' '.
+ $twhere.=' '.
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont).
- '';
+ '';
}
} else {
my %newhash=&Apache::lonnet::coursedescription($tcourseid);
@@ -674,9 +769,9 @@ ENDHEADER
$sortkey=$role."\0".$tdom."\0".$newhash{'description'}.
"\0".$envkey;
$twhere=$newhash{'description'}.
- ' '.
+ ' '.
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont).
- '';
+ '';
$ttype = $newhash{'type'};
$trole = &Apache::lonnet::plaintext($role,$ttype);
} else {
@@ -744,8 +839,8 @@ ENDHEADER
} else {
$r->print('');
}
- $r->print(' | '.&mt('No role specified').
- ' | '.$tremark.
+ $r->print(' | | '.&mt('No role specified').
+ ' | '.$tremark.
' |
'."\n");
$r->print('');
@@ -776,8 +871,8 @@ ENDHEADER
}
}
if ($output) {
- $r->print("".
- &mt('Recent Roles')." |
");
+ $r->print("".
+ &mt('Recent Roles')." |
");
$r->print($output);
$doheaders ++;
}
@@ -807,9 +902,9 @@ ENDHEADER
$r->print(' | ');
}
}
- $r->print(''.&mt('No role specified').
- ' | '.$tremark.
- ' | '."\n");
+ $r->print(''.&mt('No role specified').
+ ' | '.$tremark.
+ ' | '."\n");
}
$r->print('');
unless ($nochoose) {
@@ -835,56 +930,6 @@ 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;
@@ -937,8 +982,8 @@ sub print_rolerows {
if ($output) {
if ($doheaders > 0) {
$r->print("".
- "".
- &mt($type)." |
");
+ "".
+ &mt($type)." | ");
}
$r->print($output);
}
@@ -1094,14 +1139,14 @@ sub build_roletext {
$tremark.=&Apache::lonannounce::showday(time,1,
&Apache::lonannounce::readcalendar($tdom.'_'.$trest));
}
- $roletext.=''.$trole.
- ' | '.$twhere.
- ' | '.$tpstart.
- ' | '.$tpend.
- ' | ';
+ $roletext.=''.$trole.
+ ' | '.$twhere.
+ ' | '.$tpstart.
+ ' | '.$tpend.
+ ' | ';
if (!$is_dc) {
- $roletext.=''.$tremark.
- ' |
|
'."\n";
+ $roletext.=''.$tremark.
+ ' |
|
'."\n";
}
return $roletext;
}
@@ -1323,9 +1368,9 @@ sub display_cc_role {
my %newhash=&Apache::lonnet::coursedescription($tcourseid);
if (%newhash) {
$twhere=$newhash{'description'}.
- ' '.
+ ' '.
&Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1,$tfont).
- '';
+ '';
$ttype = $newhash{'type'};
} else {
$twhere=&mt('Currently not available');