diff options
author | John Molakvoæ <skjnldsv@protonmail.com> | 2023-03-24 09:41:40 +0100 |
---|---|---|
committer | John Molakvoæ <skjnldsv@protonmail.com> | 2023-04-06 14:49:31 +0200 |
commit | 3c3050c76f86c7a8cc2f217f9305cb1051e0eca0 (patch) | |
tree | d9656a549b1db4c7f3d37549713a6c96da616464 /apps/files/lib | |
parent | 0b4da6117fff4d999cb492503a8b6fc04eb75f9d (diff) | |
download | nextcloud-server-3c3050c76f86c7a8cc2f217f9305cb1051e0eca0.tar.gz nextcloud-server-3c3050c76f86c7a8cc2f217f9305cb1051e0eca0.zip |
feat(files): implement sorting per view
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
Diffstat (limited to 'apps/files/lib')
-rw-r--r-- | apps/files/lib/Controller/ApiController.php | 29 | ||||
-rw-r--r-- | apps/files/lib/Controller/ViewController.php | 10 |
2 files changed, 23 insertions, 16 deletions
diff --git a/apps/files/lib/Controller/ApiController.php b/apps/files/lib/Controller/ApiController.php index c7da9b2c118..808f0d555d0 100644 --- a/apps/files/lib/Controller/ApiController.php +++ b/apps/files/lib/Controller/ApiController.php @@ -281,20 +281,29 @@ class ApiController extends Controller { * * @param string $mode * @param string $direction - * @return Response + * @return JSONResponse * @throws \OCP\PreConditionNotMetException */ - public function updateFileSorting($mode, $direction) { - $allowedMode = ['basename', 'size', 'mtime']; + public function updateFileSorting($mode, string $direction = 'asc', string $view = 'files'): JSONResponse { $allowedDirection = ['asc', 'desc']; - if (!in_array($mode, $allowedMode) || !in_array($direction, $allowedDirection)) { - $response = new Response(); - $response->setStatus(Http::STATUS_UNPROCESSABLE_ENTITY); - return $response; + if (!in_array($direction, $allowedDirection)) { + return new JSONResponse(['message' => 'Invalid direction parameter'], Http::STATUS_UNPROCESSABLE_ENTITY); } - $this->config->setUserValue($this->userSession->getUser()->getUID(), 'files', 'file_sorting', $mode); - $this->config->setUserValue($this->userSession->getUser()->getUID(), 'files', 'file_sorting_direction', $direction); - return new Response(); + + $userId = $this->userSession->getUser()->getUID(); + + $sortingJson = $this->config->getUserValue($userId, 'files', 'files_sorting_configs', '{}'); + $sortingConfig = json_decode($sortingJson, true) ?: []; + $sortingConfig[$view] = [ + 'mode' => $mode, + 'direction' => $direction, + ]; + + $this->config->setUserValue($userId, 'files', 'files_sorting_configs', json_encode($sortingConfig)); + return new JSONResponse([ + 'message' => 'ok', + 'data' => $sortingConfig, + ]); } /** diff --git a/apps/files/lib/Controller/ViewController.php b/apps/files/lib/Controller/ViewController.php index 6047ad81808..cb41dfb300b 100644 --- a/apps/files/lib/Controller/ViewController.php +++ b/apps/files/lib/Controller/ViewController.php @@ -250,10 +250,8 @@ class ViewController extends Controller { $this->initialState->provideInitialState('config', $this->userConfig->getConfigs()); // File sorting user config - $defaultFileSorting = $this->config->getUserValue($userId, 'files', 'file_sorting', 'basename'); - $defaultFileSortingDirection = $this->config->getUserValue($userId, 'files', 'file_sorting_direction', 'asc'); - $this->initialState->provideInitialState('defaultFileSorting', $defaultFileSorting === 'name' ? 'basename' : $defaultFileSorting); - $this->initialState->provideInitialState('defaultFileSortingDirection', $defaultFileSortingDirection === 'desc' ? 'desc' : 'asc'); + $filesSortingConfig = json_decode($this->config->getUserValue($userId, 'files', 'files_sorting_configs', '{}'), true); + $this->initialState->provideInitialState('filesSortingConfig', $filesSortingConfig); // render the container content for every navigation item foreach ($navItems as $item) { @@ -298,8 +296,8 @@ class ViewController extends Controller { $params['ownerDisplayName'] = $storageInfo['ownerDisplayName'] ?? ''; $params['isPublic'] = false; $params['allowShareWithLink'] = $this->shareManager->shareApiAllowLinks() ? 'yes' : 'no'; - $params['defaultFileSorting'] = $this->config->getUserValue($userId, 'files', 'file_sorting', 'name'); - $params['defaultFileSortingDirection'] = $this->config->getUserValue($userId, 'files', 'file_sorting_direction', 'asc'); + $params['defaultFileSorting'] = $filesSortingConfig['files']['mode'] ?? 'basename'; + $params['defaultFileSortingDirection'] = $filesSortingConfig['files']['direction'] ?? 'asc'; $params['showgridview'] = $this->config->getUserValue($userId, 'files', 'show_grid', false); $showHidden = (bool) $this->config->getUserValue($userId, 'files', 'show_hidden', false); $params['showHiddenFiles'] = $showHidden ? 1 : 0; |