ldc-lionor/app/Http/Requests/Fo/Contact/ContactRequest.php
2024-07-18 08:04:30 +00:00

117 lines
3.6 KiB
PHP

<?php
namespace App\Http\Requests\Fo\Contact;
use App\Enums\CivilityEnum;
use App\Lib\Helpers\ToolboxHelper;
use Illuminate\Foundation\Http\FormRequest;
class ContactRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return boolean
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
ToolboxHelper::validateRecaptcha($this, \config('services.google.recaptcha.version'));
return [
'civility' => [
'required',
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed
function ($attribute, $value, $fail) {
if (!in_array($value, CivilityEnum::toValues())) {
$fail(__('Veuillez choisir entre :values', [
'values' => implode(',', CivilityEnum::toLabels())
]));
}
}
],
'firstname' => 'required|min:2|max:255',
'lastname' => 'required|min:2|max:255',
'email' => 'required|email:rfc,dns,spoof|max:255',
'phone' => 'nullable|max:255|phone:' . implode(',', $this->isoCodes()),
'address' => 'required|string|max:255',
'postcode' => 'required|postal_code:' . implode(',', $this->isoCodes()),
'city' => 'required|string|max:255',
'subject' => 'required|string|max:255',
'message' => 'required|string|min:20|max:255',
];
}
/**
* Messages
*
* @return array
*/
public function messages()
{
return [
// phpcs:ignore Generic.Files.LineLength.TooLong
'phone.phone' => trans('Le champ :attribute est invalide, il accepte les numéros des pays suivants :countries.', [
'countries' => implode(', ', array_keys($this->isoCodes()))
]),
// phpcs:ignore Generic.Files.LineLength.TooLong
'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'),
'address' => trans('adresse'),
'postcode' => trans('code postal'),
'city' => trans('ville'),
'subject' => trans('objet e la demande'),
'message' => trans('message'),
];
}
/**
* 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',
];
}
}