diff --git a/admin_users.php b/admin_users.php index 22860bb..4089023 100644 --- a/admin_users.php +++ b/admin_users.php @@ -72,6 +72,7 @@ if ($rolesQuery) { // 3) Alle Benutzer laden (mit Suche) $searchQuery = isset($_GET['search']) ? trim($_GET['search']) : ''; $searchParam = '%' . $searchQuery . '%'; +$filterRole = isset($_GET['role']) ? (int)$_GET['role'] : 0; $sql = " SELECT u.userID, u.email, u.displayname, u.profilePicture, u.isActive, @@ -80,20 +81,48 @@ $sql = " LEFT JOIN userRoles ur ON u.userID = ur.userID "; +$whereClauses = []; +$types = ""; +$params = []; + if ($searchQuery !== '') { - $sql .= " WHERE u.displayname LIKE ? OR u.email LIKE ?"; + $whereClauses[] = "(u.displayname LIKE ? OR u.email LIKE ?)"; + $types .= "ss"; + $params[] = $searchParam; + $params[] = $searchParam; +} + +if ($filterRole > 0) { + // Da wir einen LEFT JOIN mit GROUP_CONCAT haben und auf Rollen filtern wollen, + // können wir als einfache Lösung einen Subselect für EXISTS machen, damit + // alle Rollen des Benutzers in GROUP_CONCAT erhalten bleiben, + // aber nur Nutzer gezeigt werden, die auch die geforderte Rolle haben. + $whereClauses[] = "EXISTS (SELECT 1 FROM userRoles sub_ur WHERE sub_ur.userID = u.userID AND sub_ur.roleID = ?)"; + $types .= "i"; + $params[] = $filterRole; +} + +if (!empty($whereClauses)) { + $sql .= " WHERE " . implode(" AND ", $whereClauses); } $sql .= " GROUP BY u.userID ORDER BY u.userID ASC"; $stmtUsers = $conn->prepare($sql); -if ($searchQuery !== '') { - $stmtUsers->bind_param("ss", $searchParam, $searchParam); +if (!empty($params)) { + $stmtUsers->bind_param($types, ...$params); } $stmtUsers->execute(); $usersResult = $stmtUsers->get_result(); -$formActionUrl = "admin_users.php" . ($searchQuery !== '' ? "?search=" . urlencode($searchQuery) : ""); +$formActionParams = []; +if ($searchQuery !== '') $formActionParams['search'] = $searchQuery; +if ($filterRole > 0) $formActionParams['role'] = $filterRole; + +$formActionUrl = "admin_users.php"; +if (!empty($formActionParams)) { + $formActionUrl .= "?" . http_build_query($formActionParams); +} ?> @@ -114,10 +143,20 @@ $formActionUrl = "admin_users.php" . ($searchQuery !== '' ? "?search=" . urlenco
-
- - - + + + + + + + 0): ?> Zurücksetzen