From 86aff39f85475b3e6243e9f401b07562f38ca95a Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Thu, 9 Apr 2020 10:38:26 +0200 Subject: [PATCH] FEAT #13441 TIME 0:45 Refactor update template --- .../controllers/TemplateController.php | 106 ++++++------ .../app/template/TemplateControllerTest.php | 162 +++++++----------- 2 files changed, 114 insertions(+), 154 deletions(-) diff --git a/src/app/template/controllers/TemplateController.php b/src/app/template/controllers/TemplateController.php index d5ba3b5ee62..3405767ad60 100755 --- a/src/app/template/controllers/TemplateController.php +++ b/src/app/template/controllers/TemplateController.php @@ -108,7 +108,7 @@ class TemplateController } $body = $request->getParsedBody(); - if (!TemplateController::checkData(['data' => $body])) { + if (!TemplateController::controlCreateTemplate(['data' => $body])) { return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); } @@ -178,90 +178,63 @@ class TemplateController return $response->withStatus(400)->withJson(['errors' => 'Template does not exist']); } - $data = $request->getParams(); - $data['template_type'] = $template['template_type']; - $data['template_target'] = $template['template_target']; - $data['template_id'] = $aArgs['id']; + $body = $request->getParsedBody(); + $body['type'] = $template['template_type']; - if (!TemplateController::checkData(['data' => $data])) { + if (!TemplateController::controlUpdateTemplate(['data' => $body])) { return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); } - if ($data['template_type'] == 'OFFICE_HTML' && empty($data['jnlpUniqueId']) && empty($data['uploadedFile']) && empty($data['template_content']) && empty($template['template_file_name'])) { - return $response->withStatus(400)->withJson(['errors' => 'You must complete at least one of the two templates']); - } - - if ($data['template_target'] == 'acknowledgementReceipt' && !empty($data['entities'])) { - $checkEntities = TemplateModel::checkEntities(['data' => $data]); - + if ($template['template_target'] == 'acknowledgementReceipt' && !empty($body['entities'])) { + $checkEntities = TemplateModel::checkEntities(['data' => $body]); if (!empty($checkEntities)) { return $response->withJson(['checkEntities' => $checkEntities]); } } - if (($data['template_type'] == 'OFFICE' || $data['template_type'] == 'OFFICE_HTML') && (!empty($data['jnlpUniqueId']) || !empty($data['uploadedFile']))) { - if (!empty($data['jnlpUniqueId'])) { - if (!empty($data['template_style'])) { - $explodeStyle = explode(':', $data['template_style']); - $fileOnTmp = "tmp_file_{$GLOBALS['id']}_{$data['jnlpUniqueId']}." . strtolower($explodeStyle[0]); - } elseif (!empty($data['template_file_name'])) { - $explodeStyle = explode('.', $data['template_file_name']); - $fileOnTmp = "tmp_file_{$GLOBALS['id']}_{$data['jnlpUniqueId']}." . strtolower($explodeStyle[count($explodeStyle) - 1]); - } - } else { - if (empty($data['uploadedFile']['base64']) || empty($data['uploadedFile']['name'])) { - return $response->withStatus(400)->withJson(['errors' => 'Uploaded file is missing']); - } - $fileContent = base64_decode($data['uploadedFile']['base64']); - $finfo = new \finfo(FILEINFO_MIME_TYPE); - $mimeType = $finfo->buffer($fileContent); - if (!in_array($mimeType, self::AUTHORIZED_MIMETYPES)) { - return $response->withStatus(400)->withJson(['errors' => _WRONG_FILE_TYPE]); - } - - $fileOnTmp = rand() . $data['uploadedFile']['name']; - $file = fopen(CoreConfigModel::getTmpPath() . $fileOnTmp, 'w'); - fwrite($file, $fileContent); - fclose($file); - } - - $resource = file_get_contents(CoreConfigModel::getTmpPath() . $fileOnTmp); - $pathInfo = pathinfo(CoreConfigModel::getTmpPath() . $fileOnTmp); + $template = [ + 'template_label' => $body['label'], + 'template_comment' => $body['description'], + 'template_attachment_type' => $body['template_attachment_type'] + ]; + if ($body['type'] == 'TXT' || $body['type'] == 'HTML' || ($body['type'] == 'OFFICE_HTML' && !empty($body['file']['electronic']['content']))) { + $template['template_content'] = $body['type'] == 'OFFICE_HTML' ? $body['file']['electronic']['content'] : $body['file']['content']; + } + if (($body['type'] == 'OFFICE' && !empty($body['file']['content'])) || ($body['type'] == 'OFFICE_HTML' && !empty($body['file']['paper']['content']))) { + $content = $body['type'] == 'OFFICE_HTML' ? $body['file']['paper']['content'] : $body['file']['content']; + $format = $body['type'] == 'OFFICE_HTML' ? $body['file']['paper']['format'] : $body['file']['format']; $storeResult = DocserverController::storeResourceOnDocServer([ 'collId' => 'templates', 'docserverTypeId' => 'TEMPLATES', - 'encodedResource' => base64_encode($resource), - 'format' => $pathInfo['extension'] + 'encodedResource' => $content, + 'format' => $format ]); if (!empty($storeResult['errors'])) { return $response->withStatus(500)->withJson(['errors' => '[storeResource] ' . $storeResult['errors']]); } - $data['template_path'] = $storeResult['destination_dir']; - $data['template_file_name'] = $storeResult['file_destination_name']; + $template['template_path'] = $storeResult['destination_dir']; + $template['template_file_name'] = $storeResult['file_destination_name']; } TemplateAssociationModel::delete(['where' => ['template_id = ?'], 'data' => [$aArgs['id']]]); - if (!empty($data['entities']) && is_array($data['entities'])) { - foreach ($data['entities'] as $entity) { + if (!empty($body['entities']) && is_array($body['entities'])) { + foreach ($body['entities'] as $entity) { TemplateAssociationModel::create(['templateId' => $aArgs['id'], 'entityId' => $entity]); } } - unset($data['uploadedFile']); - unset($data['jnlpUniqueId']); - unset($data['entities']); - TemplateModel::update(['set' => $data, 'where' => ['template_id = ?'], 'data' => [$aArgs['id']]]); + TemplateModel::update(['set' => $template, 'where' => ['template_id = ?'], 'data' => [$aArgs['id']]]); HistoryController::add([ 'tableName' => 'templates', 'recordId' => $aArgs['id'], 'eventType' => 'UP', - 'info' => _TEMPLATE_UPDATED . " : {$data['template_label']}", + 'info' => _TEMPLATE_UPDATED . " : {$template['template_label']}", 'moduleId' => 'template', 'eventId' => 'templateModification', ]); - return $response->withJson(['success' => 'success']); + return $response->withStatus(204); } public function delete(Request $request, Response $response, array $aArgs) @@ -501,7 +474,7 @@ class TemplateController return $response->withJson(['mergedDocument' => $fileContent]); } - private static function checkData(array $aArgs) + private static function controlCreateTemplate(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['data']); ValidatorModel::arrayType($aArgs, ['data']); @@ -529,4 +502,29 @@ class TemplateController return $check; } + + private static function controlUpdateTemplate(array $args) + { + ValidatorModel::notEmpty($args, ['data']); + ValidatorModel::arrayType($args, ['data']); + + $data = $args['data']; + + $check = Validator::stringType()->notEmpty()->validate($data['label']); + $check = $check && Validator::stringType()->notEmpty()->validate($data['description']); + + if ($data['type'] == 'HTML' || $data['type'] == 'TXT') { + $check = $check && Validator::notEmpty()->validate($data['file']['content']); + } + + if ($data['type'] == 'OFFICE_HTML') { + $check = $check && Validator::stringType()->notEmpty()->validate($data['template_attachment_type']); + } + + if (!empty($data['entities'])) { + $check = $check && Validator::arrayType()->validate($data['entities']); + } + + return $check; + } } diff --git a/test/unitTests/app/template/TemplateControllerTest.php b/test/unitTests/app/template/TemplateControllerTest.php index 48391a865a7..d3eb6af534f 100755 --- a/test/unitTests/app/template/TemplateControllerTest.php +++ b/test/unitTests/app/template/TemplateControllerTest.php @@ -27,13 +27,15 @@ class TemplateControllerTest extends TestCase $request = \Slim\Http\Request::createFromEnvironment($environment); $aArgs = [ - 'template_label' => 'TEST TEMPLATE', - 'template_comment' => 'DESCRIPTION OF THIS TEMPLATE', - 'template_target' => 'sendmail', + 'label' => 'TEST TEMPLATE', + 'description' => 'DESCRIPTION OF THIS TEMPLATE', + 'target' => 'sendmail', 'template_attachment_type' => 'all', - 'template_type' => 'HTML', - 'template_content' => 'Content of this template', - 'template_datasource' => 'letterbox_attachment', + 'type' => 'HTML', + 'file' => [ + 'content' => 'Content of this template', + ], + 'datasource' => 'letterbox_attachment', 'entities' => ['DGS', 'COU'] ]; $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); @@ -50,13 +52,13 @@ class TemplateControllerTest extends TestCase $request = \Slim\Http\Request::createFromEnvironment($environment); $aArgs = [ - 'template_label' => '', - 'template_comment' => '', - 'template_target' => 'sendmail', + 'label' => '', + 'description' => '', + 'target' => 'sendmail', 'template_attachment_type' => 'all', - 'template_type' => 'HTML', - 'template_content' => 'Content of this template', - 'template_datasource' => 'letterbox_attachment' + 'type' => 'HTML', + 'content' => 'Content of this template', + 'datasource' => 'letterbox_attachment' ]; $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); @@ -93,13 +95,17 @@ class TemplateControllerTest extends TestCase $request = \Slim\Http\Request::createFromEnvironment($environment); $aArgs = [ - 'template_label' => 'TEST TEMPLATE AR', - 'template_comment' => 'DESCRIPTION OF THIS TEMPLATE', - 'template_target' => 'acknowledgementReceipt', + 'label' => 'TEST TEMPLATE AR', + 'description' => 'DESCRIPTION OF THIS TEMPLATE', + 'target' => 'acknowledgementReceipt', 'template_attachment_type' => 'ARsimple', - 'template_type' => 'OFFICE_HTML', - 'template_content' => 'Content of this template', - 'template_datasource' => 'letterbox_attachment', + 'type' => 'OFFICE_HTML', + 'file' => [ + 'electronic' => [ + 'content' => 'Content of this template', + ] + ], + 'datasource' => 'letterbox_attachment', 'entities' => ['TST'] ]; @@ -116,16 +122,16 @@ class TemplateControllerTest extends TestCase $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.docx', - 'base64' => $encodedFile + 'label' => 'TEST TEMPLATE AR OFFICE', + 'description' => 'DESCRIPTION OF THIS TEMPLATE', + 'target' => 'OFFICE', + 'template_attachment_type' => 'ARsimple', + 'type' => 'OFFICE', + 'datasource' => 'letterbox_attachment', + 'entities' => ['TST', 'BAD'], + 'file' => [ + 'content' => $encodedFile, + 'format' => 'docx' ] ]; $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); @@ -184,13 +190,17 @@ class TemplateControllerTest extends TestCase $request = \Slim\Http\Request::createFromEnvironment($environment); $aArgs = [ - 'template_label' => 'TEST TEMPLATE AR FAIL', - 'template_comment' => 'DESCRIPTION OF THIS TEMPLATE', - 'template_target' => 'acknowledgementReceipt', + 'label' => 'TEST TEMPLATE AR FAIL', + 'description' => 'DESCRIPTION OF THIS TEMPLATE', + 'target' => 'acknowledgementReceipt', 'template_attachment_type' => 'ARsimple', - 'template_type' => 'OFFICE_HTML', - 'template_content' => 'Content of this template', - 'template_datasource' => 'letterbox_attachment', + 'type' => 'OFFICE_HTML', + 'file' => [ + 'electronic' => [ + 'content' => 'Content of this template', + ] + ], + 'datasource' => 'letterbox_attachment', 'entities' => ['TST', 'BAD'] ]; $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); @@ -205,59 +215,18 @@ class TemplateControllerTest extends TestCase $request = \Slim\Http\Request::createFromEnvironment($environment); $aArgs = [ - 'template_label' => 'TEST TEMPLATE AR FAIL', - 'template_comment' => 'DESCRIPTION OF THIS TEMPLATE', - 'template_target' => 'acknowledgementReceipt', + 'label' => 'TEST TEMPLATE AR FAIL', + 'description' => 'DESCRIPTION OF THIS TEMPLATE', + 'target' => 'acknowledgementReceipt', 'template_attachment_type' => 'ARsimple', - 'template_type' => 'OFFICE_HTML', - 'template_content' => '', - 'template_datasource' => 'letterbox_attachment', + 'type' => 'OFFICE_HTML', + 'datasource' => 'letterbox_attachment', 'entities' => ['TST', 'BAD'] ]; $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); $response = $templates->create($fullRequest, new \Slim\Http\Response()); $this->assertSame(400, $response->getStatusCode()); - $responseBody = json_decode((string)$response->getBody()); - - $this->assertSame("You must complete at least one of the two templates", $responseBody->errors); - - // File missing - $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' => '' - ]; - $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); - - $response = $templates->create($fullRequest, new \Slim\Http\Response()); - $this->assertSame(400, $response->getStatusCode()); - $responseBody = json_decode((string)$response->getBody(), true); - - $this->assertSame("Template file is missing", $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->create($fullRequest, new \Slim\Http\Response()); - $this->assertSame(400, $response->getStatusCode()); - $responseBody = json_decode((string)$response->getBody(), true); - - $this->assertSame("Uploaded file is missing", $responseBody['errors']); // Fail $GLOBALS['login'] = 'bbain'; @@ -342,22 +311,18 @@ class TemplateControllerTest extends TestCase $request = \Slim\Http\Request::createFromEnvironment($environment); $aArgs = [ - 'template_label' => 'TEST TEMPLATE UPDATE', - 'template_comment' => 'DESCRIPTION OF THIS TEMPLATE UPDATE', - 'template_target' => 'sendmail', + 'label' => 'TEST TEMPLATE UPDATE', + 'description' => 'DESCRIPTION OF THIS TEMPLATE UPDATE', 'template_attachment_type' => 'all', - 'template_type' => 'HTML', - 'template_content' => 'Content of this template', - 'template_datasource' => 'letterbox_attachment', + 'file' => [ + 'content' => 'Content of this template', + ], 'entities' => ['TST_AR'] ]; $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); $response = $templates->update($fullRequest, new \Slim\Http\Response(), ['id' => self::$id]); - $this->assertSame(200, $response->getStatusCode()); - $responseBody = json_decode((string)$response->getBody()); - - $this->assertSame("success", $responseBody->success); + $this->assertSame(204, $response->getStatusCode()); // READ $environment = \Slim\Http\Environment::mock(['REQUEST_METHOD' => 'GET']); @@ -382,16 +347,13 @@ class TemplateControllerTest extends TestCase $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.docx', - 'base64' => $encodedFile + 'label' => 'TEST TEMPLATE AR OFFICE', + 'description' => 'DESCRIPTION OF THIS TEMPLATE', + 'template_attachment_type' => 'ARsimple', + 'entities' => ['TST', 'BAD'], + 'file' => [ + 'content' => $encodedFile, + 'format' => 'docx' ] ]; $fullRequest = \httpRequestCustom::addContentInBody($aArgs, $request); -- GitLab