From 1504892018dc8804e64e6b4d9dd7f9e016e8643f Mon Sep 17 00:00:00 2001 From: robertsaternus Date: Mon, 3 Aug 2026 14:07:25 +0200 Subject: [PATCH] INT-345: Atlas AI - add support for SSR and proxy Atlas AI - add support for SSR and proxy --- src/Resources/views/storefront/base.html.twig | 72 ++++++++++++------- .../Controller/ResultController.php | 14 +++- 2 files changed, 59 insertions(+), 27 deletions(-) diff --git a/src/Resources/views/storefront/base.html.twig b/src/Resources/views/storefront/base.html.twig index 90995199..69ec59fe 100644 --- a/src/Resources/views/storefront/base.html.twig +++ b/src/Resources/views/storefront/base.html.twig @@ -104,64 +104,88 @@ const ffTrackingSettings = JSON.parse('{{ page.extensions.factfinder.trackingSettings|json_encode()|raw }}'); {% if page.extensions.factfinder.ssr %} - function generateSid() { - var length = 30; - var characterSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - var text = ""; + function generateSid() { + var length = 30; + var characterSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + var text = ""; - for (var i = 0; i < length; i++) { - text += characterSet.charAt(Math.floor(Math.random() * characterSet.length)); - } - - return text; + for (var i = 0; i < length; i++) { + text += characterSet.charAt(Math.floor(Math.random() * characterSet.length)); } + + return text; + } {% endif %} document.addEventListener('ffCoreReady', ({ factfinder }) => { {% if page.extensions.factfinder.ssr == 'ssr' and app.request.attributes.get('_route') == 'frontend.factfinder.result' %} - const searchResult = {FF_SEARCH_RESULT}; + const searchResult = {FF_SEARCH_RESULT}; - if (searchResult.hasOwnProperty('records')) { - factfinder.response.dispatch.ssrSearch(searchResult); - } + if (searchResult.hasOwnProperty('records')) { + factfinder.response.dispatch.ssrSearch(searchResult); + } {% endif %} const ffCookies = document.cookie.split('; ').reduce((acc, cookie) => { const cookieData = cookie.split('='); - const [key, value] = cookieData; - acc[key] = value; - + if (cookieData.length >= 2) { + acc[cookieData[0].trim()] = cookieData[1].trim(); + } return acc; }, {}); const clearCookie = (name) => { - document.cookie = name+'=; Max-Age=-1;'; - } + document.cookie = name + '=; Max-Age=-1; path=/;'; + }; + + const isAtlasAIEnabled = {{ page.extensions.factfinder.communication.supportAtlasAi ? 'true' : 'false' }}; + const userId = ffCookies['ff_user_id'] || null; - if (ffCookies['ff_user_id']) { - factfinder.config.setFFParams({userId: ffCookies['ff_user_id']}); + if (userId) { + factfinder.config.setFFParams({ userId: userId }); if (ffCookies['ff_has_just_logged_in']) { clearCookie('ff_has_just_logged_in'); + + let sid = ''; + try { + sid = JSON.parse(localStorage.getItem('ffwebco') || '{}').sid || ''; + } catch (e) {} + factfinder.tracking.login([{ - sid: JSON.parse(localStorage.ffwebco).sid, + sid: sid, userId: factfinder.config.get().ffParams.userId }]); } } else { if (ffCookies['ff_has_just_logged_out']) { clearCookie('ff_has_just_logged_out'); - factfinder.config.setFFParams({userId: undefined}); + + if (!isAtlasAIEnabled) { + factfinder.config.setFFParams({ userId: undefined }); + } } } {% if page.extensions.factfinder.ssr %} + if (isAtlasAIEnabled) { + try { + const atlasAiUserId = localStorage.getItem('ffwebco.atlasAiUserId'); + + if (atlasAiUserId) { + document.cookie = 'ff_atlas_ai_user_id=' + encodeURIComponent(atlasAiUserId) + '; path=/; max-age=31536000;'; + } + } catch (e) { + console.error('Error parsing ffwebco.atlasAiUserId from localStorage', e); + } + } + if (!ffCookies['ffwebc_sid']) { const sid = generateSid(); document.cookie = 'ffwebc_sid=' + sid + '; path=/;'; - factfinder.config.setFFParams({sid: sid}); + factfinder.config.setFFParams({ sid: sid }); } else { - factfinder.config.setFFParams({sid: ffCookies['ffwebc_sid']}); + factfinder.config.setFFParams({ sid: ffCookies['ffwebc_sid'] }); } {% endif %} }); diff --git a/src/Storefront/Controller/ResultController.php b/src/Storefront/Controller/ResultController.php index 731df396..ff5347a9 100644 --- a/src/Storefront/Controller/ResultController.php +++ b/src/Storefront/Controller/ResultController.php @@ -83,12 +83,20 @@ private function parseQueryString(string $queryString, Request $request): string $queryParams = explode('&', $queryString); $queryParams[] = sprintf('sid=%s', $request->cookies->get('ffwebc_sid', '')); - $result = array_reduce( + $userId = $request->cookies->get('ff_atlas_ai_user_id', $request->cookies->get('ff_user_id', '')); + + if ($userId !== '') { + $queryParams[] = sprintf('userId=%s', $userId); + } + + $result = array_reduce( $queryParams, function (string $carry, string $queryParam) { - $result = explode('=', $queryParam); + $result = explode('=', $queryParam, 2); + $key = $result[0]; + $value = isset($result[1]) ? htmlspecialchars($result[1]) : ''; - return sprintf('%s&%s=%s', $carry, $result[0], htmlspecialchars($result[1])); + return sprintf('%s&%s=%s', $carry, $key, $value); }, '' );