--- loncom/auth/lonroles.pm 2004/10/11 18:27:49 1.94.2.2
+++ loncom/auth/lonroles.pm 2006/01/03 17:48:06 1.138.2.1
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.94.2.2 2004/10/11 18:27:49 albertel Exp $
+# $Id: lonroles.pm,v 1.138.2.1 2006/01/03 17:48:06 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -30,22 +30,31 @@
package Apache::lonroles;
use strict;
-use Apache::lonnet();
+use Apache::lonnet;
use Apache::lonuserstate();
use Apache::Constants qw(:common);
use Apache::File();
use Apache::lonmenu;
use Apache::loncommon;
+use Apache::lonhtmlcommon;
use Apache::lonannounce;
use Apache::lonlocal;
+use GDBM_File;
sub redirect_user {
- my ($r,$title,$url,$msg) = @_;
+ my ($r,$title,$url,$msg,$launch_nav) = @_;
$msg = $title if (! defined($msg));
&Apache::loncommon::content_type($r,'text/html');
&Apache::loncommon::no_cache($r);
$r->send_http_header;
my $swinfo=&Apache::lonmenu::rawconfig();
+ my $navwindow;
+ if ($launch_nav eq 'on') {
+ $navwindow.=&Apache::lonnavmaps::launch_win('now',undef,undef,
+ ($url eq '/adm/whatsnew'));
+ } else {
+ $navwindow.=&Apache::lonnavmaps::close();
+ }
my $bodytag=&Apache::loncommon::bodytag('Switching Role');
# Note to style police:
# This must only replace the spaces, nothing else, or it bombs elsewhere.
@@ -56,9 +65,10 @@ sub redirect_user {
$bodytag
-
+$navwindow
$msg
Continue
@@ -72,60 +82,78 @@ sub handler {
my $r = shift;
my $now=time;
- my $then=$ENV{'user.login.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);
+ if ($env{'form.selectrole'}) {
+ if ($env{'form.newrole'}) {
+ $env{'form.'.$env{'form.newrole'}}=1;
+ }
+ 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" => '',
"request.course.sec" => '',
"request.role" => 'cm',
- "request.role.adv" => $ENV{'user.adv'},
- "request.role.domain" => $ENV{'user.domain'});
- foreach $envkey (keys %ENV) {
+ "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;
- 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'; }
- }
+ my ($where,$trolecode,$role,$tstatus,$tend,$tstart);
+ &role_status($envkey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend);
+ if ($env{'form.'.$trolecode}) {
if ($tstatus eq 'is') {
$where=~s/^\///;
my ($cdom,$cnum,$csec)=split(/\//,$where);
+# check for course groups
+ my %coursegroups = &Apache::lonnet::get_active_groups(
+ $env{'user.domain'},$env{'user.name'},$cdom, $cnum);
+ my $cgrps = join(':',keys(%coursegroups));
+
+# 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')) {
+ ($env{'course.'.$cdom.'_'.$cnum.'.keyaccess'} eq 'yes')) {
# who is key authority?
my $authdom=$cdom;
my $authnum=$cnum;
- if ($ENV{'course.'.$cdom.'_'.$cnum.'.keyauth'}) {
+ if ($env{'course.'.$cdom.'_'.$cnum.'.keyauth'}) {
($authnum,$authdom)=
- split(/\W/,$ENV{'course.'.$cdom.'_'.$cnum.'.keyauth'});
+ split(/\W/,$env{'course.'.$cdom.'_'.$cnum.'.keyauth'});
}
# check with key authority
unless (&Apache::lonnet::validate_access_key(
- $ENV{'environment.key.'.$cdom.'_'.$cnum},
+ $env{'environment.key.'.$cdom.'_'.$cnum},
$authdom,$authnum)) {
# there is no valid key
- if ($ENV{'form.newkey'}) {
+ if ($env{'form.newkey'}) {
# student attempts to register a new key
&Apache::loncommon::content_type($r,'text/html');
&Apache::loncommon::no_cache($r);
@@ -137,11 +165,11 @@ sub handler {
my $message=&mt('Successfully registered key');
my $assignresult=
&Apache::lonnet::assign_access_key(
- $ENV{'form.newkey'},
+ $env{'form.newkey'},
$authdom,$authnum,
$cdom,$cnum,
- $ENV{'user.domain'},
- $ENV{'user.name'},
+ $env{'user.domain'},
+ $env{'user.name'},
'Assigned from '.$ENV{'REMOTE_ADDR'}.' at '.localtime().' for '.
$trolecode);
unless ($assignresult eq 'ok') {
@@ -187,7 +215,7 @@ $swinfo