[BUGFIX] ProcessedFile/Thumbnail is always regenerated 09/19809/3
authorOliver Hader <oliver@typo3.org>
Thu, 11 Apr 2013 18:58:58 +0000 (20:58 +0200)
committerOliver Hader <oliver.hader@typo3.org>
Sun, 14 Apr 2013 10:38:37 +0000 (12:38 +0200)
A ProcessedFile/Thumbnail is always regenerated even if there
are not modifications to the original file.

The reasons for this spread all over the ProcessedFile handling
and boils down to a new ProcessedFile is being persisted in the
file-system by using a regular ResourceStorage::addFile() call
that results in a plain File object. The indexer then tries to
load this file and will create a new UID for the thumbnail in
sys_file. This uid value is then used to update(!) the
sys_file_processedfile entry - which fails since the uid
was taken from sys_file.

The bug was introduced in
I53e4eb42def291ba88ce18209a348b1e2f592185 were the
processedFile is updated with information of a File object and
the wrong uid is transfered as property.

Fixes: #47140
Releases: 6.1, 6.0
Change-Id: I4252b237d6022485c51ad32a7f956f5afcda8c08
Reviewed-on: https://review.typo3.org/19809
Reviewed-by: Oliver Hader
Tested-by: Oliver Hader
typo3/sysext/core/Classes/Resource/ProcessedFile.php

index b992892..b614b04 100644 (file)
@@ -196,7 +196,12 @@ class ProcessedFile extends AbstractFile {
                // Update some related properties
                $this->identifier = $addedFile->getIdentifier();
                $this->originalFileSha1 = $this->originalFile->getSha1();
-               $this->updateProperties($addedFile->getProperties());
+               // The added file is a FileInterface object with own uid
+               // We have to unset uid otherwise the processed file couldn't be stored in database
+               // Other non-used fields were removed before database progress
+               $updateProperties = $addedFile->getProperties();
+               unset($updateProperties['uid']);
+               $this->updateProperties($updateProperties);
                $this->deleted = FALSE;
                $this->updated = TRUE;
        }