diff --git a/CRM/Contact/BAO/Contact.php b/CRM/Contact/BAO/Contact.php index 2599d975f4cd..d20e155462aa 100644 --- a/CRM/Contact/BAO/Contact.php +++ b/CRM/Contact/BAO/Contact.php @@ -179,6 +179,12 @@ public static function add(&$params) { $contact->display_name = $contact->sort_name = CRM_Utils_Array::value('organization_name', $params, ''); } } + if (strlen($contact->display_name) > 128) { + $contact->display_name = substr($contact->display_name, 0,128); + } + if (strlen($contact->sort_name) > 128) { + $contact->sort_name = substr($contact->sort_name, 0,128); + } $privacy = CRM_Utils_Array::value('privacy', $params); if ($privacy && diff --git a/tests/phpunit/api/v3/ContactTest.php b/tests/phpunit/api/v3/ContactTest.php index fb7e01a23755..c2f4f94e21e7 100644 --- a/tests/phpunit/api/v3/ContactTest.php +++ b/tests/phpunit/api/v3/ContactTest.php @@ -2360,6 +2360,21 @@ public function testContactCreateFormatIsSuccessFalse() { $this->assertEquals(0, $result); } + /** + * Test long display names. + * + * CRM-21258 + */ + public function testContactCreateLongDisplayName() { + $result = $this->callAPISuccess('Contact', 'Create', array( + 'first_name' => str_pad('a', 64, 'a'), + 'last_name' => str_pad('a', 64, 'a'), + 'contact_type' => 'Individual', + )); + $this->assertEquals('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', $result['values'][$result['id']]['display_name']); + $this->assertEquals('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', $result['values'][$result['id']]['sort_name']); + } + /** * Test Single Entity format. */