From 2cdcaa08031424c393878bed91f81fc92e4328a4 Mon Sep 17 00:00:00 2001 From: Max Kanat-Alexander Date: Sun, 16 May 2010 15:25:53 -0700 Subject: Bug 556167: Move the setting of dependson/blocked from process_bug.cgi into Bugzilla::Bug::set_all r=dkl, a=mkanat --- Bugzilla/Bug.pm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'Bugzilla') diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm index ee53a0aae..26e71c4f8 100644 --- a/Bugzilla/Bug.pm +++ b/Bugzilla/Bug.pm @@ -1854,6 +1854,36 @@ sub set_all { my $self = shift; my ($params) = @_; + if (exists $params->{'dependson'} or exists $params->{'blocked'}) { + my %set_deps; + foreach my $name (qw(dependson blocked)) { + my @dep_ids = @{ $self->$name }; + # If only one of the two fields was passed in, then we need to + # retain the current value for the other one. + if (!exists $params->{$name}) { + $set_deps{$name} = \@dep_ids; + next; + } + + # Explicitly setting them to a particular value overrides + # add/remove. + if (exists $params->{$name}->{set}) { + $set_deps{$name} = $params->{$name}->{set}; + next; + } + + foreach my $add (@{ $params->{$name}->{add} || [] }) { + push(@dep_ids, $add) if !grep($_ == $add, @dep_ids); + } + foreach my $remove (@{ $params->{$name}->{remove} || [] }) { + @dep_ids = grep($_ != $remove, @dep_ids); + } + $set_deps{$name} = \@dep_ids; + } + + $self->set_dependencies($set_deps{'dependson'}, $set_deps{'blocked'}); + } + if (exists $params->{'keywords'}) { $self->modify_keywords($params->{'keywords'}, $params->{'keywords_action'}); -- cgit v1.2.3-24-g4f1b