Skip to content

Commit

Permalink
Fixes contact's displayname not appearing in membership edit, if no r…
Browse files Browse the repository at this point in the history
…egistered email is found

Add a unit test to lock in fix to dev/core#1000
  • Loading branch information
VangelisP authored and eileenmcnaughton committed Jun 5, 2019
1 parent dae1413 commit 5c1d7fa
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 5c1d7fa

Please sign in to comment.