%# Stop searching. Happiness is right next to you. Now, if they'd only
%# take a bath ...
<& /Edit/Elements/PopHeader &>
<&|/Edit/Elements/PickUsers, Prefix => 'Member', %ARGS &>
<&|/l&>Role Name&>
&>
<& /Edit/Elements/PopFooter &>
<%INIT>
my $Roles = RT::Groups->new($session{'CurrentUser'});
$Roles->LimitToEnabled;
$Roles->LimitToRolesForGroup();
$Roles->OrderBy( FIELD => 'Name' );
my $RoleMap = $Roles->RoleMap;
my $Object = $RT::Nothing;
my $List = $session{MemberList};
my $OffList = $session{MemberOffList};
$Object = RT::Group->new($session{'CurrentUser'});
$Object->Load($Group) || Abort(loc("Couldn't load group [_1]",$Group));
if (!$Continuation) {
$List = [];
$OffList = [];
@$OffList = grep {
if ($Group and eval { $RoleMap->{$Group}{$Member}{$_} }) {
my $Obj = RT::User->new($session{'CurrentUser'});
$Obj->Load($_);
push @$List, $Obj;
0;
}
else {
1;
}
} @{ $RT::Handle->dbh->selectcol_arrayref(
$RT::OIN104
? "SELECT Id FROM Users WHERE ExternalAuthId > 0"
: "SELECT Id FROM Users WHERE Id > ".$RT::Nobody->Id
)};
$session{"MemberList"} = [@$List];
$session{"MemberOffList"} = [@$OffList];
}
elsif ($Action eq 'Commit') {
my %seen;
$Member ||= 0;
while (my ($role, $members) = each %{$RoleMap->{$Group}} ) {
next if $role == $Member;
$seen{$_}++ foreach keys %$members;
}
foreach my $item (@$OffList) {
$Object->DeleteMember( $item ) unless $seen{$item};
}
foreach my $item (@$List) {
$Object->AddMember( $item->PrincipalId );
}
$RoleMap->{$Group}{$Member} = { map { $_->Id => 1 } @$List };
$Roles->SetRoleMap($RoleMap);
$m->print("");
$m->abort;
}
%INIT>
<%ARGS>
$SubJob => ''
$Show => ''
$Queue => 0
$Group => 0
$Member => ''
$Action => ''
$Begin => 0
$ReadOnly => 0
$Continuation => 0
$Fixed => 0
%ARGS>