292 lines
12 KiB
PHP
292 lines
12 KiB
PHP
<?php
|
|
define('ANTISPAM_HONEYPOT', true); // Ukryte pole, którego człowiek nie wypełni
|
|
define('ANTISPAM_CSRF', true); // Token CSRF. Chroni przed automatycznymi żądaniami POST.
|
|
define('ANTISPAM_TIME', true); // Sprawdzenie czasu wypełnienia formularza
|
|
define('ANTISPAM_MIN_TIME', 5); // Minimalny czas w sekundach, jaki powinien zająć wypełnienie formularza
|
|
|
|
function antispam_honeypot()
|
|
{
|
|
if (!ANTISPAM_HONEYPOT) return true;
|
|
|
|
return empty($_POST['company_website']);
|
|
}
|
|
|
|
function antispam_time()
|
|
{
|
|
if (!ANTISPAM_TIME) return true;
|
|
|
|
if (!isset($_POST['form_time'])) return false;
|
|
|
|
return (time() - (int)$_POST['form_time']) >= ANTISPAM_MIN_TIME;
|
|
}
|
|
|
|
function antispam_csrf()
|
|
{
|
|
if (!ANTISPAM_CSRF) return true;
|
|
|
|
if (!isset($_POST['csrf_token'], $_SESSION['csrf_token'])) return false;
|
|
|
|
return hash_equals($_SESSION['csrf_token'], $_POST['csrf_token']);
|
|
}
|
|
|
|
|
|
if ( \S::get('action') == 'home_page_form_send' )
|
|
{
|
|
if ($_SERVER["REQUEST_METHOD"] == "POST")
|
|
{
|
|
// === ANTISPAM CHECKS ===
|
|
if (
|
|
!antispam_honeypot() ||
|
|
!antispam_time() ||
|
|
!antispam_csrf()
|
|
) {
|
|
error_log('SPAM blocked: '. $_SERVER['REMOTE_ADDR']);
|
|
$ALLOW_SUBMIT = false;
|
|
}
|
|
|
|
if ($ALLOW_SUBMIT) {
|
|
// NOWE KLUCZE V3
|
|
$recaptchaSecret = '6Lf1XC8sAAAAAIokP1OHFj8W-jdJp3xj6e0NYO6Z';
|
|
$recaptchaResponse = isset($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : null;
|
|
|
|
if ($recaptchaResponse) {
|
|
// Weryfikacja
|
|
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$recaptchaSecret}&response={$recaptchaResponse}");
|
|
$responseKeys = json_decode($response, true);
|
|
|
|
// Próg wiarygodności (0.5)
|
|
$minScore = 0.5;
|
|
|
|
// Sprawdzamy Success oraz Score
|
|
if ($responseKeys["success"] && isset($responseKeys["score"]) && $responseKeys["score"] >= $minScore) {
|
|
|
|
// --- KOD HUBSPOT (bez zmian) ---
|
|
$hubspot_url = "https://api.hsforms.com/submissions/v3/integration/submit/7094950/8ad893c2-2f25-4cb0-b929-6565bf6cde01";
|
|
$hubspotutk = isset($_COOKIE['hubspotutk']) ? $_COOKIE['hubspotutk'] : null;
|
|
|
|
$postData = [
|
|
'fields' => [
|
|
[ 'name' => 'liczba_transakcji_miesiecznie', 'value' => $_POST['monthly_transactions'] ],
|
|
[ 'name' => 'liczba_sklepow_stacjonarnych', 'value' => $_POST['stationary_stores'] ],
|
|
[ 'name' => 'liczba_sklepow_lub_wersji_jezykowych', 'value' => $_POST['language_versions'] ],
|
|
[ 'name' => 'email', 'value' => $_POST['email'] ],
|
|
[ 'name' => 'firstname', 'value' => $_POST['firstname'] ],
|
|
[ 'name' => 'phone', 'value' => $_POST['phone'] ]
|
|
],
|
|
'context' => [
|
|
'hutk' => $hubspotutk,
|
|
'pageUri' => 'https://zaufane.pl/',
|
|
'pageName' => 'zaufane.pl'
|
|
],
|
|
'legalConsentOptions' => [
|
|
'consent' => [
|
|
'content' => 'By submitting this form, you agree that we may use the data you provide to contact you with information related to your request/submission and the relevant LinkedIn product. If you are a LinkedIn member, you can control the messages you receive from LinkedIn in your settings. If you are a guest, you can unsubscribe from LinkedIn marketing emails at any time by clicking the unsubscribe link in the email. To learn more, see LinkedIn\'s Privacy Policy.',
|
|
'consentToProcess' => true,
|
|
'text' => 'I agree to the processing of my personal data by LinkedIn.',
|
|
'communications' => [
|
|
[
|
|
'value' => true,
|
|
'subscriptionTypeId' => 8383894,
|
|
'text' => 'I agree to receive marketing communications from LinkedIn.'
|
|
]
|
|
]
|
|
]
|
|
]
|
|
];
|
|
|
|
$jsonData = json_encode($postData);
|
|
|
|
$ch = curl_init($hubspot_url);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
|
|
|
|
$response = curl_exec($ch);
|
|
|
|
if ($response === false) {
|
|
$error = curl_error($ch);
|
|
echo "cURL Error: $error";
|
|
} else {
|
|
$responseData = json_decode($response, true);
|
|
if (isset($responseData['inlineMessage'])) {
|
|
echo "<div id='custom-form-response'><p>" . $responseData['inlineMessage'] . '</p></div>';
|
|
} else {
|
|
echo "<div id='custom-form-response'><p>" . $response . '</p></div>';
|
|
}
|
|
}
|
|
curl_close($ch);
|
|
// --- KONIEC KODU HUBSPOT ---
|
|
?>
|
|
<script class="footer">
|
|
$(document).ready(function() {
|
|
$('#custom-form').remove()
|
|
})
|
|
</script>
|
|
<?php
|
|
} else {
|
|
// echo "<div id='custom-form-response'><p>Weryfikacja antyspamowa nie powiodła się. Spróbuj ponownie.</p></div>";
|
|
}
|
|
} else {
|
|
// echo "<div id='custom-form-response'><p>Błąd weryfikacji formularza.</p></div>";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (ANTISPAM_CSRF) {
|
|
$_SESSION['csrf_token'] = bin2hex(random_bytes(16));
|
|
}
|
|
$form_time = time();
|
|
?>
|
|
|
|
<form method="POST" action="" id="custom-form">
|
|
<input type="hidden" name="action" value="home_page_form_send">
|
|
|
|
<input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response-home">
|
|
|
|
<?php if (ANTISPAM_HONEYPOT): ?>
|
|
<input type="text" name="company_website" tabindex="-1" autocomplete="off" style="display:none">
|
|
<?php endif; ?>
|
|
<?php if (ANTISPAM_TIME): ?>
|
|
<input type="hidden" name="form_time" value="<?= $form_time ?>">
|
|
<?php endif; ?>
|
|
<?php if (ANTISPAM_CSRF): ?>
|
|
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
|
|
<?php endif; ?>
|
|
|
|
<div class="f-row">
|
|
<p><strong>Średnia liczba transakcji miesięcznie:</strong></p>
|
|
<span class="min">0</span>
|
|
<span class="max">10000+</span>
|
|
<input type="range" value="0" min="0" max="10000" step="50" name="monthly_transactions" id="">
|
|
<output class="range-output">0</output>
|
|
</div>
|
|
<div class="f-row">
|
|
<p><strong>Liczba sklepów lub wersji językowych:</strong></p>
|
|
<span class="min">0</span>
|
|
<span class="max">50</span>
|
|
<input type="range" value="0" min="0" max="50" step="1" name="language_versions" id="">
|
|
<output class="range-output">0</output>
|
|
</div>
|
|
<div class="f-row">
|
|
<p><strong>Liczba sklepów stacjonarnych:</strong></p>
|
|
<span class="min">0</span>
|
|
<span class="max">100+</span>
|
|
<input type="range" value="0" min="0" max="100" step="1" name="stationary_stores" id="">
|
|
<output class="range-output">0</output>
|
|
</div>
|
|
<div class="f-row">
|
|
<p><strong class="mb-3">Podaj email, aby otrzymać wycenę:</strong></p>
|
|
|
|
<div class="tile">
|
|
<input type="text" name="firstname" id="form-firstname" placeholder="" required>
|
|
<label for="form-firstname">Imię*</label>
|
|
</div>
|
|
<div class="tile">
|
|
<input type="email" name="email" id="form-email" placeholder="" required>
|
|
<label for="form-email">Email*</label>
|
|
</div>
|
|
<div class="tile">
|
|
<input type="text" name="phone" id="form-phone" placeholder="" required>
|
|
<label for="form-phone">Numer telefonu*</label>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="checkbox-row">
|
|
<input type="checkbox" name="zgoda_inne_powiadomienia" id="checkbox-1" required>
|
|
<label for="checkbox-1">*Wyrażam zgodę na otrzymywanie innych powiadomień od firmy ... <a href="#" id="info-for-checkbox-1">Więcej</a></label>
|
|
</div>
|
|
<div class="checkbox-row">
|
|
<input type="checkbox" name="zgoda_przetwarzanie_danych" id="checkbox-2" required>
|
|
<label for="checkbox-2">*Wyrażam zgodę na przechowywanie i przetwarzanie moich danych ... <a href="#" id="info-for-checkbox-2">Więcej</a></label>
|
|
</div>
|
|
|
|
<button type="submit" class="btn1">Otrzymaj wycenę</button>
|
|
</form>
|
|
|
|
<style type="text/css">
|
|
.checkbox-rows{
|
|
position: fixed;
|
|
top: 50%;
|
|
left: 50%;
|
|
width: 100%;
|
|
max: 500px;
|
|
transform: translate(-50%, -50%);
|
|
padding: 40px;
|
|
border-radius: 24px;
|
|
border: 1px solid yellow;
|
|
background: white;
|
|
}
|
|
</style>
|
|
|
|
<script src="https://www.google.com/recaptcha/api.js?render=6Lf1XC8sAAAAAP7HMxUHzpkPEePvi80eSZrcJH2l"></script>
|
|
|
|
<script class="footer">
|
|
// --- OBSŁUGA RECAPTCHA V3 ---
|
|
document.getElementById('custom-form').addEventListener('submit', function(e) {
|
|
e.preventDefault();
|
|
|
|
const siteKey = '6Lf1XC8sAAAAAP7HMxUHzpkPEePvi80eSZrcJH2l';
|
|
|
|
grecaptcha.ready(function() {
|
|
grecaptcha.execute(siteKey, {action: 'home_page_form'}).then(function(token) {
|
|
document.getElementById('g-recaptcha-response-home').value = token;
|
|
document.getElementById('custom-form').submit();
|
|
});
|
|
});
|
|
});
|
|
|
|
// --- ISTNIEJĄCA OBSŁUGA SUWAKÓW I CHECKBOXÓW ---
|
|
$(document).ready(function() {
|
|
$('body').on('click', '#info-for-checkbox-1', function (e) {
|
|
e.preventDefault()
|
|
$.alert({
|
|
title: '',
|
|
content: 'Wyrażam zgodę na otrzymywanie innych powiadomień od firmy Zaufane.pl. Aby zapewnić Państwu żądane treści, musimy przechowywać i przetwarzać Państwa dane osobowe. Jeśli wyrażają Państwo zgodę na przechowywanie Państwa danych osobowych w tym celu, prosimy zaznaczyć poniższe pole wyboru.',
|
|
});
|
|
})
|
|
|
|
$('body').on('click', '#info-for-checkbox-2', function (e) {
|
|
e.preventDefault()
|
|
$.alert({
|
|
title: '',
|
|
content: 'Wyrażam zgodę na przechowywanie i przetwarzanie moich danych osobowych przez firmę Zaufane.pl.* W każdej chwili mogą Państwo zrezygnować z tych komunikatów. Aby uzyskać więcej informacji na temat sposobu rezygnacji z subskrypcji, naszych zasad ochrony prywatności oraz tego, w jaki sposób zobowiązujemy się do ochrony i poszanowania prywatności, należy zapoznać się z naszą Polityką Prywatności.',
|
|
});
|
|
})
|
|
|
|
$('input[type="range"]').on('input', function() {
|
|
var value = $(this).val();
|
|
$(this).next('.range-output').text(value);
|
|
});
|
|
|
|
$(".f-row").each(function() {
|
|
const range = $(this).find("input[type='range']"); // Poprawka selektora, by nie łapał zwykłych inputów
|
|
if (range.length) {
|
|
const bubble = $(this).find(".range-output");
|
|
range.on("input", function() {
|
|
setBubble(range, bubble);
|
|
});
|
|
setBubble(range, bubble);
|
|
}
|
|
});
|
|
|
|
function setBubble(range, bubble) {
|
|
const val = range.val();
|
|
const min = range.attr("min") ? range.attr("min") : 0;
|
|
const max = range.attr("max") ? range.attr("max") : 100;
|
|
const newVal = Number(((val - min) * 100) / (max - min));
|
|
bubble.html(`${val}`);
|
|
bubble.css("left", `calc(${newVal}% + (${8 - newVal * 0.15}px))`);
|
|
}
|
|
|
|
$('input[type="range"]').on('input', function() {
|
|
var tempSliderValue = Number($(this).val());
|
|
$(this).next('.range-output').text(tempSliderValue);
|
|
|
|
var progress = ((tempSliderValue / $(this).attr("max"))) * 100;
|
|
$(this).css("background", `linear-gradient(to right, #ffbf0b ${progress}%, #ccc ${progress}%)`);
|
|
});
|
|
});
|
|
</script>
|