diff options
author | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-03-29 23:14:14 +0200 |
---|---|---|
committer | Max Kanat-Alexander <mkanat@bugzilla.org> | 2010-03-29 23:14:14 +0200 |
commit | 35f99bbebf22b711ba24d15377f2de2a73eff2c4 (patch) | |
tree | 33004e6d9448b8585ce0b799e49f64953ff5691e | |
parent | 8f04aae656cf6218ef3028ab615989c0269af66c (diff) | |
download | bugzilla-35f99bbebf22b711ba24d15377f2de2a73eff2c4.tar.gz bugzilla-35f99bbebf22b711ba24d15377f2de2a73eff2c4.tar.xz |
Bug 554986: Add a "notmatches" search type, which allows the minus sign
operator to start working for bare words in Quicksearch again
r=LpSolit, a=LpSolit
-rw-r--r-- | Bugzilla/Search.pm | 17 | ||||
-rw-r--r-- | Bugzilla/Search/Quicksearch.pm | 13 | ||||
-rw-r--r-- | template/en/default/global/code-error.html.tmpl | 3 | ||||
-rw-r--r-- | template/en/default/global/field-descs.none.tmpl | 1 | ||||
-rw-r--r-- | template/en/default/list/list.html.tmpl | 2 | ||||
-rw-r--r-- | template/en/default/search/boolean-charts.html.tmpl | 1 |
6 files changed, 15 insertions, 22 deletions
diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 56f1a5c28..a0d9718ec 100644 --- a/Bugzilla/Search.pm +++ b/Bugzilla/Search.pm @@ -615,7 +615,7 @@ sub init { "^long_?desc,changedby" => \&_long_desc_changedby, "^long_?desc,changedbefore" => \&_long_desc_changedbefore_after, "^long_?desc,changedafter" => \&_long_desc_changedbefore_after, - "^content,matches" => \&_content_matches, + "^content,(?:not)?matches" => \&_content_matches, "^content," => sub { ThrowUserError("search_content_without_matches"); }, "^(?:deadline|creation_ts|delta_ts),(?:lessthan|lessthaneq|greaterthan|greaterthaneq|equals|notequals),(?:-|\\+)?(?:\\d+)(?:[dDwWmMyY])\$" => \&_timestamp_compare, "^commenter,(?:equals|anyexact),(%\\w+%)" => \&_commenter_exact, @@ -660,6 +660,7 @@ sub init { ",lessthan" => \&_lessthan, ",lessthaneq" => \&_lessthaneq, ",matches" => sub { ThrowUserError("search_content_without_matches"); }, + ",notmatches" => sub { ThrowUserError("search_content_without_matches"); }, ",greaterthan" => \&_greaterthan, ",greaterthaneq" => \&_greaterthaneq, ",anyexact" => \&_anyexact, @@ -1420,8 +1421,8 @@ sub _long_desc_changedbefore_after { sub _content_matches { my $self = shift; my %func_args = @_; - my ($chartid, $supptables, $term, $groupby, $fields, $v) = - @func_args{qw(chartid supptables term groupby fields v)}; + my ($chartid, $supptables, $term, $groupby, $fields, $t, $v) = + @func_args{qw(chartid supptables term groupby fields t v)}; my $dbh = Bugzilla->dbh; # "content" is an alias for columns containing text for which we @@ -1448,19 +1449,21 @@ sub _content_matches { # The term to use in the WHERE clause. $$term = "$term1 > 0 OR $term2 > 0"; + if ($$t =~ /not/i) { + $$term = "NOT($$term)"; + } # In order to sort by relevance (in case the user requests it), # we SELECT the relevance value so we can add it to the ORDER BY # clause. Every time a new fulltext chart isadded, this adds more - # terms to the relevance sql. (That doesn't make sense in - # "NOT" charts, but Bugzilla never uses those with fulltext - # by default.) + # terms to the relevance sql. # # We build the relevance SQL by modifying the COLUMNS list directly, # which is kind of a hack but works. my $current = COLUMNS->{'relevance'}->{name}; $current = $current ? "$current + " : ''; - my $select_term = "($current$rterm1 + $rterm2)"; + # For NOT searches, we just add 0 to the relevance. + my $select_term = $$t =~ /not/ ? 0 : "($current$rterm1 + $rterm2)"; COLUMNS->{'relevance'}->{name} = $select_term; } diff --git a/Bugzilla/Search/Quicksearch.pm b/Bugzilla/Search/Quicksearch.pm index c71fab85b..7839c4fd5 100644 --- a/Bugzilla/Search/Quicksearch.pm +++ b/Bugzilla/Search/Quicksearch.pm @@ -524,19 +524,10 @@ sub matchPrefixes { sub negateComparisonType { my $comparisonType = shift; - if ($comparisonType eq 'substring') { - return 'notsubstring'; - } - elsif ($comparisonType eq 'anywords') { + if ($comparisonType eq 'anywords') { return 'nowords'; } - elsif ($comparisonType eq 'regexp') { - return 'notregexp'; - } - else { - # Don't know how to negate that - ThrowCodeError('unknown_comparison_type'); - } + return "not$comparisonType"; } # Add a boolean chart diff --git a/template/en/default/global/code-error.html.tmpl b/template/en/default/global/code-error.html.tmpl index 7d2fa3533..1819a4f96 100644 --- a/template/en/default/global/code-error.html.tmpl +++ b/template/en/default/global/code-error.html.tmpl @@ -422,9 +422,6 @@ An error occurred while preparing for a RADIUS authentication request: <code>[% errstr FILTER html %]</code>. - [% ELSIF error == "unknown_comparison_type" %] - Specified comparison type is not supported. - [% ELSIF error == "request_queue_group_invalid" %] The group field <em>[% group FILTER html %]</em> is invalid. diff --git a/template/en/default/global/field-descs.none.tmpl b/template/en/default/global/field-descs.none.tmpl index 6c6b93a9f..bbe1aba7b 100644 --- a/template/en/default/global/field-descs.none.tmpl +++ b/template/en/default/global/field-descs.none.tmpl @@ -49,6 +49,7 @@ "changedto" => "changed to", "changedby" => "changed by", "matches" => "matches", + "notmatches" => "does not match", } %] [% field_types = { ${constants.FIELD_TYPE_UNKNOWN} => "Unknown Type", diff --git a/template/en/default/list/list.html.tmpl b/template/en/default/list/list.html.tmpl index 4431a52f3..4743d260d 100644 --- a/template/en/default/list/list.html.tmpl +++ b/template/en/default/list/list.html.tmpl @@ -85,7 +85,7 @@ 'notequals', 'regexp', 'notregexp', 'lessthan', 'lessthaneq', 'greaterthan', 'greaterthaneq', 'changedbefore', 'changedafter', 'changedfrom', 'changedto', 'changedby', 'notsubstring', 'nowords', - 'nowordssubstr', + 'nowordssubstr', 'notmatches', ] %] <ul class="search_description"> [% FOREACH desc_item = search_description %] diff --git a/template/en/default/search/boolean-charts.html.tmpl b/template/en/default/search/boolean-charts.html.tmpl index a58efc9a9..a8d018556 100644 --- a/template/en/default/search/boolean-charts.html.tmpl +++ b/template/en/default/search/boolean-charts.html.tmpl @@ -46,6 +46,7 @@ "changedto", "changedby", "matches", + "notmatches", ] %] <h3 id="chart"> |