From a840b008fd615bfb4c4c2e4340b522d917c8fb62 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Wed, 25 Apr 2018 17:07:54 +0200
Subject: [PATCH] FEAT #7387 #7388 Autocomplete for users administrable

---
 rest/index.php                                |  1 +
 src/app/group/controllers/GroupController.php |  7 ++--
 .../controllers/AutoCompleteController.php    | 34 +++++++++++++++++++
 3 files changed, 39 insertions(+), 3 deletions(-)

diff --git a/rest/index.php b/rest/index.php
index 89f3fe8ea71..5ba5f779848 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -123,6 +123,7 @@ $app->get('/administration', \SrcCore\controllers\CoreController::class . ':getA
 
 //AutoComplete
 $app->get('/autocomplete/users', \SrcCore\controllers\AutoCompleteController::class . ':getUsers');
+$app->get('/autocomplete/users/administration', \SrcCore\controllers\AutoCompleteController::class . ':getUsersForAdministration');
 $app->get('/autocomplete/users/visa', \SrcCore\controllers\AutoCompleteController::class . ':getUsersForVisa');
 $app->get('/autocomplete/entities', \SrcCore\controllers\AutoCompleteController::class . ':getEntities');
 $app->get('/autocomplete/statuses', \SrcCore\controllers\AutoCompleteController::class . ':getStatuses');
diff --git a/src/app/group/controllers/GroupController.php b/src/app/group/controllers/GroupController.php
index 9536e74d5b2..cab518460ed 100644
--- a/src/app/group/controllers/GroupController.php
+++ b/src/app/group/controllers/GroupController.php
@@ -134,9 +134,10 @@ class GroupController
             return $response->withStatus(400)->withJson(['errors' => 'Group not found']);
         }
 
-        $group['users']     = GroupModel::getUsersByGroupId(['groupId' => $group['group_id'], 'select' => ['users.id', 'users.user_id', 'users.firstname', 'users.lastname']]);
-        $group['security']  = GroupModel::getSecurityByGroupId(['groupId' => $group['group_id']]);
-        $group['services']  = GroupModel::getAllServicesByGroupId(['groupId' => $group['group_id']]);
+        $group['users']         = GroupModel::getUsersByGroupId(['groupId' => $group['group_id'], 'select' => ['users.id', 'users.user_id', 'users.firstname', 'users.lastname']]);
+        $group['security']      = GroupModel::getSecurityByGroupId(['groupId' => $group['group_id']]);
+        $group['services']      = GroupModel::getAllServicesByGroupId(['groupId' => $group['group_id']]);
+        $group['canAdminUsers'] = ServiceModel::hasService(['id' => 'admin_users', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin']);
 
         return $response->withJson(['group' => $group]);
     }
diff --git a/src/core/controllers/AutoCompleteController.php b/src/core/controllers/AutoCompleteController.php
index cb90cf34624..c97207b46f2 100644
--- a/src/core/controllers/AutoCompleteController.php
+++ b/src/core/controllers/AutoCompleteController.php
@@ -22,6 +22,7 @@ use Entity\models\EntityModel;
 use SrcCore\models\CoreConfigModel;
 use SrcCore\models\TextFormatModel;
 use Status\models\StatusModel;
+use User\models\UserEntityModel;
 use User\models\UserModel;
 
 class AutoCompleteController
@@ -51,6 +52,39 @@ class AutoCompleteController
         return $response->withJson($data);
     }
 
+    public static function getUsersForAdministration(Request $request, Response $response)
+    {
+        if ($GLOBALS['userId'] != 'superadmin') {
+            $entities = EntityModel::getAllEntitiesByUserId(['userId' => $GLOBALS['userId']]);
+            $users = UserEntityModel::getUsersByEntities([
+                'select'    => ['DISTINCT users.user_id', 'users.firstname', 'users.lastname'],
+                'entities'  => $entities
+            ]);
+            $usersNoEntities = UserEntityModel::getUsersWithoutEntities(['select' => ['users.user_id', 'users.firstname', 'users.lastname']]);
+            $users = array_merge($users, $usersNoEntities);
+        } else {
+            $excludedUsers = ['superadmin'];
+
+            $users = UserModel::get([
+                'select'    => ['user_id', 'firstname', 'lastname'],
+                'where'     => ['enabled = ?', 'status != ?', 'user_id not in (?)'],
+                'data'      => ['Y', 'DEL', $excludedUsers],
+                'orderBy'   => ['lastname']
+            ]);
+        }
+
+        $data = [];
+        foreach ($users as $key => $value) {
+            $data[] = [
+                'type'          => 'user',
+                'id'            => $value['user_id'],
+                'idToDisplay'   => "{$value['firstname']} {$value['lastname']}"
+            ];
+        }
+
+        return $response->withJson($data);
+    }
+
     public static function getUsersForVisa(Request $request, Response $response)
     {
         $excludedUsers = ['superadmin'];
-- 
GitLab