From a757fa13ed3870850d05f3c1b3096c3d30c3e84d Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 15 Feb 2026 22:37:21 +0000 Subject: [PATCH] roles dans le popup des membres a droite --- assets/js/main.js | 36 +++++++++++++++++++++++++++++++++--- index.php | 5 +++-- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/assets/js/main.js b/assets/js/main.js index 7c2f329..73d98c3 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -634,6 +634,7 @@ document.addEventListener('DOMContentLoaded', () => { const userId = memberItem.dataset.userId; const username = memberItem.dataset.username; const avatar = memberItem.dataset.avatar; + const roleIds = (memberItem.dataset.roleIds || '').split(',').filter(id => id); // Create or show member menu document.querySelector('.member-context-menu')?.remove(); @@ -642,17 +643,42 @@ document.addEventListener('DOMContentLoaded', () => { menu.style.position = 'fixed'; menu.style.zIndex = '1000'; menu.style.boxShadow = '0 4px 12px rgba(0,0,0,0.5)'; - menu.style.minWidth = '150px'; + menu.style.minWidth = '180px'; const rect = memberItem.getBoundingClientRect(); menu.style.top = `${rect.top}px`; - menu.style.left = `${rect.left - 160}px`; + menu.style.left = `${rect.left - 190}px`; + + let rolesHtml = ''; + if (roleIds.length > 0) { + // Deduplicate and filter valid roles from serverRoles + const uniqueRoleIds = [...new Set(roleIds)]; + const roles = uniqueRoleIds.map(id => serverRoles.find(r => r.id == id)).filter(r => r); + if (roles.length > 0) { + rolesHtml = ` +
+
Rôles
+
+ ${roles.map(r => ` + + ${r.icon_url ? `` : ''} + ${escapeHTML(r.name)} + + `).join('')} +
+
+
+ `; + } + } menu.innerHTML = ` -
+
${escapeHTML(username)}
+
+ ${rolesHtml} ${(window.isServerOwner || window.canManageServer) ? `` : ''} `; @@ -1213,6 +1239,7 @@ document.addEventListener('DOMContentLoaded', () => { item.dataset.userId = m.id; item.dataset.username = m.username; item.dataset.avatar = m.avatar_url || ''; + item.dataset.roleIds = m.role_ids || ''; item.style.color = 'var(--text-primary)'; item.style.marginBottom = '8px'; item.style.cursor = 'pointer'; @@ -2103,4 +2130,7 @@ document.addEventListener('DOMContentLoaded', () => { el.addEventListener('load', () => scrollToBottom(isMe)); }); } + + // Initial load of roles for the server + loadRoles(); }); diff --git a/index.php b/index.php index 7d67ea3..2e82db5 100644 --- a/index.php +++ b/index.php @@ -190,13 +190,14 @@ if ($is_dm_view) { // Fetch members $stmt = db()->prepare(" SELECT u.id, u.username, u.avatar_url, u.status, + (SELECT GROUP_CONCAT(r.id) FROM roles r JOIN user_roles ur ON r.id = ur.role_id WHERE ur.user_id = u.id AND r.server_id = ?) as role_ids, (SELECT r.color FROM roles r JOIN user_roles ur ON r.id = ur.role_id WHERE ur.user_id = u.id AND r.server_id = ? ORDER BY r.position DESC LIMIT 1) as role_color, (SELECT r.icon_url FROM roles r JOIN user_roles ur ON r.id = ur.role_id WHERE ur.user_id = u.id AND r.server_id = ? ORDER BY r.position DESC LIMIT 1) as role_icon FROM users u JOIN server_members sm ON u.id = sm.user_id WHERE sm.server_id = ? "); - $stmt->execute([$active_server_id, $active_server_id, $active_server_id]); + $stmt->execute([$active_server_id, $active_server_id, $active_server_id, $active_server_id]); $members = $stmt->fetchAll(); } @@ -789,7 +790,7 @@ $projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? ''; Members —
-
+
">