From 9da44d792028cd966ee68d8dea7c333e58bacb17 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

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/+/83117
Tested-by: core-ci <typo3@b13.com>
Tested-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
---
 .../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 ++++++------
 6 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/typo3/sysext/beuser/Classes/Controller/BackendUserController.php b/typo3/sysext/beuser/Classes/Controller/BackendUserController.php
index d4522d7bbf96..4e4167684954 100644
--- a/typo3/sysext/beuser/Classes/Controller/BackendUserController.php
+++ b/typo3/sysext/beuser/Classes/Controller/BackendUserController.php
@@ -395,15 +395,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 ($value) { // 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 02a848bc2721..31d14267d431 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 a7b3808cf7a3..989cb7d055f7 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}" title="{f:translate(key:'pagination.first')}" class="page-link">
+                        <f:link.action action="index" arguments="{page: 1}" 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}" title="{f:translate(key:'pagination.previous')}" class="page-link">
+                        <f:link.action action="index" arguments="{page: pagination.previousPageNumber}" 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]\'}')}"
+                        data-navigate-value="{f:uri.action(action:'index', arguments:'{page: \'$[value]\'}')}"
                         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}" title="{f:translate(key:'pagination.next')}" class="page-link">
+                        <f:link.action action="index" arguments="{page: pagination.nextPageNumber}" 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}" title="{f:translate(key:'pagination.last')}" class="page-link">
+                        <f:link.action action="index" arguments="{page: pagination.lastPageNumber}" 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}" title="{f:translate(key:'pagination.refresh')}" class="page-link">
+                <f:link.action action="index" arguments="{page: paginator.currentPageNumber}" title="{f:translate(key:'pagination.refresh')}" class="page-link">
                     <core:icon identifier="actions-refresh" />
                 </f:link.action>
             </li>
-- 
GitLab