]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 405355: Move flatten_group_membership() from User.pm to Group.pm - Patch by arbin...
authorlpsolit%gmail.com <>
Sun, 25 Jan 2009 18:49:30 +0000 (18:49 +0000)
committerlpsolit%gmail.com <>
Sun, 25 Jan 2009 18:49:30 +0000 (18:49 +0000)
Bugzilla/Group.pm
Bugzilla/Install.pm
Bugzilla/Search.pm
Bugzilla/User.pm
editgroups.cgi
editusers.cgi
whine.pl

index 455276c99c80ae2e39ffe72c5ce650fc6fe70fba..e33ce6347101320b2c41c8c4c864fc9fd5001dbe 100644 (file)
@@ -238,6 +238,33 @@ sub members_non_inherited {
     return $self->{members_non_inherited};
 }
 
+sub flatten_group_membership {
+    my ($self, @groups) = @_;
+
+    my $dbh = Bugzilla->dbh;
+    my $sth;
+    my @groupidstocheck = @groups;
+    my %groupidschecked = ();
+    $sth = $dbh->prepare("SELECT member_id FROM group_group_map
+                             WHERE grantor_id = ? 
+                               AND grant_type = " . GROUP_MEMBERSHIP);
+    while (my $node = shift @groupidstocheck) {
+        $sth->execute($node);
+        my $member;
+        while (($member) = $sth->fetchrow_array) {
+            if (!$groupidschecked{$member}) {
+                $groupidschecked{$member} = 1;
+                push @groupidstocheck, $member;
+                push @groups, $member unless grep $_ == $member, @groups;
+            }
+        }
+    }
+    return \@groups;
+}
+
+
+
+
 ################################
 #####  Module Subroutines    ###
 ################################
@@ -394,4 +421,12 @@ Returns an arrayref of L<Bugzilla::User> objects representing people who are
 the group regular expression, or they have been actually added to the
 group manually.
 
+=item C<flatten_group_membership>
+
+Accepts a list of groups and returns a list of all the groups whose members 
+inherit membership in any group on the list.  So, we can determine if a user
+is in any of the groups input to flatten_group_membership by querying the
+user_group_map for any user with DIRECT or REGEXP membership IN() the list
+of groups returned.
+
 =back
index 3d382add8b494eaaff5d21a40c514d5476d42a0e..0a1f0e955b7993b4be134d194c6ec479b02aa4e6 100644 (file)
@@ -274,7 +274,7 @@ sub create_admin {
 
     my $admin_group = new Bugzilla::Group({ name => 'admin' });
     my $admin_inheritors = 
-        Bugzilla::User->flatten_group_membership($admin_group->id);
+        Bugzilla::Group->flatten_group_membership($admin_group->id);
     my $admin_group_ids = join(',', @$admin_inheritors);
 
     my ($admin_count) = $dbh->selectrow_array(
index de02115fe3d84c21db29fcd3a5f13ad056db5930..2b3b2304415d591321ffef567fa210342437632d 100644 (file)
@@ -1067,7 +1067,7 @@ sub _contact_exact_group {
     my $group = $1;
     my $groupid = Bugzilla::Group::ValidateGroupName( $group, ($user));
     $groupid || ThrowUserError('invalid_group_name',{name => $group});
-    my @childgroups = @{$user->flatten_group_membership($groupid)};
+    my @childgroups = @{Bugzilla::Group->flatten_group_membership($groupid)};
     my $table = "user_group_map_$$chartid";
     push (@$supptables, "LEFT JOIN user_group_map AS $table " .
                         "ON $table.user_id = bugs.$$f " .
@@ -1139,7 +1139,7 @@ sub _cc_exact_group {
     my $group = $1;
     my $groupid = Bugzilla::Group::ValidateGroupName( $group, ($user));
     $groupid || ThrowUserError('invalid_group_name',{name => $group});
-    my @childgroups = @{$user->flatten_group_membership($groupid)};
+    my @childgroups = @{Bugzilla::Group->flatten_group_membership($groupid)};
     my $chartseq = $$chartid;
     if ($$chartid eq "") {
         $chartseq = "CC$$sequence";
index 0c0f45bc05013c3119aebc60a6a9822677e041c9..fe04856aa600aeb477357b9df39309b06835d6a6 100644 (file)
@@ -48,6 +48,7 @@ use Bugzilla::User::Setting;
 use Bugzilla::Product;
 use Bugzilla::Classification;
 use Bugzilla::Field;
+use Bugzilla::Group;
 
 use Scalar::Util qw(blessed);
 use DateTime::TimeZone;
@@ -830,7 +831,7 @@ sub visible_groups_inherited {
     return $self->{visible_groups_inherited} if defined $self->{visible_groups_inherited};
     return [] unless $self->id;
     my @visgroups = @{$self->visible_groups_direct};
-    @visgroups = @{$self->flatten_group_membership(@visgroups)};
+    @visgroups = @{Bugzilla::Group->flatten_group_membership(@visgroups)};
     $self->{visible_groups_inherited} = \@visgroups;
     return $self->{visible_groups_inherited};
 }
@@ -992,30 +993,6 @@ sub can_bless {
     return grep($_->id == $group_id, @{ $self->bless_groups }) ? 1 : 0;
 }
 
-sub flatten_group_membership {
-    my ($self, @groups) = @_;
-
-    my $dbh = Bugzilla->dbh;
-    my $sth;
-    my @groupidstocheck = @groups;
-    my %groupidschecked = ();
-    $sth = $dbh->prepare("SELECT member_id FROM group_group_map
-                             WHERE grantor_id = ? 
-                               AND grant_type = " . GROUP_MEMBERSHIP);
-    while (my $node = shift @groupidstocheck) {
-        $sth->execute($node);
-        my $member;
-        while (($member) = $sth->fetchrow_array) {
-            if (!$groupidschecked{$member}) {
-                $groupidschecked{$member} = 1;
-                push @groupidstocheck, $member;
-                push @groups, $member unless grep $_ == $member, @groups;
-            }
-        }
-    }
-    return \@groups;
-}
-
 sub match {
     # Generates a list of users whose login name (email address) or real name
     # matches a substring or wildcard.
@@ -2049,14 +2026,6 @@ Returns a reference to an array of users.  The array is populated with hashrefs
 containing the login, identity and visibility.  Users that are not visible to this
 user will have 'visible' set to zero.
 
-=item C<flatten_group_membership>
-
-Accepts a list of groups and returns a list of all the groups whose members 
-inherit membership in any group on the list.  So, we can determine if a user
-is in any of the groups input to flatten_group_membership by querying the
-user_group_map for any user with DIRECT or REGEXP membership IN() the list
-of groups returned.
-
 =item C<direct_group_membership>
 
 Returns a reference to an array of group objects. Groups the user belong to
index 7dd8a7b6304e56995cf5eee5e69c718ff1ab75d6..475b805cc175c730ca27c3a5a7ffeb42b75c18f8 100755 (executable)
@@ -262,7 +262,7 @@ if ($action eq 'del') {
     }
 
     # Group inheritance no longer appears in user_group_map.
-    my $grouplist = join(',', @{Bugzilla::User->flatten_group_membership($gid)});
+    my $grouplist = join(',', @{Bugzilla::Group->flatten_group_membership($gid)});
     my $hasusers =
         $dbh->selectrow_array("SELECT 1 FROM user_group_map
                                WHERE group_id IN ($grouplist) AND isbless = 0 " .
@@ -337,7 +337,7 @@ if ($action eq 'delete') {
     my $cantdelete = 0;
 
     # Group inheritance no longer appears in user_group_map.
-    my $grouplist = join(',', @{Bugzilla::User->flatten_group_membership($gid)});
+    my $grouplist = join(',', @{Bugzilla::Group->flatten_group_membership($gid)});
     my $hasusers =
         $dbh->selectrow_array("SELECT 1 FROM user_group_map
                                WHERE group_id IN ($grouplist) AND isbless = 0 " .
index 6dac967886550d824e4bafdf1ef232c9493cf936..3d8b661844d8bfaa530e4e603ce8e96e0c283f2c 100755 (executable)
@@ -164,7 +164,7 @@ if ($action eq 'search') {
         # Handle selection by group.
         if ($grouprestrict eq '1') {
             my $grouplist = join(',',
-                @{Bugzilla::User->flatten_group_membership($group->id)});
+                @{Bugzilla::Group->flatten_group_membership($group->id)});
             $query .= " $nextCondition ugm.group_id IN($grouplist) ";
         }
         $query .= ' ORDER BY profiles.login_name';
index e49e4816a26d5cd1224d2fcecac3bc84b168eaa5..3eb757dd4d154c46bebfdd82930937dfa52f422f 100755 (executable)
--- a/whine.pl
+++ b/whine.pl
@@ -34,6 +34,7 @@ use Bugzilla::Search;
 use Bugzilla::User;
 use Bugzilla::Mailer;
 use Bugzilla::Util;
+use Bugzilla::Group;
 
 # create some handles that we'll need
 my $template = Bugzilla->template;
@@ -250,7 +251,7 @@ sub get_next_event {
                         $groupname, $owner);
                     if ($group_id) {
                         my $glist = join(',',
-                            @{Bugzilla::User->flatten_group_membership(
+                            @{Bugzilla::Group->flatten_group_membership(
                             $group_id)});
                         $sth = $dbh->prepare("SELECT user_id FROM " .
                                              "user_group_map " .