diff --git a/src/core/controllers/AutoCompleteController.php b/src/core/controllers/AutoCompleteController.php index c29987ac089cf4a696326f88fd1cd1279bd17fc5..f5af51a290709f05d80d5909bd93a24e10f8ab12 100755 --- a/src/core/controllers/AutoCompleteController.php +++ b/src/core/controllers/AutoCompleteController.php @@ -693,20 +693,42 @@ class AutoCompleteController public static function getBanAddresses(Request $request, Response $response) { $data = $request->getQueryParams(); - $data['address'] = TextFormatModel::normalize(['string' => str_replace(['*', '~', '-', '\'', '"', '(', ')', ';', '/', '\\'], ' ', $data['address'])]); - $check = Validator::stringType()->notEmpty()->validate($data['address']); $check = $check && Validator::stringType()->notEmpty()->validate($data['department']); if (!$check) { return $response->withStatus(400)->withJson(['errors' => 'Bad Request']); } + $data['address'] = TextFormatModel::normalize(['string' => str_replace(['*', '~', '-', '\'', '"', '(', ')', ';', '/', '\\'], ' ', $data['address'])]); + $addressWords = explode(' ', $data['address']); + foreach ($addressWords as $key => $value) { + if (mb_strlen($value) <= 2 && !is_numeric($value)) { + unset($addressWords[$key]); + continue; + } + } + $data['address'] = implode(' ', $addressWords); + if (empty($data['address'])) { + return $response->withJson([]); + } + $useSectors = ParameterModel::getById(['id' => 'useSectorsForAddresses', 'select' => ['param_value_int']]); if (!empty($useSectors['param_value_int']) && $useSectors['param_value_int'] == 1) { - $data['address'] = str_replace(' ', '%', $data['address']); + $addressFieldNames = ['address_number', 'address_street', 'address_postcode', 'address_town']; + $fields = AutoCompleteController::getInsensitiveFieldsForRequest([ + 'fields' => $addressFieldNames + ]); + $requestData = AutoCompleteController::getDataForRequest([ + 'search' => $data['address'], + 'fields' => $fields, + 'fieldsNumber' => count($addressFieldNames), + 'where' => [], + 'data' => [] + ]); $hits = ContactAddressSectorModel::get([ 'select' => ['address_number', 'address_street', 'address_postcode', 'address_town', 'label', 'ban_id'], - 'where' => ["unaccent(concat(address_number, ' ', address_street, ' ', address_postcode, ' ', address_town)) ilike '%{$data['address']}%'"], + 'where' => $requestData['where'], + 'data' => $requestData['data'], 'orderBy' => ['id desc'], 'limit' => 100 ]); @@ -743,21 +765,6 @@ class AutoCompleteController $index = \Zend_Search_Lucene::open($path); \Zend_Search_Lucene::setResultSetLimit(100); - $aAddress = explode(' ', $data['address']); - foreach ($aAddress as $key => $value) { - if (mb_strlen($value) <= 2 && !is_numeric($value)) { - unset($aAddress[$key]); - continue; - } - if (mb_strlen($value) >= 3 && $value != 'rue' && $value != 'avenue' && $value != 'boulevard') { - $aAddress[$key] .= '*'; - } - } - $data['address'] = implode(' ', $aAddress); - if (empty($data['address'])) { - return $response->withJson([]); - } - $hits = $index->find($data['address']); $addresses = [];