OwlCyberSecurity - MANAGER
Edit File: IntegrationHelper.php
<?php namespace WP_Statistics\Service\Integrations; use WP_STATISTICS\Menus; use WP_STATISTICS\Option; use WP_Statistics\Service\Integrations\Plugins\WpConsentApi; use WP_Statistics\Service\Integrations\Plugins\RealCookieBanner; use WP_Statistics\Service\Integrations\Plugins\BorlabsCookie; use WP_Statistics\Service\Integrations\Plugins\AbstractIntegration; class IntegrationHelper { /** * List of integrations to register. * @var AbstractIntegration[] */ public static $integrations = [ WpConsentApi::class, RealCookieBanner::class, BorlabsCookie::class, ]; /** * Get an integration class by name. * * @param string $integration The name of the integration (e.g. "wp_consent_api"). * @return AbstractIntegration|false */ public static function getIntegration($integration) { foreach (self::$integrations as $class) { $class = new $class(); if ($class->getKey() === $integration) { return $class; } } return false; } /** * Return an array of all integrations. * * @return AbstractIntegration[] */ public static function getAllIntegrations() { $integrations = []; foreach (self::$integrations as $class) { $integration = new $class(); $integrations[] = $integration; } return $integrations; } /** * Returns the currently active integration class. * * @return AbstractIntegration|false False if no integration is selected. */ public static function getActiveIntegration() { $integration = Option::get('consent_integration'); $integration = self::getIntegration($integration); return !empty($integration) && $integration->isActive() ? $integration : false; } /** * Checks if certain integration is active * * @param string $integration * @return bool */ public static function isIntegrationActive($integration) { $activeIntegration = self::getActiveIntegration(); return !empty($activeIntegration) && ($activeIntegration->getKey() === $integration); } /** * Returns the currently selected integration status. * * @return array */ public static function getIntegrationStatus() { $status = [ 'name' => null, 'status' => [] ]; $integration = self::getActiveIntegration(); if (!empty($integration)) { $status['name'] = $integration->getKey(); $status['status'] = $integration->getStatus(); } return $status; } /** * Checks if consent is given for the currently active integration. * * If there's no active integration, it assumes consent is given. * * @return bool */ public static function isConsentGiven() { $integration = self::getActiveIntegration(); return empty($integration) || $integration->hasConsent(); } /** * Checks if the currently active integration requires anonymous tracking. * * If there's no active integration, it assumes it doesn't require anonymous tracking. * * @return bool */ public static function shouldTrackAnonymously() { $integration = self::getActiveIntegration(); return !empty($integration) && $integration->trackAnonymously(); } /** * Checks all integrations for active consent plugins and returns a list of notices. * * @return array */ public static function getDetectionNotice() { $notices = []; if (Option::get('consent_integration')) return $notices; foreach (self::getAllIntegrations() as $integration) { // If conditions to show notice is not met, continue if (!$integration->showNotice()) continue; $notices[] = [ 'key' => $integration->getKey(), 'title' => esc_html__('WP Statistics - Consent Plugin Detected', 'wp-statistics'), 'content' => sprintf( '%s <br> %s · %s', sprintf( __('We’ve detected <b>%s</b> on your site. To ensure WP Statistics respects visitor consent preferences, you can enable integration with this plugin.', 'wp-statistics'), $integration->getName() ), '<a href="' . esc_url(Menus::admin_url('settings', ['tab' => 'privacy-settings']) . '#consent_integration') . '">' . esc_html__('Activate integration ›', 'wp-statistics') . '</a>', '<a target="_blank" href="https://wp-statistics.com/resources/integrating-wp-statistics-with-consent-management-plugins/?utm_source=wp-statistics&utm_medium=link&utm_campaign=privacy">' . esc_html__('Learn More ›', 'wp-statistics') . '</a>' ) ]; } return $notices; } }