]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 690173: Cannot delete user accounts due to FK on audit_log
authormiketosh <michael.j.tosh@lmco.com>
Sun, 23 Oct 2011 12:18:04 +0000 (14:18 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Sun, 23 Oct 2011 12:18:04 +0000 (14:18 +0200)
r/a=mkanat

Bugzilla/DB/Schema.pm
Bugzilla/Install/DB.pm
Bugzilla/User.pm
template/en/default/admin/users/confirm-delete.html.tmpl

index 33527c367b9420674f9551053281338a4abfc4cf..6d9a33ef7482a596af4379785ce9a933fb759aa8 100644 (file)
@@ -516,7 +516,8 @@ use constant ABSTRACT_SCHEMA => {
         FIELDS => [
             user_id   => {TYPE => 'INT3',
                           REFERENCES => {TABLE  => 'profiles',
-                                         COLUMN => 'userid'}},
+                                         COLUMN => 'userid',
+                                         DELETE => 'SET NULL'}},
             class     => {TYPE => 'varchar(255)', NOTNULL => 1},
             object_id => {TYPE => 'INT4', NOTNULL => 1},
             field     => {TYPE => 'varchar(64)', NOTNULL => 1},
index 5ce3c7a4ecc4dd525ba343dd02d95d37f264b70e..84267de412eb34623d20c0d38a8ebd1e224d1479 100644 (file)
@@ -656,6 +656,9 @@ sub update_table_definitions {
     # 2011-06-15 dkl@mozilla.com - Bug 658929
     _migrate_disabledtext_boolean();
 
+    # 2011-10-11 miketosh - Bug 690173
+    _on_delete_set_null_for_audit_log_userid();
+
     ################################################################
     # New --TABLE-- changes should go *** A B O V E *** this point #
     ################################################################
@@ -3602,6 +3605,15 @@ sub _rename_tags_to_tag {
     }
 }
 
+sub _on_delete_set_null_for_audit_log_userid {
+    my $dbh = Bugzilla->dbh;
+    my $fk = $dbh->bz_fk_info('audit_log', 'user_id');
+    if ($fk and !defined $fk->{DELETE}) {
+        $fk->{DELETE} = 'SET NULL';
+        $dbh->bz_alter_fk('audit_log', 'user_id', $fk);
+    }
+}
+
 1;
 
 __END__
index 48ce41a57d71a6146fd679ccc8013c0deeb9cb0e..849c1d915ba1578549b2599d8a803c1d28272406 100644 (file)
@@ -1763,6 +1763,18 @@ sub mail_settings {
     return $self->{'mail_settings'};
 }
 
+sub has_audit_entries {
+    my $self = shift;
+    my $dbh = Bugzilla->dbh;
+
+    if (!exists $self->{'has_audit_entries'}) {
+        $self->{'has_audit_entries'} =
+            $dbh->selectrow_array('SELECT 1 FROM audit_log WHERE user_id = ? ' .
+                                   $dbh->sql_limit(1), undef, $self->id);
+    }
+    return $self->{'has_audit_entries'};
+}
+
 sub is_insider {
     my $self = shift;
 
index 1e7077eaf18e3b32027bafcf52e61777c8023858..8f1a3d2fcf35fe77827fe20fdb2b3066113f0229 100644 (file)
 
   [% IF assignee_or_qa || cc || component_cc || email_setting || flags.requestee ||
         namedqueries || profile_setting || quips || series || watch.watched ||
-        watch.watcher || whine_events || whine_schedules || other_safe %]
+        watch.watcher || whine_events || whine_schedules || otheruser.has_audit_entries ||
+        other_safe %]
     <div class="warningmessages">
       <p>The following deletions are <b>safe</b> and will not generate
       referential integrity inconsistencies.</p>
             but the whines themselves will be left unaltered.
           </li>
         [% END %]
+        [% IF otheruser.has_audit_entries %]
+          <li>
+            The user has performed audited administrative tasks
+            that are logged in the database.
+            If you delete this user account, the audit log entries
+            will no longer be indentifiable.
+          </li>
+        [% END %]
         [% Hook.process('warn_safe') %]
       </ul>
     </div>