From 8c3115e364126b5dc601d0f1ca4b13c41989ef3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 30 Sep 2025 18:11:25 +0200 Subject: [PATCH] fix: remove page parameter from return url when filtering closes #869anjygz --- .../Common/ApplicationFilterController.php | 1 + .../Common/AssignmentFilterController.php | 1 + .../Common/DestinationFilterController.php | 1 + src/Controller/Traits/ReturnUrlTrait.php | 56 +++++++++++++++++++ 4 files changed, 59 insertions(+) diff --git a/src/Controller/Common/ApplicationFilterController.php b/src/Controller/Common/ApplicationFilterController.php index 69d62cb..ac16b08 100644 --- a/src/Controller/Common/ApplicationFilterController.php +++ b/src/Controller/Common/ApplicationFilterController.php @@ -43,6 +43,7 @@ class ApplicationFilterController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $this->filterHandler->handleRequest($form); $returnUrl = $this->getReturnUrl($request, 'app_admin_application_index'); + $returnUrl = $this->removeQueryParameters($returnUrl, ['page']); return new HxRedirectResponse($returnUrl); } diff --git a/src/Controller/Common/AssignmentFilterController.php b/src/Controller/Common/AssignmentFilterController.php index b3eba54..d3feb05 100644 --- a/src/Controller/Common/AssignmentFilterController.php +++ b/src/Controller/Common/AssignmentFilterController.php @@ -41,6 +41,7 @@ class AssignmentFilterController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $this->filterHandler->handleRequest($form); $returnUrl = $this->getReturnUrl($request, 'app_administrative_assignment_index'); + $returnUrl = $this->removeQueryParameters($returnUrl, ['page']); return new HxRedirectResponse($returnUrl); } diff --git a/src/Controller/Common/DestinationFilterController.php b/src/Controller/Common/DestinationFilterController.php index ae292a6..6d3d5fb 100644 --- a/src/Controller/Common/DestinationFilterController.php +++ b/src/Controller/Common/DestinationFilterController.php @@ -34,6 +34,7 @@ class DestinationFilterController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { $this->filterHandler->handleRequest($form); $returnUrl = $this->getReturnUrl($request, 'app_administrative_system_destination_index'); + $returnUrl = $this->removeQueryParameters($returnUrl, ['page']); return new HxRedirectResponse($returnUrl); } diff --git a/src/Controller/Traits/ReturnUrlTrait.php b/src/Controller/Traits/ReturnUrlTrait.php index abf7e36..85efaca 100644 --- a/src/Controller/Traits/ReturnUrlTrait.php +++ b/src/Controller/Traits/ReturnUrlTrait.php @@ -12,4 +12,60 @@ trait ReturnUrlTrait return rawurldecode($request->query->get('r', $defaultUrl)); } + + /** + * Remove specified query parameters from a URL. + * + * @param string $url The URL to process + * @param string[] $parametersKeys Array of query parameter keys to remove + * + * @return string The URL without the specified query parameters + */ + public function removeQueryParameters(string $url, array $parametersKeys): string + { + if ([] === $parametersKeys) { + return $url; + } + + $urlParts = parse_url($url); + + if (false === isset($urlParts['query'])) { + return $url; + } + + parse_str($urlParts['query'], $queryParams); + + foreach ($parametersKeys as $key) { + unset($queryParams[$key]); + } + + $urlParts['query'] = http_build_query($queryParams); + + if ('' === $urlParts['query']) { + unset($urlParts['query']); + } + + // Rebuild URL + $result = ''; + if (isset($urlParts['scheme'])) { + $result .= $urlParts['scheme'].'://'; + } + if (isset($urlParts['host'])) { + $result .= $urlParts['host']; + } + if (isset($urlParts['port'])) { + $result .= ':'.$urlParts['port']; + } + if (isset($urlParts['path'])) { + $result .= $urlParts['path']; + } + if (isset($urlParts['query'])) { + $result .= '?'.$urlParts['query']; + } + if (isset($urlParts['fragment'])) { + $result .= '#'.$urlParts['fragment']; + } + + return $result; + } }