88
99namespace Magento \GoogleAnalytics \Block ;
1010
11+ use Magento \Framework \App \ObjectManager ;
12+
1113/**
1214 * GoogleAnalytics Page Block
1315 *
@@ -27,20 +29,28 @@ class Ga extends \Magento\Framework\View\Element\Template
2729 */
2830 protected $ _salesOrderCollection ;
2931
32+ /**
33+ * @var \Magento\Cookie\Helper\Cookie
34+ */
35+ private $ cookieHelper ;
36+
3037 /**
3138 * @param \Magento\Framework\View\Element\Template\Context $context
3239 * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $salesOrderCollection
3340 * @param \Magento\GoogleAnalytics\Helper\Data $googleAnalyticsData
3441 * @param array $data
42+ * @param \Magento\Cookie\Helper\Cookie|null $cookieHelper
3543 */
3644 public function __construct (
3745 \Magento \Framework \View \Element \Template \Context $ context ,
3846 \Magento \Sales \Model \ResourceModel \Order \CollectionFactory $ salesOrderCollection ,
3947 \Magento \GoogleAnalytics \Helper \Data $ googleAnalyticsData ,
40- array $ data = []
48+ array $ data = [],
49+ \Magento \Cookie \Helper \Cookie $ cookieHelper = null
4150 ) {
4251 $ this ->_googleAnalyticsData = $ googleAnalyticsData ;
4352 $ this ->_salesOrderCollection = $ salesOrderCollection ;
53+ $ this ->cookieHelper = $ cookieHelper ?: ObjectManager::getInstance ()->get (\Magento \Cookie \Helper \Cookie::class);
4454 parent ::__construct ($ context , $ data );
4555 }
4656
@@ -73,22 +83,17 @@ public function getPageName()
7383 * @return string
7484 * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference#set
7585 * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference#gaObjectMethods
86+ * @deprecated please use getPageTrackingData method
7687 */
7788 public function getPageTrackingCode ($ accountId )
7889 {
79- $ pageName = trim ($ this ->getPageName ());
80- $ optPageURL = '' ;
81- if ($ pageName && substr ($ pageName , 0 , 1 ) == '/ ' && strlen ($ pageName ) > 1 ) {
82- $ optPageURL = ", ' " . $ this ->escapeHtmlAttr ($ pageName , false ) . "' " ;
83- }
84-
8590 $ anonymizeIp = "" ;
8691 if ($ this ->_googleAnalyticsData ->isAnonymizedIpActive ()) {
8792 $ anonymizeIp = "\nga('set', 'anonymizeIp', true); " ;
8893 }
8994
9095 return "\nga('create', ' " . $ this ->escapeHtmlAttr ($ accountId , false )
91- . "', 'auto'); {$ anonymizeIp }\nga('send', 'pageview' {$ optPageURL }); \n" ;
96+ . "', 'auto'); {$ anonymizeIp }\nga('send', 'pageview' {$ this -> getOptPageUrl () }); \n" ;
9297 }
9398
9499 /**
@@ -99,6 +104,7 @@ public function getPageTrackingCode($accountId)
99104 * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#transaction
100105 *
101106 * @return string|void
107+ * @deprecated please use getOrdersTrackingData method
102108 */
103109 public function getOrdersTrackingCode ()
104110 {
@@ -162,4 +168,97 @@ protected function _toHtml()
162168
163169 return parent ::_toHtml ();
164170 }
171+
172+ /**
173+ * Return cookie restriction mode value.
174+ *
175+ * @return bool
176+ */
177+ public function isCookieRestrictionModeEnabled ()
178+ {
179+ return $ this ->cookieHelper ->isCookieRestrictionModeEnabled ();
180+ }
181+
182+ /**
183+ * Return current website id.
184+ *
185+ * @return int
186+ */
187+ public function getCurrentWebsiteId ()
188+ {
189+ return $ this ->_storeManager ->getWebsite ()->getId ();
190+ }
191+
192+ /**
193+ * Return information about page for GA tracking
194+ *
195+ * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference#set
196+ * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/method-reference#gaObjectMethods
197+ *
198+ * @param string $accountId
199+ * @return array
200+ */
201+ public function getPageTrackingData ($ accountId )
202+ {
203+ return [
204+ 'optPageUrl ' => $ this ->getOptPageUrl (),
205+ 'isAnonymizedIpActive ' => $ this ->_googleAnalyticsData ->isAnonymizedIpActive (),
206+ 'accountId ' => $ this ->escapeHtmlAttr ($ accountId , false )
207+ ];
208+ }
209+
210+ /**
211+ * Return information about order and items for GA tracking.
212+ *
213+ * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#checkout-options
214+ * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#measuring-transactions
215+ * @link https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#transaction
216+ *
217+ * @return array
218+ */
219+ public function getOrdersTrackingData ()
220+ {
221+ $ result = [];
222+ $ orderIds = $ this ->getOrderIds ();
223+ if (empty ($ orderIds ) || !is_array ($ orderIds )) {
224+ return $ result ;
225+ }
226+
227+ $ collection = $ this ->_salesOrderCollection ->create ();
228+ $ collection ->addFieldToFilter ('entity_id ' , ['in ' => $ orderIds ]);
229+
230+ foreach ($ collection as $ order ) {
231+ foreach ($ order ->getAllVisibleItems () as $ item ) {
232+ $ result ['products ' ][] = [
233+ 'id ' => $ this ->escapeJs ($ item ->getSku ()),
234+ 'name ' => $ this ->escapeJs ($ item ->getName ()),
235+ 'price ' => $ item ->getBasePrice (),
236+ 'quantity ' => $ item ->getQtyOrdered (),
237+ ];
238+ }
239+ $ result ['orders ' ][] = [
240+ 'id ' => $ order ->getIncrementId (),
241+ 'affiliation ' => $ this ->escapeJs ($ this ->_storeManager ->getStore ()->getFrontendName ()),
242+ 'revenue ' => $ order ->getBaseGrandTotal (),
243+ 'tax ' => $ order ->getBaseTaxAmount (),
244+ 'shipping ' => $ order ->getBaseShippingAmount (),
245+ ];
246+ }
247+ return $ result ;
248+ }
249+
250+ /**
251+ * Return page url for tracking.
252+ *
253+ * @return string
254+ */
255+ private function getOptPageUrl ()
256+ {
257+ $ optPageURL = '' ;
258+ $ pageName = trim ($ this ->getPageName ());
259+ if ($ pageName && substr ($ pageName , 0 , 1 ) == '/ ' && strlen ($ pageName ) > 1 ) {
260+ $ optPageURL = ", ' " . $ this ->escapeHtmlAttr ($ pageName , false ) . "' " ;
261+ }
262+ return $ optPageURL ;
263+ }
165264}
0 commit comments