From df81e5c358e620efd6917e9fa2be6f372226b8b8 Mon Sep 17 00:00:00 2001
From: Andreas Fernandez <a.fernandez@scripting-base.de>
Date: Fri, 20 Jan 2023 14:16:45 +0100
Subject: [PATCH] [TASK] Replace localization methods in `PageLayoutController`

The class `PageLayoutController` has some custom methods to fetch data
of localized pages:

* `getLocalizedPageRecord()`
* `getLocalizedPageTitle()`

The same data can be retrieved using the standardized method
`PageRepository->getPageOverlay()`, which replaces the aforementioned
methods.

Resolves: #99613
Releases: main, 11.5
Change-Id: I06a374411b34211ed45d57f30d142ead7c7e6fba
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/77620
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Tested-by: Oliver Bartsch <bo@cedev.de>
Tested-by: core-ci <typo3@b13.com>
---
 .../Controller/PageLayoutController.php       | 55 ++-----------------
 1 file changed, 4 insertions(+), 51 deletions(-)

diff --git a/typo3/sysext/backend/Classes/Controller/PageLayoutController.php b/typo3/sysext/backend/Classes/Controller/PageLayoutController.php
index cc539391cfe5..77d02bdab9a4 100644
--- a/typo3/sysext/backend/Classes/Controller/PageLayoutController.php
+++ b/typo3/sysext/backend/Classes/Controller/PageLayoutController.php
@@ -539,33 +539,8 @@ class PageLayoutController
      */
     protected function getLocalizedPageTitle(): string
     {
-        if ($this->current_sys_language > 0) {
-            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
-                ->getQueryBuilderForTable('pages');
-            $queryBuilder->getRestrictions()
-                ->removeAll()
-                ->add(GeneralUtility::makeInstance(DeletedRestriction::class))
-                ->add(GeneralUtility::makeInstance(WorkspaceRestriction::class, (int)$this->getBackendUser()->workspace));
-            $localizedPage = $queryBuilder
-                ->select('*')
-                ->from('pages')
-                ->where(
-                    $queryBuilder->expr()->eq(
-                        $GLOBALS['TCA']['pages']['ctrl']['transOrigPointerField'],
-                        $queryBuilder->createNamedParameter($this->id, Connection::PARAM_INT)
-                    ),
-                    $queryBuilder->expr()->eq(
-                        $GLOBALS['TCA']['pages']['ctrl']['languageField'],
-                        $queryBuilder->createNamedParameter($this->current_sys_language, Connection::PARAM_INT)
-                    )
-                )
-                ->setMaxResults(1)
-                ->executeQuery()
-                ->fetchAssociative();
-            BackendUtility::workspaceOL('pages', $localizedPage);
-            return $localizedPage['title'];
-        }
-        return $this->pageinfo['title'];
+        $pageLocalizationRecord = $this->pageRepository->getPageOverlay($this->id, $this->current_sys_language);
+        return $this->current_sys_language <= 0 ? $this->pageinfo['title'] : ($pageLocalizationRecord['title'] ?? '');
     }
 
     /**
@@ -853,35 +828,13 @@ class PageLayoutController
             && $this->current_sys_language > 0
             && $this->isPageEditable($this->current_sys_language)
         ) {
-            $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
-            $queryBuilder->getRestrictions()
-                ->removeAll()
-                ->add(GeneralUtility::makeInstance(DeletedRestriction::class))
-                ->add(GeneralUtility::makeInstance(WorkspaceRestriction::class, $this->getBackendUser()->workspace));
-            $overlayRecord = $queryBuilder
-                ->select('uid')
-                ->from('pages')
-                ->where(
-                    $queryBuilder->expr()->eq(
-                        $GLOBALS['TCA']['pages']['ctrl']['transOrigPointerField'],
-                        $queryBuilder->createNamedParameter($this->id, Connection::PARAM_INT)
-                    ),
-                    $queryBuilder->expr()->eq(
-                        $GLOBALS['TCA']['pages']['ctrl']['languageField'],
-                        $queryBuilder->createNamedParameter($this->current_sys_language, Connection::PARAM_INT)
-                    )
-                )
-                ->setMaxResults(1)
-                ->executeQuery()
-                ->fetchAssociative();
-            BackendUtility::workspaceOL('pages', $overlayRecord, $this->getBackendUser()->workspace);
-            // Edit button
+            $overlayRecord = $this->pageRepository->getPageOverlay($this->id, $this->current_sys_language);
             $url = (string)$this->uriBuilder->buildUriFromRoute(
                 'record_edit',
                 [
                     'edit' => [
                         'pages' => [
-                            $overlayRecord['uid'] => 'edit',
+                            $overlayRecord['_PAGES_OVERLAY_UID'] => 'edit',
                         ],
                     ],
                     'returnUrl' => $request->getAttribute('normalizedParams')->getRequestUri(),
-- 
GitLab