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

FEAT #7722 Autocomplete

parent ee821381
No related branches found
No related tags found
No related merge requests found
......@@ -63,6 +63,7 @@ $app->delete('/actions/{id}', \Action\controllers\ActionController::class . ':de
$app->get('/administration', \SrcCore\controllers\CoreController::class . ':getAdministration');
//AutoComplete
$app->get('/autocomplete/contacts', \SrcCore\controllers\AutoCompleteController::class . ':getContacts');
$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');
......
......@@ -20,6 +20,24 @@ use SrcCore\models\ValidatorModel;
abstract class ContactModelAbstract
{
public static function getOnView(array $aArgs)
{
ValidatorModel::notEmpty($aArgs, ['select']);
ValidatorModel::arrayType($aArgs, ['select', 'where', 'data', 'orderBy']);
ValidatorModel::intType($aArgs, ['limit']);
$aContacts = DatabaseModel::select([
'select' => $aArgs['select'],
'table' => ['view_contacts'],
'where' => $aArgs['where'],
'data' => $aArgs['data'],
'order_by' => $aArgs['orderBy'],
'limit' => $aArgs['limit']
]);
return $aContacts;
}
public static function getById(array $aArgs)
{
ValidatorModel::notEmpty($aArgs, ['id']);
......
......@@ -14,6 +14,7 @@
namespace SrcCore\controllers;
use Contact\models\ContactModel;
use Group\models\ServiceModel;
use Respect\Validation\Validator;
use Slim\Http\Request;
......@@ -27,6 +28,60 @@ use User\models\UserModel;
class AutoCompleteController
{
public static function getContacts(Request $request, Response $response)
{
$data = $request->getQueryParams();
$check = Validator::stringType()->notEmpty()->validate($data['search']);
$check = $check && Validator::stringType()->notEmpty()->validate($data['type']);
if (!$check) {
return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
}
$searchItems = explode(' ', $data['search']);
$fields = '(contact_firstname ilike ? OR contact_lastname ilike ? OR firstname ilike ? OR lastname ilike ? OR society ilike ?
OR address_num ilike ? OR address_street ilike ? OR address_town ilike ? OR address_postal_code ilike ?)';
$where = ['contact_type = ?'];
$data = [$data['type']];
foreach ($searchItems as $item) {
$where[] = $fields;
for ($i = 0; $i < 9; $i++) {
$data[] = $item . '%';
}
}
$contacts = ContactModel::getOnView([
'select' => [
'ca_id', 'firstname', 'lastname', 'contact_lastname', 'contact_firstname', 'society', 'address_num',
'address_street', 'address_town', 'address_postal_code', 'is_corporate_person'
],
'where' => $where,
'data' => $data,
'limit' => 25000
]);
$data = [];
foreach ($contacts as $contact) {
if ($contact['is_corporate_person'] == 'Y') {
$arr = [
'addressId' => $contact['ca_id'],
'contact' => $contact['society'],
'address' => "{$contact['firstname']} {$contact['lastname']}, {$contact['address_num']} {$contact['address_street']} {$contact['address_town']} {$contact['address_postal_code']}",
];
} else {
$arr = [
'addressId' => $contact['ca_id'],
'contact' => "{$contact['contact_firstname']} {$contact['contact_lastname']} {$contact['society']}",
'address' => "{$contact['address_num']} {$contact['address_street']} {$contact['address_town']} {$contact['address_postal_code']}",
];
}
$data[] = $arr;
}
return $response->withJson($data);
}
public static function getUsers(Request $request, Response $response)
{
$excludedUsers = ['superadmin'];
......
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