Files

105 lines
3.8 KiB
PHP

<?php
require __DIR__ . '/../config/db.php';
$profileId = 1;
$contactMetaStmt = $pdo->prepare('SELECT email_to, email_from, recaptcha_secret FROM contact_meta WHERE profile_id = ? AND is_active = 1 LIMIT 1');
$contactMetaStmt->execute([$profileId]);
$contactMeta = $contactMetaStmt->fetch();
$emailTo = $contactMeta['email_to'] ?? 'mgonzalez@linkedcorp.net';
$emailFrom = $contactMeta['email_from'] ?? $emailTo;
$recaptchaSecret = $contactMeta['recaptcha_secret'] ?? '';
$subject = 'New message from contact form';
$fields = array('name' => 'Name', 'email' => 'Email', 'subject' => 'Subject', 'message' => 'Message');
$okMessage = 'Contact form successfully submitted. Thank you, I will get back to you soon!';
$errorMessage = 'There was an error while submitting the form. Please try again later';
function json_response($type, $message)
{
$responseArray = array('type' => $type, 'message' => $message);
header('Content-Type: application/json');
echo json_encode($responseArray);
exit;
}
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
$userSubject = trim($_POST['subject'] ?? '');
$message = trim($_POST['message'] ?? '');
if ($name === '' || $email === '' || $userSubject === '' || $message === '') {
json_response('danger', 'All fields are required.');
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
json_response('danger', 'Valid email is required.');
}
$insertStmt = $pdo->prepare('INSERT INTO contact_messages (profile_id, full_name, email, subject, message, send_status) VALUES (?, ?, ?, ?, ?, ?)');
$insertStmt->execute([$profileId, $name, $email, $userSubject, $message, 'pending']);
$messageId = (int) $pdo->lastInsertId();
$sendStatus = 'failed';
$sendError = null;
$sentAt = null;
if ($recaptchaSecret !== '') {
$recaptchaResponse = $_POST['g-recaptcha-response'] ?? '';
if ($recaptchaResponse === '') {
$sendError = 'recaptcha_missing';
$updateStmt = $pdo->prepare('UPDATE contact_messages SET send_status = ?, send_error = ? WHERE id = ?');
$updateStmt->execute([$sendStatus, $sendError, $messageId]);
json_response('danger', 'Please click on the reCAPTCHA box.');
}
$c = curl_init('https://www.google.com/recaptcha/api/siteverify?secret=' . $recaptchaSecret . '&response=' . $recaptchaResponse);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$verifyResponse = curl_exec($c);
$responseData = json_decode($verifyResponse);
if (!$responseData || empty($responseData->success)) {
$sendError = 'recaptcha_failed';
$updateStmt = $pdo->prepare('UPDATE contact_messages SET send_status = ?, send_error = ? WHERE id = ?');
$updateStmt->execute([$sendStatus, $sendError, $messageId]);
json_response('danger', 'Robot verification failed, please try again.');
}
}
try {
$emailText = nl2br("You have new message from Contact Form\n");
foreach (['name' => $name, 'email' => $email, 'subject' => $userSubject, 'message' => $message] as $key => $value) {
if (isset($fields[$key])) {
$emailText .= nl2br($fields[$key] . ': ' . $value . "\n");
}
}
$headers = array(
'Content-Type: text/html; charset="UTF-8"',
'From: ' . $emailFrom,
'Reply-To: ' . $email,
'Return-Path: ' . $emailFrom,
);
$sent = mail($emailTo, $subject, $emailText, implode("\n", $headers));
if ($sent) {
$sendStatus = 'sent';
$sentAt = date('Y-m-d H:i:s');
} else {
$sendError = 'mail_failed';
}
} catch (Exception $e) {
$sendError = $e->getMessage();
}
$updateStmt = $pdo->prepare('UPDATE contact_messages SET send_status = ?, send_error = ?, sent_at = ? WHERE id = ?');
$updateStmt->execute([$sendStatus, $sendError, $sentAt, $messageId]);
if ($sendStatus === 'sent') {
json_response('success', $okMessage);
}
json_response('danger', $errorMessage);