From 2e4497dfd8975b037cc24d6f0cc6fc938fc39013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erg=C3=BCn?= Date: Mon, 24 Aug 2020 15:34:52 +0200 Subject: [PATCH] Transfering the GET/POST parameters during redirection So that advertising campaigns can also be tracked after language redirection e.g. "?utm_source=google&utm_medium=social&utm_campaign=promotion&utm_content=advertising" --- Classes/Middleware/RedirectionMiddleware.php | 27 +++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/Classes/Middleware/RedirectionMiddleware.php b/Classes/Middleware/RedirectionMiddleware.php index 526ee89..1f54185 100644 --- a/Classes/Middleware/RedirectionMiddleware.php +++ b/Classes/Middleware/RedirectionMiddleware.php @@ -180,13 +180,18 @@ function ($language) use ($siteLanguages, $siteLanguagesFallbacks) { return null; } + /** @var array $parameters Array in the form of: ['utm_source' => 'google', 'utm_medium' => 'social'] */ + $parameters = $request->getQueryParams(); + + $parameters['_language'] = $matchingSiteLanguage; + $uri = $site->getRouter()->generateUri( $pageArguments->getPageId(), - ['_language' => $matchingSiteLanguage] + $parameters ); /** @var RedirectResponse $response */ - $response = new RedirectResponse($uri, 302); + $response = new RedirectResponse($uri, 307); return $response->withAddedHeader('Set-Cookie', $cookieName . '=' . $matchingSiteLanguage->getLanguageId() . '; Path=/; Max-Age=' . (time()+60*60*24*30)); } @@ -254,13 +259,18 @@ function ($siteLanguage) use ($geocodedIsoCode) { return null; } + /** @var array $parameters Array in the form of: ['utm_source' => 'google', 'utm_medium' => 'social'] */ + $parameters = $request->getQueryParams(); + + $parameters['_language'] = $matchingSiteLanguage; + $uri = $site->getRouter()->generateUri( $pageArguments->getPageId(), - ['_language' => $matchingSiteLanguage] + $parameters ); /** @var RedirectResponse $response */ - $response = new RedirectResponse($uri, 302); + $response = new RedirectResponse($uri, 307); return $response->withAddedHeader('Set-Cookie', $cookieName . '=' . $matchingSiteLanguage->getLanguageId() . '; Path=/; Max-Age=' . (time()+60*60*24*30)); } catch (\Throwable $e) { // IP address is not in database. Do not redirect. @@ -342,11 +352,16 @@ protected function getRedirectResponseIfCookieIsSet(ServerRequestInterface $requ $preferredSiteLanguage = $site->getLanguageById($languageId); if ($preferredSiteLanguage !== $requestLanguage) { + /** @var array $parameters Array in the form of: ['utm_source' => 'google', 'utm_medium' => 'social'] */ + $parameters = $request->getQueryParams(); + + $parameters['_language'] = $preferredSiteLanguage; + $uri = $site->getRouter()->generateUri( $pageArguments->getPageId(), - ['_language' => $preferredSiteLanguage] + $parameters ); - return new RedirectResponse($uri, 302); + return new RedirectResponse($uri, 307); } } }