[TASK] Deprecate PageRepository->getFirstWebPage() 29/58029/4
authorBenni Mack <benni@typo3.org>
Fri, 24 Aug 2018 16:18:42 +0000 (18:18 +0200)
committerWouter Wolters <typo3@wouterwolters.nl>
Sat, 25 Aug 2018 12:42:36 +0000 (14:42 +0200)
The method PageRepository->getFirstWebPage() is only used when
no "?id" parameter is given, and no rootpage was resolved. As this is the only
use-case, a more generic "getMenu" method can be used, which does the
same except for not "limiting" the query to one result, so there is a minimal
memory penalty when doing so, however due to Pseudo-Site functionality
this drawback is only in use for rare cases.

Resolves: #85971
Releases: master
Change-Id: I42fec4251963a0ab2baa038defde39cf0eac4bbf
Reviewed-on: https://review.typo3.org/58029
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Tested-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/core/Documentation/Changelog/master/Deprecation-85971-DeprecatePageRepository-getFirstWebPage.rst [new file with mode: 0644]
typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php
typo3/sysext/frontend/Classes/Page/PageRepository.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php

diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85971-DeprecatePageRepository-getFirstWebPage.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85971-DeprecatePageRepository-getFirstWebPage.rst
new file mode 100644 (file)
index 0000000..5723b6d
--- /dev/null
@@ -0,0 +1,34 @@
+.. include:: ../../Includes.txt
+
+=================================================================
+Deprecation: #85971 - Deprecate PageRepository->getFirstWebPage()
+=================================================================
+
+See :issue:`85971`
+
+Description
+===========
+
+The method php:`PageRepository->getFirstWebPage()` is only used when no "?id" parameter is given, and no rootpage was resolved.
+As this is the only use-case, a more generic "getMenu" method can be used, which does the same except for not "limiting" the query to one result, so there is a minimal memory penalty when doing so, however due to Pseudo-Site functionality
+this drawback is only in use for rare cases.
+
+
+Impact
+======
+
+Calling the method directly will trigger a deprecation warning.
+
+
+Affected Installations
+======================
+
+Any TYPO3 installation with extensions directly calling this method.
+
+
+Migration
+=========
+
+Use php:`PageRepository->getMenu()` instead.
+
+.. index:: Frontend, FullyScanned, ext:frontend
\ No newline at end of file
index e1cbdcf..740ef25 100644 (file)
@@ -1337,8 +1337,9 @@ class TypoScriptFrontendController implements LoggerAwareInterface
                 $this->id = $this->domainStartPage;
             } else {
                 // Find the first 'visible' page in that domain
-                $theFirstPage = $this->sys_page->getFirstWebPage($this->id);
-                if ($theFirstPage) {
+                $rootLevelPages = $this->sys_page->getMenu([0], 'uid', 'sorting', '', false);
+                if (!empty($rootLevelPages)) {
+                    $theFirstPage = reset($rootLevelPages);
                     $this->id = $theFirstPage['uid'];
                 } else {
                     $message = 'No pages are found on the rootlevel!';
index 81de618..63726b2 100644 (file)
@@ -396,9 +396,11 @@ class PageRepository implements LoggerAwareInterface
      * @param int $uid The page id for which to fetch first subpages (PID)
      * @return mixed If found: The page record (with overlaid localized fields, if any). If NOT found: blank value (not array!)
      * @see \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::fetch_the_id()
+     * @deprecated since TYPO3 v9, will be removed in TYPO3 v10.0. Use getMenu() to fetch all subpages of a page.
      */
     public function getFirstWebPage($uid)
     {
+        trigger_error('PageRepository->getFirstWebPage() will be removed in TYPO3 v10.0. Use "getMenu()" instead.', E_USER_DEPRECATED);
         $output = '';
         $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('pages');
         $queryBuilder->getRestrictions()->removeAll();
index f67192e..7eeea6b 100644 (file)
@@ -3019,4 +3019,11 @@ return [
             'Deprecation-85978-DeprecateGraphicalFunctions-initMethod.rst'
         ],
     ],
+    'TYPO3\CMS\Frontend\Page\PageRepository->getFirstWebPage' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 1,
+        'restFiles' => [
+            'Deprecation-85971-DeprecatePageRepository-getFirstWebPage.rst'
+        ],
+    ],
 ];