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 ###
################################
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
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(
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 " .
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";
use Bugzilla::Product;
use Bugzilla::Classification;
use Bugzilla::Field;
+use Bugzilla::Group;
use Scalar::Util qw(blessed);
use DateTime::TimeZone;
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};
}
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.
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
}
# 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 " .
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 " .
# 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';
use Bugzilla::User;
use Bugzilla::Mailer;
use Bugzilla::Util;
+use Bugzilla::Group;
# create some handles that we'll need
my $template = Bugzilla->template;
$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 " .