- See all webinar registrations in one place.
- Edit attendee details and archive old records safely.
- Export filtered data to CSV and watch the daily chart update automatically.
getMessage()); $adminCount = 0; $adminError = 'Unable to load admin access right now. Please try again in a moment.'; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $loginType = $_POST['login_type'] ?? ''; if ($loginType === 'admin_setup' && $adminCount === 0) { $displayName = trim((string) ($_POST['display_name'] ?? '')); $email = strtolower(trim((string) ($_POST['email'] ?? ''))); $password = (string) ($_POST['password'] ?? ''); $passwordConfirm = (string) ($_POST['password_confirm'] ?? ''); if ($displayName === '') { $adminError = 'Enter an admin name to finish setup.'; } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $adminError = 'Enter a valid admin email address.'; } elseif (strlen($password) < 10) { $adminError = 'Admin password must be at least 10 characters.'; } elseif ($password !== $passwordConfirm) { $adminError = 'Admin passwords do not match.'; } else { try { $newAdminId = admin_create_user($email, $password, $displayName); admin_login_user([ 'id' => $newAdminId, 'email' => $email, 'display_name' => $displayName, ]); admin_set_flash('Admin access has been created successfully.'); header('Location: admin.php'); exit; } catch (PDOException $e) { error_log('Admin setup failed: ' . $e->getMessage()); $adminError = 'Could not create the admin user. Please try a different email.'; } } } if ($loginType === 'admin_login' && $adminCount > 0) { $email = strtolower(trim((string) ($_POST['email'] ?? ''))); $password = (string) ($_POST['password'] ?? ''); if (!filter_var($email, FILTER_VALIDATE_EMAIL) || $password === '') { $adminError = 'Enter your admin email and password.'; } else { try { $admin = admin_get_by_email($email); if ($admin && password_verify($password, $admin['password_hash'])) { admin_login_user($admin); header('Location: admin.php'); exit; } $adminError = 'Invalid admin email or password.'; } catch (PDOException $e) { error_log('Admin login failed: ' . $e->getMessage()); $adminError = 'Admin login is temporarily unavailable.'; } } } if ($loginType === 'participant_login') { $email = strtolower(trim((string) ($_POST['email'] ?? ''))); $password = (string) ($_POST['password'] ?? ''); if (!filter_var($email, FILTER_VALIDATE_EMAIL) || $password === '') { $participantError = 'Enter your registration email and password.'; } else { try { $stmt = db()->prepare('SELECT * FROM attendees WHERE email = ? AND deleted_at IS NULL LIMIT 1'); $stmt->execute([$email]); $attendee = $stmt->fetch(PDO::FETCH_ASSOC); if ($attendee && !empty($attendee['password']) && password_verify($password, $attendee['password'])) { $_SESSION['user_id'] = (int) $attendee['id']; header('Location: dashboard.php'); exit; } $participantError = 'Invalid email or password. If you have not registered yet, please use the webinar form.'; } catch (PDOException $e) { error_log('Participant login failed: ' . $e->getMessage()); $participantError = 'Participant login is temporarily unavailable.'; } } } } ?>
Use the admin area to manage registrations, edit attendee data, export CSV, and track daily signup trends. Attendees can still log in separately to view their webinar dashboard.
Attendees can sign in here to view their webinar dashboard after registration.
Tip: if you changed static assets recently and do not see updates, hard refresh the page with Ctrl/Cmd + Shift + R.