Skip to content

Commit 907a8cf

Browse files
committed
Refactored Transaction Log
1 parent 12232d4 commit 907a8cf

File tree

5 files changed

+75
-9
lines changed

5 files changed

+75
-9
lines changed

Api/Transaction/LogInterface.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
/**
3+
* Copyright © Magefan ([email protected]). All rights reserved.
4+
* Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement).
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magefan\GoogleTagManager\Api\Transaction;
10+
11+
interface LogInterface
12+
{
13+
/**
14+
* @param mixed $order
15+
* @param string $requester
16+
* @return void
17+
*/
18+
public function logTransaction($order, string $requester);
19+
20+
/**
21+
* @param mixed $order
22+
* @param string $requester
23+
* @return bool
24+
*/
25+
public function isTransactionUnique($order, string $requester): bool;
26+
}

Model/Transaction/Log.php

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@
1111
use Magefan\GoogleTagManager\Model\ResourceModel\Transaction\CollectionFactory as TransactionCollectionFactory;
1212
use Magefan\GoogleTagManager\Model\TransactionFactory;
1313
use Magefan\GoogleTagManager\Model\TransactionRepository;
14+
use Magefan\GoogleTagManager\Api\Transaction\LogInterface;
15+
use Magento\Sales\Model\OrderFactory;
1416
use Magento\Sales\Api\Data\OrderInterface as Order;
1517
use Magento\Framework\Exception\CouldNotSaveException;
1618
use Psr\Log\LoggerInterface;
1719

18-
class Log
20+
class Log implements LogInterface
1921
{
2022
/**
2123
* @var TransactionCollectionFactory
@@ -32,37 +34,47 @@ class Log
3234
*/
3335
private $transactionRepository;
3436

37+
/**
38+
* @var OrderFactory
39+
*/
40+
private $orderFactory;
41+
3542
/**
3643
* @var LoggerInterface
3744
*/
3845
private $logger;
3946

47+
4048
/**
41-
* Log constructor.
4249
* @param TransactionCollectionFactory $transactionCollectionFactory
4350
* @param TransactionFactory $transactionFactory
4451
* @param TransactionRepository $transactionRepository
52+
* @param OrderFactory $orderFactory
4553
* @param LoggerInterface $logger
4654
*/
4755
public function __construct(
4856
TransactionCollectionFactory $transactionCollectionFactory,
4957
TransactionFactory $transactionFactory,
5058
TransactionRepository $transactionRepository,
59+
OrderFactory $orderFactory,
5160
LoggerInterface $logger
5261
) {
5362
$this->transactionCollectionFactory = $transactionCollectionFactory;
5463
$this->transactionFactory = $transactionFactory;
5564
$this->transactionRepository = $transactionRepository;
65+
$this->orderFactory = $orderFactory;
5666
$this->logger = $logger;
5767
}
5868

5969
/**
60-
* @param Order $order
70+
* @param mixed $order
6171
* @param string $requester
6272
* @return void
6373
*/
64-
public function logTransaction(Order $order, string $requester)
74+
public function logTransaction($order, string $requester)
6575
{
76+
$order = $this->getOrder($order);
77+
6678
$transactionModel = $this->transactionFactory->create();
6779

6880
$transactionModel->setTransactionId((string)$order->getIncrementId());
@@ -78,18 +90,20 @@ public function logTransaction(Order $order, string $requester)
7890
}
7991

8092
/**
81-
* @param Order $order
93+
* @param mixed $order
8294
* @param string $requester
83-
* @return void
95+
* @return bool
8496
*/
85-
public function isTransactionUnique(Order $order, string $requester): bool
97+
public function isTransactionUnique($order, string $requester): bool
8698
{
99+
$order = $this->getOrder($order);
100+
87101
$transactionsForRequesterByTransactionId = $this->transactionFactory->create()->getCollection()->addFieldToFilter(
88102
'requester',
89103
$requester
90104
)->addFieldToFilter(
91105
'transaction_id',
92-
(string)$order->getIncrementId()
106+
$order->getIncrementId()
93107
)->addFieldToFilter(
94108
'store_id',
95109
(int)$order->getStoreId()
@@ -101,4 +115,25 @@ public function isTransactionUnique(Order $order, string $requester): bool
101115

102116
return true;
103117
}
118+
119+
/**
120+
* @param $order
121+
* @return Order
122+
* @throws \Exception
123+
*/
124+
private function getOrder($order): Order
125+
{
126+
if (is_object()) {
127+
if (!($order instanceof Order)) {
128+
throw new \Exception('Object is not instance of OrderInterface.');
129+
}
130+
} else {
131+
$order = $this->orderFactory->create()->loadByIncrementId((string)$order);
132+
if (!$order->getId()) {
133+
throw new \Exception('Order with such ID does not exist.');
134+
}
135+
}
136+
137+
return $order;
138+
}
104139
}

Plugin/Magefan/GoogleTagManager/Api/DataLayer/PurchaseInterface.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use Magefan\GoogleTagManager\Api\DataLayer\PurchaseInterface as Subject;
1212
use Magefan\GoogleTagManager\Model\TransactionFactory;
1313
use Magento\Sales\Model\Order;
14-
use Magefan\GoogleTagManager\Model\Transaction\Log as TransactionLog;
14+
use Magefan\GoogleTagManager\Api\Transaction\LogInterface as TransactionLog;
1515

1616
class PurchaseInterface
1717
{
@@ -30,6 +30,7 @@ public function __construct(
3030
}
3131

3232
/**
33+
* Prevent double purchase tracking by the same requester
3334
* @param Subject $subject
3435
* @param $proceed
3536
* @param Order $order

etc/adminhtml/system.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,9 @@ height=&quot;0&quot; width=&quot;0&quot; style=&quot;display:none;visibility:hid
202202
</field>
203203
<group id="measurement_protocol" translate="label" type="text" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
204204
<label>Measurement Protocol /GA4 Server Side Tracking (GTM Extra)</label>
205+
<depends>
206+
<field id="mfgoogletagmanager/server_container/enabled">0</field>
207+
</depends>
205208
<attribute type="expanded">1</attribute>
206209

207210
<field id="info" translate="label comment" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">

etc/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<preference for="Magefan\GoogleTagManager\Api\DataLayer\Cart\ItemInterface" type="Magefan\GoogleTagManager\Model\DataLayer\Cart\Item" />
1414
<preference for="Magefan\GoogleTagManager\Api\DataLayer\Order\ItemInterface" type="Magefan\GoogleTagManager\Model\DataLayer\Order\Item" />
1515
<preference for="Magefan\GoogleTagManager\Api\DataLayer\Product\ItemInterface" type="Magefan\GoogleTagManager\Model\DataLayer\Product\Item" />
16+
<preference for="Magefan\GoogleTagManager\Api\Transaction\LogInterface" type="Magefan\GoogleTagManager\Model\Transaction\Log" />
1617
<type name="Magefan\GoogleTagManager\Api\DataLayer\PurchaseInterface">
1718
<plugin name="Plugin_Magefan_GoogleTagManager_Api_DataLayer_PurchaseInterface" type="Magefan\GoogleTagManager\Plugin\Magefan\GoogleTagManager\Api\DataLayer\PurchaseInterface" sortOrder="10" disabled="false"/>
1819
</type>

0 commit comments

Comments
 (0)