--- loncom/auth/lonroles.pm 2016/10/27 22:53:48 1.269.2.28 +++ loncom/auth/lonroles.pm 2016/11/09 17:48:38 1.269.2.29 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.269.2.28 2016/10/27 22:53:48 raeburn Exp $ +# $Id: lonroles.pm,v 1.269.2.29 2016/11/09 17:48:38 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -310,10 +310,11 @@ sub handler { "request.role.adv" => $env{'user.adv'}, "request.role.domain" => $env{'user.domain'}}); # Check if Domain Helpdesk role trying to enter a course needs privs to be created - if ($env{'form.newrole'} =~ m{^cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)$}) { + if ($env{'form.newrole'} =~ m{^cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)(?:/(\w+)|$)}) { my $cdom = $1; my $rolename = $2; my $cnum = $3; + my $sec = $4; if ($custom_adhoc) { my %adhocroles = &Apache::lonnet::userenvironment($env{'user.domain'},$env{'user.name'}, 'adhocroles.'.$cdom); @@ -321,7 +322,7 @@ sub handler { my @adhoc = split(',',$adhocroles{'adhocroles.'.$cdom}); if (grep(/^\Q$rolename\E$/,@adhoc)) { if (&Apache::lonnet::check_adhoc_privs($cdom,$cnum,$update,$refresh,$now, - "cr/$cdom/$cdom".'-domainconfig/'.$rolename)) { + "cr/$cdom/$cdom".'-domainconfig/'.$rolename,undef,$sec)) { &Apache::lonnet::appenv({"environment.internal.$cdom.$cnum.cr/$cdom/$cdom".'-domainconfig/'."$rolename.adhoc" => time}); } } @@ -401,7 +402,7 @@ sub handler { } if ($numdh) { # Is this an ad hoc custom role in a course/community? - if (my ($domain,$rolename,$coursenum) = ($envkey =~ m{^form\.cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)$})) { + if (my ($domain,$rolename,$coursenum,$sec) = ($envkey =~ m{^form\.cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)(?:/(\w+)|$)})) { if ($dhroles{$domain}) { my @adhoc; if ($env{'environment.adhocroles.'.$domain}) { @@ -416,7 +417,8 @@ sub handler { if ((@adhoc > 0) && ($rolename ne '')) { if (grep(/^\Q$rolename\E$/,@adhoc)) { if (&Apache::lonnet::check_adhoc_privs($domain,$coursenum,$update,$refresh,$now, - "cr/$domain/$domain".'-domainconfig/'.$rolename)) { + "cr/$domain/$domain".'-domainconfig/'.$rolename, + undef,$sec)) { &Apache::lonnet::appenv({"environment.internal.$domain.$coursenum.cr/$domain/$domain". '-domainconfig/'."$rolename.adhoc" => time}); } @@ -1220,8 +1222,10 @@ sub gather_roles { my $trole; if ($role =~ /^cr\//) { my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role); - if ($tremark) { $tremark.='
'; } - $tremark.=&mt('Custom role defined by [_1].',$rauthor.':'.$rdomain); + unless ($rauthor eq $rdomain.'-domainconfig') { + if ($tremark) { $tremark.='
'; } + $tremark.=&mt('Custom role defined by [_1].',$rauthor.':'.$rdomain); + } } $trole=Apache::lonnet::plaintext($role); my $ttype; @@ -1267,7 +1271,13 @@ sub gather_roles { } elsif ($trest) { my $tcourseid=$tdom.'_'.$trest; $ttype = &Apache::loncommon::course_type($tcourseid); - $trole = &Apache::lonnet::plaintext($role,$ttype,$tcourseid); + if ($role !~ /^cr/) { + $trole = &Apache::lonnet::plaintext($role,$ttype,$tcourseid); + } elsif ($role =~ m{^cr/($match_domain)/\1-domainconfig/(\w+)$}) { + $trole = &mt('Helpdesk[_1]',' '.$2); + } else { + $trole = (split(/\//,$role,4))[-1]; + } if ($env{'course.'.$tcourseid.'.description'}) { my $home=$env{'course.'.$tcourseid.'.home'}; $twhere=$env{'course.'.$tcourseid.'.description'}; @@ -1630,7 +1640,8 @@ sub privileges_info { } sub build_roletext { - my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver,$reinit,$switchwarning) = @_; + my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$trole,$twhere, + $tpstart,$tpend,$nochoose,$button,$switchserver,$reinit,$switchwarning) = @_; my ($roletext,$roletext_end); my $is_dc=($trolecode =~ m/^dc\./); my $rowspan=($is_dc) ? '' @@ -1795,9 +1806,15 @@ sub adhoc_course_role { my %cgroups = &Apache::lonnet::get_active_groups($env{'user.domain'}, $env{'user.name'},$cdom,$cnum); + my $ccrole; + if ($crstype eq 'Community') { + $ccrole = 'co'; + } else { + $ccrole = 'cc'; + } foreach my $group (keys(%cgroups)) { $group_privs{$group} = - $env{'user.priv.cc./'.$cdom.'/'.$cnum.'./'.$cdom.'/'.$cnum.'/'.$group}; + $env{'user.priv.'.$ccrole.'./'.$cdom.'/'.$cnum.'./'.$cdom.'/'.$cnum.'/'.$group}; } $newgroups{'/'.$cdom.'/'.$cnum} = \%group_privs; my $area = '/'.$cdom.'/'.$cnum;