feat: travel info pages

This commit is contained in:
Björn Fromme
2024-10-21 18:27:35 +02:00
parent 95478a7caf
commit 4cffb31e69
24 changed files with 1804 additions and 41 deletions
+18
View File
@@ -165,6 +165,24 @@ routeEnhancers:
type: PersistedAliasMapper type: PersistedAliasMapper
tableName: tx_epproducts_domain_model_product tableName: tx_epproducts_domain_model_product
routeFieldName: path_segment 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: ContingentsIcalPlugin:
type: Extbase type: Extbase
extension: EpProducts extension: EpProducts
@@ -0,0 +1,14 @@
<?php
namespace EP\EpProducts\Controller;
use EP\EpProducts\Domain\Model\Travelinfo;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
class TravelinfoController extends ActionController
{
public function indexAction(Travelinfo $travelinfo)
{
$this->view->assign('travelinfo', $travelinfo);
}
}
@@ -29,6 +29,30 @@ namespace EP\EpProducts\Domain\Model;
class Date extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity 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 * @var int
@@ -140,6 +164,56 @@ class Date extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
*/ */
protected $new = false; 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 * @return int $bookingId
*/ */
@@ -0,0 +1,261 @@
<?php
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
class Travelinfo extends AbstractEntity
{
/**
* @var string
*/
protected $title;
/**
* @var FileReference
*/
protected $headerImage;
/**
* @var FileReference
*/
protected $footerImage;
/**
* @var string
*/
protected $subline;
/**
* @var string
*/
protected $headline;
/**
* @var string
*/
protected $introText;
/**
* @var string
*/
protected $footerText;
/**
* @var string
*/
protected $additionalInfo;
/**
* @var string
*/
protected $importantPhoneNumbers;
/**
* @var string
*/
protected $importantLinks;
/**
* @var string
*/
protected $selfArrangedText;
/**
* @var ObjectStorage<TravelinfoTeaser>
*/
protected $teasers;
/**
* @var ObjectStorage<TravelinfoLink>
*/
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;
}
}
@@ -0,0 +1,61 @@
<?php
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
class TravelinfoLink extends AbstractEntity
{
/**
* @var string
*/
protected $title;
/**
* @var string
*/
protected $link;
/**
* @var string
*/
protected $icon;
/**
* @return string
*/
public function getTitle()
{
return $this->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;
}
}
@@ -0,0 +1,76 @@
<?php
namespace EP\EpProducts\Domain\Model;
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
class TravelinfoTeaser extends AbstractEntity
{
/**
* @var string
*/
protected $title;
/**
* @var string
*/
protected $bodytext;
/**
* @var string
*/
protected $icon;
/**
* @var FileReference
*/
protected $image;
/**
* @return string
*/
public function getTitle()
{
return $this->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;
}
}
@@ -458,11 +458,20 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
if ($busProId === 0) { if ($busProId === 0) {
continue; 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[] = [ $pickups[] = [
'city' => $this->pickups[$busProId]['city'], 'city' => $this->pickups[$busProId]['city'],
'street' => $this->pickups[$busProId]['street'], 'street' => $this->pickups[$busProId]['street'],
'price' => (float) str_replace(',', '.', (string) $attributes['preis']), 'price' => (float) str_replace(',', '.', (string) $attributes['preis']),
'time' => (string) $attributes['zeit'], 'time' => $pickupTime,
]; ];
} }
$date['pickups'] = serialize($pickups); $date['pickups'] = serialize($pickups);
@@ -65,9 +65,10 @@ class LabelService
public function getDateLabel(&$parameters, $parentObject) public function getDateLabel(&$parameters, $parentObject)
{ {
$date = BackendUtility::getRecord('tx_epproducts_domain_model_date', $parameters['row']['uid']); $date = BackendUtility::getRecord('tx_epproducts_domain_model_date', $parameters['row']['uid']);
$dateFrom = new \DateTime($date['date_start']); // $dateFrom = new \DateTime($date['date_start']);
$dateTo = new \DateTime($date['date_end']); // $dateTo = new \DateTime($date['date_end']);
$parameters['title'] = $dateFrom->format('d.m.Y') . ' - ' . $dateTo->format('d.m.Y'); // $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']);
} }
/** /**
@@ -155,6 +155,12 @@ call_user_func(function () {
'Merkliste' 'Merkliste'
); );
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'EP.EpProducts',
'travelinfo',
'Reiseinformationen'
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['epproducts_product_detail'] = 'pi_flexform'; $GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['epproducts_product_detail'] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue( \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
'epproducts_product_detail', 'FILE:EXT:ep_products/Configuration/FlexForms/flexform_product_detail.xml' 'epproducts_product_detail', 'FILE:EXT:ep_products/Configuration/FlexForms/flexform_product_detail.xml'
@@ -31,9 +31,8 @@ return [
'1' => ['showitem' => ''], '1' => ['showitem' => ''],
], ],
'columns' => [ 'columns' => [
'sys_language_uid' => [ 'sys_language_uid' => [
'exclude' => 0, 'exclude' => false,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language', 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
'config' => [ 'config' => [
'type' => 'select', 'type' => 'select',
@@ -75,14 +74,14 @@ return [
], ],
'hidden' => [ 'hidden' => [
'exclude' => 0, 'exclude' => false,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hidden', 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hidden',
'config' => [ 'config' => [
'type' => 'check', 'type' => 'check',
], ],
], ],
'starttime' => [ 'starttime' => [
'exclude' => 0, 'exclude' => false,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime', 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
'config' => [ 'config' => [
'type' => 'input', 'type' => 'input',
@@ -97,7 +96,7 @@ return [
], ],
], ],
'endtime' => [ 'endtime' => [
'exclude' => 0, 'exclude' => false,
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime', 'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
'config' => [ 'config' => [
'type' => 'input', 'type' => 'input',
@@ -111,9 +110,38 @@ return [
'renderType' => 'inputDateTime', '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' => [ 'bus_pro_id' => [
'exclude' => 0, 'exclude' => false,
'label' => 'BusPro ID', 'label' => 'BusPro ID',
'config' => [ 'config' => [
'type' => 'none', 'type' => 'none',
@@ -121,7 +149,7 @@ return [
], ],
], ],
'hotel_bus_pro_id' => [ 'hotel_bus_pro_id' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Hotel BusPro ID', 'label' => 'Hotel BusPro ID',
'config' => [ 'config' => [
'type' => 'none', 'type' => 'none',
@@ -129,7 +157,7 @@ return [
], ],
], ],
'code' => [ 'code' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Kürzel', 'label' => 'Kürzel',
'config' => [ 'config' => [
'type' => 'input', 'type' => 'input',
@@ -138,7 +166,7 @@ return [
], ],
], ],
'daytrip' => [ 'daytrip' => [
'exclude' => 0, 'exclude' => false,
'label' => 'tageweise buchbar', 'label' => 'tageweise buchbar',
'config' => [ 'config' => [
'type' => 'check', 'type' => 'check',
@@ -146,7 +174,7 @@ return [
] ]
], ],
'season' => [ 'season' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Saison', 'label' => 'Saison',
'config' => [ 'config' => [
'type' => 'select', 'type' => 'select',
@@ -159,7 +187,7 @@ return [
], ],
], ],
'date_start' => [ 'date_start' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Datum von', 'label' => 'Datum von',
'config' => [ 'config' => [
'dbType' => 'date', 'dbType' => 'date',
@@ -172,7 +200,7 @@ return [
], ],
], ],
'date_end' => [ 'date_end' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Datum bis', 'label' => 'Datum bis',
'config' => [ 'config' => [
'dbType' => 'date', 'dbType' => 'date',
@@ -185,7 +213,7 @@ return [
], ],
], ],
'nights' => [ 'nights' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Nächte', 'label' => 'Nächte',
'config' => [ 'config' => [
'type' => 'input', 'type' => 'input',
@@ -194,21 +222,21 @@ return [
], ],
], ],
'board' => [ 'board' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Verpflegung', 'label' => 'Verpflegung',
'config' => [ 'config' => [
'type' => 'none', 'type' => 'none',
], ],
], ],
'board_code' => [ 'board_code' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Verpflegung Code', 'label' => 'Verpflegung Code',
'config' => [ 'config' => [
'type' => 'none', 'type' => 'none',
], ],
], ],
'board_bus_pro_id' => [ 'board_bus_pro_id' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Verpflegung BusPro ID', 'label' => 'Verpflegung BusPro ID',
'config' => [ 'config' => [
'type' => 'none', 'type' => 'none',
@@ -216,7 +244,7 @@ return [
], ],
], ],
'bus_included' => [ 'bus_included' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Bus inklusive', 'label' => 'Bus inklusive',
'config' => [ 'config' => [
'type' => 'check', 'type' => 'check',
@@ -224,7 +252,7 @@ return [
] ]
], ],
'bus_available' => [ 'bus_available' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Bus verfügbar', 'label' => 'Bus verfügbar',
'config' => [ 'config' => [
'type' => 'check', 'type' => 'check',
@@ -232,7 +260,7 @@ return [
] ]
], ],
'skipass_included' => [ 'skipass_included' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Skipass inklusive', 'label' => 'Skipass inklusive',
'config' => [ 'config' => [
'type' => 'check', 'type' => 'check',
@@ -240,7 +268,7 @@ return [
] ]
], ],
'bus_price' => [ 'bus_price' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Bus Preis', 'label' => 'Bus Preis',
'config' => [ 'config' => [
'type' => 'input', 'type' => 'input',
@@ -249,7 +277,7 @@ return [
], ],
], ],
'services_included' => [ 'services_included' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Inklusivleistungen', 'label' => 'Inklusivleistungen',
'config' => [ 'config' => [
'type' => 'text', 'type' => 'text',
@@ -259,7 +287,7 @@ return [
] ]
], ],
'services_general' => [ 'services_general' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Leistungen', 'label' => 'Leistungen',
'config' => [ 'config' => [
'type' => 'text', 'type' => 'text',
@@ -269,7 +297,7 @@ return [
] ]
], ],
'pickups' => [ 'pickups' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Zustiege', 'label' => 'Zustiege',
'config' => [ 'config' => [
'type' => 'text', 'type' => 'text',
@@ -279,7 +307,7 @@ return [
] ]
], ],
'discount' => [ 'discount' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Rabatt', 'label' => 'Rabatt',
'config' => [ 'config' => [
'type' => 'input', 'type' => 'input',
@@ -288,7 +316,7 @@ return [
], ],
], ],
'min_price' => [ 'min_price' => [
'exclude' => 0, 'exclude' => false,
'label' => 'ab Preis', 'label' => 'ab Preis',
'config' => [ 'config' => [
'type' => 'input', 'type' => 'input',
@@ -297,7 +325,7 @@ return [
], ],
], ],
'pseudo_price' => [ 'pseudo_price' => [
'exclude' => 0, 'exclude' => false,
'label' => 'Pseudopreis', 'label' => 'Pseudopreis',
'config' => [ 'config' => [
'type' => 'input', 'type' => 'input',
@@ -306,7 +334,7 @@ return [
], ],
], ],
'available' => [ 'available' => [
'exclude' => 0, 'exclude' => false,
'label' => 'verfügbar', 'label' => 'verfügbar',
'config' => [ 'config' => [
'type' => 'input', 'type' => 'input',
@@ -315,7 +343,7 @@ return [
], ],
], ],
'new' => [ 'new' => [
'exclude' => 0, 'exclude' => false,
'label' => 'neu', 'label' => 'neu',
'config' => [ 'config' => [
'type' => 'check', 'type' => 'check',
@@ -0,0 +1,357 @@
<?php
return [
'ctrl' => [
'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',
],
],
],
];
@@ -0,0 +1,164 @@
<?php
return [
'ctrl' => [
'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'
]
],
],
];
@@ -0,0 +1,206 @@
<?php
return [
'ctrl' => [
'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'
]
],
],
];
@@ -248,6 +248,14 @@ $boot = function () {
] ]
); );
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'EP.ep_products',
'travelinfo',
[
'Travelinfo' => 'index',
]
);
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'EP.ep_products', 'EP.ep_products',
'ajax', 'ajax',
+147 -2
View File
@@ -1131,8 +1131,8 @@ CREATE TABLE tx_epproducts_domain_model_contingent
hotel int(11) unsigned DEFAULT '0', hotel int(11) unsigned DEFAULT '0',
hotel_code varchar(64) DEFAULT '' NOT NULL, hotel_code varchar(64) DEFAULT '' NOT NULL,
hotel_bus_pro_id varchar(64) DEFAULT '' NOT NULL, hotel_bus_pro_id varchar(64) DEFAULT '' NOT NULL,
room_code varchar(64) DEFAULT '' NOT NULL, room_code varchar(128) DEFAULT '' NOT NULL,
room_label varchar(64) DEFAULT '' NOT NULL, room_label varchar(255) DEFAULT '' NOT NULL,
status tinyint(4) unsigned DEFAULT '0' NOT NULL, status tinyint(4) unsigned DEFAULT '0' NOT NULL,
min_price int(11) DEFAULT '0' NOT NULL, min_price int(11) DEFAULT '0' NOT NULL,
min_nights 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' # Table structure for table 'sys_domain'
# #
@@ -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
}
}
}
}
}
}
}
}
@@ -12,5 +12,10 @@ RTE {
} }
} }
} }
tx_epproducts_domain_model_travelinfo {
intro_text {
preset = ep-minimal
}
}
} }
} }
@@ -215,6 +215,13 @@ page {
# page.headerData.995 > # page.headerData.995 >
[end] [end]
[page["backend_layout"] == 'pagets__travelinfo']
page.bodyTagCObject >
page.bodyTagCObject = TEXT
page.bodyTagCObject.value = <body class="antialiased text-zinc-800 font-sans bg-white">
page.headerData.333 >
[end]
[request.getNormalizedParams() && like(request.getNormalizedParams().getHttpUserAgent(), "*Googlebot*")] [request.getNormalizedParams() && like(request.getNormalizedParams().getHttpUserAgent(), "*Googlebot*")]
page.headerData.990 > page.headerData.990 >
page.headerData.995 > page.headerData.995 >
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

@@ -4,7 +4,8 @@ export default class extends Controller {
static values = { target: String } static values = { target: String }
scroll() { scroll(e) {
e.preventDefault()
document.getElementById(this.targetValue).scrollIntoView({ behavior: 'smooth' }) document.getElementById(this.targetValue).scrollIntoView({ behavior: 'smooth' })
} }
} }
@@ -1,21 +1,21 @@
h1, h1,
.headline--primary { .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, h2,
.headline--secondary { .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, h3,
.headline--3 { .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, h4,
.headline--4 { .headline--4 {
@apply block md:text-lg text-zinc-800 font-bold; @apply block md:text-lg font-bold;
} }
.headline--underlined:after { .headline--underlined:after {
@@ -25,7 +25,7 @@ h4,
} }
.subline { .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 // Lists
@@ -0,0 +1,24 @@
<html data-namespace-typo3-fluid="true" lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
<div class="container bg-white flex items-center justify-between">
<f:link.typolink parameter="{f:if(condition: settings.logoLink, then: settings.logoLink, else: settings.defaultHomeUid)}"
class="block lg:pb-4"
title="{settings.defaultTitle}">
<f:image src="{settings.logoImage}"
class="block w-auto {ep:themeClasses(classes: '{ep: \'h-10 lg:h-12\', sbw: \'h-14 lg:h-24\', snz: \'h-14 lg:h-24\', suz: \'h-14 lg:h-24\', uch: \'h-12 lg:h-20\', ser: \'h-10 lg:h-12\'}', key: settings.themekey)}"
alt="{settings.defaultTitle}"/>
</f:link.typolink>
<f:link.typolink parameter="{settings.myEpPageUid}"
title="My E&P"
class="block px-4 py-3 lg:px-8 lg:py-4 bg-badge-gradient text-white uppercase text-center">
<div class="text-xl lg:text-2xl font-light leading-none">Login</div>
<div class="text-lg lg:text-xl font-medium leading-none">My E&P</div>
</f:link.typolink>
</div>
<f:render section="Content"/>
<f:render partial="Footer" arguments="{_all}"/>
<f:render partial="Config" arguments="{_all}" />
</html>
@@ -0,0 +1,11 @@
<html data-namespace-typo3-fluid="true" lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
<f:layout name="Page/Travelinfo"/>
<f:section name="Content">
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{pageUid: '{data.uid}', colPos: '0'}" />
</f:section>
</html>
@@ -0,0 +1,266 @@
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"
xmlns:ep="http://typo3.org/ns/EP/EpTheme/ViewHelpers">
<f:layout name="Default"/>
<f:section name="Main">
<div class="container relative">
<div class="h-80 lg:h-128">
<f:image image="{travelinfo.headerImage}"
width="1280"
alt="Reiseinformationen"
class="block w-full h-full object-cover object-center" />
</div>
<div class="absolute top-16 left-1/2 -translate-x-1/2 w-full max-w-screen-sm lg:left-0 lg:-translate-x-0 lg:max-w-none px-8 lg:px-24 h-64 lg:h-128 flex flex-col justify-between">
<div class="hidden lg:block text-3xl lg:text-6xl text-white uppercase font-bold">
Reiseinformation
</div>
<div class="grid grid-cols-2 lg:grid-cols-4">
<f:variable name="bgColors" value="{0: 'bg-[#165883]/90', 1: 'bg-[#9DBACE]/90', 2: 'bg-[#3396E4]/90', 3: 'bg-[#0268AA]/90'}"/>
<f:variable name="linksCount" value="{travelinfo.links -> f:count()}"/>
<f:for each="{travelinfo.links}" as="link" iteration="iteration">
<f:render section="Link" arguments="{item: link, color: '{bgColors.{iteration.index}}'}"/>
</f:for>
<a href="#goodtoknow"
data-controller="scroll-to"
data-scroll-to-target-value="goodtoknow"
data-action="scroll-to#scroll"
class="flex flex-col space-y-4 items-center justify-center px-8 py-8 lg:py-16 text-white {bgColors.{linksCount}}">
<div class="w-12 h-12 lg:w-24 lg:h-24">
<f:render section="Icon" arguments="{icon: 'chat'}" />
</div>
<div class="uppercase text-lg lg:text-xl text-center leading-tight">
Wissens&shy;wertes
</div>
</a>
</div>
</div>
</div>
<div class="pb-32 pt-52 -mt-24 bg-ep-primary-bg">
<div class="container px-8 lg:px-24" data-rte-content>
<h1 class="headline--underlined headline--has-subline">
<span class="subline">{travelinfo.subline}</span>
{travelinfo.headline}
</h1>
{travelinfo.introText -> f:format.html()}
</div>
</div>
<div class="container -mt-24 mb-16">
<div class="flex flex-col lg:flex-row divide-y lg:divide-y-0 lg:divide-x divide-white bg-brand-gradient px-8 lg:px-0 py-8">
<div class="lg:w-1/4 flex flex-col space-y-4 pb-8 lg:pb-0 lg:px-8">
<div class="w-32 h-32 xl:w-16 xl:h-16 text-ep-primary">
<f:render section="Icon" arguments="{icon: 'travel'}"/>
</div>
<div class="text-2xl lg:text-4xl text-white uppercase font-bold">
Anreise
</div>
</div>
<div class="lg:w-3/4 pt-8 lg:pt-0 lg:px-8 text-white" data-rte-content>
<h3 class="text-white">
Adresse
</h3>
<p>
{travelinfo.traveldate.hotel.name}
<br>
{travelinfo.traveldate.hotel.address -> f:format.nl2br()}
</p>
<f:if condition="{travelinfo.traveldate.busIncluded}">
<h3 class="text-white">
Bus-Zustiege
</h3>
<ul>
<f:for each="{travelinfo.traveldate.pickups}" as="pickup">
<li>
{pickup.city} ({pickup.street}): {pickup.time}
</li>
</f:for>
</ul>
</f:if>
<f:if condition="{travelinfo.selfArrangedText}">
<h3 class="text-white">
Eigenanreise
</h3>
<p>
{travelinfo.selfArrangedText -> f:format.html()}
</p>
</f:if>
</div>
</div>
</div>
<div class="container px-8 lg:px-24 mb-8">
<h2 class="headline--underlined headline--has-subline">
<span class="subline">Sei vorbereitet!</span>
Organisatorisches
</h2>
</div>
<div class="container px-8 lg:px-24 flex flex-col space-y-16 pb-16">
<f:for each="{travelinfo.teasers}" as="teaser">
<div class="grid grid-cols-1 md:grid-cols-3 gap-x-8">
<div class="relative self-start">
<f:image image="{teaser.image}" width="640" alt="" class="block w-full h-auto" />
<div class="absolute top-0 left-0 inset-0 bg-ep-primary/25 flex items-center justify-center">
<div class="w-32 h-32 xl:w-48 xl:h-48 text-white">
<f:render section="Icon" arguments="{icon: teaser.icon}"/>
</div>
</div>
</div>
<div class="md:col-span-2 relative p-4 md:p-0 md:pb-4 border border-gray-300 md:border-none" data-rte-content>
<h2 class="headline--primary">
{teaser.title}
</h2>
{teaser.bodytext -> f:format.html()}
<div class="absolute left-0 bottom-0 bg-ep-primary w-full md:w-1/2 h-1"></div>
</div>
</div>
</f:for>
</div>
<div id="goodtoknow" class="bg-ep-primary-bg">
<div class="container">
<f:if condition="{travelinfo.additionalInfo}">
<div class="flex flex-col lg:flex-row divide-y lg:divide-y-0 lg:divide-x divide-white bg-[#B48F1D] px-8 lg:px-0 py-8">
<div class="lg:w-1/4 flex flex-col space-y-4 pb-8 lg:pb-0 lg:px-8">
<div class="w-32 h-32 xl:w-16 xl:h-16 text-[#F9C700]">
<f:render section="Icon" arguments="{icon: 'chat'}"/>
</div>
<div class="text-2xl lg:text-4xl text-white uppercase font-bold">
Weitere Infos
</div>
</div>
<div class="lg:w-3/4 pt-8 lg:pt-0 lg:px-8 text-white" data-rte-content>
{travelinfo.additionalInfo -> f:format.html()}
</div>
</div>
</f:if>
<f:if condition="{travelinfo.importantPhoneNumbers}">
<div class="flex flex-col lg:flex-row divide-y lg:divide-y-0 lg:divide-x divide-white bg-[#F8C62F] px-8 lg:px-0 py-8">
<div class="lg:w-1/4 flex flex-col space-y-4 pb-8 lg:pb-0 lg:px-8">
<div class="text-2xl lg:text-4xl text-white uppercase font-bold">
Wichtige Telefon&shy;nummern
</div>
</div>
<div class="lg:w-3/4 pt-8 lg:pt-0 lg:px-8 text-white" data-rte-content>
{travelinfo.importantPhoneNumbers -> f:format.html()}
</div>
</div>
</f:if>
<f:if condition="{travelinfo.importantLinks}">
<div class="flex flex-col lg:flex-row divide-y lg:divide-y-0 lg:divide-x divide-white bg-[#18527B] px-8 lg:px-0 py-8">
<div class="lg:w-1/4 flex flex-col space-y-4 pb-8 lg:pb-0 lg:px-8">
<div class="text-2xl lg:text-4xl text-white uppercase font-bold">
Wichtige Links vor Ort
</div>
</div>
<div class="lg:w-3/4 pt-8 lg:pt-0 lg:px-8 text-white" data-rte-content>
{travelinfo.importantLinks -> f:format.html()}
</div>
</div>
</f:if>
</div>
</div>
<div class="container px-8 lg:px-24 py-16">
{travelinfo.footerText -> f:format.html()}
<f:image src="EXT:ep_theme/Resources/Public/images/signature_ep_team.png" class="block w-full max-w-64 h-auto mt-8" alt="" />
</div>
<div class="container">
<f:image image="{travelinfo.footerImage}" width="1028" class="block w-full h-auto" alt="" />
</div>
</f:section>
<f:section name="Link">
<f:link.typolink parameter="{item.link}" class="flex flex-col space-y-4 items-center justify-center px-8 py-8 lg:py-16 text-white {color}">
<div class="w-12 h-12 lg:w-24 lg:h-24">
<f:render section="Icon" arguments="{icon: item.icon}" />
</div>
<div class="uppercase text-lg lg:text-xl text-center leading-tight">
{item.title -> f:format.raw()}
</div>
</f:link.typolink>
</f:section>
<f:section name="Icon">
<f:switch expression="{icon}">
<f:case value="travel">
<svg viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" stroke="none" fill="currentColor">
<g>
<path d="M38.271,44.944C37.617,45.598 37.126,46.294 36.799,47.03C36.472,47.766 36.308,48.625 36.308,49.606L36.308,214.504C36.308,216.14 36.88,217.53 38.026,218.675C39.171,219.82 40.561,220.393 42.197,220.393C43.833,220.393 45.224,219.82 46.369,218.675C47.514,217.53 48.086,216.14 48.086,214.504L48.086,170.089C61.828,158.965 74.874,154.957 87.225,158.066C99.576,161.174 112.458,166 125.873,172.543C133.889,176.469 142.15,180.191 150.656,183.708C159.163,187.225 167.915,188.984 176.912,188.984C183.62,188.984 190.449,187.716 197.402,185.18C204.355,182.645 211.511,178.187 218.873,171.807C219.364,171.316 219.814,170.662 220.223,169.844C220.632,169.026 220.836,168.208 220.836,167.39L220.836,49.606C220.836,47.97 220.263,46.58 219.118,45.435C217.973,44.29 216.583,43.717 214.947,43.717C214.129,43.717 213.393,43.84 212.738,44.085C212.084,44.331 211.511,44.617 211.021,44.944C196.788,57.377 183.374,62.08 170.778,59.053C158.182,56.027 145.013,51.079 131.271,44.208C124.4,40.772 117.284,37.501 109.923,34.393C102.561,31.284 95.036,29.28 87.348,28.381C79.659,27.481 71.725,28.176 63.545,30.466C55.366,32.757 46.941,37.583 38.271,44.944M209.058,164.691C195.316,175.815 182.27,179.823 169.919,176.715C157.568,173.607 144.686,168.699 131.271,161.992C125.055,159.047 118.675,156.103 112.131,153.158C105.424,150.213 98.635,148.128 91.765,146.901C84.894,145.674 77.778,145.551 70.416,146.533C63.218,147.678 55.775,150.704 48.086,155.612L48.086,52.305C61.828,41.018 74.874,36.928 87.225,40.036C99.576,43.145 112.458,48.052 125.873,54.759C132.089,57.868 138.469,60.894 145.013,63.839C151.72,66.62 158.509,68.664 165.379,69.973C172.25,71.282 179.366,71.364 186.728,70.218C193.926,69.073 201.369,66.129 209.058,61.385L209.058,164.691Z"/>
</g>
</svg>
</f:case>
<f:case value="course">
<svg viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" stroke="none" fill="currentColor">
<g>
<path d="M215.905,68.046L36.311,68.046C32.726,68.046 29.647,69.332 27.074,71.904C24.502,74.477 23.216,77.556 23.216,81.141L23.216,148.489C23.216,152.075 24.502,155.154 27.074,157.726C29.647,160.298 32.726,161.584 36.311,161.584L60.631,161.584L60.631,193.388C60.631,194.947 61.177,196.272 62.268,197.363C63.359,198.454 64.684,199 66.243,199C67.802,199 69.128,198.454 70.219,197.363C71.31,196.272 71.856,194.947 71.856,193.388L71.856,161.584L180.36,161.584L180.36,193.388C180.36,194.947 180.906,196.272 181.997,197.363C183.089,198.454 184.414,199 185.973,199C187.532,199 188.857,198.454 189.948,197.363C191.039,196.272 191.585,194.947 191.585,193.388L191.585,161.584L215.905,161.584C219.491,161.584 222.57,160.298 225.142,157.726C227.714,155.154 229,152.075 229,148.489L229,81.141C229,77.556 227.714,74.477 225.142,71.904C222.57,69.332 219.491,68.046 215.905,68.046M217.776,81.141L217.776,131.184L165.862,79.271L215.905,79.271C216.373,79.271 216.801,79.465 217.191,79.855C217.581,80.245 217.776,80.674 217.776,81.141M36.311,79.271L82.613,79.271L153.702,150.36L102.256,150.36L34.44,82.544L34.44,81.141C34.44,80.674 34.635,80.245 35.025,79.855C35.415,79.465 35.843,79.271 36.311,79.271M34.44,148.489L34.44,98.446L86.354,150.36L36.311,150.36C35.843,150.36 35.415,150.165 35.025,149.775C34.635,149.385 34.44,148.957 34.44,148.489M215.905,150.36L169.603,150.36L98.514,79.271L149.96,79.271L217.776,147.086L217.776,148.489C217.776,148.957 217.581,149.385 217.191,149.775C216.801,150.165 216.373,150.36 215.905,150.36"/>
</g>
</svg>
</f:case>
<f:case value="luggage">
<svg viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" stroke="none" fill="currentColor">
<g>
<path d="M153.863,54.439L153.863,45.4C153.863,40.109 151.952,35.553 148.131,31.732C144.31,27.911 139.754,26 134.463,26L106.245,26C100.954,26 96.398,27.911 92.577,31.732C88.755,35.553 86.845,40.109 86.845,45.4L86.845,54.439C80.819,55.174 75.234,56.937 70.09,59.73C64.946,62.375 60.501,65.829 56.753,70.091C53.005,74.353 50.029,79.13 47.824,84.421C45.62,89.859 44.518,95.664 44.518,101.837L44.518,207.655C44.518,211.035 45.73,213.938 48.155,216.363C50.58,218.788 53.483,220 56.863,220L183.845,220C187.225,220 190.128,218.788 192.553,216.363C194.978,213.938 196.19,211.035 196.19,207.655L196.19,101.837C196.19,95.664 195.088,89.932 192.883,84.641C190.679,79.203 187.703,74.353 183.955,70.091C180.207,65.829 175.761,62.375 170.618,59.73C165.474,56.937 159.962,55.174 154.083,54.439L153.863,54.439ZM106.245,36.582L134.463,36.582C136.961,36.582 139.056,37.427 140.746,39.117C142.436,40.808 143.281,42.902 143.281,45.4L143.281,54.219L97.427,54.219L97.427,45.4C97.427,42.902 98.272,40.808 99.962,39.117C101.652,37.427 103.746,36.582 106.245,36.582M157.39,160.037L83.318,160.037L83.318,151.219C83.318,148.72 84.163,146.626 85.853,144.936C87.543,143.245 89.637,142.4 92.136,142.4L148.572,142.4C151.071,142.4 153.165,143.245 154.855,144.936C156.545,146.626 157.39,148.72 157.39,151.219L157.39,160.037ZM83.318,170.619L129.172,170.619L129.172,179.437C129.172,180.906 129.687,182.156 130.715,183.184C131.744,184.213 132.993,184.728 134.463,184.728C135.933,184.728 137.182,184.213 138.211,183.184C139.239,182.156 139.754,180.906 139.754,179.437L139.754,170.619L157.39,170.619L157.39,209.419L83.318,209.419L83.318,170.619ZM185.608,207.655C185.608,208.096 185.425,208.5 185.057,208.867C184.69,209.235 184.286,209.419 183.845,209.419L167.972,209.419L167.972,151.219C167.972,145.928 166.062,141.372 162.24,137.55C158.419,133.729 153.863,131.819 148.572,131.819L92.136,131.819C86.845,131.819 82.289,133.729 78.468,137.55C74.646,141.372 72.736,145.928 72.736,151.219L72.736,209.419L56.863,209.419C56.422,209.419 56.018,209.235 55.65,208.867C55.283,208.5 55.099,208.096 55.099,207.655L55.099,101.837C55.099,91.549 58.7,82.804 65.902,75.603C73.103,68.401 81.848,64.8 92.136,64.8L148.572,64.8C158.86,64.8 167.605,68.401 174.806,75.603C182.008,82.804 185.608,91.549 185.608,101.837L185.608,207.655ZM139.754,94.782C139.754,96.252 139.239,97.501 138.211,98.53C137.182,99.559 135.933,100.073 134.463,100.073L106.245,100.073C104.775,100.073 103.526,99.559 102.497,98.53C101.468,97.501 100.954,96.252 100.954,94.782C100.954,93.313 101.468,92.063 102.497,91.034C103.526,90.006 104.775,89.491 106.245,89.491L134.463,89.491C135.933,89.491 137.182,90.006 138.211,91.034C139.239,92.063 139.754,93.313 139.754,94.782"/>
</g>
</svg>
</f:case>
<f:case value="skipass">
<svg viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" stroke="none" fill="currentColor">
<g>
<path d="M197.077,211.419C197.077,211.836 196.903,212.218 196.556,212.565C196.208,212.913 195.826,213.087 195.409,213.087L75.344,213.087C74.928,213.087 74.545,212.913 74.198,212.565C73.851,212.218 73.677,211.836 73.677,211.419L73.677,64.673C73.677,64.256 73.851,63.874 74.198,63.526C74.545,63.179 74.928,63.005 75.344,63.005L112.507,63.005L129.875,87.043L93.674,87.043C92.285,87.043 91.103,87.53 90.131,88.502C89.158,89.475 88.671,90.656 88.671,92.046C88.671,93.436 89.158,94.617 90.131,95.59C91.103,96.562 92.285,97.049 93.674,97.049L173.718,97.049C175.107,97.049 176.288,96.562 177.261,95.59C178.234,94.617 178.72,93.436 178.72,92.046C178.72,90.656 178.234,89.475 177.261,88.502C176.288,87.53 175.107,87.043 173.718,87.043L150.875,87.043L133.507,63.005L195.409,63.005C195.826,63.005 196.208,63.179 196.556,63.526C196.903,63.874 197.077,64.256 197.077,64.673L197.077,211.419ZM203.643,56.439C201.35,54.146 198.606,53 195.409,53L159.025,53L183.012,20L162.012,20L137.89,53L126.277,53L100.988,18L79.988,18L105.277,53L75.344,53C72.148,53 69.404,54.146 67.111,56.439C64.818,58.732 63.671,61.477 63.671,64.673L63.671,211.419C63.671,214.615 64.818,217.36 67.111,219.653C69.404,221.945 72.148,223.092 75.344,223.092L195.409,223.092C198.606,223.092 201.35,221.945 203.643,219.653C205.936,217.36 207.082,214.615 207.082,211.419L207.082,64.673C207.082,61.477 205.936,58.732 203.643,56.439"/>
<path d="M97.041,166.489C96.094,167.338 94.718,167.762 92.914,167.762L86.821,167.762L86.821,157.371L93.074,157.371C94.756,157.402 96.075,157.917 97.03,158.917C97.985,159.917 98.462,161.229 98.462,162.851C98.462,164.428 97.989,165.64 97.041,166.489M103.828,157.088C102.812,155.412 101.361,154.12 99.474,153.211C97.587,152.301 95.4,151.846 92.914,151.846L80,151.846L80,184.951L86.821,184.951L86.821,173.287L92.801,173.287C96.726,173.287 99.8,172.352 102.021,170.479C104.241,168.607 105.352,166.049 105.352,162.806C105.352,160.668 104.843,158.763 103.828,157.088"/>
<path d="M114.56,172.606L118.675,160.214L122.835,172.606L114.56,172.606ZM115.515,151.847L103.191,184.952L110.445,184.952L112.718,178.131L124.677,178.131L126.974,184.952L134.227,184.952L121.835,151.847L115.515,151.847Z"/>
<path d="M145.163,157.883C146.088,157.179 147.384,156.825 149.052,156.825C150.78,156.825 152.122,157.246 153.075,158.088C154.031,158.929 154.508,160.108 154.508,161.623L161.33,161.623C161.33,159.637 160.818,157.864 159.795,156.303C158.771,154.742 157.335,153.533 155.487,152.677C153.637,151.82 151.529,151.392 149.165,151.392C146.816,151.392 144.698,151.786 142.81,152.574C140.923,153.362 139.476,154.458 138.468,155.86C137.459,157.262 136.955,158.857 136.955,160.645C136.955,164.086 138.835,166.822 142.594,168.854C143.973,169.596 145.846,170.351 148.211,171.116C150.575,171.882 152.212,172.609 153.122,173.299C154.031,173.989 154.486,174.978 154.486,176.266C154.486,177.448 154.031,178.37 153.122,179.028C152.212,179.688 150.947,180.017 149.324,180.017C144.959,180.017 142.776,178.191 142.776,174.538L135.933,174.538C135.933,176.675 136.482,178.555 137.58,180.177C138.679,181.799 140.275,183.076 142.367,184.008C144.459,184.94 146.778,185.406 149.324,185.406C152.993,185.406 155.911,184.592 158.078,182.962C160.246,181.333 161.33,179.086 161.33,176.221C161.33,173.643 160.442,171.491 158.67,169.763C156.895,168.035 154.068,166.588 150.188,165.421C148.082,164.784 146.486,164.101 145.402,163.374C144.318,162.646 143.777,161.745 143.777,160.669C143.777,159.517 144.239,158.588 145.163,157.883"/>
<path d="M173.789,157.883C174.714,157.179 176.01,156.825 177.678,156.825C179.406,156.825 180.748,157.246 181.701,158.088C182.658,158.929 183.134,160.108 183.134,161.623L189.956,161.623C189.956,159.637 189.444,157.864 188.421,156.303C187.397,154.742 185.961,153.533 184.113,152.677C182.262,151.82 180.154,151.392 177.791,151.392C175.442,151.392 173.324,151.786 171.436,152.574C169.549,153.362 168.101,154.458 167.094,155.86C166.085,157.262 165.581,158.857 165.581,160.645C165.581,164.086 167.461,166.822 171.22,168.854C172.599,169.596 174.472,170.351 176.837,171.116C179.201,171.882 180.839,172.609 181.748,173.299C182.658,173.989 183.112,174.978 183.112,176.266C183.112,177.448 182.658,178.37 181.748,179.028C180.839,179.688 179.573,180.017 177.95,180.017C173.585,180.017 171.402,178.191 171.402,174.538L164.559,174.538C164.559,176.675 165.107,178.555 166.206,180.177C167.305,181.799 168.901,183.076 170.993,184.008C173.085,184.94 175.404,185.406 177.95,185.406C181.619,185.406 184.537,184.592 186.704,182.962C188.872,181.333 189.956,179.086 189.956,176.221C189.956,173.643 189.068,171.491 187.296,169.763C185.521,168.035 182.695,166.588 178.814,165.421C176.708,164.784 175.112,164.101 174.028,163.374C172.944,162.646 172.403,161.745 172.403,160.669C172.403,159.517 172.865,158.588 173.789,157.883"/>
</g>
</svg>
</f:case>
<f:case value="food">
<svg viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" stroke="none" fill="currentColor">
<g>
<path d="M46.496,100.165L202.71,100.165C206.452,100.165 209.666,98.823 212.351,96.138C215.036,93.453 216.378,90.239 216.378,86.496C216.378,86.008 216.338,85.52 216.256,85.032C216.175,84.544 216.134,84.055 216.134,83.567C214.344,75.268 210.683,67.539 205.15,60.379C199.781,53.382 193.028,47.321 184.891,42.195C176.755,37.069 167.562,33.123 157.31,30.357C147.058,27.428 136.156,25.964 124.603,25.964C113.049,25.964 102.147,27.428 91.896,30.357C81.644,33.123 72.45,37.069 64.314,42.195C56.178,47.321 49.425,53.382 44.055,60.379C38.523,67.539 34.861,75.268 33.071,83.567C33.071,84.055 33.031,84.544 32.949,85.032C32.868,85.52 32.827,86.008 32.827,86.496C32.827,90.239 34.17,93.453 36.855,96.138C39.54,98.823 42.753,100.165 46.496,100.165M44.543,86.008C46.008,79.174 49.181,72.746 54.063,66.726C58.782,60.868 64.721,55.782 71.881,51.47C79.041,47.158 87.095,43.782 96.045,41.341C105.157,38.9 114.677,37.68 124.603,37.68C134.529,37.68 144.048,38.9 153.161,41.341C162.11,43.782 170.165,47.158 177.325,51.47C184.485,55.782 190.505,60.868 195.387,66.726C200.106,72.746 203.198,79.174 204.662,86.008L204.662,86.496C204.662,86.984 204.5,87.432 204.174,87.839C203.849,88.246 203.36,88.449 202.71,88.449L46.496,88.449C46.008,88.449 45.56,88.246 45.154,87.839C44.747,87.432 44.543,86.984 44.543,86.496L44.543,86.008ZM224.189,151.178L183.183,166.068L146.326,151.423C146.001,151.26 145.635,151.138 145.228,151.056C144.821,150.975 144.455,150.934 144.129,150.934C143.804,150.934 143.438,150.975 143.031,151.056C142.624,151.138 142.258,151.26 141.933,151.423L105.076,166.068L68.219,151.423C67.894,151.26 67.528,151.138 67.121,151.056C66.714,150.975 66.348,150.934 66.023,150.934C65.697,150.934 65.372,150.975 65.046,151.056C64.721,151.138 64.395,151.178 64.07,151.178L21.111,166.8C19.972,167.288 19.037,168.02 18.304,168.997C17.572,169.973 17.206,171.112 17.206,172.414C17.206,174.041 17.775,175.424 18.915,176.563C20.054,177.702 21.437,178.272 23.064,178.272C23.389,178.272 23.715,178.231 24.04,178.15C24.366,178.068 24.691,178.028 25.017,178.028L40.638,172.17L40.638,180.224C40.638,190.476 44.259,199.222 51.5,206.463C58.741,213.705 67.487,217.325 77.739,217.325L171.467,217.325C181.718,217.325 190.465,213.705 197.706,206.463C204.947,199.222 208.568,190.476 208.568,180.224L208.568,169.485L228.094,162.406C229.233,161.918 230.169,161.186 230.901,160.21C231.634,159.233 232,158.094 232,156.792C232,155.165 231.43,153.782 230.291,152.643C229.152,151.504 227.769,150.934 226.142,150.934C225.816,150.934 225.491,150.975 225.165,151.056C224.84,151.138 224.514,151.178 224.189,151.178M196.852,180.224C196.852,187.222 194.37,193.202 189.407,198.165C184.444,203.128 178.464,205.609 171.467,205.609L77.739,205.609C70.742,205.609 64.762,203.128 59.799,198.165C54.836,193.202 52.354,187.222 52.354,180.224L52.354,168.02L66.023,163.139L102.879,177.784C103.205,177.946 103.571,178.068 103.978,178.15C104.385,178.231 104.751,178.272 105.076,178.272C105.402,178.272 105.768,178.231 106.174,178.15C106.581,178.068 106.947,177.946 107.273,177.784L144.129,163.139L180.986,177.784C181.312,177.946 181.678,178.068 182.085,178.15C182.491,178.231 182.857,178.272 183.183,178.272C183.508,178.272 183.834,178.231 184.159,178.15C184.485,178.068 184.81,178.028 185.136,178.028L196.852,173.634L196.852,180.224ZM17.206,125.55C17.206,123.922 17.775,122.539 18.915,121.4C20.054,120.261 21.437,119.692 23.064,119.692L226.142,119.692C227.769,119.692 229.152,120.261 230.291,121.4C231.43,122.539 232,123.922 232,125.55C232,127.177 231.43,128.56 230.291,129.699C229.152,130.838 227.769,131.408 226.142,131.408L23.064,131.408C21.437,131.408 20.054,130.838 18.915,129.699C17.775,128.56 17.206,127.177 17.206,125.55"/>
</g>
</svg>
</f:case>
<f:case value="weather">
<svg viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" stroke="none" fill="currentColor">
<g>
<path d="M171.567,43.979C168.306,43.979 165.152,44.227 162.104,44.723C159.056,45.219 156.043,45.893 153.066,46.744L153.491,46.531C152.216,44.404 150.798,42.384 149.238,40.47C147.679,38.556 145.978,36.749 144.135,35.048L153.066,22.288C153.35,21.863 153.562,21.402 153.704,20.906C153.846,20.41 153.917,19.878 153.917,19.311C153.917,17.893 153.421,16.688 152.428,15.696C151.436,14.704 150.231,14.207 148.813,14.207C147.962,14.207 147.183,14.42 146.474,14.845C145.765,15.271 145.198,15.767 144.773,16.334L144.56,16.334L135.629,29.093C132.51,27.392 129.107,26.045 125.421,25.053C121.735,24.06 117.837,23.564 113.725,23.564L110.748,23.564L108.196,8.253C107.913,6.977 107.31,5.949 106.389,5.17C105.467,4.39 104.368,4 103.092,4C101.675,4 100.47,4.496 99.477,5.489C98.485,6.481 97.989,7.686 97.989,9.104L97.989,10.167L100.753,25.478C96.5,26.754 92.566,28.562 88.951,30.901C85.336,33.24 82.111,35.969 79.275,39.088L66.516,30.157C66.091,29.873 65.63,29.66 65.134,29.519C64.638,29.377 64.106,29.306 63.539,29.306C62.121,29.306 60.916,29.802 59.924,30.794C58.931,31.787 58.435,32.992 58.435,34.41C58.435,35.26 58.648,36.04 59.073,36.749C59.498,37.458 59.995,38.025 60.562,38.45L73.321,47.594C71.62,50.713 70.273,54.115 69.281,57.802C68.288,61.488 67.792,65.386 67.792,69.497L67.792,72.475L52.481,75.026C51.347,75.31 50.354,75.913 49.504,76.834C48.653,77.756 48.228,78.854 48.228,80.13C48.228,81.548 48.724,82.753 49.716,83.745C50.709,84.738 51.914,85.234 53.331,85.234L54.395,85.234L54.182,85.234L69.706,82.469C70.415,84.879 71.265,87.148 72.258,89.274C73.25,91.401 74.455,93.456 75.873,95.441L75.66,95.229C71.124,99.056 67.544,103.77 64.921,109.37C62.298,114.97 60.987,120.96 60.987,127.339C60.987,133.152 62.121,138.681 64.389,143.926C66.516,149.03 69.529,153.531 73.427,157.43C77.326,161.329 81.827,164.341 86.931,166.468C92.176,168.736 97.705,169.87 103.518,169.87L171.567,169.87C180.215,169.87 188.367,168.24 196.022,164.979C203.678,161.577 210.341,157.04 216.012,151.369C221.682,145.698 226.219,139.035 229.622,131.38C232.882,123.724 234.513,115.573 234.513,106.925C234.513,98.277 232.882,90.125 229.622,82.469C226.219,74.814 221.682,68.151 216.012,62.48C210.341,56.809 203.678,52.273 196.022,48.87C188.367,45.609 180.215,43.979 171.567,43.979M77.999,69.497C77.999,59.574 81.473,51.138 88.419,44.192C95.366,37.245 103.801,33.772 113.725,33.772C120.105,33.772 125.917,35.26 131.163,38.237C136.408,41.215 140.661,45.184 143.922,50.146L143.922,50.359C136.55,54.045 130.135,58.9 124.677,64.925C119.219,70.951 115.072,77.72 112.237,85.234L112.237,85.659C110.961,85.376 109.578,85.163 108.09,85.021C106.601,84.879 105.148,84.809 103.73,84.809L103.518,84.809C99.974,84.809 96.536,85.234 93.204,86.084C89.872,86.935 86.789,88.14 83.954,89.7L84.166,89.487C82.182,86.652 80.657,83.533 79.594,80.13C78.531,76.728 77.999,73.183 77.999,69.497M171.567,159.663L103.518,159.663C94.586,159.663 86.966,156.508 80.657,150.2C74.349,143.891 71.194,136.271 71.194,127.339C71.194,118.408 74.349,110.788 80.657,104.479C86.966,98.17 94.586,95.016 103.518,95.016C104.652,95.016 105.715,95.051 106.708,95.122C107.7,95.193 108.692,95.37 109.685,95.654L109.472,95.654C109.33,96.646 109.189,97.78 109.047,99.056C108.905,100.332 108.763,101.679 108.621,103.097L108.621,103.522C108.621,104.94 109.118,106.145 110.11,107.137C111.102,108.13 112.307,108.626 113.725,108.626C115.143,108.626 116.312,108.165 117.234,107.244C118.155,106.322 118.687,105.223 118.829,103.947L118.829,103.735C118.971,101.892 119.183,100.084 119.467,98.312C119.75,96.54 120.105,94.803 120.53,93.102L120.53,93.315L120.53,93.102C122.231,87.431 124.641,82.186 127.76,77.366C131.021,72.687 134.884,68.611 139.35,65.138C143.816,61.665 148.813,58.936 154.342,56.951C159.729,55.108 165.471,54.186 171.567,54.186C178.797,54.186 185.673,55.533 192.194,58.227C198.574,61.062 204.138,64.854 208.888,69.604C213.637,74.353 217.429,79.918 220.265,86.297C222.958,92.677 224.305,99.553 224.305,106.925C224.305,114.155 222.958,120.96 220.265,127.339C217.429,133.861 213.637,139.496 208.888,144.245C204.138,148.995 198.574,152.716 192.194,155.41C185.673,158.245 178.797,159.663 171.567,159.663"/>
<path d="M44.622,196.642L55.326,188.865L51.237,201.448L61.941,209.225L48.71,209.225L44.622,221.808L40.534,209.225L27.303,209.225L38.007,201.448L33.918,188.865L44.622,196.642Z"/>
<path d="M78.646,222.834L89.35,215.057L85.261,227.64L95.965,235.417L82.734,235.417L78.646,248L74.558,235.417L61.327,235.417L72.031,227.64L67.942,215.057L78.646,222.834Z"/>
<path d="M105.866,188.81L116.57,181.033L112.481,193.616L123.185,201.393L109.954,201.393L105.866,213.976L101.778,201.393L88.547,201.393L99.251,193.616L95.162,181.033L105.866,188.81Z"/>
</g>
</svg>
</f:case>
<f:case value="lift">
<svg viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" stroke="none" fill="currentColor">
<g>
<path d="M155.232,194.335C155.232,191.763 153.139,189.671 150.568,189.671L94.777,189.671L94.777,65.18C94.777,65.126 94.774,65.074 94.771,65.023L171.192,21.603C172.276,20.988 173.055,19.988 173.385,18.788C173.716,17.586 173.559,16.327 172.942,15.243C171.678,13.015 168.83,12.23 166.584,13.494L5.37,105.093C4.286,105.708 3.507,106.707 3.176,107.908C2.845,109.109 3.003,110.368 3.619,111.451C4.443,112.907 5.999,113.812 7.677,113.812C8.48,113.812 9.275,113.601 9.978,113.202L85.449,70.32L85.449,191.604C84.855,192.408 84.533,193.361 84.533,194.335C84.533,196.906 86.625,198.999 89.197,198.999L150.568,198.999C153.139,198.999 155.232,196.906 155.232,194.335"/>
<path d="M240.336,139.291C237.765,139.291 235.672,141.384 235.672,143.955L235.672,161.894L192.36,193.6C191.964,192.342 191.283,191.213 190.349,190.278L169.686,169.615C168.183,168.112 166.19,167.254 164.06,167.187C163.184,166.907 162.365,166.77 161.561,166.77L129.585,166.77L129.585,116.475C129.585,110.873 125.027,106.315 119.425,106.315C113.823,106.315 109.265,110.873 109.265,116.475L109.265,173.267C109.265,178.869 113.823,183.427 119.425,183.427C119.681,183.427 119.928,183.396 120.175,183.362L120.335,183.343L120.398,183.351C120.681,183.391 120.963,183.427 121.257,183.427L159.944,183.427L178.572,202.055C178.89,202.372 179.238,202.664 179.615,202.929L140.485,231.574C139.481,232.31 138.822,233.393 138.632,234.624C138.442,235.855 138.742,237.087 139.478,238.091C140.351,239.286 141.759,240 143.244,240C144.243,240 145.196,239.687 145.996,239.099L244.591,166.921L245,166.621L245,143.955C245,141.384 242.907,139.291 240.336,139.291"/>
<path d="M105.601,87.164C105.601,95.797 112.624,102.82 121.257,102.82C129.89,102.82 136.913,95.797 136.913,87.164C136.913,78.531 129.89,71.508 121.257,71.508C112.624,71.508 105.601,78.531 105.601,87.164"/>
</g>
</svg>
</f:case>
<f:case value="webcam">
<svg viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" stroke="none" fill="currentColor">
<g>
<path d="M164.411,108.269C164.411,97.508 160.611,88.328 153.01,80.727C145.409,73.126 136.228,69.325 125.467,69.325C114.707,69.325 105.526,73.126 97.925,80.727C90.324,88.328 86.524,97.508 86.524,108.269C86.524,119.03 90.324,128.21 97.925,135.811C105.526,143.412 114.707,147.213 125.467,147.213C136.228,147.213 145.409,143.412 153.01,135.811C160.611,128.21 164.411,119.03 164.411,108.269M98.822,108.269C98.822,100.924 101.427,94.647 106.636,89.438C111.846,84.228 118.123,81.623 125.467,81.623C132.812,81.623 139.089,84.228 144.299,89.438C149.508,94.647 152.113,100.924 152.113,108.269C152.113,115.614 149.508,121.891 144.299,127.1C139.089,132.31 132.812,134.915 125.467,134.915C118.123,134.915 111.846,132.31 106.636,127.1C101.427,121.891 98.822,115.614 98.822,108.269M223.851,208.703L131.616,208.703L131.616,187.95C142.036,187.096 151.686,184.448 160.568,180.007C169.621,175.566 177.435,169.759 184.011,162.585C190.587,155.411 195.839,147.213 199.768,137.989C203.525,128.595 205.404,118.688 205.404,108.269C205.404,97.167 203.269,86.748 198.999,77.012C194.9,67.447 189.221,59.034 181.961,51.775C174.702,44.516 166.205,38.751 156.469,34.481C146.903,30.382 136.57,28.332 125.467,28.332C114.365,28.332 104.031,30.382 94.466,34.481C84.73,38.751 76.233,44.516 68.974,51.775C61.714,59.034 56.035,67.447 51.936,77.012C47.666,86.748 45.531,97.167 45.531,108.269C45.531,118.688 47.409,128.595 51.167,137.989C54.925,147.213 60.134,155.411 66.796,162.585C73.457,169.759 81.229,175.566 90.111,180.007C99.163,184.448 108.814,187.096 119.062,187.95L119.318,187.95L119.318,208.703L27.084,208.703C25.375,208.703 23.924,209.3 22.728,210.496C21.532,211.692 20.935,213.143 20.935,214.852C20.935,216.56 21.532,218.011 22.728,219.207C23.924,220.403 25.375,221.001 27.084,221.001L223.851,221.001C225.559,221.001 227.011,220.403 228.207,219.207C229.402,218.011 230,216.56 230,214.852C230,213.143 229.402,211.692 228.207,210.496C227.011,209.3 225.559,208.703 223.851,208.703M57.828,108.269C57.828,98.875 59.622,90.078 63.209,81.88C66.625,73.681 71.407,66.507 77.556,60.358C83.706,54.209 90.879,49.427 99.078,46.01C107.277,42.424 116.073,40.63 125.467,40.63C134.862,40.63 143.658,42.424 151.857,46.01C160.056,49.427 167.229,54.209 173.378,60.358C179.527,66.507 184.31,73.681 187.726,81.88C191.313,90.078 193.106,98.875 193.106,108.269C193.106,117.663 191.313,126.46 187.726,134.658C184.31,142.857 179.527,150.031 173.378,156.18C167.229,162.329 160.056,167.111 151.857,170.528C143.658,174.114 134.862,175.908 125.467,175.908C116.073,175.908 107.277,174.114 99.078,170.528C90.879,166.941 83.748,162.115 77.685,156.052C71.621,149.988 66.796,142.857 63.209,134.658C59.622,126.46 57.828,117.663 57.828,108.269"/>
</g>
</svg>
</f:case>
<f:case value="chat">
<svg viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" stroke="none" fill="currentColor">
<g>
<path d="M208.235,84.81L177.235,84.81L177.235,53.81C177.235,50.315 175.981,47.314 173.474,44.806C170.967,42.299 167.965,41.045 164.47,41.045L47.764,41.045C44.269,41.045 41.268,42.299 38.761,44.806C36.253,47.314 35,50.315 35,53.81L35,170.516C35,171.58 35.304,172.567 35.911,173.479C36.519,174.391 37.279,175.075 38.191,175.531C38.495,175.683 38.837,175.797 39.217,175.873C39.597,175.948 40.014,175.986 40.47,175.986C41.078,175.986 41.686,175.873 42.294,175.645C42.902,175.417 43.434,175.151 43.889,174.847L78.536,146.81L78.764,146.81L78.764,177.81C78.764,181.305 80.018,184.306 82.525,186.814C85.033,189.321 88.034,190.575 91.529,190.575L177.463,190.575L212.11,218.611C212.566,218.915 213.098,219.181 213.706,219.409C214.313,219.637 214.921,219.751 215.529,219.751C215.985,219.751 216.403,219.713 216.783,219.637C217.163,219.561 217.505,219.447 217.809,219.295C218.72,218.839 219.48,218.156 220.088,217.244C220.696,216.332 221,215.344 221,214.281L221,97.575C221,94.08 219.746,91.078 217.239,88.571C214.731,86.064 211.73,84.81 208.235,84.81M76.485,135.869C75.877,135.869 75.269,135.983 74.661,136.211C74.054,136.439 73.522,136.705 73.066,137.009L45.941,159.119L45.941,53.81C45.941,53.354 46.131,52.936 46.511,52.556C46.891,52.176 47.309,51.986 47.764,51.986L164.47,51.986C164.926,51.986 165.344,52.176 165.724,52.556C166.104,52.936 166.294,53.354 166.294,53.81L166.294,134.045C166.294,134.501 166.104,134.919 165.724,135.299C165.344,135.679 164.926,135.869 164.47,135.869L76.485,135.869ZM210.059,202.884L182.934,180.773C182.478,180.469 181.946,180.203 181.338,179.975C180.73,179.748 180.122,179.634 179.514,179.634L91.529,179.634C91.073,179.634 90.655,179.444 90.275,179.064C89.896,178.684 89.706,178.266 89.706,177.81L89.706,146.81L164.47,146.81C167.965,146.81 170.967,145.556 173.474,143.049C175.981,140.542 177.235,137.54 177.235,134.045L177.235,95.751L208.235,95.751C208.691,95.751 209.109,95.941 209.489,96.321C209.869,96.701 210.059,97.119 210.059,97.575L210.059,202.884Z"/>
</g>
</svg>
</f:case>
<f:defaultCase>
<svg viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" stroke="none" fill="currentColor">
<g>
<path d="M38.271,44.944C37.617,45.598 37.126,46.294 36.799,47.03C36.472,47.766 36.308,48.625 36.308,49.606L36.308,214.504C36.308,216.14 36.88,217.53 38.026,218.675C39.171,219.82 40.561,220.393 42.197,220.393C43.833,220.393 45.224,219.82 46.369,218.675C47.514,217.53 48.086,216.14 48.086,214.504L48.086,170.089C61.828,158.965 74.874,154.957 87.225,158.066C99.576,161.174 112.458,166 125.873,172.543C133.889,176.469 142.15,180.191 150.656,183.708C159.163,187.225 167.915,188.984 176.912,188.984C183.62,188.984 190.449,187.716 197.402,185.18C204.355,182.645 211.511,178.187 218.873,171.807C219.364,171.316 219.814,170.662 220.223,169.844C220.632,169.026 220.836,168.208 220.836,167.39L220.836,49.606C220.836,47.97 220.263,46.58 219.118,45.435C217.973,44.29 216.583,43.717 214.947,43.717C214.129,43.717 213.393,43.84 212.738,44.085C212.084,44.331 211.511,44.617 211.021,44.944C196.788,57.377 183.374,62.08 170.778,59.053C158.182,56.027 145.013,51.079 131.271,44.208C124.4,40.772 117.284,37.501 109.923,34.393C102.561,31.284 95.036,29.28 87.348,28.381C79.659,27.481 71.725,28.176 63.545,30.466C55.366,32.757 46.941,37.583 38.271,44.944M209.058,164.691C195.316,175.815 182.27,179.823 169.919,176.715C157.568,173.607 144.686,168.699 131.271,161.992C125.055,159.047 118.675,156.103 112.131,153.158C105.424,150.213 98.635,148.128 91.765,146.901C84.894,145.674 77.778,145.551 70.416,146.533C63.218,147.678 55.775,150.704 48.086,155.612L48.086,52.305C61.828,41.018 74.874,36.928 87.225,40.036C99.576,43.145 112.458,48.052 125.873,54.759C132.089,57.868 138.469,60.894 145.013,63.839C151.72,66.62 158.509,68.664 165.379,69.973C172.25,71.282 179.366,71.364 186.728,70.218C193.926,69.073 201.369,66.129 209.058,61.385L209.058,164.691Z"/>
</g>
</svg>
</f:defaultCase>
</f:switch>
</f:section>
</html>