summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbuglist.cgi20
-rwxr-xr-xquery.cgi25
2 files changed, 31 insertions, 14 deletions
diff --git a/buglist.cgi b/buglist.cgi
index 6427180e9..5cae83b87 100755
--- a/buglist.cgi
+++ b/buglist.cgi
@@ -395,8 +395,24 @@ if ($::FORM{'keywords'}) {
}
if (@list) {
$query =~ s/where/, keywords where/;
- $query .= "and keywords.bug_id = bugs.bug_id and (" .
- join(" $::FORM{'keywords_type'} ", @list) . ")\n";
+ my $type = $::FORM{'keywords_type'};
+ my $notopt = "";
+ if ($type eq "nowords") {
+ # Ought to take advantage of keyword table somehow! ###
+ my $extra = GetByWordList("bugs.keywords", $::FORM{'keywords'},
+ "or");
+ $extra =~ s/AND/AND NOT/i;
+ $query .= $extra;
+ } else {
+ $query .= "and keywords.bug_id = bugs.bug_id and $notopt (" .
+ join(" or ", @list) . ")\n";
+ if ($type eq "allwords") {
+ # This needs to be tuned to take better advantage of the
+ # keyword table!
+ $query .= GetByWordList("bugs.keywords", $::FORM{'keywords'},
+ "and");
+ }
+ }
}
}
diff --git a/query.cgi b/query.cgi
index 0b6211bfb..5ed72da9b 100755
--- a/query.cgi
+++ b/query.cgi
@@ -136,8 +136,8 @@ sub ProcessFormStuff {
"changedin", "votes", "short_desc", "short_desc_type",
"long_desc", "long_desc_type", "bug_file_loc",
"bug_file_loc_type", "status_whiteboard",
- "status_whiteboard_type", "keywords", "bug_id",
- "bugidtype") {
+ "status_whiteboard_type", "bug_id",
+ "bugidtype", "keywords", "keywords_type") {
$default{$name} = "";
$type{$name} = 0;
}
@@ -643,18 +643,19 @@ if (@::legal_keywords) {
print qq{
<TR>
<TD ALIGN="right"><A HREF="describekeywords.cgi">Keywords</A>:</TD>
-<TD><INPUT NAME="keywords" SIZE=30 VALUE=$def></TD>
-<TD><SELECT NAME=keywords_type>
+<TD><INPUT NAME="keywords" SIZE=30 VALUE="$def"></TD>
+<TD>
};
- foreach my $i (["or", "Any of the listed keywords set"]) {
- my ($n, $d) = (@$i);
- my $sel = "";
- if ($default{"keywords"} eq $n) {
- $sel = " SELECTED";
- }
- print qq{<OPTION VALUE="$n"$sel>$d\n};
+ my $type = $default{"keywords_type"};
+ if ($type eq "or") { # Backward compatability hack.
+ $type = "anywords";
}
- print qq{</SELECT></TD></TR>};
+ print BuildPulldown("keywords_type",
+ [["anywords", "Any of the listed keywords set"],
+ ["allwords", "All of the listed keywords set"],
+ ["nowords", "None of the listed keywords set"]],
+ $type);
+ print qq{</TD></TR>};
}
print "