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