contact plugin
Closed this issue · 2 comments
huserg commented
Plugin pour form de contact
huserg commented
<form id="contact-form" action="{{ route('shop.contact') }}" method="post">
@csrf
@auth('shop')
<div class="form-group row">
<div class="col-12 col-md-4">
<label for="email">{{ __('E-Mail') }}</label>
</div>
<div class="col-12 col-md-8 form-material pt-0">
<input type="email" class="form-control" id="email" name="email" value="{{ old('email') }}" placeholder="{{ auth('shop')->user()->email }}">
@include('back.helpers.input-errors', ['inputName' => 'email'])
</div>
</div>
@else
<div class="form-group row">
<div class="col-12 col-md-4">
<label for="firstname">{{ __('Prénom') }}</label>
</div>
<div class="col-12 col-md-8 form-material pt-0">
<input type="firstname" class="form-control" id="firstname" name="firstname" value="{{ old('firstname') }}">
@include('back.helpers.input-errors', ['inputName' => 'firstname'])
</div>
</div>
<div class="form-group row">
<div class="col-12 col-md-4">
<label for="lastname">{{ __('Nom') }}</label>
</div>
<div class="col-12 col-md-8 form-material pt-0">
<input type="lastname" class="form-control" id="lastname" name="lastname" value="{{ old('lastname') }}">
@include('back.helpers.input-errors', ['inputName' => 'lastname'])
</div>
</div>
<div class="form-group row">
<div class="col-12 col-md-4">
<label for="email">{{ __('E-Mail') }}</label>
</div>
<div class="col-12 col-md-8 form-material pt-0">
<input type="email" class="form-control" id="email" name="email" value="{{ old('email') }}">
@include('back.helpers.input-errors', ['inputName' => 'email'])
</div>
</div>
@endif
<div class="form-group row">
<div class="col-12 col-md-4">
<label for="message">{{ __('Message') }}</label>
</div>
<div class="col-12 col-md-8 form-material pt-0">
<textarea class="form-control" id="message" name="message" rows="10">{!! old('message') ?? '' !!}</textarea>
@include('back.helpers.input-errors', ['inputName' => 'message'])
</div>
</div>
<div class="form-group row mt-50">
<div class="offset-md-4">
<button
data-sitekey="{{ env('GOOGLE_CAPTCHA_KEY') }}"
data-callback='onSubmit'
data-action='submit'
type="submit"
class="btn btn-hero btn-noborder btn-rounded btn-success g-recaptcha">
<i class="fa fa-user-plus mr-10"></i> {{ ('Envoyer message') }}
</button>
</div>
</div>
</form>
@endsection
@section('js_after')
<script src="https://www.google.com/recaptcha/api.js"></script>
<script>
function onSubmit(token) {
document.getElementById("contact-form").submit();
}
</script>
huserg commented
use App\Http\Controllers\Controller;
use App\Http\Requests\Front\Contact\CreateContactRequest;
use App\Models\Request;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
class ContactController extends Controller
{
private String $recaptcha_api_base = "https://www.google.com/recaptcha/api/";
private String $recaptcha_verify_endpoint = "siteverify";
public function create() {
return view('front.contact.index');
}
public function store(CreateContactRequest $request) {
$input = $request->validated();
$token = $input['g-recaptcha-response'];
$client = new Client([
'base_uri' => $this->recaptcha_api_base,
'timeout' => 2.0
]);
try {
$res = $client->post($this->recaptcha_verify_endpoint, [
'query' => [
'secret' => env('GOOGLE_CAPTCHA_SECRET'),
'response' => $token,
]
]);
// reCaptcha check
$response = json_decode($res->getBody()->getContents(),true);
if(!$response['success'])
return back()->with(['message.text' => __('reCaptcha challenge échoué'), 'message.type' => 'warning']);
}
catch (GuzzleException $e){
if(!auth('shop')->check())
return back()->with(['message.text' => __('Erreur du Google reCaptcha, merci de réessayer plus tard'), 'message.type' => 'warning']);
}
if (auth('shop')->check())
$input += ['client_id' => auth('shop')->user()->id];
$input += ['status' => config('shop.client_request.keys.new')];
Request::create($input);
session()->now('message.type', 'success');
session()->now('message.text', __('Merci pour votre demande, elle sera traitée dans les meilleurs délais.'));
return view('.index');
}
}