122 lines
5.7 KiB
PHP
122 lines
5.7 KiB
PHP
<?php
|
|
session_start();
|
|
require_once 'db/config.php';
|
|
require_once 'mail/MailService.php';
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
// --- Helper function to fetch webinar details ---
|
|
function get_webinar_details($id) {
|
|
if (empty($id)) return null;
|
|
try {
|
|
$stmt = db()->prepare("SELECT id, title, description, scheduled_at, presenter FROM webinars WHERE id = ?");
|
|
$stmt->execute([$id]);
|
|
return $stmt->fetch(PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
error_log("Database error fetching webinar ID $id: " . $e->getMessage());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// --- Only allow POST requests ---
|
|
if ($_SERVER["REQUEST_METHOD"] !== "POST") {
|
|
echo json_encode(['success' => false, 'error' => 'Invalid request method.']);
|
|
exit;
|
|
}
|
|
|
|
$webinar_id = filter_input(INPUT_POST, 'webinar_id', FILTER_VALIDATE_INT) ?: 1;
|
|
$webinar = get_webinar_details($webinar_id);
|
|
|
|
if (!$webinar) {
|
|
http_response_code(404);
|
|
echo json_encode(['success' => false, 'error' => 'Webinar not found.']);
|
|
exit;
|
|
}
|
|
|
|
// --- DATA CAPTURE ---
|
|
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
|
|
$first_name = filter_input(INPUT_POST, 'first_name', FILTER_SANITIZE_STRING);
|
|
$last_name = filter_input(INPUT_POST, 'last_name', FILTER_SANITIZE_STRING);
|
|
$company = filter_input(INPUT_POST, 'company', FILTER_SANITIZE_STRING);
|
|
$how_did_you_hear = filter_input(INPUT_POST, 'how_did_you_hear', FILTER_SANITIZE_STRING);
|
|
$timezone = filter_input(INPUT_POST, 'timezone', FILTER_SANITIZE_STRING);
|
|
|
|
// --- VALIDATION ---
|
|
if (!$first_name || !$last_name || !$email) {
|
|
echo json_encode(['success' => false, 'error' => 'Please fill out all required fields.']);
|
|
exit;
|
|
}
|
|
|
|
try {
|
|
// --- CHECK IF ALREADY REGISTERED OR SOFT-DELETED -- -
|
|
$stmt = db()->prepare("SELECT id, deleted_at FROM attendees WHERE webinar_id = ? AND email = ?");
|
|
$stmt->execute([$webinar_id, $email]);
|
|
$existing_user = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if ($existing_user) {
|
|
if ($existing_user['deleted_at'] !== null) {
|
|
// --- USER IS SOFT-DELETED, SO REACTIVATE AND UPDATE ---
|
|
$sql = "UPDATE attendees SET first_name = ?, last_name = ?, company = ?, how_did_you_hear = ?, timezone = ?, deleted_at = NULL, consented = 1 WHERE id = ?";
|
|
$stmt = db()->prepare($sql);
|
|
$stmt->execute([$first_name, $last_name, $company, $how_did_you_hear, $timezone, $existing_user['id']]);
|
|
} else {
|
|
// --- USER IS ACTIVE, SO REJECT ---
|
|
echo json_encode(['success' => false, 'error' => 'You are already registered for this webinar.']);
|
|
exit;
|
|
}
|
|
} else {
|
|
// --- REGISTER NEW USER ---
|
|
$password_hash = password_hash($email . time(), PASSWORD_DEFAULT);
|
|
$sql = "INSERT INTO attendees (webinar_id, first_name, last_name, email, company, how_did_you_hear, password, timezone)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
|
|
$stmt = db()->prepare($sql);
|
|
$stmt->execute([$webinar_id, $first_name, $last_name, $email, $company, $how_did_you_hear, $password_hash, $timezone]);
|
|
}
|
|
|
|
// --- SEND CONFIRMATION EMAIL ---
|
|
$webinar_date_obj = new DateTime('2025-11-19 10:00:00', new DateTimeZone('America/New_York'));
|
|
$subject = "Confirmation: You're Registered for Building Scalable Apps with AppWizzy";
|
|
$body_html = "<h1>You're in!</h1><p>Thanks for registering for our webinar: <strong>Building Scalable Apps with AppWizzy</strong>.</p><p style='font-size: 0.8em;'><strong>Professional Vibe-Coding Webinar</strong></p><p>It will take place on <strong>" . $webinar_date_obj->format('l, F j, Y \a\t g:i A T') . "</strong>.</p><p>You can now log in to your dashboard to see the details.</p>";
|
|
MailService::sendMail($email, $subject, $body_html);
|
|
|
|
// --- PREPARE SUCCESS RESPONSE ---
|
|
$webinar_date = new DateTime('2025-11-19 10:00:00', new DateTimeZone('America/New_York'));
|
|
$webinar_date->setTimezone(new DateTimeZone('UTC'));
|
|
$start_time_utc = $webinar_date->format('Ymd\THis\Z');
|
|
$webinar_date->add(new DateInterval('PT1H')); // Assume 1 hour duration
|
|
$end_time_utc = $webinar_date->format('Ymd\THis\Z');
|
|
|
|
$event_title = 'Building Scalable Apps with AppWizzy at 4PM CET';
|
|
$event_description = 'Professional Vibe-Coding Webinar\n\nJoin us for this webinar at 4PM CET | 10AM EST | 7AM PST. The fastest way to go from an idea to a working app you own, running on your server, with your database, using real frameworks.';
|
|
|
|
$google_link = 'https://www.google.com/calendar/render?action=TEMPLATE&text=' . urlencode($event_title) . '&dates=' . $start_time_utc . '/' . $end_time_utc . '&details=' . urlencode($event_description) . '&location=' . urlencode('Online') . '&ctz=UTC';
|
|
|
|
$ics_content = implode("\r\n", [
|
|
'BEGIN:VCALENDAR',
|
|
'VERSION:2.0',
|
|
'PRODID:-//Flatlogic//Building Scalable Apps with AppWizzy//EN',
|
|
'BEGIN:VEVENT',
|
|
'URL:' . 'http://' . $_SERVER['HTTP_HOST'],
|
|
'DTSTART:' . $start_time_utc,
|
|
'DTEND:' . $end_time_utc,
|
|
'SUMMARY:' . $event_title,
|
|
'DESCRIPTION:' . str_replace("\n", "\\n", $event_description),
|
|
'LOCATION:Online',
|
|
'END:VEVENT',
|
|
'END:VCALENDAR'
|
|
]);
|
|
$outlook_link = 'data:text/calendar;charset=utf-8,' . rawurlencode($ics_content);
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'webinar_title' => 'Building Scalable Apps with AppWizzy<br><small><strong>Professional Vibe-Coding Webinar</strong></small>',
|
|
'google_link' => $google_link,
|
|
'outlook_link' => $outlook_link
|
|
]);
|
|
|
|
} catch (Exception $e) {
|
|
error_log("Registration error: " . $e->getMessage());
|
|
http_response_code(500);
|
|
echo json_encode(['success' => false, 'error' => 'An unexpected server error occurred. Please try again.']);
|
|
}
|