From 5653412eded43174ad1a53f7bc5a7a621c29dcfd Mon Sep 17 00:00:00 2001 From: Dave Lawrence Date: Tue, 21 Feb 2012 11:50:03 -0500 Subject: Bug 709944 - Expose groups of which a user is part r=glob, a=LpSolit --- Bugzilla/WebService/User.pm | 54 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 3 deletions(-) (limited to 'Bugzilla/WebService/User.pm') diff --git a/Bugzilla/WebService/User.pm b/Bugzilla/WebService/User.pm index 439d07702..60bae73df 100644 --- a/Bugzilla/WebService/User.pm +++ b/Bugzilla/WebService/User.pm @@ -188,17 +188,17 @@ sub get { my $in_group = $self->_filter_users_by_group( \@user_objects, $params); if (Bugzilla->user->in_group('editusers')) { - @users = + @users = map {filter $params, { id => $self->type('int', $_->id), real_name => $self->type('string', $_->name), name => $self->type('string', $_->login), email => $self->type('string', $_->email), can_login => $self->type('boolean', $_->is_enabled ? 1 : 0), + groups => $self->_filter_bless_groups($_->groups), email_enabled => $self->type('boolean', $_->email_enabled), login_denied_text => $self->type('string', $_->disabledtext), }} @$in_group; - } else { @users = @@ -208,6 +208,7 @@ sub get { name => $self->type('string', $_->login), email => $self->type('string', $_->email), can_login => $self->type('boolean', $_->is_enabled ? 1 : 0), + groups => $self->_filter_bless_groups($_->groups), }} @$in_group; } @@ -241,6 +242,29 @@ sub _user_in_any_group { return 0; } +sub _filter_bless_groups { + my ($self, $groups) = @_; + my $user = Bugzilla->user; + + my @filtered_groups; + foreach my $group (@$groups) { + next unless ($user->in_group('editusers') || $user->can_bless($group->id)); + push(@filtered_groups, $self->_group_to_hash($group)); + } + + return \@filtered_groups; +} + +sub _group_to_hash { + my ($self, $group) = @_; + my $item = { + id => $self->type('int', $group->id), + name => $self->type('string', $group->name), + description => $self->type('string', $group->description), + }; + return $item; +} + 1; __END__ @@ -563,10 +587,32 @@ C A text field that holds the reason for disabling a user from logging into bugzilla, if empty then the user account is enabled. Otherwise it is disabled/closed. +=item groups + +C An array of group hashes the user is a member of. Each hash describes +the group and contains the following items: + +=over + +=item id + +C The group id + +=item name + +C The name of the group + +=item description + +C The description for the group + +=back + B: If you are not logged in to Bugzilla when you call this function, you will only be returned the C, C, and C items. If you are logged in and not in editusers group, you will only be returned the C, C, -C, C, and C items. +C, C, and C items. The groups returned are filtered +based on your permission to bless each group. =back @@ -602,6 +648,8 @@ function. =item C added in Bugzilla B<4.0>. Default behavior for C has changed to only returning enabled accounts. +=item C Added in Bugzilla B<4.4>. + =back =back -- cgit v1.2.3-24-g4f1b