Skip to content

Commit d2e7567

Browse files
committed
[FEATURE] Add previews and toggles for file references of original records
1 parent 2de95de commit d2e7567

6 files changed

Lines changed: 401 additions & 83 deletions

File tree

Classes/Domain/Repository/TransfusionRepository.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use TYPO3\CMS\Core\Database\Query\Restriction\WorkspaceRestriction;
1414
use TYPO3\CMS\Core\Imaging\Icon;
1515
use TYPO3\CMS\Core\Imaging\IconFactory;
16+
use TYPO3\CMS\Core\Resource\FileRepository;
1617
use 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

Comments
 (0)