22
33namespace Wbm \TagManagerEcomm \Subscriber ;
44
5+ use Shopware \Core \Framework \Routing \Annotation \RouteScope ;
6+ use Shopware \Core \Framework \Routing \KernelListenerPriorities ;
57use Symfony \Component \EventDispatcher \EventSubscriberInterface ;
8+ use Symfony \Component \HttpFoundation \Request ;
9+ use Symfony \Component \HttpFoundation \Session \SessionInterface ;
610use Symfony \Component \HttpKernel \Event \ControllerEvent ;
711use Symfony \Component \HttpKernel \Event \ResponseEvent ;
812use Symfony \Component \HttpKernel \KernelEvents ;
@@ -23,14 +27,14 @@ class KernelEventsSubscriber implements EventSubscriberInterface
2327 private $ dataLayerRenderer ;
2428
2529 /**
26- * @var SessionUtility
30+ * @var SessionInterface
2731 */
2832 private $ session ;
2933
3034 public function __construct (
3135 DataLayerModulesInterface $ modules ,
3236 DataLayerRendererInterface $ dataLayerRender ,
33- SessionUtility $ session
37+ SessionInterface $ session
3438 ) {
3539 $ this ->modules = $ modules ;
3640 $ this ->dataLayerRenderer = $ dataLayerRender ;
@@ -41,18 +45,23 @@ public static function getSubscribedEvents(): array
4145 {
4246 return [
4347 KernelEvents::CONTROLLER => [
44- ['getDataLayerForXmlHttpRequest ' ],
48+ ['getDataLayerForXmlHttpRequest ' , KernelListenerPriorities:: KERNEL_CONTROLLER_EVENT_SCOPE_VALIDATE_POST ],
4549 ],
4650 KernelEvents::RESPONSE => [
47- ['prependDataLayerToResponse ' ],
51+ ['prependDataLayerToResponse ' , - 1 ],
4852 ],
4953 ];
5054 }
5155
5256 public function getDataLayerForXmlHttpRequest (ControllerEvent $ event ): void
5357 {
58+ $ request = $ event ->getRequest ();
59+ if (!$ this ->isStorefrontRequest ($ request )) {
60+ return ;
61+ }
62+
5463 $ modules = $ this ->modules ->getModules ();
55- $ route = $ event -> getRequest () ->attributes ->get ('_route ' );
64+ $ route = $ request ->attributes ->get ('_route ' );
5665
5766 if (!array_key_exists ($ route , $ modules )
5867 || empty ($ modules [$ route ])
@@ -61,7 +70,7 @@ public function getDataLayerForXmlHttpRequest(ControllerEvent $event): void
6170 return ;
6271 }
6372
64- $ salesChannelId = $ event -> getRequest () ->get ('sw-sales-channel-id ' );
73+ $ salesChannelId = $ request ->get ('sw-sales-channel-id ' );
6574 $ isActive = !empty ($ this ->modules ->getContainerId ($ salesChannelId )) && $ this ->modules ->isActive ($ salesChannelId );
6675
6776 if (!$ isActive ) {
@@ -75,13 +84,14 @@ public function prependDataLayerToResponse(ResponseEvent $event): void
7584 {
7685 $ response = $ event ->getResponse ();
7786 $ request = $ event ->getRequest ();
78- $ storedDatalayer = $ this ->session ->get (SessionUtility::ATTRIBUTE_NAME );
79- $ this ->session ->remove (SessionUtility::ATTRIBUTE_NAME );
87+ if (!$ this ->isStorefrontRequest ($ request )) {
88+ return ;
89+ }
8090
8191 $ route = $ request ->attributes ->get ('_route ' );
8292 $ dataLayer = $ this ->dataLayerRenderer ->getDataLayer ($ route );
8393 if ($ dataLayer !== null ) {
84- $ dataLayer = $ this ->session -> injectSessionVars ( $ dataLayer );
94+ $ dataLayer = SessionUtility:: injectSessionVars ( $ dataLayer , $ this ->session );
8595 $ dataLayer = json_encode ($ dataLayer );
8696 }
8797
@@ -95,6 +105,8 @@ public function prependDataLayerToResponse(ResponseEvent $event): void
95105 return ;
96106 }
97107
108+ $ storedDatalayer = $ this ->session ->get (SessionUtility::ATTRIBUTE_NAME );
109+ $ this ->session ->remove (SessionUtility::ATTRIBUTE_NAME );
98110 if ($ storedDatalayer && in_array ($ route , $ this ->modules ->getResponseRoutes (), true )) {
99111 $ dataLayer = $ storedDatalayer ;
100112 }
@@ -113,4 +125,16 @@ public function prependDataLayerToResponse(ResponseEvent $event): void
113125
114126 $ event ->setResponse ($ response );
115127 }
128+
129+ private function isStorefrontRequest (Request $ request )
130+ {
131+ if ($ request ->attributes ->has ('_routeScope ' )
132+ && $ request ->attributes ->get ('_routeScope ' ) instanceof RouteScope
133+ && $ request ->attributes ->get ('_routeScope ' )->hasScope ('storefront ' )
134+ ) {
135+ return true ;
136+ }
137+
138+ return false ;
139+ }
116140}
0 commit comments