From 7df590fa40af15df14183375f7fb18b7ff2e6969 Mon Sep 17 00:00:00 2001 From: Max Kanat-Alexander Date: Mon, 24 May 2010 12:58:53 -0700 Subject: Bug 556901: Move the code for setting status, resolution, and dup_id from process_bug.cgi into Bugzilla::Bug::set_all --- Bugzilla/Bug.pm | 29 +++++++++++++++++++++++++++++ process_bug.cgi | 32 +++----------------------------- 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index 6f0563465..f0fc46f55 100644 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -1886,6 +1886,8 @@ sub _set_global_validator { # "Set" Methods # ################# +# Note that if you are changing multiple bugs at once, you must pass +# other_bugs to set_all in order for it to behave properly. sub set_all { my $self = shift; my ($params) = @_; @@ -1946,6 +1948,8 @@ sub set_all { my %normal_set_all; foreach my $name (keys %$params) { + # These are handled separately below. + next if grep($_ eq $name, qw(status resolution dup_id)); if ($self->can("set_$name")) { $normal_set_all{$name} = $params->{$name}; } @@ -1975,6 +1979,31 @@ sub set_all { # do that here, because if they *did* change the assignee, qa, or CC, # then we don't want to check the original ones, only the new ones. $self->_check_strict_isolation() if $product_changed; + + # You cannot mark bugs as duplicates when changing several bugs at once + # (because currently there is no way to check for duplicate loops in that + # situation). + if (exists $params->{'dup_id'} and $params->{other_bugs} + and scalar @{ $params->{other_bugs} } > 1) + { + ThrowUserError('dupe_not_allowed'); + } + + # Seting the status, resolution, and dupe_of has to be done + # down here, because the validity of status changes depends on + # other fields, such as Target Milestone. + if (exists $params->{'status'}) { + $self->set_status($params->{'status'}, + { resolution => $params->{'resolution'}, + dupe_of => $params->{'dup_id'} }); + } + elsif (exists $params->{'resolution'}) { + $self->set_resolution($params->{'resolution'}, + { dupe_of => $params->{'dup_id'} }); + } + elsif (exists $params->{'dup_id'}) { + $self->set_dup_id($params->{'dup_id'}); + } } # Helper for set_all that helps with fields that have an "add/remove" diff --git a/process_bug.cgi b/process_bug.cgi index 3c67f15c9..e71c7ef4d 100755 --- a/process_bug.cgi +++ b/process_bug.cgi @@ -249,7 +249,8 @@ my @set_fields = qw(op_sys rep_platform priority bug_severity work_time set_default_assignee set_default_qa_contact keywords keywordaction cclist_accessible reporter_accessible - product confirm_product_change); + product confirm_product_change + bug_status resolution dup_id); push(@set_fields, 'assigned_to') if !$cgi->param('set_default_assignee'); push(@set_fields, 'qa_contact') if !$cgi->param('set_default_qa_contact'); my %field_translation = ( @@ -261,6 +262,7 @@ my %field_translation = ( set_default_qa_contact => 'reset_qa_contact', keywordaction => 'keywords_action', confirm_product_change => 'product_change_confirmed', + bug_status => 'status', ); my %set_all_fields = ( other_bugs => \@bug_objects ); @@ -454,34 +456,6 @@ if ($move_action eq Bugzilla->params->{'move-button-text'}) { exit; } - -# You cannot mark bugs as duplicates when changing several bugs at once -# (because currently there is no way to check for duplicate loops in that -# situation). -if (!$cgi->param('id') && $cgi->param('dup_id')) { - ThrowUserError('dupe_not_allowed'); -} - -# Set the status, resolution, and dupe_of (if needed). This has to be done -# down here, because the validity of status changes depends on other fields, -# such as Target Milestone. -foreach my $b (@bug_objects) { - if (should_set('bug_status')) { - $b->set_status( - scalar $cgi->param('bug_status'), - {resolution => scalar $cgi->param('resolution'), - dupe_of => scalar $cgi->param('dup_id')} - ); - } - elsif (should_set('resolution')) { - $b->set_resolution(scalar $cgi->param('resolution'), - {dupe_of => scalar $cgi->param('dup_id')}); - } - elsif (should_set('dup_id')) { - $b->set_dup_id(scalar $cgi->param('dup_id')); - } -} - ############################## # Do Actual Database Updates # ############################## -- cgit v1.2.3-24-g4f1b