Fix: add phonebook_contacts to database schema and migrations; harden install script
This commit is contained in:
1 parent
fb0997e759
commit
563a01e3c3
4 files changed
+68
-6
No files matched your search
+6
-4
@@ -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
|
||||||
@@ -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"
|
||||||
|
|||||||
@@ -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);
|
||||||
|
");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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 = [];
|
||||||
|
|||||||
Reference in new issue
Block a user