WizdomWeb/app/Controllers/ContactController.php

98 lines
3.1 KiB
PHP

<?php
/**
* File: ContactController.php
* Version: 1.5
* Path: /app/Controllers/ContactController.php
* Purpose: Handles contact form display and submission logic.
* Project: Wizdom Networks Website
*/
namespace WizdomNetworks\WizeWeb\Controllers;
use WizdomNetworks\WizeWeb\Core\View;
use WizdomNetworks\WizeWeb\Utilities\Logger;
use WizdomNetworks\WizeWeb\Utilities\Validator;
use WizdomNetworks\WizeWeb\Utilities\Response;
use WizdomNetworks\WizeWeb\Utilities\Sanitizer;
use WizdomNetworks\WizeWeb\Utilities\Database;
use WizdomNetworks\WizeWeb\Models\ContactModel;
use Exception;
class ContactController
{
/**
* Display the contact form page.
*
* @return void
*/
public function index(): void
{
View::render('pages/contact');
}
/**
* Handle contact form submission.
*
* @return void
*/
public function submit(): void
{
try {
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
Response::badRequest('Invalid request method.');
}
$data = $_POST;
// Validate required fields
$requiredFields = ['first_name', 'last_name', 'email', 'message'];
foreach ($requiredFields as $field) {
if (empty($data[$field])) {
Response::badRequest("Missing required field: $field");
}
}
// Sanitize input
$firstName = Sanitizer::sanitizeString($data['first_name']);
$lastName = Sanitizer::sanitizeString($data['last_name']);
$email = Sanitizer::sanitizeString($data['email']);
$message = Sanitizer::sanitizeString($data['message']);
// Validate email format
if (!Validator::IsEmail($email)) {
Response::badRequest('Invalid email address.');
}
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? 'unknown';
// Create DB connection and save to DB
$database = new Database();
$pdo = $database->getConnection();
$contact = new ContactModel($pdo);
$result = $contact->save([
'first_name' => $firstName,
'last_name' => $lastName,
'email' => $email,
'message' => $message,
'ip_address' => $ip,
'user_agent' => $userAgent,
]);
if (!$result) {
Logger::error("Failed to save contact form submission for email: $email");
Response::serverError('An error occurred while submitting your message. Please try again later.');
}
Response::json([
'success' => true,
'message' => 'Your message has been successfully submitted. Thank you!'
]);
} catch (Exception $e) {
Logger::error("Exception during contact form submission: " . $e->getMessage());
Response::serverError('A server error occurred. Please try again later.');
}
}
}