Commit ba4585ae authored by Max Kanat-Alexander's avatar Max Kanat-Alexander

Bug 486292: Change the default workflow to UNCONFIRMED, CONFIRMED,

IN_PROGRESS, RESOLVED, VERIFIED. r=LpSolit, a=mkanat
parent 4e7c28de
...@@ -1323,7 +1323,10 @@ sub _check_bug_status { ...@@ -1323,7 +1323,10 @@ sub _check_bug_status {
} }
if (ref $invocant && $new_status->name eq 'ASSIGNED' if (ref $invocant
&& ($new_status->name eq 'IN_PROGRESS'
# Backwards-compat for the old default workflow.
or $new_status->name eq 'ASSIGNED')
&& Bugzilla->params->{"usetargetmilestone"} && Bugzilla->params->{"usetargetmilestone"}
&& Bugzilla->params->{"musthavemilestoneonaccept"} && Bugzilla->params->{"musthavemilestoneonaccept"}
# musthavemilestoneonaccept applies only if at least two # musthavemilestoneonaccept applies only if at least two
......
...@@ -67,7 +67,7 @@ sub init { ...@@ -67,7 +67,7 @@ sub init {
# #
# The URL encoding is: # The URL encoding is:
# line0=67&line0=73&line1=81&line2=67... # line0=67&line0=73&line1=81&line2=67...
# &label0=B+/+R+/+NEW&label1=... # &label0=B+/+R+/+CONFIRMED&label1=...
# &select0=1&select3=1... # &select0=1&select3=1...
# &cumulate=1&datefrom=2002-02-03&dateto=2002-04-04&ctype=html... # &cumulate=1&datefrom=2002-02-03&dateto=2002-04-04&ctype=html...
# &gt=1&labelgt=Grand+Total # &gt=1&labelgt=Grand+Total
......
...@@ -58,13 +58,13 @@ sub get_param_list { ...@@ -58,13 +58,13 @@ sub get_param_list {
{ {
name => 'mybugstemplate', name => 'mybugstemplate',
type => 't', type => 't',
default => 'buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailreporter1=1&emailtype1=exact&email1=%userid%&field0-0-0=bug_status&type0-0-0=notequals&value0-0-0=UNCONFIRMED&field0-0-1=reporter&type0-0-1=equals&value0-0-1=%userid%' default => 'buglist.cgi?resolution=---&emailassigned_to1=1&emailreporter1=1&emailtype1=exact&email1=%userid%'
}, },
{ {
name => 'defaultquery', name => 'defaultquery',
type => 't', type => 't',
default => 'bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&emailassigned_to1=1&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailqa_contact2=1&emaillongdesc3=1&order=Importance&long_desc_type=substring' default => 'resolution=---&emailassigned_to1=1&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailqa_contact2=1&emaillongdesc3=1&order=Importance&long_desc_type=substring'
}, },
{ {
......
...@@ -68,8 +68,8 @@ use constant ENUM_DEFAULTS => { ...@@ -68,8 +68,8 @@ use constant ENUM_DEFAULTS => {
priority => ["Highest", "High", "Normal", "Low", "Lowest", "---"], priority => ["Highest", "High", "Normal", "Low", "Lowest", "---"],
op_sys => ["All","Windows","Mac OS","Linux","Other"], op_sys => ["All","Windows","Mac OS","Linux","Other"],
rep_platform => ["All","PC","Macintosh","Other"], rep_platform => ["All","PC","Macintosh","Other"],
bug_status => ["UNCONFIRMED","NEW","ASSIGNED","REOPENED","RESOLVED", bug_status => ["UNCONFIRMED","CONFIRMED","IN_PROGRESS","RESOLVED",
"VERIFIED","CLOSED"], "VERIFIED"],
resolution => ["","FIXED","INVALID","WONTFIX", "DUPLICATE","WORKSFORME"], resolution => ["","FIXED","INVALID","WONTFIX", "DUPLICATE","WORKSFORME"],
}; };
......
...@@ -1223,7 +1223,7 @@ use constant ABSTRACT_SCHEMA => { ...@@ -1223,7 +1223,7 @@ use constant ABSTRACT_SCHEMA => {
defaultmilestone => {TYPE => 'varchar(20)', defaultmilestone => {TYPE => 'varchar(20)',
NOTNULL => 1, DEFAULT => "'---'"}, NOTNULL => 1, DEFAULT => "'---'"},
allows_unconfirmed => {TYPE => 'BOOLEAN', NOTNULL => 1, allows_unconfirmed => {TYPE => 'BOOLEAN', NOTNULL => 1,
DEFAULT => 'FALSE'}, DEFAULT => 'TRUE'},
], ],
INDEXES => [ INDEXES => [
products_name_idx => {FIELDS => ['name'], products_name_idx => {FIELDS => ['name'],
......
...@@ -37,6 +37,24 @@ use Bugzilla::User::Setting; ...@@ -37,6 +37,24 @@ use Bugzilla::User::Setting;
use Bugzilla::Util qw(get_text); use Bugzilla::Util qw(get_text);
use Bugzilla::Version; use Bugzilla::Version;
use constant STATUS_WORKFLOW => (
[undef, 'UNCONFIRMED'],
[undef, 'CONFIRMED'],
[undef, 'IN_PROGRESS'],
['UNCONFIRMED', 'CONFIRMED'],
['UNCONFIRMED', 'IN_PROGRESS'],
['UNCONFIRMED', 'RESOLVED'],
['CONFIRMED', 'IN_PROGRESS'],
['CONFIRMED', 'RESOLVED'],
['IN_PROGRESS', 'CONFIRMED'],
['IN_PROGRESS', 'RESOLVED'],
['RESOLVED', 'CONFIRMED'],
['RESOLVED', 'VERIFIED'],
['VERIFIED', 'CONFIRMED'],
# The RESOLVED/VERIFIED to UNCONFIRMED transition is enabled specially
# in the code for bugs that haven't been confirmed.
);
sub SETTINGS { sub SETTINGS {
return { return {
# 2005-03-03 travis@sedsystems.ca -- Bug 41972 # 2005-03-03 travis@sedsystems.ca -- Bug 41972
...@@ -232,6 +250,24 @@ sub create_default_product { ...@@ -232,6 +250,24 @@ sub create_default_product {
} }
sub init_workflow {
my $dbh = Bugzilla->dbh;
my $has_workflow = $dbh->selectrow_array('SELECT 1 FROM status_workflow');
return if $has_workflow;
print get_text('install_workflow_init'), "\n";
my %status_ids = @{ $dbh->selectcol_arrayref(
'SELECT value, id FROM bug_status', {Columns=>[1,2]}) };
foreach my $pair (STATUS_WORKFLOW) {
my $old_id = $pair->[0] ? $status_ids{$pair->[0]} : undef;
my $new_id = $status_ids{$pair->[1]};
$dbh->do('INSERT INTO status_workflow (old_status, new_status)
VALUES (?,?)', undef, $old_id, $new_id);
}
}
sub create_admin { sub create_admin {
my ($params) = @_; my ($params) = @_;
my $dbh = Bugzilla->dbh; my $dbh = Bugzilla->dbh;
......
...@@ -530,7 +530,7 @@ sub update_table_definitions { ...@@ -530,7 +530,7 @@ sub update_table_definitions {
_fix_uppercase_index_names(); _fix_uppercase_index_names();
# 2007-05-17 LpSolit@gmail.com - Bug 344965 # 2007-05-17 LpSolit@gmail.com - Bug 344965
_initialize_workflow($old_params); _initialize_workflow_for_upgrade($old_params);
# 2007-08-08 LpSolit@gmail.com - Bug 332149 # 2007-08-08 LpSolit@gmail.com - Bug 332149
$dbh->bz_add_column('groups', 'icon_url', {TYPE => 'TINYTEXT'}); $dbh->bz_add_column('groups', 'icon_url', {TYPE => 'TINYTEXT'});
...@@ -2919,10 +2919,12 @@ sub _fix_uppercase_index_names { ...@@ -2919,10 +2919,12 @@ sub _fix_uppercase_index_names {
} }
} }
sub _initialize_workflow { sub _initialize_workflow_for_upgrade {
my $old_params = shift; my $old_params = shift;
my $dbh = Bugzilla->dbh; my $dbh = Bugzilla->dbh;
my $had_is_open = $dbh->bz_column_info('bug_status', 'is_open');
$dbh->bz_add_column('bug_status', 'is_open', $dbh->bz_add_column('bug_status', 'is_open',
{TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'}); {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'});
...@@ -2955,6 +2957,10 @@ sub _initialize_workflow { ...@@ -2955,6 +2957,10 @@ sub _initialize_workflow {
join(', ', @closed_statuses) . ')'); join(', ', @closed_statuses) . ')');
} }
# We only populate the workflow here if we're upgrading from a version
# before 3.2.
return if $had_is_open;
# Populate the status_workflow table. We do nothing if the table already # Populate the status_workflow table. We do nothing if the table already
# has entries. If all bug status transitions have been deleted, the # has entries. If all bug status transitions have been deleted, the
# workflow will be restored to its default schema. # workflow will be restored to its default schema.
...@@ -2974,7 +2980,7 @@ sub _initialize_workflow { ...@@ -2974,7 +2980,7 @@ sub _initialize_workflow {
# confirmed bugs, so we use this parameter here. # confirmed bugs, so we use this parameter here.
my $reassign = $old_params->{'commentonreassign'} || 0; my $reassign = $old_params->{'commentonreassign'} || 0;
# This is the default workflow. # This is the default workflow for upgrading installations.
my @workflow = ([undef, 'UNCONFIRMED', $create], my @workflow = ([undef, 'UNCONFIRMED', $create],
[undef, 'NEW', $create], [undef, 'NEW', $create],
[undef, 'ASSIGNED', $create], [undef, 'ASSIGNED', $create],
......
...@@ -90,7 +90,7 @@ END ...@@ -90,7 +90,7 @@ END
# bug_status => { # bug_status => {
# # Translate "Handled" into "RESOLVED". # # Translate "Handled" into "RESOLVED".
# "Handled" => "RESOLVED", # "Handled" => "RESOLVED",
# "In Progress" => "ASSIGNED", # "In Progress" => "IN_PROGRESS",
# }, # },
# #
# priority => { # priority => {
......
...@@ -67,8 +67,8 @@ use constant VALUE_MAP => { ...@@ -67,8 +67,8 @@ use constant VALUE_MAP => {
'non-critical' => 'normal', 'non-critical' => 'normal',
}, },
bug_status => { bug_status => {
'open' => 'NEW', 'open' => 'CONFIRMED',
'analyzed' => 'ASSIGNED', 'analyzed' => 'IN_PROGRESS',
'suspended' => 'RESOLVED', 'suspended' => 'RESOLVED',
'feedback' => 'RESOLVED', 'feedback' => 'RESOLVED',
'released' => 'VERIFIED', 'released' => 'VERIFIED',
......
...@@ -273,8 +273,8 @@ sub _handle_status_and_resolution { ...@@ -273,8 +273,8 @@ sub _handle_status_and_resolution {
elsif ($words->[0] eq 'OPEN') { elsif ($words->[0] eq 'OPEN') {
shift @$words; shift @$words;
} }
elsif ($words->[0] =~ /^[A-Z]+(,[A-Z]+)*$/) { elsif ($words->[0] =~ /^[A-Z_]+(,[_A-Z]+)*$/) {
# e.g. NEW,ASSI,REOP,FIX # e.g. CON,IN_PR,FIX
undef %states; undef %states;
if (matchPrefixes(\%states, if (matchPrefixes(\%states,
\%resolutions, \%resolutions,
......
...@@ -241,7 +241,7 @@ Bugzilla::Status - Bug status class. ...@@ -241,7 +241,7 @@ Bugzilla::Status - Bug status class.
use Bugzilla::Status; use Bugzilla::Status;
my $bug_status = new Bugzilla::Status({name => 'ASSIGNED'}); my $bug_status = new Bugzilla::Status({ name => 'IN_PROGRESS' });
my $bug_status = new Bugzilla::Status(4); my $bug_status = new Bugzilla::Status(4);
my @closed_bug_statuses = closed_bug_statuses(); my @closed_bug_statuses = closed_bug_statuses();
......
...@@ -190,6 +190,7 @@ Bugzilla::Field::populate_field_definitions(); ...@@ -190,6 +190,7 @@ Bugzilla::Field::populate_field_definitions();
########################################################################### ###########################################################################
Bugzilla::Install::DB::update_table_definitions(\%old_params); Bugzilla::Install::DB::update_table_definitions(\%old_params);
Bugzilla::Install::init_workflow();
########################################################################### ###########################################################################
# Bugzilla uses --GROUPS-- to assign various rights to its users. # Bugzilla uses --GROUPS-- to assign various rights to its users.
......
...@@ -152,7 +152,7 @@ def ensure_defaults(data): ...@@ -152,7 +152,7 @@ def ensure_defaults(data):
if 'rep_platform' not in data: if 'rep_platform' not in data:
data['rep_platform'] = 'PC' data['rep_platform'] = 'PC'
if 'bug_status' not in data: if 'bug_status' not in data:
data['bug_status'] = 'NEW' data['bug_status'] = 'CONFIRMED'
if 'bug_severity' not in data: if 'bug_severity' not in data:
data['bug_severity'] = 'normal' data['bug_severity'] = 'normal'
if 'bug_file_loc' not in data: if 'bug_file_loc' not in data:
......
#!/usr/bin/perl -w
#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is Everything Solved, Inc.
# Portions created by the Initial Developer are Copyright (C) 2009 the
# Initial Developer. All Rights Reserved.
#
# Contributor(s):
# Max Kanat-Alexander <mkanat@bugzilla.org>
use strict;
use warnings;
use lib qw(. lib);
use Bugzilla;
use Bugzilla::Config qw(:admin);
use Bugzilla::Status;
my $confirmed = new Bugzilla::Status({ name => 'CONFIRMED' });
my $in_progress = new Bugzilla::Status({ name => 'IN_PROGRESS' });
if ($confirmed and $in_progress) {
print "You are already using the new workflow.\n";
exit 1;
}
print <<END;
WARNING: This will convert the status of all bugs using the following
system:
"NEW" will become "CONFIRMED"
"ASSIGNED" will become "IN_PROGRESS"
"REOPENED" will become "CONFIRMED" (and the "REOPENED" status will be removed)
"CLOSED" will become "VERIFIED" (and the "CLOSED" status will be removed)
This change will be immediate. The history of each bug will also be changed
so that it appears that these statuses were always in existence.
Emails will not be sent for the change.
To continue, press any key, or press Ctrl-C to stop this program...
END
getc;
my $dbh = Bugzilla->dbh;
my %translation = (
NEW => 'CONFIRMED',
ASSIGNED => 'IN_PROGRESS',
REOPENED => 'CONFIRMED',
CLOSED => 'VERIFIED',
);
my $status_field = Bugzilla::Field->check('bug_status');
$dbh->bz_start_transaction();
while (my ($from, $to) = each %translation) {
print "Converting $from to $to...\n";
$dbh->do('UPDATE bugs SET bug_status = ? WHERE bug_status = ?',
undef, $to, $from);
if (Bugzilla->params->{'duplicate_or_move_bug_status'} eq $from) {
SetParam('duplicate_or_move_bug_status', $to);
write_params();
}
foreach my $what (qw(added removed)) {
$dbh->do("UPDATE bugs_activity SET $what = ?
WHERE fieldid = ? AND $what = ?",
undef, $to, $status_field->id, $from);
}
# Delete any transitions where it now appears that
# a bug moved from a status to itself.
$dbh->do('DELETE FROM bugs_activity WHERE fieldid = ? AND added = removed',
undef, $status_field->id);
# If the new status already exists, just delete the old one, but retain
# the workflow items from it.
if (my $existing = new Bugzilla::Status({ name => $to })) {
$dbh->do('DELETE FROM bug_status WHERE value = ?', undef, $from);
}
# Otherwise, rename the old status to the new one.
else {
$dbh->do('UPDATE bug_status SET value = ? WHERE value = ?',
undef, $to, $from);
}
}
$dbh->bz_commit_transaction();
print <<END;
Done. There are some things you may want to fix, now:
* You may want to run ./collectstats.pl --regenerate to regenerate
data for the Old Charts system.
* You may have to fix the Status Workflow using the Status Workflow
panel in "Administration".
* You will probably want to update the "mybugstemplate" and "defaultquery"
parameters using the Parameters panel in "Administration". (Just
resetting them to the default will work.)
END
...@@ -28,7 +28,7 @@ if not mimetypes.types_map.has_key('.doc'): ...@@ -28,7 +28,7 @@ if not mimetypes.types_map.has_key('.doc'):
if not mimetypes.encodings_map.has_key('.bz2'): if not mimetypes.encodings_map.has_key('.bz2'):
mimetypes.encodings_map['.bz2'] = "bzip2" mimetypes.encodings_map['.bz2'] = "bzip2"
bug_status='NEW' bug_status='CONFIRMED'
component="default" component="default"
version="" version=""
product="" # this is required, the rest of these are defaulted as above product="" # this is required, the rest of these are defaulted as above
...@@ -265,8 +265,8 @@ def usage(): ...@@ -265,8 +265,8 @@ def usage():
Where OPTIONS are one or more of the following: Where OPTIONS are one or more of the following:
-h This help information. -h This help information.
-s STATUS One of UNCONFIRMED, NEW, ASSIGNED, REOPENED, RESOLVED, VERIFIED, CLOSED -s STATUS One of UNCONFIRMED, CONFIRMED, IN_PROGRESS, RESOLVED, VERIFIED
(default is NEW) (default is CONFIRMED)
-c COMPONENT The component to attach to each bug as it is important. This should be -c COMPONENT The component to attach to each bug as it is important. This should be
valid component for the Product. valid component for the Product.
-v VERSION Version to assign to these defects. -v VERSION Version to assign to these defects.
...@@ -285,7 +285,7 @@ def main(): ...@@ -285,7 +285,7 @@ def main():
for o,a in opts: for o,a in opts:
if o == "-s": if o == "-s":
if a in ('UNCONFIRMED','NEW','ASSIGNED','REOPENED','RESOLVED','VERIFIED','CLOSED'): if a in ('UNCONFIRMED','CONFIRMED','IN_PROGRESS','RESOLVED','VERIFIED'):
bug_status = a bug_status = a
elif o == '-c': elif o == '-c':
component = a component = a
......
...@@ -419,7 +419,7 @@ ...@@ -419,7 +419,7 @@
<dia:attribute name="text"> <dia:attribute name="text">
<dia:composite type="text"> <dia:composite type="text">
<dia:attribute name="string"> <dia:attribute name="string">
<dia:string>#NEW#</dia:string> <dia:string>#CONFIRMED#</dia:string>
</dia:attribute> </dia:attribute>
<dia:attribute name="font"> <dia:attribute name="font">
<dia:font family="sans" style="80" name="Helvetica"/> <dia:font family="sans" style="80" name="Helvetica"/>
...@@ -467,7 +467,7 @@ ...@@ -467,7 +467,7 @@
<dia:attribute name="text"> <dia:attribute name="text">
<dia:composite type="text"> <dia:composite type="text">
<dia:attribute name="string"> <dia:attribute name="string">
<dia:string>#ASSIGNED#</dia:string> <dia:string>#IN_PROGRESS#</dia:string>
</dia:attribute> </dia:attribute>
<dia:attribute name="font"> <dia:attribute name="font">
<dia:font family="sans" style="80" name="Helvetica"/> <dia:font family="sans" style="80" name="Helvetica"/>
......
...@@ -771,7 +771,7 @@ ...@@ -771,7 +771,7 @@
<listitem> <listitem>
<para> <para>
Set this to the number of days you want to let bugs go Set this to the number of days you want to let bugs go
in the NEW or REOPENED state before notifying people they have in the CONFIRMED state before notifying people they have
untouched new bugs. If you do not plan to use this feature, simply untouched new bugs. If you do not plan to use this feature, simply
do not set up the whining cron job described in the installation do not set up the whining cron job described in the installation
instructions, or set this value to "0" (never whine). instructions, or set this value to "0" (never whine).
...@@ -1239,7 +1239,7 @@ ...@@ -1239,7 +1239,7 @@
basis. The number of <quote>votes</quote> available to basis. The number of <quote>votes</quote> available to
users is set per-product, as is the number of votes users is set per-product, as is the number of votes
required to move a bug automatically from the UNCONFIRMED required to move a bug automatically from the UNCONFIRMED
status to the NEW status. status to the CONFIRMED status.
</para> </para>
<para> <para>
...@@ -2547,7 +2547,7 @@ ReadOnly: ENTRY, NA/NA, CANEDIT ...@@ -2547,7 +2547,7 @@ ReadOnly: ENTRY, NA/NA, CANEDIT
This allows developers to gauge This allows developers to gauge
user need for a particular enhancement or bugfix. By allowing bugs with user need for a particular enhancement or bugfix. By allowing bugs with
a certain number of votes to automatically move from "UNCONFIRMED" to a certain number of votes to automatically move from "UNCONFIRMED" to
"NEW", users of the bug system can help high-priority bugs garner "CONFIRMED", users of the bug system can help high-priority bugs garner
attention so they don't sit for a long time awaiting triage.</para> attention so they don't sit for a long time awaiting triage.</para>
<para>To modify Voting settings:</para> <para>To modify Voting settings:</para>
...@@ -2576,7 +2576,7 @@ ReadOnly: ENTRY, NA/NA, CANEDIT ...@@ -2576,7 +2576,7 @@ ReadOnly: ENTRY, NA/NA, CANEDIT
<para><emphasis>Number of votes a bug in this product needs to <para><emphasis>Number of votes a bug in this product needs to
automatically get out of the UNCONFIRMED state</emphasis>: automatically get out of the UNCONFIRMED state</emphasis>:
Setting this field to "0" disables the automatic move of Setting this field to "0" disables the automatic move of
bugs from UNCONFIRMED to NEW. bugs from UNCONFIRMED to CONFIRMED.
</para> </para>
</listitem> </listitem>
......
...@@ -1494,7 +1494,7 @@ c:\perl\bin\perl.exe -xc:\bugzilla -wT "%s" %s ...@@ -1494,7 +1494,7 @@ c:\perl\bin\perl.exe -xc:\bugzilla -wT "%s" %s
<para>What good are <para>What good are
bugs if they're not annoying? To help make them more so you bugs if they're not annoying? To help make them more so you
can set up Bugzilla's automatic whining system to complain at engineers can set up Bugzilla's automatic whining system to complain at engineers
which leave their bugs in the NEW or REOPENED state without triaging them. which leave their bugs in the CONFIRMED state without triaging them.
</para> </para>
<para> <para>
This can be done by adding the following command as a daily This can be done by adding the following command as a daily
......
...@@ -199,9 +199,6 @@ my $sth = $dbh->prepare( ...@@ -199,9 +199,6 @@ my $sth = $dbh->prepare(
foreach my $k (keys(%seen)) { foreach my $k (keys(%seen)) {
# Retrieve bug information from the database # Retrieve bug information from the database
my ($stat, $resolution, $summary) = $dbh->selectrow_array($sth, undef, $k); my ($stat, $resolution, $summary) = $dbh->selectrow_array($sth, undef, $k);
$stat ||= 'NEW';
$resolution ||= '';
$summary ||= '';
# Resolution and summary are shown only if user can see the bug # Resolution and summary are shown only if user can see the bug
if (!Bugzilla->user->can_see_bug($k)) { if (!Bugzilla->user->can_see_bug($k)) {
......
...@@ -23,6 +23,10 @@ ...@@ -23,6 +23,10 @@
desc = "Set up $terms.bug change policies" desc = "Set up $terms.bug change policies"
%] %]
[% PROCESS "global/field-descs.none.tmpl" %]
[% accept_status = display_value('bug_status', 'IN_PROGRESS') FILTER html %]
[% param_descs = { [% param_descs = {
duplicate_or_move_bug_status => "When $terms.abug is marked as a duplicate of another one " _ duplicate_or_move_bug_status => "When $terms.abug is marked as a duplicate of another one " _
"or is moved to another installation, use this $terms.bug status." "or is moved to another installation, use this $terms.bug status."
...@@ -37,8 +41,10 @@ ...@@ -37,8 +41,10 @@
"If off, then all $terms.bugs initially have the default " _ "If off, then all $terms.bugs initially have the default " _
"milestone for the product being filed in.", "milestone for the product being filed in.",
musthavemilestoneonaccept => "If you are using Target Milestone, do you want to require that " _ musthavemilestoneonaccept =>
"the milestone be set in order for a user to ACCEPT a ${terms.bug}?", "If you are using ${field_descs.target_milestone}, do you want to require"
_ " that the milestone be set in order for a user to set"
_ " ${terms.abug}'s status to ${accept_status}?",
commentonchange_resolution => "If this option is on, the user needs to enter a short " _ commentonchange_resolution => "If this option is on, the user needs to enter a short " _
"comment if the resolution of the $terms.bug changes.", "comment if the resolution of the $terms.bug changes.",
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
" $terms.Bugzilla and your SMTP server. You can use this to" _ " $terms.Bugzilla and your SMTP server. You can use this to" _
" troubleshoot email problems.", " troubleshoot email problems.",
whinedays => "The number of days that we'll let a $terms.bug sit untouched in a NEW " _ whinedays => "The number of days that we'll let a $terms.bug sit untouched in a CONFIRMED " _
"state before our cronjob will whine at the owner.<br> " _ "state before our cronjob will whine at the owner.<br> " _
"Set to 0 to disable whining.", "Set to 0 to disable whining.",
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
product.is_active = 1, product.is_active = 1,
version = "unspecified", version = "unspecified",
product.defaultmilestone = constants.DEFAULT_MILESTONE product.defaultmilestone = constants.DEFAULT_MILESTONE
product.allows_unconfirmed = 0 product.allows_unconfirmed = 1
%] %]
<form method="post" action="editproducts.cgi"> <form method="post" action="editproducts.cgi">
......
...@@ -30,9 +30,8 @@ You have one or more [% terms.bugs %] assigned to you in the [% terms.Bugzilla % ...@@ -30,9 +30,8 @@ You have one or more [% terms.bugs %] assigned to you in the [% terms.Bugzilla %
[% terms.bug %] tracking system ([% urlbase %]) that require [% terms.bug %] tracking system ([% urlbase %]) that require
attention. attention.
All of these [% terms.bugs %] are in the [% display_value("bug_status", "NEW") %] or All of these [% terms.bugs %] are in the [% display_value("bug_status", "CONFIRMED") %]
[%= display_value("bug_status", "REOPENED") %] state, and have not been state, and have not been touched in [% Param("whinedays") %] days or more.
touched in [% Param("whinedays") %] days or more.
You need to take a look at them, and decide on an initial action. You need to take a look at them, and decide on an initial action.
Generally, this means one of three things: Generally, this means one of three things:
...@@ -44,17 +43,17 @@ Generally, this means one of three things: ...@@ -44,17 +43,17 @@ Generally, this means one of three things:
sure that the Component field seems reasonable, and then use the sure that the Component field seems reasonable, and then use the
"Reset Assignee to default" option.) "Reset Assignee to default" option.)
(3) You decide the [% terms.bug %] belongs to you, but you can't solve it this moment. (3) You decide the [% terms.bug %] belongs to you, but you can't solve it this moment.
Accept the [% terms.bug %] by setting the status to [% display_value("bug_status", "ASSIGNED") %]. Accept the [% terms.bug %] by setting the status to [% display_value("bug_status", "IN_PROGRESS") %].
To get a list of all [% display_value("bug_status", "NEW") %]/[% display_value("bug_status", "REOPENED") %] [%+ terms.bugs %], you can use this URL (bookmark To get a list of all [% display_value("bug_status", "CONFIRMED") %] [%+ terms.bugs %], you can use this URL (bookmark
it if you like!): it if you like!):
[% urlbase %]buglist.cgi?bug_status=NEW&bug_status=REOPENED&assigned_to=[% email %] [% urlbase %]buglist.cgi?bug_status=CONFIRMED&assigned_to=[% email %]
Or, you can use the general query page, at Or, you can use the general query page, at
[%+ urlbase %]query.cgi [%+ urlbase %]query.cgi
Appended below are the individual URLs to get to all of your [% display_value("bug_status", "NEW") %] [%+ terms.bugs %] Appended below are the individual URLs to get to all of your [% display_value("bug_status", "CONFIRMED") %] [%+ terms.bugs %]
that haven't been touched for [% Param("whinedays") %] days or more. that haven't been touched for [% Param("whinedays") %] days or more.
You will get this message once a day until you've dealt with these [% terms.bugs %]! You will get this message once a day until you've dealt with these [% terms.bugs %]!
......
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
[% value_descs = { [% value_descs = {
"bug_status" => { "bug_status" => {
# "UNCONFIRMED" => "UNCO", # "UNCONFIRMED" => "UNCO",
# "NEW" => "NEWISH", # "CONFIRMED" => "ITSABUG",
}, },
"resolution" => { "resolution" => {
......
...@@ -719,6 +719,9 @@ ...@@ -719,6 +719,9 @@
Verify that the file permissions in your [% terms.Bugzilla %] directory are Verify that the file permissions in your [% terms.Bugzilla %] directory are
suitable for your system. Avoid unnecessary write access. suitable for your system. Avoid unnecessary write access.
[% ELSIF message_tag == "install_workflow_init" %]
Setting up the default status workflow...
[% ELSIF message_tag == "product_created" %] [% ELSIF message_tag == "product_created" %]
[% title = "Product Created" %] [% title = "Product Created" %]
The product <em>[% product.name FILTER html %]</em> has been created. You will need to The product <em>[% product.name FILTER html %]</em> has been created. You will need to
......
...@@ -82,7 +82,7 @@ END:VCALENDAR ...@@ -82,7 +82,7 @@ END:VCALENDAR
[% END %] [% END %]
[% END %] [% END %]
[% IF NOT status %] [% IF NOT status %]
[% IF bug_status == 'ASSIGNED' %] [% IF bug_status == 'IN_PROGRESS' || bug_status == 'ASSIGNED' %]
[% status = 'IN-PROGRESS' %] [% status = 'IN-PROGRESS' %]
[% ELSE %] [% ELSE %]
[% status = 'NEEDS-ACTION' %] [% status = 'NEEDS-ACTION' %]
......
...@@ -65,49 +65,33 @@ ...@@ -65,49 +65,33 @@
Nobody has confirmed that this [% terms.bug %] is valid. Users Nobody has confirmed that this [% terms.bug %] is valid. Users
who have the "canconfirm" permission set may confirm who have the "canconfirm" permission set may confirm
this [% terms.bug %], changing its state to this [% terms.bug %], changing its state to
<b>[% display_value("bug_status", "NEW") FILTER html %]</b>. <b>[% display_value("bug_status", "CONFIRMED") FILTER html %]</b>.
Or, it may be directly resolved and marked Or, it may be directly resolved and marked
<b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>. <b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>.
</dd> </dd>
<dt> <dt>
[% display_value("bug_status", "NEW") FILTER html %] [% display_value("bug_status", "CONFIRMED") FILTER html %]
</dt> </dt>
<dd> <dd>
This [% terms.bug %] is valid and has recently been filed. This [% terms.bug %] is valid and has recently been filed.
[%+ terms.Bugs %] in this state become [%+ terms.Bugs %] in this state become
<b>[% display_value("bug_status", "ASSIGNED") FILTER html %]</b> when <b>[% display_value("bug_status", "IN_PROGRESS") FILTER html %]</b>
somebody is working on them, or become resolved and marked when somebody is working on them, or become resolved and marked
<b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>. <b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>.
</dd> </dd>
<dt> <dt>
[% display_value("bug_status", "ASSIGNED") FILTER html %] [% display_value("bug_status", "IN_PROGRESS") FILTER html %]
</dt> </dt>
<dd> <dd>
This [% terms.bug %] is not yet resolved, but is assigned to the This [% terms.bug %] is not yet resolved, but is assigned to the
proper person who is working on the [% terms.bug %]. From here, proper person who is working on the [% terms.bug %]. From here,
[%+ terms.bugs %] can be given to another person and become [%+ terms.bugs %] can be given to another person and become
<b>[% display_value("bug_status", "NEW") FILTER html %]</b>, or <b>[% display_value("bug_status", "CONFIRMED") FILTER html %]</b>, or
resolved and become resolved and become
<b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>. <b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>.
</dd> </dd>
<dt>
[% display_value("bug_status", "REOPENED") FILTER html %]
</dt>
<dd>
This [% terms.bug %] was once resolved, but the resolution was
deemed incorrect. For example, a
<b>[% display_value("resolution", "WORKSFORME") FILTER html %]</b>
[%+ terms.bug %] is marked
<b>[% display_value("bug_status", "REOPENED") FILTER html %]</b> when
more information shows up and the [% terms.bug %] is now
reproducible. From here, [% terms.bugs %] are either marked
<b>[% display_value("bug_status", "ASSIGNED") FILTER html %]</b> or
<b>[% display_value("bug_status", "RESOLVED") FILTER html %]</b>.
</dd>
</dl>
</td> </td>
<td> <td>
...@@ -128,11 +112,9 @@ ...@@ -128,11 +112,9 @@
</dt> </dt>
<dd> <dd>
A resolution has been performed, and it is awaiting verification by A resolution has been performed, and it is awaiting verification by
QA. From here [% terms.bugs %] are either re-opened and become QA. From here [% terms.bugs %] are either reopened and given some
<b>[% display_value("bug_status", "REOPENED") FILTER html %]</b>, are open status, or are verified by QA and marked
marked <b>[% display_value("bug_status", "VERIFIED") FILTER html %]</b>, <b>[% display_value("bug_status", "VERIFIED") FILTER html %]</b>.
or are closed for good and marked
<b>[% display_value("bug_status", "CLOSED") FILTER html %]</b>.
</dd> </dd>
<dt> <dt>
...@@ -140,20 +122,8 @@ ...@@ -140,20 +122,8 @@
</dt> </dt>
<dd> <dd>
QA has looked at the [% terms.bug %] and the resolution and QA has looked at the [% terms.bug %] and the resolution and
agrees that the appropriate resolution has been taken. agrees that the appropriate resolution has been taken. This is
[%+ terms.Bugs %] remain in this state until the product they were the final staus for bugs.
reported against actually ships, at which point they become
<b>[% display_value("bug_status", "CLOSED") FILTER html %]</b>.
</dd>
<dt>
[% display_value("bug_status", "CLOSED") FILTER html %]
</dt>
<dd>
The [% terms.bug %] is considered dead, the resolution is correct.
Any zombie [% terms.bugs %] who choose to walk the earth again must
do so by becoming
<b>[% display_value("bug_status", "REOPENED") FILTER html %]</b>.
</dd> </dd>
</dl> </dl>
</td> </td>
......
...@@ -97,8 +97,8 @@ ...@@ -97,8 +97,8 @@
<p>You can specify any of these fields like <kbd>field:value</kbd> <p>You can specify any of these fields like <kbd>field:value</kbd>
in the search box, to search on them. You can also abbreviate in the search box, to search on them. You can also abbreviate
the field name, as long as your abbreviation matches only one field name. the field name, as long as your abbreviation matches only one field name.
So, for example, searching on <kbd>stat:NEW</kbd> will find all So, for example, searching on <kbd>stat:VERIFIED</kbd> will find all
[%+ terms.bugs %] in the <kbd>NEW</kbd> status. Some fields have [%+ terms.bugs %] in the <kbd>VERIFIED</kbd> status. Some fields have
multiple names, and you can use any of those names to search for them.</p> multiple names, and you can use any of those names to search for them.</p>
[% IF Bugzilla.active_custom_fields.size %] [% IF Bugzilla.active_custom_fields.size %]
......
...@@ -25,8 +25,10 @@ ...@@ -25,8 +25,10 @@
# This is a script suitable for running once a day from a cron job. It # This is a script suitable for running once a day from a cron job. It
# looks at all the bugs, and sends whiny mail to anyone who has a bug # looks at all the bugs, and sends whiny mail to anyone who has a bug
# assigned to them that has status NEW or REOPENED that has not been # assigned to them that has status CONFIRMED, NEW, or REOPENED that has not
# touched for more than the number of days specified in the whinedays param. # been touched for more than the number of days specified in the whinedays
# param. (We have NEW and REOPENED in there to keep compatibility with old
# Bugzillas.)
use strict; use strict;
use lib qw(. lib); use lib qw(. lib);
...@@ -44,7 +46,7 @@ my $query = q{SELECT bug_id, short_desc, login_name ...@@ -44,7 +46,7 @@ my $query = q{SELECT bug_id, short_desc, login_name
FROM bugs FROM bugs
INNER JOIN profiles INNER JOIN profiles
ON userid = assigned_to ON userid = assigned_to
WHERE (bug_status = ? OR bug_status = ?) WHERE bug_status IN (?,?,?)
AND disable_mail = 0 AND disable_mail = 0
AND } . $dbh->sql_to_days('NOW()') . " - " . AND } . $dbh->sql_to_days('NOW()') . " - " .
$dbh->sql_to_days('delta_ts') . " > " . $dbh->sql_to_days('delta_ts') . " > " .
...@@ -54,7 +56,8 @@ my $query = q{SELECT bug_id, short_desc, login_name ...@@ -54,7 +56,8 @@ my $query = q{SELECT bug_id, short_desc, login_name
my %bugs; my %bugs;
my %desc; my %desc;
my $slt_bugs = $dbh->selectall_arrayref($query, undef, 'NEW', 'REOPENED'); my $slt_bugs = $dbh->selectall_arrayref($query, undef, 'CONFIRMED', 'NEW',
'REOPENED');
foreach my $bug (@$slt_bugs) { foreach my $bug (@$slt_bugs) {
my ($id, $desc, $email) = @$bug; my ($id, $desc, $email) = @$bug;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment