1 <?php 2 define('NEXUS', true); 3 4 require_once __DIR__ . '/config.php'; 5 require_once __DIR__ . '/db.php'; 6 require_once __DIR__ . '/functions.php'; 7 8 start_session(); 9 10 // Redirect to installer if not installed 11 if (!file_exists(DATA . '/installed.lock')) { 12 $uri = $_SERVER['REQUEST_URI'] ?? ''; 13 if (strpos($uri, '/install') === false) { 14 header('Location: ' . BASE . '/install/'); 15 exit; 16 } 17 } 18 19 // Auto-migrate: ensure all tables exist for upgraded installs. 20 // CREATE TABLE IF NOT EXISTS is idempotent — safe to run on every request. 21 // This fixes "table not found" errors when upgrading from older versions. 22 static $_dbInited = false; 23 if (!$_dbInited) { 24 try { 25 DB::init(); 26 $_dbInited = true; 27 } catch (Throwable $e) { 28 // Log but don't crash — if DB is unreachable the next query will fail with a clearer error 29 error_log('Nexus DB::init() failed: ' . $e->getMessage()); 30 } 31 } 32 33 require_once __DIR__ . '/markdown.php'; 34 require_once __DIR__ . '/addons.php'; 35 36 // Set global current user 37 $USER = current_user(); 38 39 // Boot addons after user is set 40 AddonManager::boot();