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 = self::prepareUsersData($record); self::syncUserAccounts($users); return $users; }
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; }