diff options
-rwxr-xr-x | editusers.cgi | 46 | ||||
-rw-r--r-- | template/en/default/admin/users/confirm-delete.html.tmpl | 40 | ||||
-rw-r--r-- | template/en/default/filterexceptions.pl | 3 |
3 files changed, 68 insertions, 21 deletions
diff --git a/editusers.cgi b/editusers.cgi index e3851ab61..9da66424d 100755 --- a/editusers.cgi +++ b/editusers.cgi @@ -404,14 +404,14 @@ if ($action eq 'search') { $vars->{'editcomponents'} = UserInGroup('editcomponents'); # Find other cross references. - $vars->{'bugs'} = $dbh->selectrow_array( + $vars->{'assignee_or_qa'} = $dbh->selectrow_array( qq{SELECT COUNT(*) FROM bugs - WHERE assigned_to = ? OR - qa_contact = ? OR - reporter = ? - }, - undef, ($otherUserID, $otherUserID, $otherUserID)); + WHERE assigned_to = ? OR qa_contact = ?}, + undef, ($otherUserID, $otherUserID)); + $vars->{'reporter'} = $dbh->selectrow_array( + 'SELECT COUNT(*) FROM bugs WHERE reporter = ?', + undef, $otherUserID); $vars->{'cc'} = $dbh->selectrow_array( 'SELECT COUNT(*) FROM cc WHERE who = ?', undef, $otherUserID); @@ -487,7 +487,8 @@ if ($action eq 'search') { 'series_data WRITE', 'whine_schedules WRITE', 'whine_queries WRITE', - 'whine_events WRITE'); + 'whine_events WRITE', + 'bugs WRITE'); Param('allowuserdeletion') || ThrowUserError('users_deletion_disabled'); @@ -565,6 +566,37 @@ if ($action eq 'search') { $sth_deleteWhineEvent->execute($id); } + # 3) Bugs + # 3.1) fall back to the default assignee + my $buglist = $dbh->selectall_arrayref( + 'SELECT bug_id, initialowner + FROM bugs + INNER JOIN components ON components.id = bugs.component_id + WHERE assigned_to = ?', undef, $otherUserID); + + my $sth_updateAssignee = $dbh->prepare( + 'UPDATE bugs SET assigned_to = ? WHERE bug_id = ?'); + + foreach my $bug (@$buglist) { + my ($bug_id, $default_assignee) = @$bug; + $sth_updateAssignee->execute($default_assignee, $bug_id); + } + + # 3.2) fall back to the default QA contact + $buglist = $dbh->selectall_arrayref( + 'SELECT bug_id, initialqacontact + FROM bugs + INNER JOIN components ON components.id = bugs.component_id + WHERE qa_contact = ?', undef, $otherUserID); + + my $sth_updateQAcontact = $dbh->prepare( + 'UPDATE bugs SET qa_contact = ? WHERE bug_id = ?'); + + foreach my $bug (@$buglist) { + my ($bug_id, $default_qa_contact) = @$bug; + $sth_updateQAcontact->execute($default_qa_contact, $bug_id); + } + # Finally, remove the user account itself. $dbh->do('DELETE FROM profiles WHERE userid = ?', undef, $otherUserID); diff --git a/template/en/default/admin/users/confirm-delete.html.tmpl b/template/en/default/admin/users/confirm-delete.html.tmpl index 205f96b15..e8bfe8609 100644 --- a/template/en/default/admin/users/confirm-delete.html.tmpl +++ b/template/en/default/admin/users/confirm-delete.html.tmpl @@ -21,7 +21,9 @@ # editusers: is viewing user member of editusers? # editcomponents: is viewing user member of editcomponents? # otheruser: Bugzilla::User object of the viewed user. - # bugs: number of bugs the viewed user has a role in + # reporter: number of bugs reported by the user + # assignee_or_qa: number of bugs the user is either the assignee + # or the QA contact # bug_activity: number of bugs the viewed user has activity # entries on # cc number of bugs the viewed user is cc list member @@ -129,24 +131,22 @@ <h2>Confirmation</h2> - [% IF bugs || bug_activity || cc || flags.requestee || flags.setter || - longdescs || namedqueries || profiles_activity || series || votes || - watch.watched || watch.watcher || whine_events || whine_schedules %] + [% IF reporter || assignee_or_qa || bug_activity || cc || flags.requestee || + flags.setter || longdescs || namedqueries || profiles_activity || series || + votes || watch.watched || watch.watcher || whine_events || whine_schedules %] <ul class="warningmessages"> - [% IF bugs %] + [% IF reporter %] <li> [% otheruser.login FILTER html %] - <a href="buglist.cgi?emailassigned_to1=1&emailreporter1=1&emailqa_contact1=1&emailtype1=exact&email1=[% otheruser.login FILTER url_quote %]">is - related to - [% IF bugs == 1 %] - [%+ terms.abug %] + <a href="buglist.cgi?emailreporter1=1&emailtype1=exact&email1=[% otheruser.login FILTER url_quote %]">has reported + [% IF reporter == 1 %] + one [% terms.bug %] [% ELSE %] - [%+ bugs %] [%+ terms.bugs %] - [% END %]</a>, by having reported, being assigned to or being - the QA contact. + [%+ reporter %] [%+ terms.bugs %] + [% END %]</a>. If you delete the user account, the [% terms.bugs %] table in the database will be inconsistent, resulting in - [% IF bugs == 1 %] + [% IF reporter == 1 %] this [% terms.bug %] [% ELSE %] these [% terms.bugs %] @@ -154,6 +154,20 @@ not appearing in [% terms.bug %] lists any more. </li> [% END %] + [% IF assignee_or_qa %] + <li> + [% otheruser.login FILTER html %] + <a href="buglist.cgi?emailassigned_to1=1&emailqa_contact1=1&emailtype1=exact&email1=[% otheruser.login FILTER url_quote %]">is + the assignee or the QA contact of + [% IF assignee_or_qa == 1 %] + one [% terms.bug %] + [% ELSE %] + [%+ assignee_or_qa %] [%+ terms.bugs %] + [% END %]</a>. + If you delete the user account, these roles will fall back to + the default assignee or default QA contact. + </li> + [% END %] [% IF bugs_activity %] <li> [% otheruser.login FILTER html %] has made diff --git a/template/en/default/filterexceptions.pl b/template/en/default/filterexceptions.pl index 3b765ddd4..89a54bc3d 100644 --- a/template/en/default/filterexceptions.pl +++ b/template/en/default/filterexceptions.pl @@ -583,7 +583,8 @@ 'admin/users/confirm-delete.html.tmpl' => [ 'andstring', 'responsibilityterms.$responsibility', - 'bugs', + 'reporter', + 'assignee_or_qa', 'cc', 'flags.requestee', 'flags.setter', |