block_user_role()) { return; } // Don't track post or page previews if (\is_preview()) { return; } $payload = []; $current_resource = \IAWP\Resource_Identifier::for_resource_being_viewed(); if (\is_null($current_resource)) { return; } $payload['resource'] = $current_resource->type(); if ($current_resource->has_meta()) { $payload[$current_resource->meta_key()] = $current_resource->meta_value(); } $payload['page'] = \max(1, \get_query_var('paged')); $data = ['payload' => $payload]; $data['signature'] = \md5(Salt::request_payload_salt() . \json_encode($data['payload'])); $track_view_url = \get_rest_url(null, '/iawp/search'); $track_click_url = \IAWPSCOPED\iawp_url_to('/iawp-click-endpoint.php'); $link_rules = Link_Rule_Finder::link_rules()->filter(function (Link_Rule $link_rule) { return $link_rule->is_active(); })->map(function (Link_Rule $link_rule) { return ['type' => $link_rule->type(), 'value' => $link_rule->value()]; })->values(); $link_rules_json = \json_encode($link_rules); ?> 'POST', 'callback' => [$this, 'track_view'], 'permission_callback' => function () { return \true; }]); } public function track_view($request) { if (Device::getInstance()->is_bot() && !\defined('IAWP_TESTING')) { return; } \IAWP\Migrations\Migrations::handle_migration_18_error(); \IAWP\Migrations\Migrations::handle_migration_22_error(); \IAWP\Migrations\Migrations::handle_migration_29_error(); \IAWP\Migrations\Migrations::create_or_migrate(); if (\IAWP\Migrations\Migrations::is_migrating()) { return; } if (Request::is_ip_address_blocked()) { return; } $visitor = Visitor::fetch_current_visitor(); $signature = \md5(Salt::request_payload_salt() . \json_encode($request['payload'])); $campaign = []; if (\IAWPSCOPED\iawp_is_pro()) { $campaign = ['utm_source' => $this->decode_or_nullify($request['utm_source']), 'utm_medium' => $this->decode_or_nullify($request['utm_medium']), 'utm_campaign' => $this->decode_or_nullify($request['utm_campaign']), 'utm_term' => $this->decode_or_nullify($request['utm_term']), 'utm_content' => $this->decode_or_nullify($request['utm_content'])]; } if ($signature == $request['signature']) { new \IAWP\View($request['payload'], $this->calculate_referrer_url($request), $visitor, $campaign); return new \WP_REST_Response(['success' => \true], 200, ['X-IAWP' => 'iawp']); } else { return new \WP_REST_Response(['success' => \false], 200, ['X-IAWP' => 'iawp']); } } private function calculate_referrer_url($request) : ?string { $referrer_url = $request['referrer_url']; $url = new URL($referrer_url ?? ''); if (\is_string($this->decode_or_nullify($request['gclid'])) && $url->get_domain() !== 'googleads.g.doubleclick.net') { $referrer_url = 'https://googleads.iawp'; } if (\is_string($this->decode_or_nullify($request['fbclid'])) && ($url->get_domain() === 'facebook.com' || Str::endsWith($url->get_domain(), '.facebook.com'))) { $referrer_url = 'https://facebookads.iawp'; } if (\is_null($referrer_url)) { return null; } return $referrer_url; } private function decode_or_nullify($string) : ?string { if (!isset($string)) { return null; } $safe_string = \trim(\urldecode($string)); $safe_string = \str_replace('+', ' ', $safe_string); $safe_string = Security::string($safe_string); if (\strlen($safe_string) === 0) { return null; } return $safe_string; } private function block_user_role() : bool { $blocked_roles = \IAWPSCOPED\iawp()->get_option('iawp_blocked_roles', ['administrator']); foreach (\wp_get_current_user()->roles as $visitor_role) { if (\in_array($visitor_role, $blocked_roles)) { return \true; } } return \false; } }