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