From 8cecc16bfdedca92f445a6e1c515559c23b89b34 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Thu, 6 Feb 2020 11:50:52 +0100
Subject: [PATCH] FEAT #12091 TIME 0:35 Get removed items + refactoring

---
 sql/data_fr.sql                               |  2 +
 .../controllers/ListTemplateController.php    | 44 ++++++-------------
 .../controllers/MaarchParapheurController.php | 41 ++++++++++++++++-
 3 files changed, 56 insertions(+), 31 deletions(-)

diff --git a/sql/data_fr.sql b/sql/data_fr.sql
index d66bc1d4bab..5b7ee196097 100755
--- a/sql/data_fr.sql
+++ b/sql/data_fr.sql
@@ -149,6 +149,8 @@ INSERT INTO usergroups_services (group_id, service_id) VALUES ('RESPONSABLE', 'a
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('RESPONSABLE', 'add_tag_to_res');
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('RESPONSABLE', 'private_tag');
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('RESPONSABLE', 'tag_view');
+INSERT INTO usergroups_services (group_id, service_id) VALUES ('ELU', 'sign_document');
+INSERT INTO usergroups_services (group_id, service_id) VALUES ('ELU', 'visa_documents');
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('ADMINISTRATEUR_N1', 'admin');
 INSERT INTO usergroups_services (group_id, service_id) VALUES ('ADMINISTRATEUR_N1', 'adv_search_mlb');
 INSERT INTO usergroups_services (group_id, service_id, parameters) VALUES ('ADMINISTRATEUR_N1', 'admin_users', '{"groups": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]}');
diff --git a/src/app/entity/controllers/ListTemplateController.php b/src/app/entity/controllers/ListTemplateController.php
index 52e838ba503..7e0a0bcc643 100755
--- a/src/app/entity/controllers/ListTemplateController.php
+++ b/src/app/entity/controllers/ListTemplateController.php
@@ -17,6 +17,7 @@ namespace Entity\controllers;
 use Entity\models\EntityModel;
 use Entity\models\ListTemplateItemModel;
 use Entity\models\ListTemplateModel;
+use ExternalSignatoryBook\controllers\MaarchParapheurController;
 use Group\controllers\PrivilegeController;
 use History\controllers\HistoryController;
 use Resource\models\ResModel;
@@ -307,50 +308,33 @@ class ListTemplateController
             }
         }
 
