--- loncom/auth/lonroles.pm 2016/10/14 23:11:04 1.316 +++ loncom/auth/lonroles.pm 2016/10/19 13:12:58 1.317 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.316 2016/10/14 23:11:04 raeburn Exp $ +# $Id: lonroles.pm,v 1.317 2016/10/19 13:12:58 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -255,7 +255,8 @@ sub handler { my $envkey; my %dcroles = (); - my $numdc = &check_fordc(\%dcroles,$update,$then); + my %dhroles = (); + my ($numdc,$numdh,$numadhoc) = &check_for_adhoc(\%dcroles,\%dhroles,$update,$then); my $loncaparev = $r->dir_config('lonVersion'); # ================================================================== Roles Init @@ -269,7 +270,7 @@ sub handler { $env{'form.'.$env{'form.newrole'}}=1; # Check if this is a Domain Helpdesk role trying to enter a course if ($env{'form.newrole'} =~ m{^cr/($match_domain)/\1\-domainconfig/\w+\./\1/$match_courseid$}) { - if (&Apache::lonnet::allowed('rar',$1)) { + if ($dhroles{$1}) { $custom_adhoc = 1; } } @@ -1044,7 +1045,7 @@ ENDHEADER } # ----------------------------------------------------------------------- Table - if ($numdc > 0) { + if (($numdc > 0) || (($numdh > 0) && ($numadhoc > 0))) { $r->print(&coursepick_jscript()); $r->print(&Apache::loncommon::coursebrowser_javascript(). &Apache::loncommon::authorbrowser_javascript()); @@ -1077,9 +1078,12 @@ ENDHEADER $roletext{'user.role.'.$role}->[1]. &Apache::loncommon::end_data_table_row(); } - if ($role =~ m{dc\./($match_domain)/} + if ($role =~ m{^user\.role\.dc\./($match_domain)/} && $dcroles{$1}) { $output .= &adhoc_roles_row($1,'recent'); + } elsif ($role =~ m{^user\.role\.dh\./($match_domain)/} + && ($env{'environment.adhocroles.'.$1} ne '')) { + $output .= &adhoc_customroles_row($1,'recent'); } } elsif ($numdc > 0) { unless ($role =~/^error\:/) { @@ -1476,12 +1480,15 @@ sub print_rolerows { &Apache::loncommon::end_data_table_row(); } } - if ($sortrole->{$which} =~ m-dc\./($match_domain)/-) { + if ($sortrole->{$which} =~ m{^user\.role\.dc\./($match_domain)/}) { if (ref($dcroles) eq 'HASH') { if ($dcroles->{$1}) { $output .= &adhoc_roles_row($1,''); } } + } elsif (($sortrole->{$which} =~ m{^user\.role\.dh\./($match_domain)/}) && + ($env{'environment.adhocroles.'.$1} ne '')) { + $output .= &adhoc_customroles_row($1,''); } } } @@ -1739,29 +1746,42 @@ sub check_author_homeserver { } } -sub check_fordc { - my ($dcroles,$update,$then) = @_; +sub check_for_adhoc { + my ($dcroles,$dhroles,$update,$then) = @_; my $numdc = 0; + my $numdh = 0; + my $numadhoc = 0; + my $num_custom_adhoc = 0; if ($env{'user.adv'}) { foreach my $envkey (sort(keys(%env))) { - if ($envkey=~/^user\.role\.dc\.\/($match_domain)\/$/) { - my $dcdom = $1; - my $livedc = 1; + if ($envkey=~/^user\.role\.(dc|dh)\.\/($match_domain)\/$/) { + my $role = $1; + my $roledom = $2; + my $liverole = 1; my ($tstart,$tend)=split(/\./,$env{$envkey}); my $limit = $update; - if ($env{'request.role'} eq 'dc./'.$dcdom.'/') { + if ((($role eq 'dc') && ($env{'request.role'} eq 'dc./'.$roledom.'/')) || + (($role eq 'dh') && ($env{'request.role'} eq 'dh./'.$roledom.'/'))) { $limit = $then; } - if ($tstart && $tstart>$limit) { $livedc = 0; } - if ($tend && $tend <$limit) { $livedc = 0; } - if ($livedc) { - $$dcroles{$dcdom} = $envkey; - $numdc++; + if ($tstart && $tstart>$limit) { $liverole = 0; } + if ($tend && $tend <$limit) { $liverole = 0; } + if ($liverole) { + if ($role eq 'dc') { + $dcroles->{$roledom} = $envkey; + $numdc++; + } else { + $dhroles->{$roledom} = $envkey; + if ($env{'environment.adhocroles.'.$roledom} ne '') { + $numadhoc ++; + } + $numdh++; + } } } } } - return $numdc; + return ($numdc,$numdh,$numadhoc); } sub adhoc_course_role { @@ -1853,15 +1873,16 @@ sub check_forcc { } sub courselink { - my ($dcdom,$rowtype) = @_; + my ($roledom,$rowtype,$role) = @_; my $courseform=&Apache::loncommon::selectcourse_link - ('rolechoice','dccourse'.$rowtype.'_'.$dcdom, - 'dcdomain'.$rowtype.'_'.$dcdom,'coursedesc'.$rowtype.'_'. - $dcdom,$dcdom,undef,'Course/Community'); - my $hiddenitems = ''. - ''. - ''. - ''; + ('rolechoice','course'.$rowtype.'_'.$roledom.'_'.$role, + 'domain'.$rowtype.'_'.$roledom.'_'.$role, + 'coursedesc'.$rowtype.'_'.$roledom.'_'.$role, + $roledom.':'.$role,undef,'Course/Community'); + my $hiddenitems = ''. + ''. + ''. + ''; return $courseform.$hiddenitems; } @@ -1958,7 +1979,8 @@ sub adhoc_roles_row { .&mt('[_1]Ad hoc[_2] roles in domain [_3] --' ,'','',$dcdom) .' '; - my $selectcclink = &courselink($dcdom,$rowtype); + my $role = 'cc'; + my $selectcclink = &courselink($dcdom,$rowtype,$role); my $ccrole = &Apache::lonnet::plaintext('co',undef,undef,1); my $carole = &Apache::lonnet::plaintext('ca'); my $selectcalink = &coauthorlink($dcdom,$rowtype); @@ -1968,6 +1990,25 @@ sub adhoc_roles_row { return $output; } +sub adhoc_customroles_row { + my ($dhdom,$rowtype) = @_; + my $output = &Apache::loncommon::continue_data_table_row() + .' ' + .&mt('[_1]Ad hoc[_2] course/community roles in domain [_3] --', + '','',$dhdom); + my @customroles = split(/,/,$env{'environment.adhocroles.'.$dhdom}); + my $count = 0; + foreach my $role (@customroles) { + next if (($role eq '') || ($role =~ /\W/)); + $output .= ' '.$role.': '.&courselink($dhdom,$rowtype,$role).' |'; + $count ++; + } + if ($count) { + return $output; + } + return; +} + sub recent_filename { my $area=shift; return 'nohist_recent_'.&escape($area);