From: Mark Wells Date: Thu, 25 Feb 2016 23:16:35 +0000 (-0800) Subject: allow records with password history to be deleted, from #32456 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=fa97f29ea43276a6f2636e1f251c775c7fa9e67c allow records with password history to be deleted, from #32456 --- diff --git a/FS/FS/Password_Mixin.pm b/FS/FS/Password_Mixin.pm index 3fb787c47..ac7ba5059 100644 --- a/FS/FS/Password_Mixin.pm +++ b/FS/FS/Password_Mixin.pm @@ -215,6 +215,26 @@ sub insert_password_history { } +=item delete_password_history; + +Removes all password history records attached to this object, in preparation +to delete the object. + +=cut + +sub delete_password_history { + my $self = shift; + my @records = qsearch('password_history', { + $self->password_history_key => $self->get($self->primary_key) + }); + my $error = ''; + foreach (@records) { + $error ||= $_->delete; + } + return $error . ' (clearing password history)' if $error; + ''; +} + =item _blowfishcrypt PASSWORD For internal use: takes PASSWORD and returns a new diff --git a/FS/FS/access_user.pm b/FS/FS/access_user.pm index 72f232096..3b36e46f0 100644 --- a/FS/FS/access_user.pm +++ b/FS/FS/access_user.pm @@ -161,7 +161,8 @@ sub delete { local $FS::UID::AutoCommit = 0; my $dbh = dbh; - my $error = $self->SUPER::delete(@_); + my $error = $self->delete_password_history + || $self->SUPER::delete(@_); if ( $error ) { $dbh->rollback or die $dbh->errstr if $oldAutoCommit; diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm index a824b8e53..c1b558d6c 100644 --- a/FS/FS/contact.pm +++ b/FS/FS/contact.pm @@ -378,7 +378,8 @@ sub delete { } } - my $error = $self->SUPER::delete; + my $error = $self->delete_password_history + || $self->SUPER::delete; if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm index 6bb67af08..c2f5d7122 100644 --- a/FS/FS/svc_acct.pm +++ b/FS/FS/svc_acct.pm @@ -847,7 +847,8 @@ sub delete { } } - my $error = $self->SUPER::delete; # usergroup here + my $error = $self->delete_password_history + || $self->SUPER::delete; # usergroup here if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error;