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:
=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
......
......@@ -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 #
###########################
......
......@@ -196,6 +196,27 @@ sub buglist_columns {
$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 {
my ($self, $args) = @_;
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