From d4b2d2158aab71ed691e16085d1fa0a52d8290a2 Mon Sep 17 00:00:00 2001 From: Steffen Ritter <info@rs-websystems.de> Date: Tue, 18 Feb 2014 14:18:08 +0100 Subject: [PATCH] [BUGFIX] Indexer does not update the FileObjects If the Indexer updates metadata during runtimer (after a file object) has been created, the file object itself is not updated. This leads to possible errors with image rendering, if files are to be shown which have not been indexed before. Releases: 6.2 Resolves: #53772 Change-Id: I70be5ebefe1e00e903694a576847fa8fba167461 Reviewed-on: https://review.typo3.org/27690 Reviewed-by: Markus Klein Tested-by: Markus Klein Reviewed-by: Wouter Wolters Tested-by: Wouter Wolters --- typo3/sysext/core/Classes/Resource/File.php | 16 ++++++++++++++++ .../core/Classes/Resource/Index/Indexer.php | 2 ++ 2 files changed, 18 insertions(+) diff --git a/typo3/sysext/core/Classes/Resource/File.php b/typo3/sysext/core/Classes/Resource/File.php index 6e4c78332877..114b0d7217cf 100644 --- a/typo3/sysext/core/Classes/Resource/File.php +++ b/typo3/sysext/core/Classes/Resource/File.php @@ -250,6 +250,22 @@ class File extends AbstractFile { } } + /** + * Updates MetaData properties + * + * @internal Do not use outside the FileAbstraction Layer classes + * + * @param array $properties + * @return void + */ + public function _updateMetaDataProperties(array $properties) { + if ($this->metaDataProperties !== NULL) { + $this->metaDataProperties = array_merge($this->metaDataProperties, $properties); + } else { + $this->metaDataProperties = $properties; + } + } + /** * Returns the names of all properties that have been updated in this record * diff --git a/typo3/sysext/core/Classes/Resource/Index/Indexer.php b/typo3/sysext/core/Classes/Resource/Index/Indexer.php index a0d133d2e9d7..898879fee658 100644 --- a/typo3/sysext/core/Classes/Resource/Index/Indexer.php +++ b/typo3/sysext/core/Classes/Resource/Index/Indexer.php @@ -120,6 +120,7 @@ class Indexer { foreach ($newMetaData as $data) { $metaData = array_merge($metaData, $data); } + $fileObject->_updateMetaDataProperties($metaData); $this->getMetaDataRepository()->update($fileObject->getUid(), $metaData); $this->getFileIndexRepository()->updateIndexingTime($fileObject->getUid()); } @@ -220,6 +221,7 @@ class Indexer { $metaData = array(); list($metaData['width'], $metaData['height']) = getimagesize($rawFileLocation); $this->getMetaDataRepository()->update($fileObject->getUid(), $metaData); + $fileObject->_updateMetaDataProperties($metaData); } } -- GitLab