- Ajout système complet de gestion des secteurs avec contours géographiques - Import des contours départementaux depuis GeoJSON - API REST pour la gestion des secteurs (/api/sectors) - Service de géolocalisation pour déterminer les secteurs - Migration base de données avec tables x_departements_contours et sectors_adresses - Interface Flutter pour visualisation et gestion des secteurs - Ajout thème sombre dans l'application - Corrections diverses et optimisations 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
100 lines
2.6 KiB
PHP
Executable File
100 lines
2.6 KiB
PHP
Executable File
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Controllers;
|
|
|
|
require_once __DIR__ . '/../Services/LogService.php';
|
|
require_once __DIR__ . '/../Services/ApiService.php';
|
|
|
|
use PDO;
|
|
use PDOException;
|
|
use Database;
|
|
use AppConfig;
|
|
use Request;
|
|
use Response;
|
|
use Session;
|
|
use LogService;
|
|
use ApiService;
|
|
use Exception;
|
|
|
|
class VilleController {
|
|
private PDO $db;
|
|
private AppConfig $appConfig;
|
|
|
|
public function __construct() {
|
|
$this->db = Database::getInstance();
|
|
$this->appConfig = AppConfig::getInstance();
|
|
}
|
|
|
|
/**
|
|
* Recherche les villes dont le code postal commence par les chiffres saisis
|
|
*
|
|
* @return void
|
|
*/
|
|
public function searchVillesByPostalCode(): void {
|
|
try {
|
|
// Récupérer le paramètre code_postal de la requête
|
|
$postalCode = Request::getValue('code_postal');
|
|
|
|
if (empty($postalCode) || strlen($postalCode) < 3) {
|
|
Response::json([
|
|
'status' => 'error',
|
|
'message' => 'Le code postal doit contenir au moins 3 chiffres'
|
|
], 400);
|
|
return;
|
|
}
|
|
|
|
// Valider que le code postal ne contient que des chiffres
|
|
if (!ctype_digit($postalCode)) {
|
|
Response::json([
|
|
'status' => 'error',
|
|
'message' => 'Le code postal doit contenir uniquement des chiffres'
|
|
], 400);
|
|
return;
|
|
}
|
|
|
|
// Rechercher les villes dont le code postal commence par les chiffres saisis
|
|
$stmt = $this->db->prepare('
|
|
SELECT id, fk_departement, libelle, code_postal
|
|
FROM x_villes
|
|
WHERE code_postal LIKE ?
|
|
ORDER BY libelle ASC
|
|
LIMIT 20
|
|
');
|
|
|
|
$stmt->execute([$postalCode . '%']);
|
|
$villes = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
// Renommer les champs pour une meilleure lisibilité côté client
|
|
$result = [];
|
|
foreach ($villes as $ville) {
|
|
$result[] = [
|
|
'id' => $ville['id'],
|
|
'departement_id' => $ville['fk_departement'],
|
|
'nom' => $ville['libelle'],
|
|
'code_postal' => $ville['code_postal']
|
|
];
|
|
}
|
|
|
|
Response::json([
|
|
'status' => 'success',
|
|
'success' => true,
|
|
'data' => $result
|
|
], 200);
|
|
} catch (Exception $e) {
|
|
LogService::log('Erreur lors de la recherche de villes par code postal', [
|
|
'level' => 'error',
|
|
'error' => $e->getMessage(),
|
|
'postalCode' => $postalCode ?? 'non défini'
|
|
]);
|
|
|
|
Response::json([
|
|
'status' => 'error',
|
|
'success' => false,
|
|
'message' => 'Erreur lors de la recherche de villes'
|
|
], 500);
|
|
}
|
|
}
|
|
}
|