HEX
Server: LiteSpeed
System: Linux cde4.duelhost.dk 4.18.0-553.34.1.lve.el8.x86_64 #1 SMP Thu Jan 9 16:30:32 UTC 2025 x86_64
User: dmhkjfau (1027)
PHP: 7.4.33
Disabled: exec,system,passthru,shell_exec,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/dmhkjfau/public_html/wp-content/plugins/wp-seopress/src/Actions/Front/GoogleAnalytics.php
<?php // phpcs:ignore

namespace SEOPress\Actions\Front;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

use SEOPress\Core\Hooks\ExecuteHooksFrontend;
use SEOPress\ManualHooks\Thirds\WooCommerce\WooCommerceAnalytics;

/**
 * Google Analytics
 */
class GoogleAnalytics implements ExecuteHooksFrontend {
	/**
	 * Registers hooks for Google Analytics.
	 *
	 * @since 4.4.0
	 * @return void
	 */
	public function hooks(): void {
		$ga_option_service   = seopress_get_service( 'GoogleAnalyticsOption' );
		$disable_option      = $ga_option_service->getDisable();
		$half_disable_option = $ga_option_service->getHalfDisable();

		// Check user consent or GA disable setting.
		if (
			'1' === $half_disable_option ||
			( $this->isUserConsentGiven() && '1' === $disable_option ) ||
			'1' !== $disable_option
		) {
			if ( ! $this->shouldExcludeCurrentUser( $ga_option_service ) ) {
				add_action( 'init', array( $this, 'analytics' ) );
			}
		}
	}

	/**
	 * Handles Google Analytics logic.
	 *
	 * @since 4.4.0
	 * @return void
	 */
	public function analytics(): void {
		$ga_option_service = seopress_get_service( 'GoogleAnalyticsOption' );

		// Ensure GA4 and GA option is enabled.
		if (
			$ga_option_service->getGA4() !== ''
			&& '1' === $ga_option_service->getEnableOption()
		) {
			if ( seopress_get_service( 'WooCommerceActivate' )->isActive() ) {
				( new WooCommerceAnalytics() )->hooks();
			}
		}
	}

	/**
	 * Checks if the current user should be excluded based on role.
	 *
	 * @since 4.4.0
	 * @param object $ga_option_service The Google Analytics option service.
	 * @return bool True if the user should be excluded, false otherwise.
	 */
	private function shouldExcludeCurrentUser( object $ga_option_service ): bool {
		if ( ! is_user_logged_in() ) {
			return false;
		}

		$user             = wp_get_current_user();
		$roles_to_exclude = $ga_option_service->getRoles();

		if ( ! empty( $roles_to_exclude ) && isset( $user->roles[0] ) ) {
			return array_key_exists( $user->roles[0], $roles_to_exclude );
		}

		return false;
	}

	/**
	 * Checks if user consent has been given.
	 *
	 * @since 4.4.0
	 * @return bool True if consent is given, false otherwise.
	 */
	private function isUserConsentGiven(): bool {
		return isset( $_COOKIE['seopress-user-consent-accept'] ) && '1' === $_COOKIE['seopress-user-consent-accept'];
	}
}