]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1169181 - The bug_user_last_visit method returns an empty array for old bugs
authorDylan Hardison <dylan@mozilla.com>
Thu, 10 Dec 2015 20:23:57 +0000 (15:23 -0500)
committerDylan Hardison <dylan@mozilla.com>
Thu, 10 Dec 2015 20:24:22 +0000 (15:24 -0500)
r=dkl

Bugzilla/API/1_0/Resource/BugUserLastVisit.pm
Bugzilla/User.pm
Bugzilla/WebService/BugUserLastVisit.pm

index fd25524f967bf442d5670538f3c9f34cee351ff3..1d2d4f582fff2b41e321a19b32c894c48c6e5688 100644 (file)
@@ -86,7 +86,7 @@ sub update {
 
         push(
             @results,
-            $self->_bug_user_last_visit_to_hash(
+            _bug_user_last_visit_to_hash(
                 $bug, $last_visit_ts, $params
             ));
     }
@@ -102,31 +102,27 @@ sub get {
 
     $user->login(LOGIN_REQUIRED);
 
+    my @last_visits;
     if ($ids) {
         # Cache permissions for bugs. This highly reduces the number of calls to
         # the DB.  visible_bugs() is only able to handle bug IDs, so we have to
         # skip aliases.
         $user->visible_bugs([grep /^[0-9]$/, @$ids]);
-    }
-
-    my @last_visits = @{ $user->last_visited };
 
-    if ($ids) {
-        # remove bugs that we are not interested in if ids is passed in.
-        my %id_set = map { ($_ => 1) } @$ids;
-        @last_visits = grep { $id_set{ $_->bug_id } } @last_visits;
+        my %last_visit  = map { $_->bug_id => $_->last_visit_ts } @{ $user->last_visited($ids) };
+        @last_visits = map { _bug_user_last_visit_to_hash($_, $last_visit{$_}, $params) } @$ids;
+    }
+    else {
+        @last_visits = map {
+            _bug_user_last_visit_to_hash($_->bug_id, $_->last_visit_ts, $params)
+        } @{ $user->last_visited };
     }
 
-    return [
-        map {
-            $self->_bug_user_last_visit_to_hash($_->bug_id, $_->last_visit_ts,
-                $params)
-        } @last_visits
-    ];
+    return \@last_visits;
 }
 
 sub _bug_user_last_visit_to_hash {
-    my ($self, $bug_id, $last_visit_ts, $params) = @_;
+    my ($bug_id, $last_visit_ts, $params) = @_;
 
     my %result = (id            => as_int($bug_id),
                   last_visit_ts => as_datetime($last_visit_ts));
index ca9b5aa28fe2745d7a5f31e29a083eab387cc1ac..caaa6c51a2de0082d1679c32071d978a6d10d057 100644 (file)
@@ -930,9 +930,10 @@ sub groups {
 }
 
 sub last_visited {
-    my ($self) = @_;
+    my ($self, $ids) = @_;
 
-    return Bugzilla::BugUserLastVisit->match({ user_id => $self->id });
+    return Bugzilla::BugUserLastVisit->match({ user_id => $self->id,
+                                               $ids ? ( bug_id => $ids ) : () });
 }
 
 sub is_involved_in_bug {
index 19a56ff46e7decdb405a29a61bf629bb53b0e893..3ee8cac03bbfa903a32290f479a1a10ce7c5e25a 100644 (file)
@@ -67,27 +67,23 @@ sub get {
 
     $user->login(LOGIN_REQUIRED);
 
+    my @last_visits;
     if ($ids) {
         # Cache permissions for bugs. This highly reduces the number of calls to
         # the DB.  visible_bugs() is only able to handle bug IDs, so we have to
         # skip aliases.
         $user->visible_bugs([grep /^[0-9]$/, @$ids]);
-    }
-
-    my @last_visits = @{ $user->last_visited };
 
-    if ($ids) {
-        # remove bugs that we are not interested in if ids is passed in.
-        my %id_set = map { ($_ => 1) } @$ids;
-        @last_visits = grep { $id_set{ $_->bug_id } } @last_visits;
+        my %last_visit  = map { $_->bug_id => $_->last_visit_ts } @{ $user->last_visited($ids) };
+        @last_visits = map { $self->_bug_user_last_visit_to_hash($_, $last_visit{$_}, $params) } @$ids;
+    }
+    else {
+        @last_visits = map {
+            $self->_bug_user_last_visit_to_hash($_->bug_id, $_->last_visit_ts, $params)
+        } @{ $user->last_visited };
     }
 
-    return [
-        map {
-            $self->_bug_user_last_visit_to_hash($_->bug_id, $_->last_visit_ts,
-                $params)
-        } @last_visits
-    ];
+    return \@last_visits;
 }
 
 sub _bug_user_last_visit_to_hash {