106 lines
2.3 KiB
PHP
106 lines
2.3 KiB
PHP
<?php
|
|
/**
|
|
* Google Analytics helpers
|
|
*
|
|
* @package PopupMaker
|
|
* @copyright Copyright (c) 2024, Code Atlantic LLC
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Class PUM_GA
|
|
*
|
|
* @package Ahoy
|
|
*/
|
|
class PUM_GA {
|
|
|
|
/**
|
|
* Get PUM_GA uuid.
|
|
*
|
|
* @return mixed|string
|
|
*/
|
|
public static function get_uuid() {
|
|
static $uuid;
|
|
|
|
if ( ! isset( $uuid ) ) {
|
|
$cookie = self::parse_cookie();
|
|
|
|
if ( is_array( $cookie ) && ! empty( $cookie['cid'] ) ) {
|
|
$uuid = $cookie['cid'];
|
|
} else {
|
|
$uuid = self::generate_uuid();
|
|
}
|
|
}
|
|
|
|
return $uuid;
|
|
}
|
|
|
|
/**
|
|
* Handle the parsing of the _ga cookie or setting it to a unique identifier
|
|
*/
|
|
public static function parse_cookie() {
|
|
static $cookie = false;
|
|
|
|
if ( ! $cookie && isset( $_COOKIE['_ga'] ) ) {
|
|
list( $version, $domain_depth, $cid1, $cid2 ) = preg_split( '[\.]', sanitize_text_field( wp_unslash( $_COOKIE['_ga'] ) ), 4 );
|
|
$cookie = [
|
|
'version' => $version,
|
|
'domainDepth' => $domain_depth,
|
|
'cid' => $cid1 . '.' . $cid2,
|
|
];
|
|
}
|
|
|
|
return $cookie;
|
|
}
|
|
|
|
/**
|
|
* Generate UUID v4 function - needed to generate a CID when one isn't available
|
|
*/
|
|
public static function generate_uuid() {
|
|
return sprintf(
|
|
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x', // 32 bits for "time_low"
|
|
wp_rand( 0, 0xffff ),
|
|
wp_rand( 0, 0xffff ),
|
|
// 16 bits for "time_mid"
|
|
wp_rand( 0, 0xffff ),
|
|
// 16 bits for "time_hi_and_version",
|
|
// four most significant bits holds version number 4
|
|
wp_rand( 0, 0x0fff ) | 0x4000,
|
|
// 16 bits, 8 bits for "clk_seq_hi_res",
|
|
// 8 bits for "clk_seq_low",
|
|
// two most significant bits holds zero and one for variant DCE1.1
|
|
wp_rand( 0, 0x3fff ) | 0x8000,
|
|
// 48 bits for "node"
|
|
wp_rand( 0, 0xffff ),
|
|
wp_rand( 0, 0xffff ),
|
|
wp_rand( 0, 0xffff )
|
|
);
|
|
}
|
|
|
|
|
|
/**
|
|
* Fire a hit to the google analytis collection api.
|
|
*
|
|
* See https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide
|
|
*
|
|
* @param null $data
|
|
*
|
|
* @return array|bool|WP_Error
|
|
*/
|
|
public static function fire_hit( $data = null ) {
|
|
if ( $data ) {
|
|
$get_string = 'https://ssl.google-analytics.com/collect';
|
|
$get_string .= '?payload_data&';
|
|
$get_string .= http_build_query( $data );
|
|
$result = wp_remote_get( $get_string );
|
|
|
|
return $result;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|