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.
git-svn-id: svn://10.0.0.236/trunk@142772 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
ea1230a8b5
commit
edaa949628
@ -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)");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -800,11 +800,48 @@ bugs numbered:
|
||||
<INPUT TYPE="text" NAME="bug_id" VALUE="" SIZE=15>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td> </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 valign="top">
|
||||
<td>
|
||||
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>
|
||||
and the result was: <INPUT NAME="chfieldvalue" SIZE="10">
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td> </td></tr>
|
||||
<tr>
|
||||
<td>
|
||||
Containing at least <INPUT NAME=votes SIZE=3 VALUE=""> votes
|
||||
@ -812,20 +849,6 @@ Containing at least <INPUT NAME=votes SIZE=3 VALUE=""> votes
|
||||
</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">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=2>
|
||||
During dates <INPUT NAME="chfieldfrom" SIZE="10" VALUE="">
|
||||
to <INPUT NAME="chfieldto" SIZE="10" VALUE="Now">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
</td>
|
||||
</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>
|
||||
|
||||
|
||||
};
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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." },
|
||||
] %]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user