diff options
author | terry%netscape.com <> | 1999-03-24 07:32:19 +0100 |
---|---|---|
committer | terry%netscape.com <> | 1999-03-24 07:32:19 +0100 |
commit | 19ca3aa8dbc4f551836cd0dac9150118c9128ee1 (patch) | |
tree | 03ae4669a496ee9dee3ac21482bbf79089a2dc6a | |
parent | 57f0b7a2c7ed40c7eb2029bf1091c3f262b1e23f (diff) | |
download | bugzilla-19ca3aa8dbc4f551836cd0dac9150118c9128ee1.tar.gz bugzilla-19ca3aa8dbc4f551836cd0dac9150118c9128ee1.tar.xz |
Can now query for a specified field being changed at a specified time,
optionally to a specified value.
-rw-r--r-- | CHANGES | 5 | ||||
-rwxr-xr-x | buglist.cgi | 52 | ||||
-rw-r--r-- | globals.pl | 1 | ||||
-rwxr-xr-x | makeactivitytable.sh | 4 | ||||
-rwxr-xr-x | query.cgi | 30 |
5 files changed, 87 insertions, 5 deletions
@@ -10,6 +10,11 @@ query the CVS tree. For example, will tell you what has been changed in the last week. +3/22/99 Added the ability to query by fields which have changed within a date +range. To make this perform a bit better, we need a new index: + + alter table bugs_activity add index (field); + 3/10/99 Added 'groups' stuff, where we have different group bits that we can put on a person or on a bug. Some of the group bits control access to bugzilla features. And a person can't access a bug unless he has every group bit set diff --git a/buglist.cgi b/buglist.cgi index b5f5e1608..196357804 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -23,6 +23,7 @@ use diagnostics; use strict; require "CGI.pl"; +use Date::Parse; my $serverpush = 1; @@ -340,6 +341,57 @@ Click the <B>Back</B> button and try again."; } } +my $ref = $::MFORM{'chfield'}; + + +sub SqlifyDate { + my ($str) = (@_); + if (!defined $str) { + $str = ""; + } + my $date = str2time($str); + if (!defined $date) { + print "The string '<tt>$str</tt>' is not a legal date.\n"; + print "<P>Please click the <B>Back</B> button and try again.\n"; + exit; + } + return time2str("'%Y/%m/%d %H:%M:%S'", $date); +} + + + + + +if (defined $ref && 0 < @$ref) { + # Do surgery on the query to tell it to patch in the bugs_activity + # table. + $query =~ s/bugs,/bugs, bugs_activity,/; + + my @list; + foreach my $f (@$ref) { + push(@list, "\nbugs_activity.field = " . SqlQuote($f)); + } + $query .= "and bugs_activity.bug_id = bugs.bug_id and (" . + join(' or ', @list) . ") "; + $query .= "and bugs_activity.when >= " . + SqlifyDate($::FORM{'chfieldfrom'}) . "\n"; + my $to = $::FORM{'chfieldto'}; + if (defined $to) { + $to = trim($to); + if ($to ne "" && $to !~ /^now$/i) { + $query .= "and bugs_activity.when <= " . SqlifyDate($to) . "\n"; + } + } + my $value = $::FORM{'chfieldvalue'}; + if (defined $value) { + $value = trim($value); + if ($value ne "") { + $query .= "and bugs_activity.newvalue = " . + SqlQuote($value) . "\n"; + } + } +} + foreach my $f ("short_desc", "long_desc", "bug_file_loc", "status_whiteboard") { if (defined $::FORM{$f}) { diff --git a/globals.pl b/globals.pl index 409d12b63..d6e18d225 100644 --- a/globals.pl +++ b/globals.pl @@ -260,6 +260,7 @@ sub GenerateVersionTable { splice(@::log_columns, $w, 1); } } + @::log_columns = (sort(@::log_columns)); @::legal_priority = SplitEnumType($cols->{"priority,type"}); @::legal_severity = SplitEnumType($cols->{"bug_severity,type"}); diff --git a/makeactivitytable.sh b/makeactivitytable.sh index 047d81e7e..9af62ef61 100755 --- a/makeactivitytable.sh +++ b/makeactivitytable.sh @@ -24,7 +24,6 @@ use bugs; drop table bugs_activity OK_ALL_DONE - mysql << OK_ALL_DONE use bugs; create table bugs_activity ( @@ -36,7 +35,8 @@ create table bugs_activity ( newvalue tinytext, index (bug_id), - index (when) + index (when), + index (field) ); @@ -31,13 +31,13 @@ use vars @::legal_resolution, @::legal_product, @::legal_bug_status, @::legal_priority, - @::legal_resolution, @::legal_opsys, @::legal_platform, @::legal_components, @::legal_versions, @::legal_severity, @::legal_target_milestone, + @::log_columns, %::versions, %::components, %::FORM; @@ -62,7 +62,8 @@ my %type; foreach my $name ("bug_status", "resolution", "assigned_to", "rep_platform", "priority", "bug_severity", "product", "reporter", "op_sys", - "component", "version", + "component", "version", "chfield", "chfieldfrom", + "chfieldto", "chfieldvalue", "email1", "emailtype1", "emailreporter1", "emailassigned_to1", "emailcc1", "emailqa_contact1", "email2", "emailtype2", "emailreporter2", @@ -92,6 +93,11 @@ foreach my $item (split(/\&/, $::buffer)) { } +if ($default{'chfieldto'} eq "") { + $default{'chfieldto'} = "Now"; +} + + my $namelist = ""; @@ -375,8 +381,26 @@ $emailinput2<p> +Changed in the <NOBR>last <INPUT NAME=changedin SIZE=2 VALUE=\"$default{'changedin'}\"> days.</NOBR> -<NOBR>Changed in the last <INPUT NAME=changedin SIZE=2> days.</NOBR> +<table> +<tr> +<td rowspan=2 align=right>Where the field(s) +</td><td rowspan=2> +<SELECT NAME=\"chfield\" MULTIPLE SIZE=4> +@{[make_options(\@::log_columns, $default{'chfield'}, $type{'chfield'})]} +</SELECT> +</td><td rowspan=2> +changed. +</td><td> +<nobr>dates <INPUT NAME=chfieldfrom SIZE=10 VALUE=\"$default{'chfieldfrom'}\"></nobr> +<nobr>to <INPUT NAME=chfieldto SIZE=10 VALUE=\"$default{'chfieldto'}\"></nobr> +</td> +</tr> +<tr> +<td>changed to value <nobr><INPUT NAME=chfieldvalue SIZE=10> (optional)</nobr> +</td> +</table> <P> |