--- loncom/auth/lonroles.pm 2000/06/07 19:19:31 1.2 +++ loncom/auth/lonroles.pm 2001/07/06 15:11:19 1.27 @@ -4,78 +4,372 @@ # (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 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 Gerd Kortemeyer + package Apache::lonroles; use strict; use Apache::lonnet(); +use Apache::lonuserstate(); use Apache::Constants qw(:common); use Apache::File(); +use Apache::lonmenu; sub handler { + my $r = shift; - $r->content_type('text/html'); - $r->send_http_header; - return OK if $r->header_only; -# --------------------------------------------------- Read Plain Text for Roles + my $now=time; + my $then=$ENV{'user.login.time'}; + my $envkey; - my $tabdir = $r->dir_config('lonTabDir'); - my @rolesplain; - my %plain; +# ================================================================== Roles Init - { - my $idf=Apache::File->new("$tabdir/rolesplain.tab"); - @rolesplain=<$idf>; - } - map { - my ($short,$long)=split(/:/,$_); - $plain{$short}=$long; - } @rolesplain; + 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= + '
Access : $plain{$priv}
"); - $r->print("Resource: $fn
"); - $r->print("Action : $msg
Access : ". + Apache::lonnet::plaintext($priv)."\n"); + $r->print("Resource: $fn\n"); + $r->print("Action : $msg\n