From 7b3d5d395f3de02682f78e9fbe04c7c27c219031 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Tue, 20 Feb 2018 15:42:49 +0100
Subject: [PATCH] FEAT roles explicit for entity

---
 .../entity/controllers/EntityController.php   | 21 ++++++++++++++-----
 .../models/ListTemplateModelAbstract.php      | 14 +++++++++++++
 2 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/src/app/entity/controllers/EntityController.php b/src/app/entity/controllers/EntityController.php
index 83cb1d25adf..74a96966032 100644
--- a/src/app/entity/controllers/EntityController.php
+++ b/src/app/entity/controllers/EntityController.php
@@ -70,6 +70,15 @@ class EntityController
 
         $entity['types'] = EntityModel::getTypes();
         $entity['roles'] = EntityModel::getRoles();
+        $listTemplateTypes = ListTemplateModel::getTypes(['select' => ['difflist_type_roles'], 'where' => ['difflist_type_id = ?'], 'data' => ['entity_id']]);
+        $typesForService = empty($listTemplateTypes[0]['difflist_type_roles']) ? [] : explode(' ', $listTemplateTypes[0]['difflist_type_roles']);
+        foreach ($entity['roles'] as $key => $role) {
+            if (in_array($role['id'], $typesForService)) {
+                $entity['roles'][$key]['available'] = true;
+            } else {
+                $entity['roles'][$key]['available'] = false;
+            }
+        }
 
         $listTemplates = ListTemplateModel::get([
             'select'    => ['object_type', 'item_id', 'item_type', 'item_mode', 'title', 'description'],
@@ -80,22 +89,24 @@ class EntityController
         $entity['listTemplate'] = ['dest' => [], 'cc' => []];
         $entity['visaTemplate'] = [];
         foreach ($listTemplates as $listTemplate) {
-            if ($listTemplate['object_type'] == 'entity_id') {
+            if ($listTemplate['object_type'] == 'entity_id' && !empty($listTemplate['item_id'])) {
                 if ($listTemplate['item_type'] == 'user_id') {
                     $entity['listTemplate'][$listTemplate['item_mode']][] = [
                         'type'                  => 'user',
-                        'idToDisplay'           => UserModel::getLabelledUserById(['userId' => $listTemplate['item_id']]),
+                        'id'                    => $listTemplate['item_id'],
+                        'labelToDisplay'        => UserModel::getLabelledUserById(['userId' => $listTemplate['item_id']]),
                         'descriptionToDisplay'  => UserModel::getPrimaryEntityByUserId(['userId' => $listTemplate['item_id']])['entity_label']
                     ];
                 } elseif ($listTemplate['item_type'] == 'entity_id') {
                     $entity['listTemplate'][$listTemplate['item_mode']][] = [
                         'type'                  => 'entity',
-                        'idToDisplay'           => $listTemplate['item_id'],
-                        'descriptionToDisplay'  => EntityModel::getById(['entityId' => $listTemplate['item_id'], 'select' => ['entity_label']])['entity_label']
+                        'id'                    => $listTemplate['item_id'],
+                        'labelToDisplay'        => EntityModel::getById(['entityId' => $listTemplate['item_id'], 'select' => ['entity_label']])['entity_label'],
+                        'descriptionToDisplay'  => ''
                     ];
                 }
             }
-            if ($listTemplate['object_type'] == 'VISA_CIRCUIT') {
+            if ($listTemplate['object_type'] == 'VISA_CIRCUIT' && !empty($listTemplate['item_id'])) {
                 $entity['visaTemplate'][] = [
                     'type'                  => 'user',
                     'mode'                  => $listTemplate['item_mode'],
diff --git a/src/app/entity/models/ListTemplateModelAbstract.php b/src/app/entity/models/ListTemplateModelAbstract.php
index 3c7b4bc3494..fc9827b5cc9 100644
--- a/src/app/entity/models/ListTemplateModelAbstract.php
+++ b/src/app/entity/models/ListTemplateModelAbstract.php
@@ -96,4 +96,18 @@ class ListTemplateModelAbstract
 
         return true;
     }
+
+    public static function getTypes(array $aArgs = [])
+    {
+        ValidatorModel::arrayType($aArgs, ['select', 'where', 'data']);
+
+        $aListTemplatesTypes = DatabaseModel::select([
+            'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
+            'table'     => ['difflist_types'],
+            'where'     => $aArgs['where'],
+            'data'      => $aArgs['data']
+        ]);
+
+        return $aListTemplatesTypes;
+    }
 }
-- 
GitLab