diff options
-rw-r--r-- | Bugzilla/Search/Saved.pm | 24 | ||||
-rw-r--r-- | Bugzilla/User.pm | 5 |
2 files changed, 29 insertions, 0 deletions
diff --git a/Bugzilla/Search/Saved.pm b/Bugzilla/Search/Saved.pm index 9aa27714d..c8322242b 100644 --- a/Bugzilla/Search/Saved.pm +++ b/Bugzilla/Search/Saved.pm @@ -117,6 +117,24 @@ sub create { return $obj; } +sub preload { + my ($searches) = @_; + my $dbh = Bugzilla->dbh; + + return unless scalar @$searches; + + my @query_ids = map { $_->id } @$searches; + my $queries_in_footer = $dbh->selectcol_arrayref( + 'SELECT namedquery_id + FROM namedqueries_link_in_footer + WHERE ' . $dbh->sql_in('namedquery_id', \@query_ids) . ' AND user_id = ?', + undef, Bugzilla->user->id); + + my %links_in_footer = map { $_ => 1 } @$queries_in_footer; + foreach my $query (@$searches) { + $query->{link_in_footer} = ($links_in_footer{$query->id}) ? 1 : 0; + } +} ##################### # Complex Accessors # ##################### @@ -250,6 +268,12 @@ Does not accept a bare C<name> argument. Instead, accepts only an id. See also: L<Bugzilla::Object/new>. +=item C<preload> + +Sets C<link_in_footer> for all given saved searches at once, for the +currently logged in user. This is much faster than calling this method +for each saved search individually. + =back diff --git a/Bugzilla/User.pm b/Bugzilla/User.pm index 293b18d3e..5c4c8621c 100644 --- a/Bugzilla/User.pm +++ b/Bugzilla/User.pm @@ -284,6 +284,11 @@ sub queries { 'SELECT id FROM namedqueries WHERE userid = ?', undef, $self->id); require Bugzilla::Search::Saved; $self->{queries} = Bugzilla::Search::Saved->new_from_list($query_ids); + + # We preload link_in_footer from here as this information is always requested. + # This only works if the user object represents the current logged in user. + Bugzilla::Search::Saved::preload($self->{queries}) if $self->id == Bugzilla->user->id; + return $self->{queries}; } |