-        $itemsRemoved = false;
+        $itemsRemoved = [];
         $listTemplates = ListTemplateModel::get(['select' => ['*'], 'where' => $where, 'data' => $data]);
         foreach ($listTemplates as $key => $listTemplate) {
             $listTemplateItems = ListTemplateItemModel::get(['select' => ['*'], 'where' => ['list_template_id = ?'], 'data' => [$listTemplate['id']]]);
             foreach ($listTemplateItems as $itemKey => $value) {
-                if ($listTemplate['type'] == 'visaCircuit' && !PrivilegeController::hasPrivilege(['privilegeId' => 'visa_documents', 'userId' => $value['item_id']]) && !PrivilegeController::hasPrivilege(['privilegeId' => 'sign_document', 'userId' => $value['item_id']])) {
-                    unset($listTemplateItems[$itemKey]);
-                    $itemsRemoved = true;
-                    continue;
-                } elseif ($listTemplate['type'] == 'opinionCircuit' && !PrivilegeController::hasPrivilege(['privilegeId' => 'avis_documents', 'userId' => $value['item_id']])) {
-                    unset($listTemplateItems[$itemKey]);
-                    $itemsRemoved = true;
-                    continue;
-                }
-
                 if ($value['item_type'] == 'entity') {
                     $listTemplateItems[$itemKey]['labelToDisplay'] = Entitymodel::getById(['id' => $value['item_id'], 'select' => ['entity_label']])['entity_label'];
                     $listTemplateItems[$itemKey]['descriptionToDisplay'] = '';
                 } else {
                     $user = UserModel::getById(['id' => $value['item_id'], 'select' => ['firstname', 'lastname', 'external_id']]);
+                    if ($listTemplate['type'] == 'visaCircuit' && !PrivilegeController::hasPrivilege(['privilegeId' => 'visa_documents', 'userId' => $value['item_id']]) && !PrivilegeController::hasPrivilege(['privilegeId' => 'sign_document', 'userId' => $value['item_id']])) {
+                        unset($listTemplateItems[$itemKey]);
+                        $itemsRemoved[] = "{$user['firstname']} {$user['lastname']}";
+                        continue;
+                    } elseif ($listTemplate['type'] == 'opinionCircuit' && !PrivilegeController::hasPrivilege(['privilegeId' => 'avis_documents', 'userId' => $value['item_id']])) {
+                        unset($listTemplateItems[$itemKey]);
+                        $itemsRemoved[] = "{$user['firstname']} {$user['lastname']}";
+                        continue;
+                    }
                     $listTemplateItems[$itemKey]['labelToDisplay'] = "{$user['firstname']} {$user['lastname']}";
                     $listTemplateItems[$itemKey]['descriptionToDisplay'] = UserModel::getPrimaryEntityById(['id' => $value['item_id'], 'select' => ['entity_label']])['entity_label'];
 
                     $externalId = json_decode($user['external_id'], true);
                     if (!empty($queryParams['maarchParapheur']) && !empty($externalId['maarchParapheur'])) {
-                        $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'modules/visa/xml/remoteSignatoryBooks.xml']);
-                        if ($loadedXml->signatoryBookEnabled == 'maarchParapheur') {
-                            foreach ($loadedXml->signatoryBook as $signatoryBook) {
-                                if ($signatoryBook->id == "maarchParapheur") {
-                                    $url      = $signatoryBook->url;
-                                    $userId   = $signatoryBook->userId;
-                                    $password = $signatoryBook->password;
-                                    break;
-                                }
-                            }
-                            $curlResponse = CurlModel::execSimple([
-                                'url'           => rtrim($url, '/') . '/rest/users/' . $externalId['maarchParapheur'],
-                                'basicAuth'     => ['user' => $userId, 'password' => $password],
-                                'headers'       => ['content-type:application/json'],
-                                'method'        => 'GET'
-                            ]);
-                            if (!empty($curlResponse['response']['user'])) {
-                                $listTemplateItems[$itemKey]['externalId']['maarchParapheur'] = $externalId['maarchParapheur'];
-                            }
+                        $userExists = MaarchParapheurController::userExists(['userId' => $externalId['maarchParapheur']]);
+                        if (!empty($userExists)) {
+                            $listTemplateItems[$itemKey]['externalId']['maarchParapheur'] = $externalId['maarchParapheur'];
                         }
                     }
                 }
diff --git a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
index 97973a6fb18..bfbf36e2b44 100755
--- a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
+++ b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php
@@ -32,6 +32,7 @@ use Slim\Http\Request;
 use Slim\Http\Response;
 use SrcCore\models\CoreConfigModel;
 use SrcCore\models\CurlModel;
+use SrcCore\models\ValidatorModel;
 use User\controllers\UserController;
 use User\models\UserModel;
 use User\models\UserSignatureModel;
@@ -429,7 +430,7 @@ class MaarchParapheurController
             if (count($args['recipient']) > 1) {
                 $contact = count($args['recipient']) . ' ' . _RECIPIENTS;
             } else {
-                $contact = $contact[0];
+                $contact = $args['recipient'][0];
             }
             $metadata[_RECIPIENTS] = $contact;
         }
@@ -996,4 +997,42 @@ class MaarchParapheurController
 
         return $response->withJson($curlResponse['response']);
     }
+
+    public static function userExists($args)
+    {
+        ValidatorModel::notEmpty($args, ['userId']);
+        ValidatorModel::intVal($args, ['userId']);
+
+        $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'modules/visa/xml/remoteSignatoryBooks.xml']);
+        if (empty($loadedXml)) {
+            return false;
+        } elseif ($loadedXml->signatoryBookEnabled != 'maarchParapheur') {
+            return false;
+        }
+
+        foreach ($loadedXml->signatoryBook as $signatoryBook) {
+            if ($signatoryBook->id == "maarchParapheur") {
+                $url      = $signatoryBook->url;
+                $userId   = $signatoryBook->userId;
+                $password = $signatoryBook->password;
+                break;
+            }
+        }
+        if (empty($url) || empty($userId) || empty($password)) {
+            return false;
+        }
+
+        $curlResponse = CurlModel::execSimple([
+            'url'           => rtrim($url, '/') . '/rest/users/' . $args['userId'],
+            'basicAuth'     => ['user' => $userId, 'password' => $password],
+            'headers'       => ['content-type:application/json'],
+            'method'        => 'GET'
+        ]);
+
+        if (empty($curlResponse['response']['user'])) {
+            return false;
+        }
+
+        return true;
+    }
 }
-- 
GitLab