diff --git a/public/api.php b/public/api.php index 4d3bdd0..20f5e03 100644 --- a/public/api.php +++ b/public/api.php @@ -140,7 +140,7 @@ try { $installedVerData = file_exists("{$appDir}/version.json") ? json_decode((string)file_get_contents("{$appDir}/version.json"), true) : []; - $installedVer = $installedVerData['version'] ?? '1.4.4'; + $installedVer = $installedVerData['version'] ?? '1.4.5'; echo json_encode([ 'success' => true, @@ -369,6 +369,13 @@ try { // Synchronisation automatique de l'annuaire d'entreprise PhonebookManager::syncExtensions($db); + // Régénération automatique des fichiers Asterisk et rechargement PJSIP/Dialplan en direct + $generator->writeAllConfigs(); + try { + $ami = AmiClient::fromDatabase($db); + $ami->reloadPjsipAndDialplan(); + } catch (\Throwable $e) {} + $modeBadge = $transport === 'tls' ? 'Distant (TLS + SRTP)' : ($encryption ? 'Interne (UDP + SRTP)' : 'Interne (UDP)'); echo json_encode([ 'success' => true, @@ -381,6 +388,13 @@ try { $stmt = $db->prepare('DELETE FROM extensions WHERE id = :id'); $stmt->execute([':id' => $id]); PhonebookManager::syncExtensions($db); + + $generator->writeAllConfigs(); + try { + $ami = AmiClient::fromDatabase($db); + $ami->reloadPjsipAndDialplan(); + } catch (\Throwable $e) {} + echo json_encode([ 'success' => true, 'message' => 'Poste téléphonique supprimé de la base SQLite.', @@ -440,6 +454,12 @@ try { ]); } + $generator->writeAllConfigs(); + try { + $ami = AmiClient::fromDatabase($db); + $ami->reloadPjsipAndDialplan(); + } catch (\Throwable $e) {} + echo json_encode([ 'success' => true, 'message' => "Groupe d'appel {$extension} ({$name}) sauvegardé.", @@ -449,6 +469,12 @@ try { case 'delete_group': $id = (int)($payload['id'] ?? 0); $db->prepare('DELETE FROM groups WHERE id = :id')->execute([':id' => $id]); + $generator->writeAllConfigs(); + try { + $ami = AmiClient::fromDatabase($db); + $ami->reloadPjsipAndDialplan(); + } catch (\Throwable $e) {} + echo json_encode([ 'success' => true, 'message' => "Groupe de sonnerie supprimé.", @@ -540,6 +566,12 @@ try { ]); } + $generator->writeAllConfigs(); + try { + $ami = AmiClient::fromDatabase($db); + $ami->reloadPjsipAndDialplan(); + } catch (\Throwable $e) {} + echo json_encode([ 'success' => true, 'message' => "Groupe de téléavertissement {$extension} ({$name}) sauvegardé.", @@ -549,6 +581,12 @@ try { case 'delete_paging_group': $id = (int)($payload['id'] ?? 0); $db->prepare('DELETE FROM paging_groups WHERE id = :id')->execute([':id' => $id]); + $generator->writeAllConfigs(); + try { + $ami = AmiClient::fromDatabase($db); + $ami->reloadPjsipAndDialplan(); + } catch (\Throwable $e) {} + echo json_encode([ 'success' => true, 'message' => "Groupe de téléavertissement supprimé.", diff --git a/public/index.php b/public/index.php index 5795e45..863d3c5 100644 --- a/public/index.php +++ b/public/index.php @@ -18,7 +18,7 @@ $companyLogo = trim($branding['company_logo'] ?? ''); $hasBranding = !empty($companyName) || !empty($companyLogo); $appVerData = file_exists(__DIR__ . '/../version.json') ? json_decode((string)file_get_contents(__DIR__ . '/../version.json'), true) : []; -$appVersion = $appVerData['version'] ?? '1.4.4'; +$appVersion = $appVerData['version'] ?? '1.4.5'; ?> diff --git a/version.json b/version.json index 825e73d..b03e75c 100644 --- a/version.json +++ b/version.json @@ -1,12 +1,12 @@ { - "version": "1.4.4", + "version": "1.4.5", "codename": "Helios", "release_date": "2026-11-04", "min_php_version": "8.2", "changelog": [ + "Application instantanée des mots de passe SIP et configurations des postes dans Asterisk (rechargement PJSIP en temps réel)", + "Suppression du délai d'application sur les postes, groupes de sonnerie et groupes de téléavertissement", "Fiabilisation maximale de la mise à jour (rechargement web asynchrone non-bloquant et gestion d'erreurs tolérante)", - "Sonde automatique de secours évitant toute fausse alerte réseau sous Safari / WebKit lors du rechargement des services", - "Nouvelle boîte modale élégante et personnalisée pour confirmer le lancement des mises à jour", - "Rendu serveur natif garanti du logo et nom de l'exploitant sur la page de connexion" + "Nouvelle boîte modale élégante et personnalisée pour confirmer le lancement des mises à jour" ] }