]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 556901: Move the code for setting status, resolution, and dup_id
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Mon, 24 May 2010 19:58:53 +0000 (12:58 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Mon, 24 May 2010 19:58:53 +0000 (12:58 -0700)
from process_bug.cgi into Bugzilla::Bug::set_all

Bugzilla/Bug.pm
process_bug.cgi

index 6f0563465e28da4293e0158dcb9562962410dcd4..f0fc46f5568ed979da8d80cda212f42f20525b65 100644 (file)
@@ -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"
index 3c67f15c905737a12e7f169a67755fd6f2f83962..e71c7ef4d1c4a9d3506acabbd810e8ad5f2f266e 100755 (executable)
@@ -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 #
 ##############################