‪TYPO3CMS  10.4
FormFileExtensionUpdateTest.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 
20 use Doctrine\DBAL\FetchMode;
21 use Symfony\Component\Console\Output\NullOutput;
33 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
34 
35 class ‪FormFileExtensionUpdateTest extends FunctionalTestCase
36 {
40  protected ‪$coreExtensionsToLoad = [
41  'form',
42  ];
43 
47  protected ‪$testExtensionsToLoad = [
48  'typo3/sysext/form/Tests/Functional/Hooks/Fixtures/test_resources',
49  ];
50 
54  private ‪$subject;
55 
59  private ‪$slot;
60 
64  private ‪$flexForm;
65 
70 
74  private ‪$storageFolder;
75 
76  protected function ‪setUp(): void
77  {
78  parent::setUp();
79 
80  $this->setUpBackendUserFromFixture(1);
82 
83  $folderIdentifier = 'form_definitions';
84  $storage = GeneralUtility::makeInstance(ResourceFactory::class)->getStorageObject(1);
85 
86  if ($storage->hasFolder($folderIdentifier)) {
87  $storage->getFolder($folderIdentifier)->delete(true);
88  }
89 
90  ‪$output = new NullOutput();
91  $this->subject = GeneralUtility::makeInstance(FormFileExtensionUpdate::class);
92  $this->subject->setOutput(‪$output);
93  $this->slot = GeneralUtility::makeInstance(FilePersistenceSlot::class);
94  $this->flexForm = GeneralUtility::makeInstance(FlexFormTools::class);
95  $this->referenceIndex = GeneralUtility::makeInstance(ReferenceIndex::class);
96  $this->storageFolder = $storage->createFolder($folderIdentifier);
97  }
98 
99  protected function ‪tearDown(): void
100  {
101  $this->storageFolder->delete(true);
102  parent::tearDown();
103  }
104 
105  /*
106  * --- CHECK FOR UPDATE ---
107  */
108 
112  private function ‪invokeCheckForUpdate(): bool
113  {
114  return $this->subject->updateNecessary();
115  }
116 
121  {
122  $this->‪createStorageFormDefinition('updated', false);
123  self::assertFalse($this->‪invokeCheckForUpdate());
124  }
125 
130  {
131  $this->‪createStorageFormDefinition('legacy', true);
132  self::assertTrue($this->‪invokeCheckForUpdate());
133  }
134 
139  {
140  $this->‪createStorageFormDefinition('updated', false);
141  $this->‪createReference(
142  $this->‪createStorageFileIdentifier('updated.form.yaml'),
143  'updated'
144  );
145  self::assertFalse($this->‪invokeCheckForUpdate());
146  }
147 
152  ) {
153  $this->‪createStorageFormDefinition('updated', false);
154  $finisherOverrides = [
155  'FirstFinisher' => ‪StringUtility::getUniqueId(),
156  'SecondFinisher' => ‪StringUtility::getUniqueId(),
157  ];
158  $this->‪createReference(
159  $this->‪createStorageFileIdentifier('updated.form.yaml'),
160  'updated',
161  $finisherOverrides
162  );
163  self::assertFalse($this->‪invokeCheckForUpdate());
164  }
165 
170  {
171  // form definition was renamed already
172  $this->‪createStorageFormDefinition('updated', false);
173  // but references not updated yet
174  $this->‪createReference(
175  $this->‪createStorageFileIdentifier('updated.yaml'),
176  'updated'
177  );
178  self::assertTrue($this->‪invokeCheckForUpdate());
179  }
180 
185  ) {
186  // form definition was renamed already
187  $this->‪createStorageFormDefinition('updated', false);
188  // but references not updated yet
189  $finisherOverrides = [
190  'FirstFinisher' => ‪StringUtility::getUniqueId(),
191  'SecondFinisher' => ‪StringUtility::getUniqueId(),
192  ];
193  $this->‪createReference(
194  $this->‪createStorageFileIdentifier('updated.yaml'),
195  'updated',
196  $finisherOverrides
197  );
198  self::assertTrue($this->‪invokeCheckForUpdate());
199  }
200 
205  {
207  self::assertFalse($this->‪invokeCheckForUpdate());
208  }
209 
214  {
216  $this->‪createReference(
217  $this->‪createExtensionFileIdentifier('updated.form.yaml'),
218  'updated'
219  );
220  self::assertFalse($this->‪invokeCheckForUpdate());
221  }
222 
227  {
229  $this->‪createReference(
230  $this->‪createExtensionFileIdentifier('updated.yaml'),
231  'updated'
232  );
233  self::assertTrue($this->‪invokeCheckForUpdate());
234  }
235 
240  ) {
242  $finisherOverrides = [
243  'FirstFinisher' => ‪StringUtility::getUniqueId(),
244  'SecondFinisher' => ‪StringUtility::getUniqueId(),
245  ];
246  $this->‪createReference(
247  $this->‪createExtensionFileIdentifier('updated.yaml'),
248  'updated',
249  $finisherOverrides
250  );
251  self::assertTrue($this->‪invokeCheckForUpdate());
252  }
253 
254  /*
255  * --- PERFORM UPDATE ---
256  */
257 
258  private function ‪invokePerformUpdate(): bool
259  {
260  return $this->subject->executeUpdate();
261  }
262 
267  {
268  $this->‪createStorageFormDefinition('legacy', true);
269  self::assertTrue(
270  $this->‪invokePerformUpdate()
271  );
272  self::assertTrue(
273  $this->storageFolder->hasFile('legacy.form.yaml')
274  );
275  }
276 
281  {
282  // form definition was renamed already
283  $this->‪createStorageFormDefinition('updated', false);
284  // but references not updated yet
285  $this->‪createReference(
286  $this->‪createStorageFileIdentifier('updated.yaml'),
287  'updated'
288  );
289  // having an additional reference
290  $this->‪createReference(
291  $this->‪createStorageFileIdentifier('updated.yaml'),
292  'updated'
293  );
294  self::assertTrue(
295  $this->‪invokePerformUpdate()
296  );
297  $expectedFileIdentifier = $this->‪createStorageFileIdentifier(
298  'updated.form.yaml'
299  );
300  foreach ($this->‪retrieveAllFlexForms() as ‪$flexForm) {
301  self::assertSame(
302  $expectedFileIdentifier,
303  ‪$flexForm['data']['sDEF']['lDEF']['settings.persistenceIdentifier']['vDEF']
304  );
305  }
306  }
307 
312  ) {
313  // form definition was renamed already
314  $this->‪createStorageFormDefinition('updated', false);
315  // but references not updated yet
316  $finisherOverrides = [
317  'FirstFinisher' => ‪StringUtility::getUniqueId(),
318  'SecondFinisher' => ‪StringUtility::getUniqueId(),
319  ];
320  $this->‪createReference(
321  $this->‪createStorageFileIdentifier('updated.yaml'),
322  'updated',
323  $finisherOverrides
324  );
325  // having an additional reference
326  $this->‪createReference(
327  $this->‪createStorageFileIdentifier('updated.yaml'),
328  'updated',
329  $finisherOverrides
330  );
331  self::assertTrue(
332  $this->‪invokePerformUpdate()
333  );
334  $expectedFileIdentifier = $this->‪createStorageFileIdentifier(
335  'updated.form.yaml'
336  );
337  $expectedSheetIdentifiers = $this->‪createFinisherOverridesSheetIdentifiers(
338  $expectedFileIdentifier,
339  'updated',
340  $finisherOverrides
341  );
342  foreach ($this->‪retrieveAllFlexForms() as ‪$flexForm) {
343  self::assertSame(
344  $expectedFileIdentifier,
345  ‪$flexForm['data']['sDEF']['lDEF']['settings.persistenceIdentifier']['vDEF'] ?? null
346  );
347  foreach ($finisherOverrides as $finisherIdentifier => $finisherValue) {
348  $sheetIdentifier = $expectedSheetIdentifiers[$finisherIdentifier];
349  $propertyName = sprintf(
350  'settings.finishers.%s.value',
351  $finisherIdentifier
352  );
353  self::assertSame(
354  $finisherValue,
355  ‪$flexForm['data'][$sheetIdentifier]['lDEF'][$propertyName]['vDEF'] ?? null
356  );
357  }
358  }
359  }
360 
365  {
367  $this->‪createReference(
368  $this->‪createExtensionFileIdentifier('updated.yaml'),
369  'updated'
370  );
371  // having an additional reference
372  $this->‪createReference(
373  $this->‪createExtensionFileIdentifier('updated.yaml'),
374  'updated'
375  );
376  self::assertTrue(
377  $this->‪invokePerformUpdate()
378  );
379  $expectedFileIdentifier = $this->‪createExtensionFileIdentifier(
380  'updated.form.yaml'
381  );
382  foreach ($this->‪retrieveAllFlexForms() as ‪$flexForm) {
383  self::assertSame(
384  $expectedFileIdentifier,
385  ‪$flexForm['data']['sDEF']['lDEF']['settings.persistenceIdentifier']['vDEF'] ?? null
386  );
387  }
388  }
389 
394  ) {
396  $finisherOverrides = [
397  'FirstFinisher' => ‪StringUtility::getUniqueId(),
398  'SecondFinisher' => ‪StringUtility::getUniqueId(),
399  ];
400  $this->‪createReference(
401  $this->‪createExtensionFileIdentifier('updated.yaml'),
402  'updated',
403  $finisherOverrides
404  );
405  // having an additional reference
406  $this->‪createReference(
407  $this->‪createExtensionFileIdentifier('updated.yaml'),
408  'updated',
409  $finisherOverrides
410  );
411  self::assertTrue(
412  $this->‪invokePerformUpdate()
413  );
414  }
415 
416  /*
417  * --- HELPER FUNCTIONS ---
418  */
419 
424  private function ‪createStorageFormDefinition(
425  string $name,
426  bool $legacy = false
427  ) {
428  $content = implode(LF, [
429  'type: Form',
430  'identifier: ' . $name,
431  'prototypeName: standard'
432  ]);
433 
434  $fileName = $name . '.' . ($legacy ? 'yaml' : 'form.yaml');
435  $fileIdentifier = $this->‪createStorageFileIdentifier($fileName);
436 
437  if (!$legacy) {
438  $this->slot->allowInvocation(
440  $fileIdentifier
441  );
442  $this->slot->allowInvocation(
444  $fileIdentifier,
445  $this->slot->getContentSignature($content)
446  );
447  }
448 
449  $this->storageFolder->createFile($fileName)->setContents($content);
450  }
451 
457  private function ‪createReference(
458  string $fileIdentifier,
459  string $formIdentifier,
460  array $finisherOverrides = []
461  ) {
462  $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
463  $connection = $connectionPool->getConnectionForTable('tt_content');
464 
465  ‪$flexForm = [
466  'data' => [
467  'sDEF' => [
468  'lDEF' => [
469  'settings.persistenceIdentifier' => [
470  'vDEF' => $fileIdentifier,
471  ],
472  'settings.overrideFinishers' => [
473  'vDEF' => empty($finisherOverrides) ? '0' : '1',
474  ],
475  ]
476  ]
477  ]
478  ];
479 
480  $sheetIdentifiers = $this->‪createFinisherOverridesSheetIdentifiers(
481  $fileIdentifier,
482  $formIdentifier,
483  $finisherOverrides
484  );
485  foreach ($finisherOverrides as $finisherIdentifier => $finisherValue) {
486  $sheetIdentifier = $sheetIdentifiers[$finisherIdentifier];
487  $propertyName = sprintf(
488  'settings.finishers.%s.value',
489  $finisherIdentifier
490  );
491  ‪$flexForm['data'][$sheetIdentifier]['lDEF'] = [
492  $propertyName => [
493  'vDEF' => $finisherValue
494  ],
495  ];
496  }
497 
498  $values = [
499  'pid' => 1,
500  'header' => sprintf(
501  'Form Content Element for "%s"',
502  $formIdentifier
503  ),
504  'CType' => 'form_formframework',
505  'pi_flexform' => $this->flexForm
506  ->flexArray2Xml(‪$flexForm, true)
507  ];
508 
509  $connection->insert('tt_content', $values);
510  $id = $connection->lastInsertId('tt_content');
511  $this->referenceIndex->updateRefIndexTable('tt_content', $id);
512  }
513 
517  private function ‪setUpAllowedExtensionPaths()
518  {
520  module.tx_form.settings.yamlConfigurations {
521  110 = EXT:test_resources/Configuration/Yaml/AllowedExtensionPaths.yaml
522  }
523  plugin.tx_form.settings.yamlConfigurations {
524  110 = EXT:test_resources/Configuration/Yaml/AllowedExtensionPaths.yaml
525  }
526  '));
527  }
528 
532  private function ‪retrieveAllFlexForms(): array
533  {
534  $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class);
535  $connection = $connectionPool->getConnectionForTable('tt_content');
536 
537  return array_map(
538  function (array $record) {
539  return ‪GeneralUtility::xml2array($record['pi_flexform']);
540  },
541  $connection->select(['pi_flexform'], 'tt_content')
542  ->fetchAll(FetchMode::ASSOCIATIVE)
543  );
544  }
545 
553  string $fileIdentifier,
554  string $formIdentifier,
555  array $finisherOverrides
556  ): array {
557  $sheetIdentifiers = [];
558  foreach (array_keys($finisherOverrides) as $finisherIdentifier) {
559  $sheetIdentifiers[$finisherIdentifier] = md5(
560  $fileIdentifier
561  . 'standard'
562  . $formIdentifier
563  . $finisherIdentifier
564  );
565  }
566  return $sheetIdentifiers;
567  }
568 
573  private function ‪createStorageFileIdentifier(string $fileName): string
574  {
575  return $this->storageFolder->getCombinedIdentifier() . $fileName;
576  }
577 
582  private function ‪createExtensionFileIdentifier(string $fileName): string
583  {
584  return 'EXT:test_resources/Configuration/Form/' . $fileName;
585  }
586 }
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\updateIsRequiredHavingOutdatedStorageReferences
‪updateIsRequiredHavingOutdatedStorageReferences()
Definition: FormFileExtensionUpdateTest.php:162
‪TYPO3\CMS\Core\Utility\GeneralUtility\xml2array
‪static mixed xml2array($string, $NSprefix='', $reportDocTag=false)
Definition: GeneralUtility.php:1531
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\performUpdateSucceedsHavingOutdatedExtensionReferencesWithFinisherOverrides
‪performUpdateSucceedsHavingOutdatedExtensionReferencesWithFinisherOverrides()
Definition: FormFileExtensionUpdateTest.php:386
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\updateIsNotRequiredHavingUpdatedExtensionReferences
‪updateIsNotRequiredHavingUpdatedExtensionReferences()
Definition: FormFileExtensionUpdateTest.php:206
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\createStorageFileIdentifier
‪string createStorageFileIdentifier(string $fileName)
Definition: FormFileExtensionUpdateTest.php:566
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\updateIsNotRequiredHavingUpdatedStorageReferences
‪updateIsNotRequiredHavingUpdatedStorageReferences()
Definition: FormFileExtensionUpdateTest.php:131
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\retrieveAllFlexForms
‪array retrieveAllFlexForms()
Definition: FormFileExtensionUpdateTest.php:525
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\addTypoScriptSetup
‪static addTypoScriptSetup($content)
Definition: ExtensionManagementUtility.php:1432
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\updateIsNotRequiredHavingUpdatedFormDefinitions
‪updateIsNotRequiredHavingUpdatedFormDefinitions()
Definition: FormFileExtensionUpdateTest.php:113
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\$testExtensionsToLoad
‪string[] $testExtensionsToLoad
Definition: FormFileExtensionUpdateTest.php:45
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\updateIsRequiredHavingOutdatedExtensionReferences
‪updateIsRequiredHavingOutdatedExtensionReferences()
Definition: FormFileExtensionUpdateTest.php:219
‪TYPO3\CMS\Core\Database\ReferenceIndex
Definition: ReferenceIndex.php:48
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\tearDown
‪tearDown()
Definition: FormFileExtensionUpdateTest.php:92
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\$subject
‪FormFileExtensionUpdate $subject
Definition: FormFileExtensionUpdateTest.php:51
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\setUp
‪setUp()
Definition: FormFileExtensionUpdateTest.php:69
‪TYPO3\CMS\Form\Slot\FilePersistenceSlot\COMMAND_FILE_SET_CONTENTS
‪const COMMAND_FILE_SET_CONTENTS
Definition: FilePersistenceSlot.php:44
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\invokeCheckForUpdate
‪bool invokeCheckForUpdate()
Definition: FormFileExtensionUpdateTest.php:105
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\$flexForm
‪FlexFormTools $flexForm
Definition: FormFileExtensionUpdateTest.php:59
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\updateIsNotRequiredHavingOutdatedExtensionFormDefinitions
‪updateIsNotRequiredHavingOutdatedExtensionFormDefinitions()
Definition: FormFileExtensionUpdateTest.php:197
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\updateIsRequiredHavingOutdatedExtensionReferencesWithFinisherOverrides
‪updateIsRequiredHavingOutdatedExtensionReferencesWithFinisherOverrides()
Definition: FormFileExtensionUpdateTest.php:232
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\$storageFolder
‪Folder $storageFolder
Definition: FormFileExtensionUpdateTest.php:67
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\$slot
‪FilePersistenceSlot $slot
Definition: FormFileExtensionUpdateTest.php:55
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\updateIsRequiredHavingOutdatedStorageReferencesWithFinisherOverrides
‪updateIsRequiredHavingOutdatedStorageReferencesWithFinisherOverrides()
Definition: FormFileExtensionUpdateTest.php:177
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\createExtensionFileIdentifier
‪string createExtensionFileIdentifier(string $fileName)
Definition: FormFileExtensionUpdateTest.php:575
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\performUpdateSucceedsHavingOutdatedStorageFormDefinitions
‪performUpdateSucceedsHavingOutdatedStorageFormDefinitions()
Definition: FormFileExtensionUpdateTest.php:259
‪TYPO3\CMS\Form\Slot\FilePersistenceSlot\COMMAND_FILE_CREATE
‪const COMMAND_FILE_CREATE
Definition: FilePersistenceSlot.php:40
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:43
‪TYPO3\CMS\Core\Core\Bootstrap\initializeLanguageObject
‪static initializeLanguageObject()
Definition: Bootstrap.php:617
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\performUpdateSucceedsHavingOutdatedStorageReferencesWithFinisherOverrides
‪performUpdateSucceedsHavingOutdatedStorageReferencesWithFinisherOverrides()
Definition: FormFileExtensionUpdateTest.php:304
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\updateIsRequiredHavingOutdatedStorageFormDefinitions
‪updateIsRequiredHavingOutdatedStorageFormDefinitions()
Definition: FormFileExtensionUpdateTest.php:122
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\createFinisherOverridesSheetIdentifiers
‪array createFinisherOverridesSheetIdentifiers(string $fileIdentifier, string $formIdentifier, array $finisherOverrides)
Definition: FormFileExtensionUpdateTest.php:545
‪TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools
Definition: FlexFormTools.php:38
‪TYPO3\CMS\Core\Resource\Folder
Definition: Folder.php:37
‪TYPO3\CMS\Core\Resource\ResourceFactory
Definition: ResourceFactory.php:41
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\performUpdateSucceedsHavingOutdatedExtensionReferences
‪performUpdateSucceedsHavingOutdatedExtensionReferences()
Definition: FormFileExtensionUpdateTest.php:357
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\createStorageFormDefinition
‪createStorageFormDefinition(string $name, bool $legacy=false)
Definition: FormFileExtensionUpdateTest.php:417
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\$coreExtensionsToLoad
‪string[] $coreExtensionsToLoad
Definition: FormFileExtensionUpdateTest.php:39
‪TYPO3\CMS\Form\Slot\FilePersistenceSlot
Definition: FilePersistenceSlot.php:38
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\$referenceIndex
‪ReferenceIndex $referenceIndex
Definition: FormFileExtensionUpdateTest.php:63
‪$output
‪$output
Definition: annotationChecker.php:119
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\performUpdateSucceedsHavingOutdatedStorageReferences
‪performUpdateSucceedsHavingOutdatedStorageReferences()
Definition: FormFileExtensionUpdateTest.php:273
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static string getUniqueId($prefix='')
Definition: StringUtility.php:92
‪TYPO3\CMS\Core\Core\Bootstrap
Definition: Bootstrap.php:66
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\createReference
‪createReference(string $fileIdentifier, string $formIdentifier, array $finisherOverrides=[])
Definition: FormFileExtensionUpdateTest.php:450
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\updateIsNotRequiredHavingUpdatedStorageReferencesWithFinisherOverrides
‪updateIsNotRequiredHavingUpdatedStorageReferencesWithFinisherOverrides()
Definition: FormFileExtensionUpdateTest.php:144
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest
Definition: FormFileExtensionUpdateTest.php:36
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\setUpAllowedExtensionPaths
‪setUpAllowedExtensionPaths()
Definition: FormFileExtensionUpdateTest.php:510
‪TYPO3\CMS\Form\Tests\Functional\Hooks
Definition: FormFileExtensionUpdateTest.php:18
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Form\Hooks\FormFileExtensionUpdate
Definition: FormFileExtensionUpdate.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪TYPO3\CMS\Form\Tests\Functional\Hooks\FormFileExtensionUpdateTest\invokePerformUpdate
‪invokePerformUpdate()
Definition: FormFileExtensionUpdateTest.php:251
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:22