Files
WEBtomaste/Atomaste Reference/public_html/wp-content/plugins/burst-statistics/goals/class-goals-tracker.php

102 lines
2.6 KiB
PHP

<?php
defined( 'ABSPATH' ) or die();
if ( ! class_exists( "burst_goals_tracker" ) ) {
class burst_goals_tracker {
public function __construct() {
add_action( 'init', array( $this, 'add_dynamic_hooks' ) );
}
public function add_dynamic_hooks(): void {
$goals = burst_get_active_goals( true );
require_once burst_path . 'goals/class-goal.php';
foreach ( $goals as $goal ) {
$goal = new burst_goal( $goal['ID'] );
if ( $goal->type !== 'hook' ) {
continue;
}
$hook = $goal->hook;
if ( $hook ) {
add_action( $hook, function() use ( $hook ) {
$this->handle_hook( $hook );
} );
}
}
}
/**
* Get the goal by hook name
*
* @param string $find_hook_name
*
* @return burst_goal|bool
*/
public function get_goal_by_hook_name( string $find_hook_name ) {
$goals = burst_get_active_goals( true );
require_once burst_path . 'goals/class-goal.php';
foreach ( $goals as $goal ) {
$goal = new burst_goal( $goal['ID'] );
if ( $goal->type !== 'hook' ) {
continue;
}
$hook = $goal->hook;
if ( $hook === $find_hook_name ) {
return $goal;
}
}
return false;
}
/**
* Process the execution of a hook as goal achieved
*
* @param string $hook_name
*
* @return void
*/
public function handle_hook( string $hook_name ): void {
// get cookie burst_uid
$burst_uid = isset( $_COOKIE['burst_uid'] ) ? burst_sanitize_uid( $_COOKIE['burst_uid'] ) : false;
// we assume there has at least been one interaction clientside, so there should be a uid.
if ( $burst_uid ) {
$statistic = burst_get_last_user_statistic( $burst_uid, false );
$statistic_id = $statistic['ID'] ?? false;
if ( ! $statistic_id ) {
return;
}
$page_url = $statistic['page_url'] ?? '';
$parameters = $statistic['parameters'] ?? '';
$page_url .= $parameters;
//get the goal by $hook_name.
$goal = $this->get_goal_by_hook_name( $hook_name );
if ( ! $goal ) {
return;
}
//if the goal should be tracked on a specific page only, check if the current page is the page to track.
if ( $goal->page_or_website === 'page' ) {
//this is a relative url
$tracking_page = $goal->specific_page;
if ( !empty( $page_url ) && strpos( $page_url, $tracking_page ) === false ) {
return;
}
}
$goal_arr = array(
'goal_id' => $goal->id,
'statistic_id' => $statistic_id,
);
burst_create_goal_statistic( $goal_arr );
} else {
burst_error_log( 'No burst_uid found in handle_hook' );
}
}
}
}