[TASK] Deprecate methods in PageRepository 85/57685/8
authorWouter Wolters <typo3@wouterwolters.nl>
Wed, 25 Jul 2018 19:10:14 +0000 (21:10 +0200)
committerWouter Wolters <typo3@wouterwolters.nl>
Sun, 5 Aug 2018 10:16:35 +0000 (12:16 +0200)
Resolves: #85699
Releases: master
Change-Id: Ifd987469261b4b97c0f71bdaa20546f68eb21a37
Reviewed-on: https://review.typo3.org/57685
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Joerg Kummer <typo3@enobe.de>
Tested-by: Joerg Kummer <typo3@enobe.de>
Reviewed-by: Łukasz Uznański <l.uznanski@macopedia.pl>
Tested-by: Łukasz Uznański <l.uznanski@macopedia.pl>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Tested-by: Wouter Wolters <typo3@wouterwolters.nl>
typo3/sysext/core/Documentation/Changelog/master/Deprecation-85699-DeprecateMethodsInPageRepository.rst [new file with mode: 0644]
typo3/sysext/frontend/Classes/Page/PageRepository.php
typo3/sysext/frontend/Classes/Resource/FileCollector.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php

diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85699-DeprecateMethodsInPageRepository.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85699-DeprecateMethodsInPageRepository.rst
new file mode 100644 (file)
index 0000000..c53db11
--- /dev/null
@@ -0,0 +1,37 @@
+.. include:: ../../Includes.txt
+
+=========================================================
+Deprecation: #85699 - Deprecate methods in PageRepository
+=========================================================
+
+See :issue:`85699`
+
+Description
+===========
+
+The methods :php:`getMovePlaceholder` and :php:`movePlhOL()` in the class :php:`PageRepository`
+have been marked as internal.
+
+The methods :php:`getRecordsByField` and :php:`getFileReferences()` in the class :php:`PageRepository`
+PageRepository have been marked as deprecated and will be removed in TYPO3 v10. Both methods are not in use anymore by the TYPO3 core.
+
+
+Impact
+======
+
+Calling one of the mentioned methods will trigger a deprecation warning.
+
+
+Affected Installations
+======================
+
+Third party code which accesses the methods.
+
+
+Migration
+=========
+
+No direct migration available.
+If you need one of the mentioned methods you can copy them over to your extension.
+
+.. index:: Frontend, FullyScanned
index e527401..0f28865 100644 (file)
@@ -16,6 +16,7 @@ namespace TYPO3\CMS\Frontend\Page;
 
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerAwareTrait;
+use TYPO3\CMS\Core\Compatibility\PublicMethodDeprecationTrait;
 use TYPO3\CMS\Core\Compatibility\PublicPropertyDeprecationTrait;
 use TYPO3\CMS\Core\Context\Context;
 use TYPO3\CMS\Core\Context\Exception\AspectNotFoundException;
