98 lines
3.1 KiB
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.');
|
|
}
|
|
}
|
|
}
|