Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 2
n/a
0 / 0
CRAP
n/a
0 / 0
Jetpack_WooCommerce_Analytics_Checkout_Flow
n/a
0 / 0
n/a
0 / 0
28
n/a
0 / 0
 __construct
n/a
0 / 0
n/a
0 / 0
1
 capture_product_view
n/a
0 / 0
n/a
0 / 0
2
 capture_order_confirmation_view
n/a
0 / 0
n/a
0 / 0
11
 capture_cart_view
n/a
0 / 0
n/a
0 / 0
2
 capture_checkout_view
n/a
0 / 0
n/a
0 / 0
12
1<?php
2/**
3 * Jetpack_WooCommerce_Analytics_Checkout_Flow
4 *
5 * @deprecated 13.3
6 *
7 * @package automattic/jetpack
8 * @author Automattic
9 */
10
11/**
12 * Bail if accessed directly
13 */
14if ( ! defined( 'ABSPATH' ) ) {
15    exit( 0 );
16}
17
18/**
19 * Class Jetpack_WooCommerce_Analytics_Checkout_Flow
20 * Class that handles all page view events for the checkout flow (from product view to order confirmation view)
21 *
22 * @deprecated 13.3
23 */
24class Jetpack_WooCommerce_Analytics_Checkout_Flow {
25
26    use Jetpack_WooCommerce_Analytics_Trait;
27
28    /**
29     * Jetpack_WooCommerce_Analytics_Checkout_Flow constructor.
30     *
31     * @deprecated 13.3
32     */
33    public function __construct() {
34        $this->find_cart_checkout_content_sources();
35        $this->additional_blocks_on_cart_page     = $this->get_additional_blocks_on_page( 'cart' );
36        $this->additional_blocks_on_checkout_page = $this->get_additional_blocks_on_page( 'checkout' );
37
38        // single product page view.
39        add_action( 'woocommerce_after_single_product', array( $this, 'capture_product_view' ) );
40
41        // order confirmed page view
42        add_action( 'woocommerce_thankyou', array( $this, 'capture_order_confirmation_view' ), 10, 1 );
43
44        // cart page view
45        add_action( 'wp_footer', array( $this, 'capture_cart_view' ) );
46
47        // checkout page view
48        add_action( 'wp_footer', array( $this, 'capture_checkout_view' ) );
49    }
50
51        /**
52         * Track a product page view
53         *
54         * @deprecated 13.3
55         */
56    public function capture_product_view() {
57        global $product;
58        if ( ! $product instanceof WC_Product ) {
59            return;
60        }
61
62        $this->record_event(
63            'woocommerceanalytics_product_view',
64            array(),
65            $product->get_id()
66        );
67    }
68
69    /**
70     * Track the order confirmation page view
71     *
72     * @deprecated 13.3
73     */
74    public function capture_order_confirmation_view() {
75        $order_id = absint( get_query_var( 'order-received' ) );
76        if ( ! $order_id ) {
77            return;
78        }
79
80        if ( ! is_order_received_page() ) {
81            return;
82        }
83
84        $order = wc_get_order( $order_id );
85
86        $order_source                              = $order->get_created_via();
87        $checkout_page_contains_checkout_block     = '0';
88        $checkout_page_contains_checkout_shortcode = '0';
89
90        if ( 'store-api' === $order_source ) {
91            $checkout_page_contains_checkout_block = '1';
92        } elseif ( 'checkout' === $order_source ) {
93            $checkout_page_contains_checkout_shortcode = '1';
94        }
95
96        $coupons     = $order->get_coupons();
97        $coupon_used = 0;
98        if ( is_countable( $coupons ) ) {
99            $coupon_used = count( $coupons ) ? 1 : 0;
100        }
101
102        if ( is_object( WC()->session ) ) {
103            $create_account     = true === WC()->session->get( 'wc_checkout_createaccount_used' ) ? 'Yes' : 'No';
104            $checkout_page_used = true === WC()->session->get( 'checkout_page_used' ) ? 'Yes' : 'No';
105        } else {
106            $create_account     = 'No';
107            $checkout_page_used = 'No';
108        }
109
110        $this->record_event(
111            'woocommerceanalytics_order_confirmation_view',
112            array(
113                'coupon_used'                           => $coupon_used,
114                'create_account'                        => $create_account,
115                'express_checkout'                      => 'null', // TODO: not solved yet.
116                'guest_checkout'                        => $order->get_customer_id() ? 'No' : 'Yes',
117                'oi'                                    => $order->get_id(),
118                'order_value'                           => $order->get_total(),
119                'payment_option'                        => $order->get_payment_method(),
120                'products_count'                        => $order->get_item_count(),
121                'products'                              => $this->format_items_to_json( $order->get_items() ),
122                'order_note'                            => $order->get_customer_note(),
123                'shipping_option'                       => $order->get_shipping_method(),
124                'from_checkout'                         => $checkout_page_used,
125                'checkout_page_contains_checkout_block' => $checkout_page_contains_checkout_block,
126                'checkout_page_contains_checkout_shortcode' => $checkout_page_contains_checkout_shortcode,
127            )
128        );
129    }
130
131    /**
132     * Track the cart page view
133     *
134     * @deprecated 13.3
135     */
136    public function capture_cart_view() {
137        if ( ! is_cart() ) {
138            return;
139        }
140
141        $this->record_event(
142            'woocommerceanalytics_cart_view',
143            array_merge(
144                $this->get_cart_checkout_shared_data(),
145                array()
146            )
147        );
148    }
149
150    /**
151     * Track the checkout page view
152     *
153     * @deprecated 13.3
154     */
155    public function capture_checkout_view() {
156        global $post;
157        $checkout_page_id = wc_get_page_id( 'checkout' );
158
159        $is_checkout = $checkout_page_id && is_page( $checkout_page_id )
160        || wc_post_content_has_shortcode( 'woocommerce_checkout' )
161        || has_block( 'woocommerce/checkout', $post )
162        || has_block( 'woocommerce/classic-shortcode', $post )
163        || apply_filters( 'woocommerce_is_checkout', false )
164        || \Automattic\Jetpack\Constants::is_defined( 'WOOCOMMERCE_CHECKOUT' );
165
166        if ( ! $is_checkout ) {
167            return;
168        }
169
170        $is_in_checkout_page                       = $checkout_page_id === $post->ID ? 'Yes' : 'No';
171        $checkout_page_contains_checkout_block     = '0';
172        $checkout_page_contains_checkout_shortcode = '1';
173
174        $session = WC()->session;
175        if ( is_object( $session ) ) {
176            $session->set( 'checkout_page_used', true );
177            $session->save_data();
178            $draft_order_id = $session->get( 'store_api_draft_order', 0 );
179            if ( $draft_order_id ) {
180                $checkout_page_contains_checkout_block     = '1';
181                $checkout_page_contains_checkout_shortcode = '0';
182            }
183        }
184
185        // Order received page is also a checkout page, so we need to bail out if we are on that page.
186        if ( is_order_received_page() ) {
187            return;
188        }
189
190        $this->record_event(
191            'woocommerceanalytics_checkout_view',
192            array_merge(
193                $this->get_cart_checkout_shared_data(),
194                array(
195                    'from_checkout' => $is_in_checkout_page,
196                    'checkout_page_contains_checkout_block' => $checkout_page_contains_checkout_block,
197                    'checkout_page_contains_checkout_shortcode' => $checkout_page_contains_checkout_shortcode,
198                )
199            )
200        );
201    }
202}