X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcontact.pm;h=a824b8e53cd48e604bfbc41f4d7841977b7a3ab0;hb=c5dd9bdf09dff2b5cc6d9a9681894664fe5147ef;hp=0428d898b830d6ec5adffcc75e640d7df207f5aa;hpb=b2fd002f3285b70311642f8ff0025598d42bd16e;p=freeside.git diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm index 0428d898b..a824b8e53 100644 --- a/FS/FS/contact.pm +++ b/FS/FS/contact.pm @@ -1,5 +1,6 @@ package FS::contact; -use base qw( FS::Record ); +use base qw( FS::Password_Mixin + FS::Record ); use strict; use vars qw( $skip_fuzzyfiles ); @@ -89,10 +90,6 @@ empty or bcrypt disabled -=item invoice_dest - -empty, or 'Y' if email invoices should be sent to this contact - =back =head1 METHODS @@ -133,6 +130,7 @@ be included in that record, if they are set on the object: - classnum - comment - selfservice_access +- invoice_dest =cut @@ -156,7 +154,7 @@ sub insert { $self->custnum(''); my %link_hash = (); - for (qw( classnum comment selfservice_access )) { + for (qw( classnum comment selfservice_access invoice_dest )) { $link_hash{$_} = $self->get($_); $self->$_(''); } @@ -187,22 +185,26 @@ sub insert { } + my $error; if ( $existing_contact ) { $self->$_($existing_contact->$_()) for qw( contactnum _password _password_encoding ); - $self->SUPER::replace($existing_contact); + $error = $self->SUPER::replace($existing_contact); } else { - my $error = $self->SUPER::insert; - if ( $error ) { - $dbh->rollback if $oldAutoCommit; - return $error; - } + $error = $self->SUPER::insert; } + $error ||= $self->insert_password_history; + + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + my $cust_contact = ''; if ( $custnum ) { my %hash = ( 'contactnum' => $self->contactnum, @@ -420,12 +422,15 @@ sub replace { $self->custnum(''); my %link_hash = (); - for (qw( classnum comment selfservice_access )) { + for (qw( classnum comment selfservice_access invoice_dest )) { $link_hash{$_} = $self->get($_); $self->$_(''); } my $error = $self->SUPER::replace($old); + if ( $old->_password ne $self->_password ) { + $error ||= $self->insert_password_history; + } if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; @@ -666,7 +671,6 @@ sub check { || $self->ut_textn('_password') || $self->ut_enum('_password_encoding', [ '', 'bcrypt']) || $self->ut_enum('disabled', [ '', 'Y' ]) - || $self->ut_flag('invoice_dest') ; return $error if $error; @@ -790,9 +794,22 @@ sub authenticate_password { } +=item change_password NEW_PASSWORD + +Changes the contact's selfservice access password to NEW_PASSWORD. This does +not check password policy rules (see C) and will return +an error only if editing the record fails for some reason. + +If NEW_PASSWORD is the same as the existing password, this does nothing. + +=cut + sub change_password { my($self, $new_password) = @_; + # do nothing if the password is unchanged + return if $self->authenticate_password($new_password); + $self->change_password_fields( $new_password ); $self->replace; @@ -939,7 +956,7 @@ sub _upgrade_data { #class method $dest = $svc_acct->email; } - my $error = $cust_main->replace( [ $dest ] ); + my $error = $cust_main->replace( invoicing_list => [ $dest ] ); if ( $error ) { die "custnum $custnum, invoice destination $dest, creating contact: $error\n"; @@ -950,14 +967,14 @@ sub _upgrade_data { #class method } # while $search->fetch - unless ( FS::upgrade_journal->is_done('contact__DUPEMAIL') ) { + unless ( FS::upgrade_journal->is_done('contact_invoice_dest') ) { foreach my $contact (qsearch('contact', {})) { my $error = $contact->replace; die $error if $error; } - FS::upgrade_journal->set_done('contact__DUPEMAIL'); + FS::upgrade_journal->set_done('contact_invoice_dest'); } }