From 9cd5d0c9b95dc1bfd91abc1160ae6e17af1482d2 Mon Sep 17 00:00:00 2001
From: Christian Kuhn <lolli@schwarzbu.ch>
Date: Wed, 10 Apr 2024 13:15:42 +0200
Subject: [PATCH] [TASK] Remove left over refindex _FILE handling
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

ReferenceIndex does not write rows with
'ref_table' set to '_FILE' anymore since #87428.
The patch removes some left over handling at
a couple of places.

Resolves: #103710
Related: #87428
Related: #102222
Releases: main
Change-Id: Iccb94a57b7fb551da48ba516b668fe970b9fb5f4
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/84001
Tested-by: Jochen Roth <rothjochen@gmail.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Jochen Roth <rothjochen@gmail.com>
Tested-by: core-ci <typo3@b13.com>
Tested-by: Stefan Bürk <stefan@buerk.tech>
Reviewed-by: Stefan Bürk <stefan@buerk.tech>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 .../Controller/EditDocumentController.php     |  2 +-
 .../Classes/Utility/BackendUtility.php        | 40 +++++--------------
 .../Private/Language/locallang_core.xlf       |  3 --
 .../ItemProviders/FileProvider.php            |  6 +--
 typo3/sysext/filelist/Classes/FileList.php    |  6 +--
 .../form/Classes/Service/DatabaseService.php  |  6 +--
 .../Classes/Dependency/ElementEntity.php      |  2 +-
 7 files changed, 17 insertions(+), 48 deletions(-)

