]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 556403: Move adding/removing of CCs from process_bug.cgi into
authorMax Kanat-Alexander <mkanat@bugzilla.org>
Sun, 23 May 2010 05:11:23 +0000 (22:11 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Sun, 23 May 2010 05:11:23 +0000 (22:11 -0700)
Bugzilla::Bug::set_all

Bugzilla/Bug.pm
process_bug.cgi

index c1f4dc12f899bea20063092f7bb1e06305c740d3..939829cc5f0a9fae8d58406b2a179a8ee100d5b4 100644 (file)
@@ -1892,12 +1892,7 @@ sub set_all {
 
     # strict_isolation checks mean that we should set the groups
     # immediately after changing the product.
-    foreach my $group (@{ $params->{groups}->{add} || [] }) {
-        $self->add_group($group);
-    }
-    foreach my $group (@{ $params->{groups}->{remove} || [] }) {
-        $self->remove_group($group);
-    }
+    $self->_add_remove($params, 'groups');
 
     if (exists $params->{'dependson'} or exists $params->{'blocked'}) {
         my %set_deps;
@@ -1953,12 +1948,7 @@ sub set_all {
     $self->reset_assigned_to if $params->{'reset_assigned_to'};
     $self->reset_qa_contact  if $params->{'reset_qa_contact'};
 
-    foreach my $url (@{ $params->{see_also}->{add} || [] }) {
-        $self->add_see_also($url);
-    }
-    foreach my $url (@{ $params->{see_also}->{remove} || [] }) {
-        $self->remove_see_also($url);
-    }
+    $self->_add_remove($params, 'see_also');
 
     # And set custom fields.
     my @custom_fields = Bugzilla->active_custom_fields;
@@ -1968,6 +1958,21 @@ sub set_all {
             $self->set_custom_field($field, $params->{$fname});
         }
     }
+
+    $self->_add_remove($params, 'cc');
+}
+
+# Helper for set_all that helps with fields that have an "add/remove"
+# pattern instead of a "set_" pattern.
+sub _add_remove {
+    my ($self, $params, $name) = @_;
+    my @add    = @{ $params->{$name}->{add}    || [] };
+    my @remove = @{ $params->{$name}->{remove} || [] };
+    $name =~ s/s$//;
+    my $add_method = "add_$name";
+    my $remove_method = "remove_$name";
+    $self->$add_method($_) foreach @add;
+    $self->$remove_method($_) foreach @remove;
 }
 
 sub set_alias { $_[0]->set('alias', $_[1]); }
index 3330a680306851ff917bb76afbcf4144ed55e451..d2ba976a8a75718d93ecc6ad813fecc8a1220ab6 100755 (executable)
@@ -309,6 +309,38 @@ foreach my $dep_field (qw(dependson blocked)) {
         }
     }
 }
+# Formulate the CC data into two arrays of users involved in this CC change.
+my (@cc_add, @cc_remove);
+if (defined $cgi->param('newcc')
+    or defined $cgi->param('addselfcc')
+    or defined $cgi->param('removecc')
+    or defined $cgi->param('masscc')) 
+{
+
+    # If masscc is defined, then we came from buglist and need to either add or
+    # remove cc's... otherwise, we came from show_bug and may need to do both.
+    my ($cc_add, $cc_remove) = "";
+    if (defined $cgi->param('masscc')) {
+        if ($cgi->param('ccaction') eq 'add') {
+            $cc_add = $cgi->param('masscc');
+        } elsif ($cgi->param('ccaction') eq 'remove') {
+            $cc_remove = $cgi->param('masscc');
+        }
+    } else {
+        $cc_add = $cgi->param('newcc');
+        # We came from bug_form which uses a select box to determine what cc's
+        # need to be removed...
+        if ($cgi->param('removecc') && $cgi->param('cc')) {
+            $cc_remove = join(",", $cgi->param('cc'));
+        }
+    }
+
+    push(@cc_add, split(/[\s,]+/, $cc_add)) if $cc_add;
+    push(@cc_add, Bugzilla->user) if $cgi->param('addselfcc');
+
+    push(@cc_remove, split(/[\s,]+/, $cc_remove)) if $cc_remove;
+}
+$set_all_fields{cc} = { add => \@cc_add, remove => \@cc_remove };
 
 # Fields that can only be set on one bug at a time.
 if (defined $cgi->param('id')) {
@@ -370,43 +402,7 @@ if (defined $cgi->param('id')) {
     $first_bug->set_flags($flags, $new_flags);
 }
 
-# We need to check the addresses involved in a CC change before we touch 
-# any bugs. What we'll do here is formulate the CC data into two arrays of
-# users involved in this CC change.  Then those arrays can be used later 
-# on for the actual change.
-my (@cc_add, @cc_remove);
-if (defined $cgi->param('newcc')
-    || defined $cgi->param('addselfcc')
-    || defined $cgi->param('removecc')
-    || defined $cgi->param('masscc')) {
-        
-    # If masscc is defined, then we came from buglist and need to either add or
-    # remove cc's... otherwise, we came from bugform and may need to do both.
-    my ($cc_add, $cc_remove) = "";
-    if (defined $cgi->param('masscc')) {
-        if ($cgi->param('ccaction') eq 'add') {
-            $cc_add = join(' ',$cgi->param('masscc'));
-        } elsif ($cgi->param('ccaction') eq 'remove') {
-            $cc_remove = join(' ',$cgi->param('masscc'));
-        }
-    } else {
-        $cc_add = join(' ',$cgi->param('newcc'));
-        # We came from bug_form which uses a select box to determine what cc's
-        # need to be removed...
-        if (defined $cgi->param('removecc') && $cgi->param('cc')) {
-            $cc_remove = join (",", $cgi->param('cc'));
-        }
-    }
-
-    push(@cc_add, split(/[\s,]+/, $cc_add)) if $cc_add;
-    push(@cc_add, Bugzilla->user) if $cgi->param('addselfcc');
-
-    push(@cc_remove, split(/[\s,]+/, $cc_remove)) if $cc_remove;
-}
-
 foreach my $b (@bug_objects) {
-    $b->remove_cc($_) foreach @cc_remove;
-    $b->add_cc($_) foreach @cc_add;
     # Theoretically you could move a product without ever specifying
     # a new assignee or qa_contact, or adding/removing any CCs. So,
     # we have to check that the current assignee, qa, and CCs are still