summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/Search/Saved.pm24
-rw-r--r--Bugzilla/User.pm5
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};
}