summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kanat-Alexander <mkanat@bugzilla.org>2010-03-29 23:14:14 +0200
committerMax Kanat-Alexander <mkanat@bugzilla.org>2010-03-29 23:14:14 +0200
commit35f99bbebf22b711ba24d15377f2de2a73eff2c4 (patch)
tree33004e6d9448b8585ce0b799e49f64953ff5691e
parent8f04aae656cf6218ef3028ab615989c0269af66c (diff)
downloadbugzilla-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.pm17
-rw-r--r--Bugzilla/Search/Quicksearch.pm13
-rw-r--r--template/en/default/global/code-error.html.tmpl3
-rw-r--r--template/en/default/global/field-descs.none.tmpl1
-rw-r--r--template/en/default/list/list.html.tmpl2
-rw-r--r--template/en/default/search/boolean-charts.html.tmpl1
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">