Skip to content
Snippets Groups Projects
Commit c5bb91d3 authored by Guillaume Heurtier's avatar Guillaume Heurtier
Browse files

FEAT #14458 TIME 1:10 empty value in import contact

parent e612f035
No related branches found
No related tags found
No related merge requests found
......@@ -1239,21 +1239,21 @@ class ContactController
// Check format of fields
foreach ($contactFields as $frontField => $backField) {
if (!empty($contact[$frontField])) {
if (!empty($contact[$frontField]) && $contact[$frontField] !== false) {
if (strpos($frontField, 'contactCustomField_') !== false) {
$customId = explode('_', $frontField)[1];
// Check custom field format
$type = $customTypes[(string)$customId];
if (in_array($type, ['checkbox', 'radio']) && !Validator::arrayType()->validate($contact[$frontField])) {
if ($type == 'checkbox' && !Validator::arrayType()->validate($contact[$frontField])) {
$errors[] = ['error' => "Argument {$frontField} is not an array for contact {$key}", 'index' => $key, 'lang' => 'argumentNotArray'];
continue 2;
} elseif ($customTypes[$customId] == 'integer' && !Validator::intVal()->validate($contact[$frontField])) {
} elseif ($type == 'integer' && !Validator::floatVal()->validate($contact[$frontField])) {
$errors[] = ['error' => "Argument {$frontField} is not an integer for contact {$key}", 'index' => $key, 'lang' => 'argumentNotInteger'];
continue 2;
} elseif ($customTypes[$customId] == 'date' && !Validator::date()->validate($contact[$frontField])) {
} elseif ($type == 'date' && !Validator::date()->validate($contact[$frontField])) {
$errors[] = ['error' => "Argument {$frontField} is not a date for contact {$key}", 'index' => $key, 'lang' => 'argumentNotDate'];
continue 2;
} elseif (in_array($customTypes[$customId], ['string', 'select']) && !Validator::stringType()->validate($contact[$frontField]) || !Validator::length(1, 255)->validate($contact[$frontField])) {
} elseif (in_array($type, ['string', 'select', 'radio']) && !Validator::stringType()->validate($contact[$frontField]) || !Validator::length(1, 255)->validate($contact[$frontField])) {
$errors[] = ['error' => "Argument {$frontField} is not a string for contact {$key}", 'index' => $key, 'lang' => 'argumentNotString'];
continue 2;
}
......@@ -1293,7 +1293,7 @@ class ContactController
$contactToCreate = ['creator' => $GLOBALS['id'], 'custom_fields' => []];
foreach ($contactFields as $frontField => $backField) {
if (isset($contact[$frontField])) {
if (!empty($contact[$frontField])) {
if (strpos($frontField, 'contactCustomField_') !== false) {
$contactToCreate['custom_fields'][$backField] = $contact[$frontField];
} else {
......@@ -1307,25 +1307,32 @@ class ContactController
} else {
// If id, then we update the contact
$set = ['modification_date' => 'CURRENT_TIMESTAMP', 'custom_fields' => []];
$customsToRemove = [];
foreach ($contactFields as $frontField => $backField) {
if (isset($contact[$frontField])) {
if (!empty($contact[$frontField])) {
if (strpos($frontField, 'contactCustomField_') !== false) {
$set['custom_fields'][$backField] = $contact[$frontField];
} else {
$set[$backField] = $contact[$frontField];
}
} elseif ($contact[$frontField] === false && strpos($frontField, 'contactCustomField_') !== false) {
$customsToRemove[] = $backField;
} elseif ($contact[$frontField] === false && strpos($frontField, 'contactCustomField_') === false) {
$set[$backField] = null;
}
}
if (empty($set['custom_fields'])) {
unset($set['custom_fields']);
} else {
$oldContact = ContactModel::getById(['id' => $contact['id'], 'select' => ['custom_fields']]);
if (!empty($oldContact['custom_fields'])) {
$set['custom_fields'] = $set['custom_fields'] + json_decode($oldContact['custom_fields'], true);
$oldContact = ContactModel::getById(['id' => $contact['id'], 'select' => ['custom_fields']]);
if (!empty($oldContact['custom_fields'])) {
$set['custom_fields'] = $set['custom_fields'] + json_decode($oldContact['custom_fields'], true);
}
if (!empty($customsToRemove)) {
foreach ($customsToRemove as $item) {
unset($set['custom_fields'][$item]);
}
$set['custom_fields'] = json_encode($set['custom_fields']);
}
$set['custom_fields'] = !empty($set['custom_fields']) ? json_encode($set['custom_fields']) : '{}';
if (!empty($set)) {
ContactModel::update([
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment