Skip to content

Commit 2f6d39d

Browse files
committed
Add new order ID randomization setting
1 parent 44d2c99 commit 2f6d39d

13 files changed

+151
-13
lines changed

β€Žplugins/PrivacyManager/Config.phpβ€Ž

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Piwik\Tracker\Cache;
2020
use Piwik\Plugins\PrivacyManager\Settings\IpAddressMaskLength as IpAddressMaskLengthSetting;
2121
use Piwik\Plugins\PrivacyManager\Settings\IPAnonymisation as IPAnonymisationSetting;
22+
use Piwik\Plugins\PrivacyManager\Settings\OrderIdAnonymization as OrderIdAnonymizationSetting;
2223

2324
/**
2425
* @property bool $doNotTrackEnabled Enable / Disable Do Not Track {@see DoNotTrackHeaderChecker}
@@ -138,6 +139,8 @@ private function getOptionValueWithPrivacyComplianceOverride(string $name, ?int
138139
return IPAnonymisationSetting::getInstance($idSite)->getValue();
139140
} elseif ($name === 'anonymizeReferrer') {
140141
return ReferrerAnonymizationSettings::getInstance($idSite)->getValue();
142+
} elseif ($name === 'anonymizeOrderId') {
143+
return OrderIdAnonymizationSetting::getInstance($idSite)->getValue();
141144
}
142145
}
143146

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
<?php
2+
3+
namespace Piwik\Plugins\PrivacyManager\Settings;
4+
5+
use Piwik\Piwik;
6+
use Piwik\Plugins\PrivacyManager\Config;
7+
use Piwik\Policy\CnilPolicy;
8+
use Piwik\Settings\Interfaces\CustomSettingInterface;
9+
use Piwik\Settings\Interfaces\PolicyComparisonInterface;
10+
use Piwik\Settings\Interfaces\SettingValueInterface;
11+
use Piwik\Settings\Interfaces\Traits\Getters\CustomGetterTrait;
12+
use Piwik\Settings\Interfaces\Traits\PolicyComparisonTrait;
13+
14+
/**
15+
* @implements CustomSettingInterface<bool>
16+
* @implements PolicyComparisonInterface<bool>
17+
* @implements SettingValueInterface<bool>
18+
*/
19+
class OrderIdAnonymization implements
20+
CustomSettingInterface,
21+
PolicyComparisonInterface,
22+
SettingValueInterface
23+
{
24+
/** @use PolicyComparisonTrait<bool> */
25+
use PolicyComparisonTrait;
26+
27+
/** @use CustomGetterTrait<bool> */
28+
use CustomGetterTrait;
29+
30+
/** @var bool */
31+
private $value;
32+
33+
private function __construct(bool $value)
34+
{
35+
$this->value = $value;
36+
}
37+
38+
public function getValue()
39+
{
40+
return $this->value;
41+
}
42+
43+
protected static function getCustomSettingName(): string
44+
{
45+
return 'anonymizeOrderId';
46+
}
47+
48+
public static function getCustomValue(?int $idSite = null)
49+
{
50+
return (new Config($idSite))->getFromOption(self::getCustomSettingName(), $allowPolicyComplianceOverride = false);
51+
}
52+
53+
public static function getTitle(): string
54+
{
55+
return Piwik::translate('PrivacyManager_OrderIdAnonymizationSettingTitle');
56+
}
57+
58+
public static function getComplianceRequirementNote(?int $idSite = null): string
59+
{
60+
return Piwik::translate('PrivacyManager_OrderIdAnonymizationSettingRequirementNote');
61+
}
62+
63+
public static function getInlineHelp(): string
64+
{
65+
return '';
66+
}
67+
68+
public static function getPolicyRequirements(): array
69+
{
70+
return [
71+
CnilPolicy::class => true,
72+
];
73+
}
74+
75+
public static function getInstance(?int $idSite = null): self
76+
{
77+
$values = self::getPolicyRequiredValues($idSite);
78+
$values['system'] = (bool) self::getCustomValue();
79+
$values['measurable'] = is_null($idSite) ? null : (bool) self::getCustomValue($idSite);
80+
81+
$strictest = (bool) self::getStrictestValueFromArray($values);
82+
return new self($strictest);
83+
}
84+
85+
public static function isCompliant(string $policy, ?int $idSite = null): bool
86+
{
87+
$policyValues = self::getPolicyRequirements();
88+
89+
if (!array_key_exists($policy, $policyValues)) {
90+
return true;
91+
}
92+
93+
$currentValue = self::getInstance($idSite)->getValue();
94+
95+
return $currentValue === $policyValues[$policy];
96+
}
97+
98+
protected static function compareStrictness($value1, $value2)
99+
{
100+
return ($value1 || $value2);
101+
}
102+
}

