public function create(Request $request)
 {
     if (!$request->ajax()) {
         return redirect('/login');
     }
     $createUserRequest = new CreateUserRequest();
     $validator = Validator::make($request->all(), $createUserRequest->rules(), $createUserRequest->messages());
     // Validate Form
     if ($validator->fails()) {
         return response()->json(['success' => false, 'errors' => $validator->errors()->toArray()], 400);
     }
     // Check Captcha still Valid or Used!
     if ($this->captchaCheck() == false) {
         $errors = ['captchaError' => trans('auth.captchaError')];
         return response()->json(['success' => false, 'errors' => $errors], 400);
     }
     // Check Sponsor Cookie , Provide One if None
     if (\Cookie::get('sponsor') == false) {
         try {
             $link = Link::with('user', 'user.profile')->where('link', $request->sponsor_link)->first();
             $cookie = $link->toArray();
             $errors = ['CookieError' => trans('auth.cookieError'), 'cookieNew' => trans('auth.cookieNew'), 'resubmitForm' => trans('auth.resubmitForm')];
             return response()->json(['success' => false, 'errors' => $errors], 400)->withCookie(\Cookie::forever('sponsor', $cookie));
         } catch (\Exception $e) {
             $errors = ['Warning' => 'Warning :Forbiden Link Forgery!'];
             return response()->json(['success' => false, 'errors' => $errors], 400);
         }
     }
     // This Will Prevent Unnecessary Creation of Account if Something Failed!
     DB::beginTransaction();
     $user = User::create($request->all());
     $profile = $user->profile()->create($request->all());
     $link = new Link();
     $link->link = Input::get('username');
     $user->links()->save($link);
     // IF Error Occured Throw an Exception then Rollback!
     $role = $user->assign('customer');
     $ability1 = \Bouncer::allow($user)->to('add-order', Order::class);
     $ability2 = \Bouncer::allow($user)->to('edit-order', Order::class);
     $ability3 = \Bouncer::allow($user)->to('delete-order', Order::class);
     $ability4 = \Bouncer::allow($user)->to('view-itemOrder', ItemOrder::class);
     try {
         if (!$user && !$profile && !$link && !$role && $ability1 && $ability2 && $ability3 && $ability4) {
             throw new \Exception('Account Creation Failed ,Account is Rollback');
         }
     } catch (\Exception $e) {
         DB::rollback();
         $errors = ['ExceptionError' => $e->getMessage()];
         return response()->json(['success' => false, 'errors' => $errors], 400);
         // Failed Creation
     }
     // Account Successfully Created
     DB::commit();
     // Send Email To The New User
     $this->mail->registered($user);
     $this->mail->sendToSponsor($user);
     $cookie = \Cookie::forget('sponsor');
     // Return With a Response to Delete Cookie
     Auth::LoginUsingId($user->id);
     // return redirect()->route('profile');
     return response()->json(['success' => true, 'url' => 'shipping-address'], 201)->withCookie($cookie);
 }
 public function create(Request $request)
 {
     $createUserRequest = new CreateUserRequest();
     $validator = Validator::make($request->all(), $createUserRequest->rules(), $createUserRequest->messages());
     // Validate Form
     if ($validator->fails()) {
         return response()->json(['success' => false, 'errors' => $validator->errors()->toArray()], 400);
     }
     // Check Captcha still Valid or Used!
     if ($this->captchaCheck() == false) {
         $errors = ['captchaError' => trans('auth.captchaError')];
         return response()->json(['success' => false, 'errors' => $errors], 400);
     }
     // Check Sponsor Cookie , Provide One if None
     if (\Cookie::get('sponsor') == false) {
         $link = Link::with('user', 'user.profile')->where('link', $request->sponsor_link)->first();
         $cookie = $link->toArray();
         $errors = ['CookieError' => trans('auth.cookieError'), 'cookieNew' => trans('auth.cookieAttached')];
         return response()->json(['success' => false, 'errors' => $errors], 400)->withCookie(\Cookie::forever('sponsor', $cookie));
     }
     // This Will Prevent Unnecessary Creation of Account if Something Failed!
     DB::beginTransaction();
     $user = User::create($request->all());
     $profile = $user->profile()->create($request->all());
     $link = new Link();
     $link->link = Input::get('username');
     $user->links()->save($link);
     // IF Error Occured Throw an Exception then Rollback!
     try {
         if (!$user && !$profile && !$link) {
             throw new \Exception('Account Creation Failed ,Account is Rollback');
         }
     } catch (\Exception $e) {
         DB::rollback();
         $errors = ['ExceptionError' => $e->getMessage(), 'RefreshPage' => trans('auth.refreshPage')];
         return response()->json(['success' => false, 'errors' => $errors], 400);
         // Failed Creation
     }
     // Account Successfully Created
     DB::commit();
     // Send Email To The New User
     $this->mail->registered($user);
     $data = ['event' => 'UserSignedUp', 'data' => ['display_name' => $profile->display_name, 'created_at' => $user->created_at]];
     // BroadCast Realtime in NewsBar
     \PHPRedis::publish('rfn-chanel', json_encode($data));
     // Forget the Set Cookie
     $cookie = \Cookie::forget('sponsor');
     // Return With a Response to Delete Cookie
     return response()->json(['success' => true], 201)->withCookie($cookie);
 }