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
%s · %s', sprintf( __('We’ve detected %s on your site. To ensure WP Statistics respects visitor consent preferences, you can enable integration with this plugin.', 'wp-statistics'), $integration->getName() ), '' . esc_html__('Activate integration ›', 'wp-statistics') . '', '' . esc_html__('Learn More ›', 'wp-statistics') . '' ) ]; } return $notices; } }