feat(extensions): auto-regenerate and reload Asterisk configs instantly on save/delete (v1.4.5)
This commit is contained in:
1 parent
07b53b8002
commit
26d832c69f
3 files changed
+44
-6
No files matched your search
+39
-1
@@ -140,7 +140,7 @@ try {
|
|||||||
$installedVerData = file_exists("{$appDir}/version.json")
|
$installedVerData = file_exists("{$appDir}/version.json")
|
||||||
? json_decode((string)file_get_contents("{$appDir}/version.json"), true)
|
? 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([
|
echo json_encode([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
@@ -369,6 +369,13 @@ try {
|
|||||||
// Synchronisation automatique de l'annuaire d'entreprise
|
// Synchronisation automatique de l'annuaire d'entreprise
|
||||||
PhonebookManager::syncExtensions($db);
|
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)');
|
$modeBadge = $transport === 'tls' ? 'Distant (TLS + SRTP)' : ($encryption ? 'Interne (UDP + SRTP)' : 'Interne (UDP)');
|
||||||
echo json_encode([
|
echo json_encode([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
@@ -381,6 +388,13 @@ try {
|
|||||||
$stmt = $db->prepare('DELETE FROM extensions WHERE id = :id');
|
$stmt = $db->prepare('DELETE FROM extensions WHERE id = :id');
|
||||||
$stmt->execute([':id' => $id]);
|
$stmt->execute([':id' => $id]);
|
||||||
PhonebookManager::syncExtensions($db);
|
PhonebookManager::syncExtensions($db);
|
||||||
|
|
||||||
|
$generator->writeAllConfigs();
|
||||||
|
try {
|
||||||
|
$ami = AmiClient::fromDatabase($db);
|
||||||
|
$ami->reloadPjsipAndDialplan();
|
||||||
|
} catch (\Throwable $e) {}
|
||||||
|
|
||||||
echo json_encode([
|
echo json_encode([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'message' => 'Poste téléphonique supprimé de la base SQLite.',
|
'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([
|
echo json_encode([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'message' => "Groupe d'appel {$extension} ({$name}) sauvegardé.",
|
'message' => "Groupe d'appel {$extension} ({$name}) sauvegardé.",
|
||||||
@@ -449,6 +469,12 @@ try {
|
|||||||
case 'delete_group':
|
case 'delete_group':
|
||||||
$id = (int)($payload['id'] ?? 0);
|
$id = (int)($payload['id'] ?? 0);
|
||||||
$db->prepare('DELETE FROM groups WHERE id = :id')->execute([':id' => $id]);
|
$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([
|
echo json_encode([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'message' => "Groupe de sonnerie supprimé.",
|
'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([
|
echo json_encode([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'message' => "Groupe de téléavertissement {$extension} ({$name}) sauvegardé.",
|
'message' => "Groupe de téléavertissement {$extension} ({$name}) sauvegardé.",
|
||||||
@@ -549,6 +581,12 @@ try {
|
|||||||
case 'delete_paging_group':
|
case 'delete_paging_group':
|
||||||
$id = (int)($payload['id'] ?? 0);
|
$id = (int)($payload['id'] ?? 0);
|
||||||
$db->prepare('DELETE FROM paging_groups WHERE id = :id')->execute([':id' => $id]);
|
$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([
|
echo json_encode([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'message' => "Groupe de téléavertissement supprimé.",
|
'message' => "Groupe de téléavertissement supprimé.",
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ $companyLogo = trim($branding['company_logo'] ?? '');
|
|||||||
$hasBranding = !empty($companyName) || !empty($companyLogo);
|
$hasBranding = !empty($companyName) || !empty($companyLogo);
|
||||||
|
|
||||||
$appVerData = file_exists(__DIR__ . '/../version.json') ? json_decode((string)file_get_contents(__DIR__ . '/../version.json'), true) : [];
|
$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';
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="fr" class="h-full">
|
<html lang="fr" class="h-full">
|
||||||
|
|||||||
+4
-4
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"version": "1.4.4",
|
"version": "1.4.5",
|
||||||
"codename": "Helios",
|
"codename": "Helios",
|
||||||
"release_date": "2026-11-04",
|
"release_date": "2026-11-04",
|
||||||
"min_php_version": "8.2",
|
"min_php_version": "8.2",
|
||||||
"changelog": [
|
"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)",
|
"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"
|
||||||
"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"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user