From 4cffb31e6954f1a3a90df95fefe0aa922358e058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Sat, 19 Oct 2024 15:12:18 +0200 Subject: [PATCH] feat: travel info pages --- config/sites/ep-reisen/config.yaml | 18 + .../Controller/TravelinfoController.php | 14 + .../ep_products/Classes/Domain/Model/Date.php | 74 ++++ .../Classes/Domain/Model/Travelinfo.php | 261 +++++++++++++ .../Classes/Domain/Model/TravelinfoLink.php | 61 +++ .../Classes/Domain/Model/TravelinfoTeaser.php | 76 ++++ .../Classes/Service/DateImportService.php | 11 +- .../Classes/Service/LabelService.php | 7 +- .../TCA/Overrides/tt_content.php | 6 + .../TCA/tx_epproducts_domain_model_date.php | 86 +++-- .../tx_epproducts_domain_model_travelinfo.php | 357 ++++++++++++++++++ ...epproducts_domain_model_travelinfolink.php | 164 ++++++++ ...products_domain_model_travelinfoteaser.php | 206 ++++++++++ .../ext/ep_products/ext_localconf.php | 8 + .../typo3conf/ext/ep_products/ext_tables.sql | 149 +++++++- .../BackendLayouts/Travelinfo.tsconfig | 21 ++ .../Configuration/TSconfig/Page/RTE.tsconfig | 5 + .../TypoScript/Page/Main.typoscript | 7 + .../Assets/images/signature_ep_team.png | Bin 0 -> 7291 bytes .../js/controllers/scroll_to_controller.js | 3 +- .../Private/Assets/scss/base/_typography.scss | 10 +- .../Private/Layouts/Page/Travelinfo.html | 24 ++ .../Private/Templates/Page/Travelinfo.html | 11 + .../Private/Templates/Travelinfo/Index.html | 266 +++++++++++++ 24 files changed, 1804 insertions(+), 41 deletions(-) create mode 100644 public/typo3conf/ext/ep_products/Classes/Controller/TravelinfoController.php create mode 100644 public/typo3conf/ext/ep_products/Classes/Domain/Model/Travelinfo.php create mode 100644 public/typo3conf/ext/ep_products/Classes/Domain/Model/TravelinfoLink.php create mode 100644 public/typo3conf/ext/ep_products/Classes/Domain/Model/TravelinfoTeaser.php create mode 100644 public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfo.php create mode 100644 public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfolink.php create mode 100644 public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfoteaser.php create mode 100644 public/typo3conf/ext/ep_theme/Configuration/TSconfig/Page/Mod/WebLayout/BackendLayouts/Travelinfo.tsconfig create mode 100644 public/typo3conf/ext/ep_theme/Resources/Private/Assets/images/signature_ep_team.png create mode 100644 public/typo3conf/ext/ep_theme/Resources/Private/Layouts/Page/Travelinfo.html create mode 100644 public/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Travelinfo.html create mode 100644 public/typo3conf/ext/ep_theme/Resources/Private/Templates/Travelinfo/Index.html diff --git a/config/sites/ep-reisen/config.yaml b/config/sites/ep-reisen/config.yaml index 8e3c5b19..975adc56 100644 --- a/config/sites/ep-reisen/config.yaml +++ b/config/sites/ep-reisen/config.yaml @@ -165,6 +165,24 @@ routeEnhancers: type: PersistedAliasMapper tableName: tx_epproducts_domain_model_product routeFieldName: path_segment + TravelinfoPlugin: + type: Extbase + extension: EpProducts + plugin: travelinfo + limitToPages: + - 2712 + routes: + - + routePath: '/{travelinfo}' + _controller: 'Travelinfo::index' + _arguments: + travelinfo: travelinfo + defaultController: 'Travelinfo::index' + aspects: + travelinfo: + type: PersistedAliasMapper + tableName: tx_epproducts_domain_model_travelinfo + routeFieldName: path_segment ContingentsIcalPlugin: type: Extbase extension: EpProducts diff --git a/public/typo3conf/ext/ep_products/Classes/Controller/TravelinfoController.php b/public/typo3conf/ext/ep_products/Classes/Controller/TravelinfoController.php new file mode 100644 index 00000000..0461a1cc --- /dev/null +++ b/public/typo3conf/ext/ep_products/Classes/Controller/TravelinfoController.php @@ -0,0 +1,14 @@ +view->assign('travelinfo', $travelinfo); + } +} diff --git a/public/typo3conf/ext/ep_products/Classes/Domain/Model/Date.php b/public/typo3conf/ext/ep_products/Classes/Domain/Model/Date.php index 0f555c80..5fd90f18 100644 --- a/public/typo3conf/ext/ep_products/Classes/Domain/Model/Date.php +++ b/public/typo3conf/ext/ep_products/Classes/Domain/Model/Date.php @@ -29,6 +29,30 @@ namespace EP\EpProducts\Domain\Model; class Date extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity { + /** + * @var Product + */ + protected $product; + + /** + * @var Hotel + */ + protected $hotel; + + /** + * @var Country + */ + protected $country; + + /** + * @var Region + */ + protected $region; + + /** + * @var City + */ + protected $city; /** * @var int @@ -140,6 +164,56 @@ class Date extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity */ protected $new = false; + public function getProduct() + { + return $this->product; + } + + public function setProduct($product) + { + $this->product = $product; + } + + public function getHotel() + { + return $this->hotel; + } + + public function setHotel($hotel) + { + $this->hotel = $hotel; + } + + public function getCountry() + { + return $this->country; + } + + public function setCountry($country) + { + $this->country = $country; + } + + public function getRegion() + { + return $this->region; + } + + public function setRegion($region) + { + $this->region = $region; + } + + public function getCity() + { + return $this->city; + } + + public function setCity($city) + { + $this->city = $city; + } + /** * @return int $bookingId */ diff --git a/public/typo3conf/ext/ep_products/Classes/Domain/Model/Travelinfo.php b/public/typo3conf/ext/ep_products/Classes/Domain/Model/Travelinfo.php new file mode 100644 index 00000000..d1338276 --- /dev/null +++ b/public/typo3conf/ext/ep_products/Classes/Domain/Model/Travelinfo.php @@ -0,0 +1,261 @@ + + */ + protected $teasers; + + /** + * @var ObjectStorage + */ + protected $links; + + /** + * @var Date + */ + protected $travelDate; + + public function __construct() + { + $this->initStorageObjects(); + } + + protected function initStorageObjects() + { + $this->teasers = new ObjectStorage(); + $this->links = new ObjectStorage(); + } + + /** + * @return string + */ + public function getTitle() + { + return $this->title; + } + + /** + * @param string $title + */ + public function setTitle($title) + { + $this->title = $title; + } + + public function getHeaderImage() + { + return $this->headerImage; + } + + public function setHeaderImage($headerImage) + { + $this->headerImage = $headerImage; + + return $this; + } + + public function getFooterImage() + { + return $this->footerImage; + } + + public function setFooterImage($footerImage) + { + $this->footerImage = $footerImage; + + return $this; + } + + public function getSubline() + { + return $this->subline; + } + + public function setSubline($subline) + { + $this->subline = $subline; + + return $this; + } + + public function getHeadline() + { + return $this->headline; + } + + public function setHeadline($headline) + { + $this->headline = $headline; + + return $this; + } + + public function getIntroText() + { + return $this->introText; + } + + public function setIntroText($introText) + { + $this->introText = $introText; + + return $this; + } + + public function getFooterText() + { + return $this->footerText; + } + + public function setFooterText($footerText) + { + $this->footerText = $footerText; + + return $this; + } + + public function getAdditionalInfo() + { + return $this->additionalInfo; + } + + public function setAdditionalInfo($additionalInfo) + { + $this->additionalInfo = $additionalInfo; + + return $this; + } + + public function getImportantPhoneNumbers() + { + return $this->importantPhoneNumbers; + } + + public function setImportantPhoneNumbers($importantPhoneNumbers) + { + $this->importantPhoneNumbers = $importantPhoneNumbers; + + return $this; + } + + public function getImportantLinks() + { + return $this->importantLinks; + } + + public function setImportantLinks($importantLinks) + { + $this->importantLinks = $importantLinks; + + return $this; + } + + public function getSelfArrangedText() + { + return $this->selfArrangedText; + } + + public function setSelfArrangedText($selfArrangedText) + { + $this->selfArrangedText = $selfArrangedText; + + return $this; + } + + public function getTeasers() + { + return $this->teasers; + } + + public function setTeasers($teasers) + { + $this->teasers = $teasers; + } + + public function getLinks() + { + return $this->links; + } + + public function setLinks($links) + { + $this->links = $links; + + return $this; + } + + public function getTravelDate() + { + return $this->travelDate; + } + + public function setTravelDate($travelDate) + { + $this->travelDate = $travelDate; + } +} + diff --git a/public/typo3conf/ext/ep_products/Classes/Domain/Model/TravelinfoLink.php b/public/typo3conf/ext/ep_products/Classes/Domain/Model/TravelinfoLink.php new file mode 100644 index 00000000..b85bdcfc --- /dev/null +++ b/public/typo3conf/ext/ep_products/Classes/Domain/Model/TravelinfoLink.php @@ -0,0 +1,61 @@ +title; + } + + /** + * @param string $title + */ + public function setTitle($title) + { + $this->title = $title; + } + + public function getLink() + { + return $this->link; + } + + public function setLink($link) + { + $this->link = $link; + } + + public function getIcon() + { + return $this->icon; + } + + public function setIcon($icon) + { + $this->icon = $icon; + } +} + diff --git a/public/typo3conf/ext/ep_products/Classes/Domain/Model/TravelinfoTeaser.php b/public/typo3conf/ext/ep_products/Classes/Domain/Model/TravelinfoTeaser.php new file mode 100644 index 00000000..dadbd70a --- /dev/null +++ b/public/typo3conf/ext/ep_products/Classes/Domain/Model/TravelinfoTeaser.php @@ -0,0 +1,76 @@ +title; + } + + /** + * @param string $title + */ + public function setTitle($title) + { + $this->title = $title; + } + + public function getBodytext() + { + return $this->bodytext; + } + + public function setBodytext($bodytext) + { + $this->bodytext = $bodytext; + } + + public function getIcon() + { + return $this->icon; + } + + public function setIcon($icon) + { + $this->icon = $icon; + } + + public function getImage() + { + return $this->image; + } + + public function setImage($image) + { + $this->image = $image; + } +} + diff --git a/public/typo3conf/ext/ep_products/Classes/Service/DateImportService.php b/public/typo3conf/ext/ep_products/Classes/Service/DateImportService.php index c1002e8b..7977df81 100644 --- a/public/typo3conf/ext/ep_products/Classes/Service/DateImportService.php +++ b/public/typo3conf/ext/ep_products/Classes/Service/DateImportService.php @@ -458,11 +458,20 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface if ($busProId === 0) { continue; } + $timestamp = (string) $attributes['zeit']; + $parts = explode(' ', $timestamp); + if (1 === count($parts)) { + [$timePart, ] = $parts; + $pickupTime = sprintf('%s Uhr', substr($timePart, 0, 5)); + } else { + [$datePart, $timePart] = $parts; + $pickupTime = sprintf('%s Uhr (%s)', substr($timePart, 0, 5), $datePart); + } $pickups[] = [ 'city' => $this->pickups[$busProId]['city'], 'street' => $this->pickups[$busProId]['street'], 'price' => (float) str_replace(',', '.', (string) $attributes['preis']), - 'time' => (string) $attributes['zeit'], + 'time' => $pickupTime, ]; } $date['pickups'] = serialize($pickups); diff --git a/public/typo3conf/ext/ep_products/Classes/Service/LabelService.php b/public/typo3conf/ext/ep_products/Classes/Service/LabelService.php index b9e3e38b..0d52d3a8 100644 --- a/public/typo3conf/ext/ep_products/Classes/Service/LabelService.php +++ b/public/typo3conf/ext/ep_products/Classes/Service/LabelService.php @@ -65,9 +65,10 @@ class LabelService public function getDateLabel(&$parameters, $parentObject) { $date = BackendUtility::getRecord('tx_epproducts_domain_model_date', $parameters['row']['uid']); - $dateFrom = new \DateTime($date['date_start']); - $dateTo = new \DateTime($date['date_end']); - $parameters['title'] = $dateFrom->format('d.m.Y') . ' - ' . $dateTo->format('d.m.Y'); +// $dateFrom = new \DateTime($date['date_start']); +// $dateTo = new \DateTime($date['date_end']); +// $parameters['title'] = sprintf('%s %s (%s)', $date['product_name'], $date['code'], $dateFrom->format('d.m.Y') . ' - ' . $dateTo->format('d.m.Y')); + $parameters['title'] = sprintf('%s (%s)', $date['product_name'], $date['code']); } /** diff --git a/public/typo3conf/ext/ep_products/Configuration/TCA/Overrides/tt_content.php b/public/typo3conf/ext/ep_products/Configuration/TCA/Overrides/tt_content.php index 0fb45fe2..895bbf25 100644 --- a/public/typo3conf/ext/ep_products/Configuration/TCA/Overrides/tt_content.php +++ b/public/typo3conf/ext/ep_products/Configuration/TCA/Overrides/tt_content.php @@ -155,6 +155,12 @@ call_user_func(function () { 'Merkliste' ); + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( + 'EP.EpProducts', + 'travelinfo', + 'Reiseinformationen' + ); + $GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['epproducts_product_detail'] = 'pi_flexform'; \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue( 'epproducts_product_detail', 'FILE:EXT:ep_products/Configuration/FlexForms/flexform_product_detail.xml' diff --git a/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_date.php b/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_date.php index 7f6980bf..b45f1644 100644 --- a/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_date.php +++ b/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_date.php @@ -31,9 +31,8 @@ return [ '1' => ['showitem' => ''], ], 'columns' => [ - 'sys_language_uid' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language', 'config' => [ 'type' => 'select', @@ -75,14 +74,14 @@ return [ ], 'hidden' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hidden', 'config' => [ 'type' => 'check', ], ], 'starttime' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime', 'config' => [ 'type' => 'input', @@ -97,7 +96,7 @@ return [ ], ], 'endtime' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', 'config' => [ 'type' => 'input', @@ -111,9 +110,38 @@ return [ 'renderType' => 'inputDateTime', ], ], - + 'product' => [ + 'exclude' => true, + 'config' => [ + 'type' => 'passthrough', + ], + ], + 'hotel' => [ + 'exclude' => true, + 'config' => [ + 'type' => 'passthrough', + ], + ], + 'country' => [ + 'exclude' => true, + 'config' => [ + 'type' => 'passthrough', + ], + ], + 'region' => [ + 'exclude' => true, + 'config' => [ + 'type' => 'passthrough', + ], + ], + 'city' => [ + 'exclude' => true, + 'config' => [ + 'type' => 'passthrough', + ], + ], 'bus_pro_id' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'BusPro ID', 'config' => [ 'type' => 'none', @@ -121,7 +149,7 @@ return [ ], ], 'hotel_bus_pro_id' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Hotel BusPro ID', 'config' => [ 'type' => 'none', @@ -129,7 +157,7 @@ return [ ], ], 'code' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Kürzel', 'config' => [ 'type' => 'input', @@ -138,7 +166,7 @@ return [ ], ], 'daytrip' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'tageweise buchbar', 'config' => [ 'type' => 'check', @@ -146,7 +174,7 @@ return [ ] ], 'season' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Saison', 'config' => [ 'type' => 'select', @@ -159,7 +187,7 @@ return [ ], ], 'date_start' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Datum von', 'config' => [ 'dbType' => 'date', @@ -172,7 +200,7 @@ return [ ], ], 'date_end' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Datum bis', 'config' => [ 'dbType' => 'date', @@ -185,7 +213,7 @@ return [ ], ], 'nights' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Nächte', 'config' => [ 'type' => 'input', @@ -194,21 +222,21 @@ return [ ], ], 'board' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Verpflegung', 'config' => [ 'type' => 'none', ], ], 'board_code' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Verpflegung Code', 'config' => [ 'type' => 'none', ], ], 'board_bus_pro_id' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Verpflegung BusPro ID', 'config' => [ 'type' => 'none', @@ -216,7 +244,7 @@ return [ ], ], 'bus_included' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Bus inklusive', 'config' => [ 'type' => 'check', @@ -224,7 +252,7 @@ return [ ] ], 'bus_available' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Bus verfügbar', 'config' => [ 'type' => 'check', @@ -232,7 +260,7 @@ return [ ] ], 'skipass_included' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Skipass inklusive', 'config' => [ 'type' => 'check', @@ -240,7 +268,7 @@ return [ ] ], 'bus_price' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Bus Preis', 'config' => [ 'type' => 'input', @@ -249,7 +277,7 @@ return [ ], ], 'services_included' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Inklusivleistungen', 'config' => [ 'type' => 'text', @@ -259,7 +287,7 @@ return [ ] ], 'services_general' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Leistungen', 'config' => [ 'type' => 'text', @@ -269,7 +297,7 @@ return [ ] ], 'pickups' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Zustiege', 'config' => [ 'type' => 'text', @@ -279,7 +307,7 @@ return [ ] ], 'discount' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Rabatt', 'config' => [ 'type' => 'input', @@ -288,7 +316,7 @@ return [ ], ], 'min_price' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'ab Preis', 'config' => [ 'type' => 'input', @@ -297,7 +325,7 @@ return [ ], ], 'pseudo_price' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'Pseudopreis', 'config' => [ 'type' => 'input', @@ -306,7 +334,7 @@ return [ ], ], 'available' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'verfügbar', 'config' => [ 'type' => 'input', @@ -315,7 +343,7 @@ return [ ], ], 'new' => [ - 'exclude' => 0, + 'exclude' => false, 'label' => 'neu', 'config' => [ 'type' => 'check', diff --git a/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfo.php b/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfo.php new file mode 100644 index 00000000..0b8c1c75 --- /dev/null +++ b/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfo.php @@ -0,0 +1,357 @@ + [ + 'title' => 'Reiseinformationen', + 'default_sortby' => 'ORDER BY title', + 'label' => 'title', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => true, + 'versioningWS' => true, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name', + 'iconfile' => 'EXT:ep_theme/Resources/Public/images/icon_ce.svg', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;basics,header_image,footer_image,subline,headline,intro_text,footer_text, + self_arranged_text,additional_info,important_phone_numbers,important_links,links,teasers', + ], + ], + 'palettes' => [ + 'basics' => ['showitem' => 'title,path_segment,--linebreak--,travel_date'], + ], + 'columns' => [ + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.default_value', 0] + ], + 'default' => 0, + ], + ], + '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' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_infobox', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_infobox.pid=###CURRENT_PID### AND tx_epproducts_domain_model_infobox.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' => 'input', + 'size' => 13, + 'eval' => 'datetime', + 'checkbox' => 0, + 'default' => 0, + 'behaviour' => [ + 'allowLanguageSynchronization' => true, + ], + 'renderType' => 'inputDateTime', + ], + ], + 'endtime' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'eval' => 'datetime', + 'checkbox' => 0, + 'default' => 0, + 'behaviour' => [ + 'allowLanguageSynchronization' => true, + ], + 'renderType' => 'inputDateTime', + ], + ], + + 'title' => [ + 'exclude' => false, + 'label' => 'Titel (nur intern genutzt)', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'subline' => [ + 'exclude' => 0, + 'label' => 'Subline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'headline' => [ + 'exclude' => 0, + 'label' => 'Headline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'header_image' => [ + 'exclude' => 0, + 'label' => 'Headerbild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'header_image', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + 'overrideChildTca' => [ + 'types' => [ + \TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [ + 'showitem' => ' + --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette, + --palette--;;filePalette', + ], + ], + ], + 'maxitems' => 1, + 'minitems' => 1, + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'footer_image' => [ + 'exclude' => 0, + 'label' => 'Footerbild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'footer_image', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + 'overrideChildTca' => [ + 'types' => [ + \TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [ + 'showitem' => ' + --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette, + --palette--;;filePalette', + ], + ], + ], + 'maxitems' => 1, + 'minitems' => 1, + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'travel_date' => [ + 'exclude' => false, + 'label' => 'Termin', + 'config' => [ + 'type' => 'group', + 'internal_type' => 'db', + 'allowed' => 'tx_epproducts_domain_model_date', + 'minitems' => 1, + 'maxitems' => 1, + 'size' => 1, + 'fieldControl' => [ + 'elementBrowser' => [ + 'disabled' => true, + ], + ], + 'fieldWizard' => [ + 'recordsOverview' => [ + 'disabled' => true, + ], + ], + 'suggestOptions' => [ + 'default' => [ + 'additionalSearchFields' => 'code,product_name,product_keywords', + 'orderBy' => 'code', + ], + ], + ], + ], + 'intro_text' => [ + 'exclude' => false, + 'label' => 'Introtext', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 3, + 'eval' => 'trim,required', + 'enableRichtext' => true, + ] + ], + 'footer_text' => [ + 'exclude' => false, + 'label' => 'Footertext', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 3, + 'eval' => 'trim,required', + 'enableRichtext' => true, + ] + ], + 'self_arranged_text' => [ + 'exclude' => false, + 'label' => 'Eigenanreise', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + 'enableRichtext' => true, + ] + ], + 'additional_info' => [ + 'exclude' => false, + 'label' => 'Weitere Infos', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + 'enableRichtext' => true, + ] + ], + 'important_phone_numbers' => [ + 'exclude' => false, + 'label' => 'Wichtige Telefonnummern', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + 'enableRichtext' => true, + ] + ], + 'important_links' => [ + 'exclude' => false, + 'label' => 'Wichtige Links', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + 'enableRichtext' => true, + ] + ], + 'teasers' => [ + 'exclude' => false, + 'label' => 'Inhalte', + 'config' => [ + 'type' => 'inline', + 'foreign_table' => 'tx_epproducts_domain_model_travelinfoteaser', + 'foreign_sortby' => 'sorting', + 'foreign_field' => 'tx_epproducts_travelinfo', + 'minitems' => 0, + 'maxitems' => 99, + 'appearance' => [ + 'collapseAll' => true, + 'expandSingle' => true, + 'levelLinksPosition' => 'bottom', + 'useSortable' => true, + 'showPossibleLocalizationRecords' => false, + 'showRemovedLocalizationRecords' => false, + 'showAllLocalizationLink' => false, + 'showSynchronizationLink' => false, + 'enabledControls' => [ + 'info' => false, + ], + ], + 'behaviour' => [ + 'allowLanguageSynchronization' => false, + ], + ] + ], + 'links' => [ + 'exclude' => false, + 'label' => 'Links', + 'config' => [ + 'type' => 'inline', + 'foreign_table' => 'tx_epproducts_domain_model_travelinfolink', + 'foreign_sortby' => 'sorting', + 'foreign_field' => 'tx_epproducts_travelinfo', + 'minitems' => 0, + 'maxitems' => 3, + 'appearance' => [ + 'collapseAll' => true, + 'expandSingle' => true, + 'levelLinksPosition' => 'bottom', + 'useSortable' => true, + 'showPossibleLocalizationRecords' => false, + 'showRemovedLocalizationRecords' => false, + 'showAllLocalizationLink' => false, + 'showSynchronizationLink' => false, + 'enabledControls' => [ + 'info' => false, + ], + ], + 'behaviour' => [ + 'allowLanguageSynchronization' => false, + ], + ] + ], + 'path_segment' => [ + 'exclude' => 0, + 'label' => 'URL', + 'config' => [ + 'type' => 'slug', + 'generatorOptions' => [ + 'fields' => ['title'], + 'prefixParentPageSlug' => false, + 'replacements' => [ + '/' => '-', + ], + ], + 'fallbackCharacter' => '-', + 'eval' => 'unique', + ], + ], + ], +]; diff --git a/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfolink.php b/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfolink.php new file mode 100644 index 00000000..8da329b1 --- /dev/null +++ b/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfolink.php @@ -0,0 +1,164 @@ + [ + 'title' => 'Reiseinfo Link', + 'label' => 'title', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => true, + 'versioningWS' => true, + 'hideTable' => true, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'title', + 'iconfile' => 'EXT:ep_theme/Resources/Public/images/icon_ce.svg', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;basics,link', + ], + ], + 'palettes' => [ + 'basics' => ['showitem' => 'title,icon,hidden'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => false, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.default_value', 0] + ], + 'default' => 0, + ], + ], + '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' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_faq', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_faq.pid=###CURRENT_PID### AND tx_epproducts_domain_model_faq.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' => false, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + 'starttime' => [ + 'exclude' => false, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'eval' => 'datetime', + 'checkbox' => 0, + 'default' => 0, + 'behaviour' => [ + 'allowLanguageSynchronization' => true, + ], + 'renderType' => 'inputDateTime', + ], + ], + 'endtime' => [ + 'exclude' => false, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'eval' => 'datetime', + 'checkbox' => 0, + 'default' => 0, + 'behaviour' => [ + 'allowLanguageSynchronization' => true, + ], + 'renderType' => 'inputDateTime', + ], + ], + + 'title' => [ + 'exclude' => false, + 'label' => 'Bezeichnung', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'link' => [ + 'exclude' => false, + 'label' => 'Bezeichnung', + 'config' => [ + 'type' => 'input', + 'renderType' => 'inputLink', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'icon' => [ + 'exclude' => 0, + 'label' => 'Icon', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Anreise', 'travel'], + ['Skipass', 'skipass'], + ['Kurse', 'course'], + ['Verpflegung', 'food'], + ['Gepäck', 'luggage'], + ['Lift', 'lift'], + ['Webcam', 'webcam'], + ['Wetter', 'weather'], + ['Wissenswertes', 'chat'], + ], + ], + ], + 'tx_epproducts_travelinfo' => [ + 'config' => [ + 'type' => 'passthrough' + ] + ], + 'sorting' => [ + 'config' => [ + 'type' => 'passthrough' + ] + ], + ], +]; diff --git a/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfoteaser.php b/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfoteaser.php new file mode 100644 index 00000000..ee58aaf8 --- /dev/null +++ b/public/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_travelinfoteaser.php @@ -0,0 +1,206 @@ + [ + 'title' => 'Reiseinfo Teaser', + 'label' => 'title', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => true, + 'versioningWS' => true, + 'hideTable' => true, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'title', + 'iconfile' => 'EXT:ep_theme/Resources/Public/images/icon_ce.svg', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;basics,bodytext,image', + ], + ], + 'palettes' => [ + 'basics' => ['showitem' => 'title,icon,hidden'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => false, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.default_value', 0] + ], + 'default' => 0, + ], + ], + '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' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_faq', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_faq.pid=###CURRENT_PID### AND tx_epproducts_domain_model_faq.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' => false, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + 'starttime' => [ + 'exclude' => false, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'eval' => 'datetime', + 'checkbox' => 0, + 'default' => 0, + 'behaviour' => [ + 'allowLanguageSynchronization' => true, + ], + 'renderType' => 'inputDateTime', + ], + ], + 'endtime' => [ + 'exclude' => false, + 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'eval' => 'datetime', + 'checkbox' => 0, + 'default' => 0, + 'behaviour' => [ + 'allowLanguageSynchronization' => true, + ], + 'renderType' => 'inputDateTime', + ], + ], + + 'title' => [ + 'exclude' => false, + 'label' => 'Bezeichnung/Überschrift', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'bodytext' => [ + 'exclude' => false, + 'label' => 'Text', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim,required', + 'enableRichtext' => true, + ] + ], + 'image' => [ + 'exclude' => 0, + 'label' => 'Bild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + 'overrideChildTca' => [ + 'types' => [ + \TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [ + 'showitem' => ' + --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette, + --palette--;;filePalette', + ], + ], + 'columns' => [ + 'crop' => [ + 'config' => [ + 'cropVariants' => [ + 'default' => [ + 'title' => 'Alle Geräte', + 'allowedAspectRatios' => [ + 'teaser' => [ + 'title' => 'quadtratisch', + 'value' => 1, + ], + ], + ], + ], + ], + ], + ], + ], + 'maxitems' => 1, + 'minitems' => 1, + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'icon' => [ + 'exclude' => 0, + 'label' => 'Icon', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Anreise', 'travel'], + ['Skipass', 'skipass'], + ['Kurse', 'course'], + ['Verpflegung', 'food'], + ['Gepäck', 'luggage'], + ['Lift', 'lift'], + ['Webcam', 'webcam'], + ['Wetter', 'weather'], + ['Wissenswertes', 'chat'], + ], + ], + ], + 'tx_epproducts_travelinfo' => [ + 'config' => [ + 'type' => 'passthrough' + ] + ], + 'sorting' => [ + 'config' => [ + 'type' => 'passthrough' + ] + ], + ], +]; diff --git a/public/typo3conf/ext/ep_products/ext_localconf.php b/public/typo3conf/ext/ep_products/ext_localconf.php index 1a76c1e5..b08333b8 100644 --- a/public/typo3conf/ext/ep_products/ext_localconf.php +++ b/public/typo3conf/ext/ep_products/ext_localconf.php @@ -248,6 +248,14 @@ $boot = function () { ] ); + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.ep_products', + 'travelinfo', + [ + 'Travelinfo' => 'index', + ] + ); + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( 'EP.ep_products', 'ajax', diff --git a/public/typo3conf/ext/ep_products/ext_tables.sql b/public/typo3conf/ext/ep_products/ext_tables.sql index cd562698..81c951d6 100644 --- a/public/typo3conf/ext/ep_products/ext_tables.sql +++ b/public/typo3conf/ext/ep_products/ext_tables.sql @@ -1131,8 +1131,8 @@ CREATE TABLE tx_epproducts_domain_model_contingent hotel int(11) unsigned DEFAULT '0', hotel_code varchar(64) DEFAULT '' NOT NULL, hotel_bus_pro_id varchar(64) DEFAULT '' NOT NULL, - room_code varchar(64) DEFAULT '' NOT NULL, - room_label varchar(64) DEFAULT '' NOT NULL, + room_code varchar(128) DEFAULT '' NOT NULL, + room_label varchar(255) DEFAULT '' NOT NULL, status tinyint(4) unsigned DEFAULT '0' NOT NULL, min_price int(11) DEFAULT '0' NOT NULL, min_nights int(11) DEFAULT '0' NOT NULL, @@ -1348,6 +1348,151 @@ CREATE TABLE tx_epproducts_domain_model_infobox ); +# +# Table structure for table 'tx_epproducts_domain_model_travelinfo' +# +CREATE TABLE tx_epproducts_domain_model_travelinfo +( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + title varchar(255) DEFAULT '' NOT NULL, + headline varchar(255) DEFAULT '' NOT NULL, + subline varchar(255) DEFAULT '' NOT NULL, + intro_text text DEFAULT '0' NOT NULL, + footer_text text DEFAULT '0' NOT NULL, + self_arranged_text text DEFAULT '0' NOT NULL, + additional_info text DEFAULT '0' NOT NULL, + important_phone_numbers text DEFAULT '0' NOT NULL, + important_links text DEFAULT '0' NOT NULL, + header_image int(11) DEFAULT '0' NOT NULL, + footer_image int(11) DEFAULT '0' NOT NULL, + links int(11) DEFAULT '0' NOT NULL, + teasers int(11) DEFAULT '0' NOT NULL, + travel_date int(11) DEFAULT '0' NOT NULL, + path_segment varchar(255) DEFAULT '' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid, t3ver_wsid), + KEY language (l10n_parent, sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_travelinfoteaser' +# +CREATE TABLE tx_epproducts_domain_model_travelinfoteaser +( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + title varchar(255) DEFAULT '' NOT NULL, + bodytext text DEFAULT '0' NOT NULL, + image int(11) DEFAULT '0' NOT NULL, + icon varchar(255) DEFAULT '' NOT NULL, + + tx_epproducts_travelinfo int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid, t3ver_wsid), + KEY language (l10n_parent, sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_travelinfolink' +# +CREATE TABLE tx_epproducts_domain_model_travelinfolink +( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + title varchar(255) DEFAULT '' NOT NULL, + link varchar(255) DEFAULT '' NOT NULL, + icon varchar(255) DEFAULT '' NOT NULL, + + tx_epproducts_travelinfo int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid, t3ver_wsid), + KEY language (l10n_parent, sys_language_uid) + +); + # # Table structure for table 'sys_domain' # diff --git a/public/typo3conf/ext/ep_theme/Configuration/TSconfig/Page/Mod/WebLayout/BackendLayouts/Travelinfo.tsconfig b/public/typo3conf/ext/ep_theme/Configuration/TSconfig/Page/Mod/WebLayout/BackendLayouts/Travelinfo.tsconfig new file mode 100644 index 00000000..9cdca4db --- /dev/null +++ b/public/typo3conf/ext/ep_theme/Configuration/TSconfig/Page/Mod/WebLayout/BackendLayouts/Travelinfo.tsconfig @@ -0,0 +1,21 @@ +mod.web_layout.BackendLayouts { + travelinfo { + title = Reiseinformationen + config { + backend_layout { + colCount = 1 + rowCount = 1 + rows { + 1 { + columns { + 1 { + name = Content + colPos = 0 + } + } + } + } + } + } + } +} diff --git a/public/typo3conf/ext/ep_theme/Configuration/TSconfig/Page/RTE.tsconfig b/public/typo3conf/ext/ep_theme/Configuration/TSconfig/Page/RTE.tsconfig index 61737b9f..5af5eec5 100644 --- a/public/typo3conf/ext/ep_theme/Configuration/TSconfig/Page/RTE.tsconfig +++ b/public/typo3conf/ext/ep_theme/Configuration/TSconfig/Page/RTE.tsconfig @@ -12,5 +12,10 @@ RTE { } } } + tx_epproducts_domain_model_travelinfo { + intro_text { + preset = ep-minimal + } + } } } diff --git a/public/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/Main.typoscript b/public/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/Main.typoscript index 31e129aa..89a4652b 100644 --- a/public/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/Main.typoscript +++ b/public/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/Main.typoscript @@ -215,6 +215,13 @@ page { # page.headerData.995 > [end] +[page["backend_layout"] == 'pagets__travelinfo'] + page.bodyTagCObject > + page.bodyTagCObject = TEXT + page.bodyTagCObject.value = + page.headerData.333 > +[end] + [request.getNormalizedParams() && like(request.getNormalizedParams().getHttpUserAgent(), "*Googlebot*")] page.headerData.990 > page.headerData.995 > diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/images/signature_ep_team.png b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/images/signature_ep_team.png new file mode 100644 index 0000000000000000000000000000000000000000..4d0cca5a341dbfd50f1097bfd862f19a97efc96f GIT binary patch literal 7291 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 literal 0 HcmV?d00001 diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/controllers/scroll_to_controller.js b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/controllers/scroll_to_controller.js index 2ddf93db..d6a5caa7 100644 --- a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/controllers/scroll_to_controller.js +++ b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/controllers/scroll_to_controller.js @@ -4,7 +4,8 @@ export default class extends Controller { static values = { target: String } - scroll() { + scroll(e) { + e.preventDefault() document.getElementById(this.targetValue).scrollIntoView({ behavior: 'smooth' }) } } diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/scss/base/_typography.scss b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/scss/base/_typography.scss index e05716da..9b6eb52d 100644 --- a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/scss/base/_typography.scss +++ b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/scss/base/_typography.scss @@ -1,21 +1,21 @@ h1, .headline--primary { - @apply block text-3xl md:text-4xl text-zinc-800 font-bold mb-2; + @apply block text-3xl md:text-4xl font-bold mb-2; } h2, .headline--secondary { - @apply block text-2xl md:text-3xl text-zinc-800 font-bold mb-2; + @apply block text-2xl md:text-3xl font-bold mb-2; } h3, .headline--3 { - @apply block text-xl md:text-2xl text-zinc-800 font-bold leading-6 mb-2; + @apply block text-xl md:text-2xl font-bold leading-6 mb-2; } h4, .headline--4 { - @apply block md:text-lg text-zinc-800 font-bold; + @apply block md:text-lg font-bold; } .headline--underlined:after { @@ -25,7 +25,7 @@ h4, } .subline { - @apply block text-xs md:text-sm font-normal leading-6 text-zinc-500; + @apply block text-xs md:text-sm font-normal leading-6 opacity-60; } // Lists diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Layouts/Page/Travelinfo.html b/public/typo3conf/ext/ep_theme/Resources/Private/Layouts/Page/Travelinfo.html new file mode 100644 index 00000000..efc2be5a --- /dev/null +++ b/public/typo3conf/ext/ep_theme/Resources/Private/Layouts/Page/Travelinfo.html @@ -0,0 +1,24 @@ + + +
+ + + + +
Login
+
My E&P
+
+
+ + + + + diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Travelinfo.html b/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Travelinfo.html new file mode 100644 index 00000000..a74b1391 --- /dev/null +++ b/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Travelinfo.html @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Travelinfo/Index.html b/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Travelinfo/Index.html new file mode 100644 index 00000000..994afc45 --- /dev/null +++ b/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Travelinfo/Index.html @@ -0,0 +1,266 @@ + + + + + +
+
+ +
+
+ + +
+
+
+
+

+ {travelinfo.subline} + {travelinfo.headline} +

+ {travelinfo.introText -> f:format.html()} +
+
+
+
+
+
+ +
+
+ Anreise +
+
+
+

+ Adresse +

+

+ {travelinfo.traveldate.hotel.name} +
+ {travelinfo.traveldate.hotel.address -> f:format.nl2br()} +

+ +

+ Bus-Zustiege +

+
    + +
  • + {pickup.city} ({pickup.street}): {pickup.time} +
  • +
    +
+
+ +

+ Eigenanreise +

+

+ {travelinfo.selfArrangedText -> f:format.html()} +

+
+
+
+
+
+

+ Sei vorbereitet! + Organisatorisches +

+
+ +
+ +
+
+ +
+
+ +
+
+
+
+

+ {teaser.title} +

+ {teaser.bodytext -> f:format.html()} +
+
+
+
+
+
+
+ +
+
+
+ +
+
+ Weitere Infos +
+
+
+ {travelinfo.additionalInfo -> f:format.html()} +
+
+
+ +
+
+
+ Wichtige Telefon­nummern +
+
+
+ {travelinfo.importantPhoneNumbers -> f:format.html()} +
+
+
+ +
+
+
+ Wichtige Links vor Ort +
+
+
+ {travelinfo.importantLinks -> f:format.html()} +
+
+
+
+
+
+ {travelinfo.footerText -> f:format.html()} + +
+
+ +
+
+ + + +
+ +
+
+ {item.title -> f:format.raw()} +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +