--- loncom/auth/lonroles.pm 2004/11/09 16:18:51 1.103
+++ loncom/auth/lonroles.pm 2004/11/09 18:18:02 1.104
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# User Roles Screen
#
-# $Id: lonroles.pm,v 1.103 2004/11/09 16:18:51 raeburn Exp $
+# $Id: lonroles.pm,v 1.104 2004/11/09 18:18:02 raeburn 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,10 +82,32 @@ sub handler {
my $now=time;
my $then=$ENV{'user.login.time'};
my $envkey;
+ my $dcselect='';
# ================================================================== Roles Init
if ($ENV{'form.selectrole'}) {
+ if ($ENV{'form.dcselected'}) {
+ my $dcdom = $ENV{'form.dcselected'};
+ my $dckey = 'user.role.dc./'.$dcdom.'/';
+ if ($ENV{$dckey}) {
+ my ($dcstart,$dcend)=split(/\./,$ENV{$dckey});
+ my $active_dc = 1;
+ if ($dcstart) {
+ if ($dcstart>$then) {
+ $active_dc = 0;
+ }
+ }
+ if ($dcend) {
+ if ($dcend < $then) {
+ $active_dc = 0;
+ }
+ }
+ if ($active_dc) {
+ $dcselect = $dcdom;
+ }
+ }
+ }
if ($ENV{'request.course.id'}) {
my %temp=('logout_'.$ENV{'request.course.id'} => time);
&Apache::lonnet::put('email_status',\%temp);
@@ -239,6 +262,17 @@ ENDENTERKEY
'.course.helper.not.run'}) {
$furl = "/adm/helper/course.initialization.helper";
}
+ # Check to see if the user is a DC coming from the
+ # course selection page
+ my $dcflag = 0;
+ if ($ENV{'form.dccourse'}) {
+ my $formaction = '/adm/roles/';
+ my ($dcdom,$pickedcourse) = split/_/,$courseid;
+ if ($ENV{'user.role.dc./'.$dcdom.'/'}) {
+ &Apache::lonhtmlcommon::store_recent('cc_pickby_dc_'.$dcdom,
+ $courseid,$formaction);
+ }
+ }
#
# Send the user to the course they selected
&redirect_user($r,&mt('Entering Course'),
@@ -262,6 +296,14 @@ ENDENTERKEY
$redirect_url);
return OK;
}
+ if ($role eq 'dc') {
+ unless ($dcselect) {
+ my $redirect_url = '/adm/menu/';
+ &redirect_user($r,&mt('Loading Domain Coordinator Menu'),
+ $redirect_url);
+ return OK;
+ }
+ }
}
}
}
@@ -276,6 +318,7 @@ ENDENTERKEY
return OK if $r->header_only;
my $swinfo=&Apache::lonmenu::rawconfig();
+ my $setDCchoice = &dc_script();
my $bodytag=&Apache::loncommon::bodytag('User Roles');
my $helptag='
'.&Apache::loncommon::help_open_menu('','General Intro','General_Intro','User Roles',1,undef,undef,undef,undef,,&mt("Click here for help")).' |
';
$r->print(<
ENDHEADER
@@ -306,6 +350,12 @@ ENDHEADER
my $tryagain=$ENV{'form.tryagain'};
# -------------------------------------------------------- Generate Page Output
+# -------------------------------------------------------- Domain Coordinator?
+ if ($dcselect ne '') {
+ &choosecourse_display($r,$dcselect,$then,$now);
+ return OK;
+ }
+
# --------------------------------------------------------------- Error Header?
if ($error) {
$r->print("LON-CAPA Access Control
");
@@ -358,6 +408,9 @@ ENDHEADER
$r->print('>');
}
+ my %dcroles = ();
+ my $numdc = &check_fordc(\%dcroles,$then);
+
my (%roletext,%sortrole,%roleclass);
my $countactive=0;
my $inrole=0;
@@ -593,20 +646,70 @@ ENDHEADER
}
if ($haverole) { $doheaders++; }
}
- 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 ($numdc > 0) {
+ $r->print(''.
+ ''.
+ ''.
+ ''.
+ &mt('Domain').' | ');
+ foreach my $dcdom (keys %dcroles) {
+ my $output = $roletext{$dcroles{$dcdom}};
+ my $ccrole = Apache::lonnet::plaintext('cc');
+ if ($ENV{'request.role'} =~ m-cc\./$dcdom/-) {
+ $output.=$roletext{'user.role.'.$ENV{'request.role'}};
+ }
+ $r->print($output);
+ $r->print('
');
+ $r->print(' | '.
+ ''.
+ $ccrole.' | '.&mt('Course').' | '.
+ ''.&mt('All courses').''.
+ ' '.&mt('Domain').':'.$dcdom.''.
+ ' | '.
+ &mt('Course Coordinator access to all courses in domain').
+ ': '.$dcdom.' |
'."\n");
+ }
+ foreach my $type ('Construction Space','Course','Domain','System') {
+ my $output;
+ foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
+ my $skiprole = 0;
+ foreach my $dcdom (keys %dcroles) {
+ if ($sortrole{$which} =~ m-(dc|cc)\./$dcdom/-) {
+ $skiprole = 1;
+ last;
+ }
+ }
+ if (($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) && (!$skiprole)) {
+ $output.=$roletext{$sortrole{$which}};
+ }
+ }
+ if ($output) {
+ if ($doheaders > 0) {
+ $r->print("".
+ "".&mt($type)." |
+");
+ }
+ $r->print($output);
+ }
+ }
+ } else {
+ 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 ($output) {
- if ($doheaders > 0) {
- $r->print("
".
- "".&mt($type)." | ");
+ if ($output) {
+ if ($doheaders > 0) {
+ $r->print("
".
+ "".&mt($type)." | ");
+ }
+ $r->print($output);
}
- $r->print($output);
- }
+ }
}
my $tremark='';
my $tfont='#003300';
@@ -708,10 +811,6 @@ sub role_status {
($$tstart,$$tend)=split(/\./,$ENV{$rolekey});
$$tstatus='is';
if ($$tstart) {
- if ($tstart>$then) {
- $tstatus='future';
- if ($tstart<$now) { $tstatus='will'; }
- }
if ($$tstart>$then) {
$$tstatus='future';
if ($$tstart<$now) { $$tstatus='will'; }
@@ -721,13 +820,206 @@ sub role_status {
if ($$tend<$then) {
$$tstatus='expired';
} elsif ($$tend<$now) {
- $$tstatus='will_not';
+ $$tstatus='will_not';
}
}
}
}
}
+sub dc_script {
+ my $response = (<<"END");
+function setDCchoice(caller) {
+ var dcname = "dc./"+caller+"/"
+ document.rolechoice.dcselected.value = caller
+ document.rolechoice.elements[3].name = dcname
+ document.rolechoice.submit()
+}
+END
+ return $response;
+}
+
+sub check_fordc {
+ my ($dcroles,$then) = @_;
+ my $numdc = 0;
+ if ($ENV{'user.adv'}) {
+ foreach my $envkey (sort keys %ENV) {
+ if ($envkey=~/^user\.role\.dc\.\/(\w+)\/$/) {
+ my $dcdom = $1;
+ my $livedc = 1;
+ my ($tstart,$tend)=split(/\./,$ENV{$envkey});
+ if ($tstart) {
+ if ($tstart>$then) {
+ $livedc = 0;
+ }
+ }
+ if ($tend) {
+ if ($tend<$then) {
+ $livedc = 0;
+ }
+ }
+ if ($livedc) {
+ $$dcroles{$dcdom} = $envkey;
+ $numdc ++;
+ }
+ }
+ }
+ }
+ return $numdc;
+}
+
+sub choosecourse_display {
+ my ($r,$dcdom,$then,$now) = @_;
+ my $cb_jscript = &Apache::loncommon::coursebrowser_javascript($dcdom,'dom');
+ my $verify_script = <<"END";
+
+END
+ my $courseform=&Apache::loncommon::selectcourse_link
+ ('roles','dccourse','dcdomain','coursedesc');
+ $r->print($cb_jscript.$verify_script);
+ my $formaction='/adm/roles';
+ $formaction=~s/\/+/\//g;
+ my $crs;
+ &select_recent_courses($r,$dcdom,$then,$now);
+ $r->print('
');
+ $r->print(''.&mt('Choose a course from domain').': '.$dcdom.'
'.$courseform.'
'.
+ ''.
+ 'Course Title:
'.
+ 'Course ID: '.
+ ''.
+ ''.
+ ''.
+ '
'.
+ '');
+ return;
+}
+
+sub select_recent_courses {
+ my ($r,$dcdom,$then,$now)=@_;
+ my $advanced = $ENV{'user.adv'};
+ my $tryagain = $ENV{'form.tryagain'};
+ my %recent=&Apache::lonnet::dump(&recent_filename('cc_pickby_dc_'.$dcdom));
+ my $numrecent = 0;
+ my $roletext = ''.&mt('Enter a recently visited course').'
'.
+ ''."\n");
+ }
+}
+
+sub recent_filename {
+ my $area=shift;
+ return 'nohist_recent_'.&Apache::lonnet::escape($area);
+}
+
1;
__END__