Feature: add Paging & Intercom groups (Téléavertissement) with auto-answer headers, Asterisk Page application, and interactive member selection

This commit is contained in:
sorcier committed 2026-11-02 17:01:02 +01:00
1 parent 33ad75d571
commit 2bd1ae0777
5 files changed
+610

No files matched your search

+57
View File
@@ -287,6 +287,22 @@ class Database
);
CREATE INDEX IF NOT EXISTS idx_phonebook_ext ON phonebook_contacts(extension_id);
CREATE INDEX IF NOT EXISTS idx_phonebook_group ON phonebook_contacts(group_name);
-- 14. Table paging_groups : Groupes de téléavertissement & Interphonie (Paging)
CREATE TABLE IF NOT EXISTS paging_groups (
id INTEGER PRIMARY KEY AUTOINCREMENT,
extension VARCHAR(16) NOT NULL UNIQUE,
name VARCHAR(64) NOT NULL,
description VARCHAR(255) NOT NULL DEFAULT '',
members TEXT NOT NULL DEFAULT '[]',
duplex INTEGER NOT NULL DEFAULT 0,
busy_mode VARCHAR(16) NOT NULL DEFAULT 'skip',
play_beep INTEGER NOT NULL DEFAULT 1,
timeout INTEGER NOT NULL DEFAULT 120,
enabled INTEGER NOT NULL DEFAULT 1 CHECK (enabled IN (0, 1)),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
SQL;
$db->exec($schema);
@@ -301,6 +317,7 @@ class Database
self::migrateCertificatesTable($db);
self::migrateFeatureCodesTable($db);
self::migratePhonebookContactsTable($db);
self::migratePagingGroupsTable($db);
// Création du compte admin par défaut (admin / admin123) s'il n'existe aucun utilisateur
$userCount = (int)$db->query('SELECT COUNT(*) FROM users')->fetchColumn();
@@ -908,5 +925,45 @@ class Database
CREATE INDEX IF NOT EXISTS idx_phonebook_group ON phonebook_contacts(group_name);
");
}
private static function migratePagingGroupsTable(PDO $db): void
{
$db->exec("
CREATE TABLE IF NOT EXISTS paging_groups (
id INTEGER PRIMARY KEY AUTOINCREMENT,
extension VARCHAR(16) NOT NULL UNIQUE,
name VARCHAR(64) NOT NULL,
description VARCHAR(255) NOT NULL DEFAULT '',
members TEXT NOT NULL DEFAULT '[]',
duplex INTEGER NOT NULL DEFAULT 0,
busy_mode VARCHAR(16) NOT NULL DEFAULT 'skip',
play_beep INTEGER NOT NULL DEFAULT 1,
timeout INTEGER NOT NULL DEFAULT 120,
enabled INTEGER NOT NULL DEFAULT 1 CHECK (enabled IN (0, 1)),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
");
$count = (int)$db->query('SELECT COUNT(*) FROM paging_groups')->fetchColumn();
if ($count === 0) {
$exts = $db->query('SELECT extension FROM extensions ORDER BY CAST(extension AS INTEGER) ASC')->fetchAll(PDO::FETCH_COLUMN);
$members = !empty($exts) ? $exts : ['101', '102'];
$stmt = $db->prepare('
INSERT INTO paging_groups (extension, name, description, members, duplex, busy_mode, play_beep, timeout, enabled)
VALUES (:ext, :name, :desc, :members, :duplex, :busy_mode, :play_beep, :timeout, 1)
');
$stmt->execute([
':ext' => '100',
':name' => 'Téléavertissement Général',
':desc' => 'Diffusion générale sur haut-parleur de tous les postes',
':members' => json_encode($members),
':duplex' => 0,
':busy_mode' => 'skip',
':play_beep' => 1,
':timeout' => 120,
]);
}
}
}