]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 348537: Move bug status validation out of post_bug and into Bugzilla::Bug
authormkanat%bugzilla.org <>
Tue, 22 Aug 2006 01:48:41 +0000 (01:48 +0000)
committermkanat%bugzilla.org <>
Tue, 22 Aug 2006 01:48:41 +0000 (01:48 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=bkor, a=myk

Bugzilla/Bug.pm
post_bug.cgi

index 08677967a64b6d85d845550bf5b25bcfe8599367..3e65ab9b3880e21e09c54826adcc6d3e9cfc7639 100755 (executable)
@@ -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) = @_;
 
index 7ceeffc3a01bd28e4783b4fd7fa71a5b7aa7acf5..bef248836dc2be953a1bf33e6d2fb85ff48bdb80 100755 (executable)
@@ -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'),