prepare(" SELECT s.* FROM servers s JOIN server_members sm ON s.id = sm.server_id WHERE sm.user_id = ? LIMIT 20 "); $stmt->execute([$current_user_id]); $servers = $stmt->fetchAll(); $is_dm_view = (isset($_GET['server_id']) && $_GET['server_id'] == 'dms') || !isset($_GET['server_id']) && empty($servers); if ($is_dm_view) { $active_server_id = 'dms'; // Fetch DM channels $stmt = db()->prepare(" SELECT c.id, u.username as other_user, u.avatar_url, u.status, u.id as other_user_id FROM channels c JOIN channel_members cm1 ON c.id = cm1.channel_id JOIN channel_members cm2 ON c.id = cm2.channel_id JOIN users u ON cm2.user_id = u.id WHERE c.type = 'dm' AND cm1.user_id = ? AND cm2.user_id != ? "); $stmt->execute([$current_user_id, $current_user_id]); $dm_channels = $stmt->fetchAll(); $active_channel_id = $_GET['channel_id'] ?? ($dm_channels[0]['id'] ?? 0); if ($active_channel_id) { // Fetch DM messages $stmt = db()->prepare(" SELECT m.*, u.username, u.avatar_url FROM messages m JOIN users u ON m.user_id = u.id WHERE m.channel_id = ? ORDER BY m.created_at ASC LIMIT 50 "); $stmt->execute([$active_channel_id]); $messages = $stmt->fetchAll(); $current_channel_name = 'Direct Message'; foreach($dm_channels as $dm) { if ($dm['id'] == $active_channel_id) { $current_channel_name = $dm['other_user']; break; } } } else { $messages = []; $current_channel_name = 'Direct Messages'; } $channels = []; $members = []; // Members list is different for DMs or hidden } else { $active_server_id = $_GET['server_id'] ?? ($servers[0]['id'] ?? 1); // Fetch channels $stmt = db()->prepare("SELECT * FROM channels WHERE server_id = ?"); $stmt->execute([$active_server_id]); $channels = $stmt->fetchAll(); $active_channel_id = $_GET['channel_id'] ?? ($channels[0]['id'] ?? 1); // Fetch messages $stmt = db()->prepare(" SELECT m.*, u.username, u.avatar_url FROM messages m JOIN users u ON m.user_id = u.id WHERE m.channel_id = ? ORDER BY m.created_at ASC LIMIT 50 "); $stmt->execute([$active_channel_id]); $messages = $stmt->fetchAll(); $current_channel_name = 'general'; foreach($channels as $c) if($c['id'] == $active_channel_id) $current_channel_name = $c['name']; // Fetch members $stmt = db()->prepare(" SELECT u.id, u.username, u.avatar_url, u.status FROM users u JOIN server_members sm ON u.id = sm.user_id WHERE sm.server_id = ? "); $stmt->execute([$active_server_id]); $members = $stmt->fetchAll(); } // SEO & Env tags $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Discord-like messaging app built with PHP'; $projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? ''; ?>