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