| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- <?php
- /*******************************************************************************
- * Copyright (c) 2019, 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, $domainDepth, $cid1, $cid2 ) = preg_split( '[\.]', $_COOKIE["_ga"], 4 );
- $cookie = array( 'version' => $version, 'domainDepth' => $domainDepth, '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"
- mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
- // 16 bits for "time_mid"
- mt_rand( 0, 0xffff ),
- // 16 bits for "time_hi_and_version",
- // four most significant bits holds version number 4
- mt_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
- mt_rand( 0, 0x3fff ) | 0x8000,
- // 48 bits for "node"
- mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_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 ) {
- $getString = 'https://ssl.google-analytics.com/collect';
- $getString .= '?payload_data&';
- $getString .= http_build_query( $data );
- $result = wp_remote_get( $getString );
- return $result;
- }
- return false;
- }
- }
|