Breaking: #107397 - Circular dependency between ProcessedFile and Task removed
See forge#107397
Description
The circular dependency between
\TYPO3\ and File Processing Task
classes has been resolved to improve the architecture and maintainability of
the File Abstraction Layer (FAL) processing system.
The following changes have been made to
Processed:
- The public method
gethas been removed.Task () - The public method
generatehas been removed.Processed File Name Without Extension ()
The following changes have been made to
Processed:
- Method
addnow requires a() Taskparameter.Interface - Method
updatenow requires a() Taskparameter.Interface
Additionally, the checksum validation logic has been moved from
Processed to
Abstract.
Impact
Any code that calls the following methods will cause PHP fatal errors:
ProcessedFile->get Task () ProcessedFile->generate Processed File Name Without Extension ()
Any code that calls
Processed or
Processed without the new
Task parameter will cause PHP fatal errors.
Code that relied on TYPO3CMSCore objects
having Task objects available internally will no longer work, as Task objects
are now created externally by
File when
needed.
Affected installations
Installations with custom file processing extensions or custom Task
implementations that directly interact with the
Processed method are affected. The extension scanner will
report any usage of
Processed and
Processed as weak
matches.
Extensions that manually call
Processed or
Processed are also affected. The extension
scanner will not report usages of these methods due to too many weak matches.
Migration
Replace calls to
Processed with direct creation of Task
objects through the
Task:
Before:
$task = $processedFile->getTask();
After:
use TYPO3\CMS\Core\Resource\Processing\TaskTypeRegistry;
use TYPO3\CMS\Core\Utility\GeneralUtility;
$taskTypeRegistry = GeneralUtility::makeInstance(TaskTypeRegistry::class);
$task = $taskTypeRegistry->getTaskForType(
$processedFile->getTaskIdentifier(),
$processedFile,
$processedFile->getProcessingConfiguration()
);
It is recommended to implement your own alternative to
Processed if similar
logic is still needed.
Update calls to
Processed and
Processed to include the new
Task parameter:
use TYPO3\CMS\Core\Resource\Processing\TaskTypeRegistry;
use TYPO3\CMS\Core\Resource\ProcessedFileRepository;
use TYPO3\CMS\Core\Utility\GeneralUtility;
// Before
$processedFileRepository->add($processedFile);
$processedFileRepository->update($processedFile);
// After
$taskTypeRegistry = GeneralUtility::makeInstance(TaskTypeRegistry::class);
$task = $taskTypeRegistry->getTaskForType(
$processedFile->getTaskIdentifier(),
$processedFile,
$processedFile->getProcessingConfiguration()
);
$processedFileRepository = GeneralUtility::makeInstance(ProcessedFileRepository::class);
$processedFileRepository->add($processedFile, $task);
$processedFileRepository->update($processedFile, $task);