version 1.208, 2008/10/08 03:37:20
|
version 1.210, 2008/11/12 20:01:09
|
Line 27
|
Line 27
|
# |
# |
### |
### |
|
|
|
=pod |
|
|
|
=head1 NAME |
|
|
|
Apache::lonroles - User Roles Screen |
|
|
|
=head1 SYNOPSIS |
|
|
|
Invoked by /etc/httpd/conf/srm.conf: |
|
|
|
<Location /adm/roles> |
|
PerlAccessHandler Apache::lonacc |
|
SetHandler perl-script |
|
PerlHandler Apache::lonroles |
|
ErrorDocument 403 /adm/login |
|
ErrorDocument 500 /adm/errorhandler |
|
</Location> |
|
|
|
=head1 OVERVIEW |
|
|
|
=head2 Choosing Roles |
|
|
|
C<lonroles> is a handler that allows a user to switch roles in |
|
mid-session. LON-CAPA attempts to work with "No Role Specified", the |
|
default role that a user has before selecting a role, as widely as |
|
possible, but certain handlers for example need specification which |
|
course they should act on, etc. Both in this scenario, and when the |
|
handler determines via C<lonnet>'s C<&allowed> function that a certain |
|
action is not allowed, C<lonroles> is used as error handler. This |
|
allows the user to select another role which may have permission to do |
|
what they were trying to do. C<lonroles> can also be accessed via the |
|
B<CRS> button in the Remote Control. |
|
|
|
=begin latex |
|
|
|
\begin{figure} |
|
\begin{center} |
|
\includegraphics[width=0.45\paperwidth,keepaspectratio]{Sample_Roles_Screen} |
|
\caption{\label{Sample_Roles_Screen}Sample Roles Screen} |
|
\end{center} |
|
\end{figure} |
|
|
|
=end latex |
|
|
|
=head2 Role Initialization |
|
|
|
The privileges for a user are established at login time and stored in the session environment. As a consequence, a new role does not become active till the next login. Handlers are able to query for privileges using C<lonnet>'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; |
package Apache::lonroles; |
|
|
use strict; |
use strict; |
Line 483 ENDHEADER
|
Line 580 ENDHEADER
|
my $advanced=$env{'user.adv'}; |
my $advanced=$env{'user.adv'}; |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['tryagain']); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['tryagain']); |
my $tryagain=$env{'form.tryagain'}; |
my $tryagain=$env{'form.tryagain'}; |
|
my $reinit=$env{'user.reinit'}; |
|
delete $env{'user.reinit'}; |
|
|
# -------------------------------------------------------- Generate Page Output |
# -------------------------------------------------------- Generate Page Output |
# --------------------------------------------------------------- Error Header? |
# --------------------------------------------------------------- Error Header? |
Line 512 ENDHEADER
|
Line 611 ENDHEADER
|
&Apache::lonenc::check_encrypt($fn)); |
&Apache::lonenc::check_encrypt($fn)); |
} else { |
} else { |
if ($env{'user.error.msg'}) { |
if ($env{'user.error.msg'}) { |
$r->print( |
if ($reinit) { |
|
$r->print( |
|
'<h3><span class="LC_error">'. |
|
&mt('As your session file for the course has expired, you will need to re-select the course.').'</span></h3>'); |
|
} else { |
|
$r->print( |
'<h3><span class="LC_error">'. |
'<h3><span class="LC_error">'. |
&mt('You need to choose another user role or enter a specific course for this function').'</span></h3>'); |
&mt('You need to choose another user role or enter a specific course for this function').'</span></h3>'); |
} |
} |
|
} |
} |
} |
# -------------------------------------------------------- Choice or no choice? |
# -------------------------------------------------------- Choice or no choice? |
if ($nochoose) { |
if ($nochoose) { |
Line 689 ENDHEADER
|
Line 794 ENDHEADER
|
$twhere=&mt('system wide'); |
$twhere=&mt('system wide'); |
$sortkey=$role.$twhere; |
$sortkey=$role.$twhere; |
} |
} |
$roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver); |
$roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit); |
$roletext{$envkey}=$roletext; |
$roletext{$envkey}=$roletext; |
if (!$sortkey) {$sortkey=$twhere."\0".$envkey;} |
if (!$sortkey) {$sortkey=$twhere."\0".$envkey;} |
$sortrole{$sortkey}=$envkey; |
$sortrole{$sortkey}=$envkey; |
Line 988 sub role_status {
|
Line 1093 sub role_status {
|
} |
} |
|
|
sub build_roletext { |
sub build_roletext { |
my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_; |
my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit) = @_; |
my $roletext='<tr bgcolor="'.$tbg.'" class="LC_rolesmenu_'.$tstatus.'">'; |
my $roletext='<tr bgcolor="'.$tbg.'" class="LC_rolesmenu_'.$tstatus.'">'; |
my $is_dc=($trolecode =~ m/^dc\./); |
my $is_dc=($trolecode =~ m/^dc\./); |
my $rowspan=($is_dc) ? '' |
my $rowspan=($is_dc) ? '' |
Line 1018 sub build_roletext {
|
Line 1123 sub build_roletext {
|
'<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'. |
'<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'. |
&mt('Re-Initialize').'" onClick="javascript:enterrole(this.form,\''. |
&mt('Re-Initialize').'" onClick="javascript:enterrole(this.form,\''. |
$trolecode."','".$buttonname.'\');" /></td>'; |
$trolecode."','".$buttonname.'\');" /></td>'; |
|
} elsif ($reinit) { |
|
$roletext.= |
|
'<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'. |
|
&mt('Re-Select').'" onClick="javascript:enterrole(this.form,\''. |
|
$trolecode."','".$buttonname.'\');" /></td>'; |
} else { |
} else { |
$roletext.='<td'.$rowspan.'> </td>'; |
$roletext.= |
|
'<td'.$rowspan.'><input name="'.$buttonname.'" type="button" value="'. |
|
&mt('Re-Initialize').'" onClick="javascript:enterrole(this.form,\''. |
|
$trolecode."','".$buttonname.'\');" /></td>'; |
} |
} |
} |
} |
if ($trolecode !~ m/^(dc|ca|au|aa)\./) { |
if ($trolecode !~ m/^(dc|ca|au|aa)\./) { |