/** * Annotate the event with all relevant info. * @param mixed $event Object or (flat) array * @return mixed The transformed event array or WP_Error on failure. */ static function validate_and_sanitize($event) { $event = (object) $event; // Required if (!$event->_en) { return new WP_Error('invalid_event', 'A valid event must be specified via `_en`', 400); } // delete non-routable addresses otherwise geoip will discard the record entirely if (property_exists($event, '_via_ip') && preg_match('/^192\\.168|^10\\./', $event->_via_ip)) { unset($event->_via_ip); } $validated = array('browser_type' => Jetpack_Tracks_Client::BROWSER_TYPE, '_aua' => Jetpack_Tracks_Client::get_user_agent()); $_event = (object) array_merge((array) $event, $validated); // If you want to blacklist property names, do it here. // Make sure we have an event timestamp. if (!isset($_event->_ts)) { $_event->_ts = Jetpack_Tracks_Client::build_timestamp(); } return $_event; }
function jetpack_tracks_get_identity($user_id) { // Meta is set, and user is still connected. Use WPCOM ID $wpcom_id = get_user_meta($user_id, 'jetpack_tracks_wpcom_id', true); if ($wpcom_id && Jetpack::is_user_connected($user_id)) { return array('_ut' => 'wpcom:user_id', '_ui' => $wpcom_id); } // User is connected, but no meta is set yet. Use WPCOM ID and set meta. if (Jetpack::is_user_connected($user_id)) { $wpcom_user_data = Jetpack::get_connected_user_data($user_id); add_user_meta($user_id, 'jetpack_tracks_wpcom_id', $wpcom_user_data['ID'], true); return array('_ut' => 'wpcom:user_id', '_ui' => $wpcom_user_data['ID']); } // User isn't linked at all. Fall back to anonymous ID. $anon_id = get_user_meta($user_id, 'jetpack_tracks_anon_id', true); if (!$anon_id) { $anon_id = Jetpack_Tracks_Client::get_anon_id(); add_user_meta($user_id, 'jetpack_tracks_anon_id', $anon_id, false); } if (!isset($_COOKIE['tk_ai']) && !headers_sent()) { setcookie('tk_ai', $anon_id); } return array('_ut' => 'anon', '_ui' => $anon_id); }
function page_admin_scripts() { if ($this->is_redirecting) { return; // No need for scripts on a fallback page } $is_dev_mode = Jetpack::is_development_mode(); // Enqueue jp.js and localize it wp_enqueue_script('react-plugin', plugins_url('_inc/build/admin.js', JETPACK__PLUGIN_FILE), array(), JETPACK__VERSION, true); if (!$is_dev_mode) { // Required for Analytics wp_enqueue_script('jp-tracks', '//stats.wp.com/w.js', array(), gmdate('YW'), true); } $localeSlug = explode('_', get_locale()); $localeSlug = $localeSlug[0]; // Collecting roles that can view site stats $stats_roles = array(); $enabled_roles = function_exists('stats_get_option') ? stats_get_option('roles') : array('administrator'); foreach (get_editable_roles() as $slug => $role) { $stats_roles[$slug] = array('name' => translate_user_role($role['name']), 'canView' => is_array($enabled_roles) ? in_array($slug, $enabled_roles, true) : false); } $response = rest_do_request(new WP_REST_Request('GET', '/jetpack/v4/module/all')); $modules = $response->get_data(); // Preparing translated fields for JSON encoding by transforming all HTML entities to // respective characters. foreach ($modules as $slug => $data) { $modules[$slug]['name'] = html_entity_decode($data['name']); $modules[$slug]['description'] = html_entity_decode($data['description']); $modules[$slug]['short_description'] = html_entity_decode($data['short_description']); $modules[$slug]['long_description'] = html_entity_decode($data['long_description']); } // Add objects to be passed to the initial state of the app wp_localize_script('react-plugin', 'Initial_State', array('WP_API_root' => esc_url_raw(rest_url()), 'WP_API_nonce' => wp_create_nonce('wp_rest'), 'pluginBaseUrl' => plugins_url('', JETPACK__PLUGIN_FILE), 'connectionStatus' => array('isActive' => Jetpack::is_active(), 'isStaging' => Jetpack::is_staging_site(), 'devMode' => array('isActive' => $is_dev_mode, 'constant' => defined('JETPACK_DEV_DEBUG') && JETPACK_DEV_DEBUG, 'url' => site_url() && false === strpos(site_url(), '.'), 'filter' => apply_filters('jetpack_development_mode', false)), 'isPublic' => '1' == get_option('blog_public'), 'isInIdentityCrisis' => Jetpack::validate_sync_error_idc_option()), 'dismissedNotices' => $this->get_dismissed_jetpack_notices(), 'isDevVersion' => Jetpack::is_development_version(), 'currentVersion' => JETPACK__VERSION, 'happinessGravIds' => jetpack_get_happiness_gravatar_ids(), 'getModules' => $modules, 'showJumpstart' => jetpack_show_jumpstart(), 'rawUrl' => Jetpack::build_raw_urls(get_home_url()), 'adminUrl' => esc_url(admin_url()), 'stats' => array('data' => array('general' => false, 'day' => false, 'week' => false, 'month' => false), 'roles' => $stats_roles), 'settingNames' => array('jetpack_holiday_snow_enabled' => function_exists('jetpack_holiday_snow_option_name') ? jetpack_holiday_snow_option_name() : false), 'userData' => array('currentUser' => jetpack_current_user_data()), 'locale' => $this->get_i18n_data(), 'localeSlug' => $localeSlug, 'jetpackStateNotices' => array('messageCode' => Jetpack::state('message'), 'errorCode' => Jetpack::state('error'), 'errorDescription' => Jetpack::state('error_description')), 'tracksUserData' => Jetpack_Tracks_Client::get_connected_user_tracks_identity(), 'currentIp' => function_exists('jetpack_protect_get_ip') ? jetpack_protect_get_ip() : false)); }
/** * Enqueue scripts for the notice */ function enqueue_idc_notice_files() { wp_enqueue_script('jetpack-idc-js', plugins_url('_inc/idc-notice.js', JETPACK__PLUGIN_FILE), array('jquery'), JETPACK__VERSION, true); wp_localize_script('jetpack-idc-js', 'idcL10n', array('apiRoot' => esc_url_raw(rest_url()), 'nonce' => wp_create_nonce('wp_rest'), 'tracksUserData' => Jetpack_Tracks_Client::get_connected_user_tracks_identity(), 'currentUrl' => remove_query_arg('_wpnonce', remove_query_arg('jetpack_idc_clear_confirmation')), 'tracksEventData' => array('isAdmin' => current_user_can('jetpack_disconnect'), 'currentScreen' => self::$current_screen ? self::$current_screen->id : false))); if (!wp_style_is('jetpack-dops-style')) { wp_register_style('jetpack-dops-style', plugins_url('_inc/build/admin.dops-style.css', JETPACK__PLUGIN_FILE), array(), JETPACK__VERSION); } wp_enqueue_style('jetpack-idc-css', plugins_url('css/jetpack-idc.css', JETPACK__PLUGIN_FILE), array('jetpack-dops-style'), JETPACK__VERSION); // Required for Tracks wp_enqueue_script('jp-tracks', '//stats.wp.com/w.js', array(), gmdate('YW'), true); wp_enqueue_script('jp-tracks-functions', plugins_url('_inc/lib/tracks/tracks-callables.js', JETPACK__PLUGIN_FILE), array(), JETPACK__VERSION, false); }