114 lines
3.5 KiB
PHP
114 lines
3.5 KiB
PHP
<?php
|
|
/**
|
|
* @package Plumrocket_CookieConsentPro
|
|
* @copyright Copyright (c) 2025 Plumrocket Inc.
|
|
* @license https://plumrocket.com/license End-user License Agreement
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Plumrocket\CookieConsentPro\Model\Integration;
|
|
|
|
use Plumrocket\Base\Api\ConfigUtilsInterface;
|
|
use Plumrocket\CookieConsent\Helper\Config;
|
|
use Plumrocket\GlobalPrivacyControl\Helper\Config as GlobalPrivacyControlConfig;
|
|
use Plumrocket\CookieConsentPro\Model\Config\Source\CookieCategories;
|
|
use \Plumrocket\CookieConsentPro\Model\Config\Source\GlobalPrivacyControl\CookieConsentBehavior;
|
|
|
|
/**
|
|
* @since 1.0.1
|
|
*/
|
|
class GlobalPrivacyControl
|
|
{
|
|
public const XML_PATH_COOKIE_CONSENT_BEHAVIOR = 'pr_gpc/cookie_consent_management/behavior';
|
|
public const XML_PATH_COOKIE_CATEGORIES_TO_DECLINE = 'pr_gpc/cookie_consent_management/categories_to_decline';
|
|
|
|
/**
|
|
* @var \Plumrocket\CookieConsent\Helper\Config
|
|
*/
|
|
private $config;
|
|
|
|
/**
|
|
* @var \Plumrocket\CookieConsentPro\Model\Config\Source\CookieCategories
|
|
*/
|
|
private $cookieCategories;
|
|
|
|
/**
|
|
* @var \Plumrocket\GlobalPrivacyControl\Helper\Config
|
|
*/
|
|
private $globalPrivacyControlConfig;
|
|
|
|
/**
|
|
* @var \Plumrocket\Base\Api\ConfigUtilsInterface
|
|
*/
|
|
private $configUtils;
|
|
|
|
/**
|
|
* @param \Plumrocket\CookieConsent\Helper\Config $config
|
|
* @param \Plumrocket\CookieConsentPro\Model\Config\Source\CookieCategories $cookieCategories
|
|
* @param \Plumrocket\GlobalPrivacyControl\Helper\Config $globalPrivacyControlConfig
|
|
* @param \Plumrocket\Base\Api\ConfigUtilsInterface $configUtils
|
|
*/
|
|
public function __construct(
|
|
Config $config,
|
|
CookieCategories $cookieCategories,
|
|
GlobalPrivacyControlConfig $globalPrivacyControlConfig,
|
|
ConfigUtilsInterface $configUtils
|
|
) {
|
|
$this->config = $config;
|
|
$this->cookieCategories = $cookieCategories;
|
|
$this->globalPrivacyControlConfig = $globalPrivacyControlConfig;
|
|
$this->configUtils = $configUtils;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function isEnabled(): bool
|
|
{
|
|
if (! $this->config->isModuleEnabled()) {
|
|
return false;
|
|
}
|
|
|
|
if (! $this->globalPrivacyControlConfig->isModuleEnabled())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @param $store
|
|
* @return bool
|
|
*/
|
|
public function shouldDeclineAllCategories($store = null): bool
|
|
{
|
|
return CookieConsentBehavior::DECLINE_ALL_CATEGORIES === $this->configUtils->getStoreConfig(self::XML_PATH_COOKIE_CONSENT_BEHAVIOR, $store);
|
|
}
|
|
|
|
/**
|
|
* Get non-essential cookie categories to decline
|
|
*
|
|
* @param null $store
|
|
* @return array
|
|
*/
|
|
public function getCategoriesToDecline($store = null): array
|
|
{
|
|
$categoriesToDecline = $this->shouldDeclineAllCategories()
|
|
? array_keys($this->cookieCategories->toOptionHash())
|
|
: $this->configUtils->prepareMultiselectValue(
|
|
$this->configUtils->getStoreConfig(self::XML_PATH_COOKIE_CATEGORIES_TO_DECLINE, $store)
|
|
);
|
|
|
|
$essentialCategories = [];
|
|
foreach ($this->cookieCategories->toOptionArray() as $option) {
|
|
if ($option['isEssential']) {
|
|
$essentialCategories[] = $option['value'];
|
|
}
|
|
}
|
|
|
|
return array_diff($categoriesToDecline, $essentialCategories);
|
|
}
|
|
}
|