1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
|
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Policy;
use Piwik\Piwik;
use Piwik\Plugin\Manager;
use Piwik\Settings\FieldConfig;
use Piwik\Settings\Interfaces\ConfigSettingInterface;
use Piwik\Settings\Interfaces\MeasurableSettingInterface;
use Piwik\Settings\Interfaces\SystemSettingInterface;
use Piwik\Settings\Interfaces\Traits\Getters\ConfigGetterTrait;
use Piwik\Settings\Interfaces\Traits\Setters\MeasurableSetterTrait;
use Piwik\Settings\Interfaces\Traits\Setters\SystemSetterTrait;
/**
* @implements SystemSettingInterface<bool>
* @implements MeasurableSettingInterface<bool>
*/
abstract class CompliancePolicy implements SystemSettingInterface, MeasurableSettingInterface, ConfigSettingInterface
{
/**
* @use SystemSetterTrait<bool>
*/
use SystemSetterTrait;
/**
* @use MeasurableSetterTrait<bool>
*/
use MeasurableSetterTrait;
/**
* @use ConfigGetterTrait<bool>
*/
use ConfigGetterTrait;
abstract public static function getName(): string;
abstract public static function getTitle(): string;
abstract protected static function generateDescription(): string;
abstract protected static function generateWarnings(): string;
public static function getDescription(): string
{
$description = static::generateDescription();
/**
* This event is triggered while the description of a compliance policy is
* being generated. The policy description can be modified via this event.
*
* @param string &$description of the policy.
*/
Piwik::postEvent('CompliancePolicy.updatePolicyDescription', [&$description, static::class]);
$shouldShowWarnings = true;
/**
* This event is triggered while the description of a compliance policy is
* being generated, and controls whether any warnings specific to the policy
* are displayed at the end of the description.
*
* @param bool &$shouldShowWarnings set to false if the warnings should be hidden
*/
Piwik::postEvent('CompliancePolicy.shouldShowWarnings', [&$shouldShowWarnings, static::class]);
if ($shouldShowWarnings) {
$warnings = static::generateWarnings();
if (!empty($warnings)) {
$description .= '<br/>' . static::generateWarnings();
}
}
return $description;
}
/**
* @return array<array<string>> of [['title' => (string) 'TITLE', 'note' => (string) 'NOTE']]
*/
abstract public static function getUnknownSettings(): array;
/**
* @return array<string, string>
*/
public static function getDetails(): array
{
return [
'id' => static::getName(),
'title' => static::getTitle(),
'description' => static::getDescription(),
];
}
protected static function getPluginManagerInstance(): Manager
{
return Manager::getInstance();
}
protected static function getSystemDefaultValue()
{
return false;
}
protected static function getSystemName(): string
{
return preg_replace('/\s+/', '', static::getName()) . '_policy_enabled';
}
protected static function getSystemType(): string
{
return FieldConfig::TYPE_BOOL;
}
protected static function getMeasurableDefaultValue()
{
return false;
}
protected static function getMeasurableName(): string
{
return preg_replace('/\s+/', '', static::getName()) . '_policy_enabled';
}
protected static function getMeasurableType(): string
{
return FieldConfig::TYPE_BOOL;
}
protected static function getConfigSection(): string
{
return Piwik::getPluginNameOfMatomoClass(static::class);
}
protected static function getConfigSettingName(): string
{
return static::getSystemName();
}
/**
* If the policy is active at the instance level,
* disabling the policy for a site will also disable it
* for the instance.
*/
public static function setActiveStatus(?int $idSite, bool $isActive): void
{
if (isset($idSite)) {
static::setMeasurableValue($idSite, $isActive);
if (static::getSystemValue() && !$isActive) {
static::setSystemValue($isActive);
}
} else {
static::setSystemValue($isActive);
}
/**
* This event is triggered when the status of a compliance policy changes, and
* is to be used to perform extra actions when a policy is activated/deactivated.
*
* The status of a policy cannot be changed via this event.
*
* @param bool $isActive Whether the policy is being activated or deactivated
* @param int|null $idSite
* @param class-string<CompliancePolicy> The compliance policy in question
*/
Piwik::postEvent('CompliancePolicy.setActiveStatus', [$isActive, $idSite, static::class]);
}
/**
* If the policy is active at the instance level, then
* this function will return true for all sites.
*/
public static function isActive(?int $idSite): bool
{
$instanceLevel = static::getSystemValue();
if (!$instanceLevel && isset($idSite)) {
return static::getMeasurableValue($idSite);
}
return $instanceLevel;
}
public static function isConfigControlled()
{
return !is_null(static::getConfigValue());
}
}
|