--- loncom/auth/lonroles.pm 2004/09/02 13:15:54 1.99 +++ loncom/auth/lonroles.pm 2004/11/11 23:17:13 1.107 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.99 2004/09/02 13:15:54 www Exp $ +# $Id: lonroles.pm,v 1.107 2004/11/11 23:17:13 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,38 @@ sub handler { my $now=time; my $then=$ENV{'user.login.time'}; my $envkey; - + my $dcselect=''; + my %dcroles = (); + my $numdc = &check_fordc(\%dcroles,$then); # ================================================================== 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 +121,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 and needs privs to be created + if ($numdc > 0) { + foreach my $envkey (keys %ENV) { + if ($envkey =~ m-^form\.cc\./(\w+)/(\w+)$-) { + if ($dcroles{$1}) { + unless ($ENV{'user.role.cc./'.$1.'/'.$2}) { + &set_privileges($1,$2); + } + } + last; + } + } + } + + 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); + } + } + } + } + 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 +246,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 +290,16 @@ 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 + 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")).' |