From 362202e67eddd5ac443cc2726b36f9d043c7f8fc Mon Sep 17 00:00:00 2001 From: Guillaume Heurtier <guillaume.heurtier@maarch.org> Date: Thu, 30 Jan 2020 11:29:44 +0100 Subject: [PATCH] FEAT #12280 TIME 0:30 fix emails json error if no emails + some refactor --- .../ResourceDataExportController.php | 54 +++++++++---------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/src/app/resource/controllers/ResourceDataExportController.php b/src/app/resource/controllers/ResourceDataExportController.php index 988875bcf90..945d8b17886 100644 --- a/src/app/resource/controllers/ResourceDataExportController.php +++ b/src/app/resource/controllers/ResourceDataExportController.php @@ -145,7 +145,7 @@ class ResourceDataExportController 'orderBy' => ['creation_date desc'] ]); - if (count($attachments) < count($attachmentsIds)) { // TODO do not count + if (count($attachments) < count($attachmentsIds)) { return $response->withStatus(400)->withJson(['errors' => 'Attachment(s) not found']); } @@ -223,27 +223,26 @@ class ResourceDataExportController return $response->withStatus(400)->withJson(['errors' => 'Acknowledgement Receipt id is not an integer']); } } - $acknowledgementReceiptsIds = $resource['acknowledgementReceipts']; - } else { - $acknowledgementReceiptsIds = AcknowledgementReceiptModel::get([ - 'select' => ['id'], - 'where' => ['res_id = ?'], - 'data' => [$resource['resId']] - ]); - $acknowledgementReceiptsIds = array_column($acknowledgementReceiptsIds, 'id'); - } - if (!empty($acknowledgementReceiptsIds)) { $acknowledgementReceipts = AcknowledgementReceiptModel::getByIds([ 'select' => ['id', 'res_id', 'format', 'contact_id', 'user_id', 'creation_date', 'send_date', 'docserver_id', 'path', 'filename', 'fingerprint'], - 'ids' => $acknowledgementReceiptsIds + 'ids' => $resource['acknowledgementReceipts'] ]); - if (count($acknowledgementReceipts) < count($acknowledgementReceiptsIds)) { + if (count($acknowledgementReceipts) < count($resource['acknowledgementReceipts'])) { return $response->withStatus(400)->withJson(['errors' => 'Acknowledgement Receipt(s) not found']); } + } else { + $acknowledgementReceipts = AcknowledgementReceiptModel::get([ + 'select' => ['id', 'res_id', 'format', 'contact_id', 'user_id', 'creation_date', 'send_date', 'docserver_id', 'path', + 'filename', 'fingerprint'], + 'where' => ['res_id = ?'], + 'data' => [$resource['resId']] + ]); + } + if (!empty($acknowledgementReceipts)) { foreach ($acknowledgementReceipts as $acknowledgementReceipt) { if ($acknowledgementReceipt['res_id'] != $resource['resId']) { return $response->withStatus(400)->withJson(['errors' => 'Acknowledgement Receipt not linked to resource']); @@ -273,29 +272,26 @@ class ResourceDataExportController return $response->withStatus(400)->withJson(['errors' => 'Email id is not an integer']); } } - $emailsIds = $resource['emails']; - } else { - $emailsIds = EmailModel::get([ - 'select' => ['id'], - 'where' => ["cast(document->'id' as INT) = ? "], // TODO might not work if no emails in table (or if no 'id' in document ?) -> if document is not null ? - 'data' => [$resource['resId']] - ]); - $emailsIds = array_column($emailsIds, 'id'); - } - - if (!empty($emailsIds)) { - $emailsModel = EmailModel::get([ + $emails = EmailModel::get([ 'select' => ['id', 'user_id', 'sender', 'recipients', 'cc', 'cci', 'object', 'body', 'document', 'send_date'], 'where' => ['id in (?)'], - 'data' => [$emailsIds], + 'data' => [$resource['emails']], 'orderBy' => ['creation_date desc'] ]); - - if (count($emailsModel) < count($emailsIds)) { + if (count($emails) < count($resource['emails'])) { return $response->withStatus(400)->withJson(['errors' => 'Email(s) not found']); } + } else { + $emails = EmailModel::get([ + 'select' => ['id', 'user_id', 'sender', 'recipients', 'cc', 'cci', 'object', 'body', 'document', 'send_date'], + 'where' => ["cast(document->>'id' as INT) = ? "], + 'data' => [$resource['resId']], + 'orderBy' => ['creation_date desc'] + ]); + } - foreach ($emailsModel as $email) { + if (!empty($emails)) { + foreach ($emails as $email) { $emailDocument = json_decode($email['document'], true); if (!empty($emailDocument['id']) && $emailDocument['id'] != $resource['resId']) { return $response->withStatus(400)->withJson(['errors' => 'Email not linked to resource']); -- GitLab