Completed
Push — fix/warning-if-plugins-use-pac... ( 301620...43d699 )
by Marin
800:31 queued 793:58
created

Tracking::record_user_event()   B

Complexity

Conditions 7
Paths 64

Size

Total Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
nc 64
nop 3
dl 0
loc 22
rs 8.6346
c 0
b 0
f 0
1
<?php
2
/**
3
 * Nosara Tracks for Jetpack
4
 */
5
6
namespace Automattic\Jetpack;
7
8
require_once dirname( dirname( dirname( __DIR__ ) ) ) . '/_inc/lib/tracks/client.php';
9
10
class Tracking {
11
	static $product_name = 'jetpack';
12
13
	static function track_jetpack_usage() {
14
		if ( ! \Jetpack::jetpack_tos_agreed() ) {
15
			return;
16
		}
17
18
		// For tracking stuff via js/ajax
19
		add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue_tracks_scripts' ) );
20
21
		add_action( 'jetpack_activate_module', array( __CLASS__, 'track_activate_module' ), 1, 1 );
22
		add_action( 'jetpack_deactivate_module', array( __CLASS__, 'track_deactivate_module' ), 1, 1 );
23
		add_action( 'jetpack_user_authorized', array( __CLASS__, 'track_user_linked' ) );
24
		add_action( 'wp_login_failed', array( __CLASS__, 'track_failed_login_attempts' ) );
25
	}
26
27 View Code Duplication
	static function enqueue_tracks_scripts() {
28
		wp_enqueue_script( 'jptracks', plugins_url( '_inc/lib/tracks/tracks-ajax.js', JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION, true );
29
		wp_localize_script(
30
			'jptracks',
31
			'jpTracksAJAX',
32
			array(
33
				'ajaxurl'            => admin_url( 'admin-ajax.php' ),
34
				'jpTracksAJAX_nonce' => wp_create_nonce( 'jp-tracks-ajax-nonce' ),
35
			)
36
		);
37
	}
38
39
	/* User has linked their account */
40
	static function track_user_linked() {
41
		$user_id = get_current_user_id();
42
		$anon_id = get_user_meta( $user_id, 'jetpack_tracks_anon_id', true );
43
44
		if ( $anon_id ) {
45
			self::record_user_event( '_aliasUser', array( 'anonId' => $anon_id ) );
46
			delete_user_meta( $user_id, 'jetpack_tracks_anon_id' );
47
			if ( ! headers_sent() ) {
48
				setcookie( 'tk_ai', 'expired', time() - 1000 );
49
			}
50
		}
51
52
		$wpcom_user_data = Jetpack::get_connected_user_data( $user_id );
53
		update_user_meta( $user_id, 'jetpack_tracks_wpcom_id', $wpcom_user_data['ID'] );
54
55
		self::record_user_event( 'wpa_user_linked', array() );
56
	}
57
58
	/* Activated module */
59
	static function track_activate_module( $module ) {
60
		self::record_user_event( 'module_activated', array( 'module' => $module ) );
61
	}
62
63
	/* Deactivated module */
64
	static function track_deactivate_module( $module ) {
65
		self::record_user_event( 'module_deactivated', array( 'module' => $module ) );
66
	}
67
68
	/* Failed login attempts */
69
	static function track_failed_login_attempts( $login ) {
70
		require_once JETPACK__PLUGIN_DIR . 'modules/protect/shared-functions.php';
71
		self::record_user_event(
72
			'failed_login',
73
			array(
74
				'origin_ip' => jetpack_protect_get_ip(),
75
				'login'     => $login,
76
			)
77
		);
78
	}
79
80
	static function record_user_event( $event_type, $data = array(), $user = null ) {
81
82
		if ( ! $user ) {
83
			$user = wp_get_current_user();
84
		}
85
		$site_url = get_option( 'siteurl' );
86
87
		$data['_via_ua']  = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
88
		$data['_via_ip']  = isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '';
89
		$data['_lg']      = isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '';
90
		$data['blog_url'] = $site_url;
91
		$data['blog_id']  = \Jetpack_Options::get_option( 'id' );
92
93
		// Top level events should not be namespaced
94
		if ( '_aliasUser' != $event_type ) {
95
			$event_type = self::$product_name . '_' . $event_type;
96
		}
97
98
		$data['jetpack_version'] = defined( 'JETPACK__VERSION' ) ? JETPACK__VERSION : '0';
99
100
		return jetpack_tracks_record_event( $user, $event_type, $data );
101
	}
102
}
103
104
add_action( 'init', array( 'Tracking', 'track_jetpack_usage' ) );
105