--- loncom/auth/lonroles.pm 2004/11/02 23:22:46 1.101
+++ loncom/auth/lonroles.pm 2004/12/17 21:44:19 1.115
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.101 2004/11/02 23:22:46 albertel Exp $
+# $Id: lonroles.pm,v 1.115 2004/12/17 21:44:19 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,7 +82,8 @@ 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'}) {
@@ -97,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')) {
@@ -251,7 +262,6 @@ ENDENTERKEY
'.course.helper.not.run'}) {
$furl = "/adm/helper/course.initialization.helper";
}
- #
# Send the user to the course they selected
&redirect_user($r,&mt('Entering Course'),
$furl,$msg,
@@ -274,6 +284,12 @@ ENDENTERKEY
$redirect_url);
return OK;
}
+ if ($role eq 'dc') {
+ my $redirect_url = '/adm/menu/';
+ &redirect_user($r,&mt('Loading Domain Coordinator Menu'),
+ $redirect_url);
+ return OK;
+ }
}
}
}
@@ -323,7 +339,7 @@ ENDHEADER
$r->print("
LON-CAPA Access Control
");
$r->print("
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
");
} else {
if ($ENV{'user.error.msg'}) {
@@ -380,29 +396,17 @@ ENDHEADER
my $roletext;
my $sortkey;
if ($envkey=~/^user\.role\./) {
- my (undef,undef,$role,@pwhere)=split(/\./,$envkey);
+ my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont);
+ &role_status($envkey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend);
next if (!defined($role) || $role eq '');
- my $where=join('.',@pwhere);
- my $trolecode=$role.'.'.$where;
- my ($tstart,$tend)=split(/\./,$ENV{$envkey});
- my $tremark='';
- my $tstatus='is';
- my $tpstart=' ';
- my $tpend=' ';
- my $tfont='#000000';
+ $tremark='';
+ $tpstart=' ';
+ $tpend=' ';
+ $tfont='#000000';
if ($tstart) {
- if ($tstart>$then) {
- $tstatus='future';
- if ($tstart<$now) { $tstatus='will'; }
- }
$tpstart=&Apache::lonlocal::locallocaltime($tstart);
}
if ($tend) {
- if ($tend<$then) {
- $tstatus='expired';
- } elsif ($tend<$now) {
- $tstatus='will_not';
- }
$tpend=&Apache::lonlocal::locallocaltime($tend);
}
if ($ENV{'request.role'} eq $trolecode) {
@@ -510,8 +514,7 @@ ENDHEADER
'';
}
} else {
- my %newhash=Apache::lonnet::coursedescription
- ($tcourseid);
+ my %newhash=&Apache::lonnet::coursedescription($tcourseid);
if (%newhash) {
$sortkey=$role."\0".$tdom."\0".$newhash{'description'}.
"\0".$envkey;
@@ -536,41 +539,7 @@ ENDHEADER
$sortkey=$role.$twhere;
}
- $roletext.='';
- unless ($nochoose) {
- if (!$button) {
- if ($switchserver) {
- $roletext.=''.&mt('Switch Server').' | ';
- } else {
- $roletext.=(' | ');
- }
- } elsif ($tstatus eq 'is') {
- $roletext.=(' | ');
- } elsif ($tryagain) {
- $roletext.=
- ' | ';
- } elsif ($advanced) {
- $roletext.=
- ' | ';
- } else {
- $roletext.=' | ';
- }
- }
- $tremark.=&Apache::lonannounce::showday(time,1,
- &Apache::lonannounce::readcalendar($tdom.'_'.$trest));
-
- $roletext.=''.$trole.
- ' | '.$ttype.
- ' | '.$twhere.
- ' | '.$tpstart.
- ' | '.$tpend.
- ' | '.$tremark.
- ' |
'."\n";
+ $roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$ttype,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver);
$roletext{$envkey}=$roletext;
if (!$sortkey) {$sortkey=$twhere."\0".$envkey;}
$sortrole{$sortkey}=$envkey;
@@ -617,19 +586,51 @@ ENDHEADER
}
if ($haverole) { $doheaders++; }
}
+
+ if ($ENV{'environment.recentroles'}) {
+ my %recent_roles =
+ &Apache::lonhtmlcommon::get_recent('roles',$ENV{'environment.recentrolesn'});
+ my $output='';
+ foreach (sort(keys(%recent_roles))) {
+ if (defined($roletext{'user.role.'.$_})) {
+ $output.=$roletext{'user.role.'.$_};
+ } elsif ($numdc > 0) {
+ unless ($_ =~/^error\:/) {
+ $output.=&display_cc_role('user.role.'.$_);
+ }
+ }
+ }
+ if ($output) {
+ $r->print("".
+ &mt('Recent Roles')." | ");
+ $r->print($output);
+ $r->print("
");
+ $doheaders ++;
+ }
+ }
+
+ if ($numdc > 0) {
+ $r->print(&coursepick_jscript());
+ $r->print(&Apache::loncommon::coursebrowser_javascript());
+ }
foreach my $type ('Construction Space','Course','Domain','System') {
my $output;
foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) {
$output.=$roletext{$sortrole{$which}};
+ if ($sortrole{$which} =~ m-dc\./(\w+)/-) {
+ if ($dcroles{$1}) {
+ $output .= &allcourses_row($1);
+ }
+ }
}
}
if ($output) {
if ($doheaders > 0) {
$r->print("".
- "".&mt($type)." | ");
+ "".&mt($type)." |
");
}
- $r->print($output);
+ $r->print($output);
}
}
my $tremark='';
@@ -719,7 +720,272 @@ ENDHEADER
}
$r->print("