]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Majorly changed querying of email addresses.
authorterry%netscape.com <>
Tue, 19 Jan 1999 08:07:45 +0000 (08:07 +0000)
committerterry%netscape.com <>
Tue, 19 Jan 1999 08:07:45 +0000 (08:07 +0000)
CHANGES
buglist.cgi
helpemailquery.html [new file with mode: 0644]
makecctable.sh
query.cgi

diff --git a/CHANGES b/CHANGES
index 66c8437c10ecf942eee0ff42007c67e5307354a1..fabe02e1e3e858e635352e9b4193b3509216167c 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -11,6 +11,12 @@ will tell you what has been changed in the last week.
 
 
 
+1/18/99 You can now query by CC.  To make this perform reasonably, the CC table
+needs some indices.  The following MySQL does the necessary stuff:
+
+       alter table cc add index (bug_id), add index (who);
+
+
 1/15/99 The op_sys field can now be queried by (and more easily tweaked).
 To make this perform reasonably, it needs an index.  The following MySQL 
 command will create the necessary index:
@@ -63,6 +69,17 @@ entries:
        alter table bugs change column op_sys op_sys enum("All", "Windows 3.1", "Windows 95", "Windows 98", "Windows NT", "Mac System 7", "Mac System 7.5", "Mac System 7.1.6", "Mac System 8.0", "AIX", "BSDI", "HP-UX", "IRIX", "Linux", "OSF/1", "Solaris", "SunOS", "other") not null, change column rep_platform rep_platform enum("All", "DEC", "HP", "Macintosh", "PC", "SGI", "Sun", "Other");
 
 
+
+
+
+11/20/98 Added searching of CC field.  To better support this, added
+some indexes to the CC table.  You probably want to execute the following
+mysql commands:
+
+       alter table cc add index (bug_id);
+       alter table cc add index (who);
+
+
 10/27/98 security check for legal products in place. bug charts are not
 available as an option if collectstats.pl has never been run. all products 
 get daily stats collected now. README updated: Chart::Base is listed as
index 179e2d0dcbbab5c3766ee95e70c8e65590e36f1f..cc2c56034451c5fef92eb81469265b481fcc2a83 100755 (executable)
@@ -195,6 +195,7 @@ bugs.product,
 bugs.bug_status";
 }
 
+
 $query .= "
 from   bugs,
        profiles assign,
@@ -206,6 +207,15 @@ and    bugs.product = projector.program
 and    bugs.version = projector.value
 ";
 
+if ((defined $::FORM{'emailcc1'} && $::FORM{'emailcc1'}) ||
+    (defined $::FORM{'emailcc2'} && $::FORM{'emailcc2'})) {
+
+    # We need to poke into the CC table.  Do weird SQL left join stuff so that
+    # we can look in the CC table, but won't reject any bugs that don't have
+    # any CC fields.
+    $query =~ s/bugs,/bugs left join cc using (bug_id) left join profiles ccname on cc.who = ccname.userid,/;
+}
+
 if (defined $::FORM{'sql'}) {
   $query .= "and (\n$::FORM('sql')\n)"
 } else {
@@ -244,6 +254,61 @@ if (defined $::FORM{'sql'}) {
   }
 }
 
