summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgerv%gerv.net <>2003-05-23 07:55:52 +0200
committergerv%gerv.net <>2003-05-23 07:55:52 +0200
commit12a601d903aa0e9c63184f7ec2f0bb4f0dd04f6b (patch)
tree84a3e8b4d775bca895974153bcd07a0f09c6893e
parent721bb38abb3d3dd25c59e5d65318da987b30fa7e (diff)
downloadbugzilla-12a601d903aa0e9c63184f7ec2f0bb4f0dd04f6b.tar.gz
bugzilla-12a601d903aa0e9c63184f7ec2f0bb4f0dd04f6b.tar.xz
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.
-rw-r--r--Bugzilla/Search.pm103
-rwxr-xr-xqueryhelp.cgi71
-rw-r--r--template/en/default/search/form.html.tmpl27
-rw-r--r--template/en/default/search/search-help.html.tmpl15
4 files changed, 116 insertions, 100 deletions
diff --git a/Bugzilla/Search.pm b/Bugzilla/Search.pm
index 171a1b824..45c26fdf2 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 a4aff1d07..a0e1178aa 100755
--- a/queryhelp.cgi
+++ b/queryhelp.cgi
@@ -800,28 +800,51 @@ bugs numbered:
<INPUT TYPE="text" NAME="bug_id" VALUE="" SIZE=15>
</td>
</tr>
+<tr><td>&nbsp;</td></tr>
<tr>
-<td>
-Changed in the last <INPUT NAME=changedin SIZE=3 VALUE=""> days
+<td colspan=2>
+Only bugs changed between <INPUT NAME="chfieldfrom" SIZE="10" VALUE="">
+and <INPUT NAME="chfieldto" SIZE="10" VALUE="Now">
</td>
</tr>
-<tr>
+<tr valign="top">
<td>
-Containing at least <INPUT NAME=votes SIZE=3 VALUE=""> votes
+Where one or more of the following changed:
+</td><td>
+<SELECT NAME="chfield" MULTIPLE SIZE=4>
+ <OPTION VALUE="[Bug creation]">[Bug creation]
+ <OPTION VALUE="assigned_to">assigned_to
+ <OPTION VALUE="bug_file_loc">bug_file_loc
+ <OPTION VALUE="bug_severity">bug_severity
+ <OPTION VALUE="bug_status">bug_status
+ <OPTION VALUE="component">component
+ <OPTION VALUE="everconfirmed">everconfirmed
+ <OPTION VALUE="groupset">groupset
+ <OPTION VALUE="keywords">keywords
+ <OPTION VALUE="op_sys">op_sys
+ <OPTION VALUE="priority">priority
+ <OPTION VALUE="product">product
+ <OPTION VALUE="qa_contact">qa_contact
+ <OPTION VALUE="rep_platform">rep_platform
+ <OPTION VALUE="reporter">reporter
+ <OPTION VALUE="resolution">resolution
+ <OPTION VALUE="short_desc">short_desc
+ <OPTION VALUE="status_whiteboard">status_whiteboard
+ <OPTION VALUE="target_milestone">target_milestone
+ <OPTION VALUE="version">version
+ <OPTION VALUE="votes">votes
+</SELECT>
</td>
</tr>
<tr>
<td>
-Where the field(s)
-<SELECT NAME="chfield" MULTIPLE SIZE=4>
-<OPTION VALUE="[Bug creation]">[Bug creation]<OPTION VALUE="assigned_to">assigned_to<OPTION VALUE="bug_file_loc">bug_file_loc<OPTION VALUE="bug_severity">bug_severity<OPTION VALUE="bug_status">bug_status<OPTION VALUE="component">component<OPTION VALUE="everconfirmed">everconfirmed<OPTION VALUE="groupset">groupset<OPTION VALUE="keywords">keywords<OPTION VALUE="op_sys">op_sys<OPTION VALUE="priority">priority<OPTION VALUE="product">product<OPTION VALUE="qa_contact">qa_contact<OPTION VALUE="rep_platform">rep_platform<OPTION VALUE="reporter">reporter<OPTION VALUE="resolution">resolution<OPTION VALUE="short_desc">short_desc<OPTION VALUE="status_whiteboard">status_whiteboard<OPTION VALUE="target_milestone">target_milestone<OPTION VALUE="version">version<OPTION VALUE="votes">votes
-</SELECT> changed to <INPUT NAME="chfieldvalue" SIZE="10">
+and the result was: <INPUT NAME="chfieldvalue" SIZE="10">
</td>
</tr>
+<tr><td>&nbsp;</td></tr>
<tr>
-<td colspan=2>
-During dates <INPUT NAME="chfieldfrom" SIZE="10" VALUE="">
-to <INPUT NAME="chfieldto" SIZE="10" VALUE="Now">
+<td>
+Containing at least <INPUT NAME=votes SIZE=3 VALUE=""> votes
</td>
</tr>
<tr>
@@ -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.
-<p><b>Changed in the last [text] days</b>
-
-<p>Lets you specify how many days ago - at maximum - a bug could have changed state.
-
<p><b>At least [text] votes</b>
<p>With this, you can choose how many votes - at minimum - a bug has.
-<p><b>Where the field(s) [fields] changed to [text]</b>
+<a name="changedbetween">
+<p><b>Only bugs changed between</b></p>
-<p>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.
+<p>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.</p>
-<p><b>During dates [text] to [text] </b>
+<p><b>Where one or more of the following changed, and the result was</b></p>
-<p>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.
+<p>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.</p>
};
diff --git a/template/en/default/search/form.html.tmpl b/template/en/default/search/form.html.tmpl
index efc5dd0b2..3ebe01f05 100644
--- a/template/en/default/search/form.html.tmpl
+++ b/template/en/default/search/form.html.tmpl
@@ -726,12 +726,13 @@ function selectProduct(f) {
<dl>
- <dt>Only bugs changed in the last </dt>
- <dd><input name="changedin" size="3" value="[% default.changedin.0 FILTER html %]"> days</dd>
-</dl>
-
-<dl>
- <dt>Only bugs where any of the fields</dt>
+ <dt>Only bugs changed between:</dt>
+ <dd>
+ <input name="chfieldfrom" size="10" value="[% default.chfieldfrom.0 FILTER html %]">
+ and <input name="chfieldto" size="10" value="[% default.chfieldto.0 FILTER html %]">
+ <br>(YYYY-MM-DD or <a href="queryhelp.cgi#changedbetween">relative dates</a>)
+ </dd><br>
+ <dt>where one or more of the following changed:</dt>
<dd>
<select name="chfield" multiple="multiple" size="4">
[% FOREACH field = chfield %]
@@ -740,21 +741,13 @@ function selectProduct(f) {
[% (field_descs.$field || field) FILTER html %]</option>
[% END %]
</select>
- </dd>
-
- <dt>were changed between</dt>
- <dd>
- <input name="chfieldfrom" size="10" value="[% default.chfieldfrom.0 FILTER html %]">
- and <input name="chfieldto" size="10" value="[% default.chfieldto.0 FILTER html %]">
- <br>(YYYY-MM-DD)
- </dd>
- <dt>to this value: (optional)</dt>
+ </dd><br>
+ <dt>and the new value was:</dt>
<dd>
<input name="chfieldvalue" size="20" value="[% default.chfieldvalue.0 FILTER html %]">
- </dd>
+ </dd><br>
</dl>
-
</fieldset>
</td>
</tr>
diff --git a/template/en/default/search/search-help.html.tmpl b/template/en/default/search/search-help.html.tmpl
index 557209690..852955533 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<br>
with more than a certain number of votes." },
-{ id => "changedin",
- html => "You can search by when bugs have changed - this field defines the<br>
- timeframe for the search." },
{ id => "chfield",
html => "You can search for specific types of change - this field define <br>
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<br>
+ (optionally followed by HH:mm, in 24 hour clock), or in relative<br>
+ dates such as 1d, 2w, 3m, 4y, which respectively mean one day,<br>
+ two weeks, three months, or four years ago. 0d is last midnight,<br>
+ 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<br>
+ (optionally followed by HH:mm, in 24 hour clock), or in relative<br>
+ dates such as 1d, 2w, 3m, 4y, which respectively mean one day,<br>
+ two weeks, three months, or four years ago. 0d is last midnight,<br>
+ 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." },
] %]