X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/00308ad4ab9302293afd0a65f815feeaca06b626..refs/pull/2522/head:/app/Auth/UserRepo.php diff --git a/app/Auth/UserRepo.php b/app/Auth/UserRepo.php index 6b7de3259..29a0ebc14 100644 --- a/app/Auth/UserRepo.php +++ b/app/Auth/UserRepo.php @@ -1,6 +1,7 @@ select('created_at') - ->whereColumn('activities.user_id', 'users.id') - ->latest() - ->take(1); - } - $query = User::query()->with(['roles', 'avatar', 'latestActivity']) + $query = User::query()->select(['*']) + ->withLastActivityAt() + ->with(['roles', 'avatar']) ->orderBy($sort, $sortData['order']); if ($sortData['search']) { @@ -169,7 +166,7 @@ class UserRepo * Remove the given user from storage, Delete all related content. * @throws Exception */ - public function destroy(User $user) + public function destroy(User $user, ?int $newOwnerId = null) { $user->socialAccounts()->delete(); $user->apiTokens()->delete(); @@ -183,6 +180,25 @@ class UserRepo foreach ($profileImages as $image) { Images::destroy($image); } + + if (!empty($newOwnerId)) { + $newOwner = User::query()->find($newOwnerId); + if (!is_null($newOwner)) { + $this->migrateOwnership($user, $newOwner); + } + } + } + + /** + * Migrate ownership of items in the system from one user to another. + */ + protected function migrateOwnership(User $fromUser, User $toUser) + { + $entities = (new EntityProvider)->all(); + foreach ($entities as $instance) { + $instance->newQuery()->where('owned_by', '=', $fromUser->id) + ->update(['owned_by' => $toUser->id]); + } } /**