ldc-gen-game-web/app/Http/Requests/Bo/Settings/UpdateSettingsRequest.php
2023-12-05 12:33:25 +01:00

135 lines
6.3 KiB
PHP

<?php
namespace App\Http\Requests\Bo\Settings;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Gate;
class UpdateSettingsRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return boolean
*/
public function authorize()
{
return Gate::check('update', $this->route('settings'));
}
/**
* Prepare the data for validation.
*
* @return void
* @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh
*/
protected function prepareForValidation()
{
// phpcs:enable
$this->merge([
// Checkboxes.
'use_ean_codes' => $this->boolean('use_ean_codes'),
'activated_teaser' => $this->boolean('activated_teaser'),
'activated_close_page' => $this->boolean('activated_close_page'),
'reductions_activated' => $this->boolean('reductions_activated'),
'winning_proof' => $this->boolean('winning_proof'),
// Arrays.
'notification_emails' => collect($this->input('notification_emails'))->filter()->all(),
// Remove some dates if the checkbox is uncheck.
'close_page_active_date' => $this->input('activated_close_page') ?
$this->input('close_page_active_date') : null,
// Remove reductions datas if the reduction checkbox is uncheck.
'reductions_site' => $this->input('reductions_activated') ? $this->input('reductions_site') : null,
'reductions_campaign' => $this->input('reductions_activated') ? $this->input('reductions_campaign') : null,
'web_coupons' => collect($this->input('web_coupons'))->filter()->all(),
]);
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|string|min:3|max:255',
'company' => 'required|string|min:3|max:255',
'start_date' => 'required|date',
'end_date' => 'required|date',
'nb_participation_player' => 'required|numeric|min:0',
'nb_participation_ip' => 'required|numeric|min:0',
'nb_unique_code_use' => 'required|numeric|min:0',
'use_ean_codes' => 'required|boolean',
'activated_teaser' => 'required|boolean',
'activated_close_page' => 'required|boolean',
'close_page_active_date' => 'nullable|required_if:activated_close_page,true,1|date|after_or_equal:today',
'redirect_close' => 'required|url:http,https',
'reductions_activated' => 'required|boolean',
'reductions_site' => 'nullable|required_if:reductions_activated,true,1|string|min:3|max:255',
'reductions_campaign' => 'nullable|required_if:reductions_activated,true,1|string|min:3|max:255',
'web_coupons' => [
'present', 'array', function ($attribute, $value, $fail) {
if ($this->post('reductions_activated') and !collect($value)->filter()->count()) {
$fail(trans('validation.min.array', [
'attribute' => Arr::get($this->attributes(), $attribute),
'min' => 1
]));
}
}
],
'web_coupons.*' => 'array',
'web_coupons.*.web_coupon_identifiant' => 'required|string|min:3|max:255',
'web_coupons.*.percentage' => 'required|numeric|min:0|max:100',
'web_coupons.*.face_value' => 'required|string|min:3|max:255',
'web_coupons.*.valid_on' => 'required|string|min:3|max:255',
'web_coupons.*.img_name' => 'required|string|min:3|max:255',
'notification_emails' => 'required|array|min:1',
'notification_emails.*' => 'email:rfc,spoof,dns',
'winning_proof' => 'required|boolean',
];
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes(): array
{
return [
'name' => trans('validation.attributes.name'),
'company' => trans('validation.custom.company'),
'start_date' => trans('validation.custom.start_date'),
'end_date' => trans('validation.custom.end_date'),
'nb_participation_player' => trans('validation.custom.nb_participation_player'),
'nb_participation_ip' => trans('validation.custom.nb_participation_ip'),
'nb_unique_code_use' => trans('validation.custom.nb_unique_code_use'),
'use_ean_codes' => trans('validation.custom.use_ean_codes'),
'activated_teaser' => trans('validation.custom.activated_teaser'),
'activated_close_page' => trans('validation.custom.activated_close_page'),
'close_page_active_date' => trans('validation.custom.close_page_active_date'),
'redirect_close' => trans('validation.custom.redirect_close'),
'winning_proof' => trans('validation.custom.winning_proof'),
'reductions_activated' => trans('validation.custom.reductions_activated'),
'reductions_site' => trans('validation.custom.reductions_site'),
'reductions_campaign' => trans('validation.custom.reductions_campaign'),
'web_coupons' => trans('Tableau des coupons'),
'web_coupons.*.web_coupon_identifiant' => trans('Identifiant coupon :index'),
'web_coupons.*.percentage' => trans('Pourcentage :index'),
'web_coupons.*.face_value' => trans('Valeur faciale :index'),
'web_coupons.*.valid_on' => trans('Valable sur :index'),
'web_coupons.*.img_name' => trans('Nom image :index'),
'notification_emails' => trans('Tableau des email à notifier'),
'notification_emails.*.email' => trans('validation.attributes.email')
];
}
}