117 lines
7.9 KiB
PHP
117 lines
7.9 KiB
PHP
<?php
|
|
/* @var Session $session */
|
|
$isEn = ($lang ?? 'de') === 'en';
|
|
$form = $session->get('form');
|
|
?>
|
|
|
|
<div class="form-card">
|
|
<?php if($session->has('alert')): ?>
|
|
<div class="alert <?=$session->get('alert-class')?>" role="alert" aria-live="polite">
|
|
<?php if($session->get('alert-class') === 'alert-success'): ?>
|
|
<svg aria-hidden="true" focusable="false" style="width: 22px; height: 22px; fill: currentColor; flex-shrink: 0;" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></svg>
|
|
<?php else: ?>
|
|
<svg aria-hidden="true" focusable="false" style="width: 22px; height: 22px; fill: currentColor; flex-shrink: 0;" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
|
|
<?php endif; ?>
|
|
<div><?=$session->get('alert')?></div>
|
|
</div>
|
|
<?php $session->remove('alert'); ?>
|
|
<?php endif; ?>
|
|
|
|
<h1><?= $isEn ? 'Your Contact Inquiry' : 'Ihre Kontaktanfrage' ?></h1>
|
|
|
|
<p id="form-instructions" style="color: var(--text-muted); margin-bottom: 2rem;">
|
|
<?php if ($isEn): ?>
|
|
Here you can submit a personal inquiry by providing your contact details.
|
|
Fields marked with an asterisk (<span aria-hidden="true" style="color: var(--danger); font-weight: bold;">*</span>) are mandatory.
|
|
Please provide either an email address or your phone number so that we can reach you.
|
|
<?php else: ?>
|
|
Hier können Sie, unter Angabe Ihrer Kontaktdaten, eine persönliche Anfrage stellen.
|
|
Die mit einem (<span aria-hidden="true" style="color: var(--danger); font-weight: bold;">*</span>) gekennzeichneten Felder sind Pflichtfelder.
|
|
Bitte geben Sie entweder eine E-Mail-Adresse oder Ihre Telefonnummer an, damit wir Sie erreichen können.
|
|
<?php endif; ?>
|
|
</p>
|
|
|
|
<form action="/contact.php" method="post" id="contactForm">
|
|
<input type="hidden" name="timestamp" value="<?=time()?>">
|
|
<input type="hidden" name="lang" value="<?=htmlspecialchars($lang ?? 'de')?>">
|
|
<input type="hidden" name="check" id="formCheck" value="<?=(isset($form) && !empty($form['check']) ? 'send' : '0')?>">
|
|
|
|
<!-- Honeypot Bot Field (hidden from real users) -->
|
|
<div style="display: none;" aria-hidden="true">
|
|
<label for="company"><?= $isEn ? 'Company (Please leave blank)' : 'Firma (Bitte freilassen)' ?></label>
|
|
<input type="text" name="company" id="company" tabindex="-1" autocomplete="off" value="">
|
|
</div>
|
|
|
|
<div class="form-row">
|
|
<div class="form-group">
|
|
<label class="form-label" for="surname"><?= $isEn ? 'First Name' : 'Vorname' ?></label>
|
|
<input type="text" class="form-control" name="surname" id="surname" autocomplete="given-name" placeholder="<?= $isEn ? 'Your first name' : 'Ihr Vorname' ?>" value="<?=isset($form) ? htmlspecialchars($form['surname']) : ''?>">
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="form-label" for="name"><?= $isEn ? 'Last Name' : 'Nachname' ?> <span class="required" aria-hidden="true">*</span></label>
|
|
<input type="text" class="form-control" name="name" id="name" autocomplete="family-name" required placeholder="<?= $isEn ? 'Your last name' : 'Ihr Nachname' ?>" value="<?=isset($form) ? htmlspecialchars($form['name']) : ''?>">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-row">
|
|
<div class="form-group">
|
|
<label class="form-label" for="email"><?= $isEn ? 'Email Address' : 'E-Mail-Adresse' ?> <span class="required" aria-hidden="true" title="<?= $isEn ? 'Please provide an email address or phone number' : 'Bitte E-Mail-Adresse oder Telefonnummer angeben' ?>">*</span></label>
|
|
<input type="email" class="form-control" name="email" id="email" autocomplete="email" aria-describedby="form-instructions" required placeholder="<?= $isEn ? 'your.email@example.com' : 'ihre.adresse@example.de' ?>" value="<?=isset($form) ? htmlspecialchars($form['email']) : ''?>">
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="form-label" for="phone"><?= $isEn ? 'Phone Number' : 'Telefonnummer' ?> <span class="required" aria-hidden="true" title="<?= $isEn ? 'Please provide an email address or phone number' : 'Bitte E-Mail-Adresse oder Telefonnummer angeben' ?>">*</span></label>
|
|
<input type="tel" class="form-control" name="phone" id="phone" autocomplete="tel" aria-describedby="form-instructions" required placeholder="030 12345678" value="<?=isset($form) ? htmlspecialchars($form['phone']) : ''?>">
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="form-label" for="message"><?= $isEn ? 'Your Message' : 'Ihre Mitteilung' ?> <span class="required" aria-hidden="true">*</span></label>
|
|
<textarea class="form-control" name="message" id="message" required rows="6" placeholder="<?= $isEn ? 'How can we help you?' : 'Wie können wir Ihnen weiterhelfen?' ?>"><?=isset($form) ? htmlspecialchars($form['message']) : ''?></textarea>
|
|
</div>
|
|
|
|
<div class="form-note">
|
|
<svg aria-hidden="true" focusable="false" style="width: 16px; height: 16px; fill: currentColor; vertical-align: middle; margin-right: 4px;" viewBox="0 0 24 24"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z"/></svg>
|
|
<?php if ($isEn): ?>
|
|
Your personal data will be treated confidentially, processed exclusively to handle your inquiry in accordance with our <a href="<?= Helper::url('/datenschutz.html', $lang ?? 'de') ?>" style="text-decoration: underline;">Privacy Policy</a>, and never passed on to third parties.
|
|
<?php else: ?>
|
|
Ihre persönlichen Angaben werden vertraulich behandelt, ausschließlich zur Bearbeitung Ihrer Anfrage gemäß unserer <a href="<?= Helper::url('/datenschutz.html', $lang ?? 'de') ?>" style="text-decoration: underline;">Datenschutzerklärung</a> verarbeitet und niemals an Dritte weitergegeben.
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<div class="form-actions">
|
|
<button type="button" class="btn btn-outline-primary" onclick="history.back();"><?= $isEn ? 'Cancel' : 'Abbrechen' ?></button>
|
|
<button type="submit" class="btn btn-primary" name="send">
|
|
<svg aria-hidden="true" focusable="false" style="width: 18px; height: 18px; fill: currentColor;" viewBox="0 0 24 24"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/></svg>
|
|
<?= $isEn ? 'Send Inquiry' : 'Anfrage absenden' ?>
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<script type="text/javascript">
|
|
$(document).ready(function() {
|
|
// Human interaction verification for bot protection
|
|
$('#contactForm input, #contactForm textarea').one('focus', function() {
|
|
$('#formCheck').val('send');
|
|
});
|
|
|
|
// Require at least one contact method (email OR phone) as stated in the instructions
|
|
function syncContactRequirement() {
|
|
var hasEmail = $.trim($('#email').val()).length > 0;
|
|
var hasPhone = $.trim($('#phone').val()).length > 0;
|
|
if (hasEmail && !hasPhone) {
|
|
$('#phone').prop('required', false);
|
|
$('#email').prop('required', true);
|
|
} else if (hasPhone && !hasEmail) {
|
|
$('#email').prop('required', false);
|
|
$('#phone').prop('required', true);
|
|
} else {
|
|
$('#email').prop('required', true);
|
|
$('#phone').prop('required', false);
|
|
}
|
|
}
|
|
$('#email, #phone').on('input change', syncContactRequirement);
|
|
syncContactRequirement();
|
|
});
|
|
</script>
|