Bug 348537: Move bug status validation out of post_bug and into Bugzilla::Bug
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=bkor, a=myk git-svn-id: svn://10.0.0.236/trunk@208020 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -102,6 +102,14 @@ use constant MAX_LINE_LENGTH => 254;
|
||||
# Used in ValidateComment(). Gives the max length allowed for a comment.
|
||||
use constant MAX_COMMENT_LENGTH => 65535;
|
||||
|
||||
# The statuses that are valid on enter_bug.cgi and post_bug.cgi.
|
||||
# The order is important--see _check_bug_status
|
||||
use constant VALID_ENTRY_STATUS => qw(
|
||||
UNCONFIRMED
|
||||
NEW
|
||||
ASSIGNED
|
||||
);
|
||||
|
||||
#####################################################################
|
||||
|
||||
sub new {
|
||||
@@ -253,6 +261,33 @@ sub _check_bug_file_loc {
|
||||
return $url;
|
||||
}
|
||||
|
||||
sub _check_bug_status {
|
||||
my ($status, $product) = @_;
|
||||
my $user = Bugzilla->user;
|
||||
|
||||
my @valid_statuses = VALID_ENTRY_STATUS;
|
||||
|
||||
if ($user->in_group('editbugs') || $user->in_group('canconfirm')) {
|
||||
# Default to NEW if the user with privs hasn't selected another status.
|
||||
$status ||= 'NEW';
|
||||
}
|
||||
elsif (!$product->votes_to_confirm) {
|
||||
# Without privs, products that don't support UNCONFIRMED default to
|
||||
# NEW.
|
||||
$status = 'NEW';
|
||||
}
|
||||
else {
|
||||
$status = 'UNCONFIRMED';
|
||||
}
|
||||
|
||||
# UNCONFIRMED becomes an invalid status if votes_to_confirm is 0,
|
||||
# even if you are in editbugs.
|
||||
shift @valid_statuses if !$product->votes_to_confirm;
|
||||
|
||||
check_field('bug_status', $status, \@valid_statuses);
|
||||
return $status;
|
||||
}
|
||||
|
||||
sub _check_comment {
|
||||
my ($comment) = @_;
|
||||
|
||||
|
||||
@@ -184,23 +184,8 @@ if (Bugzilla->params->{"useqacontact"}) {
|
||||
}
|
||||
}
|
||||
|
||||
# Check the bug status.
|
||||
# This order is important, see below.
|
||||
my @valid_statuses = ('UNCONFIRMED', 'NEW', 'ASSIGNED');
|
||||
|
||||
my $bug_status = 'UNCONFIRMED';
|
||||
if ($user->in_group('editbugs') || $user->in_group('canconfirm')) {
|
||||
# Default to NEW if the user with privs hasn't selected another status.
|
||||
$bug_status = scalar($cgi->param('bug_status')) || 'NEW';
|
||||
}
|
||||
elsif (!$product->votes_to_confirm) {
|
||||
$bug_status = 'NEW';
|
||||
}
|
||||
$cgi->param(-name => 'bug_status', -value => $bug_status);
|
||||
|
||||
# Reject 'UNCONFIRMED' as a valid status if the product
|
||||
# doesn't require votes to confirm its bugs.
|
||||
shift @valid_statuses if !$product->votes_to_confirm;
|
||||
$cgi->param('bug_status', Bugzilla::Bug::_check_bug_status(
|
||||
scalar $cgi->param('bug_status'), $product));
|
||||
|
||||
if (!defined $cgi->param('target_milestone')) {
|
||||
$cgi->param(-name => 'target_milestone', -value => $product->default_milestone);
|
||||
@@ -215,7 +200,6 @@ check_field('rep_platform', scalar $cgi->param('rep_platform'));
|
||||
check_field('bug_severity', scalar $cgi->param('bug_severity'));
|
||||
check_field('priority', scalar $cgi->param('priority'));
|
||||
check_field('op_sys', scalar $cgi->param('op_sys'));
|
||||
check_field('bug_status', scalar $cgi->param('bug_status'), \@valid_statuses);
|
||||
check_field('version', scalar $cgi->param('version'),
|
||||
[map($_->name, @{$product->versions})]);
|
||||
check_field('target_milestone', scalar $cgi->param('target_milestone'),
|
||||
|
||||
Reference in New Issue
Block a user