Merge branch 'develop'

This commit is contained in:
Björn Fromme
2025-02-25 14:28:51 +01:00
4 changed files with 143 additions and 33 deletions
@@ -27,6 +27,7 @@ namespace EP\EpProducts\Domain\Model;
* This copyright notice MUST APPEAR in all copies of the script! * This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/ ***************************************************************/
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
use TYPO3\CMS\Extbase\Persistence\ObjectStorage; use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
@@ -169,22 +170,27 @@ class Hotel extends AbstractEntity implements TeaserInterface
protected $address = ''; protected $address = '';
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> * @var ObjectStorage<FileReference>
*/ */
protected $images; protected $images;
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> * @var FileReference
*/
protected $tourThumbnail;
/**
* @var ObjectStorage<FileReference>
*/ */
protected $resellerImages; protected $resellerImages;
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> * @var ObjectStorage<FileReference>
*/ */
protected $teaserImages; protected $teaserImages;
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> * @var ObjectStorage<FileReference>
*/ */
protected $headerImages; protected $headerImages;
@@ -194,7 +200,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
protected $code = ''; protected $code = '';
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\MatchCode> * @var ObjectStorage<MatchCode>
* @TYPO3\CMS\Extbase\Annotation\ORM\Lazy * @TYPO3\CMS\Extbase\Annotation\ORM\Lazy
*/ */
protected $additionalCodes; protected $additionalCodes;
@@ -210,32 +216,32 @@ class Hotel extends AbstractEntity implements TeaserInterface
protected $category = self::CATEGORY_STANDARD; protected $category = self::CATEGORY_STANDARD;
/** /**
* @var \EP\EpProducts\Domain\Model\Country * @var Country
*/ */
protected $country; protected $country;
/** /**
* @var \EP\EpProducts\Domain\Model\Region * @var Region
*/ */
protected $region; protected $region;
/** /**
* @var \EP\EpProducts\Domain\Model\City * @var City
*/ */
protected $city; protected $city;
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Teammember> * @var ObjectStorage<Teammember>
*/ */
protected $teamer; protected $teamer;
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Product> * @var ObjectStorage<Product>
*/ */
protected $products; protected $products;
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> * @var ObjectStorage<Fact>
*/ */
protected $facts; protected $facts;
@@ -244,23 +250,28 @@ class Hotel extends AbstractEntity implements TeaserInterface
*/ */
protected $externalLink; protected $externalLink;
/**
* @var string
*/
protected $tourLink;
/** /**
* @var string * @var string
*/ */
protected $pathSegment; protected $pathSegment;
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\GroupsPriceConfig> * @var ObjectStorage<GroupsPriceConfig>
*/ */
protected $groupsPriceConfigs; protected $groupsPriceConfigs;
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\GroupsPriceOption> * @var ObjectStorage<GroupsPriceOption>
*/ */
protected $groupsPriceOptions; protected $groupsPriceOptions;
/** /**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\GroupsPriceBoard> * @var ObjectStorage<GroupsPriceBoard>
*/ */
protected $groupsPriceBoards; protected $groupsPriceBoards;
@@ -861,7 +872,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage $teamer * @return ObjectStorage $teamer
*/ */
public function getTeamer() public function getTeamer()
{ {
@@ -869,7 +880,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $teamer * @param ObjectStorage $teamer
*/ */
public function setTeamer(ObjectStorage $teamer) public function setTeamer(ObjectStorage $teamer)
{ {
@@ -893,7 +904,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage * @return ObjectStorage
*/ */
public function getProducts() public function getProducts()
{ {
@@ -901,7 +912,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $products * @param ObjectStorage $products
*/ */
public function setProducts(ObjectStorage $products) public function setProducts(ObjectStorage $products)
{ {
@@ -909,7 +920,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $rooms * @param ObjectStorage $rooms
*/ */
public function setRooms($rooms) { public function setRooms($rooms) {
$this->rooms = $rooms; $this->rooms = $rooms;
@@ -932,7 +943,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage * @return ObjectStorage
*/ */
public function getFacts() public function getFacts()
{ {
@@ -940,7 +951,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $facts * @param ObjectStorage $facts
*/ */
public function setFacts(ObjectStorage $facts) public function setFacts(ObjectStorage $facts)
{ {
@@ -996,7 +1007,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage * @return ObjectStorage
*/ */
public function getGroupsPriceConfigs() public function getGroupsPriceConfigs()
{ {
@@ -1004,7 +1015,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $groupPriceConfigs * @param ObjectStorage $groupPriceConfigs
*/ */
public function setGroupsPriceConfigs(ObjectStorage $groupPriceConfigs) public function setGroupsPriceConfigs(ObjectStorage $groupPriceConfigs)
{ {
@@ -1012,7 +1023,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage * @return ObjectStorage
*/ */
public function getGroupsPriceOptions() public function getGroupsPriceOptions()
{ {
@@ -1020,7 +1031,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $groupsPriceOptions * @param ObjectStorage $groupsPriceOptions
*/ */
public function setGroupsPriceOptions(ObjectStorage $groupsPriceOptions) public function setGroupsPriceOptions(ObjectStorage $groupsPriceOptions)
{ {
@@ -1028,7 +1039,7 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage * @return ObjectStorage
*/ */
public function getGroupsPriceBoards() public function getGroupsPriceBoards()
{ {
@@ -1036,10 +1047,30 @@ class Hotel extends AbstractEntity implements TeaserInterface
} }
/** /**
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $groupsPriceBoards * @param ObjectStorage $groupsPriceBoards
*/ */
public function setGroupsPriceBoards(ObjectStorage $groupsPriceBoards) public function setGroupsPriceBoards(ObjectStorage $groupsPriceBoards)
{ {
$this->groupsPriceBoards = $groupsPriceBoards; $this->groupsPriceBoards = $groupsPriceBoards;
} }
public function getTourThumbnail()
{
return $this->tourThumbnail;
}
public function setTourThumbnail(FileReference $tourThumbnail)
{
$this->tourThumbnail = $tourThumbnail;
}
public function getTourLink()
{
return $this->tourLink;
}
public function setTourLink(string $tourLink)
{
$this->tourLink = $tourLink;
}
} }
@@ -25,17 +25,17 @@ return [
], ],
'types' => [ 'types' => [
'1' => [ '1' => [
'showitem' => '--palette--;;top, --palette--;;name, --palette--;;geolocation, 'showitem' => '--palette--;;top, --palette--;;name, --palette--;;geolocation,
--palette--;;destinations, --palette--;;categories, keywords, --palette--;;destinations, --palette--;;categories, keywords,
--div--;Texte, teaser, description, features, room_types, additional_information, --div--;Texte, teaser, description, features, room_types, additional_information,
--div--;Verknüpfungen, facts, teamer, additional_codes, --div--;Verknüpfungen, facts, teamer, additional_codes,
--div--;Bilder/Dateien, teaser_images, header_images, images, reseller_images, --div--;Bilder/Dateien, teaser_images, header_images, images, reseller_images, tour_thumbnail,
--div--;Gruppenhaus Preise, groups_price_configs, groups_price_boards, groups_price_options', --div--;Gruppenhaus Preise, groups_price_configs, groups_price_boards, groups_price_options',
], ],
], ],
'palettes' => [ 'palettes' => [
'top' => ['showitem' => 'hidden,earlybird,new,low_contingent,show_as_teaser, 'top' => ['showitem' => 'hidden,earlybird,new,low_contingent,show_as_teaser,
--linebreak--,code,detail_page,--linebreak--,external_link,path_segment'], --linebreak--,code,detail_page,--linebreak--,external_link,tour_link,--linebreak--,path_segment'],
'geolocation' => ['showitem' => 'address, longitude, latitude'], 'geolocation' => ['showitem' => 'address, longitude, latitude'],
'destinations' => ['showitem' => 'country,region,city'], 'destinations' => ['showitem' => 'country,region,city'],
'name' => ['showitem' => 'name,short_name,--linebreak--,header_title,header_subtitle,--linebreak--,headline'], 'name' => ['showitem' => 'name,short_name,--linebreak--,header_title,header_subtitle,--linebreak--,headline'],
@@ -400,6 +400,46 @@ return [
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
), ),
], ],
'tour_thumbnail' => [
'exclude' => 0,
'label' => 'Thumbnail Rundgang',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'tour_thumbnail',
[
'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' => 'Preview',
'allowedAspectRatios' => [
'preview' => [
'title' => 'Standard',
'value' => 1.8,
],
],
],
],
],
],
],
],
'maxitems' => 1,
],
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
),
],
'reseller_images' => [ 'reseller_images' => [
'exclude' => 0, 'exclude' => 0,
'label' => 'Bilder für Vertriebspartner', 'label' => 'Bilder für Vertriebspartner',
@@ -442,6 +482,16 @@ return [
'renderType' => 'inputLink', 'renderType' => 'inputLink',
], ],
], ],
'tour_link' => [
'exclude' => 0,
'label' => 'URL 360° Rundgang (matterport)',
'config' => [
'type' => 'input',
'size' => 30,
'eval' => 'trim',
'renderType' => 'inputLink',
],
],
'type' => [ 'type' => [
'exclude' => 0, 'exclude' => 0,
'label' => 'Typ', 'label' => 'Typ',
@@ -233,9 +233,11 @@ CREATE TABLE tx_epproducts_domain_model_hotel
teaser_images int(11) unsigned NOT NULL default '0', teaser_images int(11) unsigned NOT NULL default '0',
header_images int(11) unsigned NOT NULL default '0', header_images int(11) unsigned NOT NULL default '0',
images int(11) unsigned NOT NULL default '0', images int(11) unsigned NOT NULL default '0',
tour_thumbnail int(11) unsigned NOT NULL default '0',
reseller_images int(11) unsigned NOT NULL default '0', reseller_images int(11) unsigned NOT NULL default '0',
code varchar(255) DEFAULT '' NOT NULL, code varchar(255) DEFAULT '' NOT NULL,
external_link varchar(255) DEFAULT '' NOT NULL, external_link varchar(255) DEFAULT '' NOT NULL,
tour_link varchar(255) DEFAULT '' NOT NULL,
path_segment varchar(255) DEFAULT '' NOT NULL, path_segment varchar(255) DEFAULT '' NOT NULL,
type varchar(255) DEFAULT '' NOT NULL, type varchar(255) DEFAULT '' NOT NULL,
category int(11) DEFAULT '0' NOT NULL, category int(11) DEFAULT '0' NOT NULL,
@@ -239,6 +239,33 @@
<f:render partial="Region/Webcam" arguments="{region: product.region}"/> <f:render partial="Region/Webcam" arguments="{region: product.region}"/>
<f:render partial="RegionMaps" arguments="{region: product.region}"/> <f:render partial="RegionMaps" arguments="{region: product.region}"/>
<f:render partial="RegionAward" arguments="{region: product.region}"/> <f:render partial="RegionAward" arguments="{region: product.region}"/>
<f:if condition="{hotel.tourLink}">
<div class="bg-zinc-50 p-4 mb-4"
data-controller="lightbox">
<p class="font-bold mb-2">
360°-Rundgang
</p>
<a href="{hotel.tourLink}"
target="_blank"
title="360°-Rundgang {hotel.name}">
<f:if condition="{hotel.tourThumbnail}">
<f:then>
<ep:lazyLoadImage image="{hotel.tourThumbnail}"
loaderimg="EXT:ep_theme/Resources/Public/images/lazy.png"
class="block w-full h-auto"
width="330"
alt="360°-Rundgang {hotel.name}"
title="360°-Rundgang {hotel.name}"/>
</f:then>
<f:else>
<div class="button bg-button w-full">
öffnen
</div>
</f:else>
</f:if>
</a>
</div>
</f:if>
<f:if condition="{product.banner}"> <f:if condition="{product.banner}">
<div class="bg-zinc-50 p-4 mb-4"> <div class="bg-zinc-50 p-4 mb-4">
<f:link.typolink parameter="{product.banner.originalResource.link}" <f:link.typolink parameter="{product.banner.originalResource.link}"