middleware('guest:frontend'); } /** * Get the guard to be used during authentication. * * @return \Illuminate\Contracts\Auth\StatefulGuard */ protected function guard() { return Auth::guard('frontend'); } /** * Show the application registration form. * * @return \Illuminate\View\View */ public function showRegistrationForm() { return view('auth.register'); } /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator * @throws \Illuminate\Validation\ValidationException If local client cannot validate data. */ protected function validator(array $data) { $data['optin'] = \request()->boolean('optin'); $data['ok_cgv'] = \request()->boolean('ok_cgv'); // * Let Crm client validate data try { (new CrmCustomer())->fill($this->getOnlyCrmData($data)); } catch (CrmValidationException $e) { throw ValidationException::withMessages([ 'error' => $e->getMessage() ]); } $request = new CreateAccountRequest(); $data['phone'] = $data['phone'] ?? null; $data['opt_in'] = ($data['opt_in'] ?? false) ? true : false; return Validator::make( $data, $request->rules(), $request->messages(), $request->attributes() ); } /** * Create a new user instance after a valid registration. * * @param array $data * @return \App\Models\Customer * @throws \Illuminate\Validation\ValidationException If there are validation errors. * @throws \RuntimeException On unhandled api Error. */ protected function create(array $data) { $data['country'] = Country::france(); try { return DB::transaction(function () use ($data) { $crmCustomer = new CrmCustomer($this->getOnlyCrmData($data)); // * Country Is forced to france $crmCustomer->country = Country::france(); $crmCustomer->save(); // * Enregistrement du Hashcode /** @var \App\Models\Customer $customer */ $customer = new Customer($data); $customer->hashcode = $crmCustomer->hashcode; // * Customer will be logged in. $customer->last_connection = \now(); $customer->saveOrFail(); if ($customer->saveOrFail()) { // phpcs:ignore Generic.Files.LineLength.TooLong Session::flash('success', trans('Votre compte à bien été crée, vous devez valider votre adresse email, un email de confirmation vous à été envoyé.')); } return $customer; }); } catch (ApiErrorException $e) { if ($e->getApiError()->equals(ApiError::customerExists())) { throw ValidationException::withMessages([ 'error' => 'Un compte est déjà associé à cette adresse email.' ]); } if ($e->getApiError()->equals(ApiError::validationFailed())) { throw ValidationException::withMessages([ 'error' => $e->getMessage() ]); } report($e); Log::error(__CLASS__ . '::create reached end of possibilities.'); throw new \RuntimeException(__CLASS__ . '::create reached end of possibilities.'); } //end try } /** * Get the post register / login redirect path. * * @return string */ public function redirectPath() { return response()->redirectToRoute('account.dashboard')->getTargetUrl(); } /** * Get only data used in crm * * @param array $data * @return array */ private function getOnlyCrmData(array $data): array { return \array_intersect_key( $data, [ 'firstname' => '', 'lastname' => '', 'birth_date' => '', 'address' => '', 'postcode' => '', 'country' => '', 'city' => '', 'phone' => '', 'email' => '', 'password' => '', 'opt_in' => '', ] ); } }