SMARTEYE LUCAS

'.(isset($error)?'

'.$error.'

':'').'
'; exit; } // --- CHARGEMENT DES DONNÉES --- $data = file_exists($DB_FILE) ? json_decode(file_get_contents($DB_FILE), true) : ['clients' => []]; // Sécurité : structure minimale si fichier vide ou corrompu if (!isset($data['clients'])) $data['clients'] = []; // --- FONCTION TEST ALERTE (SIMULATION SMS) --- if (isset($_GET['test_alert'])) { $idTest = $_GET['test_alert']; if (isset($data['clients'][$idTest])) { $client = $data['clients'][$idTest]; $contacts = $client['contacts'] ?? []; $count = 0; $mobiles = []; // ICI : Simulation de l'appel API SMS // Dans le futur api.php, on utilisera ces numéros foreach($contacts as $c) { if(!empty($c['phone'])) { $mobiles[] = $c['phone']; $count++; // LOG l'envoi pour preuve $log_msg = date("Y-m-d H:i:s") . " [TEST ADMIN] SMS vers {$c['phone']} pour {$client['name']}\n"; file_put_contents("sms_history.log", $log_msg, FILE_APPEND); } } $successMsg = "✅ Test d'alerte simulé envoyé à $count contacts !
(" . implode(', ', $mobiles) . ")"; } } // --- SAUVEGARDE CLIENT (AJOUT / EDIT) --- if (isset($_POST['save_client'])) { // Nettoyage de l'ID pour éviter les caractères spéciaux $id = preg_replace('/[^a-z0-9_]/', '', strtolower($_POST['client_id'])); // Initialisation si nouveau if (!isset($data['clients'][$id])) { $data['clients'][$id]['created_at'] = date('Y-m-d H:i:s'); $data['clients'][$id]['alerte'] = false; // Création dossier images $client_dir = "clients/" . $_POST['name'] . "/"; if (!is_dir($client_dir)) { mkdir($client_dir, 0775, true); } } // Token : saisi manuellement, ou auto-généré si vide $token_input = trim($_POST['token'] ?? ''); if (!empty($token_input)) { $data['clients'][$id]['token'] = $token_input; } elseif (!isset($data['clients'][$id]['token'])) { $data['clients'][$id]['token'] = bin2hex(random_bytes(4)); } // Mot de passe LucasApp (bcrypt) — ignorer si valeur inchangée (bullets) $new_password = trim($_POST['client_password'] ?? ''); if (!empty($new_password) && $new_password !== str_repeat("\xE2\x80\xA2", 8) && $new_password !== '••••••••') { $data['clients'][$id]['password_hash'] = password_hash($new_password, PASSWORD_BCRYPT); } // Mise à jour des champs $data['clients'][$id]['name'] = $_POST['name']; $data['clients'][$id]['address'] = $_POST['address']; $data['clients'][$id]['city'] = $_POST['city']; $data['clients'][$id]['phone_mobile'] = $_POST['phone_mobile']; $data['clients'][$id]['phone_fixed'] = $_POST['phone_fixed']; $data['clients'][$id]['cp'] = $_POST['cp'] ?? ''; $data['clients'][$id]['date_naissance'] = $_POST['date_naissance'] ?? ''; $data['clients'][$id]['sex'] = $_POST['sex']; // Champs bénéficiaire $data['clients'][$id]['senior_name'] = $_POST['senior_name'] ?? ''; $data['clients'][$id]['senior_nickname'] = $_POST['senior_nickname'] ?? ''; $data['clients'][$id]['senior_photo'] = $_POST['senior_photo'] ?? ''; if (!isset($data['clients'][$id]['fcm_tokens'])) { $data['clients'][$id]['fcm_tokens'] = []; } // Champs compte / technique $data['clients'][$id]['jetson_id'] = $_POST['jetson_id'] ?? ''; $data['clients'][$id]['jetson_ip'] = $_POST['jetson_ip'] ?? ''; $data['clients'][$id]['jetson_modele'] = $_POST['jetson_modele'] ?? ''; $data['clients'][$id]['jetson_ram'] = $_POST['jetson_ram'] ?? ''; $data['clients'][$id]['jetson_ssd'] = $_POST['jetson_ssd'] ?? ''; // Caméras (5 max) $cameras = []; if (isset($_POST['cam_marque'])) { for ($i = 0; $i < count($_POST['cam_marque']); $i++) { if (!empty($_POST['cam_marque'][$i]) || !empty($_POST['cam_ip'][$i])) { $cameras[] = [ 'marque' => $_POST['cam_marque'][$i] ?? '', 'modele' => $_POST['cam_modele'][$i] ?? '', 'serie' => $_POST['cam_serie'][$i] ?? '', 'ip' => $_POST['cam_ip'][$i] ?? '', 'port_rtsp' => $_POST['cam_port_rtsp'][$i] ?? '', ]; } } } $data['clients'][$id]['cameras'] = $cameras; // Gestion des contacts multiples $contacts = []; if (isset($_POST['contact_name'])) { for ($i = 0; $i < count($_POST['contact_name']); $i++) { if (!empty($_POST['contact_name'][$i])) { $contacts[] = [ 'name' => $_POST['contact_name'][$i], 'role' => $_POST['contact_role'][$i], 'phone' => $_POST['contact_phone'][$i], 'email' => $_POST['contact_email'][$i], 'os' => $_POST['contact_os'][$i] ?? '' ]; } } } $data['clients'][$id]['contacts'] = $contacts; // Écriture DB file_put_contents($DB_FILE, json_encode($data, JSON_PRETTY_PRINT)); $tab = $_POST['current_tab'] ?? 'identite'; header("Location: admin.php?edit=$id&success=1&tab=$tab"); exit; } // --- ARRÊT ALERTE --- if (isset($_GET['stop_alert'])) { $stopId = $_GET['stop_alert']; if (isset($data['clients'][$stopId])) { $data['clients'][$stopId]['alerte'] = false; unset($data['clients'][$stopId]['handled_by']); unset($data['clients'][$stopId]['handled_at']); unset($data['clients'][$stopId]['message']); unset($data['clients'][$stopId]['last_update']); file_put_contents($DB_FILE, json_encode($data, JSON_PRETTY_PRINT)); // Reload data after save $data = json_decode(file_get_contents($DB_FILE), true); } header("Location: admin.php?alert_stopped=1"); exit; } // --- SUPPRESSION --- if (isset($_GET['del'])) { unset($data['clients'][$_GET['del']]); file_put_contents($DB_FILE, json_encode($data, JSON_PRETTY_PRINT)); header("Location: admin.php"); exit; } // --- PRÉPARATION VUE --- $editClient = null; $editId = ""; if (isset($_GET['edit'])) { $editId = $_GET['edit']; $editClient = $data['clients'][$editId] ?? null; } elseif (isset($_GET['new'])) { // Mode nouveau client $editClient = null; } ?> SmartEye Admin
✅ Modifications enregistrées avec succès !
✅ Alerte arrêtée avec succès — Le client est revenu en surveillance active.
Annuler

Parc Clients Surveillés

+ Nouveau Dossier

📭

Aucun client enregistré.

Cliquez sur "Nouveau Dossier" pour commencer.

$client): ?>
BénéficiaireLocalisationContactsStatutActions
ID:

ALERTE EN COURS Surveillance Active