public function associateAccounts($userId1, $userId2)
{
$record = self::findUserAccounts($userId1, $userId2);
if ($record) {
foreach ([$userId1, $userId2] as $userId) {
if (!$record->hasUserId($userId)) {
$record->setUserId($userId);
}
}
} else {
$record = new UserAccount();
$record->user_id1 = $userId1;
$record->user_id2 = $userId2;
}
$record->save();
$users = $this->getUserAccounts($record);
// Pick the primary user
foreach ($users as $user) {
if (!$user->public_id) {
$useAsPrimary = false;
if (empty($primaryUser)) {
$useAsPrimary = true;
}
$planDetails = $user->account->getPlanDetails(false, false);
$planLevel = 0;
if ($planDetails) {
$planLevel = 1;
if ($planDetails['plan'] == PLAN_ENTERPRISE) {
$planLevel = 2;
}
if (!$useAsPrimary && ($planLevel > $primaryUserPlanLevel || $planLevel == $primaryUserPlanLevel && $planDetails['expires'] > $primaryUserPlanExpires)) {
$useAsPrimary = true;
}
}
if ($useAsPrimary) {
$primaryUser = $user;
$primaryUserPlanLevel = $planLevel;
if ($planDetails) {
$primaryUserPlanExpires = $planDetails['expires'];
}
}
}
}
// Merge other companies into the primary user's company
if (!empty($primaryUser)) {
foreach ($users as $user) {
if ($user == $primaryUser || $user->public_id) {
continue;
}
if ($user->account->company_id != $primaryUser->account->company_id) {
foreach ($user->account->company->accounts as $account) {
$account->company_id = $primaryUser->account->company_id;
$account->save();
}
$user->account->company->forceDelete();
}
}
}
return $users;
}
/** * @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')); }