version 1.269.2.27, 2016/10/23 18:30:32
|
version 1.269.2.29, 2016/11/09 17:48:38
|
Line 310 sub handler {
|
Line 310 sub handler {
|
"request.role.adv" => $env{'user.adv'}, |
"request.role.adv" => $env{'user.adv'}, |
"request.role.domain" => $env{'user.domain'}}); |
"request.role.domain" => $env{'user.domain'}}); |
# Check if Domain Helpdesk role trying to enter a course needs privs to be created |
# 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 $cdom = $1; |
my $rolename = $2; |
my $rolename = $2; |
my $cnum = $3; |
my $cnum = $3; |
|
my $sec = $4; |
if ($custom_adhoc) { |
if ($custom_adhoc) { |
my %adhocroles = &Apache::lonnet::userenvironment($env{'user.domain'},$env{'user.name'}, |
my %adhocroles = &Apache::lonnet::userenvironment($env{'user.domain'},$env{'user.name'}, |
'adhocroles.'.$cdom); |
'adhocroles.'.$cdom); |
Line 321 sub handler {
|
Line 322 sub handler {
|
my @adhoc = split(',',$adhocroles{'adhocroles.'.$cdom}); |
my @adhoc = split(',',$adhocroles{'adhocroles.'.$cdom}); |
if (grep(/^\Q$rolename\E$/,@adhoc)) { |
if (grep(/^\Q$rolename\E$/,@adhoc)) { |
if (&Apache::lonnet::check_adhoc_privs($cdom,$cnum,$update,$refresh,$now, |
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}); |
&Apache::lonnet::appenv({"environment.internal.$cdom.$cnum.cr/$cdom/$cdom".'-domainconfig/'."$rolename.adhoc" => time}); |
} |
} |
} |
} |
} |
} |
} |
} |
} elsif ($numdc > 0) { |
} elsif (($numdc > 0) || ($numdh > 0)) { |
# Check if user is a DC trying to enter a course or author space and needs privs to be created |
# Check if user is a DC trying to enter a course or author space and needs privs to be created |
|
# Check if user is a DH trying to enter a course and needs privs to be created |
foreach my $envkey (keys(%env)) { |
foreach my $envkey (keys(%env)) { |
|
if ($numdc) { |
# Is this an ad-hoc Coordinator role? |
# Is this an ad-hoc Coordinator role? |
if (my ($ccrole,$domain,$coursenum) = |
if (my ($ccrole,$domain,$coursenum) = |
($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) { |
($envkey =~ m-^form\.(cc|co)\./($match_domain)/($match_courseid)$-)) { |
if ($dcroles{$domain}) { |
if ($dcroles{$domain}) { |
if (&Apache::lonnet::check_adhoc_privs($domain,$coursenum, |
if (&Apache::lonnet::check_adhoc_privs($domain,$coursenum, |
$update,$refresh,$now,$ccrole)) { |
$update,$refresh,$now,$ccrole)) { |
&Apache::lonnet::appenv({"environment.internal.$domain.$coursenum.$ccrole.adhoc" => time}); |
&Apache::lonnet::appenv({"environment.internal.$domain.$coursenum.$ccrole.adhoc" => time}); |
} |
} |
} |
|
last; |
|
} |
|
# Is this an ad-hoc CA-role? |
|
if (my ($domain,$user) = |
|
($envkey =~ m-^form\.ca\./($match_domain)/($match_username)$-)) { |
|
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); |
|
return OK; |
|
} |
} |
last; |
last; |
} |
} |
if (my ($castart,$caend) = ($env{'user.role.ca./'.$domain.'/'.$user} =~ /^(\d*)\.(\d*)$/)) { |
# Is this an ad-hoc CA-role? |
if (((($castart) && ($castart < $now)) || !$castart) && |
if (my ($domain,$user) = |
((!$caend) || (($caend) && ($caend > $now)))) { |
($envkey =~ m-^form\.ca\./($match_domain)/($match_username)$-)) { |
|
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); |
my ($server_status,$home) = &check_author_homeserver($user,$domain); |
if ($server_status eq 'switchserver') { |
if ($server_status eq 'switchserver') { |
my $trolecode = 'ca./'.$domain.'/'.$user; |
my $trolecode = 'au./'.$domain.'/'; |
my $switchserver = '/adm/switchserver?otherserver='.$home.'&role='.$trolecode; |
my $switchserver = '/adm/switchserver?otherserver='.$home.'&role='.$trolecode; |
$r->internal_redirect($switchserver); |
$r->internal_redirect($switchserver); |
return OK; |
return OK; |
} |
} |
last; |
last; |
} |
} |
} |
if (my ($castart,$caend) = ($env{'user.role.ca./'.$domain.'/'.$user} =~ /^(\d*)\.(\d*)$/)) { |
# Check if author blocked ca-access |
if (((($castart) && ($castart < $now)) || !$castart) && |
my %blocked=&Apache::lonnet::get('environment',['domcoord.author'],$domain,$user); |
((!$caend) || (($caend) && ($caend > $now)))) { |
if ($blocked{'domcoord.author'} eq 'blocked') { |
my ($server_status,$home) = &check_author_homeserver($user,$domain); |
delete($env{$envkey}); |
if ($server_status eq 'switchserver') { |
$env{'user.error.msg'}=':::1:User '.$user.' in domain '.$domain.' blocked domain coordinator access'; |
my $trolecode = 'ca./'.$domain.'/'.$user; |
|
my $switchserver = '/adm/switchserver?otherserver='.$home.'&role='.$trolecode; |
|
$r->internal_redirect($switchserver); |
|
return OK; |
|
} |
|
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; |
|
} |
|
if ($dcroles{$domain}) { |
|
my ($server_status,$home) = &check_author_homeserver($user,$domain); |
|
if (($server_status eq 'ok') || ($server_status eq 'switchserver')) { |
|
&Apache::lonnet::check_adhoc_privs($domain,$user,$update, |
|
$refresh,$now,'ca'); |
|
if ($server_status eq 'switchserver') { |
|
my $trolecode = 'ca./'.$domain.'/'.$user; |
|
my $switchserver = '/adm/switchserver?' |
|
.'otherserver='.$home.'&role='.$trolecode; |
|
$r->internal_redirect($switchserver); |
|
return OK; |
|
} |
|
} else { |
|
delete($env{$envkey}); |
|
} |
|
} else { |
|
delete($env{$envkey}); |
|
} |
last; |
last; |
} |
} |
if ($dcroles{$domain}) { |
} |
my ($server_status,$home) = &check_author_homeserver($user,$domain); |
if ($numdh) { |
if (($server_status eq 'ok') || ($server_status eq 'switchserver')) { |
# Is this an ad hoc custom role in a course/community? |
&Apache::lonnet::check_adhoc_privs($domain,$user,$update, |
if (my ($domain,$rolename,$coursenum,$sec) = ($envkey =~ m{^form\.cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)(?:/(\w+)|$)})) { |
$refresh,$now,'ca'); |
if ($dhroles{$domain}) { |
if ($server_status eq 'switchserver') { |
my @adhoc; |
my $trolecode = 'ca./'.$domain.'/'.$user; |
if ($env{'environment.adhocroles.'.$domain}) { |
my $switchserver = '/adm/switchserver?' |
@adhoc = split(',',$env{'environment.adhocroles.'.$domain}); |
.'otherserver='.$home.'&role='.$trolecode; |
} else { |
$r->internal_redirect($switchserver); |
my %adhocroles = &Apache::lonnet::userenvironment($env{'user.domain'},$env{'user.name'}, |
return OK; |
'adhocroles.'.$domain); |
|
if (keys(%adhocroles)) { |
|
@adhoc = split(',',$adhocroles{'adhocroles.'.$domain}); |
|
} |
|
} |
|
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, |
|
undef,$sec)) { |
|
&Apache::lonnet::appenv({"environment.internal.$domain.$coursenum.cr/$domain/$domain". |
|
'-domainconfig/'."$rolename.adhoc" => time}); |
|
} |
|
} else { |
|
delete($env{$envkey}); |
|
} |
|
} else { |
|
delete($env{$envkey}); |
} |
} |
} else { |
} else { |
delete($env{$envkey}); |
delete($env{$envkey}); |
} |
} |
} else { |
last; |
delete($env{$envkey}); |
|
} |
} |
last; |
} |
} |
|
} |
} |
} |
} |
|
|
Line 1184 sub gather_roles {
|
Line 1222 sub gather_roles {
|
my $trole; |
my $trole; |
if ($role =~ /^cr\//) { |
if ($role =~ /^cr\//) { |
my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role); |
my ($rdummy,$rdomain,$rauthor,$rrole)=split(/\//,$role); |
if ($tremark) { $tremark.='<br />'; } |
unless ($rauthor eq $rdomain.'-domainconfig') { |
$tremark.=&mt('Custom role defined by [_1].',$rauthor.':'.$rdomain); |
if ($tremark) { $tremark.='<br />'; } |
|
$tremark.=&mt('Custom role defined by [_1].',$rauthor.':'.$rdomain); |
|
} |
} |
} |
$trole=Apache::lonnet::plaintext($role); |
$trole=Apache::lonnet::plaintext($role); |
my $ttype; |
my $ttype; |
Line 1231 sub gather_roles {
|
Line 1271 sub gather_roles {
|
} elsif ($trest) { |
} elsif ($trest) { |
my $tcourseid=$tdom.'_'.$trest; |
my $tcourseid=$tdom.'_'.$trest; |
$ttype = &Apache::loncommon::course_type($tcourseid); |
$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'}) { |
if ($env{'course.'.$tcourseid.'.description'}) { |
my $home=$env{'course.'.$tcourseid.'.home'}; |
my $home=$env{'course.'.$tcourseid.'.home'}; |
$twhere=$env{'course.'.$tcourseid.'.description'}; |
$twhere=$env{'course.'.$tcourseid.'.description'}; |
Line 1594 sub privileges_info {
|
Line 1640 sub privileges_info {
|
} |
} |
|
|
sub build_roletext { |
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 ($roletext,$roletext_end); |
my $is_dc=($trolecode =~ m/^dc\./); |
my $is_dc=($trolecode =~ m/^dc\./); |
my $rowspan=($is_dc) ? '' |
my $rowspan=($is_dc) ? '' |
Line 1759 sub adhoc_course_role {
|
Line 1806 sub adhoc_course_role {
|
my %cgroups = |
my %cgroups = |
&Apache::lonnet::get_active_groups($env{'user.domain'}, |
&Apache::lonnet::get_active_groups($env{'user.domain'}, |
$env{'user.name'},$cdom,$cnum); |
$env{'user.name'},$cdom,$cnum); |
|
my $ccrole; |
|
if ($crstype eq 'Community') { |
|
$ccrole = 'co'; |
|
} else { |
|
$ccrole = 'cc'; |
|
} |
foreach my $group (keys(%cgroups)) { |
foreach my $group (keys(%cgroups)) { |
$group_privs{$group} = |
$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; |
$newgroups{'/'.$cdom.'/'.$cnum} = \%group_privs; |
my $area = '/'.$cdom.'/'.$cnum; |
my $area = '/'.$cdom.'/'.$cnum; |