]> BookStack Code Mirror - bookstack/blobdiff - app/Http/Controllers/UserPreferencesController.php
Fix timestamp in API docs example response
[bookstack] / app / Http / Controllers / UserPreferencesController.php
index ca77dcd0b49c44cb6a99d61e33eaedb2f719ca3c..560dd16321589bc1611bf9e5ef52579d194a4caf 100644 (file)
@@ -3,6 +3,7 @@
 namespace BookStack\Http\Controllers;
 
 use BookStack\Auth\UserRepo;
+use BookStack\Settings\UserShortcutMap;
 use Illuminate\Http\Request;
 
 class UserPreferencesController extends Controller
@@ -15,70 +16,76 @@ class UserPreferencesController extends Controller
     }
 
     /**
-     * Update the user's preferred book-list display setting.
+     * Show the user-specific interface shortcuts.
      */
-    public function switchBooksView(Request $request, int $id)
+    public function showShortcuts()
     {
-        return $this->switchViewType($id, $request, 'books');
-    }
+        $shortcuts = UserShortcutMap::fromUserPreferences();
+        $enabled = setting()->getForCurrentUser('ui-shortcuts-enabled', false);
 
-    /**
-     * Update the user's preferred shelf-list display setting.
-     */
-    public function switchShelvesView(Request $request, int $id)
-    {
-        return $this->switchViewType($id, $request, 'bookshelves');
+        return view('users.preferences.shortcuts', [
+            'shortcuts' => $shortcuts,
+            'enabled' => $enabled,
+        ]);
     }
 
     /**
-     * Update the user's preferred shelf-view book list display setting.
+     * Update the user-specific interface shortcuts.
      */
-    public function switchShelfView(Request $request, int $id)
+    public function updateShortcuts(Request $request)
     {
-        return $this->switchViewType($id, $request, 'bookshelf');
+        $enabled = $request->get('enabled') === 'true';
+        $providedShortcuts = $request->get('shortcut', []);
+        $shortcuts = new UserShortcutMap($providedShortcuts);
+
+        setting()->putForCurrentUser('ui-shortcuts', $shortcuts->toJson());
+        setting()->putForCurrentUser('ui-shortcuts-enabled', $enabled);
+
+        $this->showSuccessNotification(trans('preferences.shortcuts_update_success'));
+
+        return redirect('/preferences/shortcuts');
     }
 
     /**
-     * For a type of list, switch with stored view type for a user.
+     * Update the preferred view format for a list view of the given type.
      */
-    protected function switchViewType(int $userId, Request $request, string $listName)
+    public function changeView(Request $request, string $type)
     {
-        $this->checkPermissionOrCurrentUser('users-manage', $userId);
+        $valueViewTypes = ['books', 'bookshelves', 'bookshelf'];
+        if (!in_array($type, $valueViewTypes)) {
+            return redirect()->back(500);
+        }
 
-        $viewType = $request->get('view_type');
-        if (!in_array($viewType, ['grid', 'list'])) {
-            $viewType = 'list';
+        $view = $request->get('view');
+        if (!in_array($view, ['grid', 'list'])) {
+            $view = 'list';
         }
 
-        $user = $this->userRepo->getById($userId);
-        $key = $listName . '_view_type';
-        setting()->putUser($user, $key, $viewType);
+        $key = $type . '_view_type';
+        setting()->putForCurrentUser($key, $view);
 
-        return redirect()->back(302, [], "/settings/users/$userId");
+        return redirect()->back(302, [], "/");
     }
 
     /**
      * Change the stored sort type for a particular view.
      */
-    public function changeSort(Request $request, string $id, string $type)
+    public function changeSort(Request $request, string $type)
     {
-        $validSortTypes = ['books', 'bookshelves', 'shelf_books', 'users', 'roles', 'webhooks', 'tags'];
+        $validSortTypes = ['books', 'bookshelves', 'shelf_books', 'users', 'roles', 'webhooks', 'tags', 'page_revisions'];
         if (!in_array($type, $validSortTypes)) {
             return redirect()->back(500);
         }
 
-        $this->checkPermissionOrCurrentUser('users-manage', $id);
-
         $sort = substr($request->get('sort') ?: 'name', 0, 50);
         $order = $request->get('order') === 'desc' ? 'desc' : 'asc';
 
-        $user = $this->userRepo->getById($id);
         $sortKey = $type . '_sort';
         $orderKey = $type . '_sort_order';
-        setting()->putUser($user, $sortKey, $sort);
-        setting()->putUser($user, $orderKey, $order);
+        setting()->putForCurrentUser($sortKey, $sort);
+        setting()->putForCurrentUser($orderKey, $order);
 
-        return redirect()->back(302, [], "/settings/users/{$id}");
+        return redirect()->back(302, [], "/");
     }
 
     /**
@@ -87,7 +94,7 @@ class UserPreferencesController extends Controller
     public function toggleDarkMode()
     {
         $enabled = setting()->getForCurrentUser('dark-mode-enabled', false);
-        setting()->putUser(user(), 'dark-mode-enabled', $enabled ? 'false' : 'true');
+        setting()->putForCurrentUser('dark-mode-enabled', $enabled ? 'false' : 'true');
 
         return redirect()->back();
     }
@@ -95,22 +102,22 @@ class UserPreferencesController extends Controller
     /**
      * Update the stored section expansion preference for the given user.
      */
-    public function updateExpansionPreference(Request $request, string $id, string $key)
+    public function changeExpansion(Request $request, string $type)
     {
-        $this->checkPermissionOrCurrentUser('users-manage', $id);
-        $keyWhitelist = ['home-details'];
-        if (!in_array($key, $keyWhitelist)) {
+        $typeWhitelist = ['home-details'];
+        if (!in_array($type, $typeWhitelist)) {
             return response('Invalid key', 500);
         }
 
         $newState = $request->get('expand', 'false');
-
-        $user = $this->userRepo->getById($id);
-        setting()->putUser($user, 'section_expansion#' . $key, $newState);
+        setting()->putForCurrentUser('section_expansion#' . $type, $newState);
 
         return response('', 204);
     }
 
+    /**
+     * Update the favorite status for a code language.
+     */
     public function updateCodeLanguageFavourite(Request $request)
     {
         $validated = $this->validate($request, [
@@ -129,6 +136,7 @@ class UserPreferencesController extends Controller
             array_splice($currentFavorites, $index, 1);
         }
 
-        setting()->putUser(user(), 'code-language-favourites', implode(',', $currentFavorites));
+        setting()->putForCurrentUser('code-language-favourites', implode(',', $currentFavorites));
+        return response('', 204);
     }
 }