diff --git a/rest/index.php b/rest/index.php index d5096b871e14f080d4a5fd2569c0012f2db5d706..2e486d22803105346c699f773e1e6cc9d10f7b85 100755 --- a/rest/index.php +++ b/rest/index.php @@ -537,6 +537,7 @@ $app->post('/scriptNotification', \Notification\controllers\NotificationSchedule //External MessageExchanges $app->get('/messageExchanges/{id}', \MessageExchange\controllers\MessageExchangeController::class . ':getById'); +$app->get('/messageExchanges/{id}/archiveContent', \MessageExchange\controllers\MessageExchangeController::class . ':getArchiveContentById'); $app->post('/saveNumericPackage', \MessageExchange\controllers\ReceiveMessageExchangeController::class . ':saveMessageExchange'); $app->post('/saveMessageExchangeReturn', \MessageExchange\controllers\ReceiveMessageExchangeController::class . ':saveMessageExchangeReturn'); $app->post('/saveMessageExchangeReview', \MessageExchange\controllers\MessageExchangeReviewController::class . ':saveMessageExchangeReview'); diff --git a/src/app/external/messageExchange/controllers/MessageExchangeController.php b/src/app/external/messageExchange/controllers/MessageExchangeController.php index 1dd2aca52e705a8c6b9e9fa4116acf5c764373b4..145c5f7102f27d8e25deadc238a36892d5e3c515 100644 --- a/src/app/external/messageExchange/controllers/MessageExchangeController.php +++ b/src/app/external/messageExchange/controllers/MessageExchangeController.php @@ -14,6 +14,7 @@ namespace MessageExchange\controllers; +use Docserver\models\DocserverModel; use MessageExchange\models\MessageExchangeModel; use Resource\controllers\ResController; use Respect\Validation\Validator; @@ -188,4 +189,37 @@ class MessageExchangeController return $response->withJson(['messageExchange' => $messageExchange]); } + + public static function getArchiveContentById(Request $request, Response $response, array $args) + { + if (!Validator::stringType()->validate($args['id'])) { + return $response->withStatus(400)->withJson(['errors' => 'Query param id is not a string']); + } + + $message = MessageExchangeModel::getMessageByIdentifier([ + 'select' => ['docserver_id', 'path', 'filename', 'res_id_master'], + 'messageId' => $args['id'] + ]); + if (empty($message)) { + return $response->withStatus(400)->withJson(['errors' => 'Message not found']); + } + + if (empty($message['res_id_master']) || !ResController::hasRightByResId(['resId' => [$message['res_id_master']], 'userId' => $GLOBALS['id']])) { + return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']); + } + + $docserver = DocserverModel::getByDocserverId(['docserverId' => $message['docserver_id'], 'select' => ['path_template', 'docserver_type_id']]); + if (empty($docserver['path_template']) || !file_exists($docserver['path_template'])) { + return $response->withStatus(400)->withJson(['errors' => 'Docserver does not exist']); + } + + $pathToDocument = $docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $message['path']) . $message['filename']; + if (!file_exists($pathToDocument)) { + return $response->withStatus(400)->withJson(['errors' => 'Document not found on docserver']); + } + + $fileContent = file_get_contents($pathToDocument); + + return $response->withJson(['encodedArchive' => base64_encode($fileContent)]); + } }