class.jetpack-tracks.php 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. /**
  3. * Nosara Tracks for Jetpack
  4. */
  5. require_once( dirname( __FILE__ ) . '/_inc/lib/tracks/client.php' );
  6. class JetpackTracking {
  7. static $product_name = 'jetpack';
  8. static function track_jetpack_usage() {
  9. if ( ! Jetpack::jetpack_tos_agreed() ) {
  10. return;
  11. }
  12. // For tracking stuff via js/ajax
  13. add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue_tracks_scripts' ) );
  14. add_action( 'jetpack_activate_module', array( __CLASS__, 'track_activate_module'), 1, 1 );
  15. add_action( 'jetpack_deactivate_module', array( __CLASS__, 'track_deactivate_module'), 1, 1 );
  16. add_action( 'jetpack_user_authorized', array( __CLASS__, 'track_user_linked' ) );
  17. add_action( 'wp_login_failed', array( __CLASS__, 'track_failed_login_attempts' ) );
  18. }
  19. static function enqueue_tracks_scripts() {
  20. wp_enqueue_script( 'jptracks', plugins_url( '_inc/lib/tracks/tracks-ajax.js', JETPACK__PLUGIN_FILE ), array(), JETPACK__VERSION, true );
  21. wp_localize_script( 'jptracks', 'jpTracksAJAX', array(
  22. 'ajaxurl' => admin_url( 'admin-ajax.php' ),
  23. 'jpTracksAJAX_nonce' => wp_create_nonce( 'jp-tracks-ajax-nonce' ),
  24. ) );
  25. }
  26. /* User has linked their account */
  27. static function track_user_linked() {
  28. $user_id = get_current_user_id();
  29. $anon_id = get_user_meta( $user_id, 'jetpack_tracks_anon_id', true );
  30. if ( $anon_id ) {
  31. self::record_user_event( '_aliasUser', array( 'anonId' => $anon_id ) );
  32. delete_user_meta( $user_id, 'jetpack_tracks_anon_id' );
  33. if ( ! headers_sent() ) {
  34. setcookie( 'tk_ai', 'expired', time() - 1000 );
  35. }
  36. }
  37. $wpcom_user_data = Jetpack::get_connected_user_data( $user_id );
  38. update_user_meta( $user_id, 'jetpack_tracks_wpcom_id', $wpcom_user_data['ID'] );
  39. self::record_user_event( 'wpa_user_linked', array() );
  40. }
  41. /* Activated module */
  42. static function track_activate_module( $module ) {
  43. self::record_user_event( 'module_activated', array( 'module' => $module ) );
  44. }
  45. /* Deactivated module */
  46. static function track_deactivate_module( $module ) {
  47. self::record_user_event( 'module_deactivated', array( 'module' => $module ) );
  48. }
  49. /* Failed login attempts */
  50. static function track_failed_login_attempts( $login ) {
  51. require_once( JETPACK__PLUGIN_DIR . 'modules/protect/shared-functions.php' );
  52. self::record_user_event( 'failed_login', array( 'origin_ip' => jetpack_protect_get_ip(), 'login' => $login ) );
  53. }
  54. static function record_user_event( $event_type, $data= array(), $user = null ) {
  55. if ( ! $user ) {
  56. $user = wp_get_current_user();
  57. }
  58. $site_url = get_option( 'siteurl' );
  59. $data['_via_ua'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
  60. $data['_via_ip'] = isset( $_SERVER['REMOTE_ADDR'] ) ? $_SERVER['REMOTE_ADDR'] : '';
  61. $data['_lg'] = isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '';
  62. $data['blog_url'] = $site_url;
  63. $data['blog_id'] = Jetpack_Options::get_option( 'id' );
  64. // Top level events should not be namespaced
  65. if ( '_aliasUser' != $event_type ) {
  66. $event_type = self::$product_name . '_' . $event_type;
  67. }
  68. $data['jetpack_version'] = defined( 'JETPACK__VERSION' ) ? JETPACK__VERSION : '0';
  69. jetpack_tracks_record_event( $user, $event_type, $data );
  70. }
  71. }
  72. add_action( 'init', array( 'JetpackTracking', 'track_jetpack_usage' ) );