diff --git a/typo3/sysext/backend/Classes/Controller/EditDocumentController.php b/typo3/sysext/backend/Classes/Controller/EditDocumentController.php
index ebe404f344f8..8bfe38453b2a 100644
--- a/typo3/sysext/backend/Classes/Controller/EditDocumentController.php
+++ b/typo3/sysext/backend/Classes/Controller/EditDocumentController.php
@@ -1538,7 +1538,7 @@ class EditDocumentController
             );
             $referenceCountMessage = BackendUtility::referenceCount(
                 $this->firstEl['table'],
-                (string)(int)$this->firstEl['uid'],
+                (int)$this->firstEl['uid'],
                 $this->getLanguageService()->sL(
                     'LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToRecord'
                 ),
diff --git a/typo3/sysext/backend/Classes/Utility/BackendUtility.php b/typo3/sysext/backend/Classes/Utility/BackendUtility.php
index f876a6c09d46..ad7ce1c940af 100644
--- a/typo3/sysext/backend/Classes/Utility/BackendUtility.php
+++ b/typo3/sysext/backend/Classes/Utility/BackendUtility.php
@@ -52,7 +52,6 @@ use TYPO3\CMS\Core\Utility\ArrayUtility;
 use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Core\Utility\MathUtility;
-use TYPO3\CMS\Core\Utility\PathUtility;
 use TYPO3\CMS\Core\Utility\StringUtility;
 use TYPO3\CMS\Core\Versioning\VersionState;
 
@@ -2521,46 +2520,29 @@ class BackendUtility
     /**
      * Counting references to a record/file
      *
-     * @param string $table Table name (or "_FILE" if its a file)
-     * @param string $ref Reference: If table, then int-uid, if _FILE, then file reference (relative to Environment::getPublicPath())
-     * @param string $msg Message with %s, eg. "There were %s records pointing to this file!
+     * @param string $table Table name
+     * @param int $ref Record uid
+     * @param string $msg Message with %s, e.g. "There were %s records pointing to this file!"
      * @param string|int|null $count Reference count
      * @return string|int Output string (or int count value if no msg string specified)
+     * @todo: The method should vanish altogether: The signature with $msg and $count and
+     *        string|int return value is odd, and the method contains hacks for sys_file.
      */
     public static function referenceCount($table, $ref, $msg = '', $count = null)
     {
-        if ($count === null) {
-            // Build base query
+        if ($count === null && MathUtility::canBeInterpretedAsInteger($ref)) {
+            // MathUtility::canBeInterpretedAsInteger($ref) and no method type hint for b/w compat.
             $queryBuilder = static::getQueryBuilderForTable('sys_refindex');
-            $queryBuilder
-                ->count('*')
-                ->from('sys_refindex')
+            $queryBuilder->count('*')->from('sys_refindex')
                 ->where(
-                    $queryBuilder->expr()->eq('ref_table', $queryBuilder->createNamedParameter($table))
-                );
-
-            // Look up the path:
-            if ($table === '_FILE') {
-                if (!str_starts_with($ref, Environment::getPublicPath())) {
-                    return '';
-                }
-
-                $ref = PathUtility::stripPathSitePrefix($ref);
-                $queryBuilder->andWhere(
-                    $queryBuilder->expr()->eq('ref_string', $queryBuilder->createNamedParameter($ref))
-                );
-            } else {
-                $queryBuilder->andWhere(
+                    $queryBuilder->expr()->eq('ref_table', $queryBuilder->createNamedParameter($table)),
                     $queryBuilder->expr()->eq('ref_uid', $queryBuilder->createNamedParameter($ref, Connection::PARAM_INT))
                 );
-                if ($table === 'sys_file') {
-                    $queryBuilder->andWhere($queryBuilder->expr()->neq('tablename', $queryBuilder->quote('sys_file_metadata')));
-                }
+            if ($table === 'sys_file') {
+                $queryBuilder->andWhere($queryBuilder->expr()->neq('tablename', $queryBuilder->quote('sys_file_metadata')));
             }
-
             $count = $queryBuilder->executeQuery()->fetchOne();
         }
-
         if ($count) {
             return $msg ? sprintf($msg, $count) : $count;
         }
diff --git a/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf b/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf
index 4b9ea4000ecd..81958733c383 100644
--- a/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf
+++ b/typo3/sysext/core/Resources/Private/Language/locallang_core.xlf
@@ -559,9 +559,6 @@ Do you want to continue WITHOUT saving?</source>
 			<trans-unit id="labels.referencesToRecord" resname="labels.referencesToRecord">
 				<source>There are %s reference(s) to this record!</source>
 			</trans-unit>
-			<trans-unit id="labels.referencesToFolder" resname="labels.referencesToFolder">
-				<source>There are %s reference(s) to this folder!</source>
-			</trans-unit>
 			<trans-unit id="labels.referencesToFile" resname="labels.referencesToFile">
 				<source>There are %s reference(s) to this file!</source>
 			</trans-unit>
diff --git a/typo3/sysext/filelist/Classes/ContextMenu/ItemProviders/FileProvider.php b/typo3/sysext/filelist/Classes/ContextMenu/ItemProviders/FileProvider.php
index f0e46fc35577..60c08288a770 100644
--- a/typo3/sysext/filelist/Classes/ContextMenu/ItemProviders/FileProvider.php
+++ b/typo3/sysext/filelist/Classes/ContextMenu/ItemProviders/FileProvider.php
@@ -409,10 +409,6 @@ class FileProvider extends AbstractProvider
                 $confirmMessage = sprintf(
                     $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:mess.delete'),
                     trim($recordInfo)
-                ) . BackendUtility::referenceCount(
-                    '_FILE',
-                    $this->record->getIdentifier(),
-                    LF . $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToFolder')
                 );
             } else {
                 if ($this->backendUser->shallDisplayDebugInformation()) {
@@ -423,7 +419,7 @@ class FileProvider extends AbstractProvider
                     trim($recordInfo)
                 ) . BackendUtility::referenceCount(
                     'sys_file',
-                    (string)$this->record->getUid(),
+                    (int)$this->record->getUid(),
                     LF . $this->languageService->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToFile')
                 );
             }
diff --git a/typo3/sysext/filelist/Classes/FileList.php b/typo3/sysext/filelist/Classes/FileList.php
index 28c479c18dd3..64ffde9abb5e 100644
--- a/typo3/sysext/filelist/Classes/FileList.php
+++ b/typo3/sysext/filelist/Classes/FileList.php
@@ -1118,18 +1118,16 @@ class FileList
         if (!$resourceView->canDelete()) {
             return null;
         }
-
         $recordInfo = $resourceView->getName();
-
+        $referenceCountText = '';
         if ($resourceView->resource instanceof Folder) {
             $identifier = $resourceView->getIdentifier();
-            $referenceCountText = BackendUtility::referenceCount('_FILE', $identifier, LF . $this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToFolder'));
             $deleteType = 'delete_folder';
             if ($this->getBackendUser()->shallDisplayDebugInformation()) {
                 $recordInfo .= ' [' . $identifier . ']';
             }
         } else {
-            $referenceCountText = BackendUtility::referenceCount('sys_file', (string)$resourceView->getUid(), LF . $this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToFile'));
+            $referenceCountText = BackendUtility::referenceCount('sys_file', (int)$resourceView->getUid(), LF . $this->getLanguageService()->sL('LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.referencesToFile'));
             $deleteType = 'delete_file';
             if ($this->getBackendUser()->shallDisplayDebugInformation()) {
                 $recordInfo .= ' [sys_file:' . $resourceView->getUid() . ']';
diff --git a/typo3/sysext/form/Classes/Service/DatabaseService.php b/typo3/sysext/form/Classes/Service/DatabaseService.php
index cd04337018f3..fefdff3ad348 100644
--- a/typo3/sysext/form/Classes/Service/DatabaseService.php
+++ b/typo3/sysext/form/Classes/Service/DatabaseService.php
@@ -35,7 +35,6 @@ class DatabaseService
      * Returns an array with all sys_refindex database rows which be
      * connected to a formDefinition identified by $persistenceIdentifier
      *
-     * @throws \InvalidArgumentException
      * @internal
      */
     public function getReferencesByPersistenceIdentifier(string $persistenceIdentifier): array
@@ -97,13 +96,10 @@ class DatabaseService
         return $items;
     }
 
-    /**
-     * @throws \InvalidArgumentException
-     */
     protected function getAllReferences(string $column): array
     {
         if ($column !== 'ref_string' && $column !== 'ref_uid') {
-            throw new \InvalidArgumentException('$column must not be "ref_string" or "ref_uid".', 1535406600);
+            throw new \InvalidArgumentException('$column must be "ref_string" or "ref_uid".', 1535406600);
         }
 
         $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_refindex');
diff --git a/typo3/sysext/workspaces/Classes/Dependency/ElementEntity.php b/typo3/sysext/workspaces/Classes/Dependency/ElementEntity.php
index d0fabc7e8758..3d64eebcae55 100644
--- a/typo3/sysext/workspaces/Classes/Dependency/ElementEntity.php
+++ b/typo3/sysext/workspaces/Classes/Dependency/ElementEntity.php
@@ -176,7 +176,7 @@ class ElementEntity
                 ->executeQuery();
 
             while ($row = $result->fetchAssociative()) {
-                if ($row['ref_table'] !== '_FILE' && $row['ref_table'] !== '_STRING') {
+                if ($row['ref_table'] !== '_STRING') {
                     $arguments = [
                         'table' => $row['ref_table'],
                         'id' => $row['ref_uid'],
-- 
GitLab