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…
	
	Add table
		
		Reference in a new issue
	
	 Bradley M. Kuhn
						Bradley M. Kuhn