<?php class WC_Tracks { const PREFIX = 'wcadmin_'; public static function get_products_count() { $product_counts = WC_Tracker::get_product_counts(); return $product_counts['total']; } public static function get_blog_details($user_id) { $blog_details = get_transient('wc_tracks_blog_details'); if (false === $blog_details) { $blog_details = array('url' => home_url(), 'blog_lang' => get_user_locale($user_id), 'blog_id' => class_exists('Jetpack_Options') ? Jetpack_Options::get_option('id') : null, 'products_count' => self::get_products_count(), 'wc_version' => WC()->version); set_transient('wc_tracks_blog_details', $blog_details, DAY_IN_SECONDS); } return $blog_details; } public static function get_server_details() { $data = array(); $data['_via_ua'] = isset($_SERVER['HTTP_USER_AGENT']) ? wc_clean(wp_unslash($_SERVER['HTTP_USER_AGENT'])) : ''; $data['_via_ip'] = isset($_SERVER['REMOTE_ADDR']) ? wc_clean(wp_unslash($_SERVER['REMOTE_ADDR'])) : ''; $data['_lg'] = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? wc_clean(wp_unslash($_SERVER['HTTP_ACCEPT_LANGUAGE'])) : ''; $data['_dr'] = isset($_SERVER['HTTP_REFERER']) ? wc_clean(wp_unslash($_SERVER['HTTP_REFERER'])) : ''; $uri = isset($_SERVER['REQUEST_URI']) ? wc_clean(wp_unslash($_SERVER['REQUEST_URI'])) : ''; $host = isset($_SERVER['HTTP_HOST']) ? wc_clean(wp_unslash($_SERVER['HTTP_HOST'])) : ''; $data['_dl'] = isset($_SERVER['REQUEST_SCHEME']) ? wc_clean(wp_unslash($_SERVER['REQUEST_SCHEME'])) . '://' . $host . $uri : ''; return $data; } public static function record_event($event_name, $properties = array()) { if (!WC_Site_Tracking::is_tracking_enabled()) { return false; } $user = wp_get_current_user(); if ($user instanceof WP_User && 'wptests_capabilities' === $user->cap_key) { return false; } $prefixed_event_name = self::PREFIX . $event_name; $data = array('_en' => $prefixed_event_name, '_ts' => WC_Tracks_Client::build_timestamp()); $server_details = self::get_server_details(); $identity = WC_Tracks_Client::get_identity($user->ID); $blog_details = self::get_blog_details($user->ID); $filtered_properties = apply_filters('woocommerce_tracks_event_properties', $properties, $prefixed_event_name); unset($filtered_properties['_ui']); unset($filtered_properties['_ut']); $event_obj = new WC_Tracks_Event(array_merge($data, $server_details, $identity, $blog_details, $filtered_properties)); if (is_wp_error($event_obj->error)) { return $event_obj->error; } return $event_obj->record(); } }