[Rt-commit] r6005 - in rt/branches/3.7-EXPERIMENTAL: .

ruz at bestpractical.com ruz at bestpractical.com
Wed Sep 20 22:36:51 EDT 2006


Author: ruz
Date: Wed Sep 20 22:36:50 2006
New Revision: 6005

Modified:
   rt/branches/3.7-EXPERIMENTAL/   (props changed)
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Group_Overlay.pm

Log:
 r3779 at cubic-pc:  cubic | 2006-09-21 04:50:35 +0400
 RT::Groups
 * new method GroupMembersObj, works similar to UserMembersObj
 


Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Group_Overlay.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Group_Overlay.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Group_Overlay.pm	Wed Sep 20 22:36:50 2006
@@ -808,55 +808,91 @@
 
 # }}}
 
-# {{{ UserMembersObj
+# {{{ MembersObj
 
-=head2 UserMembersObj
+=head2 MembersObj
 
-Returns an RT::Users object of this group's members, including
-all members of subgroups
+Returns an RT::GroupMembers object of this group's direct members.
 
 =cut
 
-sub UserMembersObj {
+sub MembersObj {
     my $self = shift;
-
-    my $users = RT::Users->new($self->CurrentUser);
+    my $members_obj = RT::GroupMembers->new( $self->CurrentUser );
 
     #If we don't have rights, don't include any results
     # TODO XXX  WHY IS THERE NO ACL CHECK HERE?
+    $members_obj->LimitToMembersOfGroup( $self->PrincipalId );
 
-    my $cached_members = $users->NewAlias('CachedGroupMembers');
-    $users->Join(ALIAS1 => $cached_members, FIELD1 => 'MemberId',
-                 ALIAS2 => $users->PrincipalsAlias, FIELD2 => 'id');
-    $users->Limit(ALIAS => $cached_members, 
-                  FIELD => 'GroupId',
-                  OPERATOR => '=',
-                  VALUE => $self->PrincipalId);
+    return ( $members_obj );
 
-    return ( $users);
+}
+
+# }}}
+
+# {{{ GroupMembersObj
+
+=head2 GroupMembersObj [Recursively => 1]
+
+Returns an L<RT::Groups> object of this group's members.
+By default returns groups including all subgroups, but
+could be changed with C<Recursively> named argument.
+
+B<Note> that groups are not filtered by type and result
+may contain as well system groups, personal and other.
 
+=cut
+
+sub GroupMembersObj {
+    my $self = shift;
+    my %args = ( Recursively => 1, @_ );
+
+    my $groups = RT::Groups->new( $self->CurrentUser );
+    my $members_table = $args{'Recursively'}?
+        'CachedGroupMembers': 'GroupMembers';
+
+    my $members_alias = $groups->NewAlias( $members_table );
+    $groups->Join(
+        ALIAS1 => $members_alias,           FIELD1 => 'MemberId',
+        ALIAS2 => $groups->PrincipalsAlias, FIELD2 => 'id',
+    );
+    $groups->Limit(
+        ALIAS    => $members_alias,
+        FIELD    => 'GroupId',
+        OPERATOR => '=',
+        VALUE    => $self->PrincipalId,
+    );
+    return $groups;
 }
 
 # }}}
 
-# {{{ MembersObj
+# {{{ UserMembersObj
 
-=head2 MembersObj
+=head2 UserMembersObj
 
-Returns an RT::GroupMembers object of this group's direct members.
+Returns an RT::Users object of this group's members, including
+all members of subgroups
 
 =cut
 
-sub MembersObj {
+sub UserMembersObj {
     my $self = shift;
-    my $members_obj = RT::GroupMembers->new( $self->CurrentUser );
+
+    my $users = RT::Users->new($self->CurrentUser);
 
     #If we don't have rights, don't include any results
     # TODO XXX  WHY IS THERE NO ACL CHECK HERE?
-    $members_obj->LimitToMembersOfGroup( $self->PrincipalId );
 
-    return ( $members_obj );
+    my $cached_members = $users->NewAlias('CachedGroupMembers');
+    $users->Join(ALIAS1 => $cached_members, FIELD1 => 'MemberId',
+                 ALIAS2 => $users->PrincipalsAlias, FIELD2 => 'id');
+    $users->Limit(ALIAS => $cached_members, 
+                  FIELD => 'GroupId',
+                  OPERATOR => '=',
+                  VALUE => $self->PrincipalId);
 
+    return ( $users);
 }
 
 # }}}


More information about the Rt-commit mailing list