From: gerv%gerv.net <> Date: Fri, 23 May 2003 05:55:52 +0000 (+0000) Subject: Bug 37749 - query for changes to specific field in last n days not working. Rearrange... X-Git-Tag: bugzilla-2.17.5~143 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=12a601d903aa0e9c63184f7ec2f0bb4f0dd04f6b;p=thirdparty%2Fbugzilla.git Bug 37749 - query for changes to specific field in last n days not working. Rearrange time-based query UI to be more sane. Patch by mailto:anthony@itia.ntua.gr; r=gerv. --- diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm index 171a1b8245..45c26fdf26 100644 --- a/Bugzilla/Search.pm +++ b/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'); - - 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)]); + my $chvalue = $params->param('chfieldvalue') || ''; + my $lcchfieldfrom = trim(lc($chfieldfrom)); + my $lcchfieldto = trim(lc($chfieldto)); + $chvalue = trim($chvalue); + + $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/queryhelp.cgi b/queryhelp.cgi index a4aff1d07b..a0e1178aa7 100755 --- a/queryhelp.cgi +++ b/queryhelp.cgi @@ -800,28 +800,51 @@ bugs numbered: +  - -Changed in the last days + +Only bugs changed between +and - + -Containing at least votes +Where one or more of the following changed: + + -Where the field(s) - changed to +and the result was: +  - -During dates -to + +Containing at least votes @@ -847,29 +870,23 @@ exclude bugs based on values you enter. of which you want to exclude. It would be nice in the future if you could type in ranges, i.e. [1-1000] for 1 to 1000. Unfortunately, you cannot do that as of now. -

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/template/en/default/search/form.html.tmpl b/template/en/default/search/form.html.tmpl index efc5dd0b2d..3ebe01f052 100644 --- a/template/en/default/search/form.html.tmpl +++ b/template/en/default/search/form.html.tmpl @@ -726,12 +726,13 @@ function selectProduct(f) {
-
Only bugs changed in the last
-
days
-
- -
-
Only bugs where any of the fields
+
Only bugs changed between:
+
+ + and +
(YYYY-MM-DD or
relative dates) +

+
where one or more of the following changed:
-
- -
were changed between
-
- - and -
(YYYY-MM-DD) -
-
to this value: (optional)
+
+
and the new value was:
-
+
- diff --git a/template/en/default/search/search-help.html.tmpl b/template/en/default/search/search-help.html.tmpl index 5572096907..8529555330 100644 --- a/template/en/default/search/search-help.html.tmpl +++ b/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
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." }, ] %]