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'; ?>
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:
| Naam & E-mail | Rol | 2FA Beveiliging | Lid sinds | Acties |
|---|---|---|---|---|
|
= strtoupper(substr($u['name'], 0, 1)) ?>
= strtoupper(substr($u['name'], 0, 1)) ?>
= htmlspecialchars($u['name']) ?>
= htmlspecialchars($u['email']) ?>
|
= $u['role'] === 'ADMIN' ? 'Beheerder' : 'Collega' ?> | 2FA Actief | = date('d-m-Y', strtotime($u['created_at'])) ?> | Uzelf |
| Uitgenodigd E-mailadres | Rol | Status | Verloopt op | Actie |
|---|---|---|---|---|
| Nog geen uitnodigingen verstuurd. | ||||
| = htmlspecialchars($inv['email']) ?> | = $inv['role'] === 'ADMIN' ? 'Beheerder' : 'Collega' ?> | Geaccepteerd Verlopen In afwachting | = date('d-m-Y H:i', strtotime($inv['expires_at'])) ?> |
|