if (!array_key_exists($customFieldID, $customFields)) {
self::addToErrorMsg(ts('field ID'), $errorMessage);
}
+ // validate null values for required custom fields of type boolean
+ if (!empty($customFields[$customFieldID]['is_required']) && (empty($params['custom_'.$customFieldID]) && !is_numeric($params['custom_'.$customFieldID])) && $customFields[$customFieldID]['data_type'] == 'Boolean') {
+ self::addToErrorMsg($customFields[$customFieldID]['label'].'::'.$customFields[$customFieldID]['groupTitle'], $errorMessage);
+ }
+
//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, $addressCustomFields)) {
}
elseif ($customFields[$customFieldID]['data_type'] == 'Boolean') {
if (CRM_Utils_String::strtoboolstr($value) === FALSE) {
- self::addToErrorMsg($customFields[$customFieldID]['label'], $errorMessage);
+ self::addToErrorMsg($customFields[$customFieldID]['label'].'::'.$customFields[$customFieldID]['groupTitle'], $errorMessage);
}
}
// need not check for label filed import
}
}
else {
- if ($getValue[$cnt]['location_type_id'] == $params[$locKeys][$key]['location_type_id']) {
+ if ((!empty($getValue[$cnt]['location_type_id']) && !empty($params[$locKeys][$key]['location_type_id'])) && $getValue[$cnt]['location_type_id'] == $params[$locKeys][$key]['location_type_id']) {
unset($params[$locKeys][$key]);
}
}
self::formatCustomDate($params, $formatted, $dateType, $key);
}
elseif ($customFields[$customFieldID]['data_type'] == 'Boolean') {
- $params[$key] = CRM_Utils_String::strtoboolstr($val);
+ if (empty($val) && !is_numeric($val) && $this->_onDuplicate == CRM_Import_Parser::DUPLICATE_FILL) {
+ //retain earlier value when Import mode is `Fill`
+ unset($params[$key]);
+ }
+ else {
+ $params[$key] = CRM_Utils_String::strtoboolstr($val);
}
}
$params[$key] = $this->checkGender($val);
}
}
+ }
//now format custom data.
foreach ($params as $key => $field) {
- if (!isset($field) || empty($field)){
- unset($params[$key]);
- continue;
- }
-
if (is_array($field)) {
$isAddressCustomField = FALSE;
foreach ($field as $value) {
// to check if not update mode and unset the fields with empty value.
if (!$this->_updateWithId && array_key_exists('custom', $formatted)) {
foreach ($formatted['custom'] as $customKey => $customvalue) {
+ if (empty($formatted['custom'][$customKey][- 1]['is_required'])) {
+ $formatted['custom'][$customKey][-1]['is_required'] = $customFields[$customKey]['is_required'];
+ }
$emptyValue = CRM_Utils_Array::value('value', $customvalue[ - 1]);
if (!isset($emptyValue)) {
unset($formatted['custom'][$customKey]);