ldc-legaulois/app/Http/Requests/Fo/ContactFormRequest.php
2024-10-04 17:24:15 +02:00

103 lines
4.1 KiB
PHP

<?php
namespace App\Http\Requests\Fo;
use App\Enums\ContactFormCivility;
use App\Enums\ContactFormType;
use App\Lib\Helpers\ToolboxHelper;
use Carbon\Carbon;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\Enum;
class ContactFormRequest 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'));
$rules = [
'type' => [
'required',
Rule::enum(ContactFormType::class)->only(ContactFormType::getContactTypes())
],
'civility' => [
'required',
Rule::enum(ContactFormCivility::class)
],
// * max arcadia 50 chars
'lastname' => 'required|min:2|max:50',
// * max arcadia 50 chars
'firstname' => 'required|min:2|max:50',
'address' => 'required|min:4',
'email' => 'required|email:rfc,dns,spoof',
'postal' => 'required|postal_code:FR',
// * max arcadia 10 chars
'town' => 'required|min:3|max:90',
'phone' => 'required|phone:FR',
// 'onepagesubject' => 'sometimes|min:10|max:250',
'message' => 'required|min:20|max:1900'
];
if (ContactFormType::make($this->input('type')) === ContactFormType::complain) {
$rules = array_merge(
$rules,
[
'productName' => 'required|min:2|max:100',
'productCode' => 'required|digits_between:8,13|min:1|max:9999999999999',
'buyPlace' => 'required|min:2|max:100',
'lotNumberName' => 'required|min:2|max:50',
'limitDateDay' => 'required|numeric|min:1|max:31',
'limitDateMonth' => 'required|numeric|min:1|max:31',
'limitDateYear' => 'required|numeric|min:2010|max:2050',
'consumptionDateDay' => 'required|numeric|min:1|max:31',
'consumptionDateMonth' => 'required|numeric|min:1|max:31',
'consumptionDateYear' => 'required|numeric|min:2010|max:2050',
'joinFile' => 'nullable|mimes:jpg,jpeg,png,pdf|max:2048'
],
);
}
return $rules;
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes(): array
{
return [
'lastname' => trans('validation.attributes.last_name'),
'firstname' => trans('validation.attributes.first_name'),
'town' => trans('validation.custom.town'),
'productName' => trans('validation.custom.product_name'),
'productCode' => trans('validation.custom.barcode'),
'buyPlace' => trans('validation.custom.place_of_purchase'),
'lotNumberName' => trans('validation.custom.batch_number'),
'limitDateDay' => sprintf('%s - %s', trans('validation.custom.use_by_date'), trans('day')),
'limitDateMonth' => sprintf('%s - %s', trans('validation.custom.use_by_date'), trans('month')),
'limitDateYear' => sprintf('%s - %s', trans('validation.custom.use_by_date'), trans('year')),
'consumptionDateDay' => sprintf('%s - %s', trans('validation.custom.consumption_date'), trans('day')),
'consumptionDateMonth' => sprintf('%s - %s', trans('validation.custom.consumption_date'), trans('month')),
'consumptionDateYear' => sprintf('%s - %s', trans('validation.custom.consumption_date'), trans('year')),
'joinFile' => trans('validation.custom.attachment')
];
}
}