From 258e61c0c484cd500f46bb584161f0031f527b8c Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Wed, 28 Feb 2018 15:48:32 +0100 Subject: [PATCH] FEAT #142 Create autocomplete routes --- rest/index.php | 9 +- src/app/status/models/StatusModelAbstract.php | 8 +- src/app/user/controllers/UserController.php | 17 --- src/app/user/models/UserModelAbstract.php | 8 +- .../controllers/AutoCompleteController.php | 118 ++++++++++++++++++ 5 files changed, 134 insertions(+), 26 deletions(-) create mode 100644 src/core/controllers/AutoCompleteController.php diff --git a/rest/index.php b/rest/index.php index 5883261b368..52712f15ac2 100755 --- a/rest/index.php +++ b/rest/index.php @@ -115,6 +115,12 @@ $app->get('/administration', \SrcCore\controllers\CoreController::class . ':getA $app->get('/administration/users', \User\controllers\UserController::class . ':getUsersForAdministration'); $app->get('/administration/users/{id}', \User\controllers\UserController::class . ':getUserForAdministration'); +//AutoComplete +$app->get('/autocomplete/users', \SrcCore\controllers\AutoCompleteController::class . ':getUsers'); +$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'); + //Baskets $app->get('/baskets', \Basket\controllers\BasketController::class . ':get'); $app->post('/baskets', \Basket\controllers\BasketController::class . ':create'); @@ -138,7 +144,7 @@ $app->put('/statuses/{identifier}', \Status\controllers\StatusController::class $app->delete('/statuses/{identifier}', \Status\controllers\StatusController::class . ':delete'); $app->get('/administration/statuses/new', \Status\controllers\StatusController::class . ':getNewInformations'); -//groups +//Groups $app->get('/groups', \Group\controllers\GroupController::class . ':get'); $app->post('/groups', \Group\controllers\GroupController::class . ':create'); $app->get('/groups/{id}', \Group\controllers\GroupController::class . ':getById'); @@ -173,7 +179,6 @@ $app->get('/res/{resId}/lock', \Resource\controllers\ResController::class . ':is $app->get('/res/{resId}/notes/count', \Resource\controllers\ResController::class . ':getNotesCountForCurrentUserById'); //Users -$app->get('/users/autocompleter', \User\controllers\UserController::class . ':getUsersForAutocompletion'); $app->post('/users', \User\controllers\UserController::class . ':create'); $app->get('/users/{id}/details', \User\controllers\UserController::class . ':getDetailledById'); $app->put('/users/{id}', \User\controllers\UserController::class . ':update'); diff --git a/src/app/status/models/StatusModelAbstract.php b/src/app/status/models/StatusModelAbstract.php index 21870f510e8..5e0ae527818 100755 --- a/src/app/status/models/StatusModelAbstract.php +++ b/src/app/status/models/StatusModelAbstract.php @@ -20,8 +20,10 @@ use SrcCore\models\DatabaseModel; class StatusModelAbstract { - public static function get() + public static function get(array $aArgs = []) { + ValidatorModel::arrayType($aArgs, ['select']); + $aReturn = DatabaseModel::select([ 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], 'table' => ['status'], @@ -31,7 +33,7 @@ class StatusModelAbstract return $aReturn; } - public static function getById(array $aArgs = []) + public static function getById(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['id']); ValidatorModel::stringType($aArgs, ['id']); @@ -46,7 +48,7 @@ class StatusModelAbstract return $aReturn; } - public static function getByIdentifier(array $aArgs = []) + public static function getByIdentifier(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['identifier']); ValidatorModel::intVal($aArgs, ['identifier']); diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index 4514c71168b..8db516f6026 100644 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -458,23 +458,6 @@ class UserController ]); } - public function getUsersForAutocompletion(Request $request, Response $response) - { - $excludedUsers = ['superadmin']; - - $users = UserModel::get([ - 'select' => ['user_id', 'firstname', 'lastname'], - 'where' => ['enabled = ?', 'status != ?', 'user_id not in (?)'], - 'data' => ['Y', 'DEL', $excludedUsers] - ]); - - foreach ($users as $key => $value) { - $users[$key]['formattedUser'] = "{$value['firstname']} {$value['lastname']} ({$value['user_id']})"; - } - - return $response->withJson($users); - } - public function getUsersForAdministration(Request $request, Response $response) { if (!ServiceModel::hasService(['id' => 'admin_users', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) { diff --git a/src/app/user/models/UserModelAbstract.php b/src/app/user/models/UserModelAbstract.php index fdec0ee1fee..2f0511eaa4a 100644 --- a/src/app/user/models/UserModelAbstract.php +++ b/src/app/user/models/UserModelAbstract.php @@ -16,7 +16,6 @@ namespace User\models; use Docserver\models\DocserverModel; use Entity\models\EntityModel; -use History\controllers\HistoryController; use SrcCore\models\CoreConfigModel; use SrcCore\models\DatabaseModel; use SrcCore\models\SecurityModel; @@ -26,13 +25,14 @@ class UserModelAbstract { public static function get(array $aArgs) { - ValidatorModel::arrayType($aArgs, ['select', 'where', 'data']); + ValidatorModel::arrayType($aArgs, ['select', 'where', 'data', 'orderBy']); $aUsers = DatabaseModel::select([ 'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'], 'table' => ['users'], - 'where' => empty($aArgs['where']) ? [] : $aArgs['where'], - 'data' => empty($aArgs['data']) ? [] : $aArgs['data'] + 'where' => $aArgs['where'], + 'data' => $aArgs['data'], + 'order_by' => $aArgs['orderBy'] ]); return $aUsers; diff --git a/src/core/controllers/AutoCompleteController.php b/src/core/controllers/AutoCompleteController.php new file mode 100644 index 00000000000..2e3f171470c --- /dev/null +++ b/src/core/controllers/AutoCompleteController.php @@ -0,0 +1,118 @@ +<?php + +/** +* Copyright Maarch since 2008 under licence GPLv3. +* See LICENCE.txt file at the root folder for more details. +* This file is part of Maarch software. +* +*/ + +/** +* @brief Auto Complete Controller +* @author dev@maarch.org +*/ + +namespace SrcCore\controllers; + +use Core\Models\ServiceModel; +use Slim\Http\Request; +use Slim\Http\Response; +use Entity\models\EntityModel; +use Status\models\StatusModel; +use User\models\UserModel; + +class AutoCompleteController +{ + public static function getUsers(Request $request, Response $response) + { + $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) { + $primaryEntity = UserModel::getPrimaryEntityByUserId(['userId' => $value['user_id']]); + $data[] = [ + 'type' => 'user', + 'id' => $value['user_id'], + 'idToDisplay' => "{$value['firstname']} {$value['lastname']}", + 'otherInfo' => $primaryEntity['entity_label'] + ]; + } + + return $response->withJson($data); + } + + public static function getUsersForVisa(Request $request, Response $response) + { + $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) { + if (ServiceModel::hasService(['id' => 'visa_documents', 'userId' => $value['user_id'], 'location' => 'visa', 'type' => 'use'])) { + $primaryEntity = UserModel::getPrimaryEntityByUserId(['userId' => $value['user_id']]); + $data[] = [ + 'type' => 'user', + 'id' => $value['user_id'], + 'idToDisplay' => "{$value['firstname']} {$value['lastname']}", + 'otherInfo' => $primaryEntity['entity_label'] + ]; + } + } + + return $response->withJson($data); + } + + public static function getEntities(Request $request, Response $response) + { + $entities = EntityModel::get([ + 'select' => ['entity_id', 'entity_label', 'short_label'], + 'where' => ['enabled = ?'], + 'data' => ['Y'], + 'orderBy' => ['entity_label'] + ]); + + $data = []; + foreach ($entities as $key => $value) { + $data[] = [ + 'type' => 'entity', + 'id' => $value['entity_id'], + 'idToDisplay' => $value['entity_label'], + 'otherInfo' => $value['short_label'] + ]; + } + + return $response->withJson($data); + } + + public static function getStatuses(Request $request, Response $response) + { + $statuses = StatusModel::get([ + 'select' => ['id', 'label_status'] + ]); + + $data = []; + foreach ($statuses as $key => $value) { + $data[] = [ + 'type' => 'status', + 'id' => $value['id'], + 'idToDisplay' => $value['label_status'], + 'otherInfo' => $value['label_status'] + ]; + } + + return $response->withJson($data); + } +} -- GitLab