]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 302723: Deleting a user account when this user is the assignee or QA contact...
authorlpsolit%gmail.com <>
Fri, 5 Aug 2005 01:29:33 +0000 (01:29 +0000)
committerlpsolit%gmail.com <>
Fri, 5 Aug 2005 01:29:33 +0000 (01:29 +0000)
editusers.cgi
template/en/default/admin/users/confirm-delete.html.tmpl
template/en/default/filterexceptions.pl

index 18005fd940ced75ae72f9992c7816141811522f1..5ccd1d06f264d17fbb6055c2ac2e5ff17d1f7b54 100755 (executable)
@@ -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);
 
index 205f96b151b6510fd1353fa70b563c69e8125ac6..e8bfe8609d0a1bac36880db73fd8c7a108981a84 100644 (file)
@@ -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
 
   <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&amp;emailreporter1=1&amp;emailqa_contact1=1&amp;emailtype1=exact&amp;email1=[% otheruser.login FILTER url_quote %]">is
-          related to
-          [% IF bugs == 1 %]
-            [%+ terms.abug %]
+          <a href="buglist.cgi?emailreporter1=1&amp;emailtype1=exact&amp;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 %]
           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&amp;emailqa_contact1=1&amp;emailtype1=exact&amp;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
index 053b712b404fb5d64f8a2dcf1438e4a561849ff7..4945c723110bb3770d5161035c829cc1814003cd 100644 (file)
 'admin/users/confirm-delete.html.tmpl' => [
   'andstring',
   'responsibilityterms.$responsibility',
-  'bugs',
+  'reporter',
+  'assignee_or_qa',
   'cc',
   'flags.requestee',
   'flags.setter',