diff --git a/Config/Config.php b/Config/Config.php index d690c4e9..64f84e5a 100644 --- a/Config/Config.php +++ b/Config/Config.php @@ -235,6 +235,14 @@ public function isWebhookTriggerOnOrderState(): bool return $this->getWebhookTriggerMode() === 'on_order_state'; } + /** + * Whether to skip storing purchase event in checkout session + */ + public function isPurchaseSessionStorageDisabled(): bool + { + return (bool)$this->getModuleConfigValueAdvanced('disable_purchase_session_storage', false); + } + /** * @return bool */ diff --git a/Observer/TriggerPurchaseDataLayerEvent.php b/Observer/TriggerPurchaseDataLayerEvent.php index 0d579da1..04411ed4 100644 --- a/Observer/TriggerPurchaseDataLayerEvent.php +++ b/Observer/TriggerPurchaseDataLayerEvent.php @@ -6,6 +6,7 @@ use Magento\Framework\Event\ObserverInterface; use Magento\Sales\Api\Data\OrderInterface; use Tagging\GTM\Api\CheckoutSessionDataProviderInterface; +use Tagging\GTM\Config\Config; use Tagging\GTM\DataLayer\Event\Purchase as PurchaseEvent; use Tagging\GTM\Logger\Debugger; use Exception; @@ -15,15 +16,18 @@ class TriggerPurchaseDataLayerEvent implements ObserverInterface private CheckoutSessionDataProviderInterface $checkoutSessionDataProvider; private PurchaseEvent $purchaseEvent; private Debugger $debugger; + private Config $config; public function __construct( CheckoutSessionDataProviderInterface $checkoutSessionDataProvider, PurchaseEvent $purchaseEvent, - Debugger $debugger + Debugger $debugger, + Config $config ) { $this->checkoutSessionDataProvider = $checkoutSessionDataProvider; $this->purchaseEvent = $purchaseEvent; $this->debugger = $debugger; + $this->config = $config; } public function execute(Observer $observer) @@ -31,6 +35,11 @@ public function execute(Observer $observer) /** @var OrderInterface $order */ $order = $observer->getData('order'); + if ($this->config->isPurchaseSessionStorageDisabled()) { + $this->debugger->debug("[TriggerPurchaseDataLayerEvent] Purchase session storage disabled; skipping add"); + return; + } + $this->debugger->debug("TriggerPurchaseDataLayerEvent::execute(): has changed "); $this->checkoutSessionDataProvider->add( 'purchase_event', diff --git a/etc/adminhtml/system.xml b/etc/adminhtml/system.xml index b58f433d..c9a436d2 100644 --- a/etc/adminhtml/system.xml +++ b/etc/adminhtml/system.xml @@ -84,6 +84,14 @@ on_order_state + + + When enabled, purchase events are not stored in checkout session (prevents pushes on non-success pages after failed/aborted payments). + Magento\Config\Model\Config\Source\Yesno + + 1 + +