diff --git a/CRM/Import/Parser.php b/CRM/Import/Parser.php index 5574ce39f92a..0c867dc80440 100644 --- a/CRM/Import/Parser.php +++ b/CRM/Import/Parser.php @@ -1518,81 +1518,6 @@ protected function getContactMatchingFields(): array { return $fields; } - /** - * @param $customFieldID - * @param $value - * @param array $fieldMetaData - * @param $dateType - * - * @return ?string - */ - protected function validateCustomField($customFieldID, $value, array $fieldMetaData, $dateType): ?string { - /* validate the data against the CF type */ - - if ($value) { - $dataType = $fieldMetaData['data_type']; - $htmlType = $fieldMetaData['html_type']; - $isSerialized = CRM_Core_BAO_CustomField::isSerialized($fieldMetaData); - if ($dataType === 'Date') { - $params = ['date_field' => $value]; - if (CRM_Utils_Date::convertToDefaultDate($params, $dateType, 'date_field')) { - return NULL; - } - return $fieldMetaData['label']; - } - elseif ($dataType === 'Boolean') { - if (CRM_Utils_String::strtoboolstr($value) === FALSE) { - return $fieldMetaData['label'] . '::' . $fieldMetaData['groupTitle']; - } - } - // need not check for label filed import - $selectHtmlTypes = [ - 'CheckBox', - 'Select', - 'Radio', - ]; - if ((!$isSerialized && !in_array($htmlType, $selectHtmlTypes)) || $dataType == 'Boolean' || $dataType == 'ContactReference') { - $valid = CRM_Core_BAO_CustomValue::typecheck($dataType, $value); - if (!$valid) { - return $fieldMetaData['label']; - } - } - - // check for values for custom fields for checkboxes and multiselect - if ($isSerialized && $dataType != 'ContactReference') { - $mulValues = array_filter(explode(',', str_replace('|', ',', trim($value))), 'strlen'); - $customOption = CRM_Core_BAO_CustomOption::getCustomOption($customFieldID, TRUE); - foreach ($mulValues as $v1) { - - $flag = FALSE; - foreach ($customOption as $v2) { - if ((strtolower(trim($v2['label'])) == strtolower(trim($v1))) || (strtolower(trim($v2['value'])) == strtolower(trim($v1)))) { - $flag = TRUE; - } - } - - if (!$flag) { - return $fieldMetaData['label']; - } - } - } - elseif ($htmlType == 'Select' || ($htmlType == 'Radio' && $dataType != 'Boolean')) { - $customOption = CRM_Core_BAO_CustomOption::getCustomOption($customFieldID, TRUE); - $flag = FALSE; - foreach ($customOption as $v2) { - if ((strtolower(trim($v2['label'])) == strtolower(trim($value))) || (strtolower(trim($v2['value'])) == strtolower(trim($value)))) { - $flag = TRUE; - } - } - if (!$flag) { - return $fieldMetaData['label']; - } - } - } - - return NULL; - } - /** * Get the entity for the given field. * @@ -1915,80 +1840,6 @@ public static function runJob(\CRM_Queue_TaskContext $taskContext, int $userJobI return TRUE; } - /** - * Check if an error in custom data. - * - * @deprecated all of this is duplicated if getTransformedValue is used. - * - * @param array $params - * @param string $errorMessage - * A string containing all the error-fields. - * - * @param null $csType - */ - public function isErrorInCustomData($params, &$errorMessage, $csType = NULL) { - $dateType = CRM_Core_Session::singleton()->get("dateTypes"); - $errors = []; - - if (!empty($params['contact_sub_type'])) { - $csType = $params['contact_sub_type'] ?? NULL; - } - - if (empty($params['contact_type'])) { - $params['contact_type'] = 'Individual'; - } - - // get array of subtypes - CRM-18708 - if (in_array($csType, CRM_Contact_BAO_ContactType::basicTypes(TRUE), TRUE)) { - $csType = $this->getSubtypes($params['contact_type']); - } - - if (is_array($csType)) { - // fetch custom fields for every subtype and add it to $customFields array - // CRM-18708 - $customFields = []; - foreach ($csType as $cType) { - $customFields += CRM_Core_BAO_CustomField::getFields($params['contact_type'], FALSE, FALSE, $cType); - } - } - else { - $customFields = CRM_Core_BAO_CustomField::getFields($params['contact_type'], FALSE, FALSE, $csType); - } - - foreach ($params as $key => $value) { - if ($customFieldID = CRM_Core_BAO_CustomField::getKeyID($key)) { - //For address custom fields, we do get actual custom field value as an inner array of - //values so need to modify - if (!array_key_exists($customFieldID, $customFields)) { - return ts('field ID'); - } - /* check if it's a valid custom field id */ - $errors[] = $this->validateCustomField($customFieldID, $value, $customFields[$customFieldID], $dateType); - } - } - if ($errors) { - $errorMessage .= ($errorMessage ? '; ' : '') . implode('; ', array_filter($errors)); - } - } - - /** - * get subtypes given the contact type - * - * @param string $contactType - * @return array $subTypes - */ - protected function getSubtypes($contactType) { - $subTypes = []; - $types = CRM_Contact_BAO_ContactType::subTypeInfo($contactType); - - if (count($types) > 0) { - foreach ($types as $type) { - $subTypes[] = $type['name']; - } - } - return $subTypes; - } - /** * Update the status of the import row to reflect the processing outcome. * diff --git a/tests/phpunit/CRM/Contact/Import/Parser/ContactTest.php b/tests/phpunit/CRM/Contact/Import/Parser/ContactTest.php index 17de9e8ebb63..2efd3dae0071 100644 --- a/tests/phpunit/CRM/Contact/Import/Parser/ContactTest.php +++ b/tests/phpunit/CRM/Contact/Import/Parser/ContactTest.php @@ -973,24 +973,6 @@ public function testImportPrimaryAddressUpdate(): void { $this->callAPISuccessGetSingle('Contact', $contactValues); } - /** - * Test the determination of whether a custom field is valid. - */ - public function testCustomFieldValidation(): void { - $errorMessage = ''; - $customGroup = $this->customGroupCreate([ - 'extends' => 'Contact', - 'title' => 'ABC', - ]); - $customField = $this->customFieldOptionValueCreate($customGroup, 'fieldABC', ['html_type' => 'Select', 'serialize' => 1]); - $params = [ - 'custom_' . $customField['id'] => 'Label1|Label2', - ]; - $parser = new CRM_Contact_Import_Parser_Contact(); - $parser->isErrorInCustomData($params, $errorMessage); - $this->assertEquals(NULL, $errorMessage); - } - /** * Test the import validation. *