check(); } /** * Prepare the data for validation. * * @return void */ public function prepareForValidation() { $this->merge([ 'phone' => $this->input('phone'), 'opt_in' => $this->boolean('opt_in'), 'ok_cgv' => $this->boolean('ok_cgv') ]); } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { $countryEnum = Country::make($this->integer('country')); return [ 'lastname' => 'required|string|max:255', 'firstname' => 'required|string|max:255', 'phone' => 'nullable|max:255|phone:FR', 'address' => 'required|string|min:1|max:255', 'address2' => 'nullable|string|min:1|max:255', 'postal_code' => [ 'required', 'string', 'min:1', $countryEnum->equals(Country::belgium()) ? 'postal_code:BE' : '', $countryEnum->equals(Country::luxembourg()) ? 'postal_code:LU' : '', (!$countryEnum->equals(Country::belgium()) && !$countryEnum->equals(Country::luxembourg())) ? 'postal_code:FR' : '', ], 'city' => 'required|string|min:2|max:255', 'birth_date' => ['required', new IsAdult(trans('Vous devez être majeur pour vous inscrire.'))], 'country' => [ 'required', new EnumIsValidRule(Country::class), Rule::in(Country::getValidCountries()) ], 'email' => [ 'required', 'email:rfc,dns,spoof', 'max:255', // * Does email already exists in CRM ? // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed 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_cgv' => 'accepted', 'opt_in' => 'required|boolean', ]; } /** * Get custom attributes for validator errors. * * @return array */ public function attributes() { return [ 'lastname' => trans('validation.attributes.first_name'), 'firstname' => trans('validation.attributes.first_name'), '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('conditions d\'utilisation'), 'opt_in' => trans('newsletter'), ]; } /** * Get custom messages for validator errors. * * @return array */ public function messages() { $messages = [ 'postal_code' => trans('validation.postal_code', [ 'countries' => \implode(', ', Country::getValidCountriesLabel()), 'examples' => 72000 ]), 'phone.phone' => trans('validation.phone', [ 'countries' => \implode(', ', Country::getValidCountriesLabel()) ]), 'email.unique' => trans('Un compte existe déjà avec cette adresse.'), 'ok_cgv.accepted' => trans('Vous devez accepter les conditions d\'utilisation du site pour continuer.') ]; $countryEnum = Country::make($this->integer('country')); if ($countryEnum->equals(Country::belgium())) { $messages = array_merge( $messages, [ 'postal_code' => trans('validation.postal_code', [ 'countries' => Country::belgium()->label, 'examples' => 1000 ]), ] ); } elseif ($countryEnum->equals(Country::luxembourg())) { $messages = array_merge( $messages, [ 'postal_code' => trans('validation.postal_code', [ 'countries' => Country::luxembourg()->label, 'examples' => 1111 ]), ] ); } else { $messages = array_merge( $messages, [ 'postal_code' => trans('validation.postal_code', [ 'countries' => \implode(', ', Country::getValidCountriesLabel()), 'examples' => 72000 ]), ] ); } //end if return $messages; } }