Fix: add phonebook_contacts to database schema and migrations; harden install script

This commit is contained in:
sorcier committed 2026-11-02 03:51:27 +01:00
1 parent fb0997e759
commit 563a01e3c3
4 files changed
+68 -6

No files matched your search

+6 -4
View File
@@ -304,6 +304,11 @@ if [ -z "$PHP_SOCK" ]; then
PHP_SOCK="/run/php/php8.4-fpm.sock" PHP_SOCK="/run/php/php8.4-fpm.sock"
fi fi
# Préparation des répertoires Nginx et activation de nexus-pbx
mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled
rm -f /etc/nginx/sites-enabled/default
ln -sf /etc/nginx/sites-available/nexus-pbx /etc/nginx/sites-enabled/nexus-pbx
# Application de la configuration Nginx complète (Ports 80, 8080, 8443) # Application de la configuration Nginx complète (Ports 80, 8080, 8443)
php -r ' php -r '
require_once "/var/www/nexus-pbx/src/Database.php"; require_once "/var/www/nexus-pbx/src/Database.php";
@@ -313,9 +318,6 @@ $st = $db->query("SELECT admin_https_port, certbot_strict_port80 FROM settings W
App\FirewallManager::applyNginxConfig((int)($st["admin_https_port"] ?? 8443), (int)($st["certbot_strict_port80"] ?? 0)); App\FirewallManager::applyNginxConfig((int)($st["admin_https_port"] ?? 8443), (int)($st["certbot_strict_port80"] ?? 0));
' '
rm -f /etc/nginx/sites-enabled/default
ln -sf /etc/nginx/sites-available/nexus-pbx /etc/nginx/sites-enabled/nexus-pbx
# Filtre Fail2ban Asterisk # Filtre Fail2ban Asterisk
cat << 'EOF' > /etc/fail2ban/filter.d/asterisk.conf cat << 'EOF' > /etc/fail2ban/filter.d/asterisk.conf
[Definition] [Definition]
@@ -391,4 +393,4 @@ systemctl restart cron && systemctl enable cron
# Exécution immédiate de la bannière console # Exécution immédiate de la bannière console
clear || true clear || true
/usr/local/bin/nexus-banner /usr/local/bin/nexus-banner --force || true
+2 -2
View File
@@ -3,8 +3,8 @@
# NexusPBX - Terminal Console Banner & Network Status (FreePBX-style) # NexusPBX - Terminal Console Banner & Network Status (FreePBX-style)
# ============================================================================== # ==============================================================================
# Ne s'exécute que pour les shells interactifs # Ne s'exécute que pour les shells interactifs ou avec l'option --force
if [ -t 1 ]; then if [ -t 1 ] || [ "${1:-}" = "--force" ] || [ -n "${SSH_TTY:-}" ]; then
C_GREEN="\033[1;32m" C_GREEN="\033[1;32m"
C_CYAN="\033[1;36m" C_CYAN="\033[1;36m"
+41
View File
@@ -269,6 +269,24 @@ class Database
created_at DATETIME DEFAULT CURRENT_TIMESTAMP, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
); );
-- 13. Table phonebook_contacts : Annuaire d'Entreprise & Carnet d'Adresses IP Phone
CREATE TABLE IF NOT EXISTS phonebook_contacts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
extension_id INTEGER DEFAULT NULL,
display_name VARCHAR(128) NOT NULL,
internal_number VARCHAR(32) NOT NULL DEFAULT '',
mobile_number VARCHAR(32) NOT NULL DEFAULT '',
other_number VARCHAR(32) NOT NULL DEFAULT '',
email VARCHAR(128) NOT NULL DEFAULT '',
photo_url TEXT NOT NULL DEFAULT '',
group_name VARCHAR(64) NOT NULL DEFAULT 'Général',
is_internal INTEGER NOT NULL DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
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);
SQL; SQL;
$db->exec($schema); $db->exec($schema);
@@ -282,6 +300,7 @@ class Database
self::migrateIvrsTable($db); self::migrateIvrsTable($db);
self::migrateCertificatesTable($db); self::migrateCertificatesTable($db);
self::migrateFeatureCodesTable($db); self::migrateFeatureCodesTable($db);
self::migratePhonebookContactsTable($db);
// Création du compte admin par défaut (admin / admin123) s'il n'existe aucun utilisateur // 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(); $userCount = (int)$db->query('SELECT COUNT(*) FROM users')->fetchColumn();
@@ -867,5 +886,27 @@ class Database
} }
} }
} }
private static function migratePhonebookContactsTable(PDO $db): void
{
$db->exec("
CREATE TABLE IF NOT EXISTS phonebook_contacts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
extension_id INTEGER DEFAULT NULL,
display_name VARCHAR(128) NOT NULL,
internal_number VARCHAR(32) NOT NULL DEFAULT '',
mobile_number VARCHAR(32) NOT NULL DEFAULT '',
other_number VARCHAR(32) NOT NULL DEFAULT '',
email VARCHAR(128) NOT NULL DEFAULT '',
photo_url TEXT NOT NULL DEFAULT '',
group_name VARCHAR(64) NOT NULL DEFAULT 'Général',
is_internal INTEGER NOT NULL DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
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);
");
}
} }
+19
View File
@@ -29,6 +29,25 @@ class PhonebookManager
*/ */
public static function syncExtensions(PDO $db): void public static function syncExtensions(PDO $db): void
{ {
$db->exec("
CREATE TABLE IF NOT EXISTS phonebook_contacts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
extension_id INTEGER DEFAULT NULL,
display_name VARCHAR(128) NOT NULL,
internal_number VARCHAR(32) NOT NULL DEFAULT '',
mobile_number VARCHAR(32) NOT NULL DEFAULT '',
other_number VARCHAR(32) NOT NULL DEFAULT '',
email VARCHAR(128) NOT NULL DEFAULT '',
photo_url TEXT NOT NULL DEFAULT '',
group_name VARCHAR(64) NOT NULL DEFAULT 'Général',
is_internal INTEGER NOT NULL DEFAULT 1,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
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);
");
// 1. Récupère la cartographie des groupes d'extensions // 1. Récupère la cartographie des groupes d'extensions
$egRows = $db->query("SELECT id, name, members FROM extension_groups")->fetchAll(); $egRows = $db->query("SELECT id, name, members FROM extension_groups")->fetchAll();
$extToGroup = []; $extToGroup = [];