Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
91.67% covered (success)
91.67%
11 / 12
66.67% covered (warning)
66.67%
2 / 3
CRAP
n/a
0 / 0
Automattic\Jetpack\PremiumAnalytics\get_stats_purchase_success_type
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
3
Automattic\Jetpack\PremiumAnalytics\configure_purchase_success
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
Automattic\Jetpack\PremiumAnalytics\inject_purchase_success_script_data
88.89% covered (warning)
88.89%
8 / 9
0.00% covered (danger)
0.00%
0 / 1
5.03
1<?php
2/**
3 * The Stats purchase a checkout reports when it returns to the dashboard.
4 *
5 * @package automattic/jetpack-premium-analytics
6 */
7
8namespace Automattic\Jetpack\PremiumAnalytics;
9
10/**
11 * The purchase types Stats checkout reports in `statsPurchaseSuccess`.
12 */
13const STATS_PURCHASE_SUCCESS_TYPES = array( 'paid', 'free' );
14
15/**
16 * The purchase type this request returned from checkout with.
17 *
18 * @since 0.13.0
19 *
20 * @return string `paid`, `free`, or an empty string.
21 */
22function get_stats_purchase_success_type() {
23    // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only: picks which thank-you notice to show.
24    $type = isset( $_GET['statsPurchaseSuccess'] ) ? sanitize_key( wp_unslash( $_GET['statsPurchaseSuccess'] ) ) : '';
25
26    return in_array( $type, STATS_PURCHASE_SUCCESS_TYPES, true ) ? $type : '';
27}
28
29/**
30 * Configures the purchase success script data.
31 *
32 * @since 0.13.0
33 *
34 * @return void
35 */
36function configure_purchase_success() {
37    add_filter( 'jetpack_admin_js_script_data', __NAMESPACE__ . '\\inject_purchase_success_script_data', 20 );
38}
39
40/**
41 * Injects the returned purchase into JetpackScriptData.
42 *
43 * @since 0.13.0
44 *
45 * @param array $data The script data passed by the assets package.
46 * @return array
47 */
48function inject_purchase_success_script_data( array $data ): array {
49    if ( ! Analytics::is_dashboard_request() ) {
50        return $data;
51    }
52
53    $type = get_stats_purchase_success_type();
54    if ( '' === $type ) {
55        return $data;
56    }
57
58    if ( ! isset( $data['premium_analytics'] ) || ! is_array( $data['premium_analytics'] ) ) {
59        $data['premium_analytics'] = array();
60    }
61
62    $data['premium_analytics']['purchase_success'] = array( 'type' => $type );
63
64    return $data;
65}