β€Žplugins/PrivacyManager/lang/en.jsonβ€Ž

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@
268268
"CampaignTrackingParametersDisabledSettingTitle": "Campaign tracking parameters disabled",
269269
"CampaignTrackingParametersDisabledSettingRequirementNote": "All campaign tracking parameters must be discarded.",
270270
"ReferrerAnonymizationSettingTitle": "Referrer anonymisation",
271-
"ReferrerAnonymizationSettingRequirementNote": "Only the referrer host or referrer type may be collected."
271+
"ReferrerAnonymizationSettingRequirementNote": "Only the referrer host or referrer type may be collected.",
272+
"OrderIdAnonymizationSettingTitle": "Order ID anonymization",
273+
"OrderIdAnonymizationSettingRequirementNote": "Order IDs must be anonymized"
272274
}
273275
}

β€Žplugins/PrivacyManager/tests/System/expected/test___PrivacyManager.getComplianceStatus.xmlβ€Ž

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@
3838
<value>non_compliant</value>
3939
<notes>Must be set to at least 2 byte(s), currently 0 byte(s).</notes>
4040
</row>
41+
<row>
42+
<name>Order ID anonymization</name>
43+
<value>non_compliant</value>
44+
<notes>Order IDs must be anonymized</notes>
45+
</row>
4146
<row>
4247
<name>Referrer anonymisation</name>
4348
<value>non_compliant</value>

β€Žplugins/PrivacyManager/tests/System/expected/test__compliancePolicyEnforcedSystem__PrivacyManager.getAnonymisationSettings.xmlβ€Ž

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<ipAnonymizerEnabled>1</ipAnonymizerEnabled>
77
<forceCookielessTracking>0</forceCookielessTracking>
88
<anonymizeUserId>0</anonymizeUserId>
9-
<anonymizeOrderId>0</anonymizeOrderId>
9+
<anonymizeOrderId>1</anonymizeOrderId>
1010
<anonymizeReferrer>exclude_path</anonymizeReferrer>
1111
<randomizeConfigId>0</randomizeConfigId>
1212
<useSiteSpecificSettings>0</useSiteSpecificSettings>
@@ -69,6 +69,14 @@
6969
</compliancePolicyControlled>
7070
<idSite />
7171
</ipAnonymizerEnabled>
72+
<anonymizeOrderId>
73+
<compliancePolicyControlled>
74+
<cnil_v1>
75+
<requiredValue>1</requiredValue>
76+
</cnil_v1>
77+
</compliancePolicyControlled>
78+
<idSite />
79+
</anonymizeOrderId>
7280
<anonymizeReferrer>
7381
<compliancePolicyControlled>
7482
<cnil_v1>

β€Žplugins/PrivacyManager/tests/System/expected/test__compliancePolicyEnforcedWebsite__PrivacyManager.getAnonymisationSettings.xmlβ€Ž

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<ipAnonymizerEnabled>1</ipAnonymizerEnabled>
77
<forceCookielessTracking>0</forceCookielessTracking>
88
<anonymizeUserId>0</anonymizeUserId>
9-
<anonymizeOrderId>0</anonymizeOrderId>
9+
<anonymizeOrderId>1</anonymizeOrderId>
1010
<anonymizeReferrer>exclude_path</anonymizeReferrer>
1111
<randomizeConfigId>0</randomizeConfigId>
1212
<useSiteSpecificSettings>0</useSiteSpecificSettings>
@@ -69,6 +69,14 @@
6969
</compliancePolicyControlled>
7070
<idSite>1</idSite>
7171
</ipAnonymizerEnabled>
72+
<anonymizeOrderId>
73+
<compliancePolicyControlled>
74+
<cnil_v1>
75+
<requiredValue>1</requiredValue>
76+
</cnil_v1>
77+
</compliancePolicyControlled>
78+
<idSite>1</idSite>
79+
</anonymizeOrderId>
7280
<anonymizeReferrer>
7381
<compliancePolicyControlled>
7482
<cnil_v1>

β€Žplugins/PrivacyManager/tests/System/expected/test_configControlledDisabled__PrivacyManager.getComplianceStatus.xmlβ€Ž

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@
3838
<value>non_compliant</value>
3939
<notes>Must be set to at least 2 byte(s), currently 0 byte(s).</notes>
4040
</row>
41+
<row>
42+
<name>Order ID anonymization</name>
43+
<value>non_compliant</value>
44+
<notes>Order IDs must be anonymized</notes>
45+
</row>
4146
<row>
4247
<name>Referrer anonymisation</name>
4348
<value>non_compliant</value>

β€Žplugins/PrivacyManager/tests/System/expected/test_configControlledEnabled__PrivacyManager.getComplianceStatus.xmlβ€Ž

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@
3838
<value>compliant</value>
3939
<notes>Must be set to at least 2 byte(s), currently 2 byte(s).</notes>
4040
</row>
41+
<row>
42+
<name>Order ID anonymization</name>
43+
<value>compliant</value>
44+
<notes>Order IDs must be anonymized</notes>
45+
</row>
4146
<row>
4247
<name>Referrer anonymisation</name>
4348
<value>compliant</value>
Lines changed: 2 additions & 2 deletions
Loading
Lines changed: 2 additions & 2 deletions
Loading

0 commit comments

Comments
Β (0)