diff options
author | mkanat%bugzilla.org <> | 2006-08-22 03:48:41 +0200 |
---|---|---|
committer | mkanat%bugzilla.org <> | 2006-08-22 03:48:41 +0200 |
commit | 3f5c73cce7d1cc1b4e7323013a690d2eab225c1a (patch) | |
tree | ccebf0e1330533c8dfb4f3842ead771685bf006e | |
parent | dc9ce3a8bc08c8f7c35b926bfaf7cfdd007c6380 (diff) | |
download | bugzilla-3f5c73cce7d1cc1b4e7323013a690d2eab225c1a.tar.gz bugzilla-3f5c73cce7d1cc1b4e7323013a690d2eab225c1a.tar.xz |
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
-rwxr-xr-x | Bugzilla/Bug.pm | 35 | ||||
-rwxr-xr-x | post_bug.cgi | 20 |
2 files changed, 37 insertions, 18 deletions
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 08677967a..3e65ab9b3 100755 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -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) = @_; diff --git a/post_bug.cgi b/post_bug.cgi index 7ceeffc3a..bef248836 100755 --- a/post_bug.cgi +++ b/post_bug.cgi @@ -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'), |