diff --git a/composer.json b/composer.json index b4042e08..10b8988c 100644 --- a/composer.json +++ b/composer.json @@ -8,6 +8,7 @@ "type": "project", "require": { "php": "^5.6", + "ext-json": "*", "typo3/cms": "^7.6", "georgringer/news": "^6.1", "dmitryd/typo3-realurl": "^2.3", @@ -65,7 +66,8 @@ "yohang/calendr": "^2.1", "wyrihaximus/html-compress": "^1.4", "symfony/serializer": "3.3.*", - "symfony/property-access": "^3.4" + "symfony/property-access": "^3.4", + "symfony/options-resolver": "^3.4" }, "scripts": { "typo3-cms-scripts": [ diff --git a/composer.lock b/composer.lock index 1ec936eb..1258560c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "218f290216c085ca0d43c4cb1fde6c13", + "content-hash": "24a1dae8a5e81d4d36f7e5988eaace7a", "packages": [ { "name": "cogpowered/finediff", @@ -1918,16 +1918,16 @@ }, { "name": "symfony/options-resolver", - "version": "v3.4.13", + "version": "v3.4.14", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "638f5ad40a6400d78568187522731e5643eed60a" + "reference": "6debc476953a45969ab39afe8dee0b825f356dc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/638f5ad40a6400d78568187522731e5643eed60a", - "reference": "638f5ad40a6400d78568187522731e5643eed60a", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/6debc476953a45969ab39afe8dee0b825f356dc7", + "reference": "6debc476953a45969ab39afe8dee0b825f356dc7", "shasum": "" }, "require": { @@ -1968,7 +1968,7 @@ "configuration", "options" ], - "time": "2018-07-07T15:09:44+00:00" + "time": "2018-07-26T08:45:46+00:00" }, { "name": "symfony/polyfill-ctype", diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php index 313ed164..652f199f 100644 --- a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php @@ -108,12 +108,18 @@ class AjaxDateController extends ActionController ; $altLabel = $product->getAltLabel(); } - $template = $this->settings['bpnBookingUrlTemplateCode']; - $paCode = null; if ($reseller = $this->resellerService->getResellerForCurrentDomain()) { $paCode = $reseller['paCode']; + } else { + $paCode = null; } - $datesTable = $this->dateService->getDatesTable($product, $hotel, $filterSettings, $template, $paCode); + $datesTable = $this->dateService->getDatesTable([ + 'product' => $product, + 'hotel' => $hotel, + 'filterSettings' => $filterSettings, + 'template' => $this->settings['bpnBookingUrlTemplateCode'], + 'paCode' => $paCode, + ]); return json_encode([ 'dates' => $datesTable, 'bookable' => $product->getBookable(), diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxTableController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxTableController.php index 5368fd35..148851f6 100644 --- a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxTableController.php +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxTableController.php @@ -91,12 +91,19 @@ class AjaxTableController extends ActionController $forcedConceptUid = (int) $this->settings['forcedConceptUid']; $filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUid, false); } - $paCode = null; if ($reseller = $this->resellerService->getResellerForCurrentDomain()) { $paCode = $reseller['paCode']; + } else { + $paCode = null; } - $template = $this->settings['bpnBookingUrlTemplateCode']; - $priceTable = $this->dateService->getPriceTable($product, $hotel, $filterSettings, $date, $template, $paCode); + $priceTable = $this->dateService->getPriceTable([ + 'product' => $product, + 'hotel' => $hotel, + 'filterSettings' => $filterSettings, + 'date' => $date, + 'template' => $this->settings['bpnBookingUrlTemplateCode'], + 'paCode' => $paCode, + ]); return json_encode([ 'dateStart' => $date ? $date->getDateStart()->format('Y-m-d') : '', 'dateEnd' => $date ? $date->getDateEnd()->format('Y-m-d') : '', @@ -111,13 +118,18 @@ class AjaxTableController extends ActionController */ public function pricetableHtmlAction(Product $product, Hotel $hotel) { - $filterSettings = $this->filterService->getDefaultFilterSettings(); - $paCode = null; if ($reseller = $this->resellerService->getResellerForCurrentDomain()) { $paCode = $reseller['paCode']; + } else { + $paCode = null; } - $template = $this->settings['bpnBookingUrlTemplateCode']; - $pricetable = $this->dateService->getPriceTable($product, $hotel, $filterSettings, null, $template, $paCode); + $pricetable = $this->dateService->getPriceTable([ + 'product' => $product, + 'hotel' => $hotel, + 'filterSettings' => $this->filterService->getDefaultFilterSettings(), + 'template' => $this->settings['bpnBookingUrlTemplateCode'], + 'paCode' => $paCode, + ]); $this->view->assign('pricetable', $pricetable); } diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/ProductController.php b/web/typo3conf/ext/ep_products/Classes/Controller/ProductController.php index 1822b24e..ac4e72dc 100644 --- a/web/typo3conf/ext/ep_products/Classes/Controller/ProductController.php +++ b/web/typo3conf/ext/ep_products/Classes/Controller/ProductController.php @@ -175,8 +175,11 @@ class ProductController extends ActionController $hotelUid = $this->settings['hotelUid']; /** @var \EP\EpProducts\Domain\Model\Hotel $hotel */ $hotel = $this->hotelRepository->findByIdentifier($hotelUid); - $filterSettings = $this->filterService->getDefaultFilterSettings(); - $pricetable = $this->dateService->getPriceTable($product, $hotel, $filterSettings); + $pricetable = $this->dateService->getPriceTable([ + 'product' => $product, + 'hotel' => $hotel, + 'filterSettings' => $this->filterService->getDefaultFilterSettings(), + ]); $this->view->assign('pricetable', $pricetable); } diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Product.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Product.php index 3cdd47d2..6a27fb17 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Product.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Product.php @@ -40,6 +40,11 @@ class Product extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity implements */ protected $bookable = true; + /** + * @var bool + */ + protected $daytrip = false; + /** * @var int */ @@ -286,6 +291,22 @@ class Product extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity implements $this->bookable = (bool) $bookable; } + /** + * @return bool + */ + public function isDaytrip() + { + return $this->daytrip; + } + + /** + * @param bool $daytrip + */ + public function setDaytrip($daytrip) + { + $this->daytrip = $daytrip; + } + /** * @return int */ diff --git a/web/typo3conf/ext/ep_products/Classes/Service/DateService.php b/web/typo3conf/ext/ep_products/Classes/Service/DateService.php index 9af2eda0..f293d080 100644 --- a/web/typo3conf/ext/ep_products/Classes/Service/DateService.php +++ b/web/typo3conf/ext/ep_products/Classes/Service/DateService.php @@ -33,6 +33,7 @@ use EP\EpProducts\Domain\Model\Product; use EP\EpProducts\Domain\Repository\DateRepository; use EP\EpProducts\Domain\Repository\ProductRepository; use EP\EpProducts\Utility\BookingUrlUtility; +use Symfony\Component\OptionsResolver\OptionsResolver; use TYPO3\CMS\Core\SingletonInterface; class DateService implements SingletonInterface @@ -57,7 +58,12 @@ class DateService implements SingletonInterface * @param DateRepository $dateRepository * @param FilterService $filterService */ - public function __construct(ProductRepository $productRepository, DateRepository $dateRepository, FilterService $filterService) + public function __construct + ( + ProductRepository $productRepository, + DateRepository $dateRepository, + FilterService $filterService + ) { $this->productRepository = $productRepository; $this->filterService = $filterService; @@ -65,55 +71,93 @@ class DateService implements SingletonInterface } /** - * @param Product $product - * @param Hotel $hotel - * @param FilterSettings|null $filterSettings - * @param Date|null $date - * @param string $template - * @param string $paCode - * + * @param array $options * @return array */ - public function getPriceTable - ( - Product $product, - Hotel $hotel, - FilterSettings $filterSettings = null, - Date $date = null, - $template = 'base', - $paCode = null - ) + public function getPriceTable(array $options) { + $resolver = new OptionsResolver(); + $this->configurePriceTableOptions($resolver); + $resolvedOptions = $resolver->resolve($options); + + /** @var Product $product */ + $product = $resolvedOptions['product']; + $hotel = $resolvedOptions['hotel']; + $filterSettings = $resolvedOptions['filterSettings']; + $date = $resolvedOptions['date']; + $template = $resolvedOptions['template']; + $paCode = $resolvedOptions['paCode']; + if ($filterSettings === null) { $filterSettings = $this->filterService->getDefaultFilterSettings(); } - $priceTableData = $this->productRepository->getPricetable($product, $hotel, $filterSettings, $date); - return $this->preprocessPriceTable($priceTableData, $template, $paCode); + + return $this->preprocessPriceTable([ + 'priceTableData' => $this->productRepository->getPricetable($product, $hotel, $filterSettings, $date), + 'template' => $template, + 'paCode' => $paCode, + 'isDayTrip' => $product->isDaytrip(), + ]); } /** - * @param Product $product - * @param Hotel $hotel - * @param FilterSettings|null $filterSettings - * @param string $template - * @param string $paCode - * + * @param OptionsResolver $resolver + */ + protected function configurePriceTableOptions(OptionsResolver $resolver) + { + $resolver->setRequired(['product', 'hotel']); + $resolver->setDefaults([ + 'filterSettings' => null, + 'date' => null, + 'template' => 'base', + 'paCode' => null, + ]); + $resolver->setAllowedTypes('product', Product::class); + $resolver->setAllowedTypes('hotel', Hotel::class); + $resolver->setAllowedTypes('date', Date::class); + } + + /** + * @param array $options * @return array */ - public function getDatesTable - ( - Product $product, - Hotel $hotel, - FilterSettings $filterSettings = null, - $template = 'base', - $paCode = null - ) + public function getDatesTable(array $options) { + $resolver = new OptionsResolver(); + $this->configureDatesTableOptions($resolver); + $resolvedOptions = $resolver->resolve($options); + + /** @var Product $product */ + $product = $resolvedOptions['product']; + $hotel = $resolvedOptions['hotel']; + $filterSettings = $resolvedOptions['filterSettings']; + $template = $resolvedOptions['template']; + $paCode = $resolvedOptions['paCode']; + if ($filterSettings === null) { $filterSettings = $this->filterService->getDefaultFilterSettings(); } - $dateTableData = $this->productRepository->getAvailableDates($product, $hotel, $filterSettings); - return $this->preprocessDateTable($dateTableData, $template, $paCode); + return $this->preprocessDateTable([ + 'dateTableData' => $this->productRepository->getAvailableDates($product, $hotel, $filterSettings), + 'template' => $template, + 'paCode' => $paCode, + 'isDayTrip' => $product->isDaytrip(), + ]); + } + + /** + * @param OptionsResolver $resolver + */ + protected function configureDatesTableOptions(OptionsResolver $resolver) + { + $resolver->setRequired(['product', 'hotel']); + $resolver->setDefaults([ + 'filterSettings' => null, + 'template' => 'base', + 'paCode' => null, + ]); + $resolver->setAllowedTypes('product', Product::class); + $resolver->setAllowedTypes('hotel', Hotel::class); } /** @@ -124,8 +168,13 @@ class DateService implements SingletonInterface */ public function getEventPriceTable(Product $product, $maxPax = 99, $template = 'base') { + $priceTableData = $this->productRepository->getEventPriceTable($product); - return $this->preprocessEventPriceTable($priceTableData, $maxPax, $template); + return $this->preprocessEventPriceTable([ + 'priceTableData' => $priceTableData, + 'maxPax' => $maxPax, + 'template' => $template, + ]); } /** @@ -189,27 +238,37 @@ class DateService implements SingletonInterface } /** - * @param array $priceTableData - * @param string $template - * @param string $paCode - * + * @param array $options * @return array */ - public function preprocessPriceTable(array $priceTableData, $template, $paCode = null) + public function preprocessPriceTable(array $options) { + $resolver = new OptionsResolver(); + $resolver->setRequired(['priceTableData', 'template']); + $resolver->setDefaults([ + 'paCode' => null, + 'isDayTrip' => false, + ]); + $resolvedOptions = $resolver->resolve($options); $priceTable = []; + $priceTableData = $resolvedOptions['priceTableData']; + $template = $resolvedOptions['template']; + $paCode = $resolvedOptions['paCode']; + $isDayTrip = $resolvedOptions['isDayTrip']; + foreach ($priceTableData as $row) { $dateStart = new \DateTime($row['dateStart']); $dateEnd = new \DateTime($row['dateEnd']); - $bookingUrl = BookingUrlUtility::generateUrl( - $row['dateBusProId'], - $row['hotelBusProId'], - $row['dateEnd'], - $template, - $paCode - ); + $bookingUrl = BookingUrlUtility::generateUrl([ + 'bookingId' => $row['dateBusProId'], + 'hotelId' => $row['hotelBusProId'], + 'dateEnd' => $row['dateEnd'], + 'template' => $template, + 'paCode' => $paCode, + 'isDayTrip' => $isDayTrip, + ]); $priceTable[] = [ 'dateStart' => $dateStart->format('d.m.Y'), 'dateEnd' => $dateEnd->format('d.m.Y'), @@ -234,26 +293,38 @@ class DateService implements SingletonInterface } /** - * @param array $dateTableData - * @param string $template - * @param string $paCode - * + * @param array $options * @return array */ - public function preprocessDateTable(array $dateTableData, $template, $paCode = null) + public function preprocessDateTable(array $options) { + $resolver = new OptionsResolver(); + $resolver->setRequired(['dateTableData', 'template']); + $resolver->setDefaults([ + 'paCode' => null, + 'isDayTrip' => false, + ]); + $resolvedOptions = $resolver->resolve($options); + $dateTable = []; + + $dateTableData = $resolvedOptions['dateTableData']; + $template = $resolvedOptions['template']; + $paCode = $resolvedOptions['paCode']; + $isDayTrip = $resolvedOptions['isDayTrip']; + foreach ($dateTableData as $row) { $dateStart = new \DateTime($row['dateStart']); $dateEnd = new \DateTime($row['dateEnd']); - $bookingUrl = BookingUrlUtility::generateUrl( - $row['dateBusProId'], - $row['hotelBusProId'], - $row['dateEnd'], - $template, - $paCode - ); + $bookingUrl = BookingUrlUtility::generateUrl([ + 'bookingId' => $row['dateBusProId'], + 'hotelId' =>$row['hotelBusProId'], + 'dateEnd' => $row['dateEnd'], + 'template' => $template, + 'paCode' => $paCode, + 'isDayTrip' => $isDayTrip, + ]); $dateTable[] = [ 'dateUid' => $row['dateUid'], 'dateStart' => $dateStart->format('d.m.y'), @@ -275,15 +346,25 @@ class DateService implements SingletonInterface } /** - * @param array $priceTableData - * @param int $maxPax - * @param string $template - * @param string $paCode - * + * @param array $options * @return array */ - public function preprocessEventPriceTable(array $priceTableData, $maxPax = 99, $template = 'base', $paCode = null) + public function preprocessEventPriceTable(array $options) { + $resolver = new OptionsResolver(); + $resolver->setRequired(['priceTableData']); + $resolver->setDefaults([ + 'maxPax' => 99, + 'template' => 'base', + 'paCode' => null, + ]); + $resolvedOptions = $resolver->resolve($options); + + $priceTableData = $resolvedOptions['priceTableData']; + $maxPax = $resolvedOptions['maxPax']; + $template = $resolvedOptions['template']; + $paCode = $resolvedOptions['paCode']; + $priceTable = [ Hotel::CATEGORY_STANDARD => [], Hotel::CATEGORY_COMFORT => [], @@ -300,13 +381,13 @@ class DateService implements SingletonInterface 'category' => $categoryUid, 'hotelName' => $row['hotelName'], 'hotelTitle' => $row['hotelTitle'], - 'bookingUrl' => BookingUrlUtility::generateUrl( - $row['dateBusProId'], - $row['hotelBusProId'], - $row['dateEnd'], - $template, - $paCode - ), + 'bookingUrl' => BookingUrlUtility::generateUrl([ + 'bookingId' => $row['dateBusProId'], + 'hotelId' => $row['hotelBusProId'], + 'dateEnd' => $row['dateEnd'], + 'template' => $template, + 'paCode' => $paCode, + ]), 'rooms' => [], ]; } diff --git a/web/typo3conf/ext/ep_products/Classes/Service/ResellerService.php b/web/typo3conf/ext/ep_products/Classes/Service/ResellerService.php index 5af9a5ec..0c867da1 100644 --- a/web/typo3conf/ext/ep_products/Classes/Service/ResellerService.php +++ b/web/typo3conf/ext/ep_products/Classes/Service/ResellerService.php @@ -111,12 +111,12 @@ class ResellerService implements SingletonInterface $data[$row['dateStart']] = $date; } - $date->bookingurl = BookingUrlUtility::generateResellerUrl( - $row['dateBusProId'], - $row['hotelBusProId'], - $row['dateEnd'], - $paCode - ); + $date->bookingurl = BookingUrlUtility::generateResellerUrl([ + 'bookingId' => $row['dateBusProId'], + 'hotelId' => $row['hotelBusProId'], + 'dateEnd' => $row['dateEnd'], + 'paCode' => $paCode, + ]); $date->rooms['room'][] = Room::fromArray($row); } diff --git a/web/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php b/web/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php index af19d2d5..4f4d7e50 100644 --- a/web/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php +++ b/web/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php @@ -2,8 +2,6 @@ namespace EP\EpProducts\Utility; -use TYPO3\CMS\Core\Utility\GeneralUtility; - /*************************************************************** * * Copyright notice @@ -29,6 +27,9 @@ use TYPO3\CMS\Core\Utility\GeneralUtility; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ +use Symfony\Component\OptionsResolver\OptionsResolver; +use TYPO3\CMS\Core\Utility\GeneralUtility; + class BookingUrlUtility { @@ -37,16 +38,29 @@ class BookingUrlUtility const URL_BASE = 'https://bpn.ep-reisen.de/buspronet/maske_buchung.php'; /** - * @param int $bookingId - * @param int $hotelId - * @param string $dateEnd - * @param string $template - * @param string $paCode + * @param array $options * @return string */ - public static function generateUrl($bookingId, $hotelId, $dateEnd, $template = 'base', $paCode = null) + public static function generateUrl(array $options) { - $query = static::buildQuery($bookingId, $hotelId, $dateEnd, $template); + $resolver = new OptionsResolver(); + $resolver->setRequired(['bookingId', 'hotelId', 'dateEnd']); + $resolver->setDefaults([ + 'template' => 'base', + 'paCode' => null, + 'isDayTrip' => false, + ]); + + $resolvedOptions = $resolver->resolve($options); + + $bookingId = $resolvedOptions['bookingId']; + $hotelId = $resolvedOptions['hotelId']; + $dateEnd = $resolvedOptions['dateEnd']; + $template = $resolvedOptions['template']; + $paCode = $resolvedOptions['paCode']; + $isDayTrip = $resolvedOptions['isDayTrip']; + + $query = static::buildQuery($bookingId, $hotelId, $dateEnd, $template, $isDayTrip); $cookie = $_COOKIE[static::COOKIE_NAME]; if (strpos($cookie, '?') !== false) { @@ -71,15 +85,29 @@ class BookingUrlUtility } /** - * @param string $bookingId - * @param string $hotelId - * @param string $dateEnd - * @param string $paCode + * @param array $options * @return string */ - public static function generateResellerUrl($bookingId, $hotelId, $dateEnd, $paCode = null) + public static function generateResellerUrl(array $options) { - $query = static::buildQuery($bookingId, $hotelId, $dateEnd); + $resolver = new OptionsResolver(); + $resolver->setRequired(['bookingId', 'hotelId', 'dateEnd']); + $resolver->setDefaults([ + 'template' => 'base', + 'paCode' => null, + 'isDayTrip' => false, + ]); + + $resolvedOptions = $resolver->resolve($options); + + $bookingId = $resolvedOptions['bookingId']; + $hotelId = $resolvedOptions['hotelId']; + $dateEnd = $resolvedOptions['dateEnd']; + $template = $resolvedOptions['template']; + $paCode = $resolvedOptions['paCode']; + $isDayTrip = $resolvedOptions['isDayTrip']; + + $query = static::buildQuery($bookingId, $hotelId, $dateEnd, $template, $isDayTrip); if ($paCode !== null) { $query['agenturcode'] = $paCode; @@ -93,16 +121,17 @@ class BookingUrlUtility * @param string $hotelId * @param string $dateEnd * @param string $template + * @param bool $isDayTrip * @return array */ - protected static function buildQuery($bookingId, $hotelId, $dateEnd, $template = 'base') + protected static function buildQuery($bookingId, $hotelId, $dateEnd, $template = 'base', $isDayTrip = false) { $query = [ 'id' => $bookingId, 'hotelid' => $hotelId, ]; - if ($dateEnd) { + if ($dateEnd && !$isDayTrip) { $query['ruecktermin'] = date('d.m.Y', strtotime($dateEnd)); } diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_product.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_product.php index bfed4160..9add6583 100644 --- a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_product.php +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_product.php @@ -30,7 +30,7 @@ return [ concept_description, board_description, additional_services, programme_description, ski_pass_description, rating_average, rating_votes_count, teaser_images, header_images, images, concept, country, region, city, journey, facts, officetip, hotels, calendar_hotel, faqs,header_title,header_subtitle, alt_product, alt_label, - video, banner, additional_regions,badge', + video, banner, additional_regions, badge, daytrip', ], 'types' => [ '1' => [ @@ -69,7 +69,7 @@ return [ ], 'palettes' => [ 'destinations' => ['showitem' => 'country,region,city'], - 'top' => ['showitem' => 'searchable, bookable, detail_page'], + 'top' => ['showitem' => 'searchable, bookable, daytrip, detail_page'], 'name' => ['showitem' => 'name,code'], 'alternative' => ['showitem' => 'alt_product, alt_label'], 'header' => ['showitem' => 'headline,subline,--linebreak--,header_title,header_subtitle'], @@ -175,6 +175,13 @@ return [ 'type' => 'check', ], ], + 'daytrip' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.daytrip', + 'config' => [ + 'type' => 'check', + ], + ], 'detail_page' => [ 'exclude' => 0, 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.detail_page', diff --git a/web/typo3conf/ext/ep_products/Resources/Private/Language/locallang.xlf b/web/typo3conf/ext/ep_products/Resources/Private/Language/locallang.xlf index 5667c390..f3d83182 100644 --- a/web/typo3conf/ext/ep_products/Resources/Private/Language/locallang.xlf +++ b/web/typo3conf/ext/ep_products/Resources/Private/Language/locallang.xlf @@ -18,6 +18,9 @@ Online buchbar + + Tagesreise + Name diff --git a/web/typo3conf/ext/ep_products/ext_tables.sql b/web/typo3conf/ext/ep_products/ext_tables.sql index 98bcc6b5..df55cba2 100644 --- a/web/typo3conf/ext/ep_products/ext_tables.sql +++ b/web/typo3conf/ext/ep_products/ext_tables.sql @@ -9,6 +9,7 @@ CREATE TABLE tx_epproducts_domain_model_product ( searchable tinyint(4) unsigned DEFAULT '1' NOT NULL, bookable tinyint(4) unsigned DEFAULT '1' NOT NULL, + daytrip tinyint(4) unsigned DEFAULT '0' NOT NULL, name varchar(255) DEFAULT '' NOT NULL, name_internal varchar(255) DEFAULT '' NOT NULL, subline varchar(255) DEFAULT '' NOT NULL, diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/BookingViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/BookingViewHelper.php index b18b6460..18af50e7 100644 --- a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/BookingViewHelper.php +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/BookingViewHelper.php @@ -67,6 +67,11 @@ class BookingViewHelper extends AbstractViewHelper if ($template === null) { $template = $this->settings['bpnBookingUrlTemplateCode']; } - return BookingUrlUtility::generateUrl($bookingId, $hotelId, $template); + $options = [ + 'bookingId' => $bookingId, + 'hotelId' => $hotelId, + 'template' => $template, + ]; + return BookingUrlUtility::generateUrl($options); } }