check(); } /** * Prepare the data for validation. */ public function prepareForValidation(): void { try { $this->currentCountry = Country::make(\intval($this->country)); } catch (\TypeError | \BadMethodCallException $e) { $this->currentCountry = null; } $this->merge([ 'phone' => $this->input('phone'), 'opt_in' => $this->boolean('opt_in'), 'ok_cgu' => $this->boolean('ok_cgu'), ]); } /** * Get the validation rules that apply to the request. */ public function rules(): array { ToolboxHelper::validateRecaptcha($this, \config('services.google.recaptcha.version')); /** @var \App\Models\Customer|null $customerModel */ $customerModel = auth('club')->user(); $customerId = $customerModel ? $customerModel->getKey() : null; $countryList = implode(',', Country::getValidIsoAplha2Codes()); return [ 'lastname' => 'required|string|max:255', 'firstname' => 'required|string|max:255', 'username' => 'required|string|max:255|unique:customers,username,' . $customerId, 'phone' => "nullable|max:255|between:1,100|phone:{$countryList}", 'address' => 'required|string|min:1|max:255', 'address2' => 'nullable|string|min:1|max:255', 'postal_code' => "required|string|min:1,100|postal_code:{$countryList}", 'city' => 'required|string|min:2|max:255', 'birth_date' => 'required|date', 'country' => ['required', Rule::enum(Country::class), sprintf( 'in:%s', implode(',', Country::getValidCountriesValues()) )], 'email' => [ 'required', 'email:rfc,dns,spoof', 'max:255', // Does email already exists in CRM ? // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed function (string $attribute, $value, \Closure $fail) { if (CrmCustomer::findWithEmail(\strval($value))) { $fail('Un compte existe déjà avec cette adresse.'); } }, 'unique:customers,email', ], 'password' => [ 'required', 'confirmed', Password::min(8)->mixedCase()->numbers()->symbols()->uncompromised(), ], 'ok_cgu' => 'accepted', 'opt_in' => 'required|boolean', ]; } /** * Get custom attributes for validator errors. */ public function attributes(): array { return [ 'lastname' => trans('validation.attributes.first_name'), 'firstname' => trans('validation.attributes.first_name'), 'username' => trans('validation.attributes.username'), 'phone' => trans('validation.attributes.phone'), 'address' => trans('validation.attributes.line_address_1'), 'address2' => trans('validation.attributes.line_address_2'), 'country' => trans('validation.attributes.country'), 'postal_code' => trans('validation.attributes.postal_code'), 'city' => trans('validation.attributes.city'), 'birth_date' => trans('validation.attributes.date_of_birth'), 'email' => trans('validation.attributes.email'), 'password' => trans('validation.attributes.password'), 'password_confirmation' => trans('validation.attributes.password_confirmation'), 'ok_cgv' => trans('validation.custom.terms'), 'opt_in' => trans('validation.custom.newsletter'), ]; } /** * Get custom messages for validator errors. */ public function messages(): array { return [ 'username.unique' => trans('Le pseudo est déjà pris'), ]; } }