diff --git a/admin_users.php b/admin_users.php index ec1690e..929e5a5 100644 --- a/admin_users.php +++ b/admin_users.php @@ -16,6 +16,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_user_id'])) { // Vermeide Selbstlöschung zur Sicherheit if ($deleteId !== (int)$_SESSION['user_id']) { + // Zunächst Abhängigkeiten wie Rollen löschen + $conn->query("DELETE FROM userRoles WHERE userID = $deleteId"); + $delStmt = $conn->prepare("DELETE FROM users WHERE userID = ?"); $delStmt->bind_param("i", $deleteId); $delStmt->execute(); @@ -27,8 +30,50 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_user_id'])) { } } +// 2b) Aktion: Rollen aktualisieren +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_roles_user_id'])) { + $updateId = (int)$_POST['update_roles_user_id']; + $selectedRoles = isset($_POST['roles']) && is_array($_POST['roles']) ? $_POST['roles'] : []; + + if ($updateId === (int)$_SESSION['user_id']) { + $errorMsg = "Du kannst deine eigenen Rollen nicht ändern."; + } else { + $delStmt = $conn->prepare("DELETE FROM userRoles WHERE userID = ?"); + $delStmt->bind_param("i", $updateId); + $delStmt->execute(); + $delStmt->close(); + + if (!empty($selectedRoles)) { + $insStmt = $conn->prepare("INSERT INTO userRoles (userID, roleID) VALUES (?, ?)"); + foreach ($selectedRoles as $roleId) { + $roleIdInt = (int)$roleId; + $insStmt->bind_param("ii", $updateId, $roleIdInt); + $insStmt->execute(); + } + $insStmt->close(); + } + $successMsg = "Rollen erfolgreich gespeichert."; + } +} + +// 2c) Alle verfügbaren Rollen laden +$allRoles = []; +$rolesQuery = $conn->query("SELECT roleID, name FROM roles ORDER BY name ASC"); +if ($rolesQuery) { + while ($r = $rolesQuery->fetch_assoc()) { + $allRoles[] = $r; + } +} + // 3) Alle Benutzer laden -$usersResult = $conn->query("SELECT userID, email, displayname, profilePicture, isActive FROM users ORDER BY userID ASC"); +$usersResult = $conn->query(" + SELECT u.userID, u.email, u.displayname, u.profilePicture, u.isActive, + GROUP_CONCAT(ur.roleID) as roleIDs + FROM users u + LEFT JOIN userRoles ur ON u.userID = ur.userID + GROUP BY u.userID + ORDER BY u.userID ASC +"); ?> @@ -57,11 +102,16 @@ $usersResult = $conn->query("SELECT userID, email, displayname, profilePicture,