# 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 {
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) = @_;
}
}
-# 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);
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'),