%# 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; } <%ARGS> $SubJob => '' $Show => '' $Queue => 0 $Group => 0 $Member => '' $Action => '' $Begin => 0 $ReadOnly => 0 $Continuation => 0 $Fixed => 0