userService = $userService; } /** * Change the ownership of an organization to a new user. * The previous owner will be demoted to an admin. */ public function changeOwnership(Organization $organization, Member $newOwner): void { $organization->update([ 'user_id' => $newOwner->user_id, ]); if ($newOwner->organization_id !== $organization->getKey()) { throw new InvalidArgumentException('Member is not part of the organization'); } $newOwner->role = Role::Owner->value; $newOwner->save(); $oldOwners = Member::query() ->whereBelongsTo($organization, 'organization') ->where('role', '=', Role::Owner->value) ->where('id', '!=', $newOwner->getKey()) ->get(); foreach ($oldOwners as $oldOwner) { $oldOwner->role = Role::Admin->value; $oldOwner->save(); } } public function makeMemberToPlaceholder(Member $member): void { $user = $member->user; $placeholderUser = $user->replicate(); $placeholderUser->is_placeholder = true; $placeholderUser->save(); $member->user()->associate($placeholderUser); $member->role = Role::Placeholder->value; $member->save(); $this->userService->assignOrganizationEntitiesToDifferentMember($member->organization, $user, $placeholderUser, $member); $this->userService->makeSureUserHasAtLeastOneOrganization($user); } }