Commit d94865b3 authored by Tiago Mello's avatar Tiago Mello

Bug 583243: Add a new hook 'search_operator_field_override'.

r/a=mkanat
parent 85e75aba
...@@ -433,6 +433,29 @@ The definition is structured as: ...@@ -433,6 +433,29 @@ The definition is structured as:
=back =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 =head2 bugmail_recipients
This allows you to modify the list of users who are going to be receiving This allows you to modify the list of users who are going to be receiving
......
...@@ -1597,16 +1597,17 @@ sub do_search_function { ...@@ -1597,16 +1597,17 @@ sub do_search_function {
return if $args->{term}; 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) { if (!$override) {
# Multi-select fields get special handling. # Multi-select fields get special handling.
if ($self->_multi_select_fields->{$actual_field}) { 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 # And so do attachment fields, if they don't have a specific
# individual override. # individual override.
elsif ($actual_field =~ /^attachments\./) { elsif ($actual_field =~ /^attachments\./) {
$override = OPERATOR_FIELD_OVERRIDE->{attachments}; $override = $operator_field_override->{attachments};
} }
} }
...@@ -1671,6 +1672,22 @@ sub _pick_override_function { ...@@ -1671,6 +1672,22 @@ sub _pick_override_function {
return $search_func; 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 # # Search Function Helpers #
########################### ###########################
......
...@@ -196,6 +196,27 @@ sub buglist_columns { ...@@ -196,6 +196,27 @@ sub buglist_columns {
$columns->{'example'} = { 'name' => 'bugs.delta_ts' , 'title' => 'Example' }; $columns->{'example'} = { 'name' => 'bugs.delta_ts' , 'title' => 'Example' };
} }
sub search_operator_field_override {
my ($self, $args) = @_;
my $operators = $args->{'operators'};
my $original = $operators->{component}->{_non_changed};
$operators->{component} = {
_non_changed => sub { _component_nonchanged($original, @_) }
};
}
sub _component_nonchanged {
my $original = shift;
my ($invocant, $args) = @_;
$invocant->$original($args);
# Actually, it does not change anything in the result,
# just an example.
$args->{term} = $args->{term} . " OR 1=2";
}
sub bugmail_recipients { sub bugmail_recipients {
my ($self, $args) = @_; my ($self, $args) = @_;
my $recipients = $args->{recipients}; my $recipients = $args->{recipients};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment