astehlik/typo3-extension-html5mediakit

View on GitHub
Configuration/TCA/tx_html5mediakit_domain_model_media.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

declare(strict_types=1);

use Sto\Html5mediakit\Domain\Model\Enumeration\MediaType;
use TYPO3\CMS\Core\Resource\AbstractFile;

$languagePrefix = 'LLL:EXT:html5mediakit/Resources/Private/Language/locallang_db.xlf:';
$languagePrefixColumn = $languagePrefix . 'tx_html5mediakit_domain_model_media.';
$languagePrefixCsh = 'LLL:EXT:html5mediakit/Resources/Private/Language/locallang_csh_media.xlf:';
$lllAddImageFileReference = 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference';

$buildFileFieldConfig = static function (
    array|string $allowedFileTypes,
    int $maxitems = 1,
    string $showitem = '',
    string $createNewRelationLinkTitle = '',
) use (
    $languagePrefix
) {
    $showitem .= ',--palette--;;filePalette';
    $showitem = ltrim($showitem, ',');
    $allowsMultipleFiles = $maxitems === 0 || $maxitems > 1;

    if ($createNewRelationLinkTitle === '') {
        $createNewRelationLinkTitle = $languagePrefix . 'choose_file';
    }

    $config = [
        'type' => 'file',
        'allowed' => $allowedFileTypes,
        'appearance' => [
            'showPossibleLocalizationRecords' => true,
            'showAllLocalizationLink' => $allowsMultipleFiles,
            'createNewRelationLinkTitle' => $createNewRelationLinkTitle,
            'useSortable' => $allowsMultipleFiles,
            'enabledControls' => [
                'info' => true,
                'new' => $allowsMultipleFiles,
                'dragdrop' => $allowsMultipleFiles,
                'sort' => $allowsMultipleFiles,
                'hide' => $allowsMultipleFiles,
                'delete' => true,
                'localize' => true,
            ],
        ],
        'overrideChildTca' => [
            'types' => [
                AbstractFile::FILETYPE_APPLICATION => ['showitem' => $showitem],
                AbstractFile::FILETYPE_AUDIO => ['showitem' => $showitem],
                AbstractFile::FILETYPE_IMAGE => ['showitem' => $showitem],
                AbstractFile::FILETYPE_TEXT => ['showitem' => $showitem],
                AbstractFile::FILETYPE_UNKNOWN => ['showitem' => $showitem],
                AbstractFile::FILETYPE_VIDEO => ['showitem' => $showitem],
            ],
        ],
        'security' => ['ignorePageTypeRestriction' => true],
    ];

    if ($maxitems > 0) {
        $config['maxitems'] = $maxitems;
    }

    return $config;
};

