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;
 }