diff --git a/public/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php b/public/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php index dda9feee..e0cb8010 100644 --- a/public/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php +++ b/public/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php @@ -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); diff --git a/public/typo3conf/ext/ep_products/Classes/Utility/CookieUtility.php b/public/typo3conf/ext/ep_products/Classes/Utility/CookieUtility.php new file mode 100644 index 00000000..bce95fc9 --- /dev/null +++ b/public/typo3conf/ext/ep_products/Classes/Utility/CookieUtility.php @@ -0,0 +1,73 @@ +add(new \DateInterval('P' . static::COOKIETTL_TRK . 'D')); + setcookie( + static::COOKIENAME_TRK, + strtoupper($code), + $expiratonDate->getTimestamp(), + '/' + ); + } +} diff --git a/public/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php b/public/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php index 5a265bd8..53293e8e 100644 --- a/public/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php +++ b/public/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php @@ -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 diff --git a/public/typo3conf/ext/ep_track/Classes/Middleware/TrackingMiddleware.php b/public/typo3conf/ext/ep_track/Classes/Middleware/TrackingMiddleware.php index 5fa93605..9221796b 100644 --- a/public/typo3conf/ext/ep_track/Classes/Middleware/TrackingMiddleware.php +++ b/public/typo3conf/ext/ep_track/Classes/Middleware/TrackingMiddleware.php @@ -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 *