diff --git a/src/ApiKernel.php b/src/ApiKernel.php index 5b13e8b..ff32baa 100644 --- a/src/ApiKernel.php +++ b/src/ApiKernel.php @@ -1652,6 +1652,8 @@ class ApiKernel $user = $this->requireAuth(); $customerId = (int)($user['customer_id'] ?? 0); $settings = $customerId ? $this->ensureSettingsTokens($customerId, $this->getCustomerSettings($customerId)) : []; + $this->ensureAuthUserListSortColumn(); + $settings['list_sort'] = $this->resolveUserListSort($user, $customerId); $this->respond([ 'ok' => true, 'user' => $user, @@ -1759,11 +1761,8 @@ class ApiKernel private function handleAccountSettingsUpdate(): void { $user = $this->requireAuth(); - $this->ensureRole($user, ['owner', 'admin']); $customerId = (int)($user['customer_id'] ?? 0); - if ($customerId <= 0) $this->fail('Customer context missing', null, 500); - $settings = $this->getCustomerSettings($customerId); $hasBridgeUrl = array_key_exists('bridge_url', $this->in); $hasBridgeToken = array_key_exists('bridge_token', $this->in); $hasSenderToken = array_key_exists('sender_token', $this->in); @@ -1771,41 +1770,54 @@ class ApiKernel $hasEditorDefault = array_key_exists('editor_default', $this->in); $hasListSort = array_key_exists('list_sort', $this->in); $hasBridgeTables = array_key_exists('bridge_tables', $this->in); + $rotateBridge = !empty($this->in['rotate_bridge_token']); + $rotateSender = !empty($this->in['rotate_sender_token']); + $rotateExternal = !empty($this->in['rotate_external_token']); + $onlyListSort = $hasListSort && !$hasBridgeUrl && !$hasBridgeToken && !$hasSenderToken && !$hasExternalToken + && !$hasEditorDefault && !$hasBridgeTables && !$rotateBridge && !$rotateSender && !$rotateExternal; + if (!$onlyListSort) { + $this->ensureRole($user, ['owner', 'admin']); + if ($customerId <= 0) $this->fail('Customer context missing', null, 500); + } + + $settings = $customerId ? $this->getCustomerSettings($customerId) : []; $bridgeUrl = $hasBridgeUrl ? trim((string)($this->in['bridge_url'] ?? '')) : (string)($settings['bridge_url'] ?? ''); $bridgeToken = $hasBridgeToken ? trim((string)($this->in['bridge_token'] ?? '')) : (string)($settings['bridge_token'] ?? ''); $senderToken = $hasSenderToken ? trim((string)($this->in['sender_token'] ?? '')) : (string)($settings['sender_token'] ?? ''); $externalToken = $hasExternalToken ? trim((string)($this->in['external_api_token'] ?? '')) : (string)($settings['external_api_token'] ?? ''); $editorDefault = $hasEditorDefault ? strtolower(trim((string)($this->in['editor_default'] ?? ''))) : strtolower((string)($settings['editor_default'] ?? '')); $listSort = $hasListSort ? strtolower(trim((string)($this->in['list_sort'] ?? ''))) : ''; - $rotateBridge = !empty($this->in['rotate_bridge_token']); - $rotateSender = !empty($this->in['rotate_sender_token']); - $rotateExternal = !empty($this->in['rotate_external_token']); $bridgeTables = $hasBridgeTables ? $this->normalizeBridgeTables($this->in['bridge_tables'] ?? []) : ($settings['bridge_tables'] ?? []); if ($bridgeUrl && !filter_var($bridgeUrl, FILTER_VALIDATE_URL)) { $this->fail('Ungültige Bridge-URL', null, 422); } - if ($rotateBridge || $bridgeToken === '') $bridgeToken = $this->generateToken(); - if ($rotateSender || $senderToken === '') $senderToken = $this->generateToken(); - if ($rotateExternal || $externalToken === '') $externalToken = $this->generateToken(); - - if ($editorDefault !== '' && !in_array($editorDefault, ['grapesjs', 'craftjs'], true)) { - $this->fail('Ungültiger Editor-Typ', null, 422); - } if ($listSort !== '' && !in_array($listSort, ['created_asc', 'name_asc', 'name_desc', 'updated_desc'], true)) { $this->fail('Ungültige Sortierung', null, 422); } - $settings = $this->saveCustomerSettings($customerId, [ - 'bridge_url' => $bridgeUrl, - 'bridge_token' => $bridgeToken, - 'sender_token' => $senderToken, - 'external_api_token' => $externalToken, - 'editor_default' => $editorDefault ?: null, - 'bridge_tables' => $bridgeTables, - ]); + if (!$onlyListSort) { + if ($rotateBridge || $bridgeToken === '') $bridgeToken = $this->generateToken(); + if ($rotateSender || $senderToken === '') $senderToken = $this->generateToken(); + if ($rotateExternal || $externalToken === '') $externalToken = $this->generateToken(); + + if ($editorDefault !== '' && !in_array($editorDefault, ['grapesjs', 'craftjs'], true)) { + $this->fail('Ungültiger Editor-Typ', null, 422); + } + + $settings = $this->saveCustomerSettings($customerId, [ + 'bridge_url' => $bridgeUrl, + 'bridge_token' => $bridgeToken, + 'sender_token' => $senderToken, + 'external_api_token' => $externalToken, + 'editor_default' => $editorDefault ?: null, + 'bridge_tables' => $bridgeTables, + ]); + } else { + $settings = $customerId ? $this->ensureSettingsTokens($customerId, $settings) : $settings; + } if ($hasListSort) { $this->ensureAuthUserListSortColumn(); $this->updateUserListSort($user, $customerId, $listSort ?: null);