version 1.123, 2017/01/02 19:44:06
|
version 1.124, 2017/01/03 17:47:57
|
Line 1030 ENDJS
|
Line 1030 ENDJS
|
return $rolechooser.&Apache::lonhtmlcommon::scripttag($output); |
return $rolechooser.&Apache::lonhtmlcommon::scripttag($output); |
} |
} |
|
|
sub get_my_adhocroles { |
|
my (@okroles,%description); |
|
if ($env{'form.cid'} =~ /^($match_domain)_($match_courseid)$/) { |
|
my $cdom = $1; |
|
my $cnum = $2; |
|
if ($env{"user.role.dh./$cdom/"}) { |
|
my $then=$env{'user.login.time'}; |
|
my $update=$env{'user.update.time'}; |
|
my $liverole = 1; |
|
my ($tstart,$tend)=split(/\./,$env{'user.role.dh./'.$cdom}); |
|
my $limit = $update; |
|
if ($env{'request.role'} eq 'dh./'.$cdom.'/') { |
|
$limit = $then; |
|
} |
|
if ($tstart && $tstart>$limit) { $liverole = 0; } |
|
if ($tend && $tend <$limit) { $liverole = 0; } |
|
if ($liverole) { |
|
if (&Apache::lonnet::homeserver($cnum,$cdom) ne 'no_host') { |
|
my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom); |
|
if (ref($domdefaults{'adhocroles'}) eq 'HASH') { |
|
my $count = 0; |
|
my %domcurrent = %{$domdefaults{'adhocroles'}}; |
|
my (%ordered,%access_in_dom); |
|
foreach my $role (sort(keys(%{$domdefaults{'adhocroles'}}))) { |
|
my ($order,$desc,$access_in_dom); |
|
if (ref($domcurrent{$role}) eq 'HASH') { |
|
$order = $domcurrent{$role}{'order'}; |
|
$desc = $domcurrent{$role}{'desc'}; |
|
$access_in_dom{$role} = $domcurrent{$role}{'access'}; |
|
} |
|
if ($order eq '') { |
|
$order = $count; |
|
} |
|
$ordered{$order} = $role; |
|
if ($desc ne '') { |
|
$description{$role} = $desc; |
|
} else { |
|
$description{$role}= $role; |
|
} |
|
$count++; |
|
} |
|
my @roles_by_num = (); |
|
foreach my $item (sort {$a <=> $b } (keys(%ordered))) { |
|
push(@roles_by_num,$ordered{$item}); |
|
} |
|
if (@roles_by_num) { |
|
my %settings = &Apache::lonnet::dump('environment',$cdom,$cnum,'internal\.adhoc'); |
|
my %setincrs; |
|
if ($settings{'internal.adhocaccess'}) { |
|
map { $setincrs{$_} = 1; } split(/,/,$settings{'internal.adhocaccess'}); |
|
} |
|
my @statuses; |
|
if ($env{'environment.inststatus'}) { |
|
@statuses = split(/,/,$env{'environment.inststatus'}); |
|
} |
|
my $user = $env{'user.name'}.':'.$env{'user.domain'}; |
|
foreach my $role (@roles_by_num) { |
|
my ($curraccess,@okstatus,@personnel); |
|
if ($setincrs{$role}) { |
|
($curraccess,my $rest) = split(/=/,$settings{'internal.adhoc.'.$role}); |
|
if ($curraccess eq 'none') { |
|
next; |
|
} elsif ($curraccess eq 'all') { |
|
push(@okroles,$role); |
|
} elsif ($curraccess eq 'status') { |
|
@okstatus = split(/\&/,$rest); |
|
} elsif (($curraccess eq 'exc') || ($curraccess eq 'inc')) { |
|
@personnel = split(/\&/,$rest); |
|
} |
|
} else { |
|
$curraccess = $access_in_dom{$role}; |
|
if ($curraccess eq 'status') { |
|
if (ref($domcurrent{$role}{$curraccess}) eq 'ARRAY') { |
|
@okstatus = @{$domcurrent{$role}{$curraccess}}; |
|
} |
|
} elsif (($curraccess eq 'exc') || ($curraccess eq 'inc')) { |
|
if (ref($domcurrent{$role}{$curraccess}) eq 'ARRAY') { |
|
@personnel = @{$domcurrent{$role}{$curraccess}}; |
|
} |
|
} |
|
} |
|
if ($curraccess eq 'none') { |
|
next; |
|
} elsif ($curraccess eq 'all') { |
|
push(@okroles,$role); |
|
} elsif ($curraccess eq 'status') { |
|
if (@okstatus) { |
|
if (!@statuses) { |
|
if (grep(/^default$/,@okstatus)) { |
|
push(@okroles,$role); |
|
} |
|
} else { |
|
foreach my $status (@okstatus) { |
|
if (grep(/^\Q$status\E$/,@statuses)) { |
|
push(@okroles,$role); |
|
last; |
|
} |
|
} |
|
} |
|
} |
|
} elsif (($curraccess eq 'exc') || ($curraccess eq 'inc')) { |
|
if (grep(/^\Q$user\E$/,@personnel)) { |
|
if ($curraccess eq 'exc') { |
|
push(@okroles,$role); |
|
} |
|
} elsif ($curraccess eq 'inc') { |
|
push(@okroles,$role); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
my $response = []; |
|
if (@okroles) { |
|
foreach my $role (@okroles) { |
|
push(@{$response}, |
|
{ name => $role, |
|
desc => $description{$role}, |
|
}); |
|
} |
|
} |
|
my $json = JSON::DWIW->to_json({roles => $response}); |
|
return $json; |
|
} |
|
|
|
1; |
1; |
__END__ |
__END__ |
|
|