my %deps_in = (dependson => $depends_on || '', blocked => $blocks || '');
foreach my $type qw(dependson blocked) {
- my @bug_ids = split(/[\s,]+/, $deps_in{$type});
+ my @bug_ids = ref($deps_in{$type})
+ ? @{$deps_in{$type}}
+ : split(/[\s,]+/, $deps_in{$type});
# Eliminate nulls.
@bug_ids = grep {$_} @bug_ids;
# We do this up here to make sure all aliases are converted to IDs.
$first_bug->set_dependencies(scalar $cgi->param('dependson'),
scalar $cgi->param('blocked'));
}
-# Right now, you can't modify dependencies on a mass change.
-else {
- $cgi->delete('dependson');
- $cgi->delete('blocked');
+elsif (should_set('dependson') || should_set('blocked')) {
+ foreach my $bug (@bug_objects) {
+ my %temp_deps;
+ foreach my $type (qw(dependson blocked)) {
+ $temp_deps{$type} = { map { $_ => 1 } @{$bug->$type} };
+ if (should_set($type) && $cgi->param($type . '_action') =~ /^(add|remove)$/) {
+ foreach my $id (split(/[,\s]+/, $cgi->param($type))) {
+ if ($cgi->param($type . '_action') eq 'remove') {
+ delete $temp_deps{$type}{$id};
+ }
+ else {
+ $temp_deps{$type}{$id} = 1;
+ }
+ }
+ }
+ }
+ $bug->set_dependencies([ keys %{$temp_deps{'dependson'}} ], [ keys %{$temp_deps{'blocked'}} ]);
+ }
}
my $any_keyword_changes;
</tr>
[% END %]
+ <tr>
+ <th>
+ <label for="dependson">
+ Depends On:
+ </label>
+ </th>
+ <td colspan="3">
+ <input id="dependson" name="dependson" size="32">
+ <select name="dependson_action">
+ <option value="add">Add these IDs</option>
+ <option value="remove">Delete these IDs</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <th>
+ <label for="blocked">
+ Blocks:
+ </label>
+ </th>
+ <td colspan="3">
+ <input id="blocked" name="blocked" size="32">
+ <select name="blocked_action">
+ <option value="add">Add these IDs</option>
+ <option value="remove">Delete these IDs</option>
+ </select>
+ </td>
+ </tr>
+
[% IF Param('usestatuswhiteboard') %]
<tr>
<td align="right">