Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
woocommerce
/
includes
/
tracks
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php use Automattic\Jetpack\Constants; use Automattic\WooCommerce\Utilities\NumberUtil; defined('ABSPATH') || exit; class WC_Tracks_Client { const PIXEL = 'https://pixel.wp.com/t.gif'; const BROWSER_TYPE = 'php-agent'; const USER_AGENT_SLUG = 'tracks-client'; public static function init() { add_action('admin_init', array(__CLASS__, 'maybe_set_identity_cookie')); } public static function maybe_set_identity_cookie() { if (Constants::is_true('DOING_AJAX')) { return; } if (isset($_COOKIE['tk_ai'])) { return; } $user = wp_get_current_user(); if ($user instanceof WP_User && 'wptests_capabilities' === $user->cap_key) { return false; } $user_id = $user->ID; $anon_id = get_user_meta($user_id, '_woocommerce_tracks_anon_id', true); if (!$anon_id) { $anon_id = self::get_anon_id(); update_user_meta($user_id, '_woocommerce_tracks_anon_id', $anon_id); } if (!Constants::is_true('REST_REQUEST') && !Constants::is_true('XMLRPC_REQUEST')) { wc_setcookie('tk_ai', $anon_id); } } public static function record_event($event) { if (!$event instanceof WC_Tracks_Event) { $event = new WC_Tracks_Event($event); } if (is_wp_error($event)) { return $event; } $pixel = $event->build_pixel_url($event); if (!$pixel) { return new WP_Error('invalid_pixel', 'cannot generate tracks pixel for given input', 400); } return self::record_pixel($pixel); } public static function record_pixel($pixel) { $pixel .= '&_rt=' . self::build_timestamp() . '&_=_'; wp_safe_remote_get($pixel, array('blocking' => false, 'redirection' => 2, 'httpversion' => '1.1', 'timeout' => 1)); return true; } public static function build_timestamp() { $ts = NumberUtil::round(microtime(true) * 1000); return number_format($ts, 0, '', ''); } public static function get_identity($user_id) { $jetpack_lib = '/tracks/client.php'; if (class_exists('Jetpack') && Constants::is_defined('JETPACK__VERSION')) { if (version_compare(Constants::get_constant('JETPACK__VERSION'), '7.5', '<')) { if (file_exists(jetpack_require_lib_dir() . $jetpack_lib)) { include_once jetpack_require_lib_dir() . $jetpack_lib; if (function_exists('jetpack_tracks_get_identity')) { return jetpack_tracks_get_identity($user_id); } } } else { $tracking = new Automattic\Jetpack\Tracking(); return $tracking->tracks_get_identity($user_id); } } $anon_id = isset($_COOKIE['tk_ai']) ? sanitize_text_field(wp_unslash($_COOKIE['tk_ai'])) : false; if (!$anon_id) { $anon_id = get_user_meta($user_id, '_woocommerce_tracks_anon_id', true); } if (!$anon_id) { $anon_id = self::get_anon_id(); update_user_meta($user_id, '_woocommerce_tracks_anon_id', $anon_id); } return array('_ut' => 'anon', '_ui' => $anon_id); } public static function get_anon_id() { static $anon_id = null; if (!isset($anon_id)) { if (isset($_COOKIE['tk_ai'])) { $anon_id = sanitize_text_field(wp_unslash($_COOKIE['tk_ai'])); } else { $binary = ''; for ($i = 0; $i < 18; ++$i) { $binary .= chr(wp_rand(0, 255)); } $anon_id = 'woo:' . base64_encode($binary); } } return $anon_id; } } WC_Tracks_Client::init();