]> BookStack Code Mirror - bookstack/blobdiff - app/Auth/UserRepo.php
Show tags of all search results
[bookstack] / app / Auth / UserRepo.php
index 6b7de325998a10e8dbd4a530a475d91d0c1f3458..29a0ebc14aceae23c3e33fcfece504b4897d14b8 100644 (file)
@@ -1,6 +1,7 @@
 <?php namespace BookStack\Auth;
 
 use Activity;
+use BookStack\Entities\EntityProvider;
 use BookStack\Entities\Models\Book;
 use BookStack\Entities\Models\Bookshelf;
 use BookStack\Entities\Models\Chapter;
@@ -58,14 +59,10 @@ class UserRepo
     public function getAllUsersPaginatedAndSorted(int $count, array $sortData): LengthAwarePaginator
     {
         $sort = $sortData['sort'];
-        if ($sort === 'latest_activity') {
-            $sort = \BookStack\Actions\Activity::query()->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]);
+        }
     }
 
     /**