Feature: add Paging & Intercom groups (Téléavertissement) with auto-answer headers, Asterisk Page application, and interactive member selection
This commit is contained in:
1 parent
33ad75d571
commit
2bd1ae0777
5 files changed
+610
No files matched your search
@@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user