--- loncom/auth/lonroles.pm 2004/12/03 05:15:30 1.113 +++ loncom/auth/lonroles.pm 2005/11/11 18:47:09 1.134 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.113 2004/12/03 05:15:30 raeburn Exp $ +# $Id: lonroles.pm,v 1.134 2005/11/11 18:47:09 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -30,7 +30,7 @@ package Apache::lonroles; use strict; -use Apache::lonnet(); +use Apache::lonnet; use Apache::lonuserstate(); use Apache::Constants qw(:common); use Apache::File(); @@ -39,6 +39,7 @@ use Apache::loncommon; use Apache::lonhtmlcommon; use Apache::lonannounce; use Apache::lonlocal; +use GDBM_File; sub redirect_user { my ($r,$title,$url,$msg,$launch_nav) = @_; @@ -49,7 +50,8 @@ sub redirect_user { my $swinfo=&Apache::lonmenu::rawconfig(); my $navwindow; if ($launch_nav eq 'on') { - $navwindow.=&Apache::lonnavmaps::launch_win('now'); + $navwindow.=&Apache::lonnavmaps::launch_win('now',undef,undef, + ($url eq '/adm/whatsnew')); } else { $navwindow.=&Apache::lonnavmaps::close(); } @@ -80,29 +82,32 @@ 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::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'}); + "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) { + foreach my $envkey (keys %env) { if ($envkey =~ m-^form\.cc\./(\w+)/(\w+)$-) { if ($dcroles{$1}) { my $cckey = 'user.role.cc./'.$1.'/'.$2; @@ -113,16 +118,16 @@ sub handler { } } - foreach $envkey (keys %ENV) { + foreach $envkey (keys %env) { next if ($envkey!~/^user\.role\./); my ($where,$trolecode,$role,$tstatus,$tend,$tstart); &role_status($envkey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); - if ($ENV{'form.'.$trolecode}) { + if ($env{'form.'.$trolecode}) { if ($tstatus eq 'is') { $where=~s/^\///; my ($cdom,$cnum,$csec)=split(/\//,$where); # store role if recent_role list being kept - if ($ENV{'environment.recentroles'}) { + if ($env{'environment.recentroles'}) { &Apache::lonhtmlcommon::store_recent('roles', $trolecode,' '); } @@ -130,20 +135,20 @@ sub handler { # 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); @@ -155,11 +160,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') { @@ -205,7 +210,7 @@ $swinfo
- +
@@ -214,9 +219,9 @@ ENDENTERKEY } } } - &Apache::lonnet::log($ENV{'user.domain'}, - $ENV{'user.name'}, - $ENV{'user.home'}, + &Apache::lonnet::log($env{'user.domain'}, + $env{'user.name'}, + $env{'user.home'}, "Role ".$trolecode); &Apache::lonnet::appenv( @@ -224,32 +229,30 @@ ENDENTERKEY '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')) { + if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) { my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum); - if (($ENV{'form.orgurl'}) && - ($ENV{'form.orgurl'}!~/^\/adm\/flip/)) { - my $dest=$ENV{'form.orgurl'}; - if ( &Apache::lonnet::mod_perl_version() == 2 ) { - &Apache::lonnet::cleanenv(); - } + if (($env{'form.orgurl'}) && + ($env{'form.orgurl'}!~/^\/adm\/flip/)) { + my $dest=$env{'form.orgurl'}; + if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } + &Apache::lonnet::appenv('request.role.adv'=>$tadv); $r->internal_redirect($dest); return OK; } else { - unless ($ENV{'request.course.id'}) { + unless ($env{'request.course.id'}) { &Apache::lonnet::appenv( "request.course.id" => $cdom.'_'.$cnum); $furl='/adm/roles?tryagain=1'; $msg= - '

'. + '

'. &mt('Could not initialize course at this time.'). '

'.&mt('Please try again.').'

'.$ferr; } + if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; } + &Apache::lonnet::appenv('request.role.adv'=>$tadv); # Check to see if the user is a CC entering a course # for the first time @@ -258,23 +261,30 @@ ENDENTERKEY $courseid = substr($courseid, 1); } $courseid =~ s/\//_/; - if ($role eq 'cc' && $ENV{'course.' . $courseid . + if ($role eq 'cc' && $env{'course.' . $courseid . '.course.helper.not.run'}) { $furl = "/adm/helper/course.initialization.helper"; + # Send the user to the course they selected + } elsif (($env{'request.course.fn'}) + && ($role eq 'cc' && ($env{'environment.course_init_display'} ne 'firstres'))) { + $msg = &mt('Entering course ....'); + &redirect_user($r,&mt('New in course'), + '/adm/whatsnew',$msg, + $env{'environment.remotenavmap'}); + return OK; } - # Send the user to the course they selected - &redirect_user($r,&mt('Entering Course'), + &redirect_user($r,&mt('Entering Course'), $furl,$msg, - $ENV{'environment.remotenavmap'}); - return OK; + $env{'environment.remotenavmap'}); + return OK; } } # # Send the user to the construction space they selected - if ($role =~ /^(au|ca)$/) { + if ($role =~ /^(au|ca|aa)$/) { my $redirect_url = '/priv/'; if ($role eq 'au') { - $redirect_url.=$ENV{'user.name'}; + $redirect_url.=$env{'user.name'}; } else { $where =~ /\/(.*)$/; $redirect_url .= $1; @@ -305,6 +315,7 @@ ENDENTERKEY my $swinfo=&Apache::lonmenu::rawconfig(); my $bodytag=&Apache::loncommon::bodytag('User Roles'); + my $standby=&mt('Role selected. Please stand by.'); 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(< @@ -316,35 +327,60 @@ $helptag
ENDHEADER # ------------------------------------------ Get Error Message from Environment - my ($fn,$priv,$nochoose,$error,$msg)=split(/:/,$ENV{'user.error.msg'}); - if ($ENV{'user.error.msg'}) { + my ($fn,$priv,$nochoose,$error,$msg)=split(/:/,$env{'user.error.msg'}); + if ($env{'user.error.msg'}) { $r->log_reason( - "$msg for $ENV{'user.name'} domain $ENV{'user.domain'} access $priv",$fn); + "$msg for $env{'user.name'} domain $env{'user.domain'} access $priv",$fn); } # ------------------------------------------------- Can this user re-init, etc? - my $advanced=$ENV{'user.adv'}; + my $advanced=$env{'user.adv'}; &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['tryagain']); - my $tryagain=$ENV{'form.tryagain'}; + my $tryagain=$env{'form.tryagain'}; # -------------------------------------------------------- Generate Page Output # --------------------------------------------------------------- Error Header? if ($error) { $r->print("

LON-CAPA Access Control

"); - $r->print("
Access  : ".
+        $r->print("
Access  : ".
                   Apache::lonnet::plaintext($priv)."\n");
-        $r->print("Resource: $fn\n");
-        $r->print("Action  : $msg\n

"); + $r->print("Resource: ".&Apache::lonenc::check_encrypt($fn)."\n"); + $r->print("Action : $msg\n

"); + my $url=$fn; + my $last; + if (tie(my %hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', + &GDBM_READER(),0640)) { + $last=$hash{'last_known'}; + untie(%hash); + } + if ($last) { $fn.='?symb='.&Apache::lonnet::escape($last); } + + &Apache::londocs::changewarning($r,undef,'You have modified your course recently, [_1] may fix this access problem.', + &Apache::lonenc::check_encrypt($fn)); } else { - if ($ENV{'user.error.msg'}) { + if ($env{'user.error.msg'}) { $r->print( - '

'. + '

'. &mt('You need to choose another user role or enter a specific course for this function').'

'); } } @@ -355,7 +391,7 @@ ENDHEADER } else { $r->print("

".&mt('Sorry ...')."

\n". &mt('This resource might be part of')); - if ($ENV{'request.course.id'}) { + if ($env{'request.course.id'}) { $r->print(&mt(' another')); } else { $r->print(&mt(' a certain')); @@ -367,30 +403,31 @@ ENDHEADER if ($advanced) { $r->print(&mt("Your home server is "). $Apache::lonnet::hostname{&Apache::lonnet::homeserver - ($ENV{'user.name'},$ENV{'user.domain'})}. + ($env{'user.name'},$env{'user.domain'})}. "
\n"); $r->print(&mt( - "Author and Co-Author roles may not be available on servers other than your home server.")); + "Author and Co-Author roles are not available on servers other than their respective home servers.")); } if (($ENV{'REDIRECT_QUERY_STRING'}) && ($fn)) { $fn.='?'.$ENV{'REDIRECT_QUERY_STRING'}; } $r->print('
'); - $r->print(''); - $r->print(''); + $r->print(''); + $r->print(''); + $r->print(''); } - if ($ENV{'user.adv'}) { + if ($env{'user.adv'}) { $r->print( - '
'.&mt('Show all roles').': print(' checked'); } - $r->print('>'); + '
'); } my (%roletext,%sortrole,%roleclass); my $countactive=0; my $inrole=0; my $possiblerole=''; - foreach $envkey (sort keys %ENV) { + foreach $envkey (sort keys %env) { my $button = 1; my $switchserver=''; my $roletext; @@ -409,12 +446,12 @@ ENDHEADER if ($tend) { $tpend=&Apache::lonlocal::locallocaltime($tend); } - if ($ENV{'request.role'} eq $trolecode) { + if ($env{'request.role'} eq $trolecode) { $tstatus='selected'; } my $tbg; if (($tstatus eq 'is') || ($tstatus eq 'selected') || - ($ENV{'form.showall'})) { + ($env{'form.showall'})) { if ($tstatus eq 'is') { $tbg='#77FF77'; $tfont='#003300'; @@ -443,7 +480,8 @@ ENDHEADER my $trole; if ($role =~ /^cr\//) { my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role); - $tremark.='
'.&mt('Defined by ').$rauthor. + if ($tremark) { $tremark.='
'; } + $tremark.=&mt('Defined by ').$rauthor. &mt(' at ').$rdomain.'.'; $trole=$rrole; } else { @@ -454,18 +492,14 @@ ENDHEADER my ($tdom,$trest,$tsection)= split(/\//,Apache::lonnet::declutter($where)); # First, Co-Authorship roles - if ($role eq 'ca') { + if (($role eq 'ca') || ($role eq 'aa')) { my $home = &Apache::lonnet::homeserver($trest,$tdom); my $allowed=0; my @ids=&Apache::lonnet::current_machine_ids(); foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } if (!$allowed) { $button=0; - $switchserver=&Apache::lonnet::escape('http://'. - $Apache::lonnet::hostname{$home}. - '/adm/login?domain='.$ENV{'user.domain'}. - '&username='.$ENV{'user.name'}. - '&firsturl=/priv/'.$trest.'/'); + $switchserver='otherserver='.$home.'&role='.$trolecode; } #next if ($home eq 'no_host'); $home = $Apache::lonnet::hostname{$home}; @@ -473,13 +507,13 @@ ENDHEADER $twhere=&mt('User').': '.$trest.'
'.&mt('Domain'). ': '.$tdom.'
'. ' '.&mt('Server').': '.$home; - $ENV{'course.'.$tdom.'_'.$trest.'.description'}='ca'; + $env{'course.'.$tdom.'_'.$trest.'.description'}='ca'; $tremark.=&Apache::lonhtmlcommon::authorbombs('/res/'.$tdom.'/'.$trest.'/'); $sortkey=$role."$trest:$tdom"; } elsif ($role eq 'au') { # Authors my $home = &Apache::lonnet::homeserver - ($ENV{'user.name'},$ENV{'user.domain'}); + ($env{'user.name'},$env{'user.domain'}); my $allowed=0; my @ids=&Apache::lonnet::current_machine_ids(); foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } } @@ -487,26 +521,23 @@ ENDHEADER $button=0; $switchserver=&Apache::lonnet::escape('http://'. $Apache::lonnet::hostname{$home}. - '/adm/login?domain='.$ENV{'user.domain'}. - '&username='.$ENV{'user.name'}. - '&firsturl=/priv/'.$ENV{'user.name'}.'/'); + '/adm/login?domain='.$env{'user.domain'}. + '&username='.$env{'user.name'}. + '&firsturl=/priv/'.$env{'user.name'}.'/'); } #next if ($home eq 'no_host'); $home = $Apache::lonnet::hostname{$home}; $ttype='Construction Space'; $twhere=&mt('Domain').': '.$tdom.'
'.&mt('Server'). ': '.$home; - $ENV{'course.'.$tdom.'_'.$trest.'.description'}='ca'; - $tremark.=&Apache::lonhtmlcommon::authorbombs('/res/'.$tdom.'/'.$ENV{'user.name'}.'/'); + $env{'course.'.$tdom.'_'.$trest.'.description'}='ca'; + $tremark.=&Apache::lonhtmlcommon::authorbombs('/res/'.$tdom.'/'.$env{'user.name'}.'/'); $sortkey=$role; } elsif ($trest) { $ttype='Course'; - if ($tsection) { - $ttype.='
'.&mt('Section/Group').': '.$tsection; - } my $tcourseid=$tdom.'_'.$trest; - if ($ENV{'course.'.$tcourseid.'.description'}) { - $twhere=$ENV{'course.'.$tcourseid.'.description'}; + if ($env{'course.'.$tcourseid.'.description'}) { + $twhere=$env{'course.'.$tcourseid.'.description'}; $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey; unless ($twhere eq &mt('Currently not available')) { $twhere.=' '. @@ -524,10 +555,14 @@ ENDHEADER ''; } else { $twhere=&mt('Currently not available'); - $ENV{'course.'.$tcourseid.'.description'}=$twhere; + $env{'course.'.$tcourseid.'.description'}=$twhere; $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey; } } + if ($tsection) { + $twhere.='
'.&mt('Section/Group').': '.$tsection; + } + if ($role ne 'st') { $twhere.="
".&mt('Domain').":".$tdom; } } elsif ($tdom) { $ttype='Domain'; @@ -557,7 +592,7 @@ ENDHEADER $r->print('
'); return OK; # Is there only one choice? - } elsif (($countactive==1) && ($ENV{'request.role'} eq 'cm')) { + } elsif (($countactive==1) && ($env{'request.role'} eq 'cm')) { $r->print('

'.&mt('Please stand by.').'

'. ''); $r->print("\n"); @@ -573,11 +608,10 @@ ENDHEADER } $r->print('
'); unless ($nochoose) { $r->print(''); } - $r->print(''."\n"); + $r->print(''."\n"); my $doheaders=-1; - foreach my $type ('Construction Space','Course','Domain','System') { + foreach my $type ('Domain','Construction Space','Course','System') { my $haverole=0; foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) { if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) { @@ -587,13 +621,16 @@ ENDHEADER if ($haverole) { $doheaders++; } } - if ($ENV{'environment.recentroles'}) { + if ($env{'environment.recentroles'}) { my %recent_roles = - &Apache::lonhtmlcommon::get_recent('roles',$ENV{'environment.recentrolesn'}); + &Apache::lonhtmlcommon::get_recent('roles',$env{'environment.recentrolesn'}); my $output=''; foreach (sort(keys(%recent_roles))) { if (defined($roletext{'user.role.'.$_})) { $output.=$roletext{'user.role.'.$_}; + if ($_ =~ m-dc\./(\w+)/- && $dcroles{$1}) { + $output .= &allcourses_row($1); + } } elsif ($numdc > 0) { unless ($_ =~/^error\:/) { $output.=&display_cc_role('user.role.'.$_); @@ -601,10 +638,11 @@ ENDHEADER } } if ($output) { - $r->print(""); + $r->print(""); $r->print($output); $r->print(""); + $doheaders ++; } } @@ -612,7 +650,7 @@ ENDHEADER $r->print(&coursepick_jscript()); $r->print(&Apache::loncommon::coursebrowser_javascript()); } - foreach my $type ('Construction Space','Course','Domain','System') { + foreach my $type ('Construction Space','Domain','Course','System') { my $output; foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) { if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) { @@ -626,15 +664,15 @@ ENDHEADER } if ($output) { if ($doheaders > 0) { - $r->print("". - ""); + $r->print("". + ""); } $r->print($output); } } my $tremark=''; my $tfont='#003300'; - if ($ENV{'request.role'} eq 'cm') { + if ($env{'request.role'} eq 'cm') { $r->print(''); $tremark=&mt('Currently selected. '); $tfont='#002200'; @@ -642,14 +680,14 @@ ENDHEADER $r->print(''); } unless ($nochoose) { - if ($ENV{'request.role'} ne 'cm') { - $r->print(''); } else { $r->print(''); } } - $r->print(''."\n"); @@ -658,24 +696,24 @@ ENDHEADER $r->print("\n"); } # ------------------------------------------------------------ Privileges Info - if (($advanced) && (($ENV{'user.error.msg'}) || ($error))) { - $r->print('

Current Privileges

'); + if (($advanced) && (($env{'user.error.msg'}) || ($error))) { + $r->print('

Current Privileges

'); - foreach $envkey (sort keys %ENV) { - if ($envkey=~/^user\.priv\.$ENV{'request.role'}\./) { + foreach $envkey (sort keys %env) { + if ($envkey=~/^user\.priv\.$env{'request.role'}\./) { my $where=$envkey; - $where=~s/^user\.priv\.$ENV{'request.role'}\.//; + $where=~s/^user\.priv\.$env{'request.role'}\.//; my $ttype; my $twhere; my ($tdom,$trest,$tsec)= split(/\//,Apache::lonnet::declutter($where)); if ($trest) { - if ($ENV{'course.'.$tdom.'_'.$trest.'.description'} eq 'ca') { + if ($env{'course.'.$tdom.'_'.$trest.'.description'} eq 'ca') { $ttype='Construction Space'; $twhere='User: '.$trest.', Domain: '.$tdom; } else { $ttype='Course'; - $twhere=$ENV{'course.'.$tdom.'_'.$trest.'.description'}; + $twhere=$env{'course.'.$tdom.'_'.$trest.'.description'}; if ($tsec) { $twhere.=' (Section/Group: '.$tsec.')'; } @@ -688,7 +726,7 @@ ENDHEADER $twhere='/'; } $r->print("\n

".$ttype.': '.$twhere.'

    '); - foreach (sort split(/:/,$ENV{$envkey})) { + foreach (sort split(/:/,$env{$envkey})) { if ($_) { my ($prv,$restr)=split(/\&/,$_); my $trestr=''; @@ -724,12 +762,12 @@ ENDHEADER sub role_status { my ($rolekey,$then,$now,$role,$where,$trolecode,$tstatus,$tstart,$tend) = @_; my @pwhere = (); - if (exists($ENV{$rolekey}) && $ENV{$rolekey} ne '') { + if (exists($env{$rolekey}) && $env{$rolekey} ne '') { (undef,undef,$$role,@pwhere)=split(/\./,$rolekey); unless (!defined($$role) || $$role eq '') { $$where=join('.',@pwhere); $$trolecode=$$role.'.'.$$where; - ($$tstart,$$tend)=split(/\./,$ENV{$rolekey}); + ($$tstart,$$tend)=split(/\./,$env{$rolekey}); $$tstatus='is'; if ($$tstart && $$tstart>$then) { $$tstatus='future'; @@ -749,47 +787,56 @@ sub role_status { sub build_roletext { my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$ttype,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_; my $roletext='
'; + my $is_dc=($trolecode =~ m/^dc\./); + my $rowspan=($is_dc) ? '' + : ' rowspan="2" '; + unless ($nochoose) { + my $buttonname=$trolecode; + $buttonname=~s/\W//g; if (!$button) { if ($switchserver) { - $roletext.=''; } else { $roletext.=(''); } } elsif ($tstatus eq 'is') { - $roletext.=(''); + $roletext.=''; } elsif ($tryagain) { $roletext.= - ''; + ''; } elsif ($advanced) { $roletext.= - ''; + ''; } else { - $roletext.=''; + $roletext.=' '; } } $tremark.=&Apache::lonannounce::showday(time,1, &Apache::lonannounce::readcalendar($tdom.'_'.$trest)); - $roletext.=''."\n"; + ''; + if (!$is_dc) { + $roletext.=''."\n"; + } return $roletext; } sub check_privs { my ($cckey,$then,$now) = @_; - if ($ENV{$cckey}) { + if ($env{$cckey}) { my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont); &role_status($cckey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); unless (($tstatus eq 'is') || ($tstatus eq 'will_not')) { @@ -803,12 +850,12 @@ sub check_privs { sub check_fordc { my ($dcroles,$then) = @_; my $numdc = 0; - if ($ENV{'user.adv'}) { - foreach my $envkey (sort keys %ENV) { + 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}); + my ($tstart,$tend)=split(/\./,$env{$envkey}); if ($tstart && $tstart>$then) { $livedc = 0; } if ($tend && $tend <$then) { $livedc = 0; } if ($livedc) { @@ -848,7 +895,7 @@ function verifyCoursePick(caller) { } } else { - alert("You must use the 'Select Course' link to open a separate pick course window which you can use to select the course you wish to enter"); + alert("Please use the 'Select Course' link to open a separate pick course window where you may select the course you wish to enter."); } } else { @@ -880,7 +927,7 @@ function process_pick(dom) { if (pickedCourse != '') { if (numbutton != -1) { var courseTarget = "cc./"+pickedDomain+"/"+pickedCourse - opener.document.rolechoice.elements[numbutton+1].name = courseTarget + opener.document.rolechoice.elements[numbutton].name = courseTarget opener.document.rolechoice.submit() } } @@ -905,8 +952,8 @@ END sub display_cc_role { my $rolekey = shift; my $roletext; - my $advanced = $ENV{'user.adv'}; - my $tryagain = $ENV{'form.tryagain'}; + my $advanced = $env{'user.adv'}; + my $tryagain = $env{'form.tryagain'}; unless ($rolekey =~/^error\:/) { if ($rolekey =~ m-^user\.role.cc\./(\w+)/(\w+)$-) { my $tcourseid = $1.'_'.$2; @@ -923,7 +970,7 @@ sub display_cc_role { ''; } else { $twhere=&mt('Currently not available'); - $ENV{'course.'.$tcourseid.'.description'}=$twhere; + $env{'course.'.$tcourseid.'.description'}=$twhere; } $twhere.="
".&mt('Domain').":".$1; $roletext = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$tfont,$trole,&mt('Course'),$twhere,'','','',1,''); @@ -937,18 +984,13 @@ sub allcourses_row { my $ccrole = Apache::lonnet::plaintext('cc'); my $selectlink = &courselink($dcdom); my $output = ''. - ''. - ''. - ''."\n"; + ''. + ''. + ''."\n"; return $output; } @@ -962,7 +1004,7 @@ sub set_privileges { my $area = '/'.$dcdom.'/'.$pickedcourse; my $role = 'cc'; my $spec = $role.'.'.$area; - my $userroles = &Apache::lonnet::set_arearole($role,$area,'','',$dcdom,$ENV{'user.name'}); + my $userroles = &Apache::lonnet::set_arearole($role,$area,'','',$dcdom,$env{'user.name'}); my %ccrole = (); &Apache::lonnet::standard_roleprivs(\%ccrole,$role,$dcdom,$spec,$pickedcourse,$area); my ($author,$adv)= &Apache::lonnet::set_userprivs(\$userroles,\%ccrole); @@ -973,9 +1015,9 @@ sub set_privileges { $newccroles{$key} = $val; } &Apache::lonnet::appenv(%newccroles); - &Apache::lonnet::log($ENV{'user.domain'}, - $ENV{'user.name'}, - $ENV{'user.home'}, + &Apache::lonnet::log($env{'user.domain'}, + $env{'user.name'}, + $env{'user.home'}, "Role ".$role); &Apache::lonnet::appenv( 'request.role' => $role, 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

 '.&mt('User Role').''.&mt('Extent'). - ''.&mt('Start').''.&mt('End').''. - &mt('Remarks and Calendar Announcements').'
'.&mt('User Role').''.&mt('Extent'). + ''.&mt('Start').''.&mt('End').'
". - &mt('Recent Roles')."
". + &mt('Recent Roles')."
".&mt($type)."
".&mt($type)."
 '.&mt('No role specified'). + $r->print(''.&mt('No role specified'). ''.$tremark. ' 
'.&mt('Switch Server').'  '.$trole. - ''.$ttype. - ''.$twhere. + ''.$twhere. ''.$tpstart. ''.$tpend. - ''.$tremark. - ' 
'.$tremark. + ' 
'. - ''. - $ccrole.''.&mt('Course').''.&mt('All courses').': '. - $selectlink.''. - '
'.&mt('Domain').':'.$dcdom.'
'. - '
'. - &mt('Course Coordinator access to all courses in domain'). - ': '.$dcdom.'
'. + ''.$ccrole.''. + ' '.$selectlink.''. + ' from '.&mt('Domain').' '.$dcdom. + '