diff --git a/CRM/Core/BAO/CustomField.php b/CRM/Core/BAO/CustomField.php index 7622d63c325d..ce816c53d1e4 100644 --- a/CRM/Core/BAO/CustomField.php +++ b/CRM/Core/BAO/CustomField.php @@ -193,21 +193,14 @@ public static function create(&$params) { } $transaction = new CRM_Core_Transaction(); - // create any option group & values if required - if ($params['html_type'] != 'Text' && - in_array($params['data_type'], array( - 'String', - 'Int', - 'Float', - 'Money', - )) - ) { - $tableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', - $params['custom_group_id'], - 'table_name' - ); + $htmlType = CRM_Utils_Array::value('html_type', $params); + $dataType = CRM_Utils_Array::value('data_type', $params); + $allowedOptionTypes = array('String', 'Int', 'Float', 'Money'); + // create any option group & values if required + if ($htmlType != 'Text' && in_array($dataType, $allowedOptionTypes) + ) { //CRM-16659: if option_value then create an option group for this custom field. if ($params['option_type'] == 1 && (empty($params['option_group_id']) || !empty($params['option_value']))) { // first create an option group for this custom group @@ -215,7 +208,7 @@ public static function create(&$params) { $optionGroup->name = "{$columnName}_" . date('YmdHis'); $optionGroup->title = $params['label']; $optionGroup->is_active = 1; - $optionGroup->data_type = $params['data_type']; + $optionGroup->data_type = $dataType; $optionGroup->save(); $params['option_group_id'] = $optionGroup->id; if (!empty($params['option_value']) && is_array($params['option_value'])) { @@ -225,7 +218,7 @@ public static function create(&$params) { $optionValue->option_group_id = $optionGroup->id; $optionValue->label = $params['option_label'][$k]; $optionValue->name = CRM_Utils_String::titleToVar($params['option_label'][$k]); - switch ($params['data_type']) { + switch ($dataType) { case 'Money': $optionValue->value = CRM_Utils_Rule::cleanMoney($v); break; @@ -262,7 +255,7 @@ public static function create(&$params) { if (empty($params['default_value'])) { //don't insert only value separator as default value, CRM-4579 $defaultValue = self::getOptionGroupDefault($params['option_group_id'], - $params['html_type'] + $htmlType ); if (!CRM_Utils_System::isNull(explode(CRM_Core_DAO::VALUE_SEPARATOR, @@ -275,7 +268,7 @@ public static function create(&$params) { } // since we need to save option group id :) - if (!isset($params['attributes']) && strtolower($params['html_type']) == 'textarea') { + if (!isset($params['attributes']) && strtolower($htmlType) == 'textarea') { $params['attributes'] = 'rows=4, cols=60'; } diff --git a/tests/phpunit/api/v3/CustomFieldTest.php b/tests/phpunit/api/v3/CustomFieldTest.php index 6afbd5c97dde..76a14abcb3aa 100644 --- a/tests/phpunit/api/v3/CustomFieldTest.php +++ b/tests/phpunit/api/v3/CustomFieldTest.php @@ -544,6 +544,17 @@ public function testCustomFileField() { $this->assertEquals($attachment['id'], $result[$cfId]); } + public function testUpdateCustomField() { + $customGroup = $this->customGroupCreate(array('extends' => 'Individual')); + $params = array('id' => $customGroup['id'], 'is_active' => 0); + $result = $this->callAPISuccess('CustomGroup', 'create', $params); + $result = array_shift($result['values']); + + $this->assertEquals(0, $result['is_active']); + + $this->customGroupDelete($customGroup['id']); + } + /** * @param $getFieldsResult *