From a4e0d7f1da8975f973f6a9d3286f0897edd48910 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Fri, 11 Oct 2019 11:15:35 +0100
Subject: [PATCH] FEAT #11875 TIME 4:15 rest for new scanToMaarch (old mcc)

---
 rest/index.php                                |  1 +
 .../AcknowledgementReceiptTrait.php           |  3 +-
 .../controllers/ConvertPdfController.php      | 50 +++++++++++++++----
 3 files changed, 43 insertions(+), 11 deletions(-)

diff --git a/rest/index.php b/rest/index.php
index 2a0dd9e7d14..2ea0763fb7a 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -130,6 +130,7 @@ $app->put('/contactsFilling', \Contact\controllers\ContactController::class . ':
 
 //Convert
 $app->post('/convertedFile', \Convert\controllers\ConvertPdfController::class . ':convertedFile');
+$app->get('/convertedFile/{filename}', \Convert\controllers\ConvertPdfController::class . ':getConvertedFileByFilename');
 
 //CustomFields
 $app->get('/customFields', \CustomField\controllers\CustomFieldController::class . ':get');
diff --git a/src/app/action/controllers/AcknowledgementReceiptTrait.php b/src/app/action/controllers/AcknowledgementReceiptTrait.php
index 883879f3040..0cf78136681 100644
--- a/src/app/action/controllers/AcknowledgementReceiptTrait.php
+++ b/src/app/action/controllers/AcknowledgementReceiptTrait.php
@@ -114,7 +114,8 @@ trait AcknowledgementReceiptTrait
                     'path'  => $pathToDocument,
                     'data'  => ['resId' => $aArgs['resId'], 'contactAddressId' => $contactToProcess, 'userId' => $currentUser['id']]
                 ]);
-                $mergedDocument['encodedDocument'] = ConvertPdfController::convertFromEncodedResource(['encodedResource' => $mergedDocument['encodedDocument']]);
+                $encodedDocument = ConvertPdfController::convertFromEncodedResource(['encodedResource' => $mergedDocument['encodedDocument']]);
+                $mergedDocument['encodedDocument'] = $encodedDocument["encodedResource"];
                 $format = 'pdf';
 
                 if (!empty($mergedDocument['encodedDocument']['errors'])) {
diff --git a/src/app/convert/controllers/ConvertPdfController.php b/src/app/convert/controllers/ConvertPdfController.php
index 070ada7f624..f356891fb62 100755
--- a/src/app/convert/controllers/ConvertPdfController.php
+++ b/src/app/convert/controllers/ConvertPdfController.php
@@ -144,10 +144,10 @@ class ConvertPdfController
     public static function convertFromEncodedResource(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['encodedResource']);
-        ValidatorModel::stringType($aArgs, ['encodedResource']);
+        ValidatorModel::stringType($aArgs, ['encodedResource', 'context']);
 
         $tmpPath = CoreConfigModel::getTmpPath();
-        $tmpFilename = 'converting' . rand();
+        $tmpFilename = 'converting' . rand() . '_' . rand();
 
         file_put_contents($tmpPath . $tmpFilename, base64_decode($aArgs['encodedResource']));
 
@@ -159,11 +159,19 @@ class ConvertPdfController
             return ['errors' => '[ConvertPdf]  Conversion failed ! '. implode(" ", $output)];
         }
 
-        $resource = file_get_contents("{$tmpPath}{$tmpFilename}.pdf");
         unlink("{$tmpPath}{$tmpFilename}");
-        unlink("{$tmpPath}{$tmpFilename}.pdf");
 
-        return base64_encode($resource);
+        $resource = file_get_contents("{$tmpPath}{$tmpFilename}.pdf");
+
+        $aReturn = [];
+        $aReturn["encodedResource"] = base64_encode($resource);
+
+        if ($aArgs['context'] == 'scan') {
+            $aReturn["tmpFilename"] = $tmpFilename.'.pdf';
+        } else {
+            unlink("{$tmpPath}{$tmpFilename}.pdf");
+        }
+        return $aReturn;
     }
 
     public static function getConvertedPdfById(array $aArgs)
@@ -224,10 +232,10 @@ class ConvertPdfController
         $body = $request->getParsedBody();
 
         if (!Validator::notEmpty()->validate($body['name'])) {
-            return $response->withStatus(400)->withJson(['errors' => 'Body name is not an integer']);
+            return $response->withStatus(400)->withJson(['errors' => 'Body name is empty']);
         }
         if (!Validator::notEmpty()->validate($body['base64'])) {
-            return $response->withStatus(400)->withJson(['errors' => 'Body base64 is not an integer']);
+            return $response->withStatus(400)->withJson(['errors' => 'Body base64 is empty']);
         }
         
         $file     = base64_decode($body['base64']);
@@ -237,7 +245,15 @@ class ConvertPdfController
         $size     = strlen($file);
 
         if (strtolower($ext) == 'pdf' && strtolower($mimeType) == 'application/pdf') {
-            return $response->withJson(['encodedResource' => $body['base64']]);
+            $return['encodedResource'] = $body['base64'];
+            if ($body['context'] == 'scan') {
+                $tmpPath = CoreConfigModel::getTmpPath();
+                $tmpFilename = 'scan_converting' . rand() . '.pdf';
+        
+                file_put_contents($tmpPath . $tmpFilename, $file);
+                $return['tmpFilename'] = $tmpFilename;
+            }
+            return $response->withJson($return);
         } else {
             $fileAccepted  = StoreController::isFileAllowed(['extension' => $ext, 'type' => $mimeType]);
             $maxFilesizeMo = ini_get('upload_max_filesize');
@@ -251,12 +267,26 @@ class ConvertPdfController
                 return $response->withStatus(400)->withJson(['errors' => 'File accepted but can not be converted in pdf']);
             }
     
-            $convertion = ConvertPdfController::convertFromEncodedResource(['encodedResource' => $body['base64']]);
+            $convertion = ConvertPdfController::convertFromEncodedResource(['encodedResource' => $body['base64'], 'context' => $body['context']]);
             if (empty($convertion['errors'])) {
-                return $response->withJson(['encodedResource' => $convertion]);
+                return $response->withJson($convertion);
             } else {
                 return $response->withStatus(400)->withJson($convertion);
             }
         }
     }
+
+    public function getConvertedFileByFilename(Request $request, Response $response, array $aArgs)
+    {
+        $tmpPath = CoreConfigModel::getTmpPath();
+
+        if (!file_exists("{$tmpPath}{$aArgs['filename']}")) {
+            return $response->withStatus(400)->withJson(['errors' => 'File does not exists']);
+        }
+
+        $resource = file_get_contents("{$tmpPath}{$aArgs['filename']}");
+        unlink("{$tmpPath}{$aArgs['filename']}");
+        
+        return $response->withJson(['encodedResource' => base64_encode($resource)]);
+    }
 }
-- 
GitLab