From 5f808edaef4d23b8f4289fcaa6011f0d6033db58 Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Thu, 14 Nov 2019 16:30:46 +0100 Subject: [PATCH] FEAT #11691 TIME 0:25 Get templates by res id --- rest/index.php | 1 + .../controllers/TemplateController.php | 57 +++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/rest/index.php b/rest/index.php index c799c79c10a..8a29f8f62b9 100755 --- a/rest/index.php +++ b/rest/index.php @@ -324,6 +324,7 @@ $app->get('/resources/{resId}/isAllowed', \Resource\controllers\ResController::c $app->get('/resources/{resId}/attachments', \Attachment\controllers\AttachmentController::class . ':getByResId'); $app->get('/resources/{resId}/emails', \Email\controllers\EmailController::class . ':getByResId'); $app->get('/resources/{resId}/notes', \Note\controllers\NoteController::class . ':getByResId'); +$app->get('/resources/{resId}/templates', \Template\controllers\TemplateController::class . ':getByResId'); $app->get('/res/{resId}/acknowledgementReceipt/{id}', \AcknowledgementReceipt\controllers\AcknowledgementReceiptController::class . ':getAcknowledgementReceipt'); $app->put('/res/resource/status', \Resource\controllers\ResController::class . ':updateStatus'); $app->post('/res/list', \Resource\controllers\ResController::class . ':getList'); diff --git a/src/app/template/controllers/TemplateController.php b/src/app/template/controllers/TemplateController.php index b0b6983eb80..48383e20090 100755 --- a/src/app/template/controllers/TemplateController.php +++ b/src/app/template/controllers/TemplateController.php @@ -18,6 +18,8 @@ use Docserver\controllers\DocserverController; use Docserver\models\DocserverModel; use Group\controllers\PrivilegeController; use History\controllers\HistoryController; +use Resource\controllers\ResController; +use Resource\models\ResModel; use Respect\Validation\Validator; use Slim\Http\Request; use Slim\Http\Response; @@ -27,6 +29,7 @@ use Template\models\TemplateAssociationModel; use Template\models\TemplateModel; use Attachment\models\AttachmentModel; use Entity\models\EntityModel; +use User\models\UserModel; class TemplateController { @@ -380,6 +383,60 @@ class TemplateController ]); } + public function getByResId(Request $request, Response $response, array $args) + { + if (!Validator::intVal()->validate($args['resId'])) { + return $response->withStatus(400)->withJson(['errors' => 'Route resId is not an integer']); + } + if (!ResController::hasRightByResId(['resId' => [$args['resId']], 'userId' => $GLOBALS['id']])) { + return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']); + } + + $resource = ResModel::getById(['resId' => $args['resId'], 'select' => ['destination']]); + if (!empty($resource['destination'])) { + $entities = [$resource['destination']]; + } else { + $entities = UserModel::getEntitiesByLogin(['login' => $GLOBALS['userId']]); + $entities = array_column($entities, 'entity_id'); + if (empty($entities)) { + $entities = [0]; + } + } + $where = ['(templates_association.value_field in (?) OR templates_association.template_id IS NULL)', 'templates.template_type = ?', 'templates.template_target = ?']; + $data = [$entities, 'OFFICE', 'attachments']; + + $queryParams = $request->getQueryParams(); + + if (!empty($queryParams['attachmentType'])) { + $where[] = 'templates.template_attachment_type in (?)'; + $data[] = explode(',', $queryParams['attachmentType']); + } + + $templates = TemplateModel::getWithAssociation([ + 'select' => ['DISTINCT(templates.template_id)', 'templates.template_label', 'templates.template_file_name', 'templates.template_path', 'templates.template_attachment_type'], + 'where' => $where, + 'data' => $data, + 'orderBy' => ['templates.template_label'] + ]); + + $docserver = DocserverModel::getCurrentDocserver(['typeId' => 'TEMPLATES', 'collId' => 'templates', 'select' => ['path_template']]); + foreach ($templates as $key => $template) { + $explodeFile = explode('.', $template['template_file_name']); + $ext = $explodeFile[count($explodeFile) - 1]; + $exists = is_file($docserver['path_template'] . str_replace('#', DIRECTORY_SEPARATOR, $template['template_path']) . $template['template_file_name']); + + $templates[$key] = [ + 'id' => $template['template_id'], + 'label' => $template['template_label'], + 'extension' => $ext, + 'exists' => $exists, + 'attachmentType' => $template['template_attachment_type'] + ]; + } + + return $response->withJson(['templates' => $templates]); + } + private static function checkData(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['data']); -- GitLab