/** * This middleware checks that a guest user is indeed checking out * * @param \Illuminate\Http\Request $request * @param \Closure $next * * @return mixed */ public function handle($request, Closure $next) { // only non-authenticated users should be allowed to checkout as guests if (is_null($request->user())) { // For a successful guest checkout to be initialized, we pass in an allow=1 param into the url // This is because later, the checkout cookie will be used to verify that the user is a guest, and for now // it does not exist until the user fills in the guest user details form if ($request->get('allow') === "1" & empty($this->guest->getCookieData())) { return $next($request); } // by the time this statement is executed, the cookie exists, so we do the normal check if ($this->guest->isAGuest()) { return $next($request); } return redirect()->guest(route('checkout.auth')); } // if the user is authenticated, then we skip step1 of checkout, which is filling in guest data return redirect()->route('u.checkout.step2'); }
/** * This will allow users to optionally create an account before making an order * * @param GuestCreateAccount $guestCreateAccount * @param CreateAccount $user * * @param UserRepository $registerUser * @return mixed */ public function createAccount(GuestCreateAccount $guestCreateAccount, CreateAccount $user, UserRepository $registerUser) { // check the email $email = $this->guest->getGuestDetails()->email; $result = $registerUser->getFirstBy('email', '=', $email); if (!is_null($result)) { flash()->warning('Your email address is already in use. Please change it'); return redirect()->back(); } return $user->createAccount($guestCreateAccount, $registerUser)->handleRedirect($guestCreateAccount); }