Merge branch 'release/2020.02-02'
This commit is contained in:
+1
-1
@@ -6,7 +6,7 @@ php_version: "7.3"
|
|||||||
webserver_type: apache-cgi
|
webserver_type: apache-cgi
|
||||||
router_http_port: "80"
|
router_http_port: "80"
|
||||||
router_https_port: "443"
|
router_https_port: "443"
|
||||||
xdebug_enabled: false
|
xdebug_enabled: true
|
||||||
additional_hostnames:
|
additional_hostnames:
|
||||||
- ep-events
|
- ep-events
|
||||||
- ski-boarderweek
|
- ski-boarderweek
|
||||||
|
|||||||
Generated
+1
-48
@@ -261,8 +261,7 @@
|
|||||||
"@babel/helper-plugin-utils": {
|
"@babel/helper-plugin-utils": {
|
||||||
"version": "7.8.3",
|
"version": "7.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
|
||||||
"integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
|
"integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"@babel/helper-regex": {
|
"@babel/helper-regex": {
|
||||||
"version": "7.8.3",
|
"version": "7.8.3",
|
||||||
@@ -433,7 +432,6 @@
|
|||||||
"version": "7.8.3",
|
"version": "7.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz",
|
||||||
"integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==",
|
"integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-plugin-utils": "^7.8.3",
|
"@babel/helper-plugin-utils": "^7.8.3",
|
||||||
"@babel/plugin-syntax-object-rest-spread": "^7.8.0"
|
"@babel/plugin-syntax-object-rest-spread": "^7.8.0"
|
||||||
@@ -509,7 +507,6 @@
|
|||||||
"version": "7.8.3",
|
"version": "7.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
|
||||||
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
|
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"@babel/helper-plugin-utils": "^7.8.0"
|
"@babel/helper-plugin-utils": "^7.8.0"
|
||||||
}
|
}
|
||||||
@@ -1757,38 +1754,6 @@
|
|||||||
"object.assign": "^4.1.0"
|
"object.assign": "^4.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"babel-plugin-syntax-dynamic-import": {
|
|
||||||
"version": "6.18.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
|
|
||||||
"integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"babel-plugin-syntax-object-rest-spread": {
|
|
||||||
"version": "6.13.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
|
|
||||||
"integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"babel-plugin-transform-object-rest-spread": {
|
|
||||||
"version": "6.26.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
|
|
||||||
"integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"babel-plugin-syntax-object-rest-spread": "^6.8.0",
|
|
||||||
"babel-runtime": "^6.26.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"babel-runtime": {
|
|
||||||
"version": "6.26.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
|
|
||||||
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"core-js": "^2.4.0",
|
|
||||||
"regenerator-runtime": "^0.11.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
@@ -2762,12 +2727,6 @@
|
|||||||
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
|
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"core-js": {
|
|
||||||
"version": "2.6.11",
|
|
||||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
|
|
||||||
"integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"core-js-compat": {
|
"core-js-compat": {
|
||||||
"version": "3.6.4",
|
"version": "3.6.4",
|
||||||
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz",
|
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz",
|
||||||
@@ -8422,12 +8381,6 @@
|
|||||||
"regenerate": "^1.4.0"
|
"regenerate": "^1.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"regenerator-runtime": {
|
|
||||||
"version": "0.11.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
|
|
||||||
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"regenerator-transform": {
|
"regenerator-transform": {
|
||||||
"version": "0.14.1",
|
"version": "0.14.1",
|
||||||
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
|
||||||
|
|||||||
+5
-5
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "epevents",
|
"name": "epevents",
|
||||||
"description": "EP Reisen TYPO3 website package",
|
"description": "EP Reisen TYPO3 website package",
|
||||||
"version": "3.0.0",
|
"version": "4.0.0",
|
||||||
"author": "Björn Fromme, [email protected]",
|
"author": "Björn Fromme, [email protected]",
|
||||||
"license": "WTFPL",
|
"license": "WTFPL",
|
||||||
"repository": "https://gitlab.com/dreipunktnull/ep_theme.git",
|
"repository": "https://gitlab.com/dreipunktnull/ep_theme.git",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "./node_modules/.bin/encore dev --watch --watch-poll 500",
|
"dev": "./node_modules/.bin/encore dev --watch",
|
||||||
"build": "./node_modules/.bin/encore production"
|
"build": "./node_modules/.bin/encore production"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -33,10 +33,10 @@
|
|||||||
"vuex": "^3.1.0"
|
"vuex": "^3.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@babel/plugin-proposal-object-rest-spread": "^7.8.3",
|
||||||
|
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
||||||
"@symfony/webpack-encore": "^0.28.2",
|
"@symfony/webpack-encore": "^0.28.2",
|
||||||
"autoprefixer": "^8.6.5",
|
"autoprefixer": "^8.6.5",
|
||||||
"babel-plugin-syntax-dynamic-import": "^6.18.0",
|
|
||||||
"babel-plugin-transform-object-rest-spread": "^6.26.0",
|
|
||||||
"node-sass": "^4.11.0",
|
"node-sass": "^4.11.0",
|
||||||
"postcss-loader": "^3.0.0",
|
"postcss-loader": "^3.0.0",
|
||||||
"sass-loader": "^7.3.1",
|
"sass-loader": "^7.3.1",
|
||||||
@@ -45,6 +45,6 @@
|
|||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
"last 2 versions",
|
"last 2 versions",
|
||||||
"ios >= 8"
|
"ios >= 9"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -342,4 +342,12 @@ class Contingent extends AbstractEntity implements EventInterface
|
|||||||
{
|
{
|
||||||
return $this->getBegin() >= $period->getBegin() && $this->getEnd() < $period->getEnd();
|
return $this->getBegin() >= $period->getBegin() && $this->getEnd() < $period->getEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getOccupancy()
|
||||||
|
{
|
||||||
|
return $this->getPax() - $this->getAvailable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ class ContingentRepository extends AbstractRepository implements ProviderInterfa
|
|||||||
$qb
|
$qb
|
||||||
->select('c.date as date', 'c.min_nights as minNights')
|
->select('c.date as date', 'c.min_nights as minNights')
|
||||||
->addSelectLiteral('SUM(c.available) as total')
|
->addSelectLiteral('SUM(c.available) as total')
|
||||||
|
->addSelectLiteral('SUM(c.pax) as capacity')
|
||||||
->from('tx_epproducts_domain_model_contingent', 'c')
|
->from('tx_epproducts_domain_model_contingent', 'c')
|
||||||
->innerJoin('c', 'tx_epproducts_domain_model_date', 'd', 'c.date = d.date_start AND c.hotel_code = d.hotel_code')
|
->innerJoin('c', 'tx_epproducts_domain_model_date', 'd', 'c.date = d.date_start AND c.hotel_code = d.hotel_code')
|
||||||
->where('c.hotel = :hotelUid')
|
->where('c.hotel = :hotelUid')
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ class ContingentDataService
|
|||||||
'date' => $row['date'],
|
'date' => $row['date'],
|
||||||
'minNights' => $row['minNights'],
|
'minNights' => $row['minNights'],
|
||||||
'total' => $row['total'],
|
'total' => $row['total'],
|
||||||
|
'capacity' => $row['capacity'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ class ContingentImportService implements SingletonInterface
|
|||||||
protected function parseContingent(\SimpleXMLElement $xmlContingent)
|
protected function parseContingent(\SimpleXMLElement $xmlContingent)
|
||||||
{
|
{
|
||||||
$hotelCode = (string) $xmlContingent['code'];
|
$hotelCode = (string) $xmlContingent['code'];
|
||||||
$sql = 'SELECT h.uid uid, h.groupsch_id groupsch_id
|
$sql = 'SELECT h.uid uid
|
||||||
FROM tx_epproducts_domain_model_hotel h
|
FROM tx_epproducts_domain_model_hotel h
|
||||||
LEFT JOIN tx_epproducts_domain_model_matchcode m ON (h.uid = m.entity AND m.entity_type = "hotel")
|
LEFT JOIN tx_epproducts_domain_model_matchcode m ON (h.uid = m.entity AND m.entity_type = "hotel")
|
||||||
WHERE h.deleted = 0 AND h.hidden = 0 AND h.code = :code OR m.code = :code
|
WHERE h.deleted = 0 AND h.hidden = 0 AND h.code = :code OR m.code = :code
|
||||||
@@ -241,12 +241,12 @@ class ContingentImportService implements SingletonInterface
|
|||||||
$status = Contingent::STATUS_BLOCKED;
|
$status = Contingent::STATUS_BLOCKED;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$pax = $roomType['pax'] * (int) $xmlRoom['kontingent'];
|
$capacity = (int) $xmlRoom['kontingent'] * $roomType['pax'];
|
||||||
$availableRooms = (int) $xmlRoom['frei'] > 0 ? (int) $xmlRoom['frei'] : 0;
|
$availableRooms = (int) $xmlRoom['frei'] > 0 ? (int) $xmlRoom['frei'] : 0;
|
||||||
$availablePax = $availableRooms * $roomType['pax'];
|
$availablePax = $availableRooms * $roomType['pax'];
|
||||||
}
|
}
|
||||||
if ($availablePax === 0 && $roomType['ctrl'] === false) {
|
if ($availablePax === 0 && $roomType['ctrl'] === false) {
|
||||||
continue;
|
//continue;
|
||||||
}
|
}
|
||||||
$minPrice = (int) $xmlRoom['abpreis'];
|
$minPrice = (int) $xmlRoom['abpreis'];
|
||||||
$minNights = (int) $xmlRoom['abpreis_naechte'];
|
$minNights = (int) $xmlRoom['abpreis_naechte'];
|
||||||
@@ -262,8 +262,7 @@ class ContingentImportService implements SingletonInterface
|
|||||||
'hotel_bus_pro_id' => $hotelData['busProId'],
|
'hotel_bus_pro_id' => $hotelData['busProId'],
|
||||||
'room_code' => $roomCode,
|
'room_code' => $roomCode,
|
||||||
'room_label' => $roomLabel,
|
'room_label' => $roomLabel,
|
||||||
'groupsch_id' => $hotelData['groupsch_id'],
|
'pax' => $capacity,
|
||||||
'pax' => $pax,
|
|
||||||
'available' => $availablePax,
|
'available' => $availablePax,
|
||||||
'status' => $status,
|
'status' => $status,
|
||||||
'date' => $date->format('Y-m-d'),
|
'date' => $date->format('Y-m-d'),
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ namespace EP\EpProducts\Service;
|
|||||||
*
|
*
|
||||||
* Copyright notice
|
* Copyright notice
|
||||||
*
|
*
|
||||||
* (c) 2019 Björn Fromme <[email protected]>, dreipunktnull
|
* (c) 2020 Björn Fromme <[email protected]>, dreipunktnull
|
||||||
*
|
*
|
||||||
* All rights reserved
|
* All rights reserved
|
||||||
*
|
*
|
||||||
@@ -36,13 +36,16 @@ use TYPO3\CMS\Core\SingletonInterface;
|
|||||||
|
|
||||||
class IcalService implements SingletonInterface
|
class IcalService implements SingletonInterface
|
||||||
{
|
{
|
||||||
const THRESHOLD = 75;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var ContingentRepository
|
* @var ContingentRepository
|
||||||
*/
|
*/
|
||||||
protected $contingentRepository;
|
protected $contingentRepository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Vcalendar
|
||||||
|
*/
|
||||||
|
protected $vcalendar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ContingentRepository $contingentRepository
|
* @param ContingentRepository $contingentRepository
|
||||||
*/
|
*/
|
||||||
@@ -69,35 +72,13 @@ class IcalService implements SingletonInterface
|
|||||||
$events = [];
|
$events = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$vcalendar = $this->createCalendarInstance();
|
$this->createCalendarInstance();
|
||||||
|
|
||||||
$dateStart = $dateEnd = null;
|
$this->generateOccupancyItems($events);
|
||||||
|
$this->generateBlockedItems($events);
|
||||||
foreach ($events as $event) {
|
|
||||||
/** @var Contingent $event */
|
|
||||||
$paxTotal = $event->getPax();
|
|
||||||
$paxAvaiable = $event->getAvailable();
|
|
||||||
|
|
||||||
$percentageBooked = 100;
|
|
||||||
|
|
||||||
if ($paxTotal > 0 && Contingent::STATUS_BLOCKED !== $event->getStatus()) {
|
|
||||||
$percentageBooked = 100 - round($paxAvaiable / $paxTotal * 100);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($percentageBooked >= self::THRESHOLD) {
|
|
||||||
if (null !== $dateStart) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$dateStart = $event->getBegin();
|
|
||||||
} elseif (null !== $dateStart) {
|
|
||||||
$dateEnd = $event->getEnd();
|
|
||||||
$this->addCalendarItem($vcalendar, $dateStart, $dateEnd);
|
|
||||||
$dateStart = $dateEnd = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$feed = $vcalendar->vtimezonePopulate()->createCalendar();
|
$feed = $this->vcalendar->vtimezonePopulate()->createCalendar();
|
||||||
}
|
}
|
||||||
catch (\Exception $e) {
|
catch (\Exception $e) {
|
||||||
$feed = '';
|
$feed = '';
|
||||||
@@ -107,23 +88,69 @@ class IcalService implements SingletonInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Vcalendar $vcalendar
|
* @param array $events
|
||||||
* @param \DateTime $dateStart
|
|
||||||
* @param \DateTime $dateEnd
|
|
||||||
*/
|
*/
|
||||||
protected function addCalendarItem(Vcalendar $vcalendar, \DateTime $dateStart, \DateTime $dateEnd): void
|
protected function generateOccupancyItems(array $events): void
|
||||||
|
{
|
||||||
|
$occupancy = null;
|
||||||
|
|
||||||
|
foreach ($events as $event) {
|
||||||
|
/** @var Contingent $event */
|
||||||
|
if (null === $occupancy) {
|
||||||
|
$item = [
|
||||||
|
'from' => $event->getBegin(),
|
||||||
|
'occupancy' => $event->getOccupancy(),
|
||||||
|
];
|
||||||
|
} elseif ($occupancy !== $event->getOccupancy()) {
|
||||||
|
$item['to'] = $event->getEnd();
|
||||||
|
$this->addOccupancyItem($item);
|
||||||
|
$item = [
|
||||||
|
'from' => $event->getBegin(),
|
||||||
|
'occupancy' => $event->getOccupancy(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$occupancy = $event->getOccupancy();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($item['to'])) {
|
||||||
|
$item['to'] = $event->getEnd();
|
||||||
|
$this->addOccupancyItem($item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $events
|
||||||
|
*/
|
||||||
|
protected function generateBlockedItems(array $events): void
|
||||||
|
{
|
||||||
|
$item = null;
|
||||||
|
|
||||||
|
foreach ($events as $event) {
|
||||||
|
/** @var Contingent $event */
|
||||||
|
if (null === $item && Contingent::STATUS_BLOCKED === $event->getStatus()) {
|
||||||
|
$item = [
|
||||||
|
'from' => $event->getBegin(),
|
||||||
|
];
|
||||||
|
} elseif (true === is_array($item) && Contingent::STATUS_OK === $event->getStatus()) {
|
||||||
|
$item['to'] = $event->getEnd();
|
||||||
|
$this->addBlockedItem($item);
|
||||||
|
$item = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $item
|
||||||
|
*/
|
||||||
|
protected function addBlockedItem(array $item): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$vcalendar
|
$this->vcalendar
|
||||||
->newVevent()
|
->newVevent()
|
||||||
->setDtstart($dateStart)
|
->setDtstart($item['from'])
|
||||||
->setDtend($dateEnd)
|
->setDtend($item['to'])
|
||||||
->setSummary('Unavailable')
|
->setSummary('Unavailable')
|
||||||
->setDescription(sprintf(
|
|
||||||
'Unavailable from %s to %s',
|
|
||||||
$dateStart->format('d M Y'),
|
|
||||||
$dateEnd->format('d.M Y')
|
|
||||||
))
|
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
catch (\Exception $e) {
|
catch (\Exception $e) {
|
||||||
@@ -131,16 +158,30 @@ class IcalService implements SingletonInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Vcalendar
|
* @param array $item
|
||||||
*/
|
*/
|
||||||
protected function createCalendarInstance(): Vcalendar
|
protected function addOccupancyItem( array $item): void
|
||||||
{
|
{
|
||||||
$vcalendar = Vcalendar::factory([ Vcalendar::UNIQUE_ID => 'www.ep-reisen.de' ]);
|
$summary = sprintf('Part-occupied:%d', $item['occupancy']);
|
||||||
$vcalendar->setXprop(
|
|
||||||
|
try {
|
||||||
|
$this->vcalendar
|
||||||
|
->newVevent()
|
||||||
|
->setDtstart($item['from'])
|
||||||
|
->setDtend($item['to'])
|
||||||
|
->setSummary($summary)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
catch (\Exception $e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function createCalendarInstance(): void
|
||||||
|
{
|
||||||
|
$this->vcalendar = Vcalendar::factory([ Vcalendar::UNIQUE_ID => 'www.ep-reisen.de' ]);
|
||||||
|
$this->vcalendar->setXprop(
|
||||||
Vcalendar::X_WR_TIMEZONE,
|
Vcalendar::X_WR_TIMEZONE,
|
||||||
'Europe/Berlin'
|
'Europe/Berlin'
|
||||||
);
|
);
|
||||||
|
|
||||||
return $vcalendar;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+1
-10
@@ -42,7 +42,7 @@ return [
|
|||||||
],
|
],
|
||||||
'palettes' => [
|
'palettes' => [
|
||||||
'top' => ['showitem' => 'hidden,earlybird,new,low_contingent,show_as_teaser,
|
'top' => ['showitem' => 'hidden,earlybird,new,low_contingent,show_as_teaser,
|
||||||
--linebreak--,code,groupsch_id,detail_page,--linebreak--,external_link,path_segment'],
|
--linebreak--,code,detail_page,--linebreak--,external_link,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'],
|
||||||
@@ -446,15 +446,6 @@ return [
|
|||||||
'eval' => 'trim'
|
'eval' => 'trim'
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
'groupsch_id' => [
|
|
||||||
'exclude' => 0,
|
|
||||||
'label' => 'groups.ch ID',
|
|
||||||
'config' => [
|
|
||||||
'type' => 'input',
|
|
||||||
'size' => 8,
|
|
||||||
'eval' => 'trim,int'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
'external_link' => [
|
'external_link' => [
|
||||||
'exclude' => 0,
|
'exclude' => 0,
|
||||||
'label' => 'Externer Link (Google MyBusiness)',
|
'label' => 'Externer Link (Google MyBusiness)',
|
||||||
|
|||||||
@@ -222,7 +222,6 @@ CREATE TABLE tx_epproducts_domain_model_hotel
|
|||||||
images int(11) unsigned NOT NULL default '0',
|
images 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,
|
||||||
groupsch_id varchar(8) DEFAULT '' NOT NULL,
|
|
||||||
external_link varchar(255) DEFAULT '' NOT NULL,
|
external_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,
|
||||||
|
|||||||
+8
-3
@@ -23,7 +23,10 @@ Encore
|
|||||||
images: 'images/[name].[ext]'
|
images: 'images/[name].[ext]'
|
||||||
})
|
})
|
||||||
.configureBabel(function (babelConfig) {
|
.configureBabel(function (babelConfig) {
|
||||||
babelConfig.plugins = [ 'transform-object-rest-spread', 'syntax-dynamic-import' ]
|
babelConfig.plugins = [ '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-syntax-dynamic-import' ]
|
||||||
|
})
|
||||||
|
.configureWatchOptions(function (options) {
|
||||||
|
options.poll = 250;
|
||||||
});
|
});
|
||||||
|
|
||||||
const EpThemeConfig = Encore.getWebpackConfig();
|
const EpThemeConfig = Encore.getWebpackConfig();
|
||||||
@@ -53,9 +56,11 @@ Encore
|
|||||||
images: 'images/[name].[ext]'
|
images: 'images/[name].[ext]'
|
||||||
})
|
})
|
||||||
.configureBabel(function (babelConfig) {
|
.configureBabel(function (babelConfig) {
|
||||||
babelConfig.plugins = [ 'transform-object-rest-spread', 'syntax-dynamic-import' ]
|
babelConfig.plugins = [ '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-syntax-dynamic-import' ]
|
||||||
})
|
})
|
||||||
;
|
.configureWatchOptions(function (options) {
|
||||||
|
options.poll = 250;
|
||||||
|
});
|
||||||
|
|
||||||
const EpEventsConfig = Encore.getWebpackConfig();
|
const EpEventsConfig = Encore.getWebpackConfig();
|
||||||
EpEventsConfig.name = 'EpEventsConfig';
|
EpEventsConfig.name = 'EpEventsConfig';
|
||||||
|
|||||||
Reference in New Issue
Block a user