]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1320977 - Add review/feedback/needinfo request counts and block statuses to ...
authorKohei Yoshino <kohei.yoshino@gmail.com>
Fri, 27 Jul 2018 17:26:55 +0000 (13:26 -0400)
committerDylan William Hardison <dylan@hardison.net>
Fri, 27 Jul 2018 17:26:55 +0000 (13:26 -0400)
Bugzilla/WebService/User.pm
extensions/Review/Extension.pm

index 5bb5e32c15913d12ee0402f19d67f5652ee4c37e..c569cf9d858fbd72a631d2ac3715fc230526aaa2 100644 (file)
@@ -154,7 +154,7 @@ sub suggest {
     return { users => [] } if length($s) < 3;
 
     my $dbh = Bugzilla->dbh;
-    my @select = ('realname AS real_name', 'login_name AS name');
+    my @select = ('userid AS id', 'realname AS real_name', 'login_name AS name');
     my $order  = 'last_seen_date DESC';
     my $where;
     state $have_mysql = $dbh->isa('Bugzilla::DB::Mysql');
@@ -190,11 +190,15 @@ sub suggest {
 
     my @users = map {
         {
+            id        => $self->type(int    => $_->{id}),
             real_name => $self->type(string => $_->{real_name}),
             name      => $self->type(email  => $_->{name}),
         }
     } @$results;
 
+    Bugzilla::Hook::process('webservice_user_suggest',
+        { webservice => $self, params => $params, users => \@users });
+
     return { users => \@users };
 }
 
index 47edd69a69a2ef485d7fca3abe7eda85c41b399d..406c29c7cc6f9c68a51e90fd59a7f89782d7599a 100644 (file)
@@ -25,6 +25,8 @@ use Bugzilla::Search;
 use Bugzilla::User;
 use Bugzilla::User::Setting;
 use Bugzilla::Util qw(clean_text datetime_from diff_arrays);
+use Bugzilla::WebService::Util qw(filter_wants);
+use Scalar::Util qw(blessed);
 
 use constant UNAVAILABLE_RE => qr/\b(?:unavailable|pto|away)\b/i;
 use constant MENTOR_LIMIT   => 10;
@@ -1064,4 +1066,51 @@ sub config_modify_panels {
     };
 }
 
+#
+# hooks
+#
+
+sub webservice_user_get {
+    my ($self, $args) = @_;
+    my ($webservice, $params, $users) = @$args{qw(webservice params users)};
+
+    return unless filter_wants($params, 'requests');
+
+    my $ids = [
+        map { blessed($_->{id}) ? $_->{id}->value : $_->{id} }
+        grep { exists $_->{id} }
+        @$users
+    ];
+
+    return unless @$ids;
+
+    my %user_map = map { $_->id => $_ } @{ Bugzilla::User->new_from_list($ids) };
+
+    foreach my $user (@$users) {
+        my $id = blessed($user->{id}) ? $user->{id}->value : $user->{id};
+        my $user_obj = $user_map{$id};
+
+        $user->{requests} = {
+            review   => {
+                blocked => $webservice->type('boolean', $user_obj->reviews_blocked),
+                pending => $webservice->type('int', $user_obj->{review_request_count}),
+            },
+            feedback => {
+                # reviews_blocked includes feedback as well
+                blocked => $webservice->type('boolean', $user_obj->reviews_blocked),
+                pending => $webservice->type('int', $user_obj->{feedback_request_count}),
+            },
+            needinfo => {
+                blocked => $webservice->type('boolean', $user_obj->needinfo_blocked),
+                pending => $webservice->type('int', $user_obj->{needinfo_request_count}),
+            },
+        };
+    }
+}
+
+sub webservice_user_suggest {
+    my ($self, $args) = @_;
+    $self->webservice_user_get($args);
+}
+
 __PACKAGE__->NAME;