PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); } return $pdo; } function getRealIP() { if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) { return $_SERVER['HTTP_CF_CONNECTING_IP']; } if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { return explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0]; } return $_SERVER['REMOTE_ADDR']; } function getUserTotalRecharge($userId) { $stmt = db()->prepare("SELECT SUM(amount) FROM finance_requests WHERE user_id = ? AND type='recharge' AND status='3' AND symbol='USDT'"); $stmt->execute([$userId]); return (float)$stmt->fetchColumn() ?: 0; } function getAutoVipLevel($totalRecharge) { if ($totalRecharge >= 250000) return 5; if ($totalRecharge >= 180000) return 4; if ($totalRecharge >= 100000) return 3; if ($totalRecharge >= 50000) return 2; if ($totalRecharge >= 10000) return 1; return 0; } if (!function_exists('getSetting')) { function getSetting($key, $default = null) { try { $stmt = db()->prepare("SELECT setting_value FROM system_settings WHERE setting_key = ?"); $stmt->execute([$key]); $val = $stmt->fetchColumn(); return ($val !== false && $val !== '') ? $val : $default; } catch (Exception $e) { return $default; } } } // Ensure database schema is up to date (Automatic Migration) function ensureSchema() { try { $db = db(); // --- finance_requests table --- $stmt = $db->query("DESCRIBE finance_requests"); $columns = $stmt->fetchAll(PDO::FETCH_COLUMN); $finance_needed = [ 'account_bank' => "VARCHAR(255) DEFAULT NULL", 'account_name' => "VARCHAR(255) DEFAULT NULL", 'account_number' => "VARCHAR(255) DEFAULT NULL", 'fiat_amount' => "DECIMAL(20,8) DEFAULT 0", 'fiat_currency' => "VARCHAR(10) DEFAULT NULL", 'ip_address' => "VARCHAR(45) DEFAULT NULL", 'payment_method' => "VARCHAR(100) DEFAULT NULL", 'payment_details' => "TEXT DEFAULT NULL" ]; foreach ($finance_needed as $col => $type) { if (!in_array($col, $columns)) { $db->exec("ALTER TABLE finance_requests ADD COLUMN $col $type"); } } // --- transactions table --- $stmt = $db->query("DESCRIBE transactions"); $columns = $stmt->fetchAll(PDO::FETCH_COLUMN); $trans_needed = [ 'ip_address' => "VARCHAR(45) DEFAULT NULL", 'status' => "VARCHAR(20) DEFAULT '0'" ]; foreach ($trans_needed as $col => $type) { if (!in_array($col, $columns)) { $db->exec("ALTER TABLE transactions ADD COLUMN $col $type"); } } } catch (Exception $e) { // Silently fail or log to a file } } ensureSchema();