@@ -47,6 +48,7 @@ class PageRepository implements LoggerAwareInterface
 {
     use LoggerAwareTrait;
     use PublicPropertyDeprecationTrait;
+    use PublicMethodDeprecationTrait;
 
     /**
      * List of all deprecated public properties
@@ -62,6 +64,15 @@ class PageRepository implements LoggerAwareInterface
     ];
 
     /**
+     * List of all deprecated public methods
+     * @var array
+     */
+    protected $deprecatedPublicMethods = [
+        'movePlhOL' => 'Using movePlhOL is deprecated and will not be possible anymore in TYPO3 v10.',
+        'getMovePlaceholder' => 'Using getMovePlaceholder is deprecated and will not be possible anymore in TYPO3 v10.'
+    ];
+
+    /**
      * This is not the final clauses. There will normally be conditions for the
      * hidden, starttime and endtime fields as well. You MUST initialize the object
      * by the init() function
@@ -1387,9 +1398,11 @@ class PageRepository implements LoggerAwareInterface
      * @param string $orderBy Optional ORDER BY field(s). If none, supply blank string.
      * @param string $limit Optional LIMIT value ([begin,]max). If none, supply blank string.
      * @return mixed Returns array (the record) if found, otherwise nothing (void)
+     * @deprecated since TYPO3 v9.4, will be removed in TYPO3 v10
      */
     public function getRecordsByField($theTable, $theField, $theValue, $whereClause = '', $groupBy = '', $orderBy = '', $limit = '')
     {
+        trigger_error('The method `TYPO3\CMS\Frontend\Page::getRecordsByField()` has been deprecated and should not be used any longer, this method will be removed in TYPO3 v10.0', E_USER_DEPRECATED);
         if (is_array($GLOBALS['TCA'][$theTable])) {
             $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($theTable);
             $queryBuilder->getRestrictions()
@@ -1778,7 +1791,7 @@ class PageRepository implements LoggerAwareInterface
      * @return bool TRUE if overlay is made.
      * @see BackendUtility::movePlhOl()
      */
-    public function movePlhOL($table, &$row)
+    protected function movePlhOL($table, &$row)
     {
         if (!empty($GLOBALS['TCA'][$table]['ctrl']['versioningWS'])
             && (int)VersionState::cast($row['t3ver_state'])->equals(VersionState::MOVE_PLACEHOLDER)
@@ -1838,7 +1851,7 @@ class PageRepository implements LoggerAwareInterface
      * @return array If found, the record, otherwise nothing.
      * @see BackendUtility::getMovePlaceholder()
      */
-    public function getMovePlaceholder($table, $uid, $fields = '*')
+    protected function getMovePlaceholder($table, $uid, $fields = '*')
     {
         $workspace = (int)$this->versioningWorkspaceId;
         if (!empty($GLOBALS['TCA'][$table]['ctrl']['versioningWS']) && $workspace !== 0) {
@@ -1990,9 +2003,11 @@ class PageRepository implements LoggerAwareInterface
      * @param string $fieldName Name of the field
      * @param array $element The parent element referencing to files
      * @return array
+     * @deprecated since TYPO3 v9.4, will be removed in TYPO3 v10
      */
     public function getFileReferences($tableName, $fieldName, array $element)
     {
+        trigger_error('The method `TYPO3\CMS\Frontend\Page::getFileReferences()` has been deprecated and should not be used any longer, this method will be removed in TYPO3 v10.0', E_USER_DEPRECATED);
         /** @var $fileRepository FileRepository */
         $fileRepository = GeneralUtility::makeInstance(FileRepository::class);
         $currentId = !empty($element['uid']) ? $element['uid'] : 0;
index 2e9dce9..18014ca 100644 (file)
@@ -18,6 +18,7 @@ use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerAwareTrait;
 use TYPO3\CMS\Core\LinkHandling\LinkService;
 use TYPO3\CMS\Core\Resource\Exception;
+use TYPO3\CMS\Core\Resource\Exception\FileDoesNotExistException;
 use TYPO3\CMS\Core\Resource\FileCollectionRepository;
 use TYPO3\CMS\Core\Resource\FileInterface;
 use TYPO3\CMS\Core\Resource\FileRepository;
@@ -97,7 +98,7 @@ class FileCollector implements \Countable, LoggerAwareInterface
     public function addFilesFromRelation($relationTable, $relationField, array $referenceRecord)
     {
         if (is_object($GLOBALS['TSFE']) && is_object($GLOBALS['TSFE']->sys_page)) {
-            $fileReferences = $GLOBALS['TSFE']->sys_page->getFileReferences($relationTable, $relationField, $referenceRecord);
+            $fileReferences = $this->getFileReferences($relationTable, $relationField, $referenceRecord);
         } else {
             $fileReferences = $this->getFileRepository()->findByRelation($relationTable, $relationField, $referenceRecord['uid']);
         }
@@ -278,6 +279,58 @@ class FileCollector implements \Countable, LoggerAwareInterface
     }
 
     /**
+     * Gets file references for a given record field.
+     *
+     * @param string $tableName Name of the table
+     * @param string $fieldName Name of the field
+     * @param array $element The parent element referencing to files
+     * @return array
+     */
+    protected function getFileReferences($tableName, $fieldName, array $element): array
+    {
+        /** @var $fileRepository FileRepository */
+        $fileRepository = GeneralUtility::makeInstance(FileRepository::class);
+        $currentId = !empty($element['uid']) ? $element['uid'] : 0;
+
+        // Fetch the references of the default element
+        try {
+            $references = $fileRepository->findByRelation($tableName, $fieldName, $currentId);
+        } catch (FileDoesNotExistException $e) {
+            /**
+             * We just catch the exception here
+             * Reasoning: There is nothing an editor or even admin could do
+             */
+            return [];
+        } catch (\InvalidArgumentException $e) {
+            /**
+             * The storage does not exist anymore
+             * Log the exception message for admins as they maybe can restore the storage
+             */
+            $logMessage = $e->getMessage() . ' (table: "' . $tableName . '", fieldName: "' . $fieldName . '", currentId: ' . $currentId . ')';
+            $this->logger->error($logMessage, ['exception' => $e]);
+            return [];
+        }
+
+        $localizedId = null;
+        if (isset($element['_LOCALIZED_UID'])) {
+            $localizedId = $element['_LOCALIZED_UID'];
+        } elseif (isset($element['_PAGES_OVERLAY_UID'])) {
+            $localizedId = $element['_PAGES_OVERLAY_UID'];
+        }
+
+        $isTableLocalizable = (
+            !empty($GLOBALS['TCA'][$tableName]['ctrl']['languageField'])
+            && !empty($GLOBALS['TCA'][$tableName]['ctrl']['transOrigPointerField'])
+        );
+        if ($isTableLocalizable && $localizedId !== null) {
+            $localizedReferences = $fileRepository->findByRelation($tableName, $fieldName, $localizedId);
+            $references = $localizedReferences;
+        }
+
+        return $references;
+    }
+
+    /**
      * @return ResourceFactory
      */
     protected function getResourceFactory()
index d911323..4402c54 100644 (file)
@@ -2506,6 +2506,13 @@ return [
         'maximumNumberOfArguments' => 0,
         'restFiles' => [
             'Deprecation-84584-AdminPanelViewIsAdminModuleEnabledAndExt_makeToolbarDeprecated.rst',
+        ]
+    ],
+    'TYPO3\CMS\Frontend\Page\PageRepository->getRecordsByField' => [
+        'numberOfMandatoryArguments' => 3,
+        'maximumNumberOfArguments' => 7,
+        'restFiles' => [
+            'Deprecation-85699-DeprecateMethodsInPageRepository.rst',
         ],
     ],
     'TYPO3\CMS\Backend\Template\ModuleTemplate->loadJavascriptLib' => [
@@ -2529,4 +2536,25 @@ return [
             'Deprecation-85735-DeprecateMethodAndPropertyInDocumentTemplate.rst',
         ],
     ],
+    'TYPO3\CMS\Frontend\Page\PageRepository->getFileReferences' => [
+        'numberOfMandatoryArguments' => 3,
+        'maximumNumberOfArguments' => 3,
+        'restFiles' => [
+            'Deprecation-85699-DeprecateMethodsInPageRepository.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\Page\PageRepository->movePlhOL' => [
+        'numberOfMandatoryArguments' => 2,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85699-DeprecateMethodsInPageRepository.rst',
+        ],
+    ],
+    'TYPO3\CMS\Frontend\Page\PageRepository->getMovePlaceholder' => [
+        'numberOfMandatoryArguments' => 2,
+        'maximumNumberOfArguments' => 3,
+        'restFiles' => [
+            'Deprecation-85699-DeprecateMethodsInPageRepository.rst',
+        ],
+    ]
 ];