summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordkl%redhat.com <>2009-01-04 05:38:35 +0100
committerdkl%redhat.com <>2009-01-04 05:38:35 +0100
commit43f03aa4fb7fce809332f05e6d973430a515f960 (patch)
tree57ab7c995eb739478e53e918cdf6077a23329006
parentdd52ea1b9baad23990c47a3186933e63b0cc01bb (diff)
downloadbugzilla-43f03aa4fb7fce809332f05e6d973430a515f960.tar.gz
bugzilla-43f03aa4fb7fce809332f05e6d973430a515f960.tar.xz
Bug 99205: Allow mass-editing of dependencies
Patch by Dave Lawrence <dkl@redhat.com> - r/a=mkanat
-rw-r--r--Bugzilla/Bug.pm4
-rwxr-xr-xprocess_bug.cgi22
-rw-r--r--template/en/default/list/edit-multiple.html.tmpl30
3 files changed, 51 insertions, 5 deletions
diff --git a/Bugzilla/Bug.pm b/Bugzilla/Bug.pm
index 6399e34a4..cfc01ba7b 100644
--- a/Bugzilla/Bug.pm
+++ b/Bugzilla/Bug.pm
@@ -1156,7 +1156,9 @@ sub _check_dependencies {
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.
diff --git a/process_bug.cgi b/process_bug.cgi
index bea5d1a7b..c64594bd9 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -271,10 +271,24 @@ if ($cgi->param('id') && (defined $cgi->param('dependson')
$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;
diff --git a/template/en/default/list/edit-multiple.html.tmpl b/template/en/default/list/edit-multiple.html.tmpl
index 9fa5a1088..6a62a80dc 100644
--- a/template/en/default/list/edit-multiple.html.tmpl
+++ b/template/en/default/list/edit-multiple.html.tmpl
@@ -229,6 +229,36 @@
</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">