Issues (2)

src/CheckoutPageExtensionController.php (2 issues)

1
<?php
2
3
namespace Sunnysideup\EcommerceGoogleAnalytics;
4
5
use SilverStripe\Control\Director;
6
use SilverStripe\Core\Config\Config;
7
use SilverStripe\Core\Extension;
8
use SilverStripe\View\Requirements;
9
use Sunnysideup\Ecommerce\Config\EcommerceConfig;
10
use Sunnysideup\Ecommerce\Model\Money\EcommerceCurrency;
11
use Sunnysideup\Ecommerce\Pages\Product;
12
13
/**
14
 * Class \Sunnysideup\EcommerceGoogleAnalytics\CheckoutPageExtensionController
15
 *
16
 * @property \Sunnysideup\Ecommerce\Pages\CheckoutPageController|\Sunnysideup\EcommerceGoogleAnalytics\CheckoutPageExtensionController $owner
17
 */
18
class CheckoutPageExtensionController extends Extension
19
{
20
    /**
21
     * Standard SS method.
22
     * Runs after the Page::init method is called.
23
     */
24
    public function onAfterInit()
25
    {
26
        $owner = $this->owner;
27
        if ($owner->EnableGoogleAnalytics && $owner->currentOrder && (Director::isLive() || isset($_GET['testanalytics']))) {
0 ignored issues
show
Bug Best Practice introduced by
The property EnableGoogleAnalytics does not exist on Sunnysideup\EcommerceGoo...PageExtensionController. Did you maybe forget to declare it?
Loading history...
Bug Best Practice introduced by
The property currentOrder does not exist on Sunnysideup\EcommerceGoo...PageExtensionController. Did you maybe forget to declare it?
Loading history...
28
            $var = EcommerceConfig::get(CheckoutPageDataExtension::class, 'google_analytics_variable');
29
            if ($var) {
30
                $currencyUsedObject = $owner->currentOrder->CurrencyUsed();
31
                if ($currencyUsedObject) {
32
                    $currencyUsedString = $currencyUsedObject->Code;
33
                }
34
                if (empty($currencyUsedString)) {
35
                    $currencyUsedString = EcommerceCurrency::default_currency_code();
36
                }
37
                $orderItems = $owner->currentOrder->OrderItems();
38
                $items = '';
39
                if (Config::inst()->get(CheckoutPageExtensionController::class, 'include_product_items')) {
40
                    foreach ($orderItems as $orderItem) {
41
                        /** @var Product $product */
42
                        $product = Product::get_by_id($orderItem->BuyableID);
43
                        $sku = $product->InternalItemID ?: $product->ID;
44
                        $category = 'Unknown';
45
                        $topParent = $product->TopParentGroup();
46
                        if ($topParent) {
47
                            $category = $topParent->Title;
48
                        }
49
                        $orderItemName = preg_replace("#\r|\n#", '', (string) $orderItem->TableTitle());
50
                        $category = preg_replace("#\r|\n#", '', (string) $category);
51
                        $items .=
52
                            'ga(
53
                                \'ecommerce:addItem\',
54
                                {
55
                                    \'id\': \'' . $owner->currentOrder->ID . '\',
56
                                    \'name\': \'' . $orderItemName . '\',
57
                                    \'sku\': \'' . $sku . '\',
58
                                    \'category\': \'' . $category . '\',
59
                                    \'price\': \'' . $orderItem->CalculatedTotal . '\',
60
                                    \'quantity\': \'' . $orderItem->Quantity . '\',
61
                                }
62
                            );';
63
                    }
64
                }
65
                $js = '
66
                const ecommerceFormForGA = document.getElementById("OrderForm_OrderForm");
67
                ecommerceFormForGA.addEventListener(
68
                    "submit",
69
                    function(e){
70
                        console.log(e);
71
                        ' . $var . '(\'require\', \'ecommerce\');
72
                        ' . $var . '(
73
                            \'ecommerce:addTransaction\',
74
                            {
75
                                \'id\': \'' . $owner->currentOrder->ID . '\',
76
                                \'revenue\': \'' . $owner->currentOrder->getSubTotal() . '\',
77
                                \'currency\': \'' . $currencyUsedString . '\'
78
                            }
79
                        );
80
                        ' . $items . '
81
                        ' . $var . '(\'ecommerce:send\');
82
                    }
83
                );';
84
                Requirements::customScript($js, 'GoogleAnalyticsEcommerce');
85
            }
86
        }
87
    }
88
}
89