215 lines
13 KiB
PHP
215 lines
13 KiB
PHP
@php
|
||
$draft = Session::get('contact_draft', []);
|
||
$val = fn(string $key) => old($key, $draft[$key] ?? '');
|
||
@endphp
|
||
@extends('fo.layout', ['page' => 'contact'])
|
||
|
||
@section('title', $staticPageModel->seo_title)
|
||
@section('description', $staticPageModel->seo_description)
|
||
|
||
@section('bannerHeader')
|
||
@include('fo.partials.banner-header', [
|
||
'page' => 'contact',
|
||
'title' => $staticPageModel->title,
|
||
'description' => $staticPageModel->content,
|
||
])
|
||
@endsection
|
||
|
||
@section('content')
|
||
<div class="container-fluid d-flex flex-column align-items-center px-0">
|
||
<div class="text-bg-dark fw-bold fs-5 cn-cookie-activate d-flex flex-column flex-md-row align-items-center mx-3 mt-4 rounded p-3"
|
||
data-cookie-name="recaptcha">
|
||
<span class="d-flex flex-column w-md-75 w-100">
|
||
<strong class="text-underline text-bold text-danger">
|
||
{{ __('cookie-notice.custom.recaptcha.warning') }}
|
||
</strong>
|
||
<br>
|
||
<small class="text-white">
|
||
{{ __('Acceptez ce cookie pour utiliser les formulaires') }}
|
||
</small>
|
||
</span>
|
||
<button class="btn text-bg-light w-50 h-50 fs-5 rounded-4 mt-md-0 mt-3"
|
||
id="recaptcha-accept">{{ __('AUTORISER') }}</button>
|
||
</div>
|
||
<div class="contact-wrapper position-relative bg-ardoise-radial pt-sm-4 pt-4">
|
||
<form class="form-contact" id="contact-form" action="{{ route('fo.contact.submit') }}" method="post"
|
||
inert="true" data-save-draft-url="{{ route('fo.contact.save-draft') }}">
|
||
@csrf
|
||
<div class="row wrapper-sm justify-content-center">
|
||
<div class="col-12 col-sm-6 d-flex justify-content-center justify-content-sm-end flex-wrap">
|
||
<input class="form-control black-square mb-3 p-3" id="firstname" name="firstname" type="text"
|
||
value="{{ $val('firstname') }}" placeholder="{{ __('Prénom') }}">
|
||
@include('fo.modules.input-error', ['inputName' => 'firstname'])
|
||
</div>
|
||
<div class="col-12 col-sm-6 d-flex justify-content-center justify-content-sm-start flex-wrap">
|
||
<input class="form-control black-square mb-3 p-3" id="lastname" name="lastname" type="text"
|
||
value="{{ $val('lastname') }}" placeholder="{{ __('Nom *') }}" required>
|
||
@include('fo.modules.input-error', ['inputName' => 'lastname'])
|
||
</div>
|
||
<div class="col-12 col-sm-6 d-flex justify-content-center justify-content-sm-start flex-wrap">
|
||
<input class="form-control black-square mb-3 p-3" id="email" name="email" type="email"
|
||
value="{{ $val('email') }}" placeholder="{{ __('Adresse e-mail *') }}" required>
|
||
@include('fo.modules.input-error', ['inputName' => 'email'])
|
||
</div>
|
||
<div class="col-12 col-sm-6 d-flex justify-content-center justify-content-sm-start flex-wrap">
|
||
<input class="form-control black-square mb-3 p-3" id="phone" name="phone" type="text"
|
||
value="{{ $val('phone') }}" placeholder="{{ __('N° de téléphone *') }}" required>
|
||
@include('fo.modules.input-error', ['inputName' => 'phone'])
|
||
</div>
|
||
<div class="col-12 col-sm-6 d-flex justify-content-center justify-content-sm-start flex-wrap">
|
||
<select class="contact-activity-container black-square position-relative w-100 mb-3 p-3"
|
||
name="activity" role="button">
|
||
{{ __('Votre activité') }} *
|
||
<option class="option-activity-item disabled p-3 px-3"
|
||
@if (!old('activity') && empty($draft['activity'])) selected @endif disabled>
|
||
{{ __('Votre activité') }} *</option>
|
||
@foreach (\App\Enums\Contact\ContactActivityEnum::toArray() as $key => $activity)
|
||
<option class="option-activity-item px-3" value="{{ $activity->value }}"
|
||
@if (old('activity',$draft['activity'] ?? '') == $activity->value) selected @endif>{{ $activity->label }}</option>
|
||
@endforeach
|
||
</select>
|
||
@include('fo.modules.input-error', ['inputName' => 'activity'])
|
||
</div>
|
||
<div class="col-12 col-sm-6 d-flex justify-content-center justify-content-sm-start flex-wrap">
|
||
<input class="form-control black-square mb-3 p-3" id="society" name="society" type="text"
|
||
value="{{ $val('society') }}" placeholder="{{ __('Société') }}">
|
||
@include('fo.modules.input-error', ['inputName' => 'society'])
|
||
</div>
|
||
<div class="col-12 col-sm-6 d-flex justify-content-center justify-content-sm-start flex-wrap">
|
||
<input class="form-control black-square mb-3 p-3" id="postcode" name="postcode" type="text"
|
||
value="{{ $val('postcode') }}" placeholder="{{ __('Code postal *') }}" required>
|
||
@include('fo.modules.input-error', ['inputName' => 'postcode'])
|
||
</div>
|
||
<div class="col-12 col-sm-6 d-flex justify-content-center justify-content-sm-start flex-wrap">
|
||
<input class="form-control black-square mb-3 p-3" id="city" name="city" type="text"
|
||
value="{{ $val('city') }}" placeholder="{{ __('Ville') }}">
|
||
@include('fo.modules.input-error', ['inputName' => 'city'])
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row wrapper-sm mb-3">
|
||
<div class="col">
|
||
@include('fo.modules.input-error', ['inputName' => 'message'])
|
||
<textarea class="form-control black-square mb-3 p-3" id="message" name="message" cols="30" rows="6"
|
||
placeholder="{{ __('Votre message') }} ({{ __('min. 20 caractères.') }}) *" required>{{ $val('message') }}</textarea>
|
||
</div>
|
||
</div>
|
||
<div class="row wrapper-sm mb-3">
|
||
<p>{{ __('Vous êtes intéressé par :') }}</p>
|
||
<div class="col-10 col-sm-11 px-0">
|
||
@php
|
||
$data = [
|
||
'basket' => Session::get('saveProductInBasket'),
|
||
'imageCross' => Vite::asset('resources/assets/images/croix-blanche.png'),
|
||
];
|
||
@endphp
|
||
<div class="contact-list-products" data-json='@json($data)'></div>
|
||
</div>
|
||
<div class="col-2 col-sm-1 pt-0">
|
||
<a class="btn-plus-wrapper d-flex justify-content-center align-items-center bg-second rounded-circle fs-xl color-body m-0"
|
||
href="{{ route('fo.products.index') }}">+</a>
|
||
</div>
|
||
</div>
|
||
<div class="row wrapper-sm mb-0">
|
||
<p>{{ __('Quand souhaitez-vous être rappelé ?') }} *</p>
|
||
@include('fo.modules.input-error', ['inputName' => 'callTime'])
|
||
</div>
|
||
<div class="row wrapper-sm mb-3">
|
||
@foreach (App\Enums\Contact\ContactTimeEnum::toArray() as $key => $contactTime)
|
||
<div class="col">
|
||
<input class="input-radio-contact d-none" id="call-time-{{ Str::slug($contactTime->value) }}"
|
||
name="callTime" type="radio" value="{{ $contactTime->value }}"
|
||
@if (old('callTime', $draft['callTime'] ?? '') == $contactTime->value) checked @endif>
|
||
<label class="label-time-contact butn-cinq position-relative w-100 m-0"
|
||
for="call-time-{{ Str::slug($contactTime->value) }}">
|
||
{{ $contactTime->label }}
|
||
</label>
|
||
</div>
|
||
@endforeach
|
||
</div>
|
||
|
||
<div class="row wrapper-sm p-3">
|
||
<div class="col col-md-8 lh-sm px-0 py-2">
|
||
<div class="form-check text-start">
|
||
<input class="form-check-input @if ($errors->has('opt_in')) is-invalid @endif me-1" id="check-optin"
|
||
name="opt_in" type="checkbox" @checked(old('opt_in', $draft['opt_in'] ?? false))>
|
||
<label class="form-check-label w-fit" for="check-optin" role="button">
|
||
{{ __('Je souhaite m’inscrire à la newsletter') }} {{ Config::get('theme.site_name') }}
|
||
</label>
|
||
</div>
|
||
@foreach ($errors->get('opt_in') as $message)
|
||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||
@endforeach
|
||
</div>
|
||
</div>
|
||
<div class="row wrapper-sm mb-3">
|
||
<div class="rgpg-wrapper d-flex align-items-center ff-poppins-regular fs-xxsm px-3 py-1">
|
||
<p>
|
||
{{ __('Les informations recueillies à partir de ce formulaire sont traitées par le Responsable de Traitement pour donner suite à votre demande de contact. Pour connaître vos droits, vous pouvez consulter la') }}
|
||
<a class="fw-bold text-decoration-underline" href="{{ route('fo.policies') }}"
|
||
title="{{ __('Consulter la charte de confidentialité') }}">
|
||
{{ __('Charte de confidentialité') }}
|
||
</a>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="d-flex flex-column justify-content-center align-items-center w-100 mb-4">
|
||
<div id="r_captcha"></div>
|
||
@if ($errors->has('g-recaptcha-response'))
|
||
<div class="mb-6">
|
||
<span class="text-danger">{{ $errors->first('g-recaptcha-response') }}</span>
|
||
</div>
|
||
@endif
|
||
</div>
|
||
<div class="row wrapper-sm mb-3">
|
||
<div class="butn-wrap w-100">
|
||
<button class="g-recaptcha butn-prim bckg-body w-100"
|
||
data-sitekey="{{ config('services.google.recaptcha.public') }}" data-callback='onSubmit'
|
||
data-action='submit' type="submit">{{ __('Envoyer') }}
|
||
</button>
|
||
</div>
|
||
</div>
|
||
</form>
|
||
<div class="row wrapper-sm mb-3">
|
||
<p>{{ __('*obligatoire') }}</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
@endsection
|
||
|
||
@push('scripts')
|
||
<script nonce="{{ $nonce ?? '' }}">
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
const initFormCaptcha = () => {
|
||
const newDiv = document.createElement("div");
|
||
newDiv.classList.add('g-recaptcha');
|
||
document.getElementById('r_captcha').appendChild(newDiv);
|
||
document.getElementById('contact-form').inert = true;
|
||
};
|
||
window.__CN_Recaptcha = function() {
|
||
initFormCaptcha();
|
||
(function(d, t) {
|
||
let g = d.createElement(t),
|
||
s = d.getElementsByTagName(t)[0];
|
||
g.src =
|
||
'https://www.google.com/recaptcha/api.js?render=explicit&onload=__CN_Recaptcha_Loaded';
|
||
s.parentNode.insertBefore(g, s)
|
||
}(document, 'script'));
|
||
};
|
||
window.__CN_Recaptcha_Reset = function() {
|
||
document.querySelector('#r_captcha > div')?.remove();
|
||
};
|
||
window.__CN_Recaptcha_Loaded = function() {
|
||
document.getElementById('contact-form').inert = false;
|
||
grecaptcha.render(document.querySelector('#r_captcha > div'), {
|
||
'sitekey': '{{ config('services.google.recaptcha.public') }}'
|
||
});
|
||
};
|
||
document.getElementById("recaptcha-accept").addEventListener('click', function(e) {
|
||
e.preventDefault();
|
||
window.WebCookieNotice.acceptCookie('recaptcha');
|
||
});
|
||
});
|
||
|
||
</script>
|
||
@endpush
|