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;
}
}