Master to 4.2.8
[usit-rt.git] / share / html / Admin / Elements / MembershipsPage
CommitLineData
af59614d
MKG
1%# BEGIN BPS TAGGED BLOCK {{{
2%#
3%# COPYRIGHT:
4%#
320f0092 5%# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
af59614d
MKG
6%# <sales@bestpractical.com>
7%#
8%# (Except where explicitly superseded by other copyright notices)
9%#
10%#
11%# LICENSE:
12%#
13%# This work is made available to you under the terms of Version 2 of
14%# the GNU General Public License. A copy of that license should have
15%# been provided with this software, but in any event can be snarfed
16%# from www.gnu.org.
17%#
18%# This work is distributed in the hope that it will be useful, but
19%# WITHOUT ANY WARRANTY; without even the implied warranty of
20%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21%# General Public License for more details.
22%#
23%# You should have received a copy of the GNU General Public License
24%# along with this program; if not, write to the Free Software
25%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26%# 02110-1301 or visit their web page on the internet at
27%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
28%#
29%#
30%# CONTRIBUTION SUBMISSION POLICY:
31%#
32%# (The following paragraph is not intended to limit the rights granted
33%# to you to modify and distribute this software under the terms of
34%# the GNU General Public License and is only of importance to you if
35%# you choose to contribute your changes and enhancements to the
36%# community by submitting them to Best Practical Solutions, LLC.)
37%#
38%# By intentionally submitting any modifications, corrections or
39%# derivatives to this work, or any other work intended for use with
40%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
41%# you are the copyright holder for those contributions and you grant
42%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable,
43%# royalty-free, perpetual, license to use, copy, create derivative
44%# works based on those contributions, and sublicense and distribute
45%# those contributions and any derivatives thereof.
46%#
47%# END BPS TAGGED BLOCK }}}
48<& /Admin/Elements/Header, Title => $title &>
49<& /Elements/Tabs &>
50<& /Elements/ListActions &>
51
52<form method="post" action="">
53<input type="hidden" id="<% $id %>" />
54
55<h2><&|/l&>Groups the principal is member of (check box to delete)</&></h2>
56
57<& /Elements/CollectionList,
58 OrderBy => 'Name',
59 Order => 'ASC',
60 %ARGS,
c33a4027 61 Rows => $Rows,
af59614d
MKG
62 DisplayFormat => "__CheckBox.{Delete}__,$Format",
63 Format => $Format,
64 Collection => $is_member,
65 AllowSorting => 1,
66 PassArguments => [qw(Format Rows Page Order OrderBy id)],
67&>
68
69<h2><&|/l&>Groups the principal is not member of (check box to add)</&></h2>
70
71<& /Elements/CollectionList,
72 OrderBy => 'Name',
73 Order => 'ASC',
c33a4027 74 Rows => $Rows,
af59614d 75 %ARGS,
c33a4027 76 DisplayFormat => "__CheckBox.{Add}__,'__HasMemberRecursively.{$id}__/TITLE:Recursive member',$Format",
af59614d
MKG
77 Format => $Format,
78 Collection => $is_not_member,
79 AllowSorting => 1,
80 PassArguments => [qw(Format Rows Page Order OrderBy id)],
81&>
82
83<& /Elements/Submit, Label => loc('Update'), Name => 'Update' &>
84
85</form>
86
87<%INIT>
88my $principal = RT::Principal->new( $session{'CurrentUser'} );
89$principal->Load( $id ) || Abort(loc("Couldn't load principal #[_1]", $id));
90
91my $object = $principal->Object;
92$id = $object->id;
93
94if ( $Update ) {
95 my @results;
96 foreach my $gid( @Add ) {
97 my $group = RT::Group->new( $session{'CurrentUser'} );
98 $group->LoadUserDefinedGroup( $gid );
99 unless ( $group->id ) {
100 push @results, loc( "Couldn't load group #[_1]", $gid );
101 next;
102 }
103 my ($status, $msg) = $group->AddMember( $id );
104 push @results, $msg;
105 }
106 foreach my $gid( @Delete ) {
107 my $group = RT::Group->new( $session{'CurrentUser'} );
108 $group->LoadUserDefinedGroup( $gid );
109 unless ( $group->id ) {
110 push @results, loc( "Couldn't load group #[_1]", $gid );
111 next;
112 }
113 my ($status, $msg) = $group->DeleteMember( $id );
114 push @results, $msg;
115 }
116 MaybeRedirectForResults(
117 Arguments => { id => $id },
118 Actions => \@results,
119 );
120}
121
122my $is_member = RT::Groups->new( $session{'CurrentUser'} );
123$is_member->LimitToUserDefinedGroups;
124$is_member->WithMember( PrincipalId => $id );
125
126my $is_not_member = RT::Groups->new( $session{'CurrentUser'} );
127$is_not_member->LimitToUserDefinedGroups;
128$is_not_member->WithoutMember( PrincipalId => $id );
129$is_not_member->Limit( FIELD => 'id', OPERATOR => '!=', VALUE => $id );
130
131$Format ||= RT->Config->Get('AdminSearchResultFormat')->{'Groups'};
c33a4027 132my $Rows = RT->Config->Get('AdminSearchResultRows')->{'Groups'} || 50;
af59614d
MKG
133
134my $title;
135if ( $principal->IsUser ) {
136 $title = loc("Memberships of the user [_1]", $object->Name);
137} elsif ( $principal->IsGroup ) {
138 $title = loc("Memberships of the group [_1]", $object->Name);
139} else {
140 $title = loc("Memberships of the principal #[_1]", $id);
141}
142
143</%INIT>
144<%ARGS>
145$id => undef
146
147$Update => 0,
148@Add => (),
149@Delete => (),
150
151$Format => undef
152</%ARGS>