From 9626d3943e74f72305b7b40caaee563fe7269093 Mon Sep 17 00:00:00 2001 From: Johannes Kasberger <johannes.kasberger@reelworx.at> Date: Mon, 7 Aug 2017 18:16:31 +0200 Subject: [PATCH] [BUGFIX] Update FAL metadata if file is added with REPLACE method Make sure the meta data is updated whenever a file is added to a storage with DuplicationBehavior::REPLACE. This is important as otherwise the internally stored file size is wrong! Resolves: #78009 Releases: master, 8.7, 7.6 Change-Id: I93b0700afc62268f8c7a61eea7183f86a87a075e Reviewed-on: https://review.typo3.org/53653 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Georg Ringer <georg.ringer@gmail.com> Tested-by: Georg Ringer <georg.ringer@gmail.com> Reviewed-by: Andreas Fernandez <typo3@scripting-base.de> Reviewed-by: Markus Klein <markus.klein@typo3.org> Tested-by: Markus Klein <markus.klein@typo3.org> --- .../core/Classes/Resource/ResourceStorage.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/typo3/sysext/core/Classes/Resource/ResourceStorage.php b/typo3/sysext/core/Classes/Resource/ResourceStorage.php index 2a76d3ff5834..d626c39f1ca0 100644 --- a/typo3/sysext/core/Classes/Resource/ResourceStorage.php +++ b/typo3/sysext/core/Classes/Resource/ResourceStorage.php @@ -19,7 +19,6 @@ use TYPO3\CMS\Core\Registry; use TYPO3\CMS\Core\Resource\Exception\ExistingTargetFileNameException; use TYPO3\CMS\Core\Resource\Exception\InvalidTargetFolderException; use TYPO3\CMS\Core\Resource\Index\FileIndexRepository; -use TYPO3\CMS\Core\Resource\Index\Indexer; use TYPO3\CMS\Core\Resource\OnlineMedia\Helpers\OnlineMediaHelperRegistry; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\PathUtility; @@ -1167,18 +1166,24 @@ class ResourceStorage implements ResourceStorageInterface $targetFileName = $this->emitPreFileAddSignal($targetFileName, $targetFolder, $localFilePath); $this->assureFileAddPermissions($targetFolder, $targetFileName); + + $replaceExisting = false; if ($conflictMode->equals(DuplicationBehavior::CANCEL) && $this->driver->fileExistsInFolder($targetFileName, $targetFolder->getIdentifier())) { throw new Exception\ExistingTargetFileNameException('File "' . $targetFileName . '" already exists in folder ' . $targetFolder->getIdentifier(), 1322121068); } elseif ($conflictMode->equals(DuplicationBehavior::RENAME)) { $targetFileName = $this->getUniqueName($targetFolder, $targetFileName); + } elseif ($conflictMode->equals(DuplicationBehavior::REPLACE) && $this->driver->fileExistsInFolder($targetFileName, $targetFolder->getIdentifier())) { + $replaceExisting = true; } $fileIdentifier = $this->driver->addFile($localFilePath, $targetFolder->getIdentifier(), $targetFileName, $removeOriginal); $file = $this->getResourceFactoryInstance()->getFileObjectByStorageAndIdentifier($this->getUid(), $fileIdentifier); + if ($replaceExisting && $file instanceof File) { + $this->getIndexer()->updateIndexEntry($file); + } if ($this->autoExtractMetadataEnabled()) { - $indexer = GeneralUtility::makeInstance(Indexer::class, $this); - $indexer->extractMetaData($file); + $this->getIndexer()->extractMetaData($file); } $this->emitPostFileAddSignal($file, $targetFolder); @@ -1902,8 +1907,7 @@ class ResourceStorage implements ResourceStorageInterface $this->getIndexer()->updateIndexEntry($file); } if ($this->autoExtractMetadataEnabled()) { - $indexer = GeneralUtility::makeInstance(Indexer::class, $this); - $indexer->extractMetaData($file); + $this->getIndexer()->extractMetaData($file); } $this->emitPostFileReplaceSignal($file, $localFilePath); -- GitLab