App\Ninja\Repositories\AccountRepository::create PHP Method

create() public method

public create ( $firstName = '', $lastName = '', $email = '', $password = '' )
    public function create($firstName = '', $lastName = '', $email = '', $password = '')
    {
        $company = new Company();
        $company->utm_source = Input::get('utm_source');
        $company->utm_medium = Input::get('utm_medium');
        $company->utm_campaign = Input::get('utm_campaign');
        $company->utm_term = Input::get('utm_term');
        $company->utm_content = Input::get('utm_content');
        $company->save();
        $account = new Account();
        $account->ip = Request::getClientIp();
        $account->account_key = str_random(RANDOM_KEY_LENGTH);
        $account->company_id = $company->id;
        // Track referal code
        if ($referralCode = Session::get(SESSION_REFERRAL_CODE)) {
            if ($user = User::whereReferralCode($referralCode)->first()) {
                $account->referral_user_id = $user->id;
            }
        }
        if ($locale = Session::get(SESSION_LOCALE)) {
            if ($language = Language::whereLocale($locale)->first()) {
                $account->language_id = $language->id;
            }
        }
        $account->save();
        $user = new User();
        if (!$firstName && !$lastName && !$email && !$password) {
            $user->password = str_random(RANDOM_KEY_LENGTH);
            $user->username = str_random(RANDOM_KEY_LENGTH);
        } else {
            $user->first_name = $firstName;
            $user->last_name = $lastName;
            $user->email = $user->username = $email;
            if (!$password) {
                $password = str_random(RANDOM_KEY_LENGTH);
            }
            $user->password = bcrypt($password);
        }
        $user->confirmed = !Utils::isNinja();
        $user->registered = !Utils::isNinja() || $email;
        if (!$user->confirmed) {
            $user->confirmation_code = str_random(RANDOM_KEY_LENGTH);
        }
        $account->users()->save($user);
        return $account;
    }

Usage Example

 /**
  * @return \Illuminate\Http\RedirectResponse
  */
 public function getStarted()
 {
     $user = false;
     $guestKey = Input::get('guest_key');
     // local storage key to login until registered
     $prevUserId = Session::pull(PREV_USER_ID);
     // last user id used to link to new account
     if (Auth::check()) {
         return Redirect::to('invoices/create');
     }
     if (!Utils::isNinja() && (Account::count() > 0 && !$prevUserId)) {
         return Redirect::to('/login');
     }
     if ($guestKey && !$prevUserId) {
         $user = User::where('password', '=', $guestKey)->first();
         if ($user && $user->registered) {
             return Redirect::to('/');
         }
     }
     if (!$user) {
         $account = $this->accountRepo->create();
         $user = $account->users()->first();
         if ($prevUserId) {
             $users = $this->accountRepo->associateAccounts($user->id, $prevUserId);
             Session::put(SESSION_USER_ACCOUNTS, $users);
         }
     }
     Auth::login($user, true);
     event(new UserSignedUp());
     $redirectTo = Input::get('redirect_to') ?: 'invoices/create';
     return Redirect::to($redirectTo)->with('sign_up', Input::get('sign_up'));
 }