--- loncom/auth/lonroles.pm 2004/08/23 18:57:16 1.98 +++ loncom/auth/lonroles.pm 2004/11/11 22:18:23 1.106 @@ -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.106 2004/11/11 22:18:23 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,14 +82,37 @@ 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); - } + &Apache::lonnet::delenv('user.state.'.$ENV{'request.course.id'}); + } &Apache::lonnet::appenv("request.course.id" => '', "request.course.fn" => '', "request.course.uri" => '', @@ -96,23 +120,38 @@ sub handler { "request.role" => 'cm', "request.role.adv" => $ENV{'user.adv'}, "request.role.domain" => $ENV{'user.domain'}); + +# Check to see if the user is a DC trying to enter a course +# course selection page + my $dcflag = 0; + if ($ENV{'form.dccourse'}) { + my $dcdom = $ENV{'form.dcdomain'}; + my $pickedcourse = $ENV{'form.dccourse'}; + if ($dcdom && $pickedcourse) { + unless ($ENV{'user.role.cc./'.$dcdom.'/'.$pickedcourse}) { + if ($ENV{'user.role.dc./'.$dcdom.'/'}) { + &set_privileges($dcdom,$pickedcourse); + my $msg=&mt('Entering course ...'); + my ($furl,$ferr)=&Apache::lonuserstate::readmap($dcdom.'/'.$pickedcourse); + my $formaction = '/adm/roles/'; + my $courseid = $dcdom.'_'.$pickedcourse; + &Apache::lonhtmlcommon::store_recent('cc_pickby_dc_'.$dcdom, + $courseid,$formaction); + # Send the user to the course they selected + &redirect_user($r,&mt('Entering Course'), + $furl,$msg, + $ENV{'environment.remotenavmap'}); + return OK; + } + } + } + } + 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); @@ -206,15 +245,15 @@ 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; + if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } + &Apache::lonnet::appenv('request.role.adv' => $tadv); + my $msg=&mt('Entering course ...'); if (($cnum) && ($role ne 'ca')) { @@ -250,6 +289,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'), @@ -273,6 +323,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; + } + } } } } @@ -287,6 +345,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")).' |