Merge branch 'resellerdomains'
This commit is contained in:
+2924
File diff suppressed because it is too large
Load Diff
@@ -32,6 +32,7 @@ use EP\EpProducts\Domain\Model\Hotel;
|
||||
use EP\EpProducts\Domain\Model\Product;
|
||||
use EP\EpProducts\Service\DateService;
|
||||
use EP\EpProducts\Service\FilterService;
|
||||
use EP\EpProducts\Service\ResellerService;
|
||||
use EP\EpProducts\Traits\RequestArgumentTypeConversionTrait;
|
||||
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
|
||||
|
||||
@@ -50,15 +51,22 @@ class AjaxDateController extends ActionController
|
||||
*/
|
||||
protected $dateService;
|
||||
|
||||
/**
|
||||
* @var ResellerService
|
||||
*/
|
||||
protected $resellerService;
|
||||
|
||||
/**
|
||||
* @param FilterService $filterService
|
||||
* @param DateService $dateService
|
||||
* @param ResellerService $resellerService
|
||||
*/
|
||||
public function __construct(FilterService $filterService, DateService $dateService)
|
||||
public function __construct(FilterService $filterService, DateService $dateService, ResellerService $resellerService)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->filterService = $filterService;
|
||||
$this->dateService = $dateService;
|
||||
$this->resellerService = $resellerService;
|
||||
}
|
||||
|
||||
public function initializeAction()
|
||||
@@ -101,7 +109,11 @@ class AjaxDateController extends ActionController
|
||||
$altLabel = $product->getAltLabel();
|
||||
}
|
||||
$template = $this->settings['bpnBookingUrlTemplateCode'];
|
||||
$datesTable = $this->dateService->getDatesTable($product, $hotel, $filterSettings, $template);
|
||||
$paCode = null;
|
||||
if ($reseller = $this->resellerService->getResellerForCurrentDomain()) {
|
||||
$paCode = $reseller['paCode'];
|
||||
}
|
||||
$datesTable = $this->dateService->getDatesTable($product, $hotel, $filterSettings, $template, $paCode);
|
||||
return json_encode([
|
||||
'dates' => $datesTable,
|
||||
'bookable' => $product->getBookable(),
|
||||
|
||||
@@ -33,6 +33,7 @@ use EP\EpProducts\Domain\Model\Hotel;
|
||||
use EP\EpProducts\Domain\Model\Product;
|
||||
use EP\EpProducts\Service\DateService;
|
||||
use EP\EpProducts\Service\FilterService;
|
||||
use EP\EpProducts\Service\ResellerService;
|
||||
use EP\EpProducts\Traits\RequestArgumentTypeConversionTrait;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
|
||||
@@ -52,15 +53,22 @@ class AjaxTableController extends ActionController
|
||||
*/
|
||||
protected $dateService;
|
||||
|
||||
/**
|
||||
* @var ResellerService
|
||||
*/
|
||||
protected $resellerService;
|
||||
|
||||
/**
|
||||
* @param DateService $dateService
|
||||
* @param FilterService $filterService
|
||||
* @param ResellerService $resellerService
|
||||
*/
|
||||
public function __construct(DateService $dateService, FilterService $filterService)
|
||||
public function __construct(DateService $dateService, FilterService $filterService, ResellerService $resellerService)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->dateService = $dateService;
|
||||
$this->filterService = $filterService;
|
||||
$this->resellerService = $resellerService;
|
||||
}
|
||||
|
||||
public function initializeAction()
|
||||
@@ -83,8 +91,12 @@ 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'];
|
||||
}
|
||||
$template = $this->settings['bpnBookingUrlTemplateCode'];
|
||||
$priceTable = $this->dateService->getPriceTable($product, $hotel, $filterSettings, $date, $template);
|
||||
$priceTable = $this->dateService->getPriceTable($product, $hotel, $filterSettings, $date, $template, $paCode);
|
||||
return json_encode([
|
||||
'dateStart' => $date ? $date->getDateStart()->format('Y-m-d') : '',
|
||||
'dateEnd' => $date ? $date->getDateEnd()->format('Y-m-d') : '',
|
||||
@@ -100,8 +112,12 @@ 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'];
|
||||
}
|
||||
$template = $this->settings['bpnBookingUrlTemplateCode'];
|
||||
$pricetable = $this->dateService->getPriceTable($product, $hotel, $filterSettings, null, $template);
|
||||
$pricetable = $this->dateService->getPriceTable($product, $hotel, $filterSettings, null, $template, $paCode);
|
||||
$this->view->assign('pricetable', $pricetable);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace EP\EpProducts\Domain\Repository;
|
||||
|
||||
/***************************************************************
|
||||
*
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
class ResellerRepository extends AbstractRepository
|
||||
{}
|
||||
@@ -70,6 +70,7 @@ class DateService implements SingletonInterface
|
||||
* @param FilterSettings|null $filterSettings
|
||||
* @param Date|null $date
|
||||
* @param string $template
|
||||
* @param string $paCode
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
@@ -79,20 +80,23 @@ class DateService implements SingletonInterface
|
||||
Hotel $hotel,
|
||||
FilterSettings $filterSettings = null,
|
||||
Date $date = null,
|
||||
$template = 'base'
|
||||
$template = 'base',
|
||||
$paCode = null
|
||||
)
|
||||
{
|
||||
if ($filterSettings === null) {
|
||||
$filterSettings = $this->filterService->getDefaultFilterSettings();
|
||||
}
|
||||
$priceTableData = $this->productRepository->getPricetable($product, $hotel, $filterSettings, $date);
|
||||
return $this->preprocessPriceTable($priceTableData, $template);
|
||||
return $this->preprocessPriceTable($priceTableData, $template, $paCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Product $product
|
||||
* @param Hotel $hotel
|
||||
* @param FilterSettings|null $filterSettings
|
||||
* @param string $template
|
||||
* @param string $paCode
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
@@ -101,14 +105,15 @@ class DateService implements SingletonInterface
|
||||
Product $product,
|
||||
Hotel $hotel,
|
||||
FilterSettings $filterSettings = null,
|
||||
$template = 'base'
|
||||
$template = 'base',
|
||||
$paCode = null
|
||||
)
|
||||
{
|
||||
if ($filterSettings === null) {
|
||||
$filterSettings = $this->filterService->getDefaultFilterSettings();
|
||||
}
|
||||
$dateTableData = $this->productRepository->getAvailableDates($product, $hotel, $filterSettings);
|
||||
return $this->preprocessDateTable($dateTableData, $template);
|
||||
return $this->preprocessDateTable($dateTableData, $template, $paCode);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -186,10 +191,11 @@ class DateService implements SingletonInterface
|
||||
/**
|
||||
* @param array $priceTableData
|
||||
* @param string $template
|
||||
* @param string $paCode
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function preprocessPriceTable(array $priceTableData, $template)
|
||||
public function preprocessPriceTable(array $priceTableData, $template, $paCode = null)
|
||||
{
|
||||
$priceTable = [];
|
||||
|
||||
@@ -201,7 +207,8 @@ class DateService implements SingletonInterface
|
||||
$row['dateBusProId'],
|
||||
$row['hotelBusProId'],
|
||||
$row['dateEnd'],
|
||||
$template
|
||||
$template,
|
||||
$paCode
|
||||
);
|
||||
$priceTable[] = [
|
||||
'dateStart' => $dateStart->format('d.m.Y'),
|
||||
@@ -229,10 +236,11 @@ class DateService implements SingletonInterface
|
||||
/**
|
||||
* @param array $dateTableData
|
||||
* @param string $template
|
||||
* @param string $paCode
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function preprocessDateTable(array $dateTableData, $template)
|
||||
public function preprocessDateTable(array $dateTableData, $template, $paCode = null)
|
||||
{
|
||||
$dateTable = [];
|
||||
foreach ($dateTableData as $row)
|
||||
@@ -243,7 +251,8 @@ class DateService implements SingletonInterface
|
||||
$row['dateBusProId'],
|
||||
$row['hotelBusProId'],
|
||||
$row['dateEnd'],
|
||||
$template
|
||||
$template,
|
||||
$paCode
|
||||
);
|
||||
$dateTable[] = [
|
||||
'dateUid' => $row['dateUid'],
|
||||
@@ -269,9 +278,11 @@ class DateService implements SingletonInterface
|
||||
* @param array $priceTableData
|
||||
* @param int $maxPax
|
||||
* @param string $template
|
||||
* @param string $paCode
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function preprocessEventPriceTable(array $priceTableData, $maxPax = 99, $template = 'base')
|
||||
public function preprocessEventPriceTable(array $priceTableData, $maxPax = 99, $template = 'base', $paCode = null)
|
||||
{
|
||||
$priceTable = [
|
||||
Hotel::CATEGORY_STANDARD => [],
|
||||
@@ -293,7 +304,8 @@ class DateService implements SingletonInterface
|
||||
$row['dateBusProId'],
|
||||
$row['hotelBusProId'],
|
||||
$row['dateEnd'],
|
||||
$template
|
||||
$template,
|
||||
$paCode
|
||||
),
|
||||
'rooms' => [],
|
||||
];
|
||||
@@ -340,4 +352,4 @@ class DateService implements SingletonInterface
|
||||
return $priceTable;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,8 +34,9 @@ use EP\EpProducts\Domain\Repository\ProductRepository;
|
||||
use EP\EpProducts\Domain\Serialization\Date;
|
||||
use EP\EpProducts\Domain\Serialization\Room;
|
||||
use EP\EpProducts\Utility\BookingUrlUtility;
|
||||
use EP\EpProducts\Utility\DbUtility;
|
||||
use TYPO3\CMS\Core\SingletonInterface;
|
||||
use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
|
||||
class ResellerService implements SingletonInterface
|
||||
{
|
||||
@@ -122,4 +123,27 @@ class ResellerService implements SingletonInterface
|
||||
|
||||
return array_values($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool|array
|
||||
*/
|
||||
public function getResellerForCurrentDomain()
|
||||
{
|
||||
$currentDomain = GeneralUtility::getIndpEnv('HTTP_HOST');
|
||||
|
||||
$qb = DbUtility::getDbConnection()->createQueryBuilder();
|
||||
|
||||
return $qb
|
||||
->select('r.name name, r.pa_code paCode')
|
||||
->from('tx_epproducts_domain_model_reseller', 'r')
|
||||
->innerJoin('r', 'sys_domain', 'd', 'r.uid = d.tx_epproducts_reseller')
|
||||
->where('d.domainName = :domain')
|
||||
->andWhere('r.deleted = 0')
|
||||
->andWhere('r.hidden = 0')
|
||||
->andWhere('d.hidden = 0')
|
||||
->setParameter('domain', $currentDomain)
|
||||
->execute()
|
||||
->fetch()
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ class BookingUrlUtility
|
||||
* @param string $paCode
|
||||
* @return string
|
||||
*/
|
||||
public static function generateUrl($bookingId, $hotelId, $dateEnd, $template = 'base')
|
||||
public static function generateUrl($bookingId, $hotelId, $dateEnd, $template = 'base', $paCode = null)
|
||||
{
|
||||
$query = static::buildQuery($bookingId, $hotelId, $dateEnd, $template);
|
||||
|
||||
@@ -55,7 +55,9 @@ class BookingUrlUtility
|
||||
}
|
||||
$bpnCookie = $_COOKIE[static::COOKIE_NAME_BPN];
|
||||
|
||||
if (!empty($bpnCookie)) {
|
||||
if ($paCode !== null) {
|
||||
$query['agenturcode'] = $paCode;
|
||||
} elseif (!empty($bpnCookie)) {
|
||||
$query['agenturcode'] = $bpnCookie;
|
||||
} elseif (!empty($cookie)) {
|
||||
if (preg_match('/^P[a-zA-Z0-9]*/', $cookie)) {
|
||||
@@ -79,7 +81,7 @@ class BookingUrlUtility
|
||||
{
|
||||
$query = static::buildQuery($bookingId, $hotelId, $dateEnd);
|
||||
|
||||
if (!empty($paCode)) {
|
||||
if ($paCode !== null) {
|
||||
$query['agenturcode'] = $paCode;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
defined('TYPO3_MODE') or die();
|
||||
|
||||
call_user_func(function() {
|
||||
|
||||
$temporaryColumns = [
|
||||
'tx_epproducts_reseller' => [
|
||||
'label' => 'Vertragspartner',
|
||||
'config' => [
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectSingle',
|
||||
'foreign_table' => 'tx_epproducts_domain_model_reseller',
|
||||
'foreign_table_where' => 'ORDER BY title',
|
||||
'items' => [
|
||||
['Keine Zuordnung', 0],
|
||||
],
|
||||
'minitems' => 0,
|
||||
'maxitems' => 1,
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
|
||||
'sys_domain',
|
||||
$temporaryColumns
|
||||
);
|
||||
|
||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
|
||||
'sys_domain',
|
||||
'tx_epproducts_reseller',
|
||||
'',
|
||||
'before:redirectTo'
|
||||
);
|
||||
|
||||
});
|
||||
@@ -1109,6 +1109,13 @@ CREATE TABLE tx_epproducts_domain_model_reseller (
|
||||
|
||||
);
|
||||
|
||||
#
|
||||
# Table structure for table 'sys_domain'
|
||||
#
|
||||
CREATE TABLE sys_domain (
|
||||
tx_epproducts_reseller int(11) unsigned DEFAULT '0',
|
||||
);
|
||||
|
||||
#
|
||||
# Table structure for table 'tx_epproducts_product_hotel_mm'
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user