| Server IP : 38.190.208.107 / Your IP : 216.73.217.46 Web Server : nginx/1.28.1 System : Linux ht2026040333114 6.1.0-10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.37-1 (2023-07-03) x86_64 User : root ( 0) PHP Version : 8.2.28 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv,eval,assert,passthru,system,exec,shell_exec,popen,proc_open MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /www/wwwroot/wp.3/wp-content/plugins/wp-statistics/includes/ |
Upload File : |
<?php
namespace WP_STATISTICS;
use Exception;
use WP_Statistics\Components\Singleton;
use WP_Statistics\Service\Analytics\VisitorProfile;
use WP_Statistics\Service\Integrations\IntegrationHelper;
use WP_Statistics\Traits\ErrorLoggerTrait;
class Hits extends Singleton
{
use ErrorLoggerTrait;
/**
* Rest-APi Hit Record Params Key
*
* @var string
*/
public static $rest_hits_key = 'wp_statistics_hit';
/**
* Rest-Api Hit Data
*
* @var object
*/
public $rest_hits;
/**
* WP_Statistics Hits Class.
*
* @throws Exception
*/
public function __construct()
{
// Sanitize Hit Data if Has Rest-Api Process
if (self::is_rest_hit()) {
// Get Hit Data
$this->rest_hits = (object)self::rest_params();
// Filter Data
add_filter('wp_statistics_current_page', array($this, 'set_current_page'));
add_filter('wp_statistics_page_uri', array($this, 'set_page_uri'));
add_filter('wp_statistics_user_id', array($this, 'set_current_user'));
}
// Record Login Page Hits
if (!Option::get('exclude_loginpage')) {
add_action('init', array($this, 'trackLoginPageCallback'));
}
// Server Side Tracking
add_action('wp', array($this, 'trackServerSideCallback'));
}
/**
* Set Current Page
*
* @param $current_page
* @return array
*/
public function set_current_page($current_page)
{
/**
* Filter to resolve page type and ID from URL for SPA tracking.
*
* @param string $pageUri The page URI (decoded)
*/
$pageUri = isset($this->rest_hits->page_uri) ? base64_decode($this->rest_hits->page_uri) : '';
$resolved = apply_filters('wp_statistics_resolve_page_from_uri', $pageUri);
if (is_array($resolved) && isset($resolved['type']) && $resolved['type'] !== 'unknown') {
return array(
'type' => esc_sql($resolved['type']),
'id' => esc_sql($resolved['id']),
'search_query' => isset($resolved['search_query']) ? $resolved['search_query'] : ''
);
}
// Default behavior - use client-provided values
if (isset($this->rest_hits->source_type) and isset($this->rest_hits->source_id)) {
return array(
'type' => esc_sql($this->rest_hits->source_type),
'id' => esc_sql($this->rest_hits->source_id),
'search_query' => isset($this->rest_hits->search_query) ? base64_decode($this->rest_hits->search_query) : ''
);
}
return $current_page;
}
/**
* Set Page Uri
*
* @param $page_uri
* @return string
*/
public function set_page_uri($page_uri)
{
return isset($this->rest_hits->page_uri) ? base64_decode($this->rest_hits->page_uri) : $page_uri;
}
/**
* Set User ID
*
* @param $userId
* @return mixed
*/
public function set_current_user($userId)
{
$userIdFromGlobalVar = isset($GLOBALS['wp_statistics_user_id']) ? $GLOBALS['wp_statistics_user_id'] : 0;
if (!$userId && $userIdFromGlobalVar) {
$userId = $userIdFromGlobalVar;
}
return $userId;
}
/**
* Check If Record Hits in Rest-Api Request
*
* @return bool
*/
public static function is_rest_hit()
{
return (Helper::is_rest_request() and isset($_REQUEST[self::$rest_hits_key]));
}
/**
* Get Params Value in Rest-APi Request Hit
*
* @param $params
* @return Mixed
*/
public static function rest_params($params = false)
{
$data = array();
if (Helper::is_rest_request() and isset($_REQUEST[Hits::$rest_hits_key])) {
foreach ($_REQUEST as $key => $value) {
$data[$key] = $value;
}
return ($params === false ? $data : (isset($data[$params]) ? $data[$params] : false));
}
return $data;
}
/**
* Record the visitor
*
* @throws Exception
*/
public static function record($visitorProfile = null)
{
if (!$visitorProfile) {
$visitorProfile = new VisitorProfile();
}
/**
* Check the exclusion
*/
$exclusion = Exclusion::check($visitorProfile);
/**
* Record exclusion if needed & then skip the tracking
*/
if ($exclusion['exclusion_match'] === true) {
Exclusion::record($exclusion);
self::errorListener();
throw new Exception($exclusion['exclusion_reason'], 200);
}
/**
* Record Pages
*/
$pageId = false;
if (Pages::active()) {
$pageId = Pages::record($visitorProfile);
}
/**
* Record Visitor Detail
*/
$visitorId = false;
if (Visitor::active()) {
$visitorId = Visitor::record($visitorProfile, ['page_id' => $pageId]);
}
/**
* Record Visitor Relationship
*/
if ($visitorId && $pageId) {
Visitor::save_visitors_relationships($pageId, $visitorId);
}
self::errorListener();
return $exclusion;
}
/**
* Record Hits in Login Page
*
* @throws Exception
*/
public static function trackLoginPageCallback()
{
if (Helper::is_login_page()) {
try {
self::record();
} catch (Exception $e) {
self::errorListener();
}
}
}
/**
* Server-Side Tracking Callback
*
* @throws Exception
*/
public static function trackServerSideCallback()
{
try {
if (is_favicon() || is_admin() || is_preview() || Option::get('use_cache_plugin') || Helper::dntEnabled()) {
return;
}
$isConsentGiven = IntegrationHelper::isConsentGiven();
$trackAnonymously = IntegrationHelper::shouldTrackAnonymously();
if ($isConsentGiven || $trackAnonymously) {
self::record();
}
} catch (Exception $e) {
self::errorListener();
}
}
}
Hits::instance();