Compare commits
9 Commits
7ae47ee590
...
5c197f2299
Author | SHA1 | Date | |
---|---|---|---|
5c197f2299 | |||
ddc89d5bd6 | |||
3b14c01591 | |||
0882053a42 | |||
f9229b5998 | |||
42b9b3a62e | |||
590cbfbb65 | |||
aebb53e5c1 | |||
7df4a24abd |
@ -1,29 +1,45 @@
|
|||||||
const ajaxUrl = '../php/contact_form.php';
|
const contactFormAjaxUrl = '/php/contact_form.php';
|
||||||
|
|
||||||
|
window.addEventListener('DOMContentLoaded', function() {
|
||||||
const contact_form = document.getElementsByClassName('content__contact_form')[0];
|
const contact_form = document.getElementsByClassName('content__contact_form')[0];
|
||||||
|
if (contact_form) {
|
||||||
|
contact_form.addEventListener('submit', wtf_submitContactForm, false);
|
||||||
|
wtf_startContactFormSession();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function wtf_startContactFormSession() {
|
||||||
|
let formData = new FormData();
|
||||||
|
formData.append('action', 'start_session');
|
||||||
|
fetch(contactFormAjaxUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
mode: 'same-origin',
|
||||||
|
body: formData,
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('Response was not OK');
|
||||||
|
}
|
||||||
|
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(json => {
|
||||||
|
console.log(json);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Could not start the session:', error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function wtf_submitContactForm(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
const subject = document.getElementsByClassName('contact_form__subject')[0];
|
const subject = document.getElementsByClassName('contact_form__subject')[0];
|
||||||
const message = document.getElementsByClassName('contact_form__message')[0];
|
const message = document.getElementsByClassName('contact_form__message')[0];
|
||||||
const name = document.getElementsByClassName('contact_form__name')[0];
|
const name = document.getElementsByClassName('contact_form__name')[0];
|
||||||
const email = document.getElementsByClassName('contact_form__email')[0];
|
const email = document.getElementsByClassName('contact_form__email')[0];
|
||||||
const captcha = document.getElementsByClassName('contact_form__captcha')[0];
|
const captcha = document.getElementsByClassName('contact_form__captcha')[0];
|
||||||
const now = (new Date().getTime()/1000).toFixed();
|
|
||||||
const feedback = document.getElementsByClassName('contact_form__feedback')[0];
|
|
||||||
|
|
||||||
window.addEventListener('DOMContentLoaded', function(event) {
|
|
||||||
let formData = new FormData();
|
|
||||||
formData.append('action', 'start_session');
|
|
||||||
fetch(ajaxUrl, {
|
|
||||||
method: 'POST',
|
|
||||||
mode: 'same-origin',
|
|
||||||
body: formData,
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(json => {
|
|
||||||
console.log(json);
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
contact_form.addEventListener('submit', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
let formData = new FormData();
|
let formData = new FormData();
|
||||||
formData.append('action', 'handle_form');
|
formData.append('action', 'handle_form');
|
||||||
formData.append('subject', subject.value);
|
formData.append('subject', subject.value);
|
||||||
@ -39,13 +55,14 @@ contact_form.addEventListener('submit', function(event) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch(ajaxUrl, {
|
fetch(contactFormAjaxUrl, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
mode: 'same-origin',
|
mode: 'same-origin',
|
||||||
body: formData,
|
body: formData,
|
||||||
})
|
})
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(json => {
|
.then(json => {
|
||||||
|
const feedback = document.getElementsByClassName('contact_form__feedback')[0];
|
||||||
console.log(json);
|
console.log(json);
|
||||||
if (json.errors) {
|
if (json.errors) {
|
||||||
feedback.classList.remove('--success');
|
feedback.classList.remove('--success');
|
||||||
@ -75,4 +92,4 @@ contact_form.addEventListener('submit', function(event) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(error => console.log(error));
|
.catch(error => console.log(error));
|
||||||
}, false);
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
/* Unhide contact form if JS is enabled */
|
/* Unhide contact form if JS is enabled */
|
||||||
window.addEventListener('DOMContentLoaded', (event) => {
|
window.addEventListener('DOMContentLoaded', (event) => {
|
||||||
const contact_form_wrapper = document.getElementsByClassName('content__contact_form_wrapper')[0];
|
const contact_form_wrapper = document.getElementsByClassName('content__contact_form_wrapper')[0];
|
||||||
|
if (contact_form_wrapper) {
|
||||||
contact_form_wrapper.style.setProperty('display', 'block');
|
contact_form_wrapper.style.setProperty('display', 'block');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
@ -6,17 +6,16 @@ function sanitize_text(string $name, string $type) {
|
|||||||
'text' => FILTER_SANITIZE_SPECIAL_CHARS,
|
'text' => FILTER_SANITIZE_SPECIAL_CHARS,
|
||||||
'email' => FILTER_SANITIZE_EMAIL,
|
'email' => FILTER_SANITIZE_EMAIL,
|
||||||
);
|
);
|
||||||
$text = trim($text);
|
$text = filter_var(trim($_POST[$name]), $filters[$type]);
|
||||||
$text = filter_var($_POST[$name], $filters[$type]);
|
|
||||||
$text = stripslashes($text);
|
$text = stripslashes($text);
|
||||||
|
|
||||||
return $text;
|
return $text;
|
||||||
}
|
}
|
||||||
|
|
||||||
function prepare_message_body($message) {
|
function prepare_message_body(string $message, string $name) {
|
||||||
// Replace HTML-Entities with actual carriage returns and line feeds
|
// Replace HTML-Entities with actual carriage returns and line feeds
|
||||||
$message = str_replace(" ", "\r", $message);
|
$message = str_replace(" ", "\r", $message);
|
||||||
$message = str_replace(" ", "\r", $message);
|
$message = str_replace(" ", "\n", $message);
|
||||||
|
|
||||||
// Ensure line breaks via carriage return + line feed
|
// Ensure line breaks via carriage return + line feed
|
||||||
$message = str_replace("\r\n", "\n", $message);
|
$message = str_replace("\r\n", "\n", $message);
|
||||||
@ -34,22 +33,30 @@ function prepare_message_body($message) {
|
|||||||
* mail(): Braucht auf dem Server einen korrekt konfigurierten Mailserver
|
* mail(): Braucht auf dem Server einen korrekt konfigurierten Mailserver
|
||||||
* phpmailer: Bibliothek, der per Composer installiert wird. Tut ganz gut mit SMTP.
|
* phpmailer: Bibliothek, der per Composer installiert wird. Tut ganz gut mit SMTP.
|
||||||
*/
|
*/
|
||||||
function send_message_to_office($subject, $message, $name, $email) {
|
function send_message_to_office(string $subject, string $message, string $name, string $email) {
|
||||||
|
$returnPath = filter_var(getenv('WTF_RETURN_PATH'), FILTER_VALIDATE_EMAIL);
|
||||||
|
$to = filter_var(getenv('WTF_CONTACT_TO'), FILTER_VALIDATE_EMAIL);
|
||||||
|
|
||||||
|
if (!$returnPath || !$to) {
|
||||||
|
error_log('Address for "To" or "Return-Path" is invalid');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return mail(
|
return mail(
|
||||||
getenv('WTF_CONTACT_TO'),
|
$to,
|
||||||
"=?UTF-8?B?" . base64_encode($subject) . "?=",
|
"=?UTF-8?B?" . base64_encode($subject) . "?=",
|
||||||
prepare_message_body($message),
|
prepare_message_body($message, $name),
|
||||||
$additional_headers = array(
|
array(
|
||||||
"From" => getenv('WTF_CONTACT_FROM'),
|
"From" => getenv('WTF_CONTACT_FROM'),
|
||||||
"Reply-To" => $email,
|
"Reply-To" => $email,
|
||||||
"Return-Path" => getenv('WTF_RETURN_PATH'),
|
|
||||||
"Content-Type" => "text/plain; charset=utf-8",
|
"Content-Type" => "text/plain; charset=utf-8",
|
||||||
"Content-Transfer-Encoding" => "base64",
|
"Content-Transfer-Encoding" => "base64",
|
||||||
),
|
),
|
||||||
|
"-f $returnPath"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function send_response($response_data) {
|
function send_response(array $response_data) {
|
||||||
$json = json_encode($response_data);
|
$json = json_encode($response_data);
|
||||||
if ($json === false) {
|
if ($json === false) {
|
||||||
// Avoid echo of empty string (which is invalid JSON), and
|
// Avoid echo of empty string (which is invalid JSON), and
|
||||||
|
@ -63,7 +63,7 @@ __ ____________________
|
|||||||
{% if 'manifest.json'|asseturl is defined -%}
|
{% if 'manifest.json'|asseturl is defined -%}
|
||||||
<link rel="manifest" href="{{ 'manifest.json'|asseturl }}">
|
<link rel="manifest" href="{{ 'manifest.json'|asseturl }}">
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
{% if '/js/contact_form_toggle.js'|asseturl is defined -%}
|
{% if '/js/contact_form_toggle.js'|asseturl is defined and this.title == 'Kontakt' -%}
|
||||||
<script type="text/javascript" src="{{ '/js/contact_form_toggle.js'|asseturl }}"></script>
|
<script type="text/javascript" src="{{ '/js/contact_form_toggle.js'|asseturl }}"></script>
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
</head>
|
</head>
|
||||||
@ -131,7 +131,7 @@ __ ____________________
|
|||||||
{%- if '/js/nav_toggle.js'|asseturl is defined -%}
|
{%- if '/js/nav_toggle.js'|asseturl is defined -%}
|
||||||
<script type="text/javascript" src="{{ '/js/nav_toggle.js'|asseturl }}"></script>
|
<script type="text/javascript" src="{{ '/js/nav_toggle.js'|asseturl }}"></script>
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
{% if '/js/contact_form_toggle.js'|asseturl is defined -%}
|
{% if '/js/contact_form_toggle.js'|asseturl is defined and this.title == 'Kontakt' -%}
|
||||||
<script type="text/javascript" src="{{ '/js/contact_form.js'|asseturl }}"></script>
|
<script type="text/javascript" src="{{ '/js/contact_form.js'|asseturl }}"></script>
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
</body>
|
</body>
|
||||||
|
Loading…
Reference in New Issue
Block a user