Skip to content
Snippets Groups Projects
Verified Commit 3f51f59a authored by Damien's avatar Damien
Browse files

FEAT #8101 Autocomplete with search

parent cbd9ea19
No related branches found
No related tags found
No related merge requests found
...@@ -23,8 +23,8 @@ use Entity\models\EntityModel; ...@@ -23,8 +23,8 @@ use Entity\models\EntityModel;
use SrcCore\models\CoreConfigModel; use SrcCore\models\CoreConfigModel;
use SrcCore\models\DatabaseModel; use SrcCore\models\DatabaseModel;
use SrcCore\models\TextFormatModel; use SrcCore\models\TextFormatModel;
use SrcCore\models\ValidatorModel;
use Status\models\StatusModel; use Status\models\StatusModel;
use User\models\UserEntityModel;
use User\models\UserModel; use User\models\UserModel;
class AutoCompleteController class AutoCompleteController
...@@ -86,23 +86,18 @@ class AutoCompleteController ...@@ -86,23 +86,18 @@ class AutoCompleteController
$excludedUsers = ['superadmin']; $excludedUsers = ['superadmin'];
$searchItems = explode(' ', $data['search']); $requestData = AutoCompleteController::getDataForRequest([
'search' => $data['search'],
$fields = '(firstname ilike ? OR lastname ilike ?)'; 'fields' => '(firstname ilike ? OR lastname ilike ?)',
$where = ['enabled = ?', 'status != ?', 'user_id not in (?)']; 'where' => ['enabled = ?', 'status != ?', 'user_id not in (?)'],
$requestData = ['Y', 'DEL', $excludedUsers]; 'data' => ['Y', 'DEL', $excludedUsers],
foreach ($searchItems as $item) { 'fieldsNumber' => 2,
if (strlen($item) >= 2) { ]);
$where[] = $fields;
$requestData[] = "%{$item}%";
$requestData[] = "%{$item}%";
}
}
$users = UserModel::get([ $users = UserModel::get([
'select' => ['user_id', 'firstname', 'lastname'], 'select' => ['user_id', 'firstname', 'lastname'],
'where' => $where, 'where' => $requestData['where'],
'data' => $requestData, 'data' => $requestData['data'],
'orderBy' => ['lastname'] 'orderBy' => ['lastname']
]); ]);
...@@ -121,21 +116,72 @@ class AutoCompleteController ...@@ -121,21 +116,72 @@ class AutoCompleteController
public static function getUsersForAdministration(Request $request, Response $response) public static function getUsersForAdministration(Request $request, Response $response)
{ {
$data = $request->getQueryParams();
$check = Validator::stringType()->notEmpty()->validate($data['search']);
if (!$check) {
return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
}
$excludedUsers = ['superadmin'];
if ($GLOBALS['userId'] != 'superadmin') { if ($GLOBALS['userId'] != 'superadmin') {
$entities = EntityModel::getAllEntitiesByUserId(['userId' => $GLOBALS['userId']]); $entities = EntityModel::getAllEntitiesByUserId(['userId' => $GLOBALS['userId']]);
$users = UserEntityModel::getUsersByEntities([
$requestData = AutoCompleteController::getDataForRequest([
'search' => $data['search'],
'fields' => '(users.firstname ilike ? OR users.lastname ilike ?)',
'where' => [
'users.user_id = users_entities.user_id',
'users_entities.entity_id in (?)',
'users.status != ?',
'users.enabled = ?'
],
'data' => [$entities, 'DEL', 'Y'],
'fieldsNumber' => 2,
]);
$users = DatabaseModel::select([
'select' => ['DISTINCT users.user_id', 'users.id', 'users.firstname', 'users.lastname'], 'select' => ['DISTINCT users.user_id', 'users.id', 'users.firstname', 'users.lastname'],
'entities' => $entities 'table' => ['users, users_entities'],
'where' => $requestData['where'],
'data' => $requestData['data']
]);
$requestData = AutoCompleteController::getDataForRequest([
'search' => $data['search'],
'fields' => '(users.firstname ilike ? OR users.lastname ilike ?)',
'where' => [
'users_entities IS NULL',
'users.user_id not in (?)',
'users.status != ?',
'users.enabled = ?'
],
'data' => [$excludedUsers, 'DEL', 'Y'],
'fieldsNumber' => 2,
]); ]);
$usersNoEntities = UserEntityModel::getUsersWithoutEntities(['select' => ['users.id', 'users.user_id', 'users.firstname', 'users.lastname']]);
$usersNoEntities = DatabaseModel::select([
'select' => ['users.id', 'users.user_id', 'users.firstname', 'users.lastname'],
'table' => ['users', 'users_entities'],
'left_join' => ['users.user_id = users_entities.user_id'],
'where' => $requestData['where'],
'data' => $requestData['data']
]);
$users = array_merge($users, $usersNoEntities); $users = array_merge($users, $usersNoEntities);
} else { } else {
$excludedUsers = ['superadmin']; $requestData = AutoCompleteController::getDataForRequest([
'search' => $data['search'],
'fields' => '(firstname ilike ? OR lastname ilike ?)',
'where' => ['enabled = ?', 'status != ?', 'user_id not in (?)'],
'data' => ['Y', 'DEL', $excludedUsers],
'fieldsNumber' => 2,
]);
$users = UserModel::get([ $users = UserModel::get([
'select' => ['id', 'user_id', 'firstname', 'lastname'], 'select' => ['user_id', 'firstname', 'lastname'],
'where' => ['enabled = ?', 'status != ?', 'user_id not in (?)'], 'where' => $requestData['where'],
'data' => ['Y', 'DEL', $excludedUsers], 'data' => $requestData['data'],
'orderBy' => ['lastname'] 'orderBy' => ['lastname']
]); ]);
} }
...@@ -155,12 +201,18 @@ class AutoCompleteController ...@@ -155,12 +201,18 @@ class AutoCompleteController
public static function getUsersForVisa(Request $request, Response $response) public static function getUsersForVisa(Request $request, Response $response)
{ {
$data = $request->getQueryParams();
$check = Validator::stringType()->notEmpty()->validate($data['search']);
if (!$check) {
return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
}
$excludedUsers = ['superadmin']; $excludedUsers = ['superadmin'];
$users = DatabaseModel::select([ $requestData = AutoCompleteController::getDataForRequest([
'select' => ['DISTINCT users.user_id', 'users.firstname', 'users.lastname'], 'search' => $data['search'],
'table' => ['users, usergroup_content, usergroups_services'], 'fields' => '(users.firstname ilike ? OR users.lastname ilike ?)',
'where' => [ 'where' => [
'usergroup_content.group_id = usergroups_services.group_id', 'usergroup_content.group_id = usergroups_services.group_id',
'usergroup_content.user_id = users.user_id', 'usergroup_content.user_id = users.user_id',
'usergroups_services.service_id in (?)', 'usergroups_services.service_id in (?)',
...@@ -168,7 +220,15 @@ class AutoCompleteController ...@@ -168,7 +220,15 @@ class AutoCompleteController
'users.enabled = ?', 'users.enabled = ?',
'users.status != ?' 'users.status != ?'
], ],
'data' => [['visa_documents', 'sign_document'], $excludedUsers, 'Y', 'DEL'], 'data' => [['visa_documents', 'sign_document'], $excludedUsers, 'Y', 'DEL'],
'fieldsNumber' => 2,
]);
$users = DatabaseModel::select([
'select' => ['DISTINCT users.user_id', 'users.firstname', 'users.lastname'],
'table' => ['users, usergroup_content, usergroups_services'],
'where' => $requestData['where'],
'data' => $requestData['data'],
'order_by' => ['users.lastname'] 'order_by' => ['users.lastname']
]); ]);
...@@ -187,10 +247,24 @@ class AutoCompleteController ...@@ -187,10 +247,24 @@ class AutoCompleteController
public static function getEntities(Request $request, Response $response) public static function getEntities(Request $request, Response $response)
{ {
$data = $request->getQueryParams();
$check = Validator::stringType()->notEmpty()->validate($data['search']);
if (!$check) {
return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
}
$requestData = AutoCompleteController::getDataForRequest([
'search' => $data['search'],
'fields' => '(entity_label ilike ?)',
'where' => ['enabled = ?'],
'data' => ['Y'],
'fieldsNumber' => 1,
]);
$entities = EntityModel::get([ $entities = EntityModel::get([
'select' => ['entity_id', 'entity_label', 'short_label'], 'select' => ['entity_id', 'entity_label', 'short_label'],
'where' => ['enabled = ?'], 'where' => $requestData['where'],
'data' => ['Y'], 'data' => $requestData['data'],
'orderBy' => ['entity_label'] 'orderBy' => ['entity_label']
]); ]);
...@@ -209,9 +283,7 @@ class AutoCompleteController ...@@ -209,9 +283,7 @@ class AutoCompleteController
public static function getStatuses(Request $request, Response $response) public static function getStatuses(Request $request, Response $response)
{ {
$statuses = StatusModel::get([ $statuses = StatusModel::get(['select' => ['id', 'label_status', 'img_filename']]);
'select' => ['id', 'label_status', 'img_filename']
]);
$data = []; $data = [];
foreach ($statuses as $value) { foreach ($statuses as $value) {
...@@ -284,4 +356,25 @@ class AutoCompleteController ...@@ -284,4 +356,25 @@ class AutoCompleteController
return $response->withJson($addresses); return $response->withJson($addresses);
} }
private static function getDataForRequest(array $aArgs)
{
ValidatorModel::notEmpty($aArgs, ['search', 'fields', 'where', 'data', 'fieldsNumber']);
ValidatorModel::stringType($aArgs, ['search', 'fields']);
ValidatorModel::arrayType($aArgs, ['where', 'data']);
ValidatorModel::intType($aArgs, ['fieldsNumber']);
$searchItems = explode(' ', $aArgs['search']);
foreach ($searchItems as $item) {
if (strlen($item) >= 2) {
$aArgs['where'][] = $aArgs['fields'];
for ($i = 0; $i < $aArgs['fieldsNumber']; $i++) {
$aArgs['data'][] = "%{$item}%";
}
}
}
return ['where' => $aArgs['where'], 'data' => $aArgs['data']];
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment