Skip to content

Commit

Permalink
Merge pull request #14438 from eileenmcnaughton/display
Browse files Browse the repository at this point in the history
(dev/core#1000) Fixes contact's displayname not appearing in membership edit, if no registered email is found
  • Loading branch information
seamuslee001 authored Jun 6, 2019
2 parents 10bc475 + 5c1d7fa commit 35c839b
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 10 deletions.
33 changes: 23 additions & 10 deletions CRM/Contact/BAO/Contact/Location.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,34 @@ class CRM_Contact_BAO_Contact_Location {
* Array of display_name, email, location type and location id if found, or (null,null,null, null)
*/
public static function getEmailDetails($id, $isPrimary = TRUE, $locationTypeID = NULL) {
$params = [
'location_type_id' => $locationTypeID,
$params = array(
'contact_id' => $id,
'return' => ['contact_id.display_name', 'email', 'location_type_id', 'id'],
];
'return' => array('display_name', 'email.email'),
'api.Email.get' => array(
'location_type_id' => $locationTypeID,
'sequential' => 0,
'return' => array('email', 'location_type_id', 'id'),
),
);
if ($isPrimary) {
$params['is_primary'] = 1;
$params['api.Email.get']['is_primary'] = 1;
}
$emails = civicrm_api3('Email', 'get', $params);

if ($emails['count'] > 0) {
$email = reset($emails['values']);
return [$email['contact_id.display_name'], $email['email'], $email['location_type_id'], $email['id']];
$contacts = civicrm_api3('Contact', 'get', $params);
if ($contacts['count'] > 0) {
$contact = reset($contacts['values']);
if ($contact['api.Email.get']['count'] > 0) {
$email = reset($contact['api.Email.get']['values']);
}
}
return [NULL, NULL, NULL, NULL];
$returnParams = array(
(isset($contact['display_name'])) ? $contact['display_name'] : NULL,
(isset($email['email'])) ? $email['email'] : NULL,
(isset($email['location_type_id'])) ? $email['location_type_id'] : NULL,
(isset($email['id'])) ? $email['id'] : NULL,
);

return $returnParams;
}

/**
Expand Down
14 changes: 14 additions & 0 deletions tests/phpunit/CRM/Contact/BAO/ContactTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -1623,4 +1623,18 @@ public function testUpdateProfileLocationLeak() {
$this->contactDelete($contactId);
}

/**
* Test that contact details are still displayed if no email is present.
*
* @throws \Exception
*/
public function testContactEmailDetailsWithNoPrimaryEmail() {
$params = $this->contactParams();
unset($params['email']);
$contact = CRM_Contact_BAO_Contact::create($params);
$contactId = $contact->id;
$result = CRM_Contact_BAO_Contact_Location::getEmailDetails($contactId);
$this->assertEquals([$contact->display_name, NULL, NULL, NULL], $result);
}

}

0 comments on commit 35c839b

Please sign in to comment.