]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Allow searches for "all keywords" or "no keywords"; fixed some other
authorterry%mozilla.org <>
Thu, 27 Jan 2000 05:48:35 +0000 (05:48 +0000)
committerterry%mozilla.org <>
Thu, 27 Jan 2000 05:48:35 +0000 (05:48 +0000)
bugs around keyword queries.

buglist.cgi
query.cgi

index 6427180e9133c2d611989f377b7749af960e438c..5cae83b872ecd6f294183d6cf722eaec391e099d 100755 (executable)
@@ -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");
+            }
+        }
     }
 }
 
index 0b6211bfbe5bc5511f259e1792f8038ce9f66503..5ed72da9b590189ea785c12127baa153f187a266 100755 (executable)
--- 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 "