From 78e04fb7d7ba684aaa86bf3a40ff5a15a53ad6cb Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Tue, 14 Jan 2020 11:18:18 +0100
Subject: [PATCH] FEAT #12764 TIME 0:20 Get items by resource

---
 rest/index.php                                | 15 ++--
 .../resource/controllers/ResController.php    | 88 +++++++++++--------
 src/frontend/app/signature-book.component.ts  | 16 ++--
 3 files changed, 70 insertions(+), 49 deletions(-)

diff --git a/rest/index.php b/rest/index.php
index d3511c4f825..ab666c492d3 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -339,6 +339,7 @@ $app->get('/resources/{resId}/content', \Resource\controllers\ResController::cla
 $app->get('/resources/{resId}/originalContent', \Resource\controllers\ResController::class . ':getOriginalFileContent');
 $app->get('/resources/{resId}/thumbnail', \Resource\controllers\ResController::class . ':getThumbnailContent');
 $app->get('/resources/{resId}/isAllowed', \Resource\controllers\ResController::class . ':isAllowedForCurrentUser');
+$app->get('/resources/{resId}/items', \Resource\controllers\ResController::class . ':getItems');
 $app->get('/resources/{resId}/attachments', \Attachment\controllers\AttachmentController::class . ':getByResId');
 $app->get('/resources/{resId}/contacts', \Contact\controllers\ContactController::class . ':getByResId');
 $app->get('/resources/{resId}/emails', \Email\controllers\EmailController::class . ':getByResId');
@@ -352,19 +353,14 @@ $app->delete('/resources/{resId}/circuits/{type}', \Entity\controllers\ListInsta
 $app->get('/resources/{resId}/linkedResources', \Resource\controllers\LinkController::class . ':getLinkedResources');
 $app->post('/resources/{resId}/linkedResources', \Resource\controllers\LinkController::class . ':linkResources');
 $app->delete('/resources/{resId}/linkedResources/{id}', \Resource\controllers\LinkController::class . ':unlinkResources');
+
 $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');
-$app->get('/res/{resId}/notes/count', \Resource\controllers\ResController::class . ':getNotesCountForCurrentUserById');
 $app->put('/res/externalInfos', \Resource\controllers\ResController::class . ':updateExternalInfos');
 $app->get('/categories', \Resource\controllers\ResController::class . ':getCategories');
 $app->get('/resources/{resId}/users/{userId}/isDestinationChanging', \Action\controllers\PreProcessActionController::class . ':isDestinationChanging');
 $app->get('/resources/{resId}/users/{userId}/groups/{groupId}/baskets/{basketId}/processingData', \Resource\controllers\ResController::class . ':getProcessingData');
-$app->post('/resources/follow', \Resource\controllers\UserFollowedResourceController::class . ':follow');
-$app->delete('/resources/unfollow', \Resource\controllers\UserFollowedResourceController::class . ':unFollow');
-$app->get('/followedResources', \Resource\controllers\UserFollowedResourceController::class . ':getFollowedResources');
-$app->get('/followedResources/{resId}/baskets', \Resource\controllers\UserFollowedResourceController::class . ':getBaskets');
-$app->get('/followedResources/filters', \Resource\controllers\UserFollowedResourceController::class . ':getFilters');
 
 //ResourcesList
 $app->get('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}', \Resource\controllers\ResourceListController::class . ':get');
@@ -468,6 +464,13 @@ $app->put('/users/{id}/accountActivationNotification', \User\controllers\UserCon
 $app->post('/password', \User\controllers\UserController::class . ':forgotPassword');
 $app->put('/password', \User\controllers\UserController::class . ':passwordInitialization');
 
+//UserFollowedResources
+$app->post('/resources/follow', \Resource\controllers\UserFollowedResourceController::class . ':follow');
+$app->delete('/resources/unfollow', \Resource\controllers\UserFollowedResourceController::class . ':unFollow');
+$app->get('/followedResources', \Resource\controllers\UserFollowedResourceController::class . ':getFollowedResources');
+$app->get('/followedResources/{resId}/baskets', \Resource\controllers\UserFollowedResourceController::class . ':getBaskets');
+$app->get('/followedResources/filters', \Resource\controllers\UserFollowedResourceController::class . ':getFilters');
+
 //VersionsUpdate
 $app->get('/versionsUpdate', \VersionUpdate\controllers\VersionUpdateController::class . ':get');
 $app->put('/versionsUpdate', \VersionUpdate\controllers\VersionUpdateController::class . ':update');
diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php
index eafd381c378..fd6a5566afe 100755
--- a/src/app/resource/controllers/ResController.php
+++ b/src/app/resource/controllers/ResController.php
@@ -27,6 +27,7 @@ use CustomField\models\CustomFieldModel;
 use Docserver\models\DocserverModel;
 use Docserver\models\DocserverTypeModel;
 use Doctype\models\DoctypeModel;
+use Email\models\EmailModel;
 use Entity\models\EntityModel;
 use Entity\models\ListInstanceModel;
 use Folder\controllers\FolderController;
@@ -116,7 +117,7 @@ class ResController
 
         $queryParams = $request->getQueryParams();
 
-        $select = ['model_id', 'category_id', 'priority', 'subject', 'alt_identifier', 'process_limit_date', 'closing_date', 'creation_date', 'modification_date', 'linked_resources'];
+        $select = ['model_id', 'category_id', 'priority', 'subject', 'alt_identifier', 'process_limit_date', 'closing_date', 'creation_date', 'modification_date'];
         if (empty($queryParams['light'])) {
             $select = array_merge($select, ['type_id', 'typist', 'status', 'destination', 'initiator', 'confidentiality', 'doc_date', 'admission_date', 'departure_date', 'barcode', 'custom_fields']);
         }
@@ -227,21 +228,6 @@ class ResController
             $tags = TagResModel::get(['select' => ['tag_id'], 'where' => ['res_id = ?'], 'data' => [$args['resId']]]);
             $formattedData['tags'] = array_column($tags, 'tag_id');
         } else {
-            $linkedResources = json_decode($document['linked_resources'], true);
-            $formattedData['linkedResources'] = count($linkedResources);
-
-            $attachments = AttachmentModel::get(['select' => ['count(1)'], 'where' => ['res_id_master = ?', 'status in (?)'], 'data' => [$args['resId'], ['TRA', 'A_TRA', 'FRZ']]]);
-            $formattedData['attachments'] = $attachments[0]['count'];
-
-            $formattedData['diffusionList'] = 0;
-            $formattedData['visaCircuit'] = 0;
-            $formattedData['opinionCircuit'] = 0;
-            $listInstanceItems = ListInstanceModel::get(['select' => ['count(1)', 'difflist_type'], 'where' => ['res_id = ?'], 'data' => [$args['resId']], 'groupBy' => ['difflist_type']]);
-            foreach ($listInstanceItems as $item) {
-                $type = $item['difflist_type'] == 'entity_id' ? 'diffusionList' : ($item['difflist_type'] == 'VISA_CIRCUIT' ? 'visaCircuit' : 'opinionCircuit');
-                $formattedData[$type] = $item['count'];
-            }
-
             $followed = UserFollowedResourceModel::get([
                 'select'    => [1],
                 'where'     => ['user_id = ?', 'res_id = ?'],
@@ -628,6 +614,57 @@ class ResController
         return $response->withHeader('Content-Type', $mimeType);
     }
 
+    public function getItems(Request $request, Response $response, array $args)
+    {
+        if (!Validator::intVal()->validate($args['resId']) || !ResController::hasRightByResId(['resId' => [$args['resId']], 'userId' => $GLOBALS['id']])) {
+            return $response->withStatus(403)->withJson(['errors' => 'Document out of perimeter']);
+        }
+
+        $document = ResModel::getById([
+            'select'    => ['linked_resources'],
+            'resId'     => $args['resId']
+        ]);
+        if (empty($document)) {
+            return $response->withStatus(400)->withJson(['errors' => 'Document does not exist']);
+        }
+
+        $linkedResources = json_decode($document['linked_resources'], true);
+        $formattedData['linkedResources'] = count($linkedResources);
+
+        $attachments = AttachmentModel::get(['select' => ['count(1)'], 'where' => ['res_id_master = ?', 'status in (?)'], 'data' => [$args['resId'], ['TRA', 'A_TRA', 'FRZ']]]);
+        $formattedData['attachments'] = $attachments[0]['count'];
+
+        $formattedData['diffusionList'] = 0;
+        $formattedData['visaCircuit'] = 0;
+        $formattedData['opinionCircuit'] = 0;
+        $listInstanceItems = ListInstanceModel::get(['select' => ['count(1)', 'difflist_type'], 'where' => ['res_id = ?'], 'data' => [$args['resId']], 'groupBy' => ['difflist_type']]);
+        foreach ($listInstanceItems as $item) {
+            $type = $item['difflist_type'] == 'entity_id' ? 'diffusionList' : ($item['difflist_type'] == 'VISA_CIRCUIT' ? 'visaCircuit' : 'opinionCircuit');
+            $formattedData[$type] = $item['count'];
+        }
+
+        $formattedData['notes'] = NoteModel::countByResId(['resId' => $args['resId'], 'userId' => $GLOBALS['id'], 'login' => $GLOBALS['userId']]);
+
+        $emails = EmailModel::get(['select' => ['count(1)'], 'where' => ["document->>'id' = ?"], 'data' => [$args['resId']]]);
+        $formattedData['emails'] = $emails[0]['count'];
+
+        return $response->withJson($formattedData);
+    }
+
+    public function getCategories(Request $request, Response $response)
+    {
+        return $response->withJson(['categories' => ResModel::getCategories()]);
+    }
+
+    public function isAllowedForCurrentUser(Request $request, Response $response, array $aArgs)
+    {
+        if (!Validator::intVal()->validate($aArgs['resId']) || !ResController::hasRightByResId(['resId' => [$aArgs['resId']], 'userId' => $GLOBALS['id']])) {
+            return $response->withJson(['isAllowed' => false]);
+        }
+
+        return $response->withJson(['isAllowed' => true]);
+    }
+
     public function updateExternalInfos(Request $request, Response $response)
     {
         //TODO Revoir cette fonction
@@ -668,25 +705,6 @@ class ResController
         return $response->withJson(['success' => 'success']);
     }
 
-    public function getNotesCountForCurrentUserById(Request $request, Response $response, array $aArgs)
-    {
-        return $response->withJson(NoteModel::countByResId(['resId' => $aArgs['resId'], 'userId' => $GLOBALS['id'], 'login' => $GLOBALS['userId']]));
-    }
-
-    public function getCategories(Request $request, Response $response)
-    {
-        return $response->withJson(['categories' => ResModel::getCategories()]);
-    }
-
-    public function isAllowedForCurrentUser(Request $request, Response $response, array $aArgs)
-    {
-        if (!Validator::intVal()->validate($aArgs['resId']) || !ResController::hasRightByResId(['resId' => [$aArgs['resId']], 'userId' => $GLOBALS['id']])) {
-            return $response->withJson(['isAllowed' => false]);
-        }
-
-        return $response->withJson(['isAllowed' => true]);
-    }
-
     public static function getEncodedDocument(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['resId']);
diff --git a/src/frontend/app/signature-book.component.ts b/src/frontend/app/signature-book.component.ts
index 013ea35c7aa..5bc88eb952d 100755
--- a/src/frontend/app/signature-book.component.ts
+++ b/src/frontend/app/signature-book.component.ts
@@ -372,17 +372,17 @@ export class SignatureBookComponent implements OnInit {
     }
 
     refreshNotes() {
-        this.http.get(this.coreUrl + 'rest/res/' + this.resId + '/notes/count')
-            .subscribe((data : any) => {
-                this.signatureBook.nbNotes = data;
-            });
+        // this.http.get(this.coreUrl + 'rest/res/' + this.resId + '/notes/count')
+        //     .subscribe((data : any) => {
+        //         this.signatureBook.nbNotes = data;
+        //     });
     }
 
     refreshLinks() {
-        this.http.get(this.coreUrl + 'rest/links/resId/' + this.resId)
-            .subscribe((data : any) => {
-                this.signatureBook.nbLinks = data.length;
-            });
+        // this.http.get(this.coreUrl + 'rest/links/resId/' + this.resId)
+        //     .subscribe((data : any) => {
+        //         this.signatureBook.nbLinks = data.length;
+        //     });
     }
 
     signFile(attachment: any, signature: any) {
-- 
GitLab