From 6d902898f3e903c31d505d60b9cbd95c01827e75 Mon Sep 17 00:00:00 2001 From: Guillaume Heurtier <guillaume.heurtier@maarch.org> Date: Thu, 14 May 2020 17:10:01 +0200 Subject: [PATCH] FEAT #13827 TIME 4:00 reset fields when changing model --- .../resource/controllers/ResController.php | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php index a08507f7f1f..643d7bbb890 100755 --- a/src/app/resource/controllers/ResController.php +++ b/src/app/resource/controllers/ResController.php @@ -260,7 +260,57 @@ class ResController extends ResourceControlController return $response->withStatus(400)->withJson(['errors' => $control['errors']]); } - $resource = ResModel::getById(['resId' => $args['resId'], 'select' => ['alt_identifier', 'filename', 'docserver_id', 'path', 'fingerprint', 'version']]); + $resource = ResModel::getById(['resId' => $args['resId'], 'select' => ['alt_identifier', 'filename', 'docserver_id', 'path', 'fingerprint', 'version', 'model_id', 'custom_fields']]); + + if ($resource['model_id'] != $body['modelId']) { + $resourceModelFields = IndexingModelFieldModel::get([ + 'select' => ['identifier'], + 'where' => ['model_id = ?'], + 'data' => [$resource['model_id']] + ]); + $resourceModelFields = array_column($resourceModelFields, 'identifier'); + + $newModelFields = IndexingModelFieldModel::get([ + 'select' => ['identifier'], + 'where' => ['model_id = ?'], + 'data' => [$body['modelId']] + ]); + $newModelFields = array_column($newModelFields, 'identifier'); + + $set = []; + $setToNull = [ + 'confidentiality' => 'confidentiality', + 'admission_date' => 'arrivalDate', + 'departure_date' => 'departureDate', + 'doc_date' => 'documentDate', + 'process_limit_date' => 'processLimitDate', + 'initiator' => 'initiator', + 'destination' => 'destination', + 'priority' => 'priority' + ]; + foreach ($setToNull as $key => $field) { + if (in_array($field, $resourceModelFields) && !in_array($field, $newModelFields)) { + $set[$key] = null; + } + } + + $newModelHasCustomFields = false; + foreach ($newModelFields as $newModelField) { + if (strpos($newModelField, 'indexingCustomField_') !== false) { + $newModelHasCustomFields = true; + break; + } + } + + if (!empty($resource['custom_fields']) && !$newModelHasCustomFields) { + $set['custom_fields'] = '{}'; + } + + if (!empty($set)) { + ResModel::update(['set' => $set, 'where' => ['res_id = ?'], 'data' => [$args['resId']]]); + } + } + if (!empty($resource['filename']) && !empty($body['encodedFile'])) { AdrModel::createDocumentAdr([ 'resId' => $args['resId'], -- GitLab