Files
2026-05-12 09:52:15 +02:00

84 lines
3.5 KiB
PHP

<?php
function getDbConnection() {
static $db = null;
if ($db === null) {
$host = getenv('DB_HOST') ?: 'mysql';
$dbname = getenv('DB_NAME') ?: 'neptune';
$user = getenv('DB_USER') ?: 'neptune';
$pass = getenv('DB_PASS') ?: 'neptune_pass';
$db = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
migrate($db);
}
return $db;
}
function migrate($db) {
try { $db->exec("CREATE TABLE IF NOT EXISTS documents (
id INT AUTO_INCREMENT PRIMARY KEY,
doc_type VARCHAR(50) NOT NULL,
team_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
content TEXT,
occurred_at DATETIME NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)"); } catch (Exception $e) {}
try { $db->exec("ALTER TABLE documents ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER created_at"); } catch (Exception $e) {}
$db->exec("CREATE TABLE IF NOT EXISTS network_shapes (
id INT AUTO_INCREMENT PRIMARY KEY,
label VARCHAR(255) NOT NULL DEFAULT '',
shape_type ENUM('rectangle','ellipse','zone') DEFAULT 'rectangle',
pos_x FLOAT DEFAULT 0,
pos_y FLOAT DEFAULT 0,
width FLOAT DEFAULT 200,
height FLOAT DEFAULT 150,
color VARCHAR(7) DEFAULT '#1e3a5f',
border_color VARCHAR(7) DEFAULT '#3b82f6',
opacity FLOAT DEFAULT 0.15,
z_index INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)");
$db->exec("CREATE TABLE IF NOT EXISTS neptune_users (
id INT AUTO_INCREMENT PRIMARY KEY,
user_token VARCHAR(255) NOT NULL UNIQUE,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) DEFAULT '',
role ENUM('admin','user') DEFAULT 'user',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)");
try {
$rootDb = new PDO("mysql:host=" . (getenv('DB_HOST') ?: 'mysql') . ";charset=utf8mb4", 'root', getenv('MYSQL_ROOT_PASSWORD') ?: 'neptune_root_pass');
$rootDb->exec("ALTER TABLE neptune.network_nodes ADD COLUMN IF NOT EXISTS notes VARCHAR(1000) DEFAULT '' AFTER group_name");
} catch (Exception $e) {
}
$db->exec("CREATE TABLE IF NOT EXISTS neptune_settings (
setting_key VARCHAR(100) PRIMARY KEY,
setting_value TEXT NOT NULL
)");
try { $db->exec("CREATE TABLE IF NOT EXISTS file_attachments (
id INT AUTO_INCREMENT PRIMARY KEY,
event_id INT NOT NULL,
original_name VARCHAR(255) NOT NULL,
stored_name VARCHAR(255) NOT NULL,
mime_type VARCHAR(100),
file_size INT,
uploaded_by VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)"); } catch (Exception $e) {}
try { $db->exec("CREATE TABLE IF NOT EXISTS event_tags (
id INT AUTO_INCREMENT PRIMARY KEY,
event_id INT NOT NULL,
tag VARCHAR(50) NOT NULL,
UNIQUE KEY unique_event_tag (event_id, tag)
)"); } catch (Exception $e) {}
try {
$stmt = $db->prepare("SELECT COUNT(*) as c FROM neptune_settings WHERE setting_key = 'registration_enabled'");
$stmt->execute();
if ($stmt->fetch()['c'] == 0) {
$db->exec("INSERT INTO neptune_settings (setting_key, setting_value) VALUES ('registration_enabled', '1')");
}
} catch (Exception $e) {}
}