+
+foreach my $id ("1", "2") {
+    my $email = trim($::FORM{"email$id"});
+    if ($email eq "") {
+        next;
+    }
+    my $qemail = SqlQuote($email); 
+    my $type = $::FORM{"emailtype$id"};
+    my $emailid;
+    if ($type eq "exact") {
+        $emailid = DBNameToIdAndCheck($email);
+    }
+
+    my $foundone = 0;
+    my $lead= "and (\n";
+    foreach my $field ("assigned_to", "reporter", "cc") {
+        my $doit = $::FORM{"email$field$id"};
+        if (!$doit) {
+            next;
+        }
+        $foundone = 1;
+        my $table;
+        if ($field eq "assigned_to") {
+            $table = "assign";
+        } elsif ($field eq "reporter") {
+            $table = "report";
+        } else {
+            $table = "ccname";
+        }
+        if ($type eq "exact") {
+            if ($field eq "cc") {
+                $query .= "\t$lead cc.who = $emailid\n";
+            } else {
+                $query .= "\t$lead $field = $emailid\n";
+            }
+        } elsif ($type eq "regexp") {
+            $query .= "\t$lead $table.login_name regexp $qemail\n";
+        } else {
+            $query .= "\t$lead instr($table.login_name, $qemail)\n";
+        }
+        $lead = " or ";
+    }
+    if (!$foundone) {
+        print "You must specify one or more fields in which to search for <tt>$email</tt>.\n";
+        exit;
+    }
+    if ($lead eq " or ") {
+        $query .= ")\n";
+    }
+}
+                
+
+
+
+
 if (defined $::FORM{'changedin'}) {
     my $c = trim($::FORM{'changedin'});
     if ($c ne "") {
diff --git a/helpemailquery.html b/helpemailquery.html
new file mode 100644 (file)
index 0000000..622e3aa
--- /dev/null
@@ -0,0 +1,36 @@
+<html> <head>
+<title>Help on searching by email address.</title>
+</head>
+
+<body>
+<h1>Help on searching by email address.</h1>
+
+This used to be simpler, but not very powerful.  Now it's really
+powerful and useful, but it may not be obvious how to use it...
+
+<p>
+
+To search for bugs associated with an email address:
+
+<ul>
+  <li> Type a portion of an email address into the text field.
+  <li> Select which fields of the bug you expect that address to be in
+       the bugs you're looking for.
+</ul>
+
+<p>
+
+You can look for up to two different email addresses; if you specify
+both, then only bugs which match both will show up.  This is useful to
+find bugs that were, for example, created by Ralph and assigned to
+Fred.
+
+<p>
+
+You can also use the drop down menus to specify whether you want to
+match addresses by doing a substring match, by using regular
+expressions, or by exactly matching a fully specified email address.
+
+
+
+</body> </html>
index 44c50ca925afeff00ae04ae8ef84852ae98160d3..f0bde191bcbdb967a555c48473a501aeef77f736 100755 (executable)
@@ -29,7 +29,10 @@ mysql << OK_ALL_DONE
 use bugs;
 create table cc (
         bug_id mediumint not null,
-        who mediumint not null
+        who mediumint not null,
+
+       index(bug_id),
+       index(who)
 );
 
 
index 170d84b9d82b54e28832411666c79e7cd34b7e9c..053511d5d69e27f9caed9769d0359fe574d11dea 100755 (executable)
--- a/query.cgi
+++ b/query.cgi
@@ -58,7 +58,11 @@ my %type;
 
 foreach my $name ("bug_status", "resolution", "assigned_to", "rep_platform",
                   "priority", "bug_severity", "product", "reporter", "op_sys",
-                  "component", "version") {
+                  "component", "version",
+                  "email1", "emailtype1", "emailreporter1",
+                  "emailassigned_to1", "emailcc1",
+                  "email2", "emailtype2", "emailreporter2",
+                  "emailassigned_to2", "emailcc2") {
     $default{$name} = "";
     $type{$name} = 0;
 }
@@ -100,8 +104,67 @@ print "Set-Cookie: BUGLIST=
 Content-type: text/html\n\n";
 
 GetVersionTable();
-my $who = GeneratePeopleInput("assigned_to", $default{"assigned_to"});
-my $reporter = GeneratePeopleInput("reporter", $default{"reporter"});
+
+sub GenerateEmailInput {
+    my ($id) = (@_);
+    my $defstr = value_quote($default{"email$id"});
+    my $deftype = $default{"emailtype$id"};
+    if ($deftype eq "") {
+        $deftype = "substring";
+    }
+    my $assignedto = ($default{"emailassigned_to$id"} eq "1") ? "checked" : "";
+    my $reporter = ($default{"emailreporter$id"} eq "1") ? "checked" : "";
+    my $cc = ($default{"emailcc$id"} eq "1") ? "checked" : "";
+
+    if ($assignedto eq "" && $reporter eq "" && $cc eq "") {
+        if ($id eq "1") {
+            $assignedto = "checked";
+        } else {
+            $reporter = "checked";
+        }
+    }
+
+    return qq|
+<table border=1 cellspacing=0 cellpadding=0>
+<tr><td>
+<table cellspacing=0 cellpadding=0>
+<tr>
+<td rowspan=2 valign=top><a href="helpemailquery.html">Email:</a>
+<input name="email$id" size="30" value="">&nbsp;matching as
+<SELECT NAME=emailtype$id>
+<OPTION VALUE="regexp">regexp
+<OPTION SELECTED VALUE="substring">substring
+<OPTION VALUE="exact">exact
+</SELECT>
+</td>
+<td>
+<input type="checkbox" name="emailassigned_to$id" value=1 $assignedto>Assigned To
+</td>
+</tr>
+<tr>
+<td>
+<input type="checkbox" name="emailreporter$id" value=1 $reporter>Reporter
+</td>
+</tr>
+<tr>
+<td align=right>(Will match any of the selected fields)</td>
+<td>
+<input type="checkbox" name="emailcc$id" value=1 $cc>CC &nbsp;&nbsp;
+</td>
+</tr>
+</table>
+</table>
+|;
+}
+
+
+            
+
+
+my $emailinput1 = GenerateEmailInput(1);
+my $emailinput2 = GenerateEmailInput(2);
+
+
 
 
 # Muck the "legal product" list so that the default one is always first (and
@@ -164,12 +227,12 @@ print "
 </table>
 
 <p>
-<TABLE>
-<TR><TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#assigned_to\">Assigned To:</a></B><TD>$who
+$emailinput1<p>
+$emailinput2<p>
+
+
+
 
-<p>
-<TR><TD ALIGN=RIGHT><B>Reporter:</B><TD>$reporter
-</TABLE>
 <NOBR>Changed in the last <INPUT NAME=changedin SIZE=2> days.</NOBR>