return [
    'ctrl' => [
        'label' => 'caption',
        'tstamp' => 'tstamp',
        'crdate' => 'crdate',
        'delete' => 'deleted',
        'title' => $languagePrefix . 'tx_html5mediakit_domain_model_media',
        'type' => 'type',
        'typeicon_column' => 'type',
        'typeicon_classes' => [
            'default' => 'mimetypes-media-video',
            MediaType::VIDEO => 'mimetypes-media-video',
            MediaType::AUDIO => 'mimetypes-media-audio',
        ],
        'hideTable' => true,
        'languageField' => 'sys_language_uid',
        'transOrigPointerField' => 'l10n_parent',
        'transOrigDiffSourceField' => 'l10n_diffsource',
        'security' => ['ignorePageTypeRestriction' => true],
    ],
    'columns' => [
        'type' => [
            'label' => $languagePrefixColumn . 'type',
            'description' => $languagePrefixCsh . 'type.description',
            'config' => [
                'type' => 'select',
                'renderType' => 'selectSingle',
                'items' => [
                    [
                        'label' => $languagePrefixColumn . 'type.I.video',
                        'value' => MediaType::VIDEO,
                    ],
                    [
                        'label' => $languagePrefixColumn . 'type.I.audio',
                        'value' => MediaType::AUDIO,
                    ],
                ],
                'default' => MediaType::VIDEO,
                'size' => 1,
                'maxitems' => 1,
            ],
        ],
        'tracks' => [
            'label' => $languagePrefixColumn . 'tracks',
            'description' => $languagePrefixCsh . 'tracks.description',
            'config' => $buildFileFieldConfig(
                ['vtt'],
                0,
                'tx_html5mediakit_track_kind, tx_html5mediakit_track_label, tx_html5mediakit_track_srclang',
            ),
        ],
        'caption' => [
            'label' => $languagePrefixColumn . 'caption',
            'description' => $languagePrefixCsh . 'caption.description',
            'config' => ['type' => 'input'],
        ],
        'description' => [
            'label' => $languagePrefixColumn . 'description',
            'description' => $languagePrefixCsh . 'description.description',
            'config' => [
                'type' => 'text',
                'rows' => 5,
                'cols' => 30,
                'enableRichtext' => true,
            ],
        ],
        'l10n_diffsource' => [
            'config' => ['type' => 'passthrough'],
        ],
        'l10n_parent' => [
            'displayCond' => 'FIELD:sys_language_uid:>:0',
            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
            'config' => [
                'type' => 'select',
                'renderType' => 'selectSingle',
                'items' => [
                    [
                        'label' => '',
                        'value' => 0,
                    ],
                ],
                'foreign_table' => 'tx_html5mediakit_domain_model_media',
                'foreign_table_where' => 'AND {#tx_html5mediakit_domain_model_media}.{#pid}=###CURRENT_PID###'
                    . ' AND {#tx_html5mediakit_domain_model_media}.{#sys_language_uid} IN (-1,0)',
                'default' => 0,
            ],
        ],
        'mp3' => [
            'label' => $languagePrefixColumn . 'mp3',
            'description' => $languagePrefixCsh . 'mp3.description',
            'config' => $buildFileFieldConfig(['mp3']),
        ],
        'ogg' => [
            'label' => $languagePrefixColumn . 'ogg',
            'description' => $languagePrefixCsh . 'ogg.description',
            'config' => $buildFileFieldConfig(
                [
                    'ogg',
                    'ogx',
                ],
            ),
        ],
        'h264' => [
            'label' => $languagePrefixColumn . 'h264',
            'description' => $languagePrefixCsh . 'h264.description',
            'config' => $buildFileFieldConfig(['mp4']),
        ],
        'ogv' => [
            'label' => $languagePrefixColumn . 'ogv',
            'description' => $languagePrefixCsh . 'ogv.description',
            'config' => $buildFileFieldConfig(['ogv']),
        ],
        'poster' => [
            'label' => $languagePrefixColumn . 'poster',
            'config' => $buildFileFieldConfig(
                allowedFileTypes: 'common-image-types',
                createNewRelationLinkTitle: $lllAddImageFileReference,
            ),
        ],
        'sys_language_uid' => [
            'exclude' => true,
            'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
            'config' => ['type' => 'language'],
        ],
        'web_m' => [
            'label' => $languagePrefixColumn . 'web_m',
            'description' => $languagePrefixCsh . 'web_m.description',
            'config' => $buildFileFieldConfig(['webm']),
        ],
        'content_element' => [
            'config' => ['type' => 'passthrough'],
        ],
        'tstamp' => [
            'config' => ['type' => 'passthrough'],
        ],
    ],
    'types' => [
        '0' => ['showitem' => 'type,--palette--;;hiddenFields'],
        'video' => [
            'showitem' => '
                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.media,
                    type, h264, web_m, ogv, poster,
                    --palette--;;hiddenFields,
                --div--;' . $languagePrefixColumn . 'tracks,
                    tracks,
                --div--;' . $languagePrefixColumn . 'palette.metadata;metadata,
                    caption, description,
                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
                    --palette--;;language,
            ',
        ],
        'audio' => [
            'showitem' => '
                --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.media,
                    type, mp3, ogg,
                    --palette--;;hiddenFields,
                --div--;' . $languagePrefixColumn . 'tracks,
                    tracks,
                --div--;' . $languagePrefixColumn . 'palette.metadata;metadata,
                    caption, description,
                --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
                    --palette--;;language,
            ',
        ],
    ],
    'palettes' => [
        'language' => [
            'showitem' => '
                sys_language_uid, l10n_parent
            ',
        ],
    ],
];