#105_kontaktformular #121
@ -31,6 +31,9 @@
|
|||||||
--wtf-light-grey: #edefeb;
|
--wtf-light-grey: #edefeb;
|
||||||
--wtf-lila: #6600ff;
|
--wtf-lila: #6600ff;
|
||||||
|
|
||||||
|
/* misc colors */
|
||||||
|
--dark-red: #dc0000;
|
||||||
|
|
||||||
--column-count: 3;
|
--column-count: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -882,6 +885,40 @@ hr.-even {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.contact_form--required {
|
||||||
|
color: var(--dark-red)
|
||||||
|
}
|
||||||
|
|
||||||
|
.content__contact_form {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact_form__textarea,
|
||||||
|
.contact_form__text_input,
|
||||||
|
.contact_form__captcha {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact_form__message {
|
||||||
|
height: 12em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact_form__message,
|
||||||
|
.contact_form__name,
|
||||||
|
.contact_form__email,
|
||||||
|
.contact_form__captcha {
|
||||||
|
font-family: 'Lato', sans-serif;
|
||||||
|
line-height: 1.3rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide captcha field as part of spam protection.
|
||||||
|
We got no real captcha. */
|
||||||
|
.contact_form__captcha {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
/* main - Ende */
|
/* main - Ende */
|
||||||
|
|
||||||
/* footer - Start */
|
/* footer - Start */
|
||||||
|
31
assets/js/contact_form.js
Normal file
31
assets/js/contact_form.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
const ajaxUrl = 'https://spielwiese.wtf-eg.de/php/contact_form.php';
|
||||||
|
// const submit_button = document.getElementsByClassName('contact_form__submit_button')[0];
|
||||||
|
const contact_form = document.getElementsByClassName('content__contact_form')[0];
|
||||||
|
const message = document.getElementsByClassName('contact_form__message')[0];
|
||||||
|
const name = document.getElementsByClassName('contact_form__name')[0];
|
||||||
|
const email = document.getElementsByClassName('contact_form__email')[0];
|
||||||
|
const captcha = document.getElementsByClassName('contact_form__captcha')[0];
|
||||||
|
|
||||||
|
contact_form.addEventListener('submit', function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
let formData = new FormData();
|
||||||
|
formData.append('message', message.value);
|
||||||
|
formData.append('name', name.value);
|
||||||
|
formData.append('email', email.value);
|
||||||
|
|
||||||
|
// If some bot entered some value, return.
|
||||||
|
if (typeof captcha.value == 'undefined') {
|
||||||
|
formData.append('captcha', 'Nudelsuppe');
|
||||||
|
} else {
|
||||||
|
console.log('bot detected');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch(ajaxUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
mode:'same-origin',
|
||||||
|
body: formData,
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(json => {console.log(json)});
|
||||||
|
}, false);
|
5
assets/js/contact_form_toggle.js
Normal file
5
assets/js/contact_form_toggle.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
/* Unhide contact form if JS is enabled */
|
||||||
|
window.addEventListener('DOMContentLoaded', (event) => {
|
||||||
|
const contact_form_wrapper = document.getElementsByClassName('content__contact_form_wrapper')[0];
|
||||||
|
contact_form_wrapper.style.setProperty('display', 'block');
|
||||||
|
});
|
77
assets/php/contact_form.php
Normal file
77
assets/php/contact_form.php
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
$message = '';
|
||||||
|
$name = '';
|
||||||
|
$email = '';
|
||||||
|
|
||||||
|
function sanitize_text(string $name) {
|
||||||
|
$text = filter_var($_POST[$name], FILTER_SANITIZE_FULL_SPECIAL_CHARS);
|
||||||
|
$text = trim($text);
|
||||||
|
$text = stripslashes($text);
|
||||||
|
$text = htmlspecialchars($text);
|
||||||
|
|
||||||
|
return $text;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sending email (Platzhalter)
|
||||||
|
*
|
||||||
|
* mail(): Braucht auf dem Server einen korrekt konfigurierten Mailserver
|
||||||
|
* phpmailer: Bibliothek, der per Composer installiert wird. Tut ganz gut mit SMTP.
|
||||||
|
*/
|
||||||
|
function send_message_to_office($message, $name, $email) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function send_response($response_data) {
|
||||||
|
$json = json_encode($response_data);
|
||||||
|
if ($json === false) {
|
||||||
|
// Avoid echo of empty string (which is invalid JSON), and
|
||||||
|
// JSONify the error message instead:
|
||||||
|
$json = json_encode(["jsonError" => json_last_error_msg()]);
|
||||||
|
if ($json === false) {
|
||||||
|
// This should not happen, but …
|
||||||
|
$json = '{"jsonError":"unknown"}';
|
||||||
|
}
|
||||||
|
// Set HTTP response status code to: 500 - Internal Server Error
|
||||||
|
http_response_code(500);
|
||||||
|
}
|
||||||
|
header('Content-type: application/json');
|
||||||
|
echo $json;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||||
|
$response = array();
|
||||||
|
|
||||||
|
if (
|
||||||
|
empty($_POST['message']) ||
|
||||||
|
empty($_POST['email']) ||
|
||||||
|
empty($_POST['name']) ||
|
||||||
|
$_POST['captcha'] != 'Nudelsuppe'
|
||||||
|
) {
|
||||||
|
if (empty($_POST['message'])) {
|
||||||
|
$response['errors'][] = 'Du hast keine Nachricht eingegeben.';
|
||||||
|
}
|
||||||
|
if (empty($_POST['email'])) {
|
||||||
|
$response['errors'][] = 'Du hast keine E-Mail-Adresse eingegeben.';
|
||||||
|
}
|
||||||
|
if (empty($_POST['name'])) {
|
||||||
|
$response['errors'][] = 'Du hast keinen Namen eingegeben.';
|
||||||
|
}
|
||||||
|
if ($_POST['captcha'] != 'Nudelsuppe') {
|
||||||
|
$response['errors'][] = 'Wir glauben du bist ein Bot.';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$message = sanitize_text('message');
|
||||||
|
$name = sanitize_text('name');
|
||||||
|
$email = sanitize_text('email');
|
||||||
|
|
||||||
|
if (!send_message_to_office($message, $name, $email)) {
|
||||||
|
$response['errors'][] = 'Deine Nachricht konnte nicht übermittelt werden.';
|
||||||
|
} else {
|
||||||
|
$response['status'] = 'ok';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
send_response($response);
|
||||||
|
} else {
|
||||||
|
http_response_code(404);
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
_model: page
|
_model: contact_page
|
||||||
---
|
---
|
||||||
title: Kontakt
|
title: Kontakt
|
||||||
---
|
---
|
||||||
|
4
models/contact_page.ini
Normal file
4
models/contact_page.ini
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[model]
|
||||||
|
name = Contact Page
|
||||||
|
label = {{ this.title }}
|
||||||
|
inherits = page
|
51
templates/contact_page.html
Normal file
51
templates/contact_page.html
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
{% extends "header_slim.html" %}
|
||||||
|
{%- block title -%}{{ this.title }}{%- endblock -%}
|
||||||
|
{%- block meta_description -%}
|
||||||
|
{%- if this.meta_description is defined and this.meta_description != "" -%}
|
||||||
|
{{ this.meta_description }}
|
||||||
|
{%- else -%}
|
||||||
|
Werkkooperative der Technikfreundinnen eG
|
||||||
|
{%- endif -%}
|
||||||
|
{%- endblock -%}
|
||||||
|
{% block body %}
|
||||||
|
<div class="content__box">
|
||||||
|
<div class="content__inner_box">
|
||||||
|
<h1>{{ this.title }}</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<section class="content -odd">
|
||||||
|
<div class="content__box">
|
||||||
|
<div class="content__inner_box -width_constraint">
|
||||||
|
{{ this.body }}
|
||||||
|
</div>
|
||||||
|
<div class="content__inner_box -width_constraint content__contact_form_wrapper" style="display:none">
|
||||||
|
<h2>Kontaktformular</h2>
|
||||||
|
<form id="contact_form" class="content__contact_form">
|
||||||
|
<p class="contact_form__note">
|
||||||
|
Deine E-Mail-Adresse wird nicht veröffentlicht.<br>
|
||||||
|
<span aria-hidden="true">Erforderliche Felder sind gekennzeichnet <span class="contact_form--required" aria-hidden="true">*</span></span>
|
||||||
|
</p>
|
||||||
|
<p class="contact_form__textarea">
|
||||||
|
<label for="message">Nachricht <span class="contact_form--required" aria-hidden="true">*</span></label>
|
||||||
|
<textarea id="message" class="contact_form__message" aria-label="message" aria-hidden="true" cols="65" rows="7" name="message" required></textarea>
|
||||||
|
</p>
|
||||||
|
<p class="contact_form__text_input">
|
||||||
|
<label for="name">Name <span class="contact_form--required" aria-hidden="true">*</span></label>
|
||||||
|
<input id="name" class="contact_form__name" name="name" type="text" value="" size="30" maxlength="245" required />
|
||||||
|
</p>
|
||||||
|
<p class="contact_form__text_input">
|
||||||
|
<label for="email">E-Mail-Adresse <span class="contact_form--required" aria-hidden="true">*</span></label>
|
||||||
|
<input id="email" class="contact_form__email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-address" required />
|
||||||
|
</p>
|
||||||
|
<p class="contact_form__captcha">
|
||||||
|
<label for="captcha">Captcha <span class="contact_form--required" aria-hidden="true">*</span></label>
|
||||||
|
<input id="captcha" class="contact_form__captcha" name="captcha" type="captcha" value="…" size="30" maxlength="100" required placeholder="Wie viele Ecken hat ein Pentagramm?"/>
|
||||||
|
</p>
|
||||||
|
<p class="contact_form__submit">
|
||||||
|
<input name="submit" type="submit" id="submit" class="contact_form__submit_button" value="Kommentar abschicken" />
|
||||||
|
</p>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
{% endblock %}
|
@ -63,6 +63,9 @@ __ ____________________
|
|||||||
{% 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 -%}
|
||||||
|
<script type="text/javascript" src="{{ '/js/contact_form_toggle.js'|asseturl }}"></script>
|
||||||
|
{%- endif %}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
@ -128,4 +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 -%}
|
||||||
|
<script type="text/javascript" src="{{ '/js/contact_form.js'|asseturl }}"></script>
|
||||||
|
{%- endif %}
|
||||||
</body>
|
</body>
|
||||||
|
Loading…
Reference in New Issue
Block a user