diff --git a/assets/js/form.js b/assets/js/form.js index ece1c03..d4d4b2d 100755 --- a/assets/js/form.js +++ b/assets/js/form.js @@ -8,29 +8,19 @@ document.addEventListener('DOMContentLoaded', function() { formLoadedAtInput.value = Date.now().toString(); } - // Initialize Altcha - const altchaElement = document.getElementById('altcha-widget'); - if (altchaElement) { - window.altcha = new Altcha({ - challengeUrl: '/altcha-challenge/', - element: altchaElement - }); - } - // Form submit handler if (form) { form.addEventListener('submit', async function(e) { e.preventDefault(); - // Clear previous status messages formStatusDiv.innerHTML = ''; formStatusDiv.className = ''; - // Validate required fields - const name = form.elements['name']?.value.trim(); - const email = form.elements['email']?.value.trim(); + const name = form.elements['name']?.value.trim(); + const email = form.elements['email']?.value.trim(); + const address = form.elements['address']?.value.trim(); - if (!name || !email) { + if (!name || !email || !address) { formStatusDiv.className = 'form-status form-status--error'; formStatusDiv.innerHTML = '
Please fill in all required fields.
'; return; @@ -42,39 +32,22 @@ document.addEventListener('DOMContentLoaded', function() { return; } - // Check honeypot - const honeypot = form.elements['website']?.value; - if (honeypot) { - formStatusDiv.className = 'form-status form-status--error'; - formStatusDiv.innerHTML = 'Form validation failed.
'; - return; - } + if (form.elements['website']?.value) return; - // Solve Altcha if available - let altchaPayload = ''; - if (window.altcha && !window.altcha.didSubmit) { - try { - await window.altcha.solve(); - altchaPayload = window.altcha.getFormData().altcha; - } catch (err) { - formStatusDiv.className = 'form-status form-status--error'; - formStatusDiv.innerHTML = 'Spam check failed. Please try again.
'; - return; - } - } else if (window.altcha) { - const formData = window.altcha.getFormData(); - altchaPayload = formData.altcha || ''; - } + // Get altcha value from the web component + const altchaWidget = document.getElementById('altcha-widget'); + const altchaPayload = altchaWidget ? (altchaWidget.value || '') : ''; - // Build JSON payload const payload = { - name: form.elements['name'].value.trim(), - email: form.elements['email'].value.trim(), - phone: form.elements['phone']?.value.trim() || '', - message: form.elements['message']?.value.trim() || '', - website: form.elements['website']?.value || '', + name: name, + email: email, + phone: form.elements['phone']?.value.trim() || '', + address: address, + sqft: form.elements['sqft']?.value.trim() || '', + message: form.elements['message']?.value.trim() || '', + website: form.elements['website']?.value || '', form_loaded_at: form.elements['form_loaded_at']?.value || '', - altcha: altchaPayload + altcha: altchaPayload }; // POST to /contact/ diff --git a/src/api/contact.php b/src/api/contact.php index f5b23a9..949719c 100755 --- a/src/api/contact.php +++ b/src/api/contact.php @@ -1,6 +1,6 @@ 80) $errors[] = 'name'; -if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = 'email'; -if (mb_strlen($phone) > 20) $errors[] = 'phone'; -if (mb_strlen($message) > 2000) $errors[] = 'message'; +if (mb_strlen($name) < 2 || mb_strlen($name) > 80) $errors[] = 'name'; +if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = 'email'; +if (mb_strlen($phone) > 20) $errors[] = 'phone'; +if (mb_strlen($address) < 5 || mb_strlen($address) > 200) $errors[] = 'address'; +if ($sqft !== '' && (!ctype_digit($sqft) || (int)$sqft > 99999)) $errors[] = 'sqft'; +if (mb_strlen($message) > 2000) $errors[] = 'message'; if ($errors) { error_log("[floorit.form] validation_error request_id=$request_id fields=" . implode(',', $errors)); @@ -162,7 +166,9 @@ $text_body = "A new estimate request came in through floorithardwoods.com.\n\n" . "Name: {$name}\n" . "Email: {$email}\n" . - "Phone: " . ($phone ?: 'not provided') . "\n\n" . + "Phone: " . ($phone ?: 'not provided') . "\n" . + "Address: {$address}\n" . + "Sq Ft: " . ($sqft ?: 'not provided') . "\n\n" . "Message:\n" . ($message ?: '(no message)') . "\n\n" . "Submitted at: " . gmdate('Y-m-d\TH:i:s\Z') . "\n" . "Request id: {$request_id}\n"; diff --git a/src/api/templates/page.php b/src/api/templates/page.php index 62a882f..22fcefe 100755 --- a/src/api/templates/page.php +++ b/src/api/templates/page.php @@ -241,12 +241,20 @@ foreach ($sections as $s) {