From e6f69cc023dd380a5e4d9fb18e08765f04ba16e8 Mon Sep 17 00:00:00 2001
From: Oliver Bartsch <bo@cedev.de>
Date: Fri, 23 Feb 2024 16:04:09 +0100
Subject: [PATCH] [BUGFIX] Always set `action` argument for action ViewHelpers
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

A couple of places (mostly paginations) are
using the action ViewHelpers without providing
the `action` argument. Those links will therefore
fall back to the default action, which might be
wrong e.g. in the backend user group listing.

To preserve the current action on paginating,
the corresponding action is now always set.

Resolves: #103189
Related: #101729
Releases: main, 12.4
Change-Id: I1db9a637a4b320f90aae3a93fe903c939384ea3a
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/83114
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Tested-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Stefan Bürk <stefan@buerk.tech>
Tested-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Stefan Bürk <stefan@buerk.tech>
Tested-by: core-ci <typo3@b13.com>
---
 .../Classes/Controller/BackendUserController.php     |  6 +++---
 .../Private/Partials/BackendUser/PaginatedList.html  |  2 +-
 .../Partials/BackendUserGroup/PaginatedList.html     |  2 +-
 .../Private/Partials/Filemount/PaginatedList.html    |  2 +-
 .../Resources/Private/Partials/SimplePagination.html | 12 ++++++------
 .../Partials/Backend/FormManager/Pagination.html     | 12 ++++++------
 .../Private/Templates/Backend/FormManager/Index.html |  2 +-
 7 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/typo3/sysext/beuser/Classes/Controller/BackendUserController.php b/typo3/sysext/beuser/Classes/Controller/BackendUserController.php
index e55015d4531b..1b4707db95cc 100644
--- a/typo3/sysext/beuser/Classes/Controller/BackendUserController.php
+++ b/typo3/sysext/beuser/Classes/Controller/BackendUserController.php
@@ -389,15 +389,15 @@ class BackendUserController extends ActionController
 
         $backendUser->pushModuleData($this->moduleData->getModuleIdentifier(), $this->moduleData->toArray());
 
-        $backendUsers = $this->backendUserGroupRepository->findByFilter($userGroupDto);
-        $paginator = new QueryResultPaginator($backendUsers, $currentPage, 50);
+        $backendUserGroups = $this->backendUserGroupRepository->findByFilter($userGroupDto);
+        $paginator = new QueryResultPaginator($backendUserGroups, $currentPage, 50);
         $pagination = new SimplePagination($paginator);
         $compareGroupUidList = array_keys((array)$this->moduleData->get('compareGroupUidList', []));
         $this->moduleTemplate->assignMultiple(
             [
                 'paginator' => $paginator,
                 'pagination' => $pagination,
-                'totalAmountOfBackendUserGroups' => $backendUsers->count(),
+                'totalAmountOfBackendUserGroups' => $backendUserGroups->count(),
                 'compareGroupUidList' => array_map(static function (int $value): int { // uid as key and force value to 1
                     return 1;
                 }, array_flip($compareGroupUidList)),
diff --git a/typo3/sysext/beuser/Resources/Private/Partials/BackendUser/PaginatedList.html b/typo3/sysext/beuser/Resources/Private/Partials/BackendUser/PaginatedList.html
index 65a29b14d47f..38c0743709f6 100644
--- a/typo3/sysext/beuser/Resources/Private/Partials/BackendUser/PaginatedList.html
+++ b/typo3/sysext/beuser/Resources/Private/Partials/BackendUser/PaginatedList.html
@@ -153,4 +153,4 @@
     </table>
 </div>
 
-<f:render partial="SimplePagination" arguments="{paginator:paginator, pagination:pagination}" />
+<f:render partial="SimplePagination" arguments="{paginator:paginator, pagination:pagination, actionName:'index'}" />
diff --git a/typo3/sysext/beuser/Resources/Private/Partials/BackendUserGroup/PaginatedList.html b/typo3/sysext/beuser/Resources/Private/Partials/BackendUserGroup/PaginatedList.html
index d537a6355f57..ab80d82f7036 100644
--- a/typo3/sysext/beuser/Resources/Private/Partials/BackendUserGroup/PaginatedList.html
+++ b/typo3/sysext/beuser/Resources/Private/Partials/BackendUserGroup/PaginatedList.html
@@ -120,6 +120,6 @@
     </table>
 </div>
 
-<f:render partial="SimplePagination" arguments="{paginator:paginator, pagination:pagination}" />
+<f:render partial="SimplePagination" arguments="{paginator:paginator, pagination:pagination, actionName:'groups'}" />
 
 </html>
diff --git a/typo3/sysext/beuser/Resources/Private/Partials/Filemount/PaginatedList.html b/typo3/sysext/beuser/Resources/Private/Partials/Filemount/PaginatedList.html
index 3a7d3154176c..94a2c9e55886 100644
--- a/typo3/sysext/beuser/Resources/Private/Partials/Filemount/PaginatedList.html
+++ b/typo3/sysext/beuser/Resources/Private/Partials/Filemount/PaginatedList.html
@@ -106,6 +106,6 @@
     </table>
 </div>
 
-<f:render partial="SimplePagination" arguments="{paginator:paginator, pagination:pagination}" />
+<f:render partial="SimplePagination" arguments="{paginator:paginator, pagination:pagination, actionName:'filemounts'}" />
 
 </html>
diff --git a/typo3/sysext/beuser/Resources/Private/Partials/SimplePagination.html b/typo3/sysext/beuser/Resources/Private/Partials/SimplePagination.html
index 8b211e55eb87..059e616cbe71 100644
--- a/typo3/sysext/beuser/Resources/Private/Partials/SimplePagination.html
+++ b/typo3/sysext/beuser/Resources/Private/Partials/SimplePagination.html
@@ -10,12 +10,12 @@
             <f:if condition="{pagination.previousPageNumber} && {pagination.previousPageNumber} >= {pagination.firstPageNumber}">
                 <f:then>
                     <li class="page-item">
-                        <a href="{f:uri.action(arguments:{currentPage: 1})}" title="{f:translate(key:'pagination.first')}" class="page-link">
+                        <a href="{f:uri.action(action:actionName, arguments:{currentPage: 1})}" title="{f:translate(key:'pagination.first')}" class="page-link">
                             <core:icon identifier="actions-view-paging-first" />
                         </a>
                     </li>
                     <li class="page-item">
-                        <a href="{f:uri.action(arguments:{currentPage: pagination.previousPageNumber})}" title="{f:translate(key:'pagination.previous')}" class="page-link">
+                        <a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.previousPageNumber})}" title="{f:translate(key:'pagination.previous')}" class="page-link">
                             <core:icon identifier="actions-view-paging-previous" />
                         </a>
                     </li>
