prepare("SELECT id FROM users WHERE email = ?"); $stmtCheck->execute([$email]); if ($stmtCheck->fetch()) { $error = "Er bestaat al een gebruiker met dit e-mailadres."; } else { $token = create_invite($adminUser['id'], $email, $role); $baseUrl = rtrim(APP_URL, '/'); $generatedLink = "{$baseUrl}/auth/invite.php?token={$token}"; // Verstuur de gestylede uitnodigingsmail direct via SMTP $mailResult = FocizMailer::sendInvitationEmail($email, $adminUser['name'], $role, $generatedLink); fociz_log_audit((int)$adminUser['id'], 'USER_INVITED', 'invite', null, ['email' => $email, 'role' => $role], 'SUCCESS', $adminUser['email']); if ($mailResult['success']) { $message = "Uitnodigingslink succesvol aangemaakt én per e-mail verzonden naar {$email}!"; } else { $message = "Uitnodiging aangemaakt! Let op: de e-mail kon niet worden verzonden (" . htmlspecialchars($mailResult['error'] ?? 'serverfout') . "). U kunt de link handmatig kopiëren."; } } } } elseif ($action === 'resend_invite') { $inviteId = (int)($_POST['invite_id'] ?? 0); $stmtInv = $db->prepare("SELECT * FROM invites WHERE id = ? AND used_at IS NULL AND expires_at > NOW()"); $stmtInv->execute([$inviteId]); $inv = $stmtInv->fetch(); if ($inv) { $baseUrl = rtrim(APP_URL, '/'); $link = "{$baseUrl}/auth/invite.php?token={$inv['token']}"; $mailResult = FocizMailer::sendInvitationEmail($inv['email'], $adminUser['name'], $inv['role'], $link); fociz_log_audit((int)$adminUser['id'], 'INVITE_RESENT', 'invite', $inviteId, ['email' => $inv['email'], 'role' => $inv['role']], 'SUCCESS', $adminUser['email']); if ($mailResult['success']) { $message = "Uitnodiging succesvol opnieuw per e-mail verzonden naar {$inv['email']}!"; } else { $error = "Fout bij opnieuw verzenden van uitnodiging: " . ($mailResult['error'] ?? 'Onbekende fout'); } } else { $error = "Uitnodiging niet gevonden of reeds verlopen/geactiveerd."; } } elseif ($action === 'delete_invite') { $inviteId = (int)($_POST['invite_id'] ?? 0); $stmtDel = $db->prepare("DELETE FROM invites WHERE id = ?"); $stmtDel->execute([$inviteId]); fociz_log_audit((int)$adminUser['id'], 'INVITE_REVOKED', 'invite', $inviteId, [], 'SUCCESS', $adminUser['email']); header('Location: /users.php'); exit; } elseif ($action === 'delete_user') { $delUserId = (int)($_POST['user_id'] ?? 0); if ($delUserId !== (int)$adminUser['id']) { $stmtUserToDel = $db->prepare("SELECT email, name FROM users WHERE id = ?"); $stmtUserToDel->execute([$delUserId]); $delUser = $stmtUserToDel->fetch(); $stmtDelUser = $db->prepare("DELETE FROM users WHERE id = ?"); $stmtDelUser->execute([$delUserId]); fociz_log_audit((int)$adminUser['id'], 'USER_DELETED', 'user', $delUserId, ['deleted_email' => $delUser['email'] ?? null, 'deleted_name' => $delUser['name'] ?? null], 'SUCCESS', $adminUser['email']); } header('Location: /users.php'); exit; } } // Haal alle gebruikers op $users = []; try { $users = $db->query("SELECT * FROM users ORDER BY created_at DESC")->fetchAll() ?: []; } catch (Throwable $e) { error_log("Fout bij ophalen gebruikers: " . $e->getMessage()); } // Haal alle uitnodigingen op $invites = []; try { $invites = $db->query(" SELECT i.*, u.name as inviter_name FROM invites i JOIN users u ON i.created_by_id = u.id ORDER BY i.created_at DESC ")->fetchAll() ?: []; } catch (Throwable $e) { error_log("Fout bij ophalen uitnodigingen: " . $e->getMessage()); ensure_tables_exist($db); } $pageTitle = 'Team & Uitnodigingen — Fociz'; require_once __DIR__ . '/includes/header.php'; ?>
Beheerderspaneel

Team & Uitnodigingen

Fociz is strikt afgesloten: nieuwe collega's kunnen enkel toegang krijgen na het ontvangen van een uitnodigingslink en verplichte 2FA-activatie.

Kopieer onderstaande beveiligde registratielink en stuur deze naar de collega:

Nieuwe Collega Uitnodigen

Geregistreerde Teamleden ()

Naam & E-mail Rol 2FA Beveiliging Lid sinds Acties
Avatar
2FA Actief
Uzelf

Uitnodigingen Status ()

Uitgenodigd E-mailadres Rol Status Verloopt op Actie
Nog geen uitnodigingen verstuurd.
Geaccepteerd Verlopen In afwachting