69 lines
2.3 KiB
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.']);
|
|
}
|
|
}
|
|
}
|