This commit was generated by cvs2svn to compensate for changes in r3921,
[freeside.git] / rt / lib / RT / CachedGroupMembers_Overlay.pm
1 # {{{ BEGIN BPS TAGGED BLOCK
2
3 # COPYRIGHT:
4 #  
5 # This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC 
6 #                                          <jesse@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., 675 Mass Ave, Cambridge, MA 02139, USA.
26
27
28 # CONTRIBUTION SUBMISSION POLICY:
29
30 # (The following paragraph is not intended to limit the rights granted
31 # to you to modify and distribute this software under the terms of
32 # the GNU General Public License and is only of importance to you if
33 # you choose to contribute your changes and enhancements to the
34 # community by submitting them to Best Practical Solutions, LLC.)
35
36 # By intentionally submitting any modifications, corrections or
37 # derivatives to this work, or any other work intended for use with
38 # Request Tracker, to Best Practical Solutions, LLC, you confirm that
39 # you are the copyright holder for those contributions and you grant
40 # Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
41 # royalty-free, perpetual, license to use, copy, create derivative
42 # works based on those contributions, and sublicense and distribute
43 # those contributions and any derivatives thereof.
44
45 # }}} END BPS TAGGED BLOCK
46 =head1 NAME
47
48   RT::CachedGroupMembers - a collection of RT::GroupMember objects
49
50 =head1 SYNOPSIS
51
52   use RT::CachedGroupMembers;
53
54 =head1 DESCRIPTION
55
56
57 =head1 METHODS
58
59
60 =begin testing
61
62 ok (require RT::CachedGroupMembers);
63
64 =end testing
65
66 =cut
67
68 use strict;
69 no warnings qw(redefine);
70
71 # {{{ LimitToUsers
72
73 =head2 LimitToUsers
74
75 Limits this search object to users who are members of this group
76 This is really useful when you want to have your UI separate out
77 groups from users for display purposes
78
79 =cut
80
81 sub LimitToUsers {
82     my $self = shift;
83
84     my $principals = $self->NewAlias('Principals');
85     $self->Join( ALIAS1 => 'main', FIELD1 => 'MemberId',
86                  ALIAS2 => $principals, FIELD2 =>'id');
87
88     $self->Limit(       ALIAS => $principals,
89                          FIELD => 'PrincipalType',
90                          VALUE => 'User',
91                          ENTRYAGGREGATOR => 'OR',
92                          );
93 }
94
95 # }}}
96
97
98 # {{{ LimitToGroups
99
100 =head2 LimitToGroups
101
102 Limits this search object to Groups who are members of this group
103 This is really useful when you want to have your UI separate out
104 groups from users for display purposes
105
106 =cut
107
108 sub LimitToGroups {
109     my $self = shift;
110
111     my $principals = $self->NewAlias('Principals');
112     $self->Join( ALIAS1 => 'main', FIELD1 => 'MemberId',
113                  ALIAS2 => $principals, FIELD2 =>'id');
114
115     $self->Limit(       ALIAS => $principals,
116                          FIELD => 'PrincipalType',
117                          VALUE => 'Group',
118                          ENTRYAGGREGATOR => 'OR',
119                          );
120 }
121
122 # }}}
123
124 # {{{ sub LimitToMembersOfGroup
125
126 =head2 LimitToMembersOfGroup PRINCIPAL_ID
127
128 Takes a Principal Id as its only argument. 
129 Limits the current search principals which are _directly_ members
130 of the group which has PRINCIPAL_ID as its principal id.
131
132 =cut
133
134 sub LimitToMembersOfGroup {
135     my $self = shift;
136     my $group = shift;
137
138     return ($self->Limit( 
139                          VALUE => $group,
140                          FIELD => 'GroupId',
141                          ENTRYAGGREGATOR => 'OR',
142                          ));
143
144 }
145 # }}}
146
147 # {{{ sub LimitToGroupsWithMember
148
149 =head2 LimitToGroupsWithMember PRINCIPAL_ID
150
151 Takes a Principal Id as its only argument. 
152 Limits the current search to groups which contain PRINCIPAL_ID as a member  or submember.
153 This function gets used by GroupMember->Create to populate subgroups
154
155 =cut
156
157 sub LimitToGroupsWithMember {
158     my $self = shift;
159     my $member = shift;
160
161     
162
163     return ($self->Limit( 
164                          VALUE => $member || '0',
165                          FIELD => 'MemberId',
166                          ENTRYAGGREGATOR => 'OR',
167                                     QUOTEVALUE => 0
168                          ));
169
170 }
171 # }}}
172 1;