setPreferredEmailAddress: initial implementation
These tests now pass: ok 106 - setPreferredEmailAddress: dies for undefined id ok 107 - setPreferredEmailAddress: dies for non-numeric id ok 108 - setPreferredEmailAddress: email address undefined fails ok 109 - setPreferredEmailAddress: email address with extra @ fails to add. ok 112 - setPreferredEmailAddress: email address not found in database does not die.... ok 113 - setPreferredEmailAddress: ....but returns undef ok 116 - setPreferredEmailAddress: setting preferred email address succeeds.... ok 117 - setPreferredEmailAddress: ... and returns correct email_address_id on success
This commit is contained in:
parent
69a5ffdbf6
commit
2e39065c3e
1 changed files with 62 additions and 0 deletions
|
@ -230,6 +230,68 @@ sub addEmailAddress($$$$) {
|
|||
}
|
||||
######################################################################
|
||||
|
||||
=begin setPreferredEmailAddress
|
||||
|
||||
Arguments:
|
||||
|
||||
=over
|
||||
|
||||
=item $supporterId
|
||||
|
||||
Valid supporter id number currently in the database. die() will occur if
|
||||
the id number is not in the database already as a supporter id.
|
||||
|
||||
|
||||
=item $emailAddress
|
||||
|
||||
Scalar string that contains an email address. undef is returned if the
|
||||
email address is not already in the database for this supporter.
|
||||
|
||||
=back
|
||||
|
||||
Returns the email_address_id of the preferred email address. undef can be
|
||||
returned; it means the preferred email address wasn't selected for some reason.
|
||||
|
||||
=cut
|
||||
|
||||
sub setPreferredEmailAddress($$$) {
|
||||
my($self, $supporterId, $emailAddress) = @_;
|
||||
|
||||
die "setPreferredEmailAddress: invalid supporter id, $supporterId" unless $self->_verifyId($supporterId);
|
||||
die "setPreferredEmailAddress: email address not defined" unless defined $emailAddress;
|
||||
die "setPreferredEmailAddress: invalid email address, $emailAddress"
|
||||
unless Mail::RFC822::Address::valid($emailAddress);
|
||||
|
||||
my $ems = $self->dbh()->selectall_hashref("SELECT ea.email_address, ea.id, sem.preferred " .
|
||||
"FROM email_address ea, supporter_email_address_mapping sem " .
|
||||
"WHERE ea.id = sem.email_address_id AND ".
|
||||
"sem.supporter_id = " . $self->dbh->quote($supporterId, 'SQL_INTEGER'),
|
||||
'email_address');
|
||||
# Shortcut: it was already set
|
||||
return $ems->{$emailAddress}{id} if (defined $ems->{$emailAddress} and $ems->{$emailAddress}{preferred});
|
||||
|
||||
my $anotherPreferred = 0;
|
||||
my $emailAddressId;
|
||||
# Iterate over email addresses, finding if any were preferred before, and finding outs too.
|
||||
foreach my $em (keys %{$ems}) {
|
||||
$anotherPreferred = 1 if $ems->{$em}{preferred};
|
||||
$emailAddressId = $ems->{$em}{id} if $em eq $emailAddress;
|
||||
}
|
||||
return undef if not defined $emailAddressId;
|
||||
|
||||
$self->_beginWork();
|
||||
if ($anotherPreferred) {
|
||||
$self->dbh->do("UPDATE supporter_email_address_mapping " .
|
||||
"SET preferred = " . $self->dbh->quote(0, 'SQL_BOOLEAN') . " " .
|
||||
"WHERE supporter_id = " . $self->dbh->quote($supporterId, 'SQL_INTEGER'));
|
||||
}
|
||||
$self->dbh->do("UPDATE supporter_email_address_mapping " .
|
||||
"SET preferred = " . $self->dbh->quote(1, 'SQL_BOOLEAN') . " " .
|
||||
"WHERE email_address_id = " . $self->dbh->quote($emailAddressId, 'SQL_INTEGER'));
|
||||
return $emailAddressId;
|
||||
}
|
||||
######################################################################
|
||||
|
||||
=begin addPostalAddress
|
||||
|
||||
Arguments:
|
||||
|
|
Loading…
Reference in a new issue