From 4b785b00aa1c471efc534d8c68356ff36bbb9ead Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Fri, 14 Feb 2020 11:46:25 +0100 Subject: [PATCH] FEAT #12072 TIME 0:35 Get signed attachments or resource when sending an email --- migration/20.03/2003.sql | 1 + .../controllers/AttachmentController.php | 29 ++++++++++++------- src/app/email/controllers/EmailController.php | 7 ++--- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/migration/20.03/2003.sql b/migration/20.03/2003.sql index a558374af85..dc7ed613318 100644 --- a/migration/20.03/2003.sql +++ b/migration/20.03/2003.sql @@ -809,6 +809,7 @@ DO $$ BEGIN ALTER TABLE shippings ALTER COLUMN document_type SET NOT NULL; END IF; END$$; +ALTER TABLE shippings DROP COLUMN IF EXISTS recipients; ALTER TABLE shippings ADD COLUMN recipients jsonb DEFAULT '[]'; TRUNCATE TABLE indexing_models; diff --git a/src/app/attachment/controllers/AttachmentController.php b/src/app/attachment/controllers/AttachmentController.php index e30e2a7a65c..e573243b4c9 100755 --- a/src/app/attachment/controllers/AttachmentController.php +++ b/src/app/attachment/controllers/AttachmentController.php @@ -566,16 +566,26 @@ class AttachmentController return $response->withJson(['attachmentsTypes' => $attachmentsTypes]); } - public static function getEncodedDocument(array $aArgs) + public static function getEncodedDocument(array $args) { - ValidatorModel::notEmpty($aArgs, ['id']); - ValidatorModel::intVal($aArgs, ['id']); - ValidatorModel::boolType($aArgs, ['original']); - - $document = AttachmentModel::getById(['select' => ['docserver_id', 'path', 'filename', 'title'], 'id' => $aArgs['id']]); - - if (empty($aArgs['original'])) { - $convertedDocument = ConvertPdfController::getConvertedPdfById(['resId' => $aArgs['id'], 'collId' => 'attachments_coll']); + ValidatorModel::notEmpty($args, ['id']); + ValidatorModel::intVal($args, ['id']); + ValidatorModel::boolType($args, ['original']); + + $document = AttachmentModel::getById(['select' => ['docserver_id', 'path', 'filename', 'title', 'status'], 'id' => $args['id']]); + + if (empty($args['original'])) { + if ($document['status'] == 'SIGN') { + $signedAttachment = AttachmentModel::get([ + 'select' => ['res_id'], + 'where' => ['origin = ?', 'status not in (?)', 'attachment_type = ?'], + 'data' => ["{$args['id']},res_attachments", ['OBS', 'DEL', 'TMP', 'FRZ'], 'signed_response'] + ]); + if (!empty($signedAttachment[0])) { + $args['id'] = $signedAttachment[0]['res_id']; + } + } + $convertedDocument = ConvertPdfController::getConvertedPdfById(['resId' => $args['id'], 'collId' => 'attachments_coll']); if (empty($convertedDocument['errors'])) { $document['docserver_id'] = $convertedDocument['docserver_id']; @@ -606,7 +616,6 @@ class AttachmentController return ['errors' => 'Document not found on docserver']; } - $encodedDocument = base64_encode($fileContent); if (!empty($document['title'])) { diff --git a/src/app/email/controllers/EmailController.php b/src/app/email/controllers/EmailController.php index 130ef803387..9cf71611c52 100644 --- a/src/app/email/controllers/EmailController.php +++ b/src/app/email/controllers/EmailController.php @@ -644,7 +644,7 @@ class EmailController ]); if ($fingerprint != $messageExchange['fingerprint']) { - $email['document'] = (array)json_decode($email['document']); + $email['document'] = json_decode($email['document'], true); return ['errors' => 'Pb with fingerprint of document. ResId master : ' . $email['document']['id']]; } @@ -660,7 +660,7 @@ class EmailController } } else { if (!empty($email['document'])) { - $email['document'] = (array)json_decode($email['document']); + $email['document'] = json_decode($email['document'], true); if ($email['document']['isLinked']) { $encodedDocument = ResController::getEncodedDocument(['resId' => $email['document']['id'], 'original' => $email['document']['original']]); if (empty($encodedDocument['errors'])) { @@ -668,9 +668,7 @@ class EmailController } } if (!empty($email['document']['attachments'])) { - $email['document']['attachments'] = (array)$email['document']['attachments']; foreach ($email['document']['attachments'] as $attachment) { - $attachment = (array)$attachment; $encodedDocument = AttachmentController::getEncodedDocument(['id' => $attachment['id'], 'original' => $attachment['original']]); if (empty($encodedDocument['errors'])) { $phpmailer->addStringAttachment(base64_decode($encodedDocument['encodedDocument']), $encodedDocument['fileName']); @@ -678,7 +676,6 @@ class EmailController } } if (!empty($email['document']['notes'])) { - $email['document']['notes'] = (array)$email['document']['notes']; $encodedDocument = NoteController::getEncodedPdfByIds(['ids' => $email['document']['notes']]); if (empty($encodedDocument['errors'])) { $phpmailer->addStringAttachment(base64_decode($encodedDocument['encodedDocument']), 'notes.pdf'); -- GitLab