diff --git a/mozilla/webtools/bugzilla/Bugzilla/Search.pm b/mozilla/webtools/bugzilla/Bugzilla/Search.pm index 171a1b8245f..45c26fdf260 100644 --- a/mozilla/webtools/bugzilla/Bugzilla/Search.pm +++ b/mozilla/webtools/bugzilla/Bugzilla/Search.pm @@ -213,64 +213,65 @@ sub init { } } - - if (defined $params->param('changedin')) { - my $c = trim($params->param('changedin')); - if ($c ne "") { - if ($c !~ /^[0-9]*$/) { - ThrowUserError("illegal_changed_in_last_x_days", - { value => $c }); - } - push(@specialchart, ["changedin", - "lessthan", $c + 1]); + # 2003-05-20: The 'changedin' field is no longer in the UI, but we continue + # to process it because it will appear in stored queries and bookmarks. + my $changedin = $params->param('changedin') || ''; + $changedin = trim($changedin); + if ($changedin) { + if ($changedin !~ /^[0-9]*$/) { + ThrowUserError("illegal_changed_in_last_x_days", + { value => $changedin }); } + push(@specialchart, ["changedin", "lessthan", $changedin + 1]); } + my $chfieldfrom = $params->param('chfieldfrom') || ''; + my $chfieldto = $params->param('chfieldto') || ''; my @chfield = $params->param('chfield'); + my $chvalue = $params->param('chfieldvalue') || ''; + my $lcchfieldfrom = trim(lc($chfieldfrom)); + my $lcchfieldto = trim(lc($chfieldto)); + $chvalue = trim($chvalue); - if (@chfield) { - my $which = lsearch(\@chfield, "[Bug creation]"); - if ($which >= 0) { - splice(@chfield, $which, 1); - push(@specialchart, ["creation_ts", "greaterthan", - SqlifyDate($params->param('chfieldfrom'))]); - my $to = $params->param('chfieldto'); - if (defined $to) { - $to = trim($to); - if ($to ne "" && $to !~ /^now$/i) { - push(@specialchart, ["creation_ts", "lessthan", - SqlifyDate($to)]); + $lcchfieldfrom = '' if ($lcchfieldfrom eq 'now'); + $lcchfieldto = '' if ($lcchfieldto eq 'now'); + if ($lcchfieldfrom ne '' || $lcchfieldto ne '') { + my $sql_chfrom = $lcchfieldfrom ? &::SqlQuote(SqlifyDate($lcchfieldfrom)):''; + my $sql_chto = $lcchfieldto ? &::SqlQuote(SqlifyDate($lcchfieldto)) :''; + my $sql_chvalue = $chvalue ne '' ? &::SqlQuote($chvalue) : ''; + if(!@chfield) { + push(@wherepart, "bugs.delta_ts >= $sql_chfrom") if ($sql_chfrom); + push(@wherepart, "bugs.delta_ts <= $sql_chto") if ($sql_chto); + } else { + push(@supptables, "bugs_activity actcheck"); + my $sql_bugschanged = ''; + my @list; + foreach my $f (@chfield) { + if ($f eq "[Bug creation]") { + my @l; + push(@l, "creation_ts >= $sql_chfrom") if($sql_chfrom); + push(@l, "creation_ts <= $sql_chto") if($sql_chto); + $sql_bugschanged = "(" . join(' AND ', @l) . ")"; + } else { + push(@list, "\nactcheck.fieldid = " . &::GetFieldID($f)); } } - } - } - - if (@chfield) { - push(@supptables, "bugs_activity actcheck"); - - my @list; - foreach my $f (@chfield) { - push(@list, "\nactcheck.fieldid = " . &::GetFieldID($f)); - } - push(@wherepart, "actcheck.bug_id = bugs.bug_id"); - push(@wherepart, "(" . join(' OR ', @list) . ")"); - push(@wherepart, "actcheck.bug_when >= " . - &::SqlQuote(SqlifyDate($params->param('chfieldfrom')))); - my $to = $params->param('chfieldto'); - if (defined $to) { - $to = trim($to); - if ($to ne "" && $to !~ /^now$/i) { - push(@wherepart, "actcheck.bug_when <= " . - &::SqlQuote(SqlifyDate($to))); - } - } - my $value = $params->param('chfieldvalue'); - if (defined $value) { - $value = trim($value); - if ($value ne "") { - push(@wherepart, "actcheck.added = " . - &::SqlQuote($value)) + if(@list) { + $sql_bugschanged .= ' OR ' if($sql_bugschanged ne ''); + $sql_bugschanged .= "(actcheck.bug_id = bugs.bug_id AND " . + "(" . join(' OR ', @list) . ")"; + if($sql_chfrom) { + $sql_bugschanged .= " AND actcheck.bug_when >= $sql_chfrom"; + } + if($sql_chto) { + $sql_bugschanged .= " AND actcheck.bug_when <= $sql_chto"; + } + if($sql_chvalue) { + $sql_bugschanged .= " AND actcheck.added = $sql_chvalue"; + } + $sql_bugschanged .= ')'; } + push(@wherepart, "($sql_bugschanged)"); } } diff --git a/mozilla/webtools/bugzilla/queryhelp.cgi b/mozilla/webtools/bugzilla/queryhelp.cgi index a4aff1d07b8..a0e1178aa73 100755 --- a/mozilla/webtools/bugzilla/queryhelp.cgi +++ b/mozilla/webtools/bugzilla/queryhelp.cgi @@ -800,11 +800,48 @@ bugs numbered: +
Changed in the last [text] days - -
Lets you specify how many days ago - at maximum - a bug could have changed state. -
At least [text] votes
With this, you can choose how many votes - at minimum - a bug has. -
Where the field(s) [fields] changed to [text]
+
+ Only bugs changed between With this, you can specify values to search for in fields that exist in the bug If you choose
-one or more fields, you have to fill out one of the fields to the right. It might
-be difficult to figure out what these fields mean if you are a newbie to the query.
-They match various fields within the bug information. Optionally, you can
-also enter what value you want the field to have changed to if you only entered one field.
-For instance, if the bug changed who it was assigned to from jon\@netscape.com
-to brian\@netscape.com , you could enter in
-assigned_to changed to brian\@netscape.com.
+ Here you can choose what dates the bugs changed. "Now" can be used as an
+entry. Other entries should be in yyyy-mm-dd format, or in relative dates such
+as 1d or 2w or 3m or 4y, which respectively mean 1 day, 2 weeks, 3 months, 4
+years ago. 0d is last midnight, and 0w, 0m, 0y is the beginning of this week,
+month, or year. During dates [text] to [text]
+ Where one or more of the following changed, and the result was Here, you can choose what dates the fields changed. "Now" can be used as an entry. Other entries should be in
-mm/dd/yyyy or yyyy-mm-dd format.
+ With this you can specify which bug fields changed, and optionally to what
+value, between the dates specified above. Leaving blank will match any change.
-
-
-
-
-
diff --git a/mozilla/webtools/bugzilla/template/en/default/search/search-help.html.tmpl b/mozilla/webtools/bugzilla/template/en/default/search/search-help.html.tmpl
index 5572096907d..8529555330b 100644
--- a/mozilla/webtools/bugzilla/template/en/default/search/search-help.html.tmpl
+++ b/mozilla/webtools/bugzilla/template/en/default/search/search-help.html.tmpl
@@ -81,16 +81,21 @@
{ id => "votes",
html => "Some bugs can be voted for, and you can limit your search to bugs
(YYYY-MM-DD or relative dates)
+
+
(YYYY-MM-DD)
-
+
with more than a certain number of votes." },
-{ id => "changedin",
- html => "You can search by when bugs have changed - this field defines the
- timeframe for the search." },
{ id => "chfield",
html => "You can search for specific types of change - this field define
which field you are interested in changes for." },
{ id => "chfieldfrom",
- html => "The start time of the timeframe for the change." },
+ html => "Specify the start and end dates either in YYYY-MM-DD format
+ (optionally followed by HH:mm, in 24 hour clock), or in relative
+ dates such as 1d, 2w, 3m, 4y, which respectively mean one day,
+ two weeks, three months, or four years ago. 0d is last midnight,
+ and 0w, 0m, 0y is the beginning of this week, month, or year." },
{ id => "chfieldto",
- html => "The end time of the timeframe for the change." },
+ html => "Specify the start and end dates either in YYYY-MM-DD format
+ (optionally followed by HH:mm, in 24 hour clock), or in relative
+ dates such as 1d, 2w, 3m, 4y, which respectively mean one day,
+ two weeks, three months, or four years ago. 0d is last midnight,
+ and 0w, 0m, 0y is the beginning of this week, month, or year." },
{ id => "chfieldvalue",
html => "The value the field defined above changed to during that time." },
] %]