diff options
author | 2014-01-27 19:21:42 +0100 | |
---|---|---|
committer | 2014-01-27 19:21:42 +0100 | |
commit | edd311542420b987440ee9b4ce481666f7c762b4 (patch) | |
tree | 9aa5522d51fcef762907abd7e10ada8656d887d9 | |
parent | Bug 964113: Digest::SHA 5.82 and newer always croak on wide characters, preve... (diff) | |
download | bugzilla-edd311542420b987440ee9b4ce481666f7c762b4.tar.gz bugzilla-edd311542420b987440ee9b4ce481666f7c762b4.tar.bz2 bugzilla-edd311542420b987440ee9b4ce481666f7c762b4.zip |
Bug 76498: QuickSearch: support comparison operators other than substring
r=LpSolit a=justdave
-rw-r--r-- | Bugzilla/Search/Quicksearch.pm | 24 | ||||
-rw-r--r-- | template/en/default/pages/quicksearch.html.tmpl | 46 |
2 files changed, 65 insertions, 5 deletions
diff --git a/Bugzilla/Search/Quicksearch.pm b/Bugzilla/Search/Quicksearch.pm index 690fcec1c..3448b0bdb 100644 --- a/Bugzilla/Search/Quicksearch.pm +++ b/Bugzilla/Search/Quicksearch.pm @@ -103,6 +103,17 @@ use constant FIELD_OPERATOR => { owner_idle_time => 'greaterthan', }; +# Mappings for operators symbols to support operators other than "substring" +use constant OPERATOR_SYMBOLS => { + ':' => 'substring', + '=' => 'equals', + '!=' => 'notequals', + '>=' => 'greaterthaneq', + '<=' => 'lessthaneq', + '>' => 'greaterthan', + '<' => 'lessthan', +}; + # We might want to put this into localconfig or somewhere use constant PRODUCT_EXCEPTIONS => ( 'row', # [Browser] @@ -391,10 +402,11 @@ sub _handle_field_names { # Generic field1,field2,field3:value1,value2 notation. # We have to correctly ignore commas and colons in quotes. - my @field_values = _parse_line(':', 1, $or_operand); - if (scalar @field_values == 2) { - my @fields = _parse_line(',', 1, $field_values[0]); - my @values = _parse_line(',', 1, $field_values[1]); + foreach my $symbol (keys OPERATOR_SYMBOLS) { + my @field_values = parse_line($symbol, 1, $or_operand); + next unless scalar @field_values == 2; + my @fields = parse_line(',', 1, $field_values[0]); + my @values = parse_line(',', 1, $field_values[1]); foreach my $field (@fields) { my $translated = _translate_field_name($field); # Skip and record any unknown fields @@ -411,7 +423,9 @@ sub _handle_field_names { $bug_status_set = 1; } foreach my $value (@values) { - my $operator = FIELD_OPERATOR->{$translated} || 'substring'; + my $operator = FIELD_OPERATOR->{$translated} + || OPERATOR_SYMBOLS->{$symbol} + || 'substring'; # If the string was quoted to protect some special # characters such as commas and colons, we need # to remove quotes. diff --git a/template/en/default/pages/quicksearch.html.tmpl b/template/en/default/pages/quicksearch.html.tmpl index 78634b041..2a3507ed2 100644 --- a/template/en/default/pages/quicksearch.html.tmpl +++ b/template/en/default/pages/quicksearch.html.tmpl @@ -209,6 +209,52 @@ (<kbd>url</kbd> OR <kbd>location</kbd>) AND (<kbd>bar</kbd> OR <kbd>field</kbd>) AND (NOT <kbd>focus</kbd>)</p> </li> + + <li> + The default operator, colon (:), performs a <strong>substring</strong> + match of the value. The following operators are supported: + <ul> + <li> + <strong>:</strong> (substring):<br> + <kbd><em>summary:foo</em></kbd> will search for [% terms.bugs %] + where the <kbd>summary</kbd> contains <kbd>foo</kbd>. + </li> + <li> + <strong>=</strong> (equals):<br> + <kbd><em>summary=foo</em></kbd> will search for [% terms.bugs %] + where the <kbd>summary</kbd> is exactly <kbd>foo</kbd>. + </li> + <li> + <strong>!=</strong> (notequals):<br> + <kbd><em>summary!=foo</em></kbd> will search for [% terms.bugs %] + where the <kbd>summary</kbd> is not <kbd>foo</kbd>. + </li> + <li> + <strong>></strong> (greaterthan):<br> + <kbd><em>creation_ts>-2w</em></kbd> will search for [% terms.bugs %] + where that were created between two weeks ago and now, excluding [% + terms.bugs %] exactly two weeks old. + </li> + <li> + <strong>>=</strong> (greaterthaneq):<br> + <kbd><em>creation_ts>=-2w</em></kbd> will search for [% terms.bugs %] + where that were created between two weeks ago and now, including [% + terms.bugs %] exactly two weeks old. + </li> + <li> + <strong><</strong> (lessthan):<br> + <kbd><em>creation_ts<-2w</em></kbd> will search for [% terms.bugs %] + where that were created more than two weeks ago, excluding [% + terms.bugs %] exactly two weeks old. + </li> + <li> + <strong><=</strong> (lessthaneq):<br> + <kbd><em>creation_ts<=-2w</em></kbd> will search for [% terms.bugs %] + where that were created more than two weeks ago, including [% + terms.bugs %] exactly two weeks old. + </li> + </ul> + </li> </ul> <h2 id="shortcuts">Advanced Shortcuts</h2> |