Skip to content

Commit dcc8a61

Browse files
committed
Merge remote-tracking branch '37349/Issue-37348-gtag-ecommerce-tracking' into comm_prs_248beta1
2 parents 7ec9c5c + 9e06503 commit dcc8a61

File tree

4 files changed

+35
-25
lines changed

4 files changed

+35
-25
lines changed

app/code/Magento/GoogleGtag/Block/Ga.php

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public function getPageTrackingData($measurementId): array
116116
{
117117
return [
118118
'optPageUrl' => $this->getOptPageUrl(),
119-
'measurementId' => $this->escapeHtmlAttr($measurementId, false)
119+
'measurementId' => $this->_escaper->escapeHtmlAttr($measurementId, false)
120120
];
121121
}
122122

@@ -133,7 +133,7 @@ public function getPageTrackingData($measurementId): array
133133
public function getOrdersTrackingData(): array
134134
{
135135
$result = [];
136-
$orderIds = $this->getOrderIds();
136+
$orderIds = $this->getData('order_ids');
137137
if (empty($orderIds) || !is_array($orderIds)) {
138138
return $result;
139139
}
@@ -147,21 +147,22 @@ public function getOrdersTrackingData(): array
147147
foreach ($collection->getItems() as $order) {
148148
foreach ($order->getAllVisibleItems() as $item) {
149149
$result['products'][] = [
150-
'item_id' => $this->escapeJsQuote($item->getSku()),
151-
'item_name' => $this->escapeJsQuote($item->getName()),
152-
'price' => number_format((float) $item->getPrice(), 2),
153-
'quantity' => (int)$item->getQtyOrdered(),
150+
'item_id' => $this->_escaper->escapeHtml($item->getSku()),
151+
'item_name' => $this->_escaper->escapeHtml($item->getName()),
152+
'affiliation' => $this->_escaper->escapeHtml(
153+
$this->_storeManager->getStore()->getFrontendName()
154+
),
155+
'price' => round((float) $item->getPrice(), 2),
156+
'quantity' => (int)$item->getQtyOrdered()
154157
];
155158
}
156159
$result['orders'][] = [
157160
'transaction_id' => $order->getIncrementId(),
158-
'affiliation' => $this->escapeJsQuote($this->_storeManager->getStore()->getFrontendName()),
159-
'value' => number_format((float) $order->getGrandTotal(), 2),
160-
'tax' => number_format((float) $order->getTaxAmount(), 2),
161-
'shipping' => number_format((float) $order->getShippingAmount(), 2),
161+
'value' => round((float) $order->getGrandTotal(), 2),
162+
'tax' => round((float) $order->getTaxAmount(), 2),
163+
'shipping' => round((float) $order->getShippingAmount(), 2),
162164
'currency' => $order->getOrderCurrencyCode(),
163165
];
164-
$result['currency'] = $order->getOrderCurrencyCode();
165166
}
166167
return $result;
167168
}
@@ -175,8 +176,8 @@ private function getOptPageUrl(): string
175176
{
176177
$optPageURL = '';
177178
$pageName = $this->getPageName() !== null ? trim($this->getPageName()) : '';
178-
if ($pageName && substr($pageName, 0, 1) === '/' && strlen($pageName) > 1) {
179-
$optPageURL = ", '" . $this->escapeHtmlAttr($pageName, false) . "'";
179+
if ($pageName && str_starts_with($pageName, '/') && strlen($pageName) > 1) {
180+
$optPageURL = ", '" . $this->_escaper->escapeHtmlAttr($pageName, false) . "'";
180181
}
181182
return $optPageURL;
182183
}

app/code/Magento/GoogleGtag/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ A lot of functionality in the module is on JavaScript, use [mixins](https://deve
2121
### Layouts
2222

2323
This module introduces the following layouts in the `view/frontend/layout` directory:
24-
2524
- `default`
2625
- `checkout_onepage_success`
2726

app/code/Magento/GoogleGtag/Test/Unit/Block/GaTest.php

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,10 @@ protected function setUp(): void
7777
->disableOriginalConstructor()
7878
->getMock();
7979

80-
$contextMock->expects($this->once())
81-
->method('getEscaper')
82-
->willReturn($objectManager->getObject(Escaper::class));
83-
8480
$this->storeManagerMock = $this->getMockBuilder(StoreManagerInterface::class)
8581
->disableOriginalConstructor()
8682
->getMockForAbstractClass();
83+
8784
$this->serializerMock = $this->getMockBuilder(SerializerInterface::class)
8885
->disableOriginalConstructor()
8986
->getMockForAbstractClass();
@@ -110,6 +107,20 @@ protected function setUp(): void
110107
->disableOriginalConstructor()
111108
->getMock();
112109

110+
$escaper = $this->getMockBuilder(Escaper::class)
111+
->disableOriginalConstructor()
112+
->getMock();
113+
114+
$escaper->expects($this->any())
115+
->method('escapeHtmlAttr')
116+
->willReturnCallback(function ($value) {
117+
return $value;
118+
});
119+
120+
$escaper->expects($this->any())
121+
->method('escapeHtml')
122+
->willReturnOnConsecutiveCalls('sku0', 'testName0', 'test');
123+
113124
$this->gaBlock = $objectManager->getObject(
114125
Ga::class,
115126
[
@@ -118,7 +129,8 @@ protected function setUp(): void
118129
'cookieHelper' => $this->cookieHelperMock,
119130
'serializer' => $this->serializerMock,
120131
'searchCriteriaBuilder' => $this->searchCriteriaBuilder,
121-
'orderRepository' => $this->orderRepository
132+
'orderRepository' => $this->orderRepository,
133+
'_escaper' => $escaper
122134
]
123135
);
124136
}
@@ -163,7 +175,6 @@ public function testOrderTrackingData()
163175
'orders' => [
164176
[
165177
'transaction_id' => 100,
166-
'affiliation' => 'test',
167178
'value' => 10.00,
168179
'tax' => 2.00,
169180
'shipping' => 1.00,
@@ -174,11 +185,11 @@ public function testOrderTrackingData()
174185
[
175186
'item_id' => 'sku0',
176187
'item_name' => 'testName0',
188+
'affiliation' => 'test',
177189
'price' => 0.00,
178190
'quantity' => 1
179191
]
180192
],
181-
'currency' => 'USD'
182193
];
183194
$this->gaBlock->setOrderIds([1, 2]);
184195
$tempResults = $this->gaBlock->getOrdersTrackingData();
@@ -224,7 +235,7 @@ protected function createOrderMock($orderItemCount = 1)
224235
$orderMock->expects($this->once())->method('getGrandTotal')->willReturn(10);
225236
$orderMock->expects($this->once())->method('getTaxAmount')->willReturn(2);
226237
$orderMock->expects($this->once())->method('getShippingAmount')->willReturn($orderItemCount);
227-
$orderMock->expects($this->exactly(2))->method('getOrderCurrencyCode')->willReturn('USD');
238+
$orderMock->expects($this->once())->method('getOrderCurrencyCode')->willReturn('USD');
228239
return $orderMock;
229240
}
230241

