]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 76498: QuickSearch: support comparison operators other than substring
authorByron Jones <glob@mozilla.com>
Mon, 27 Jan 2014 18:21:42 +0000 (19:21 +0100)
committerFrédéric Buclin <LpSolit@gmail.com>
Mon, 27 Jan 2014 18:21:42 +0000 (19:21 +0100)
r=LpSolit a=justdave

Bugzilla/Search/Quicksearch.pm
template/en/default/pages/quicksearch.html.tmpl

index 690fcec1cd1ed5ab1a2b342b5cdf1411a15a12b2..3448b0bdb19013245cc8115d11bc67581273e9fb 100644 (file)
@@ -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.
index 78634b041407775de887bfc67388ad9aefba3993..2a3507ed22e363654dd015fcd19dc9598677cfd0 100644 (file)
       (<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>&gt;</strong> (greaterthan):<br>
+        <kbd><em>creation_ts&gt;-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>&gt;=</strong> (greaterthaneq):<br>
+        <kbd><em>creation_ts&gt;=-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>&lt;</strong> (lessthan):<br>
+        <kbd><em>creation_ts&lt;-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>&lt;=</strong> (lessthaneq):<br>
+        <kbd><em>creation_ts&lt;=-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>