112 lines
3.5 KiB
PHP
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',
|
|
];
|
|
}
|
|
}
|