diff options
Diffstat (limited to 'Bugzilla')
-rw-r--r-- | Bugzilla/Hook.pm | 23 | ||||
-rw-r--r-- | Bugzilla/Search.pm | 23 |
2 files changed, 43 insertions, 3 deletions
diff --git a/Bugzilla/Hook.pm b/Bugzilla/Hook.pm index e00289344..789ad8740 100644 --- a/Bugzilla/Hook.pm +++ b/Bugzilla/Hook.pm @@ -433,6 +433,29 @@ The definition is structured as: =back +=head2 search_operator_field_override + +This allows you to modify L<Bugzilla::Search/OPERATOR_FIELD_OVERRIDE>, +which determines the search functions for fields. It allows you to specify +custom search functionality for certain fields. + +See L<Bugzilla::Search/OPERATOR_FIELD_OVERRIDE> for reference and see +the code in the example extension. + +Note that the interface to this hook is B<UNSTABLE> and it may change in the +future. + +Params: + +=over + +=item C<operators> - See L<Bugzilla::Search/OPERATOR_FIELD_OVERRIDE> to get +an idea of the structure. + +=item C<search> - The L<Bugzilla::Search> object. + +=back + =head2 bugmail_recipients This allows you to modify the list of users who are going to be receiving diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index cde1f8e35..0a5b5eb22 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -1597,16 +1597,17 @@ sub do_search_function { return if $args->{term}; } - my $override = OPERATOR_FIELD_OVERRIDE->{$actual_field}; + my $operator_field_override = $self->_get_operator_field_override(); + my $override = $operator_field_override->{$actual_field}; if (!$override) { # Multi-select fields get special handling. if ($self->_multi_select_fields->{$actual_field}) { - $override = OPERATOR_FIELD_OVERRIDE->{_multi_select}; + $override = $operator_field_override->{_multi_select}; } # And so do attachment fields, if they don't have a specific # individual override. elsif ($actual_field =~ /^attachments\./) { - $override = OPERATOR_FIELD_OVERRIDE->{attachments}; + $override = $operator_field_override->{attachments}; } } @@ -1671,6 +1672,22 @@ sub _pick_override_function { return $search_func; } +sub _get_operator_field_override { + my $self = shift; + my $cache = Bugzilla->request_cache; + + return $cache->{operator_field_override} + if defined $cache->{operator_field_override}; + + my %operator_field_override = %{ OPERATOR_FIELD_OVERRIDE() }; + Bugzilla::Hook::process('search_operator_field_override', + { search => $self, + operators => \%operator_field_override }); + + $cache->{operator_field_override} = \%operator_field_override; + return $cache->{operator_field_override}; +} + ########################### # Search Function Helpers # ########################### |