Epic #72584: sysext:impexp
Wrong FAL References after Import
Export source systen:
Two sys_file entries were exported with uids 1 and 2. They both have sys_file_reference entries.
Import target system:
There is already one sys_file entry with uid 1.
After Import all sys_file_reference references formerly referenced to sys_file:1 will be referenced to sys_file:3, but they should be refrenced to sys_file:2.
This behavior is caused by TYPO3\CMS\Impexp\ImportExport::fixUidLocalInSysFileReferenceRecords(). During import this function will correctly replace sys_file:1 references with sys_file:2. But when it looks for sys_file:2 to replace, it will not only replace "old" sys_file:2 occurrences, it replaces all sys_file:2 occurrences, which is wrong, because the there are old and new sys_file:2 present in the records array.
I fixed this issue with setting a "processed" flag within fixUidLocalInSysFileReferenceRecords() as sibling of the "data" array when replacing the uid_local value of a sys_file_reference entry. Besides checking for file uid equality the if condition checks whether the "processed" flag was set.
There may be a better solution for this problem, i don´t know the impexp extension very well.
Updated by Christian Kuhn over 3 years ago
This one is nasty. It seems this issue currently also triggers some 'missing / wrong' images if installing ext:introduction distribution.
Special thanks for the explanation and analysis Robert, that helped a lot already.
It took me a while, but I was able to reproduce this locally with your description, then came up with a functional test case to reproduce that in code.
Now lets see if we can fix this issue.