[BUGFIX] ProcessedFile is persisted in sys_file as well 73/20873/2
authorFabien Udriot <fabien.udriot@ecodev.ch>
Thu, 2 May 2013 17:50:28 +0000 (19:50 +0200)
committerPhilipp Gampe <philipp.gampe@typo3.org>
Fri, 17 May 2013 15:00:59 +0000 (17:00 +0200)
The problem appears more generally as soon as @getProperties@ is
called from a file object. FAL will try, by all means, indexing the file
(storing the file into sys_file, in other word)

The change set adds a method telling a File not be indexed by the API.
This is particularly useful if you want to create objects but don't want
them to be persisted.

Change-Id: I8cf0c0f6389dc13e8c3855452f1d2519544b69b9
Fixes: #47211
Fixes: #47782
Releases: 6.0, 6.1, 6.2
Reviewed-on: https://review.typo3.org/20873
Reviewed-by: Philipp Gampe
Tested-by: Philipp Gampe
typo3/sysext/core/Classes/Resource/File.php
typo3/sysext/core/Classes/Resource/ProcessedFile.php
typo3/sysext/core/Tests/Unit/Resource/FileTest.php

index 54cf963..825e68a 100644 (file)
@@ -37,11 +37,19 @@ class File extends AbstractFile {
         * File indexing status. True, if the file is indexed in the database;
         * NULL is the default value, this means that the index status is unknown
         *
-        * @var boolean
+        * @var boolean|NULL
         */
        protected $indexed = NULL;
 
        /**
+        * Tells whether to index a file or not.
+        * If yes, the file will be persisted into sys_file.
+        *
+        * @var boolean
+        */
+       protected $indexable = TRUE;
+
+       /**
         * Set to TRUE while this file is being indexed - used to prevent some endless loops
         *
         * @var boolean
@@ -139,7 +147,7 @@ class File extends AbstractFile {
        /**
         * Returns TRUE if this file is indexed
         *
-        * @return boolean
+        * @return boolean|NULL
         */
        public function isIndexed() {
                if ($this->indexed === NULL && !$this->indexingInProgress) {
@@ -155,7 +163,7 @@ class File extends AbstractFile {
         * @return void
         */
        protected function loadIndexRecord($indexIfNotIndexed = TRUE) {
-               if ($this->indexed !== NULL) {
+               if ($this->indexed !== NULL || !$this->indexable) {
                        return;
                }
                /** @var $repo FileRepository */
@@ -319,6 +327,20 @@ class File extends AbstractFile {
                return $array;
        }
 
+       /**
+        * @return boolean
+        */
+       public function isIndexable() {
+               return $this->indexable;
+       }
+
+       /**
+        * @param boolean $indexable
+        */
+       public function setIndexable($indexable) {
+               $this->indexable = $indexable;
+       }
+
 }
 
 
index b614b04..31e3582 100644 (file)
@@ -192,16 +192,12 @@ class ProcessedFile extends AbstractFile {
                }
                // TODO this should be more generic (in fact it only works for local file paths)
                $addedFile = $this->storage->addFile($filePath, $this->storage->getProcessingFolder(), $this->name, 'replace');
+               $addedFile->setIndexable(FALSE);
 
                // Update some related properties
                $this->identifier = $addedFile->getIdentifier();
                $this->originalFileSha1 = $this->originalFile->getSha1();
-               // 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->updateProperties($addedFile->getProperties());
                $this->deleted = FALSE;
                $this->updated = TRUE;
        }
@@ -524,4 +520,4 @@ class ProcessedFile extends AbstractFile {
 
 }
 
-?>
\ No newline at end of file
+?>
index aee89c7..d4040c0 100644 (file)
@@ -392,7 +392,39 @@ class FileTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
                $this->assertSame($expectedExtension, $fixture->getExtension());
        }
 
+       /**
+        * @test
+        */
+       public function indexablePropertyIsByDefaultTrue() {
+               $fixture = new \TYPO3\CMS\Core\Resource\File(array());
+               $this->assertAttributeEquals(TRUE, 'indexable', $fixture);
+       }
 
+       /**
+        * @test
+        */
+       public function indexablePropertyCanBeSetAndGet() {
+               $fixture = new \TYPO3\CMS\Core\Resource\File(array());
+               foreach (array(FALSE, TRUE) as $value) {
+                       $fixture->setIndexable($value);
+                       $this->assertSame($value, $fixture->isIndexable());
+               }
+       }
+
+       /**
+        * @test
+        */
+       public function callMethodLoadIndexRecordWithPropertyIndexableSetToFalseAndCheckWhetherIsIndexedReturnsNull() {
+               $method = new \ReflectionMethod(
+                       'TYPO3\CMS\Core\Resource\File', 'loadIndexRecord'
+               );
+               $method->setAccessible(TRUE);
+
+               $fixture = new \TYPO3\CMS\Core\Resource\File(array());
+               $fixture->setIndexable(FALSE);
+               $method->invoke($fixture);
+               $this->assertNull($fixture->isIndexed());
+       }
 }
 
 ?>
\ No newline at end of file