feat(admin): preserve list return target for back and close actions

This commit is contained in:
2026-03-11 23:32:11 +01:00
parent bc9506866f
commit 277168f7e8
24 changed files with 525 additions and 96 deletions

View File

@@ -16,6 +16,9 @@ use MintyPHP\Support\Guard;
$session = app(SessionStoreInterface::class)->all();
Guard::requireLogin();
$request = requestInput();
$returnTarget = requestResolveReturnTarget();
$closeTarget = requestResolveReturnTarget('admin/users');
$createTarget = requestPathWithReturnTarget('admin/users/create', $returnTarget);
$authorizationService = app(\MintyPHP\Service\Access\AuthorizationService::class);
$decision = $authorizationService->authorize(UserAuthorizationPolicy::ABILITY_ADMIN_USERS_CREATE, [
'actor_user_id' => (int) ($session['user']['id'] ?? 0),
@@ -93,8 +96,8 @@ $form = [
];
if ($request->isMethod('POST') && !Session::checkCsrfToken()) {
Flash::error(t('Form expired, please try again'), 'admin/users/create', 'csrf_expired');
Router::redirect('admin/users/create');
Flash::error(t('Form expired, please try again'), $createTarget, 'csrf_expired');
Router::redirect($createTarget);
return;
}
@@ -172,7 +175,7 @@ if ($request->hasBody('email')) {
if ($syncErrors) {
Flash::error(
implode(' | ', $syncErrors),
"admin/users/edit/{$createdUuid}",
requestPathWithReturnTarget("admin/users/edit/{$createdUuid}", $returnTarget),
'user_custom_field_sync_failed'
);
}
@@ -181,17 +184,17 @@ if ($request->hasBody('email')) {
}
$action = (string) ($post['action'] ?? 'create');
if ($action === 'create_close') {
Flash::success('User created', 'admin/users', 'user_created');
Router::redirect('admin/users');
Flash::success('User created', $closeTarget, 'user_created');
Router::redirect($closeTarget);
} else {
$uuid = $createdUuid;
if ($uuid !== '') {
$target = "admin/users/edit/{$uuid}";
$target = requestPathWithReturnTarget("admin/users/edit/{$uuid}", $returnTarget);
Flash::success('User created', $target, 'user_created');
Router::redirect($target);
} else {
Flash::success('User created', 'admin/users', 'user_created');
Router::redirect('admin/users');
Flash::success('User created', $closeTarget, 'user_created');
Router::redirect($closeTarget);
}
}
}

View File

@@ -17,6 +17,8 @@ $session = $sessionStore->all();
Guard::requireLogin();
$request = requestInput();
$returnTarget = requestResolveReturnTarget();
$closeTarget = requestResolveReturnTarget('admin/users');
$userAccountService = app(\MintyPHP\Service\User\UserAccountService::class);
$userAssignmentService = app(\MintyPHP\Service\User\UserAssignmentService::class);
$userTenantRepository = app(\MintyPHP\Repository\Tenant\UserTenantRepository::class);
@@ -38,10 +40,11 @@ $passwordHints = $userPasswordPolicyService->hints();
$currentUserId = (int) ($session['user']['id'] ?? 0);
$uuid = trim((string) ($id ?? ''));
$editTarget = requestPathWithReturnTarget("admin/users/edit/{$uuid}", $returnTarget);
$user = $uuid !== '' ? $userAccountService->findByUuid($uuid) : null;
if (!$user) {
Flash::error('User not found', 'admin/users', 'user_not_found');
Router::redirect('admin/users');
Flash::error('User not found', $closeTarget, 'user_not_found');
Router::redirect($closeTarget);
}
$userId = (int) ($user['id'] ?? 0);
@@ -175,8 +178,8 @@ $canManageApiTokens = $canManageApiTokens && $canViewSecurityArtifacts;
$showApiTokens = $canViewSecurityArtifacts && (!empty($apiTokens) || $canManageApiTokens);
if ($request->isMethod('POST') && !Session::checkCsrfToken()) {
Flash::error(t('Form expired, please try again'), "admin/users/edit/{$uuid}", 'csrf_expired');
Router::redirect("admin/users/edit/{$uuid}");
Flash::error(t('Form expired, please try again'), $editTarget, 'csrf_expired');
Router::redirect($editTarget);
return;
}
@@ -297,11 +300,11 @@ if ($request->hasBody('email')) {
if (!$errorBag->hasAny()) {
$action = (string) ($post['action'] ?? 'save');
if ($action === 'save_close') {
Flash::success('User updated', 'admin/users', 'user_updated');
Router::redirect('admin/users');
Flash::success('User updated', $closeTarget, 'user_updated');
Router::redirect($closeTarget);
} else {
Flash::success('User updated', "admin/users/edit/{$uuid}", 'user_updated');
Router::redirect("admin/users/edit/{$uuid}");
Flash::success('User updated', $editTarget, 'user_updated');
Router::redirect($editTarget);
}
}
}

View File

@@ -1,6 +1,7 @@
<?php
use MintyPHP\Router;
use MintyPHP\Session;
use MintyPHP\Http\Request;
$toolbarFilterSchema = is_array($toolbarFilterSchema ?? null) ? $toolbarFilterSchema : [];
$searchToolbarFilterSchema = is_array($searchToolbarFilterSchema ?? null) ? $searchToolbarFilterSchema : [];
@@ -64,7 +65,7 @@ ob_start();
</details>
<?php if ($canCreateUser): ?>
<a role="button" class="primary" href="admin/users/create">
<a role="button" class="primary" href="<?php e(requestPathWithReturnTarget('admin/users/create', Request::pathWithQuery())); ?>">
<i class="bi bi-plus"></i> <?php e(t('Create user')); ?>
</a>
<?php endif; ?>