ldc-le-gaulois-pro/app/Http/Requests/Fo/Contact/ContactRequest.php
2023-09-27 10:46:07 +02:00

112 lines
3.5 KiB
PHP

<?php
namespace App\Http\Requests\Fo\Contact;
use App\Enums\Contact\ContactActivityEnum;
use App\Enums\Contact\ContactTimeEnum;
use App\Lib\Helpers\ToolboxHelper;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rules\Enum;
class ContactRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return boolean
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules(): array
{
ToolboxHelper::validateRecaptcha($this, \config('services.google.recaptcha.version'));
return [
'firstname' => 'nullable|min:2|max:255',
'lastname' => 'required|min:2|max:255',
'email' => 'required|email:rfc,dns,spoof|max:255',
'phone' => 'required|max:255|phone:' . implode(',', $this->isoCodes()),
'activity' => ['required', new Enum(ContactActivityEnum::class)],
'society' => 'nullable|string|max:255',
'postcode' => 'nullable|postal_code:' . implode(',', $this->isoCodes()),
'city' => 'nullable|string|max:255',
'message' => 'required|string|min:20|max:255',
'callTime' => ['required', new Enum(ContactTimeEnum::class)],
'rgpd' => 'accepted'
];
}
/**
* Messages
*
* @return array
*/
public function messages(): array
{
return [
'phone.phone' => trans(
'Le champ :attribute est invalide, il accepte les numéros des pays suivants :countries.',
['countries' => implode(', ', array_keys($this->isoCodes()))]
),
'postcode.postal_code' => trans(
'Le champ :attribute est invalide, il accepte les codes postaux des pays suivants :countries.',
['countries' => implode(', ', array_keys($this->isoCodes()))]
),
];
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes(): array
{
return [
'firstname' => trans('prénom'),
'lastname' => trans('nom'),
'email' => trans('email'),
'phone' => trans('téléphone'),
'activity' => trans('activité'),
'society' => trans('société'),
'postcode' => trans('code postal'),
'city' => trans('ville'),
'message' => trans('message'),
'callTime' => trans('préférence de rappel'),
'rgpd' => trans('condition d\'utilisation'),
];
}
/**
* Countries for validation.
*
* @return array
*/
private function isoCodes(): array
{
return [
'france' => 'FR',
'belgium' => 'BE',
'luxembourg' => 'LU',
'guadeloupe' => 'GP',
'martinique' => 'MQ',
'frenchGuiana' => 'GF',
'reunion' => 'RE',
'saintPierreAndMiquelon' => 'PM',
'mayotte' => 'YT',
'saintBarthelemy' => 'BL',
'saintMartinFrenchPart' => 'MF',
'wallisAndFutuna' => 'WF',
'frenchPolynesia' => 'PF',
'newCaledonia' => 'NC',
];
}
}