From aa9acb558fa4e3f733d7cb6d438e9d9dceb61262 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 9 Apr 2020 15:56:33 +0200
Subject: [PATCH] FEAT #13441 TIME 1:15 Get template content + some fixes

---
 rest/index.php                                |  1 +
 .../controllers/OnlyOfficeController.php      |  3 ++
 .../controllers/TemplateController.php        | 32 ++++++++++++++++
 .../app/template/TemplateControllerTest.php   | 37 +++++--------------
 4 files changed, 45 insertions(+), 28 deletions(-)

diff --git a/rest/index.php b/rest/index.php
index a1b04529978..9f703c593dd 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -461,6 +461,7 @@ $app->delete('/tags/{tagId}/link/{id}', \Tag\controllers\TagController::class .
 $app->get('/templates', \Template\controllers\TemplateController::class . ':get');
 $app->post('/templates', \Template\controllers\TemplateController::class . ':create');
 $app->get('/templates/{id}/details', \Template\controllers\TemplateController::class . ':getDetailledById');
+$app->get('/templates/{id}/content', \Template\controllers\TemplateController::class . ':getContentById');
 $app->put('/templates/{id}', \Template\controllers\TemplateController::class . ':update');
 $app->delete('/templates/{id}', \Template\controllers\TemplateController::class . ':delete');
 $app->post('/templates/{id}/duplicate', \Template\controllers\TemplateController::class . ':duplicate');
diff --git a/src/app/contentManagement/controllers/OnlyOfficeController.php b/src/app/contentManagement/controllers/OnlyOfficeController.php
index 80aea6bcd9c..24c5e4a9434 100644
--- a/src/app/contentManagement/controllers/OnlyOfficeController.php
+++ b/src/app/contentManagement/controllers/OnlyOfficeController.php
@@ -83,6 +83,9 @@ class OnlyOfficeController
             }
 
             $path = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $template['template_path']) . $template['template_file_name'];
+            if (!is_file($path)) {
+                return $response->withStatus(400)->withJson(['errors' => 'Template does not exist on docserver']);
+            }
             $fileContent = file_get_contents($path);
         } elseif ($body['objectType'] == 'resourceCreation' || $body['objectType'] == 'attachmentCreation') {
             $docserver = DocserverModel::getCurrentDocserver(['typeId' => 'TEMPLATES', 'collId' => 'templates', 'select' => ['path_template']]);
diff --git a/src/app/template/controllers/TemplateController.php b/src/app/template/controllers/TemplateController.php
index 9532508a12b..04363887e44 100755
--- a/src/app/template/controllers/TemplateController.php
+++ b/src/app/template/controllers/TemplateController.php
@@ -15,6 +15,7 @@
 namespace Template\controllers;
 
 use ContentManagement\controllers\MergeController;
+use Convert\controllers\ConvertPdfController;
 use Docserver\controllers\DocserverController;
 use Docserver\models\DocserverModel;
 use Group\controllers\PrivilegeController;
@@ -279,6 +280,37 @@ class TemplateController
         return $response->withJson(['success' => 'success']);
     }
 
+    public function getContentById(Request $request, Response $response, array $aArgs)
+    {
+        if (!PrivilegeController::hasPrivilege(['privilegeId' => 'admin_templates', 'userId' => $GLOBALS['id']])) {
+            return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
+        }
+
+        $template = TemplateModel::getById(['id' => $aArgs['id']]);
+        if (empty($template)) {
+            return $response->withStatus(400)->withJson(['errors' => 'Template does not exist']);
+        }
+        if (empty($template['template_path'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Template has no office content']);
+        }
+
+        $docserver = DocserverModel::getCurrentDocserver(['typeId' => 'TEMPLATES', 'collId' => 'templates', 'select' => ['path_template']]);
+        $pathToTemplate = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $template['template_path']) . $template['template_file_name'];
+        $extension = pathinfo($pathToTemplate, PATHINFO_EXTENSION);
+
+        if (!ConvertPdfController::canConvert(['extension' => $extension])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Template can not be converted']);
+        }
+
+        $resource =  file_get_contents($pathToTemplate);
+        $convertion = ConvertPdfController::convertFromEncodedResource(['encodedResource' => base64_encode($resource), 'extension' => $extension]);
+        if (!empty($convertion['errors'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Template convertion failed : ' . $convertion['errors']]);
+        }
+
+        return $response->withJson(['encodedDocument' => $convertion['encodedResource']]);
+    }
+
     public function duplicate(Request $request, Response $response, array $aArgs)
     {
         if (!PrivilegeController::hasPrivilege(['privilegeId' => 'admin_templates', 'userId' => $GLOBALS['id']])) {
diff --git a/test/unitTests/app/template/TemplateControllerTest.php b/test/unitTests/app/template/TemplateControllerTest.php
index cbd81ed4c21..5b162e67b1a 100755
--- a/test/unitTests/app/template/TemplateControllerTest.php
+++ b/test/unitTests/app/template/TemplateControllerTest.php
@@ -403,38 +403,19 @@ class TemplateControllerTest extends TestCase
 
         $this->assertSame('Template does not exist', $responseBody->errors);
 
-        $aArgs = [
-            'template_label'            => 'TEST TEMPLATE AR OFFICE',
-            'template_comment'          => 'DESCRIPTION OF THIS TEMPLATE',
-            'template_target'           => 'OFFICE',
-            'template_attachment_type'  => 'ARsimple',
-            'template_type'             => 'OFFICE',
-            'template_datasource'       => 'letterbox_attachment',
-            'entities'                  => ['TST', 'BAD'],
-            'uploadedFile'              => 'missing base64 + name'
-        ];
-        $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-
-        $response     = $templates->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id2]);
-        $this->assertSame(400, $response->getStatusCode());
-        $responseBody = json_decode((string)$response->getBody(), true);
-
-        $this->assertSame("Uploaded file is missing", $responseBody['errors']);
-
         $fileContent = file_get_contents('test/unitTests/samples/test.txt');
         $encodedFile = base64_encode($fileContent);
 
         $aArgs = [
-            'template_label'           => 'TEST TEMPLATE AR OFFICE',
-            'template_comment'         => 'DESCRIPTION OF THIS TEMPLATE',
-            'template_target'          => 'OFFICE',
-            'template_attachment_type' => 'ARsimple',
-            'template_type'            => 'OFFICE',
-            'template_datasource'      => 'letterbox_attachment',
-            'entities'                 => ['TST', 'BAD'],
-            'uploadedFile'             => [
-                'name'   => 'test_template.txt',
-                'base64' => $encodedFile
+            'label'                     => 'TEST TEMPLATE AR OFFICE',
+            'description'               => 'DESCRIPTION OF THIS TEMPLATE',
+            'target'                    => 'OFFICE',
+            'template_attachment_type'  => 'ARsimple',
+            'type'                      => 'OFFICE',
+            'entities'                  => ['TST', 'BAD'],
+            'file'                      => [
+                'content'               => $encodedFile,
+                'format'                => 'txt'
             ]
         ];
         $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request);
-- 
GitLab