From 24a5a3911f61225715901ab0c3693d2053290454 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Wed, 21 Oct 2020 13:23:35 +0200
Subject: [PATCH] FEAT #15011 TIME 2 save diffusionList in indexingModel

---
 package.json                                  |  2 +-
 .../controllers/ListInstanceController.php    |  2 +-
 .../controllers/ListTemplateController.php    |  4 +-
 .../controllers/IndexingModelController.php   | 47 ++++++++++++++++++-
 src/app/note/controllers/NoteController.php   |  4 +-
 src/app/user/controllers/UserController.php   |  4 +-
 .../controllers/PreparedClauseController.php  |  4 +-
 7 files changed, 56 insertions(+), 11 deletions(-)

diff --git a/package.json b/package.json
index 82e3b7a9a71..23a53722b60 100755
--- a/package.json
+++ b/package.json
@@ -67,7 +67,7 @@
     "ngx-pipes": "^2.7.5",
     "node-sass": "^4.14.1",
     "nodemon": "^2.0.6",
-    "npm-check-updates": "^9.0.4",
+    "npm-check-updates": "^9.1.2",
     "pdfjs-dist": "2.5.207",
     "photoswipe": "^4.1.3",
     "protractor": "^7.0.0",
diff --git a/src/app/entity/controllers/ListInstanceController.php b/src/app/entity/controllers/ListInstanceController.php
index 18663a52974..84429c09f80 100755
--- a/src/app/entity/controllers/ListInstanceController.php
+++ b/src/app/entity/controllers/ListInstanceController.php
@@ -46,7 +46,7 @@ class ListInstanceController
         $listInstances = ListInstanceModel::get(['select' => ['*'], 'where' => ['res_id = ?', 'difflist_type = ?'], 'data' => [$args['resId'], 'entity_id']]);
         foreach ($listInstances as $key => $value) {
             if ($value['item_type'] == 'entity_id') {
-                $entity = Entitymodel::getById(['id' => $value['item_id'], 'select' => ['entity_label', 'entity_id']]);
+                $entity = EntityModel::getById(['id' => $value['item_id'], 'select' => ['entity_label', 'entity_id']]);
                 $listInstances[$key]['item_id'] = $entity['entity_id'];
                 $listInstances[$key]['itemSerialId'] = $value['item_id'];
                 $listInstances[$key]['labelToDisplay'] = $entity['entity_label'];
diff --git a/src/app/entity/controllers/ListTemplateController.php b/src/app/entity/controllers/ListTemplateController.php
index 1ca94da1411..3c815531b95 100755
--- a/src/app/entity/controllers/ListTemplateController.php
+++ b/src/app/entity/controllers/ListTemplateController.php
@@ -320,7 +320,7 @@ class ListTemplateController
             $listTemplateItems = ListTemplateItemModel::get(['select' => ['*'], 'where' => ['list_template_id = ?'], 'data' => [$listTemplate['id']]]);
             foreach ($listTemplateItems as $itemKey => $value) {
                 if ($value['item_type'] == 'entity') {
-                    $listTemplateItems[$itemKey]['labelToDisplay'] = Entitymodel::getById(['id' => $value['item_id'], 'select' => ['entity_label']])['entity_label'];
+                    $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']]);
@@ -421,7 +421,7 @@ class ListTemplateController
             $type = $aArgs['typeId'] == 'entity_id' ? 'diffusionList' : ($aArgs['typeId'] == 'VISA_CIRCUIT' ? 'visaCircuit' : 'opinionCircuit');
             $listTemplates = ListTemplateModel::getWithItems(['select' => ['DISTINCT entity_id'], 'where' => ['type = ?', 'item_mode = ?', 'entity_id is not null'], 'data' => [$type, $roles[$key]['id']]]);
             foreach ($listTemplates as $listTemplate) {
-                $entity = Entitymodel::getById(['select' => ['short_label'], 'id' => $listTemplate['entity_id']]);
+                $entity = EntityModel::getById(['select' => ['short_label'], 'id' => $listTemplate['entity_id']]);
                 $roles[$key]['usedIn'][] = $entity['short_label'];
             }
         }
diff --git a/src/app/indexingModel/controllers/IndexingModelController.php b/src/app/indexingModel/controllers/IndexingModelController.php
index fb54ccc57e0..8098cccd876 100755
--- a/src/app/indexingModel/controllers/IndexingModelController.php
+++ b/src/app/indexingModel/controllers/IndexingModelController.php
@@ -31,6 +31,7 @@ use Respect\Validation\Validator;
 use Slim\Http\Request;
 use Slim\Http\Response;
 use Tag\models\ResourceTagModel;
+use User\models\UserModel;
 
 class IndexingModelController
 {
@@ -77,8 +78,35 @@ class IndexingModelController
         }
 
         $fields = IndexingModelFieldModel::get(['select' => ['identifier', 'mandatory', 'default_value', 'unit', 'enabled'], 'where' => ['model_id = ?'], 'data' => [$args['id']]]);
+        $destination = '';
         foreach ($fields as $key => $value) {
             $fields[$key]['default_value'] = json_decode($value['default_value'], true);
+            if ($value['identifier'] == 'destination') {
+                $destination = $value['default_value'];
+            } elseif ($value['identifier'] == 'diffusionList') {
+                foreach ($fields[$key]['default_value'] as $itemKey => $item) {
+                    if ($item['type'] == 'entity') {
+                        $entity = EntityModel::getById(['id' => $item['id'], 'select' => ['entity_label', 'entity_id']]);
+                        $fields[$key]['default_value'][$itemKey]['labelToDisplay']       = $entity['entity_label'];
+                        $fields[$key]['default_value'][$itemKey]['descriptionToDisplay'] = null;
+                    } else {
+                        $user = UserModel::getById(['id' => $item['id'], 'select' => ['firstname', 'lastname', 'status']]);
+                        $userEntities = UserModel::getEntitiesById(['id' => $item['id'], 'select' => ['entities.id']]);
+                        $userEntities = array_column($userEntities, 'id');
+                        if ($item['mode'] == 'dest' && !empty($destination) && !in_array($destination, $userEntities)) {
+                            unset($fields[$key]['default_value'][$itemKey]);
+                            continue;
+                        }
+                        if (!empty($user) && !in_array($user['status'], ['SPD', 'DEL'])) {
+                            $fields[$key]['default_value'][$itemKey]['labelToDisplay']       = $user['firstname'] . ' ' . $user['lastname'];
+                            $fields[$key]['default_value'][$itemKey]['descriptionToDisplay'] = UserModel::getPrimaryEntityById(['id' => $item['id'], 'select' => ['entities.entity_label']])['entity_label'];
+                        } else {
+                            unset($fields[$key]['default_value'][$itemKey]);
+                        }
+                    }
+                }
+                $fields[$key]['default_value'] = array_values($fields[$key]['default_value']);
+            }
         }
         $model['fields'] = $fields;
 
@@ -139,18 +167,35 @@ class IndexingModelController
                 $fieldsMaster[$key]['default_value'] = json_decode($value['default_value'], true);
             }
 
-
             // Look for fields in master model
             // if field in master is not in child, return an error
             // if field is not in master but in child, is ignored
             $arrayTmp = [];
+            $diffusionListFound = false;
             foreach ($fieldsMaster as $field) {
+                if ($field['identifier'] == 'diffusionList' && $diffusionListFound) {
+                    continue;
+                }
                 $found = false;
                 foreach ($body['fields'] as $value) {
                     if ($value['identifier'] == $field['identifier'] && $value['mandatory'] == $field['mandatory'] && $value['unit'] == $field['unit']) {
                         if (!$field['enabled']) {
                             $value = $field;
                         }
+
+                        array_push($arrayTmp, $value);
+                        $found = true;
+                        if ($field['identifier'] != 'destination') {
+                            break;
+                        }
+                    }
+                    if ($field['identifier'] == 'destination' && $value['identifier'] == 'diffusionList') {
+                        if (!$field['enabled']) {
+                            $value = $field;
+                        }
+                        $diffusionListFound = true;
+                        $value['unit']      = $field['unit'];
+
                         array_push($arrayTmp, $value);
                         $found = true;
                         break;
diff --git a/src/app/note/controllers/NoteController.php b/src/app/note/controllers/NoteController.php
index 9b9abdd3403..fcdc27666b2 100755
--- a/src/app/note/controllers/NoteController.php
+++ b/src/app/note/controllers/NoteController.php
@@ -98,7 +98,7 @@ class NoteController
             if (!Validator::arrayType()->validate($body['entities'])) {
                 return $response->withStatus(400)->withJson(['errors' => 'Body entities is not an array']);
             }
-            $entities = Entitymodel::get(['select' => ['count(1)'], 'where' => ['entity_id in (?)'], 'data' => [$body['entities']]]);
+            $entities = EntityModel::get(['select' => ['count(1)'], 'where' => ['entity_id in (?)'], 'data' => [$body['entities']]]);
             if ($entities[0]['count'] != count($body['entities'])) {
                 return $response->withStatus(400)->withJson(['errors' => 'Body entities : one or more entities do not exist']);
             }
@@ -158,7 +158,7 @@ class NoteController
             if (!Validator::arrayType()->validate($body['entities'])) {
                 return $response->withStatus(400)->withJson(['errors' => 'Body entities is not an array']);
             }
-            $entities = Entitymodel::get(['select' => ['count(1)'], 'where' => ['entity_id in (?)'], 'data' => [$body['entities']]]);
+            $entities = EntityModel::get(['select' => ['count(1)'], 'where' => ['entity_id in (?)'], 'data' => [$body['entities']]]);
             if ($entities[0]['count'] != count($body['entities'])) {
                 return $response->withStatus(400)->withJson(['errors' => 'Body entities : one or more entities do not exist']);
             }
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index c9dc1803b24..6c96cd8dffe 100755
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -372,13 +372,13 @@ class UserController
             $formattedLIEntities = [];
             $listInstanceEntities = array_unique($listInstanceEntities);
             foreach ($listInstanceEntities as $listInstanceEntity) {
-                $entity = Entitymodel::getByEntityId(['select' => ['short_label'], 'entityId' => $listInstanceEntity]);
+                $entity = EntityModel::getByEntityId(['select' => ['short_label'], 'entityId' => $listInstanceEntity]);
                 $formattedLIEntities[] = $entity['short_label'];
             }
             $formattedLTEntities = [];
             $listTemplateEntities = array_unique($listTemplateEntities);
             foreach ($listTemplateEntities as $listTemplateEntity) {
-                $entity = Entitymodel::getById(['select' => ['short_label'], 'id' => $listTemplateEntity]);
+                $entity = EntityModel::getById(['select' => ['short_label'], 'id' => $listTemplateEntity]);
                 $formattedLTEntities[] = $entity['short_label'];
             }
 
diff --git a/src/core/controllers/PreparedClauseController.php b/src/core/controllers/PreparedClauseController.php
index 514b019a933..0b51e434d2f 100755
--- a/src/core/controllers/PreparedClauseController.php
+++ b/src/core/controllers/PreparedClauseController.php
@@ -192,7 +192,7 @@ class PreparedClauseController
             for ($i = 0; $i < $total; $i++) {
                 $tmpParentEntity = trim(str_replace("'", '', $parentEntity[1][$i]));
                 if (!empty($tmpParentEntity)) {
-                    $entity = Entitymodel::getByEntityId(['entityId' => $tmpParentEntity, 'select' => ['entity_id', 'parent_entity_id']]);
+                    $entity = EntityModel::getByEntityId(['entityId' => $tmpParentEntity, 'select' => ['entity_id', 'parent_entity_id']]);
                 }
                 if (empty($entity['parent_entity_id'])) {
                     $parentEntityClause = "''";
@@ -209,7 +209,7 @@ class PreparedClauseController
             for ($i = 0; $i < $total; $i++) {
                 $tmpSisterEntity = trim(str_replace("'", '', $sistersEntities[1][$i]));
                 if (!empty($tmpSisterEntity)) {
-                    $sisterEntity = Entitymodel::getByEntityId(['entityId' => $tmpSisterEntity, 'select' => ['parent_entity_id']]);
+                    $sisterEntity = EntityModel::getByEntityId(['entityId' => $tmpSisterEntity, 'select' => ['parent_entity_id']]);
                 }
                 $allSisterEntities = [];
                 if (!empty($sisterEntity)) {
-- 
GitLab