diff --git a/CRM/Core/BAO/SchemaHandler.php b/CRM/Core/BAO/SchemaHandler.php index ef28021a7c9c..ab58a8aa4b25 100644 --- a/CRM/Core/BAO/SchemaHandler.php +++ b/CRM/Core/BAO/SchemaHandler.php @@ -189,14 +189,15 @@ public static function buildSearchIndexSQL(&$params, $separator, $prefix, $index //create index only for searchable fields during ADD, //create index only if field is become searchable during MODIFY, - //drop index only if field is no more searchable and index was exist. + //drop index only if field is no longer searchable and it does not reference + //a forgein key (and indexExist is true) if (!empty($params['searchable']) && !$indexExist) { $sql .= $separator; $sql .= str_repeat(' ', 8); $sql .= $prefix; $sql .= "INDEX_{$params['name']} ( {$params['name']} )"; } - elseif (empty($params['searchable']) && $indexExist) { + elseif (empty($params['searchable']) && empty($params['fk_table_name']) && $indexExist) { $sql .= $separator; $sql .= str_repeat(' ', 8); $sql .= "DROP INDEX INDEX_{$params['name']}"; diff --git a/tests/phpunit/api/v3/CustomFieldTest.php b/tests/phpunit/api/v3/CustomFieldTest.php index abb5c19f1eb2..a84dcf480667 100644 --- a/tests/phpunit/api/v3/CustomFieldTest.php +++ b/tests/phpunit/api/v3/CustomFieldTest.php @@ -569,11 +569,28 @@ public function getCustomFieldKeys($getFieldsResult) { return $r; } - /** - * This test is designed to ensure that when a custom field is updated via the - * API, params that are not supplied do not revert to the defaults. This was - * happening with, for example, is_searchable - */ + public function testMakeSearchableContactReferenceFieldUnsearchable() { + $customGroup = $this->customGroupCreate(array( + 'name' => 'testCustomGroup', + 'title' => 'testCustomGroup', + 'extends' => 'Individual', + )); + $params = array( + 'name' => 'testCustomField', + 'label' => 'testCustomField', + 'custom_group_id' => 'testCustomGroup', + 'data_type' => 'ContactReference', + 'html_type' => 'Autocomplete-Select', + 'is_searchable' => '1', + ); + $result = $this->callAPISuccess('CustomField', 'create', $params); + $params = [ + 'id' => $result['id'], + 'is_searchable' => 0, + ]; + $result = $this->callAPISuccess('CustomField', 'create', $params); + } + public function testDisableSearchableContactReferenceField() { $customGroup = $this->customGroupCreate(array( 'name' => 'testCustomGroup',