@@ -44,7 +44,7 @@
                     <form style="display:inline;"
                         data-global-event="submit"
                         data-action-navigate="$form=~s/$value/"
-                        data-navigate-value="{f:uri.action(arguments:'{currentPage: \'$[value]\'}')}"
+                        data-navigate-value="{f:uri.action(action:actionName, arguments:'{currentPage: \'$[value]\'}')}"
                         data-value-selector="input[name='paginator-target-page']">
                         <input
                             min="{pagination.firstPageNumber}"
@@ -64,12 +64,12 @@
             <f:if condition="{pagination.nextPageNumber} && {pagination.nextPageNumber} <= {pagination.lastPageNumber}">
                 <f:then>
                     <li class="page-item">
-                        <a href="{f:uri.action(arguments:{currentPage: pagination.nextPageNumber})}" title="{f:translate(key:'pagination.next')}" class="page-link">
+                        <a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.nextPageNumber})}" title="{f:translate(key:'pagination.next')}" class="page-link">
                             <core:icon identifier="actions-view-paging-next" />
                         </a>
                     </li>
                     <li class="page-item">
-                        <a href="{f:uri.action(arguments:{currentPage: pagination.lastPageNumber})}" title="{f:translate(key:'pagination.last')}" class="page-link">
+                        <a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.lastPageNumber})}" title="{f:translate(key:'pagination.last')}" class="page-link">
                             <core:icon identifier="actions-view-paging-last" />
                         </a>
                     </li>
@@ -88,7 +88,7 @@
                 </f:else>
             </f:if>
             <li class="page-item">
-                <a href="{f:uri.action(arguments:{currentPage: paginator.currentPageNumber})}" title="{f:translate(key:'pagination.refresh')}" class="page-link">
+                <a href="{f:uri.action(action:actionName, arguments:{currentPage: paginator.currentPageNumber})}" title="{f:translate(key:'pagination.refresh')}" class="page-link">
                     <core:icon identifier="actions-refresh" />
                 </a>
             </li>
