ldc-legaulois/app/Http/Requests/Fo/ContactFormRequest.php

101 lines
4.2 KiB
PHP
Raw Permalink Normal View History

2024-10-04 17:24:15 +02:00
<?php
namespace App\Http\Requests\Fo;
use App\Enums\ContactFormCivility;
use App\Enums\ContactFormType;
use App\Lib\Helpers\ToolboxHelper;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class ContactFormRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
2025-08-25 12:53:24 +02:00
public function authorize(): bool
2024-10-04 17:24:15 +02:00
{
return true;
}
/**
* Get the validation rules that apply to the request.
*/
2025-08-25 12:53:24 +02:00
public function rules(): array
2024-10-04 17:24:15 +02:00
{
ToolboxHelper::validateRecaptcha($this, \config('services.google.recaptcha.version'));
2024-10-04 17:24:15 +02:00
$rules = [
2025-08-25 12:53:24 +02:00
'locale' => [
'nullable',
2026-09-25 16:25:31 +02:00
Rule::enum(ContactFormType::class)->only(ContactFormType::getLocalesContactType()),
],
2025-08-25 12:53:24 +02:00
'type' => [
2024-10-04 17:24:15 +02:00
'required',
2026-09-25 16:25:31 +02:00
Rule::enum(ContactFormType::class)->only(ContactFormType::getContactTypes()),
2024-10-04 17:24:15 +02:00
],
2025-08-25 12:53:24 +02:00
'civility' => ['required', Rule::enum(ContactFormCivility::class)],
'lastname' => 'required|min:2|max:50',
'firstname' => 'required|min:2|max:50',
'address' => 'required|min:4',
'email' => 'required|email:rfc,dns,spoof',
'postal' => 'required|postal_code:FR',
'town' => 'required|min:3|max:90',
'phone' => 'required|phone:FR',
'message' => 'required|min:20|max:1900',
2024-10-04 17:24:15 +02:00
];
if (ContactFormType::make($this->input('type'))->equals(ContactFormType::complain)) {
2024-10-04 17:24:15 +02:00
$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:12',
'limitDateYear' => 'required|numeric|min:2010|max:2050',
'consumptionDateDay' => 'required|numeric|min:1|max:31',
'consumptionDateMonth' => 'required|numeric|min:1|max:12',
'consumptionDateYear' => 'required|numeric|min:2010|max:2050',
],
);
}
if (ContactFormType::make($this->input('type'))->hasFileInput()) {
$rules = array_merge(
$rules,
[
2026-09-25 16:25:31 +02:00
'joinFile' => 'nullable|mimes:jpg,jpeg,png,pdf|max:5120',
2024-10-04 17:24:15 +02:00
],
);
}
return $rules;
}
/**
* Get custom attributes for validator errors.
*/
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')),
2025-08-25 12:53:24 +02:00
'joinFile' => trans('validation.custom.attachment'),
2024-10-04 17:24:15 +02:00
];
}
}