1313use TYPO3 \CMS \Core \Database \Query \Restriction \WorkspaceRestriction ;
1414use TYPO3 \CMS \Core \Imaging \Icon ;
1515use TYPO3 \CMS \Core \Imaging \IconFactory ;
16+ use TYPO3 \CMS \Core \Resource \FileRepository ;
1617use TYPO3 \CMS \Core \Utility \GeneralUtility ;
1718
1819/**
@@ -34,9 +35,15 @@ class TransfusionRepository
3435 */
3536 protected IconFactory $ iconFactory ;
3637
38+ /**
39+ * @var FileRepository
40+ */
41+ protected FileRepository $ fileRepository ;
42+
3743 public function __construct ()
3844 {
3945 $ this ->iconFactory = GeneralUtility::makeInstance (IconFactory::class);
46+ $ this ->fileRepository = GeneralUtility::makeInstance (FileRepository::class);
4047 }
4148
4249 /**
@@ -105,7 +112,31 @@ protected function fetchDefaultLanguageRecordsAndConnectionsForTable(
105112 )
106113 ->orderBy ($ transFusionFields ['sorting ' ])
107114 ->executeQuery ();
115+ $ queryBuilder = GeneralUtility::makeInstance (ConnectionPool::class)->getQueryBuilderForTable ('sys_file_reference ' );
116+ $ fileFields = $ queryBuilder
117+ ->select (
118+ 'fieldname '
119+ )
120+ ->from ('sys_file_reference ' )
121+ ->where (
122+ $ queryBuilder ->expr ()->eq ('pid ' , $ queryBuilder ->createNamedParameter ($ page , Connection::PARAM_INT )),
123+ $ queryBuilder ->expr ()->eq ('tablenames ' , $ queryBuilder ->createNamedParameter ($ table )),
124+ $ queryBuilder ->expr ()->eq ('l10n_parent ' , 0 ),
125+ $ queryBuilder ->expr ()->eq ('sys_language_uid ' , 0 ),
126+ )
127+ ->groupBy ('fieldname ' )
128+ ->executeQuery ()
129+ ->fetchAllAssociativeIndexed ();
108130 while ($ record = $ defaultLanguageQuery ->fetchAssociative ()) {
131+ $ files = [];
132+ if (!empty ($ fileFields )) {
133+ foreach (array_keys ($ fileFields ) as $ fieldName ) {
134+ $ fileRecords = $ this ->fileRepository ->findByRelation ($ table , $ fieldName , $ record ['uid ' ]);
135+ if (!empty ($ fileRecords )) {
136+ $ files [$ fieldName ] = $ fileRecords ;
137+ }
138+ }
139+ }
109140 $ preparedRecord = [
110141 'uid ' => $ record ['uid ' ],
111142 'pid ' => $ record ['pid ' ],
@@ -118,6 +149,9 @@ protected function fetchDefaultLanguageRecordsAndConnectionsForTable(
118149 'icon ' => $ this ->getIconForRecord ($ table , $ record , $ record [$ transFusionFields ['label ' ]]),
119150 'previewData ' => $ record
120151 ];
152+ if (!empty ($ files )) {
153+ $ preparedRecord ['relatedFiles ' ] = $ files ;
154+ }
121155 $ preparedRecord ['column ' ] = ($ table === 'tt_content ' ? $ record [$ transFusionFields ['column ' ]] : '' );
122156 $ connectedRecords = $ this ->getConnectedTranslations (
123157 $ table ,
@@ -403,8 +437,37 @@ public function fetchDisconnectedRecordsAndPrepareDataMap(
403437 $ queryBuilder ->expr ()->eq ($ transFusionFields ['language ' ], $ language ),
404438 )
405439 ->executeQuery ();
440+
441+ $ queryBuilder = GeneralUtility::makeInstance (ConnectionPool::class)->getQueryBuilderForTable ('sys_file_reference ' );
442+ $ queryBuilder
443+ ->getRestrictions ()
444+ ->removeAll ()
445+ ->add (GeneralUtility::makeInstance (DeletedRestriction::class))
446+ ->add (GeneralUtility::makeInstance (WorkspaceRestriction::class));
447+ $ fileFields = $ queryBuilder
448+ ->select (
449+ 'fieldname '
450+ )
451+ ->from ('sys_file_reference ' )
452+ ->where (
453+ $ queryBuilder ->expr ()->eq ('pid ' , $ queryBuilder ->createNamedParameter ($ page , Connection::PARAM_INT )),
454+ $ queryBuilder ->expr ()->eq ('tablenames ' , $ queryBuilder ->createNamedParameter ($ table )),
455+ $ queryBuilder ->expr ()->eq ('sys_language_uid ' , $ language ),
456+ )
457+ ->groupBy ('fieldname ' )
458+ ->executeQuery ()
459+ ->fetchAllAssociativeIndexed ();
406460 while ($ record = $ disconnectedRecords ->fetchAssociative ()) {
407461 $ fetchPossibleParents = false ;
462+ $ files = [];
463+ if (!empty ($ fileFields )) {
464+ foreach (array_keys ($ fileFields ) as $ fieldName ) {
465+ $ fileRecords = $ this ->fileRepository ->findByRelation ($ table , $ fieldName , $ record ['uid ' ]);
466+ if (!empty ($ fileRecords )) {
467+ $ files [$ fieldName ] = $ fileRecords ;
468+ }
469+ }
470+ }
408471 $ preparedRecord = [
409472 'uid ' => $ record ['uid ' ],
410473 'type ' => $ record [$ transFusionFields ['type ' ]],
@@ -414,6 +477,9 @@ public function fetchDisconnectedRecordsAndPrepareDataMap(
414477 'original ' => $ record [$ transFusionFields ['original ' ]],
415478 'previewData ' => $ record
416479 ];
480+ if (!empty ($ files )) {
481+ $ preparedRecord ['relatedFiles ' ] = $ files ;
482+ }
417483 $ preparedRecord ['column ' ] = ($ table === 'tt_content ' ? $ record [$ transFusionFields ['column ' ]] : '' );
418484
419485 $ fetchFields = $ transFusionFields ['language ' ] . ', ' . $ transFusionFields ['type ' ];
0 commit comments