‪TYPO3CMS  11.5
ResourceStorageTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
33 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
34 
38 class ‪ResourceStorageTest extends FunctionalTestCase
39 {
40  protected function ‪tearDown(): void
41  {
42  // cleanup manually created folders
43  foreach (glob(‪Environment::getPublicPath() . '/fileadmin/*') as $folderToRemove) {
44  ‪GeneralUtility::rmdir($folderToRemove, true);
45  }
46  parent::tearDown();
47  }
48 
52  public function ‪getNestedProcessingFolderTest(): void
53  {
54  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
55  $this->setUpBackendUserFromFixture(1);
56  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
57  $subject->setEvaluatePermissions(false);
58 
61  ‪GeneralUtility::mkdir_deep(‪Environment::getPublicPath() . '/typo3temp/assets/_processed_/');
62  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/adirectory/bar.txt', 'myData');
63  clearstatcache();
64  $subject->addFileMount('/adirectory/', ['read_only' => false]);
65  $file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/adirectory/bar.txt');
66 
67  $rootProcessingFolder = $subject->getProcessingFolder();
68  $processingFolder = $subject->getProcessingFolder($file);
69 
70  self::assertInstanceOf(Folder::class, $processingFolder);
71  self::assertNotEquals($rootProcessingFolder, $processingFolder);
72 
73  for ($i = ‪ResourceStorage::PROCESSING_FOLDER_LEVELS; $i > 0; $i--) {
74  $processingFolder = $processingFolder->getParentFolder();
75  }
76  self::assertEquals($rootProcessingFolder, $processingFolder);
77  }
78 
88  public function ‪isWithinFileMountBoundariesRespectsReadOnlyFileMounts($targetDirectory, $fileMountFolder, $isFileMountReadOnly, $checkWriteAccess, $expectedResult): void
89  {
90  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
91  $fileName = 'bar.txt';
92  $this->setUpBackendUserFromFixture(1);
94  ‪GeneralUtility::mkdir_deep(‪Environment::getPublicPath() . '/fileadmin/' . $targetDirectory);
95  if ($fileMountFolder !== $targetDirectory) {
96  ‪GeneralUtility::mkdir_deep(‪Environment::getPublicPath() . '/fileadmin/' . $fileMountFolder);
97  }
98  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/' . $targetDirectory . '/' . $fileName, 'myData');
99  clearstatcache();
100  $file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/' . $targetDirectory . '/' . $fileName);
101 
102  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
103  $subject->setEvaluatePermissions(true);
104 
105  // read_only = true -> no write access for user, so checking for second argument true should assert false
106  $subject->addFileMount('/' . $fileMountFolder . '/', ['read_only' => $isFileMountReadOnly]);
107  self::assertSame($expectedResult, $subject->isWithinFileMountBoundaries($file, $checkWriteAccess));
108  }
109 
114  {
115  return [
116  'Access to file in ro file mount denied for write request' => [
117  '$targetDirectory' => 'fooBaz',
118  '$fileMountFolder' => 'fooBaz',
119  '$isFileMountReadOnly' => true,
120  '$checkWriteAccess' => true,
121  '$expectedResult' => false,
122  ],
123  'Access to file in ro file mount allowed for read request' => [
124  '$targetDirectory' => 'fooBaz',
125  '$fileMountFolder' => 'fooBaz',
126  '$isFileMountReadOnly' => true,
127  '$checkWriteAccess' => false,
128  '$expectedResult' => true,
129  ],
130  'Access to file in rw file mount allowed for write request' => [
131  '$targetDirectory' => 'fooBaz',
132  '$fileMountFolder' => 'fooBaz',
133  '$isFileMountReadOnly' => false,
134  '$checkWriteAccess' => true,
135  '$expectedResult' => true,
136  ],
137  'Access to file in rw file mount allowed for read request' => [
138  '$targetDirectory' => 'fooBaz',
139  '$fileMountFolder' => 'fooBaz',
140  '$isFileMountReadOnly' => false,
141  '$checkWriteAccess' => false,
142  '$expectedResult' => true,
143  ],
144  'Access to file not in file mount denied for write request' => [
145  '$targetDirectory' => 'fooBaz',
146  '$fileMountFolder' => 'barBaz',
147  '$isFileMountReadOnly' => false,
148  '$checkWriteAccess' => true,
149  '$expectedResult' => false,
150  ],
151  'Access to file not in file mount denied for read request' => [
152  '$targetDirectory' => 'fooBaz',
153  '$fileMountFolder' => 'barBaz',
154  '$isFileMountReadOnly' => false,
155  '$checkWriteAccess' => false,
156  '$expectedResult' => false,
157  ],
158  ];
159  }
160 
164  public function ‪getProcessingRootFolderTest(): void
165  {
166  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
167  $this->setUpBackendUserFromFixture(1);
168 
169  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
170  $processingFolder = $subject->getProcessingFolder();
171 
172  self::assertInstanceOf(Folder::class, $processingFolder);
173  }
174 
179  {
180  $folderIdentifier = ‪StringUtility::getUniqueId();
181  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
182  $this->setUpBackendUserFromFixture(1);
183 
184  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
185  $folder = new ‪Folder($subject, '/foo/' . $folderIdentifier . '/', $folderIdentifier);
186 
187  $role = $subject->getRole($folder);
188 
189  self::assertSame(‪FolderInterface::ROLE_DEFAULT, $role);
190  }
191 
196  {
197  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
198  $this->setUpBackendUserFromFixture(1);
199  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
200 
202  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt', 'myData');
203  clearstatcache();
204  $file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/foo/bar.txt');
205 
206  $this->expectException(\InvalidArgumentException::class);
207  $this->expectExceptionCode(1325842622);
208  $subject->replaceFile($file, ‪Environment::getPublicPath() . '/' . ‪StringUtility::getUniqueId());
209  }
210 
215  {
216  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
217  $this->setUpBackendUserFromFixture(1);
218  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
219 
220  $this->expectException(\InvalidArgumentException::class);
221  $this->expectExceptionCode(1325689164);
222  $subject->createFolder('newFolder', new ‪Folder($subject, '/foo/', 'foo'));
223  }
224 
229  {
230  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
231  $this->setUpBackendUserFromFixture(1);
232  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
233 
236  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt', 'myData');
237  clearstatcache();
238 
239  $file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/foo/bar.txt');
240  $subject->deleteFile($file);
241 
242  self::assertFileExists(‪Environment::getPublicPath() . '/fileadmin/_recycler_/bar.txt');
243  self::assertFileDoesNotExist(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt');
244  }
245 
250  {
251  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
252  $this->setUpBackendUserFromFixture(1);
253  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
254 
256  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt', 'myData');
257  clearstatcache();
258 
259  $file = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/foo/bar.txt');
260  $subject->deleteFile($file);
261 
262  self::assertFileDoesNotExist(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt');
263  }
264 
266  {
267  return [
268  'Finds foo recursive by name' => [
269  'foo',
270  '/bar/',
271  true,
272  [],
273  [
274  '/bar/bla/foo.txt',
275  ],
276  ],
277  'Finds foo not recursive by name' => [
278  'foo',
279  '/bar/bla/',
280  false,
281  [],
282  [
283  '/bar/bla/foo.txt',
284  ],
285  ],
286  'Finds nothing when not recursive for top level folder' => [
287  'foo',
288  '/bar/',
289  false,
290  [],
291  [],
292  ],
293  'Finds foo by description' => [
294  'fodescrip',
295  '/bar/',
296  true,
297  [],
298  [
299  '/bar/bla/foo.txt',
300  ],
301  ],
302  'Finds foo by translated description' => [
303  'fotranslated',
304  '/bar/',
305  true,
306  [],
307  [
308  '/bar/bla/foo.txt',
309  ],
310  ],
311  'Finds blupp by name' => [
312  'blupp',
313  '/bar/',
314  false,
315  [],
316  [
317  '/bar/blupp.txt',
318  ],
319  ],
320  'Finds only blupp by title for non recursive' => [
321  'title',
322  '/bar/',
323  false,
324  [],
325  [
326  '/bar/blupp.txt',
327  ],
328  ],
329  'Finds foo and blupp by title for recursive' => [
330  'title',
331  '/bar/',
332  true,
333  [],
334  [
335  '/bar/blupp.txt',
336  '/bar/bla/foo.txt',
337  ],
338  ],
339  'Finds foo, baz and blupp with no folder' => [
340  'title',
341  null,
342  true,
343  [],
344  [
345  '/baz/bla/baz.txt',
346  '/bar/blupp.txt',
347  '/bar/bla/foo.txt',
348  ],
349  ],
350  'Finds nothing for not existing' => [
351  'baz',
352  '/bar/',
353  true,
354  [],
355  [],
356  ],
357  'Finds nothing in root, when not recursive' => [
358  'title',
359  '/',
360  false,
361  [],
362  [],
363  ],
364  'Finds nothing, when not recursive and no folder given' => [
365  'title',
366  null,
367  false,
368  [],
369  [],
370  ],
371  'Filter is applied to result' => [
372  'title',
373  null,
374  true,
375  [
376  static function ($itemName) {
377  return str_contains($itemName, 'blupp') ? true : -1;
378  },
379  ],
380  [
381  '/bar/blupp.txt',
382  ],
383  ],
384  ];
385  }
386 
397  public function ‪searchFilesFindsFilesInFolder(string $searchTerm, ?string $searchFolder, bool $recursive, array $filters, array $expectedIdentifiers): void
398  {
399  try {
400  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
401  $this->importCSVDataSet(__DIR__ . '/Fixtures/FileSearch.csv');
402  $this->setUpBackendUserFromFixture(1);
403  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
404  $subject->setFileAndFolderNameFilters($filters);
405 
408  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/bar/bla/foo.txt', 'myData');
409  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/baz/bla/baz.txt', 'myData');
410  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/bar/blupp.txt', 'myData');
411  clearstatcache();
412 
413  $folder = $searchFolder ? GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:' . $searchFolder) : null;
414  $search = ‪FileSearchDemand::createForSearchTerm($searchTerm);
415  if ($recursive) {
416  $search = $search->withRecursive();
417  }
418 
419  $result = $subject->searchFiles($search, $folder);
420  $expectedFiles = array_map([$subject, 'getFile'], $expectedIdentifiers);
421  self::assertSame($expectedFiles, iterator_to_array($result));
422 
423  // Check if search also works for non hierarchical storages/drivers
424  // This is a hack, as capabilities is not settable from the outside
425  $objectReflection = new \ReflectionObject($subject);
426  $property = $objectReflection->getProperty('capabilities');
427  $property->setAccessible(true);
428  $property->setValue($subject, $subject->getCapabilities() & 7);
429  $result = $subject->searchFiles($search, $folder);
430  $expectedFiles = array_map([$subject, 'getFile'], $expectedIdentifiers);
431  self::assertSame($expectedFiles, iterator_to_array($result));
432  } finally {
433  ‪GeneralUtility::rmdir(‪Environment::getPublicPath() . '/fileadmin/bar', true);
434  ‪GeneralUtility::rmdir(‪Environment::getPublicPath() . '/fileadmin/baz', true);
435  }
436  }
437 
442  {
444  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
445  $this->setUpBackendUserFromFixture(1);
446  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
447 
449  $folderToCopy = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/foo');
450  $targetParentFolder = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/');
451 
452  $this->expectException(InvalidTargetFolderException::class);
453  $this->expectExceptionCode(1422723059);
454  $subject->copyFolder($folderToCopy, $targetParentFolder, null, $conflictMode);
455  }
456 
461  {
463  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
464  $this->setUpBackendUserFromFixture(1);
465  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
466 
468  $folderToCopy = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/foo');
469  $targetParentFolder = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/');
470 
471  $subject->copyFolder($folderToCopy, $targetParentFolder, null, $conflictMode);
472 
473  $newFolder = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/foo_01');
474  self::assertInstanceOf(Folder::class, $newFolder);
475  }
476 
481  {
483  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
484  $this->setUpBackendUserFromFixture(1);
486  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt', 'Temp file 1');
487  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/bar.txt', 'Temp file 2');
488 
489  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
490 
491  $fileToCopy = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/foo/bar.txt');
492  $targetParentFolder = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/');
493 
494  $this->expectException(ExistingTargetFileNameException::class);
495  $this->expectExceptionCode(1320291064);
496  $subject->copyFile($fileToCopy, $targetParentFolder, null, $conflictMode);
497  }
498 
503  {
505  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/sys_file_storage.xml');
506  $this->setUpBackendUserFromFixture(1);
508  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/foo/bar.txt', 'Temp file 1');
509  file_put_contents(‪Environment::getPublicPath() . '/fileadmin/bar.txt', 'Temp file 2');
510 
511  $subject = GeneralUtility::makeInstance(StorageRepository::class)->findByUid(1);
512 
513  $fileToCopy = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/foo/bar.txt');
514  $targetParentFolder = GeneralUtility::makeInstance(ResourceFactory::class)->getFolderObjectFromCombinedIdentifier('1:/');
515 
516  $subject->copyFile($fileToCopy, $targetParentFolder, null, $conflictMode);
517 
518  $newFile = GeneralUtility::makeInstance(ResourceFactory::class)->getFileObjectFromCombinedIdentifier('1:/bar_01.txt');
519  self::assertInstanceOf(File::class, $newFile);
520  }
521 }
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\deleteFileUnlinksFileIfNoRecyclerFolderAvailable
‪deleteFileUnlinksFileIfNoRecyclerFolderAvailable()
Definition: ResourceStorageTest.php:249
‪TYPO3\CMS\Core\Resource\DuplicationBehavior
Definition: DuplicationBehavior.php:24
‪TYPO3\CMS\Core\Core\Environment\getPublicPath
‪static string getPublicPath()
Definition: Environment.php:206
‪TYPO3\CMS\Core\Resource\DuplicationBehavior\CANCEL
‪const CANCEL
Definition: DuplicationBehavior.php:46
‪TYPO3\CMS\Core\Resource\ResourceStorage\PROCESSING_FOLDER_LEVELS
‪const PROCESSING_FOLDER_LEVELS
Definition: ResourceStorage.php:210
‪TYPO3\CMS\Core\Tests\Functional\Resource
Definition: ProcessedFileTest.php:18
‪TYPO3\CMS\Core\Resource\FolderInterface\ROLE_DEFAULT
‪const ROLE_DEFAULT
Definition: FolderInterface.php:26
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\createFolderThrowsExceptionIfParentFolderDoesNotExist
‪createFolderThrowsExceptionIfParentFolderDoesNotExist()
Definition: ResourceStorageTest.php:214
‪TYPO3\CMS\Core\Resource\Exception\ExistingTargetFileNameException
Definition: ExistingTargetFileNameException.php:23
‪TYPO3\CMS\Core\Resource\Exception\InvalidTargetFolderException
Definition: InvalidTargetFolderException.php:23
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\copyFolderGeneratesNewFolderNameWhenFolderAlreadyExistsInTargetFolderAndConflictModeIsRename
‪copyFolderGeneratesNewFolderNameWhenFolderAlreadyExistsInTargetFolderAndConflictModeIsRename()
Definition: ResourceStorageTest.php:460
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\tearDown
‪tearDown()
Definition: ResourceStorageTest.php:40
‪TYPO3\CMS\Core\Type\Enumeration\cast
‪static static cast($value)
Definition: Enumeration.php:186
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\copyFileThrowsErrorWhenFileWithSameNameAlreadyExistsInTargetFolderAndConflictModeIsCancel
‪copyFileThrowsErrorWhenFileWithSameNameAlreadyExistsInTargetFolderAndConflictModeIsCancel()
Definition: ResourceStorageTest.php:480
‪TYPO3\CMS\Core\Utility\GeneralUtility\mkdir_deep
‪static mkdir_deep($directory)
Definition: GeneralUtility.php:1908
‪TYPO3\CMS\Core\Resource\Search\FileSearchDemand
Definition: FileSearchDemand.php:26
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\searchFilesFindsFilesInFolder
‪searchFilesFindsFilesInFolder(string $searchTerm, ?string $searchFolder, bool $recursive, array $filters, array $expectedIdentifiers)
Definition: ResourceStorageTest.php:397
‪TYPO3\CMS\Core\Resource\Folder
Definition: Folder.php:37
‪TYPO3\CMS\Core\Resource\ResourceFactory
Definition: ResourceFactory.php:41
‪TYPO3\CMS\Core\Resource\StorageRepository
Definition: StorageRepository.php:38
‪TYPO3\CMS\Core\Resource\File
Definition: File.php:24
‪TYPO3\CMS\Core\Resource\DuplicationBehavior\RENAME
‪const RENAME
Definition: DuplicationBehavior.php:32
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\isWithinFileMountBoundariesDataProvider
‪array isWithinFileMountBoundariesDataProvider()
Definition: ResourceStorageTest.php:113
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\isWithinFileMountBoundariesRespectsReadOnlyFileMounts
‪isWithinFileMountBoundariesRespectsReadOnlyFileMounts($targetDirectory, $fileMountFolder, $isFileMountReadOnly, $checkWriteAccess, $expectedResult)
Definition: ResourceStorageTest.php:88
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\copyFileGeneratesNewFileNameWhenFileAlreadyExistsInTargetFolderAndConflictModeIsRename
‪copyFileGeneratesNewFileNameWhenFileAlreadyExistsInTargetFolderAndConflictModeIsRename()
Definition: ResourceStorageTest.php:502
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\searchFilesFindsFilesInFolderDataProvider
‪searchFilesFindsFilesInFolderDataProvider()
Definition: ResourceStorageTest.php:265
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\getProcessingRootFolderTest
‪getProcessingRootFolderTest()
Definition: ResourceStorageTest.php:164
‪TYPO3\CMS\Core\Resource\ResourceStorage
Definition: ResourceStorage.php:125
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static string getUniqueId($prefix='')
Definition: StringUtility.php:128
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\replaceFileFailsIfLocalFileDoesNotExist
‪replaceFileFailsIfLocalFileDoesNotExist()
Definition: ResourceStorageTest.php:195
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest
Definition: ResourceStorageTest.php:39
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:43
‪TYPO3\CMS\Core\Resource\FolderInterface
Definition: FolderInterface.php:22
‪TYPO3\CMS\Core\Utility\GeneralUtility\rmdir
‪static bool rmdir($path, $removeNonEmpty=false)
Definition: GeneralUtility.php:1961
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\deleteFileMovesFileToRecyclerFolderIfAvailable
‪deleteFileMovesFileToRecyclerFolderIfAvailable()
Definition: ResourceStorageTest.php:228
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Core\Resource\Search\FileSearchDemand\createForSearchTerm
‪static createForSearchTerm(string $searchTerm)
Definition: FileSearchDemand.php:70
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:22
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\getRoleReturnsDefaultForRegularFolders
‪getRoleReturnsDefaultForRegularFolders()
Definition: ResourceStorageTest.php:178
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\getNestedProcessingFolderTest
‪getNestedProcessingFolderTest()
Definition: ResourceStorageTest.php:52
‪TYPO3\CMS\Core\Tests\Functional\Resource\ResourceStorageTest\copyFolderThrowsErrorWhenFolderAlreadyExistsInTargetFolderAndConflictModeIsCancel
‪copyFolderThrowsErrorWhenFolderAlreadyExistsInTargetFolderAndConflictModeIsCancel()
Definition: ResourceStorageTest.php:441