X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=api%2Fv3%2FCustomField.php;h=7a66f733f50c45d53d57ddd0519ad381a2b984c0;hb=af5c6758a26a9585cde11bd6fb4a99fcf6311661;hp=1d0ee3d0033b64b9e8280f8eae64fae4acfe48fe;hpb=73fcd0b6093743c47025a30e9c99f0d7623fc734;p=civicrm-core.git diff --git a/api/v3/CustomField.php b/api/v3/CustomField.php index 1d0ee3d003..7a66f733f5 100644 --- a/api/v3/CustomField.php +++ b/api/v3/CustomField.php @@ -19,20 +19,21 @@ * Create a 'custom field' within a custom field group. * * We also empty the static var in the getfields - * function after deletion so that the field is available for us (getfields manages date conversion - * among other things + * function after deletion so that the field is available for us (getfields + * manages date conversion among other things * * @param array $params * Array per getfields metadata. * * @return array * API success array + * @throws \CiviCRM_API3_Exception */ -function civicrm_api3_custom_field_create($params) { +function civicrm_api3_custom_field_create(array $params): array { // Legacy handling for old way of naming serialized fields if (!empty($params['html_type'])) { - if ($params['html_type'] == 'CheckBox' || strpos($params['html_type'], 'Multi-') === 0) { + if ($params['html_type'] === 'CheckBox' || strpos($params['html_type'], 'Multi-') === 0) { $params['serialize'] = 1; } $params['html_type'] = str_replace(['Multi-Select', 'Select Country', 'Select State/Province'], 'Select', $params['html_type']); @@ -58,6 +59,18 @@ function civicrm_api3_custom_field_create($params) { $params['option_weight'][$key] = $value['weight']; } } + elseif ( + // Legacy handling for historical apiv3 behaviour. + empty($params['id']) + && !empty($params['html_type']) + && $params['html_type'] !== 'Text' + && empty($params['option_group_id']) + && empty($params['option_value']) + && in_array($params['data_type'] ?? '', ['String', 'Int', 'Float', 'Money'])) { + // Trick the BAO into creating an option group even though no option values exist + // because that odd behaviour is locked in via a test. + $params['option_value'] = 1; + } $values = []; $customField = CRM_Core_BAO_CustomField::create($params); _civicrm_api3_object_to_array_unique_fields($customField, $values[$customField->id]);