--- loncom/auth/lonroles.pm 2000/09/06 14:25:17 1.5
+++ loncom/auth/lonroles.pm 2001/10/26 17:09:04 1.29
@@ -4,38 +4,146 @@
# (Login Screen
# 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14 Gerd Kortemeyer)
# 11/23 Gerd Kortemeyer)
-# 1/14,03/06,06/01,07/22,07/24,07/25,09/04,09/06 Gerd Kortemeyer
-#
+# 1/14,03/06,06/01,07/22,07/24,07/25,
+# 09/04,09/06,09/28,09/29,09/30,10/2,10/5,10/26,10/28,
+# 12/08,12/28,
+# 01/15/01 Gerd Kortemeyer
+# 02/27/01 Scott Harrison
+# 03/02,05/03,05/25,05/30,06/01,07/06,08/06 Gerd Kortemeyer
+
package Apache::lonroles;
use strict;
use Apache::lonnet();
+use Apache::lonuserstate();
use Apache::Constants qw(:common);
use Apache::File();
+use Apache::lonmenu;
+use Apache::loncommon;
sub handler {
+
my $r = shift;
+
+ my $now=time;
+ my $then=$ENV{'user.login.time'};
+ my $envkey;
+
+
+# ================================================================== Roles Init
+
+ if ($ENV{'form.selectrole'}) {
+ &Apache::lonnet::appenv("request.course.id" => '',
+ "request.course.fn" => '',
+ "request.course.uri" => '',
+ "request.course.sec" => '',
+ "request.role" => 'cm');
+ foreach $envkey (keys %ENV) {
+ if ($envkey=~/^user\.role\./) {
+ my ($dum1,$dum2,$role,@pwhere)=split(/\./,$envkey);
+ my $where=join('.',@pwhere);
+ my $trolecode=$role.'.'.$where;
+ if ($ENV{'form.'.$trolecode}) {
+ my ($tstart,$tend)=split(/\./,$ENV{$envkey});
+ my $tstatus='is';
+ if ($tstart) {
+ if ($tstart>$then) {
+ $tstatus='future';
+ }
+ }
+ if ($tend) {
+ if ($tend<$then) { $tstatus='expired'; }
+ if ($tend<$now) { $tstatus='will_not'; }
+ }
+ if ($tstatus eq 'is') {
+ $where=~s/^\///;
+ my ($cdom,$cnum,$csec)=split(/\//,$where);
+ &Apache::lonnet::appenv('request.role' => $trolecode,
+ 'request.course.sec' => $csec);
+ my $msg='Entering course ...';
+ if (($cnum) && ($role ne 'ca')) {
+ my ($furl,$ferr)=
+ &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
+ if (($ENV{'form.orgurl'}) &&
+ ($ENV{'form.orgurl'}!~/^\/adm\/flip/)) {
+ $r->internal_redirect($ENV{'form.orgurl'});
+ return OK;
+ } else {
+ unless ($ENV{'request.course.id'}) {
+ &Apache::lonnet::appenv(
+ "request.course.id" => $cdom.'_'.$cnum);
+ $furl='/adm/notfound.html';
+ $msg=
+ '
Could not initialize top-level map.
';
+ }
+ $r->content_type('text/html');
+ $r->send_http_header;
+ my $swinfo=&Apache::lonmenu::rawconfig;
+ my $cacheheader=&Apache::loncommon::cacheheader();
+ print (<Entering Course
+
+$cacheheader
+
+
+
+
+$msg
+
+
+ENDREDIR
+ return OK;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+# =============================================================== No Roles Init
+
$r->content_type('text/html');
$r->send_http_header;
return OK if $r->header_only;
-# ---------------------------------------------------------------- Print Header
+ my $swinfo=&Apache::lonmenu::rawconfig;
+ my $cacheheader=&Apache::loncommon::cacheheader();
$r->print(<
+$cacheheader
LON-CAPA User Roles
-
-
+
+
ENDHEADER
# ------------------------------------------ Get Error Message from Environment
my ($fn,$priv,$nochoose,$error,$msg)=split(/:/,$ENV{'user.error.msg'});
- $r->log_reason(
- "$msg for $ENV{'user.name'} domain $ENV{'user.domain'} access $priv",$fn);
+ if ($ENV{'user.error.msg'}) {
+ $r->log_reason(
+ "$msg for $ENV{'user.name'} domain $ENV{'user.domain'} access $priv",$fn);
+ }
-# -------------------------------------------------------- Generate Page Output
+# ---------------------------------------------------------------- Who is this?
+ my $advanced=0;
+ foreach $envkey (keys %ENV) {
+ if ($envkey=~/^user\.role\./) {
+ my ($dum1,$dum2,$role,@pwhere)=split(/\./,$envkey);
+ if ($role ne 'st') { $advanced=1; }
+ }
+ }
+
+# -------------------------------------------------------- Generate Page Output
+# --------------------------------------------------------------- Error Header?
if ($error) {
$r->print("LON-CAPA Access Control
");
$r->print("
Access : ".
@@ -44,25 +152,53 @@ ENDHEADER
$r->print("Action : $msg\n
");
} else {
$r->print("LON-CAPA User Roles
");
+ if ($ENV{'user.error.msg'}) {
+ $r->print(
+ 'You need to choose another user role or '.
+ 'enter a specific course for this function
');
+ }
}
-
- my $now=time;
- my $then=$ENV{'user.login.time'};
-
+# -------------------------------------------------------- Choice or no choice?
if ($nochoose) {
- $r->print("Assigned User Roles
\n");
+ if ($advanced) {
+ $r->print("Assigned User Roles
\n");
+ } else {
+ $r->print("Sorry ...
\nThis resource might be part of");
+ if ($ENV{'request.course.id'}) {
+ $r->print(' another');
+ } else {
+ $r->print(' a certain');
+ }
+ $r->print(' course.