--- loncom/auth/lonroles.pm 2004/08/23 18:57:16 1.98 +++ loncom/auth/lonroles.pm 2005/03/03 07:32:49 1.117 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.98 2004/08/23 18:57:16 albertel Exp $ +# $Id: lonroles.pm,v 1.117 2005/03/03 07:32:49 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,6 +36,7 @@ use Apache::Constants qw(:common); use Apache::File(); use Apache::lonmenu; use Apache::loncommon; +use Apache::lonhtmlcommon; use Apache::lonannounce; use Apache::lonlocal; @@ -81,14 +82,16 @@ sub handler { my $now=time; my $then=$ENV{'user.login.time'}; my $envkey; - + my %dcroles = (); + my $numdc = &check_fordc(\%dcroles,$then); # ================================================================== Roles Init if ($ENV{'form.selectrole'}) { if ($ENV{'request.course.id'}) { my %temp=('logout_'.$ENV{'request.course.id'} => time); &Apache::lonnet::put('email_status',\%temp); - } + &Apache::lonnet::delenv('user.state.'.$ENV{'request.course.id'}); + } &Apache::lonnet::appenv("request.course.id" => '', "request.course.fn" => '', "request.course.uri" => '', @@ -96,26 +99,35 @@ sub handler { "request.role" => 'cm', "request.role.adv" => $ENV{'user.adv'}, "request.role.domain" => $ENV{'user.domain'}); + +# Check if user is a DC trying to enter a course and needs privs to be created + if ($numdc > 0) { + foreach my $envkey (keys %ENV) { + if ($envkey =~ m-^form\.cc\./(\w+)/(\w+)$-) { + if ($dcroles{$1}) { + my $cckey = 'user.role.cc./'.$1.'/'.$2; + &check_privs($cckey,$then,$now); + } + last; + } + } + } + foreach $envkey (keys %ENV) { next if ($envkey!~/^user\.role\./); - my (undef,undef,$role,@pwhere)=split(/\./,$envkey); - my $where=join('.',@pwhere); - my $trolecode=$role.'.'.$where; + my ($where,$trolecode,$role,$tstatus,$tend,$tstart); + &role_status($envkey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); 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); +# store role if recent_role list being kept + if ($ENV{'environment.recentroles'}) { + &Apache::lonhtmlcommon::store_recent('roles', + $trolecode,' '); + } + + # check for keyed access if (($role eq 'st') && ($ENV{'course.'.$cdom.'_'.$cnum.'.keyaccess'} eq 'yes')) { @@ -206,15 +218,12 @@ ENDENTERKEY $ENV{'user.name'}, $ENV{'user.home'}, "Role ".$trolecode); - my $tadv=0; - if (($trolecode!~/^st/) && - ($trolecode!~/^ta/) && - ($trolecode!~/^cm/)) { $tadv=1; } + &Apache::lonnet::appenv( - 'request.role' => $trolecode, - 'request.role.adv' => $tadv, + 'request.role' => $trolecode, 'request.role.domain' => $cdom, 'request.course.sec' => $csec); + my $tadv=0; my $msg=&mt('Entering course ...'); if (($cnum) && ($role ne 'ca')) { @@ -226,6 +235,8 @@ ENDENTERKEY if ( &Apache::lonnet::mod_perl_version() == 2 ) { &Apache::lonnet::cleanenv(); } + if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } + &Apache::lonnet::appenv('request.role.adv'=>$tadv); $r->internal_redirect($dest); return OK; } else { @@ -238,6 +249,8 @@ ENDENTERKEY &mt('Could not initialize course at this time.'). '
Access : ". Apache::lonnet::plaintext($priv)."\n"); - $r->print("Resource: $fn\n"); + $r->print("Resource: ".&Apache::lonenc::check_encrypt($fn)."\n"); $r->print("Action : $msg\n