WizdomWeb/app/Controllers/SubscriberController.php

69 lines
2.3 KiB
PHP

<?php
/**
* File: SubscriberController.php
* Version: 1.1
* Path: /app/Controllers/SubscriberController.php
* Purpose: Handles subscriber updates including optional name personalization.
* Project: Wizdom Networks Website
*/
namespace WizdomNetworks\WizeWeb\Controllers;
use WizdomNetworks\WizeWeb\Core\View;
use WizdomNetworks\WizeWeb\Utils\Database;
use WizdomNetworks\WizeWeb\Utils\Logger;
use WizdomNetworks\WizeWeb\Utils\ErrorHandler;
class SubscriberController
{
/**
* POST /subscriber/update
* Allows a verified subscriber to add their name.
*/
public function update(): void
{
try {
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo "Method Not Allowed";
return;
}
$email = trim($_POST['email'] ?? '');
$firstName = trim($_POST['first_name'] ?? '');
$lastName = trim($_POST['last_name'] ?? '');
if (empty($email)) {
Logger::error("Subscriber update failed: email missing.");
View::render('pages/verify_failed', ['reason' => 'Missing email address.']);
return;
}
$db = Database::getConnection();
$stmt = $db->prepare("SELECT id FROM subscribers WHERE email = ?");
$stmt->execute([$email]);
$subscriber = $stmt->fetch();
if (!$subscriber) {
Logger::error("Subscriber update failed: not found [$email].");
View::render('pages/verify_failed', ['reason' => 'Subscriber not found.']);
return;
}
$stmt = $db->prepare("UPDATE subscribers SET first_name = ?, last_name = ? WHERE id = ?");
$stmt->execute([$firstName, $lastName, $subscriber['id']]);
Logger::info("Subscriber updated: $email");
$_SESSION['update_success'] = true;
$_SESSION['update_type'] = 'newsletter';
header("Location: /verify-success");
exit;
} catch (\Throwable $e) {
Logger::error("Subscriber update error for $email: " . $e->getMessage());
ErrorHandler::exception($e);
View::render('pages/verify_failed', ['reason' => 'An error occurred while updating your info.']);
}
}
}