diff options
author | dkl%redhat.com <> | 2009-01-04 05:38:35 +0100 |
---|---|---|
committer | dkl%redhat.com <> | 2009-01-04 05:38:35 +0100 |
commit | 43f03aa4fb7fce809332f05e6d973430a515f960 (patch) | |
tree | 57ab7c995eb739478e53e918cdf6077a23329006 | |
parent | dd52ea1b9baad23990c47a3186933e63b0cc01bb (diff) | |
download | bugzilla-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.pm | 4 | ||||
-rwxr-xr-x | process_bug.cgi | 22 | ||||
-rw-r--r-- | template/en/default/list/edit-multiple.html.tmpl | 30 |
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"> |