diff --git a/typo3/sysext/form/Resources/Private/Partials/Backend/FormManager/Pagination.html b/typo3/sysext/form/Resources/Private/Partials/Backend/FormManager/Pagination.html
index 62869c8ad373..d6c31551fec7 100644
--- a/typo3/sysext/form/Resources/Private/Partials/Backend/FormManager/Pagination.html
+++ b/typo3/sysext/form/Resources/Private/Partials/Backend/FormManager/Pagination.html
@@ -4,12 +4,12 @@
             <f:if condition="{pagination.previousPageNumber} && {pagination.previousPageNumber} >= {pagination.firstPageNumber}">
                 <f:then>
                     <li class="page-item">
-                        <f:link.action arguments="{page: 1, searchTerm: searchTerm}" title="{f:translate(key:'pagination.first')}" class="page-link">
+                        <f:link.action action="index" arguments="{page: 1, searchTerm: searchTerm}" title="{f:translate(key:'pagination.first')}" class="page-link">
                             <core:icon identifier="actions-view-paging-first" />
                         </f:link.action>
                     </li>
                     <li class="page-item">
-                        <f:link.action arguments="{page: pagination.previousPageNumber, searchTerm: searchTerm}" title="{f:translate(key:'pagination.previous')}" class="page-link">
+                        <f:link.action action="index" arguments="{page: pagination.previousPageNumber, searchTerm: searchTerm}" title="{f:translate(key:'pagination.previous')}" class="page-link">
                             <core:icon identifier="actions-view-paging-previous" />
                         </f:link.action>
                     </li>
@@ -38,7 +38,7 @@
                     <form style="display:inline;"
                         data-global-event="submit"
                         data-action-navigate="$form=~s/$value/"
-                        data-navigate-value="{f:uri.action(arguments:'{page: \'$[value]\', searchTerm: searchTerm}')}"
+                        data-navigate-value="{f:uri.action(action:'index', arguments:'{page: \'$[value]\', searchTerm: searchTerm}')}"
                         data-value-selector="input[name='paginator-target-page']">
                         <input
                             min="{pagination.firstPageNumber}"
@@ -56,12 +56,12 @@
             <f:if condition="{pagination.nextPageNumber} && {pagination.nextPageNumber} <= {pagination.lastPageNumber}">
                 <f:then>
                     <li class="page-item">
-                        <f:link.action arguments="{page: pagination.nextPageNumber, searchTerm: searchTerm}" title="{f:translate(key:'pagination.next')}" class="page-link">
+                        <f:link.action action="index" arguments="{page: pagination.nextPageNumber, searchTerm: searchTerm}" title="{f:translate(key:'pagination.next')}" class="page-link">
                             <core:icon identifier="actions-view-paging-next" />
                         </f:link.action>
                     </li>
                     <li class="page-item">
-                        <f:link.action arguments="{page: pagination.lastPageNumber, searchTerm: searchTerm}" title="{f:translate(key:'pagination.last')}" class="page-link">
+                        <f:link.action action="index" arguments="{page: pagination.lastPageNumber, searchTerm: searchTerm}" title="{f:translate(key:'pagination.last')}" class="page-link">
                             <core:icon identifier="actions-view-paging-last" />
                         </f:link.action>
                     </li>
@@ -80,7 +80,7 @@
                 </f:else>
             </f:if>
             <li class="page-item">
-                <f:link.action arguments="{page: paginator.currentPageNumber, searchTerm: searchTerm}" title="{f:translate(key:'pagination.refresh')}" class="page-link">
+                <f:link.action action="index" arguments="{page: paginator.currentPageNumber, searchTerm: searchTerm}" title="{f:translate(key:'pagination.refresh')}" class="page-link">
                     <core:icon identifier="actions-refresh" />
                 </f:link.action>
             </li>
diff --git a/typo3/sysext/form/Resources/Private/Templates/Backend/FormManager/Index.html b/typo3/sysext/form/Resources/Private/Templates/Backend/FormManager/Index.html
index 444abf0dd77b..8bd2fb496506 100644
--- a/typo3/sysext/form/Resources/Private/Templates/Backend/FormManager/Index.html
+++ b/typo3/sysext/form/Resources/Private/Templates/Backend/FormManager/Index.html
@@ -18,7 +18,7 @@
         <form style="display:inline;"
                 data-global-event="submit"
                 data-action-navigate="$form=~s/$value/"
-                data-navigate-value="{f:uri.action(arguments:'{searchTerm: \'$[value]\'}')}"
+                data-navigate-value="{f:uri.action(action:'index', arguments:'{searchTerm: \'$[value]\'}')}"
                 data-value-selector="input[name='searchTerm']"
         >
             <div class="row mb-3">
-- 
GitLab