From 2999abc16c8076f61bfda686de11c07925da1feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Sat, 24 Oct 2026 12:05:01 +0200 Subject: [PATCH] feat: contact, text with image, YouTube/Vimeo video, disrupter and map elements on TYPO3 13 Restored from a46918d, TCA ported to TYPO3 13. Their markup matches TYPO3 10 on every page that renders. Headers with the default layout stay hidden, as on TYPO3 10. Co-Authored-By: Claude Opus 5.5 --- .../Overrides/tt_content_element_contact.php | 46 ++++ .../tt_content_element_disrupter.php | 55 +++++ .../TCA/Overrides/tt_content_element_gmap.php | 32 +++ .../Overrides/tt_content_element_ytvideo.php | 40 ++++ .../TCA/tx_eptheme_domain_model_disrupter.php | 198 ++++++++++++++++++ .../ContentElements/contact.typoscript | 23 ++ .../ContentElements/disrupter.typoscript | 28 +++ .../ContentElements/gmap.typoscript | 23 ++ .../ContentElements/ytvideo.typoscript | 4 + .../Extensions/FluidStyledContent.typoscript | 2 + .../Private/Partials/Disrupter/Large.html | 63 ++++++ .../Partials/Disrupter/LastChance.html | 29 +++ .../Private/Partials/Disrupter/Reminder.html | 30 +++ .../Private/Partials/Disrupter/Small.html | 42 ++++ .../Templates/FluidStyledContent/Contact.html | 31 +++ .../FluidStyledContent/Disrupter.html | 26 +++ .../Templates/FluidStyledContent/Gmap.html | 19 ++ .../Templates/FluidStyledContent/Textpic.html | 30 +++ .../FluidStyledContent/YoutubeVideo.html | 25 +++ 19 files changed, 746 insertions(+) create mode 100644 packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_contact.php create mode 100644 packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_disrupter.php create mode 100644 packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_gmap.php create mode 100644 packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_ytvideo.php create mode 100644 packages/ep_theme/Configuration/TCA/tx_eptheme_domain_model_disrupter.php create mode 100644 packages/ep_theme/Configuration/TypoScript/ContentElements/contact.typoscript create mode 100644 packages/ep_theme/Configuration/TypoScript/ContentElements/disrupter.typoscript create mode 100644 packages/ep_theme/Configuration/TypoScript/ContentElements/gmap.typoscript create mode 100644 packages/ep_theme/Configuration/TypoScript/ContentElements/ytvideo.typoscript create mode 100644 packages/ep_theme/Resources/Private/Partials/Disrupter/Large.html create mode 100644 packages/ep_theme/Resources/Private/Partials/Disrupter/LastChance.html create mode 100644 packages/ep_theme/Resources/Private/Partials/Disrupter/Reminder.html create mode 100644 packages/ep_theme/Resources/Private/Partials/Disrupter/Small.html create mode 100644 packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Contact.html create mode 100644 packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Disrupter.html create mode 100644 packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Gmap.html create mode 100644 packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Textpic.html create mode 100644 packages/ep_theme/Resources/Private/Templates/FluidStyledContent/YoutubeVideo.html diff --git a/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_contact.php b/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_contact.php new file mode 100644 index 0000000..e95880a --- /dev/null +++ b/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_contact.php @@ -0,0 +1,46 @@ + 'Ansprechpartner', + 'value' => 'contact', + 'icon' => 'content-image' + ], + 'teaser_booking_link', + 'after' + ); + + $GLOBALS['TCA']['tt_content']['columns']['tx_eptheme_contact'] = [ + 'exclude' => 0, + 'label' => 'Mitarbeiter', + 'config' => [ + 'type' => 'select', + 'default' => 0, + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_teammember', + 'foreign_table_where' => 'ORDER BY name', + 'minitems' => 1, + 'maxitems' => 1, + ] + ]; + + $GLOBALS['TCA']['tt_content']['types']['contact'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + tx_eptheme_contact, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + +}); diff --git a/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_disrupter.php b/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_disrupter.php new file mode 100644 index 0000000..2060251 --- /dev/null +++ b/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_disrupter.php @@ -0,0 +1,55 @@ + 'Störer (neu)', + 'value' => 'disrupter', + 'icon' => 'content-image' + ], + 'teaser_product', + 'after' + ); + + $GLOBALS['TCA']['tt_content']['columns']['tx_eptheme_disrupter'] = [ + 'exclude' => 0, + 'label' => 'Störer', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_eptheme_domain_model_disrupter', + 'maxitems' => 1, + 'minitems' => 1, + 'foreign_table_where' => 'ORDER BY headline ASC', + 'MM' => 'tx_eptheme_ttcontent_tx_eptheme_disrupter_mm', + ], + ]; + + $GLOBALS['TCA']['tt_content']['types']['disrupter'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, tx_eptheme_disrupter, + --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance, + layout;' . $frontendLanguageFilePrefix . 'layout_formlabel, tx_eptheme_background, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + 'columnsOverrides' => [ + ] + ]; + + ExtensionManagementUtility::addPiFlexFormValue( + '*', + 'FILE:EXT:ep_theme/Configuration/FlexForms/flexform_disturber.xml', + 'disrupter' + ); + +}); diff --git a/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_gmap.php b/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_gmap.php new file mode 100644 index 0000000..e4c45d8 --- /dev/null +++ b/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_gmap.php @@ -0,0 +1,32 @@ + 'Google Map', + 'value' => 'gmap', + 'icon' => 'content-image' + ], + 'ytvideo', + 'after' + ); + + $GLOBALS['TCA']['tt_content']['types']['gmap'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + tx_eptheme_context_region, tx_eptheme_context_hotel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + +}); diff --git a/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_ytvideo.php b/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_ytvideo.php new file mode 100644 index 0000000..48de1c9 --- /dev/null +++ b/packages/ep_theme/Configuration/TCA/Overrides/tt_content_element_ytvideo.php @@ -0,0 +1,40 @@ + 'YouTube/Vimeo Video', + 'value' => 'ytvideo', + 'icon' => 'content-image' + ], + 'textmedia', + 'after' + ); + + $GLOBALS['TCA']['tt_content']['types']['ytvideo'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + layout, header_link, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + 'columnsOverrides' => [ + 'header_link' => [ + 'label' => 'YouTube URL/Vimeo ID', + ], + 'layout' => [ + 'label' => 'Typ', + ], + ], + ]; + +}); diff --git a/packages/ep_theme/Configuration/TCA/tx_eptheme_domain_model_disrupter.php b/packages/ep_theme/Configuration/TCA/tx_eptheme_domain_model_disrupter.php new file mode 100644 index 0000000..d374aa7 --- /dev/null +++ b/packages/ep_theme/Configuration/TCA/tx_eptheme_domain_model_disrupter.php @@ -0,0 +1,198 @@ + [ + 'title' => 'Störer', + 'default_sortby' => 'ORDER BY headline', + 'label' => 'headline', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'dividers2tabs' => true, + 'versioningWS' => true, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'headline,text', + 'iconfile' => 'EXT:ep_theme/Resources/Public/images/icon_ce.svg', + ], + 'types' => [ + '1' => [ + 'showitem' => 'sys_language_uid, hidden, layout, headline, text, image, pi_flexform', + ], + ], + 'palettes' => [ + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language', + 'config' => ['type' => 'language'], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'default' => 0, + 'renderType' => 'selectSingle', + 'items' => [ + ['label' => '', 'value' => 0], + ], + 'foreign_table' => 'tx_eptheme_domain_model_disrupter', + 'foreign_table_where' => 'AND tx_eptheme_domain_model_disrupter.pid=###CURRENT_PID### AND tx_eptheme_domain_model_disrupter.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + 'starttime' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime', + 'config' => [ + 'type' => 'datetime', + 'size' => 13, + 'checkbox' => 0, + 'default' => 0, + 'behaviour' => [ + 'allowLanguageSynchronization' => true, + ], + ], + ], + 'endtime' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', + 'config' => [ + 'type' => 'datetime', + 'size' => 13, + 'checkbox' => 0, + 'default' => 0, + 'behaviour' => [ + 'allowLanguageSynchronization' => true, + ], + ], + ], + + 'headline' => [ + 'exclude' => 0, + 'label' => 'Headline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'layout' => [ + 'exclude' => 0, + 'label' => 'Layout', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['label' => 'klein', 'value' => 0], + ['label' => 'groß', 'value' => 1], + ['label' => 'Event klein', 'value' => 2], + ['label' => 'Event groß', 'value' => 3], + ], + ], + ], + 'text' => [ + 'exclude' => 0, + 'label' => 'Text', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 5, + 'eval' => 'trim', + 'enableRichtext' => true, + ], + ], + 'image' => [ + 'exclude' => 0, + 'label' => 'Bild', + 'config' => [ + 'type' => 'file', + 'allowed' => 'jpg,jpeg', + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference', + 'fileUploadAllowed' => false, + ], + 'overrideChildTca' => [ + 'types' => [ + FileType::IMAGE->value => [ + 'showitem' => ' + --palette--;LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette, + --palette--;;filePalette' + ], + ], + 'columns' => [ + 'crop' => [ + 'config' => [ + 'cropVariants' => [ + 'default' => [ + 'title' => 'Alle Geräte', + 'allowedAspectRatios' => [ + 'square' => [ + 'title' => 'quadratisch', + 'value' => 1, + ], + 'free' => [ + 'title' => 'Frei', + 'value' => 'NaN', + ], + ], + ], + ], + ], + ], + ], + ], + 'maxitems' => 1, + 'minitems' => 1, + ], + ], + 'pi_flexform' => [ + 'exclude' => 0, + 'label' => 'Buttons', + 'config' => [ + 'type' => 'flex', + 'ds' => [ + 'default' => 'FILE:EXT:ep_theme/Configuration/FlexForms/flexform_disturber.xml', + ], + ] + ], + 'tt_content' => [ + 'exclude' => 0, + 'config' => [ + 'type' => 'passthrough', + ], + ], + ], +]; diff --git a/packages/ep_theme/Configuration/TypoScript/ContentElements/contact.typoscript b/packages/ep_theme/Configuration/TypoScript/ContentElements/contact.typoscript new file mode 100644 index 0000000..919d6b7 --- /dev/null +++ b/packages/ep_theme/Configuration/TypoScript/ContentElements/contact.typoscript @@ -0,0 +1,23 @@ +tt_content.contact =< lib.contentElement +tt_content.contact { + templateName = Contact + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor + 10 { + table = tx_epproducts_domain_model_teammember + where.data = field:tx_eptheme_contact + where.wrap = uid=| + pidInList = {$plugin.tx_eptheme.settings.teamMemberStoragePid} + as = contact + + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor + 10 { + references.fieldName = image + references.table = tx_epproducts_domain_model_teammember + as = image + } + } + } + } +} diff --git a/packages/ep_theme/Configuration/TypoScript/ContentElements/disrupter.typoscript b/packages/ep_theme/Configuration/TypoScript/ContentElements/disrupter.typoscript new file mode 100644 index 0000000..cffda85 --- /dev/null +++ b/packages/ep_theme/Configuration/TypoScript/ContentElements/disrupter.typoscript @@ -0,0 +1,28 @@ +tt_content.disrupter =< lib.contentElement +tt_content.disrupter { + templateName = Disrupter + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor + 10 { + table = tx_eptheme_domain_model_disrupter + pidInList = {$plugin.tx_eptheme.settings.disrupterStoragePid} + join = tx_eptheme_ttcontent_tx_eptheme_disrupter_mm ON tx_eptheme_ttcontent_tx_eptheme_disrupter_mm.uid_foreign = tx_eptheme_domain_model_disrupter.uid + where { + data = field:uid + intval = 1 + wrap = tx_eptheme_ttcontent_tx_eptheme_disrupter_mm.uid_local=| + } + as = disrupter + + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor + 10 { + references.fieldName = image + references.table = tx_eptheme_domain_model_disrupter + as = image + } + 20 = EP\EpTheme\DataProcessing\FlexFormProcessor + } + } + } +} diff --git a/packages/ep_theme/Configuration/TypoScript/ContentElements/gmap.typoscript b/packages/ep_theme/Configuration/TypoScript/ContentElements/gmap.typoscript new file mode 100644 index 0000000..c141099 --- /dev/null +++ b/packages/ep_theme/Configuration/TypoScript/ContentElements/gmap.typoscript @@ -0,0 +1,23 @@ +tt_content.gmap =< tt_content.teaser_product +tt_content.gmap { + templateName = Gmap + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor + 10 { + table = tx_epproducts_domain_model_hotel + where.data = field:tx_eptheme_context_hotel + where.wrap = uid=| + pidInList = {$plugin.tx_epproducts.settings.hotelsStoragePid} + as = hotel + } + 20 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor + 20 { + table = tx_epproducts_domain_model_region + where.data = field:tx_eptheme_context_region + where.wrap = uid=| + pidInList = {$plugin.tx_epproducts.settings.destinationsStoragePid} + recursive = 2 + as = region + } + } +} diff --git a/packages/ep_theme/Configuration/TypoScript/ContentElements/ytvideo.typoscript b/packages/ep_theme/Configuration/TypoScript/ContentElements/ytvideo.typoscript new file mode 100644 index 0000000..2107bc1 --- /dev/null +++ b/packages/ep_theme/Configuration/TypoScript/ContentElements/ytvideo.typoscript @@ -0,0 +1,4 @@ +tt_content.ytvideo =< lib.contentElement +tt_content.ytvideo { + templateName = YoutubeVideo +} diff --git a/packages/ep_theme/Configuration/TypoScript/Extensions/FluidStyledContent.typoscript b/packages/ep_theme/Configuration/TypoScript/Extensions/FluidStyledContent.typoscript index 35ac04b..4437f36 100644 --- a/packages/ep_theme/Configuration/TypoScript/Extensions/FluidStyledContent.typoscript +++ b/packages/ep_theme/Configuration/TypoScript/Extensions/FluidStyledContent.typoscript @@ -10,4 +10,6 @@ lib.contentElement { settings.mapTileUrl = {$plugin.tx_eptheme.settings.mapTileUrl} settings.mapApiKey = {$plugin.tx_eptheme.settings.mapApiKey} settings.mapAttribution = {$plugin.tx_eptheme.settings.mapAttribution} + # As on TYPO3 10: headers with the default layout are not shown (editors rely on it) + settings.defaultHeaderType = } diff --git a/packages/ep_theme/Resources/Private/Partials/Disrupter/Large.html b/packages/ep_theme/Resources/Private/Partials/Disrupter/Large.html new file mode 100644 index 0000000..38230a7 --- /dev/null +++ b/packages/ep_theme/Resources/Private/Partials/Disrupter/Large.html @@ -0,0 +1,63 @@ + + +
+ + + +
+ +
+ {data.subheadline} + {data.headline} +
+ {data.bodytext -> f:format.html()} +
+ +
+ + + {button.container.label} + + +
+
+
+
+ + + +
+ + diff --git a/packages/ep_theme/Resources/Private/Partials/Disrupter/LastChance.html b/packages/ep_theme/Resources/Private/Partials/Disrupter/LastChance.html new file mode 100644 index 0000000..a76eb08 --- /dev/null +++ b/packages/ep_theme/Resources/Private/Partials/Disrupter/LastChance.html @@ -0,0 +1,29 @@ + + +
+ +
+
+ {data.headline} +
+
+ {data.text -> f:format.html()} +
+
+ {data.flexForm.buttons -> v:iterator.first() -> v:variable.set(name: 'button')} + + {button.container.label -> f:format.raw()} + +
+
+ +
+ + diff --git a/packages/ep_theme/Resources/Private/Partials/Disrupter/Reminder.html b/packages/ep_theme/Resources/Private/Partials/Disrupter/Reminder.html new file mode 100644 index 0000000..5974779 --- /dev/null +++ b/packages/ep_theme/Resources/Private/Partials/Disrupter/Reminder.html @@ -0,0 +1,30 @@ + + + +
+
+ {data.headline} +
+ +
+ {data.text -> f:format.html()} +
+ + {button.container.label -> f:format.raw()} + +
+
+ + diff --git a/packages/ep_theme/Resources/Private/Partials/Disrupter/Small.html b/packages/ep_theme/Resources/Private/Partials/Disrupter/Small.html new file mode 100644 index 0000000..36925d7 --- /dev/null +++ b/packages/ep_theme/Resources/Private/Partials/Disrupter/Small.html @@ -0,0 +1,42 @@ + + +
+ +
+
+
+ + + +
+
+ {data.headline} + {data.text -> f:format.html()} +
+ + + + {button.container.label} + + + +
+
+
+
+ +
+ + diff --git a/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Contact.html b/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Contact.html new file mode 100644 index 0000000..3c44074 --- /dev/null +++ b/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Contact.html @@ -0,0 +1,31 @@ + + + + + +
+
+
+ + + +
+
+ {contact.0.data.name} +
{contact.0.data.tasks -> f:format.nl2br()}
+
{contact.0.data.phone}
+
E-Mail
+
+
+
+
+ + diff --git a/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Disrupter.html b/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Disrupter.html new file mode 100644 index 0000000..5fe1e8b --- /dev/null +++ b/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Disrupter.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Gmap.html b/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Gmap.html new file mode 100644 index 0000000..a8df501 --- /dev/null +++ b/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Gmap.html @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Textpic.html b/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Textpic.html new file mode 100644 index 0000000..62c4211 --- /dev/null +++ b/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/Textpic.html @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/YoutubeVideo.html b/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/YoutubeVideo.html new file mode 100644 index 0000000..816f874 --- /dev/null +++ b/packages/ep_theme/Resources/Private/Templates/FluidStyledContent/YoutubeVideo.html @@ -0,0 +1,25 @@ + + + + + +
+ +
+
+ Bitte Marketing-Cookies akzeptieren, um dieses Video anzusehen. +
+
+
+
+ +