--- loncom/auth/lonroles.pm 2008/07/05 23:27:34 1.199 +++ loncom/auth/lonroles.pm 2008/12/15 16:37:53 1.214 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.199 2008/07/05 23:27:34 raeburn Exp $ +# $Id: lonroles.pm,v 1.214 2008/12/15 16:37:53 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,6 +27,103 @@ # ### +=pod + +=head1 NAME + +Apache::lonroles - User Roles Screen + +=head1 SYNOPSIS + +Invoked by /etc/httpd/conf/srm.conf: + + + PerlAccessHandler Apache::lonacc + SetHandler perl-script + PerlHandler Apache::lonroles + ErrorDocument 403 /adm/login + ErrorDocument 500 /adm/errorhandler + + +=head1 OVERVIEW + +=head2 Choosing Roles + +C is a handler that allows a user to switch roles in +mid-session. LON-CAPA attempts to work with "No Role Specified", the +default role that a user has before selecting a role, as widely as +possible, but certain handlers for example need specification which +course they should act on, etc. Both in this scenario, and when the +handler determines via C's C<&allowed> function that a certain +action is not allowed, C is used as error handler. This +allows the user to select another role which may have permission to do +what they were trying to do. C can also be accessed via the +B button in the Remote Control. + +=begin latex + +\begin{figure} +\begin{center} +\includegraphics[width=0.45\paperwidth,keepaspectratio]{Sample_Roles_Screen} + \caption{\label{Sample_Roles_Screen}Sample Roles Screen} +\end{center} +\end{figure} + +=end latex + +=head2 Role Initialization + +The privileges for a user are established at login time and stored in the session environment. As a consequence, a new role does not become active till the next login. Handlers are able to query for privileges using C's C<&allowed> function. When a user first logs in, their role is the "common" role, which means that they have the sum of all of their privileges. During a session it might become necessary to choose a particular role, which as a consequence also limits the user to only the privileges in that particular role. + +=head1 INTRODUCTION + +This module enables a user to select what role he wishes to +operate under (instructor, student, teaching assistant, course +coordinator, etc). These roles are pre-established by the actions +of upper-level users. + +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. + +=head1 HANDLER SUBROUTINE + +This routine is called by Apache and mod_perl. + +=over 4 + +=item * + +Roles Initialization (yes/no) + +=item * + +Get Error Message from Environment + +=item * + +Who is this? + +=item * + +Generate Page Output + +=item * + +Choice or no choice + +=item * + +Table + +=item * + +Privileges + +=back + +=cut + + package Apache::lonroles; use strict; @@ -43,6 +140,7 @@ use Apache::lonpageflip(); use Apache::lonnavdisplay(); use GDBM_File; use LONCAPA qw(:DEFAULT :match); +use HTML::Entities; sub redirect_user { @@ -145,12 +243,35 @@ sub handler { # Is this an ad-hoc CA-role? if (my ($domain,$user) = ($envkey =~ m-^form\.ca\./($match_domain)/($match_username)$-)) { - # Check if author blocked ca-access + if (($domain eq $env{'user.domain'}) && ($user eq $env{'user.name'})) { + delete($env{$envkey}); + $env{'form.au./'.$domain.'/'} = 1; + my ($server_status,$home) = &check_author_homeserver($user,$domain); + if ($server_status eq 'switchserver') { + my $trolecode = 'au./'.$domain.'/'; + my $switchserver = '/adm/switchserver?otherserver='.$home.'&role='.$trolecode; + $r->internal_redirect($switchserver); + } + last; + } + if (my ($castart,$caend) = ($env{'user.role.ca./'.$domain.'/'.$user} =~ /^(\d*)\.(\d*)$/)) { + if (((($castart) && ($castart < $now)) || !$castart) && + ((!$caend) || (($caend) && ($caend > $now)))) { + my ($server_status,$home) = &check_author_homeserver($user,$domain); + if ($server_status eq 'switchserver') { + my $trolecode = 'ca./'.$domain.'/'.$user; + my $switchserver = '/adm/switchserver?otherserver='.$home.'&role='.$trolecode; + $r->internal_redirect($switchserver); + } + last; + } + } + # Check if author blocked ca-access my %blocked=&Apache::lonnet::get('environment',['domcoord.author'],$domain,$user); if ($blocked{'domcoord.author'} eq 'blocked') { - delete($env{$envkey}); - $env{'user.error.msg'}=':::1:User '.$user.' in domain '.$domain.' blocked domain coordinator access'; - last; + delete($env{$envkey}); + $env{'user.error.msg'}=':::1:User '.$user.' in domain '.$domain.' blocked domain coordinator access'; + last; } if ($dcroles{$domain}) { my ($server_status,$home) = &check_author_homeserver($user,$domain); @@ -228,8 +349,11 @@ sub handler { $cdom,$cnum, $env{'user.domain'}, $env{'user.name'}, - 'Assigned from '.$ENV{'REMOTE_ADDR'}.' at '.localtime().' for '. - $trolecode); + &mt('Assigned from [_1] at [_2] for [_3]' + ,$ENV{'REMOTE_ADDR'} + ,&Apache::lonlocal::locallocaltime() + ,$trolecode) + ); unless ($assignresult eq 'ok') { $assignresult=~s/^error\:\s*//; $message=&mt($assignresult). @@ -245,7 +369,7 @@ $swinfo
-$message
+$message
$end_page @@ -335,6 +459,10 @@ ENDENTERKEY } elsif ($env{'request.course.id'}) { if ($env{'form.destinationurl'}) { my $dest = $env{'form.destinationurl'}; + if ($env{'form.destsymb'} ne '') { + my $esc_symb = &HTML::Entities::encode($env{'form.destsymb'},'"<>&'); + $dest .= '?symb='.$esc_symb; + } &redirect_user($r,&mt('Entering [_1]', $env{'course.'.$courseid.'.description'}), $dest,$msg, @@ -349,7 +477,7 @@ ENDENTERKEY ) { my $startpage = &courseloadpage($courseid); unless ($startpage eq 'firstres') { - $msg = &mt('Entering [_1] ....', + $msg = &mt('Entering [_1] ...', $env{'course.'.$courseid.'.description'}); &redirect_user($r,&mt('New in course'), '/adm/whatsnew?refpage=start',$msg, @@ -407,8 +535,9 @@ ENDENTERKEY $r->send_http_header; return OK if $r->header_only; + my $brcrum =[{href=>"/admm/roles",text=>"User Roles"}]; my $swinfo=&Apache::lonmenu::rawconfig(); - my $start_page=&Apache::loncommon::start_page('User Roles'); + my $start_page=&Apache::loncommon::start_page('User Roles',undef,{bread_crumbs=>$brcrum}); my $standby=&mt('Role selected. Please stand by.'); $standby=~s/\n/\\n/g; my $noscript=''.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'
'.&mt('As this is not the case, most functionality in the system will be unavailable.').'

'; @@ -452,6 +581,8 @@ ENDHEADER my $advanced=$env{'user.adv'}; &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['tryagain']); my $tryagain=$env{'form.tryagain'}; + my $reinit=$env{'user.reinit'}; + delete $env{'user.reinit'}; # -------------------------------------------------------- Generate Page Output # --------------------------------------------------------------- Error Header? @@ -481,10 +612,16 @@ ENDHEADER &Apache::lonenc::check_encrypt($fn)); } else { if ($env{'user.error.msg'}) { - $r->print( + if ($reinit) { + $r->print( + '

'. + &mt('As your session file for the course has expired, you will need to re-select the course.').'

'); + } else { + $r->print( '

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

'); - } + } + } } # -------------------------------------------------------- Choice or no choice? if ($nochoose) { @@ -515,13 +652,12 @@ ENDHEADER my $roletext; my $sortkey; if ($envkey=~/^user\.role\./) { - my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont); + my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend); &role_status($envkey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); next if (!defined($role) || $role eq '' || $role =~ /^gr/); $tremark=''; $tpstart=' '; $tpend=' '; - $tfont='#000000'; if ($tstart) { $tpstart=&Apache::lonlocal::locallocaltime($tstart); } @@ -538,40 +674,36 @@ ENDHEADER || ($tstatus eq 'future') || ($env{'form.showall'})) { if ($tstatus eq 'is') { - $tbg='#77FF77'; - $tfont='#003300'; + $tbg='LC_roles_is'; $possiblerole=$trolecode; $countactive++; } elsif ($tstatus eq 'future') { - $tbg='#FFFF77'; + $tbg='LC_roles_future'; $button=0; $futureroles{$trolecode} = $tstart.':'.$tend; $countfuture ++; } elsif ($tstatus eq 'will') { - $tbg='#FFAA77'; - $tremark.=&mt('Active at next login. '); + $tbg='LC_roles_will'; + $tremark.=&mt('Active at next login.').' '; $roles_nextlogin{$trolecode} = $tstart.':'.$tend; $countwill ++; } elsif ($tstatus eq 'expired') { - $tbg='#FF7777'; - $tfont='#330000'; + $tbg='LC_roles_expired'; $button=0; } elsif ($tstatus eq 'will_not') { - $tbg='#AAFF77'; - $tremark.=&mt('Expired after logout. '); + $tbg='LC_roles_will_not'; + $tremark.=&mt('Expired after logout.').' '; } elsif ($tstatus eq 'selected') { - $tbg='#11CC55'; - $tfont='#002200'; + $tbg='LC_roles_selected'; $inrole=1; $countactive++; - $tremark.=&mt('Currently selected. '); + $tremark.=&mt('Currently selected.').' '; } my $trole; if ($role =~ /^cr\//) { my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role); if ($tremark) { $tremark.='
'; } - $tremark.=&mt('Defined by ').$rauthor. - &mt(' at ').$rdomain.'.'; + $tremark.=&mt('Defined by [_1] at [_2].',$rauthor,$rdomain); } $trole=Apache::lonnet::plaintext($role); my $ttype; @@ -624,9 +756,9 @@ ENDHEADER $twhere=$env{'course.'.$tcourseid.'.description'}; $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey; unless ($twhere eq &mt('Currently not available')) { - $twhere.=' '. - &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont). - ''; + $twhere.=' '. + &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). + ''; } } else { my %newhash=&Apache::lonnet::coursedescription($tcourseid); @@ -634,9 +766,9 @@ ENDHEADER $sortkey=$role."\0".$tdom."\0".$newhash{'description'}. "\0".$envkey; $twhere=$newhash{'description'}. - ' '. - &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont). - ''; + ' '. + &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). + ''; $ttype = $newhash{'type'}; $trole = &Apache::lonnet::plaintext($role,$ttype); } else { @@ -659,7 +791,7 @@ ENDHEADER $twhere=&mt('system wide'); $sortkey=$role.$twhere; } - $roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver); + $roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit); $roletext{$envkey}=$roletext; if (!$sortkey) {$sortkey=$twhere."\0".$envkey;} $sortrole{$sortkey}=$envkey; @@ -669,13 +801,14 @@ ENDHEADER } if ($env{'user.adv'}) { $r->print( - '
'); + $r->print(' />

'); } else { if ($countactive > 0) { my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description'); - $r->print('

'.&mt('[_1]Visit the [_2]Course Catalog[_3] to view all [_4] LON-CAPA courses.','','','',$domdesc).'
'.&mt('If a course is [_1]not[_2] in your list of current courses below, you may be able to enroll if self-enrollment is permitted.','','').'

'); + my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); + $r->print('

'.&mt('[_1]Visit the [_2]Course Catalog[_3] to view all [_4] LON-CAPA courses.','','','',$domdesc).'
'.&mt('If a course is [_1]not[_2] in your list of current courses below, you may be able to enroll if self-enrollment is permitted.','','').'

'); } } @@ -695,36 +828,29 @@ ENDHEADER &print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles, \%roletext); my $tremark=''; - my $tfont='#003300'; + my $tbg; if ($env{'request.role'} eq 'cm') { - $r->print(''); - $tremark=&mt('Currently selected. '); - $tfont='#002200'; + $tbg="LC_roles_selected"; + $tremark=&mt('Currently selected.').' '; } else { - $r->print(''); + $tbg="LC_roles_is"; } - $r->print(''.&mt('No role specified'). - ''.$tremark. - ' '."\n"); + $r->print(&Apache::loncommon::start_data_table_row() + .' ' + .'' + .&mt('No role specified') + .'' + .''.$tremark.' ' + .&Apache::loncommon::end_data_table_row() + ); - $r->print(''); + $r->print(&Apache::loncommon::end_data_table()); } $r->print(&Apache::loncommon::end_page()); return OK; -# Is there only one choice? - } elsif (($countactive==1) && ($env{'request.role'} eq 'cm')) { - $r->print('

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

'. - ''. - ''); - $r->print("\n"); - $r->rflush(); - $r->print(''); - $r->print(&Apache::loncommon::end_page()); - return OK; } -# More than one possible role # ----------------------------------------------------------------------- Table - unless ((!&Apache::lonmenu::show_course()) || ($nochoose)) { + unless ((!&Apache::lonmenu::show_course()) || ($nochoose) || ($countactive==1)) { $r->print("

".&mt('Select a Course to Enter')."

\n"); } my $doheaders = &roletable_headers($r,\%roleclass,\%sortrole,$nochoose); @@ -746,8 +872,12 @@ ENDHEADER } } if ($output) { - $r->print("". - &mt('Recent Roles').""); + $r->print(&Apache::loncommon::start_data_table_empty_row() + .'' + .&mt('Recent Roles') + .'' + .&Apache::loncommon::end_data_table_empty_row() + ); $r->print($output); $doheaders ++; } @@ -759,43 +889,49 @@ ENDHEADER &Apache::loncommon::authorbrowser_javascript()); } &print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles,\%roletext); - my $tremark=''; - my $tfont='#003300'; - if ($env{'request.role'} eq 'cm') { - $r->print(''); - $tremark=&mt('Currently selected. '); - $tfont='#002200'; - } else { - $r->print(''); - } - unless ($nochoose) { - if ($env{'request.role'} ne 'cm') { - $r->print(''); - } else { - $r->print(' '); - } - } - $r->print(''.&mt('No role specified'). - ''.$tremark. - ' '."\n"); - - $r->print(''); + if ($countactive > 1) { + my $tremark=''; + my $tbg; + if ($env{'request.role'} eq 'cm') { + $tbg="LC_roles_selected"; + $tremark=&mt('Currently selected.').' '; + } else { + $tbg="LC_roles_is"; + } + $r->print(&Apache::loncommon::start_data_table_row()); + unless ($nochoose) { + if ($env{'request.role'} ne 'cm') { + $r->print(''); + } else { + $r->print(' '); + } + } + $r->print('' + .&mt('No role specified') + .'' + .''.$tremark.' ' + .&Apache::loncommon::end_data_table_row() + ); + } + $r->print(&Apache::loncommon::end_data_table()); unless ($nochoose) { $r->print("\n"); } # ------------------------------------------------------------ Privileges Info if (($advanced) && (($env{'user.error.msg'}) || ($error))) { - $r->print('

Current Privileges

'); + $r->print('

'.&mt('Current Privileges').'

'); $r->print(&privileges_info()); } $r->print(&Apache::lonnet::getannounce()); if ($advanced) { + my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); $r->print('

' .&mt('This is LON-CAPA [_1]',$r->dir_config('lonVersion')) .'
' .''.&mt('Logout').'  ' - .''.&mt('Course Catalog') + .'' + .&mt('Course Catalog') .'

'); } $r->print(&Apache::loncommon::end_page()); @@ -806,11 +942,17 @@ sub roletable_headers { my ($r,$roleclass,$sortrole,$nochoose) = @_; my $doheaders; if ((ref($sortrole) eq 'HASH') && (ref($roleclass) eq 'HASH')) { - $r->print('
'); + $r->print('
' + .&Apache::loncommon::start_data_table() + .&Apache::loncommon::start_data_table_header_row() + ); if (!$nochoose) { $r->print(''); } - $r->print(''."\n"); + $r->print('' + .'' + .'' + .'' + .&Apache::loncommon::end_data_table_header_row() + ); $doheaders=-1; my @roletypes = &roletypes(); foreach my $type (@roletypes) { @@ -853,9 +995,12 @@ sub print_rolerows { } if ($output) { if ($doheaders > 0) { - $r->print("". - ""); + $r->print(&Apache::loncommon::start_data_table_empty_row() + .'' + .&Apache::loncommon::end_data_table_empty_row() + ); } $r->print($output); } @@ -866,7 +1011,8 @@ sub print_rolerows { sub findcourse_advice { my ($r) = @_; my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description'); - if (&check_autoenroll($env{'user.domain'})) { + my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); + if (&Apache::lonnet::auto_run(undef,$env{'user.domain'})) { $r->print(&mt('If you were expecting to see an active role listed for a particular course in the [_1] domain, it may be missing for one of the following reasons:',$domdesc).'
  • '.&mt('The course has yet to be created.').'
  • @@ -878,7 +1024,7 @@ sub findcourse_advice { } else { $r->print(&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'
    '); } - $r->print('

    '.&mt('The [_1]Course Catalog[_2] provides information about all [_3] classes for which LON-CAPA courses have been created.','','',$domdesc).'
    '); + $r->print('

    '.&mt('The [_1]Course Catalog[_2] provides information about all [_3] classes for which LON-CAPA courses have been created.','','',$domdesc).'
    '); $r->print(&mt('You can search the course catalog for courses which permit self-enrollment, if you would like to enroll in a course.').'

    '); return; } @@ -918,7 +1064,7 @@ sub privileges_info { $ttype='System'; $twhere='/'; } - $output .= "\n

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

    '."\n
      "; + $output .= "\n

      ".&mt($ttype).': '.$twhere.'

      '."\n
        "; foreach my $priv (sort(split(/:/,$env{$envkey}))) { next if (!$priv); @@ -964,8 +1110,8 @@ sub role_status { } sub build_roletext { - my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_; - my $roletext='
'; + my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit) = @_; + my $roletext=&Apache::loncommon::start_data_table_row(); my $is_dc=($trolecode =~ m/^dc\./); my $rowspan=($is_dc) ? '' : ' rowspan="2" '; @@ -975,45 +1121,81 @@ sub build_roletext { $buttonname=~s/\W//g; if (!$button) { if ($switchserver) { - $roletext.=''.&mt('Switch Server').''; + $roletext.='' + .'' + .&mt('Switch Server') + .''; } else { - $roletext.=(' '); + $roletext.=(' '); } } elsif ($tstatus eq 'is') { - $roletext.=''. + ''; } elsif ($tryagain) { $roletext.= - ''. + ''; } elsif ($advanced) { $roletext.= - ''. + ''; + } elsif ($reinit) { + $roletext.= + ''. + ''; } else { - $roletext.=' '; + $roletext.= + ''. + ''; } } if ($trolecode !~ m/^(dc|ca|au|aa)\./) { $tremark.=&Apache::lonannounce::showday(time,1, &Apache::lonannounce::readcalendar($tdom.'_'.$trest)); } - $roletext.=''; + $roletext.='' + .'' + .'' + .'' + .&Apache::loncommon::end_data_table_row(); if (!$is_dc) { - $roletext.=''."\n"; + $roletext.=&Apache::loncommon::continue_data_table_row() + .'' + .&Apache::loncommon::end_data_table_row(); } return $roletext; } +sub check_needs_switchserver { + my ($possiblerole) = @_; + my $needs_switchserver; + my ($role,$where) = split(/\./,$possiblerole,2); + my (undef,$tdom,$twho) = split(/\//,$where); + my ($server_status,$home); + if (($role eq 'ca') || ($role eq 'aa')) { + ($server_status,$home) = &check_author_homeserver($twho,$tdom); + } else { + ($server_status,$home) = &check_author_homeserver($env{'user.name'}, + $env{'user.domain'}); + } + if ($server_status eq 'switchserver') { + $needs_switchserver = 1; + } + return $needs_switchserver; +} + sub check_author_homeserver { my ($uname,$udom)=@_; if (($uname eq '') || ($udom eq '')) { @@ -1035,7 +1217,7 @@ sub check_privs { my ($cdom,$cnum,$then,$now,$checkrole) = @_; my $cckey = 'user.role.'.$checkrole.'./'.$cdom.'/'.$cnum; if ($env{$cckey}) { - my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont); + my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend); &role_status($cckey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend); unless (($tstatus eq 'is') || ($tstatus eq 'will_not')) { &set_privileges($cdom,$cnum,$checkrole); @@ -1069,8 +1251,8 @@ sub check_fordc { sub adhoc_course_role { my ($then) = @_; my ($cdom,$cnum); - my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; - my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; if (&check_forcc($cdom,$cnum,$then)) { my $setprivs; if (!defined($env{'user.role.'.$env{'form.switchrole'}})) { @@ -1094,7 +1276,15 @@ sub adhoc_course_role { return; } } - my (%userroles,%newrole,%newgroups); + my (%userroles,%newrole,%newgroups,%group_privs); + my %cgroups = + &Apache::lonnet::get_active_groups($env{'user.domain'}, + $env{'user.name'},$cdom,$cnum); + foreach my $group (keys(%cgroups)) { + $group_privs{$group} = + $env{'user.priv.cc./'.$cdom.'/'.$cnum.'./'.$cdom.'/'.$cnum.'/'.$group}; + } + $newgroups{'/'.$cdom.'/'.$cnum} = \%group_privs; my $area = '/'.$cdom.'/'.$cnum; my $spec = $role.'.'.$area; if ($usec ne '') { @@ -1102,7 +1292,7 @@ sub adhoc_course_role { $area .= '/'.$usec; } &Apache::lonnet::standard_roleprivs(\%newrole,$role,$cdom,$spec,$cnum,$area); - &Apache::lonnet::set_userprivs(\%userroles,\%newrole,%newgroups); + &Apache::lonnet::set_userprivs(\%userroles,\%newrole,\%newgroups); my $adhocstart = $then-1; $userroles{'user.role.'.$spec} = $adhocstart.'.'; &Apache::lonnet::appenv(\%userroles,[$role,'cm']); @@ -1200,14 +1390,13 @@ sub display_cc_role { my $trolecode = 'cc./'.$1.'/'.$2; my $twhere; my $ttype; - my $tbg='#77FF77'; - my $tfont='#003300'; + my $tbg='LC_roles_is'; my %newhash=&Apache::lonnet::coursedescription($tcourseid); if (%newhash) { $twhere=$newhash{'description'}. - ' '. - &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1,$tfont). - ''; + ' '. + &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1). + ''; $ttype = $newhash{'type'}; } else { $twhere=&mt('Currently not available'); @@ -1215,7 +1404,7 @@ sub display_cc_role { } my $trole = &Apache::lonnet::plaintext('cc',$ttype); $twhere.="
".&mt('Domain').":".$1; - $roletext = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$tfont,$trole,$twhere,'','','',1,''); + $roletext = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,''); } } return ($roletext); @@ -1223,20 +1412,24 @@ sub display_cc_role { sub adhoc_roles_row { my ($dcdom,$rowtype) = @_; - my $output = ''. - ' ' + .&Apache::loncommon::end_data_table_row(); return $output; } @@ -1288,24 +1481,6 @@ sub courseloadpage { return $startpage; } -sub check_autoenroll { - my ($dom) = @_; - my $run_enroll = 0; - my $settings; - my %domconfig = - &Apache::lonnet::get_dom('configuration',['autoenroll'],$dom); - if (ref($domconfig{'autoenroll'}) eq 'HASH') { - $settings = $domconfig{'autoenroll'}; - if ($settings->{'run'} eq '1') { - $run_enroll = 1; - } - } else { - $run_enroll = &localenroll::run($dom); - } - return $run_enroll; -} - - 1; __END__
 '.&mt('User Role').''.&mt('Extent') - .''.&mt('Start').''.&mt('End') - .'
'.&mt('User Role').''.&mt('Extent').''.&mt('Start').''.&mt('End').'
". - &mt($type)."
' + .&mt($type) + .'
'.$trole. - ''.$twhere. - ''.$tpstart. - ''.$tpend. - '
'.$trole.''.$twhere.''.$tpstart.''.$tpend.'
'.$tremark. - ' 
' + .$tremark.' ' + .'
'. - ''."\n"; + $output.=&mt('[_1]: [_2]',$ccrole,$selectcclink) + .'
' + .'' + .'' + .'
' - .&mt('[_1]Ad hoc[_2] roles in domain [_3] --', - '','',$dcdom).''; + my $output = &Apache::loncommon::continue_data_table_row() + .' ' + .'' + .'
' + .&mt('[_1]Ad hoc[_2] roles in domain [_3] --' + ,'','',$dcdom) + .''; my $selectcclink = &courselink($dcdom,$rowtype); my $ccrole = &Apache::lonnet::plaintext('cc'); my $carole = &Apache::lonnet::plaintext('ca'); my $selectcalink = &coauthorlink($dcdom,$rowtype); - $output.= ''. - &mt('[_1]: [_2]',$ccrole,$selectcclink). - '
  '. - &mt('[_1]: [_2]',$carole,$selectcalink). - '
  '.&mt('[_1]: [_2]',$carole,$selectcalink).'
' + .'