From 1bf2242ef63a4a8c1a9fb747ba38133ba7ede1ab Mon Sep 17 00:00:00 2001 From: Guillaume Heurtier <guillaume.heurtier@maarch.org> Date: Fri, 16 Oct 2020 16:10:26 +0200 Subject: [PATCH] FEAT #14383 TIME 2:10 do not remove technical fields when updating / changing model --- .../resource/controllers/ResController.php | 44 +++++-------------- .../resource/controllers/StoreController.php | 10 ++++- 2 files changed, 20 insertions(+), 34 deletions(-) diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php index bfc3e978442..110d6a5c940 100755 --- a/src/app/resource/controllers/ResController.php +++ b/src/app/resource/controllers/ResController.php @@ -1410,39 +1410,17 @@ class ResController extends ResourceControlController } } - // Checking if model has a custom field. If yes, the customs are reset in the update, if not, we set it to an empty JSON object - $newModelHasCustomFields = false; - foreach ($newModelFields as $newModelField) { - if (strpos($newModelField, 'indexingCustomField_') !== false) { - $newModelHasCustomFields = true; - break; - } - } - - $oldModelHasCustomFields = false; - foreach ($oldFieldList as $oldModelField) { - if (strpos($oldModelField, 'indexingCustomField_') !== false) { - $oldModelHasCustomFields = true; - break; - } - } - - $postSet = []; - if ($oldModelHasCustomFields && !$newModelHasCustomFields) { - $set['custom_fields'] = '{}'; - } else { - $customFieldsToDelete = array_diff($oldFieldList, $newModelFields); - $customFieldsToDelete = array_filter($customFieldsToDelete, function ($field) { - return strpos($field, 'indexingCustomField_') !== false; - }); - $customFieldsToDelete = array_map(function ($field) { - return explode('_', $field)[1]; - }, $customFieldsToDelete); - - $postSet['custom_fields'] = 'custom_fields '; - foreach ($customFieldsToDelete as $item) { - $postSet['custom_fields'] .= " - '$item'"; - } + $customFieldsToDelete = array_diff($oldFieldList, $newModelFields); + $customFieldsToDelete = array_filter($customFieldsToDelete, function ($field) { + return strpos($field, 'indexingCustomField_') !== false; + }); + $customFieldsToDelete = array_map(function ($field) { + return explode('_', $field)[1]; + }, $customFieldsToDelete); + + $postSet = ['custom_fields' => 'custom_fields ']; + foreach ($customFieldsToDelete as $item) { + $postSet['custom_fields'] .= " - '$item'"; } if (!empty($set) || !empty($postSet)) { diff --git a/src/app/resource/controllers/StoreController.php b/src/app/resource/controllers/StoreController.php index 9e36396ea60..9daaf2aff82 100755 --- a/src/app/resource/controllers/StoreController.php +++ b/src/app/resource/controllers/StoreController.php @@ -268,7 +268,7 @@ class StoreController 'modification_date' => 'CURRENT_TIMESTAMP' ]; - $resource = ResModel::getById(['resId' => $args['resId'], 'select' => ['version', 'alt_identifier', 'external_id', 'category_id', 'type_id', 'destination']]); + $resource = ResModel::getById(['resId' => $args['resId'], 'select' => ['version', 'alt_identifier', 'external_id', 'category_id', 'type_id', 'destination', 'custom_fields']]); if (!empty($args['modelId'])) { $preparedData['model_id'] = $args['modelId']; @@ -362,6 +362,14 @@ class StoreController $args['customFields'][$key] = $value; } } + $customFields = json_decode($resource['custom_fields'], true); + $technicalCustoms = CustomFieldModel::get(['select' => ['id'], 'where' => ['mode = ?'], 'data' => ['technical']]); + $technicalCustoms = array_column($technicalCustoms, 'id'); + foreach ($technicalCustoms as $technicalCustom) { + if (!empty($customFields[$technicalCustom])) { + $args['customFields'][$technicalCustom] = $customFields[$technicalCustom]; + } + } $preparedData['custom_fields'] = json_encode($args['customFields']); } -- GitLab