/** * Get Contact or Account or User, based on email address * @param string $emailAddress * @param boolean $userCanAccessContacts * @param boolean $userCanAccessLeads * @param boolean $userCanAccessAccounts * @return Contact || Account || User || NULL */ public static function resolvePersonOrAccountByEmailAddress($emailAddress, $userCanAccessContacts = false, $userCanAccessLeads = false, $userCanAccessAccounts = false) { assert('is_string($emailAddress)'); assert('is_bool($userCanAccessContacts)'); assert('is_bool($userCanAccessLeads)'); assert('is_bool($userCanAccessAccounts)'); $personOrAccount = null; $contactsOrLeads = array(); if ($userCanAccessContacts || $userCanAccessLeads) { $stateMetadataAdapterClassName = LeadsStateMetadataAdapter::resolveStateMetadataAdapterClassNameByAccess($userCanAccessContacts, $userCanAccessLeads); $contactsOrLeads = ContactSearch::getContactsByAnyEmailAddress($emailAddress, null, $stateMetadataAdapterClassName); } if (!empty($contactsOrLeads)) { $personOrAccount = $contactsOrLeads[0]; } else { $accounts = array(); // Check if email belongs to account if ($userCanAccessAccounts) { $accounts = AccountSearch::getAccountsByAnyEmailAddress($emailAddress); } if (count($accounts)) { $personOrAccount = $accounts[0]; } else { $users = UserSearch::getUsersByEmailAddress($emailAddress); if (count($users)) { $personOrAccount = $users[0]; } } } return $personOrAccount; }