app/code/Magento/GoogleGtag/view/frontend/web/js/google-analytics.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ define([
3939
if (window.gtag) {
4040
gtag('config', measurementId, { 'anonymize_ip': true });
4141
// Purchase Event
42-
if (config.ordersTrackingData.hasOwnProperty('currency')) {
42+
if (config.ordersTrackingData.hasOwnProperty('orders')) {
4343
var purchaseObject = config.ordersTrackingData.orders[0];
4444
purchaseObject['items'] = config.ordersTrackingData.products;
4545
gtag('event', 'purchase', purchaseObject);
@@ -55,10 +55,9 @@ define([
5555
window.dataLayer = window.dataLayer || [];
5656
function gtag(){dataLayer.push(arguments);}
5757
gtag('js', new Date());
58-
gtag('set', 'developer_id.dYjhlMD', true);
5958
gtag('config', measurementId, { 'anonymize_ip': true });
6059
// Purchase Event
61-
if (config.ordersTrackingData.hasOwnProperty('currency')) {
60+
if (config.ordersTrackingData.hasOwnProperty('orders')) {
6261
var purchaseObject = config.ordersTrackingData.orders[0];
6362
purchaseObject['items'] = config.ordersTrackingData.products;
6463
gtag('event', 'purchase', purchaseObject);

0 commit comments

Comments
 (0)