Merge branch 'release/2019.07.062'

This commit is contained in:
Björn Fromme
2019-07-23 16:31:16 +02:00
4 changed files with 89 additions and 62 deletions
@@ -62,31 +62,25 @@ class BookingUrlUtility
$query = static::buildQuery($bookingId, $hotelId, $dateEnd, $template, $isDayTrip);
$trackingCookie = null;
$bpnCookie = null;
$epCookie = CookieUtility::getPaCookie();
$bpnCookie = CookieUtility::getBpnCookie();
if (isset($_COOKIE[static::COOKIE_NAME])) {
if (!preg_match('/^([a-z]{4}|PA)\d{4}$/', $_COOKIE[static::COOKIE_NAME])) {
if (!preg_match('/^([a-z]{4}|PA)\d{3,4}$/', $_COOKIE[static::COOKIE_NAME])) {
setcookie(static::COOKIE_NAME, '', time() - 3600);
unset($_COOKIE[static::COOKIE_NAME]);
} else {
$trackingCookie = $_COOKIE[static::COOKIE_NAME];
$epCookie = $_COOKIE[static::COOKIE_NAME];
}
}
if (isset($_COOKIE[static::COOKIE_NAME_BPN])) {
$bpnCookie = $_COOKIE[static::COOKIE_NAME_BPN];
}
if ($paCode) {
$query['agenturcode'] = $paCode;
} elseif ($bpnCookie) {
$query['agenturcode'] = $bpnCookie;
} elseif ($trackingCookie) {
if (preg_match('/^PA\d+/', $trackingCookie)) {
$query['agenturcode'] = $trackingCookie;
} else {
$query['crminfo'] = $trackingCookie;
}
} elseif ($epCookie) {
$queryParameter = CookieUtility::getQueryParameter($epCookie);
$query[$queryParameter] = $epCookie;
}
return static::buildUrl($query);
@@ -0,0 +1,73 @@
<?php
namespace EP\EpProducts\Utility;
class CookieUtility
{
const COOKIENAME_TRK = 'ep_trk';
const COOKIETTL_TRK = 30;
const COOKIENAME_BPN = 'bpn_cookie';
const PATTERN = '/^PA\d{3,4}$/';
/**
* @return string|null
*/
public static function getPaCookie()
{
if (!isset($_COOKIE[static::COOKIENAME_TRK])) {
return null;
}
$cookieValue = $_COOKIE[static::COOKIENAME_TRK];
if (!preg_match(static::PATTERN, $cookieValue)) {
setcookie(static::COOKIENAME_TRK, '', time() - 3600);
unset($_COOKIE[static::COOKIENAME_TRK]);
return null;
}
return $cookieValue;
}
/**
* @return string|null
*/
public static function getBpnCookie()
{
if (!isset($_COOKIE[static::COOKIENAME_BPN])) {
return null;
}
return $_COOKIE[static::COOKIENAME_BPN];
}
/**
* @param string $code
* @return string
*/
public static function getQueryParameter($code)
{
if (!preg_match(static::PATTERN, $code)) {
return 'crminfo';
}
return 'agenturcode';
}
/**
* @param string $code
* @throws \Exception
*/
public static function setPaCookie($code)
{
$expiratonDate = new \DateTime('now');
$expiratonDate->add(new \DateInterval('P' . static::COOKIETTL_TRK . 'D'));
setcookie(
static::COOKIENAME_TRK,
strtoupper($code),
$expiratonDate->getTimestamp(),
'/'
);
}
}
@@ -29,6 +29,7 @@ namespace EP\EpTheme\DataProcessing;
use EP\EpProducts\Service\ResellerDataService;
use EP\EpProducts\Traits\DbConnectionTrait;
use EP\EpProducts\Utility\CookieUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Object\ObjectManager;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
@@ -67,7 +68,7 @@ class ContextProcessor implements DataProcessorInterface
$processedData['context']['paCode'] = $resellerData['paCode'];
} elseif ($paCode = $this->getPaCodeFromRequest()) {
$processedData['context']['paCode'] = $paCode;
} elseif ($cookieData = $this->getCookieData()) {
} elseif ($cookieData = CookieUtility::getPaCookie()) {
$processedData['context']['paCode'] = $cookieData;
}
@@ -103,9 +104,7 @@ class ContextProcessor implements DataProcessorInterface
if (array_key_exists('pa', $items)) {
$paCode = $items['pa'];
$expiratonDate = new \DateTime('now');
$expiratonDate->add(new \DateInterval('P' . '30D'));
setcookie('ep_trk', $paCode, $expiratonDate->getTimestamp(), '/');
CookieUtility::setPaCookie($paCode);
return $paCode;
}
@@ -113,18 +112,6 @@ class ContextProcessor implements DataProcessorInterface
return '';
}
/**
* @return string
*/
private function getCookieData()
{
if (isset($_COOKIE['ep_trk']) && preg_match('/^PA\d{3,4}$/', $_COOKIE['ep_trk'])) {
return $_COOKIE['ep_trk'];
}
return null;
}
/**
* @param int $uid
* @param string $table
@@ -27,10 +27,9 @@ namespace EP\EpTrack\Middleware;
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
use DateInterval;
use DateTime;
use Doctrine\DBAL\DBALException;
use EP\EpProducts\Traits\DbConnectionTrait;
use EP\EpProducts\Utility\CookieUtility;
use Exception;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
@@ -48,14 +47,10 @@ class TrackingMiddleware implements MiddlewareInterface
{
use DbConnectionTrait;
const COOKIE_NAME = 'ep_trk';
const COOKIE_TTL = 30;
const CODE_PATTERN = '([a-z]{4}|PA)\d{3,4}';
const CODE_PATTERN = 'PA\d{3,4}';
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
$this->cleanupCookies();
if ($redirect = $this->matchRedirect($request)) {
[$uri, $responseCode] = $redirect;
@@ -104,8 +99,9 @@ class TrackingMiddleware implements MiddlewareInterface
}
$trackingCode = $redirect['tracking_code'];
if (!empty($trackingCode)) {
$this->setCookie($trackingCode);
CookieUtility::setPaCookie($trackingCode);
}
$targetPage = $redirect['target_page_uid'];
@@ -139,13 +135,13 @@ class TrackingMiddleware implements MiddlewareInterface
$query = $params->getQueryString();
$path = $params->getRequestUri();
if (!preg_match('/^\/' . static::CODE_PATTERN . '\/?$/i', $path)) {
if (!preg_match('/^\/PA\d{3,4}\/?$/i', $path)) {
return null;
}
$urlItems = GeneralUtility::trimExplode('/', $path, true);
$code = array_pop($urlItems);
$this->setCookie($code);
CookieUtility::setPaCookie($code);
$uri = '/';
if (count($urlItems) > 0) {
$uri = '/' . implode('/', $urlItems) . '/';
@@ -157,29 +153,6 @@ class TrackingMiddleware implements MiddlewareInterface
return $uri;
}
/**
* @param string $code
* @throws Exception
*/
protected function setCookie($code): void
{
$expiratonDate = new DateTime('now');
$expiratonDate->add(new DateInterval('P' . static::COOKIE_TTL . 'D'));
setcookie(static::COOKIE_NAME, $code, $expiratonDate->getTimestamp(), '/');
}
protected function cleanupCookies(): void
{
if (!isset($_COOKIE[static::COOKIE_NAME])) {
return;
}
if (!preg_match('/^' . static::CODE_PATTERN . '$/', $_COOKIE[static::COOKIE_NAME])) {
setcookie(static::COOKIE_NAME, '', time() - 3600);
unset($_COOKIE[static::COOKIE_NAME]);
}
}
/**
* Borrowed from \TYPO3\CMS\Redirects\Service\RedirectService
*