Version Description
- Update translation pot file
- Add partial Greek translations (Thanks @webace-creative-studio)
Download this release
Release Info
Developer | indrek_k |
Plugin | The GDPR Framework By Data443 |
Version | 1.0.7 |
Comparing to | |
See all releases |
Code changes from version 1.0.6 to 1.0.7
- assets/conditional-show.js +102 -102
- assets/data-protection-authorities.php +178 -183
- assets/gdpr-admin.css +362 -362
- assets/gdpr-admin.js +102 -102
- assets/gdpr-installer.css +550 -550
- assets/gdpr-installer.js +58 -58
- assets/gdpr-rhino.svg +42 -42
- assets/privacy-tools.css +30 -30
- bootstrap.php +53 -53
- gdpr-framework.php +94 -94
- languages/gdpr-framework-bg_BG.po +1334 -1334
- languages/gdpr-framework-de_DE.po +1333 -1333
- languages/gdpr-framework-el.mo +0 -0
- languages/gdpr-framework-el.po +1351 -0
- languages/gdpr-framework-et.mo +0 -0
- languages/gdpr-framework-et.po +85 -31
- languages/gdpr-framework-nl_NL.mo +0 -0
- languages/gdpr-framework-nl_NL.po +1346 -0
- languages/gdpr-framework.pot +1328 -1284
- license.txt +198 -198
- readme.txt +134 -129
- src/Admin/AdminError.php +16 -16
- src/Admin/AdminHelper.php +84 -84
- src/Admin/AdminNotice.php +41 -41
- src/Admin/AdminTab.php +157 -157
- src/Admin/AdminTabGeneral.php +277 -277
- src/Admin/Modal.php +41 -41
- src/Admin/WordpressAdmin.php +156 -156
- src/Admin/WordpressAdminPage.php +147 -147
- src/Components/Consent/AdminTabConsent.php +181 -181
- src/Components/Consent/ConsentManager.php +317 -317
- src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php +436 -436
- src/Components/PrivacyPolicy/PolicyGenerator.php +44 -44
- src/Components/PrivacyPolicy/PrivacyPolicy.php +92 -92
- src/Components/PrivacyToolsPage/PrivacyToolsPage.php +14 -14
- src/Components/PrivacyToolsPage/PrivacyToolsPageController.php +278 -278
- src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php +45 -45
- src/Components/Support/AdminTabSupport.php +34 -34
- src/Components/Support/Support.php +18 -18
- src/Components/WordpressComments/WordpressComments.php +194 -194
- src/Components/WordpressUser/Controllers/DashboardDataPageController.php +197 -197
- src/Components/WordpressUser/Controllers/DashboardProfilePageController.php +123 -123
- src/Components/WordpressUser/DataManager.php +151 -151
- src/Components/WordpressUser/RegistrationForm.php +50 -50
- src/Components/WordpressUser/WordpressUser.php +111 -111
- src/DataSubject/AdminTabDataSubject.php +128 -128
- src/DataSubject/DataExporter.php +138 -138
- src/DataSubject/DataRepository.php +191 -191
- src/DataSubject/DataSubjectAdmin.php +17 -17
- src/DataSubject/DataSubjectAuthenticator.php +130 -130
- src/DataSubject/DataSubjectIdentificator.php +184 -184
- src/Helpers.php +170 -170
- src/Installer/Installer.php +305 -305
- src/Installer/InstallerStep.php +200 -200
- src/Installer/Steps/ConfigurationPages.php +61 -61
- src/Installer/Steps/ConfigurationSettings.php +71 -71
- src/Installer/Steps/Consent.php +31 -31
- src/Installer/Steps/Integrations.php +49 -49
- src/Installer/Steps/PolicyContents.php +31 -31
- src/Installer/Steps/PolicySettings.php +215 -215
- src/Modules/ContactForm7/ContactForm7.php +108 -108
- src/Modules/WPML/WPML.php +153 -153
- src/Router.php +166 -166
- src/Setup.php +94 -94
- src/SetupAdmin.php +62 -62
- src/View.php +64 -64
- vendor/autoload.php +1 -1
- vendor/composer/autoload_real.php +7 -7
- vendor/composer/autoload_static.php +3 -3
- views/admin/consent.php +105 -105
- views/admin/data-subjects/search-form.php +18 -18
- views/admin/data-subjects/search-results.php +59 -59
- views/admin/general/delete-action-email.php +7 -7
- views/admin/general/delete-action-reassign.php +11 -11
- views/admin/general/delete-action.php +2 -2
- views/admin/general/description-data-page.php +3 -3
- views/admin/general/description-delete-action.php +3 -3
- views/admin/general/description-export-action.php +3 -3
- views/admin/general/description-terms-page.php +3 -3
- views/admin/general/enable.php +13 -13
- views/admin/general/export-action-email.php +7 -7
- views/admin/general/stylesheet.php +10 -10
- views/admin/general/theme-compatibility.php +10 -10
- views/admin/modals/footer.php +6 -6
- views/admin/modals/header.php +5 -5
- views/admin/modals/test.php +8 -8
- views/admin/notices/disclaimer.php +16 -16
- views/admin/notices/error.php +3 -3
- views/admin/notices/header.php +4 -4
- views/admin/notices/help.php +3 -3
- views/admin/notices/helper-autoinstall.php +10 -10
- views/admin/notices/helper-policy.php +9 -9
- views/admin/notices/helper-settings.php +8 -8
- views/admin/notices/helper-tools.php +10 -10
- views/admin/privacy-policy/description-policy-page.php +3 -3
- views/admin/privacy-policy/dpa.php +2 -2
- views/admin/privacy-policy/generated.php +21 -21
- views/admin/privacy-policy/header.php +3 -3
- views/admin/settings-page.php +48 -46
- views/admin/support/contents.php +62 -62
- views/admin/wizard-buttons.php +5 -5
- views/email/action-export.php +9 -9
- views/email/action-forget.php +13 -13
- views/email/identify-data-subject.php +11 -11
- views/email/no-data.php +6 -6
- views/email/request-export.php +14 -14
- views/email/request-forget.php +14 -14
- views/global/country-options.php +23 -23
- views/global/delete-action.php +20 -20
- views/global/export-action.php +14 -14
- views/global/html-data.php +38 -38
- views/installer/continue-notice.php +10 -10
- views/installer/footer.php +41 -41
- views/installer/header.php +64 -64
- views/installer/steps/configuration-pages.php +44 -44
- views/installer/steps/configuration-settings.php +87 -87
- views/installer/steps/consent.php +88 -88
- views/installer/steps/disclaimer.php +21 -21
- views/installer/steps/finish.php +69 -69
- views/installer/steps/integrations.php +60 -60
- views/installer/steps/policy-contents.php +25 -25
- views/installer/steps/policy-settings.php +185 -185
- views/installer/steps/welcome.php +18 -18
- views/installer/welcome-notice.php +17 -17
- views/modules/contact-form-7/content-privacy.php +5 -5
- views/modules/contact-form-7/generator-privacy.php +17 -17
- views/modules/wordpress-comments/terms-checkbox.php +20 -20
- views/modules/wordpress-user/dashboard/data-page/form-consent.php +39 -39
- views/modules/wordpress-user/dashboard/data-page/form-delete.php +30 -30
- views/modules/wordpress-user/dashboard/data-page/header.php +3 -3
- views/modules/wordpress-user/dashboard/form-export.php +24 -24
- views/modules/wordpress-user/dashboard/profile-page/form-delete.php +29 -29
- views/modules/wordpress-user/dashboard/profile-page/header.php +8 -8
- views/modules/wordpress-user/dashboard/profile-page/table-consent.php +18 -18
- views/modules/wordpress-user/registration-terms-checkbox.php +21 -21
- views/policy/policy.php +151 -283
assets/conditional-show.js
CHANGED
@@ -1,102 +1,102 @@
|
|
1 |
-
jQuery(function ($) {
|
2 |
-
|
3 |
-
var trigger = function () {
|
4 |
-
$('.js-gdpr-conditional').each(function () {
|
5 |
-
conditionalShow($(this));
|
6 |
-
});
|
7 |
-
};
|
8 |
-
|
9 |
-
var conditionalShow = function ($el) {
|
10 |
-
var type = $el.prop('tagName');
|
11 |
-
if ('SELECT' === type) {
|
12 |
-
conditionalShowSelect($el);
|
13 |
-
} else if ('INPUT' === type) {
|
14 |
-
if ('checkbox' === $el.attr('type')) {
|
15 |
-
conditionalShowCheckbox($el);
|
16 |
-
} else if ('radio' === $el.attr('type')) {
|
17 |
-
conditionalShowRadio($el);
|
18 |
-
} else {
|
19 |
-
console.log('Unknown element type: ' + type);
|
20 |
-
}
|
21 |
-
} else {
|
22 |
-
console.log('Unknown element type: ' + type);
|
23 |
-
}
|
24 |
-
};
|
25 |
-
|
26 |
-
var conditionalShowSelect = function ($el) {
|
27 |
-
$targets = [];
|
28 |
-
$el.find('option').each(function () {
|
29 |
-
if ($(this).data('show')) {
|
30 |
-
$targets.push($(this).data('show'));
|
31 |
-
}
|
32 |
-
});
|
33 |
-
|
34 |
-
$.each($targets, function (i, e) {
|
35 |
-
$(e).hide();
|
36 |
-
});
|
37 |
-
|
38 |
-
if ($el.is(':visible')) {
|
39 |
-
$el.find('option:selected').each(function () {
|
40 |
-
if ($(this).data('show')) {
|
41 |
-
$($(this).data('show')).show();
|
42 |
-
}
|
43 |
-
});
|
44 |
-
}
|
45 |
-
}
|
46 |
-
|
47 |
-
var conditionalShowCheckbox = function ($el) {
|
48 |
-
if ($el.is(':checked') && $el.is(':visible')) {
|
49 |
-
if ($el.data('show')) {
|
50 |
-
if (isChange) {
|
51 |
-
$($el.data('show')).addClass('slidePadding').slideDown();
|
52 |
-
} else {
|
53 |
-
$($el.data('show')).show();
|
54 |
-
}
|
55 |
-
}
|
56 |
-
} else {
|
57 |
-
if ($el.data('show')) {
|
58 |
-
if (isChange) {
|
59 |
-
$($el.data('show')).addClass('slidePadding').slideUp();
|
60 |
-
} else {
|
61 |
-
$($el.data('show')).hide();
|
62 |
-
}
|
63 |
-
}
|
64 |
-
}
|
65 |
-
};
|
66 |
-
|
67 |
-
var conditionalShowRadio = function ($el) {
|
68 |
-
$el.closest('fieldset').find('input[type=radio]').each(function (i, el) {
|
69 |
-
if ($(el).is(':checked') && $el.is(':visible')) {
|
70 |
-
if ($(el).data('show')) {
|
71 |
-
if (isChange) {
|
72 |
-
$($(el).data('show')).addClass('slidePadding').slideDown();
|
73 |
-
} else {
|
74 |
-
$($(el).data('show')).show();
|
75 |
-
}
|
76 |
-
}
|
77 |
-
} else {
|
78 |
-
if ($(el).data('show')) {
|
79 |
-
if (isChange) {
|
80 |
-
$($(el).data('show')).addClass('slidePadding').slideUp();
|
81 |
-
} else {
|
82 |
-
$($(el).data('show')).hide();
|
83 |
-
}
|
84 |
-
}
|
85 |
-
}
|
86 |
-
});
|
87 |
-
};
|
88 |
-
|
89 |
-
var isChange = false;
|
90 |
-
|
91 |
-
$('.js-gdpr-conditional').each(function () {
|
92 |
-
$(this).on('change', function () {
|
93 |
-
isChange = true;
|
94 |
-
conditionalShow($(this));
|
95 |
-
|
96 |
-
// Hacky solution for 2nd layer of nested items
|
97 |
-
trigger();
|
98 |
-
});
|
99 |
-
conditionalShow($(this));
|
100 |
-
});
|
101 |
-
|
102 |
-
});
|
1 |
+
jQuery(function ($) {
|
2 |
+
|
3 |
+
var trigger = function () {
|
4 |
+
$('.js-gdpr-conditional').each(function () {
|
5 |
+
conditionalShow($(this));
|
6 |
+
});
|
7 |
+
};
|
8 |
+
|
9 |
+
var conditionalShow = function ($el) {
|
10 |
+
var type = $el.prop('tagName');
|
11 |
+
if ('SELECT' === type) {
|
12 |
+
conditionalShowSelect($el);
|
13 |
+
} else if ('INPUT' === type) {
|
14 |
+
if ('checkbox' === $el.attr('type')) {
|
15 |
+
conditionalShowCheckbox($el);
|
16 |
+
} else if ('radio' === $el.attr('type')) {
|
17 |
+
conditionalShowRadio($el);
|
18 |
+
} else {
|
19 |
+
console.log('Unknown element type: ' + type);
|
20 |
+
}
|
21 |
+
} else {
|
22 |
+
console.log('Unknown element type: ' + type);
|
23 |
+
}
|
24 |
+
};
|
25 |
+
|
26 |
+
var conditionalShowSelect = function ($el) {
|
27 |
+
$targets = [];
|
28 |
+
$el.find('option').each(function () {
|
29 |
+
if ($(this).data('show')) {
|
30 |
+
$targets.push($(this).data('show'));
|
31 |
+
}
|
32 |
+
});
|
33 |
+
|
34 |
+
$.each($targets, function (i, e) {
|
35 |
+
$(e).hide();
|
36 |
+
});
|
37 |
+
|
38 |
+
if ($el.is(':visible')) {
|
39 |
+
$el.find('option:selected').each(function () {
|
40 |
+
if ($(this).data('show')) {
|
41 |
+
$($(this).data('show')).show();
|
42 |
+
}
|
43 |
+
});
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
var conditionalShowCheckbox = function ($el) {
|
48 |
+
if ($el.is(':checked') && $el.is(':visible')) {
|
49 |
+
if ($el.data('show')) {
|
50 |
+
if (isChange) {
|
51 |
+
$($el.data('show')).addClass('slidePadding').slideDown();
|
52 |
+
} else {
|
53 |
+
$($el.data('show')).show();
|
54 |
+
}
|
55 |
+
}
|
56 |
+
} else {
|
57 |
+
if ($el.data('show')) {
|
58 |
+
if (isChange) {
|
59 |
+
$($el.data('show')).addClass('slidePadding').slideUp();
|
60 |
+
} else {
|
61 |
+
$($el.data('show')).hide();
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
65 |
+
};
|
66 |
+
|
67 |
+
var conditionalShowRadio = function ($el) {
|
68 |
+
$el.closest('fieldset').find('input[type=radio]').each(function (i, el) {
|
69 |
+
if ($(el).is(':checked') && $el.is(':visible')) {
|
70 |
+
if ($(el).data('show')) {
|
71 |
+
if (isChange) {
|
72 |
+
$($(el).data('show')).addClass('slidePadding').slideDown();
|
73 |
+
} else {
|
74 |
+
$($(el).data('show')).show();
|
75 |
+
}
|
76 |
+
}
|
77 |
+
} else {
|
78 |
+
if ($(el).data('show')) {
|
79 |
+
if (isChange) {
|
80 |
+
$($(el).data('show')).addClass('slidePadding').slideUp();
|
81 |
+
} else {
|
82 |
+
$($(el).data('show')).hide();
|
83 |
+
}
|
84 |
+
}
|
85 |
+
}
|
86 |
+
});
|
87 |
+
};
|
88 |
+
|
89 |
+
var isChange = false;
|
90 |
+
|
91 |
+
$('.js-gdpr-conditional').each(function () {
|
92 |
+
$(this).on('change', function () {
|
93 |
+
isChange = true;
|
94 |
+
conditionalShow($(this));
|
95 |
+
|
96 |
+
// Hacky solution for 2nd layer of nested items
|
97 |
+
trigger();
|
98 |
+
});
|
99 |
+
conditionalShow($(this));
|
100 |
+
});
|
101 |
+
|
102 |
+
});
|
assets/data-protection-authorities.php
CHANGED
@@ -1,183 +1,178 @@
|
|
1 |
-
<?php return [
|
2 |
-
'AT' => [
|
3 |
-
'phone' => '+43 1 531 15 202525',
|
4 |
-
'email' => 'dsb@dsb.gv.at',
|
5 |
-
'website' => 'http://www.dsb.gv.at/',
|
6 |
-
],
|
7 |
-
'BE' => [
|
8 |
-
'phone' => '+32 2 274 48 00',
|
9 |
-
'email' => 'commission@privacycommission.be',
|
10 |
-
'website' => 'http://www.privacycommission.be/',
|
11 |
-
],
|
12 |
-
'BG' => [
|
13 |
-
'phone' => '+359 2 915 3580',
|
14 |
-
'email' => 'kzld@cpdp.bg',
|
15 |
-
'website' => 'http://www.cpdp.bg/',
|
16 |
-
],
|
17 |
-
'HR' => [
|
18 |
-
'phone' => '+385 1 4609 000',
|
19 |
-
'email' => 'info@azop.hr',
|
20 |
-
'website' => 'http://www.azop.hr/',
|
21 |
-
],
|
22 |
-
'CY' => [
|
23 |
-
'phone' => '+357 22 818 456',
|
24 |
-
'email' => 'commissioner@dataprotection.gov.cy',
|
25 |
-
'website' => 'http://www.dataprotection.gov.cy/',
|
26 |
-
],
|
27 |
-
'CZ' => [
|
28 |
-
'phone' => '+420 234 665 111',
|
29 |
-
'email' => 'posta@uoou.cz',
|
30 |
-
'website' => 'http://www.uoou.cz/',
|
31 |
-
],
|
32 |
-
'DK' => [
|
33 |
-
'phone' => '+45 33 1932 00',
|
34 |
-
'email' => 'dt@datatilsynet.dk',
|
35 |
-
'website' => 'http://www.datatilsynet.dk/',
|
36 |
-
],
|
37 |
-
'EE' => [
|
38 |
-
'phone' => '+372 6274 135',
|
39 |
-
'email' => 'info@aki.ee',
|
40 |
-
'website' => 'http://www.aki.ee/en',
|
41 |
-
],
|
42 |
-
'FI' => [
|
43 |
-
'phone' => '+358 10 3666 700',
|
44 |
-
'email' => 'tietosuoja@om.fi',
|
45 |
-
'website' => 'http://www.tietosuoja.fi/en/',
|
46 |
-
],
|
47 |
-
'FR' => [
|
48 |
-
'phone' => ' +33 1 53 73 22 22',
|
49 |
-
'email' => '',
|
50 |
-
'website' => 'http://www.cnil.fr/',
|
51 |
-
],
|
52 |
-
'DE' => [
|
53 |
-
'phone' => '+49 228 997799 0',
|
54 |
-
'email' => 'poststelle@bfdi.bund.de',
|
55 |
-
'website' => 'http://www.bfdi.bund.de/',
|
56 |
-
],
|
57 |
-
'GR' => [
|
58 |
-
'phone' => '+30 210 6475 600',
|
59 |
-
'email' => 'contact@dpa.gr',
|
60 |
-
'website' => 'http://www.dpa.gr/',
|
61 |
-
],
|
62 |
-
'HU' => [
|
63 |
-
'phone' => '+36 1 3911 400',
|
64 |
-
'email' => 'peterfalvi.attila@naih.hu',
|
65 |
-
'website' => 'http://www.naih.hu/',
|
66 |
-
],
|
67 |
-
'IE' => [
|
68 |
-
'phone' => '+353 57 868 4800',
|
69 |
-
'email' => 'info@dataprotection.ie',
|
70 |
-
'website' => 'https://www.dataprotection.ie/',
|
71 |
-
],
|
72 |
-
'IT' => [
|
73 |
-
'phone' => '+39 06 69677 1',
|
74 |
-
'email' => 'garante@garanteprivacy.it',
|
75 |
-
'website' => 'http://www.garanteprivacy.it/',
|
76 |
-
],
|
77 |
-
'LV' => [
|
78 |
-
'phone' => '+371 6722 3131',
|
79 |
-
'email' => 'info@dvi.gov.lv',
|
80 |
-
'website' => 'http://www.dvi.gov.lv/',
|
81 |
-
],
|
82 |
-
'LT' => [
|
83 |
-
'phone' => '+370 5 279 14 45 ',
|
84 |
-
'email' => 'ada@ada.lt',
|
85 |
-
'website' => 'http://www.ada.lt/',
|
86 |
-
],
|
87 |
-
'LU' => [
|
88 |
-
'phone' => '+352 2610 60 1',
|
89 |
-
'email' => 'info@cnpd.lu',
|
90 |
-
'website' => 'http://www.cnpd.lu/',
|
91 |
-
],
|
92 |
-
'MT' => [
|
93 |
-
'phone' => '+356 2328 7100',
|
94 |
-
'email' => 'commissioner.dataprotection@gov.mt',
|
95 |
-
'website' => 'http://www.dataprotection.gov.mt/',
|
96 |
-
],
|
97 |
-
'NL' => [
|
98 |
-
'phone' => '+31 70 888 8500',
|
99 |
-
'email' => 'info@autoriteitpersoonsgegevens.nl',
|
100 |
-
'website' => 'https://autoriteitpersoonsgegevens.nl/nl',
|
101 |
-
],
|
102 |
-
'PL' => [
|
103 |
-
'phone' => '+48 22 53 10 440',
|
104 |
-
'email' => 'kancelaria@giodo.gov.pl',
|
105 |
-
'website' => 'http://www.giodo.gov.pl/',
|
106 |
-
],
|
107 |
-
'PT' => [
|
108 |
-
'phone' => '+351 21 392 84 00',
|
109 |
-
'email' => 'geral@cnpd.pt',
|
110 |
-
'website' => 'http://www.cnpd.pt/',
|
111 |
-
],
|
112 |
-
'RO' => [
|
113 |
-
'phone' => '+40 21 252 5599',
|
114 |
-
'email' => 'anspdcp@dataprotection.ro',
|
115 |
-
'website' => 'http://www.dataprotection.ro/',
|
116 |
-
],
|
117 |
-
'SK' => [
|
118 |
-
'phone' => '+421 2 32 31 32 14',
|
119 |
-
'email' => 'statny.dozor@pdp.gov.sk',
|
120 |
-
'website' => 'http://www.dataprotection.gov.sk/',
|
121 |
-
],
|
122 |
-
'SI' => [
|
123 |
-
'phone' => '+386 1 230 9730',
|
124 |
-
'email' => 'gp.ip@ip-rs.si',
|
125 |
-
'website' => 'https://www.ip-rs.si/',
|
126 |
-
],
|
127 |
-
'ES' => [
|
128 |
-
'phone' => '+34 91399 6200',
|
129 |
-
'email' => 'internacional@agpd.es',
|
130 |
-
'website' => 'https://www.agpd.es/',
|
131 |
-
],
|
132 |
-
'SE' => [
|
133 |
-
'phone' => '+46 8 657 6100',
|
134 |
-
'email' => 'datainspektionen@datainspektionen.se',
|
135 |
-
'website' => 'http://www.datainspektionen.se/',
|
136 |
-
],
|
137 |
-
'UK' => [
|
138 |
-
'phone' => '+44 1625 545 745 ',
|
139 |
-
'email' => 'international.team@ico.org.uk ',
|
140 |
-
'website' => 'https://ico.org.uk',
|
141 |
-
],
|
142 |
-
|
143 |
-
/* EFTA countries */
|
144 |
-
|
145 |
-
'IS' => [
|
146 |
-
'phone' => '+354 510 9600',
|
147 |
-
'email' => 'postur@personuvernd.is',
|
148 |
-
'website' => 'http://personuvernd.is/',
|
149 |
-
],
|
150 |
-
'LI' => [
|
151 |
-
'phone' => '+423 236 6090',
|
152 |
-
'email' => 'info.dss@llv.li',
|
153 |
-
'website' => 'http://www.dss.llv.li/',
|
154 |
-
],
|
155 |
-
'NO' => [
|
156 |
-
'phone' => '+47 22 39 69 00',
|
157 |
-
'email' => 'postkasse@datatilsynet.no',
|
158 |
-
'website' => 'http://www.datatilsynet.no/',
|
159 |
-
],
|
160 |
-
'CH' => [
|
161 |
-
'phone' => '+41 31 322 4395',
|
162 |
-
'email' => 'contact20@edoeb.admin.ch',
|
163 |
-
'website' => 'http://www.edoeb.admin.ch/',
|
164 |
-
],
|
165 |
-
|
166 |
-
/* Others - default to Ireland */
|
167 |
-
|
168 |
-
'
|
169 |
-
'phone' => '+353 57 868 4800',
|
170 |
-
'email' => 'info@dataprotection.ie',
|
171 |
-
'website' => 'https://www.dataprotection.ie/',
|
172 |
-
],
|
173 |
-
'
|
174 |
-
'phone' => '+353 57 868 4800',
|
175 |
-
'email' => 'info@dataprotection.ie',
|
176 |
-
'website' => 'https://www.dataprotection.ie/',
|
177 |
-
],
|
178 |
-
|
179 |
-
'phone' => '+353 57 868 4800',
|
180 |
-
'email' => 'info@dataprotection.ie',
|
181 |
-
'website' => 'https://www.dataprotection.ie/',
|
182 |
-
],
|
183 |
-
];
|
1 |
+
<?php return [
|
2 |
+
'AT' => [
|
3 |
+
'phone' => '+43 1 531 15 202525',
|
4 |
+
'email' => 'dsb@dsb.gv.at',
|
5 |
+
'website' => 'http://www.dsb.gv.at/',
|
6 |
+
],
|
7 |
+
'BE' => [
|
8 |
+
'phone' => '+32 2 274 48 00',
|
9 |
+
'email' => 'commission@privacycommission.be',
|
10 |
+
'website' => 'http://www.privacycommission.be/',
|
11 |
+
],
|
12 |
+
'BG' => [
|
13 |
+
'phone' => '+359 2 915 3580',
|
14 |
+
'email' => 'kzld@cpdp.bg',
|
15 |
+
'website' => 'http://www.cpdp.bg/',
|
16 |
+
],
|
17 |
+
'HR' => [
|
18 |
+
'phone' => '+385 1 4609 000',
|
19 |
+
'email' => 'info@azop.hr',
|
20 |
+
'website' => 'http://www.azop.hr/',
|
21 |
+
],
|
22 |
+
'CY' => [
|
23 |
+
'phone' => '+357 22 818 456',
|
24 |
+
'email' => 'commissioner@dataprotection.gov.cy',
|
25 |
+
'website' => 'http://www.dataprotection.gov.cy/',
|
26 |
+
],
|
27 |
+
'CZ' => [
|
28 |
+
'phone' => '+420 234 665 111',
|
29 |
+
'email' => 'posta@uoou.cz',
|
30 |
+
'website' => 'http://www.uoou.cz/',
|
31 |
+
],
|
32 |
+
'DK' => [
|
33 |
+
'phone' => '+45 33 1932 00',
|
34 |
+
'email' => 'dt@datatilsynet.dk',
|
35 |
+
'website' => 'http://www.datatilsynet.dk/',
|
36 |
+
],
|
37 |
+
'EE' => [
|
38 |
+
'phone' => '+372 6274 135',
|
39 |
+
'email' => 'info@aki.ee',
|
40 |
+
'website' => 'http://www.aki.ee/en',
|
41 |
+
],
|
42 |
+
'FI' => [
|
43 |
+
'phone' => '+358 10 3666 700',
|
44 |
+
'email' => 'tietosuoja@om.fi',
|
45 |
+
'website' => 'http://www.tietosuoja.fi/en/',
|
46 |
+
],
|
47 |
+
'FR' => [
|
48 |
+
'phone' => ' +33 1 53 73 22 22',
|
49 |
+
'email' => '',
|
50 |
+
'website' => 'http://www.cnil.fr/',
|
51 |
+
],
|
52 |
+
'DE' => [
|
53 |
+
'phone' => '+49 228 997799 0',
|
54 |
+
'email' => 'poststelle@bfdi.bund.de',
|
55 |
+
'website' => 'http://www.bfdi.bund.de/',
|
56 |
+
],
|
57 |
+
'GR' => [
|
58 |
+
'phone' => '+30 210 6475 600',
|
59 |
+
'email' => 'contact@dpa.gr',
|
60 |
+
'website' => 'http://www.dpa.gr/',
|
61 |
+
],
|
62 |
+
'HU' => [
|
63 |
+
'phone' => '+36 1 3911 400',
|
64 |
+
'email' => 'peterfalvi.attila@naih.hu',
|
65 |
+
'website' => 'http://www.naih.hu/',
|
66 |
+
],
|
67 |
+
'IE' => [
|
68 |
+
'phone' => '+353 57 868 4800',
|
69 |
+
'email' => 'info@dataprotection.ie',
|
70 |
+
'website' => 'https://www.dataprotection.ie/',
|
71 |
+
],
|
72 |
+
'IT' => [
|
73 |
+
'phone' => '+39 06 69677 1',
|
74 |
+
'email' => 'garante@garanteprivacy.it',
|
75 |
+
'website' => 'http://www.garanteprivacy.it/',
|
76 |
+
],
|
77 |
+
'LV' => [
|
78 |
+
'phone' => '+371 6722 3131',
|
79 |
+
'email' => 'info@dvi.gov.lv',
|
80 |
+
'website' => 'http://www.dvi.gov.lv/',
|
81 |
+
],
|
82 |
+
'LT' => [
|
83 |
+
'phone' => '+370 5 279 14 45 ',
|
84 |
+
'email' => 'ada@ada.lt',
|
85 |
+
'website' => 'http://www.ada.lt/',
|
86 |
+
],
|
87 |
+
'LU' => [
|
88 |
+
'phone' => '+352 2610 60 1',
|
89 |
+
'email' => 'info@cnpd.lu',
|
90 |
+
'website' => 'http://www.cnpd.lu/',
|
91 |
+
],
|
92 |
+
'MT' => [
|
93 |
+
'phone' => '+356 2328 7100',
|
94 |
+
'email' => 'commissioner.dataprotection@gov.mt',
|
95 |
+
'website' => 'http://www.dataprotection.gov.mt/',
|
96 |
+
],
|
97 |
+
'NL' => [
|
98 |
+
'phone' => '+31 70 888 8500',
|
99 |
+
'email' => 'info@autoriteitpersoonsgegevens.nl',
|
100 |
+
'website' => 'https://autoriteitpersoonsgegevens.nl/nl',
|
101 |
+
],
|
102 |
+
'PL' => [
|
103 |
+
'phone' => '+48 22 53 10 440',
|
104 |
+
'email' => 'kancelaria@giodo.gov.pl',
|
105 |
+
'website' => 'http://www.giodo.gov.pl/',
|
106 |
+
],
|
107 |
+
'PT' => [
|
108 |
+
'phone' => '+351 21 392 84 00',
|
109 |
+
'email' => 'geral@cnpd.pt',
|
110 |
+
'website' => 'http://www.cnpd.pt/',
|
111 |
+
],
|
112 |
+
'RO' => [
|
113 |
+
'phone' => '+40 21 252 5599',
|
114 |
+
'email' => 'anspdcp@dataprotection.ro',
|
115 |
+
'website' => 'http://www.dataprotection.ro/',
|
116 |
+
],
|
117 |
+
'SK' => [
|
118 |
+
'phone' => '+421 2 32 31 32 14',
|
119 |
+
'email' => 'statny.dozor@pdp.gov.sk',
|
120 |
+
'website' => 'http://www.dataprotection.gov.sk/',
|
121 |
+
],
|
122 |
+
'SI' => [
|
123 |
+
'phone' => '+386 1 230 9730',
|
124 |
+
'email' => 'gp.ip@ip-rs.si',
|
125 |
+
'website' => 'https://www.ip-rs.si/',
|
126 |
+
],
|
127 |
+
'ES' => [
|
128 |
+
'phone' => '+34 91399 6200',
|
129 |
+
'email' => 'internacional@agpd.es',
|
130 |
+
'website' => 'https://www.agpd.es/',
|
131 |
+
],
|
132 |
+
'SE' => [
|
133 |
+
'phone' => '+46 8 657 6100',
|
134 |
+
'email' => 'datainspektionen@datainspektionen.se',
|
135 |
+
'website' => 'http://www.datainspektionen.se/',
|
136 |
+
],
|
137 |
+
'UK' => [
|
138 |
+
'phone' => '+44 1625 545 745 ',
|
139 |
+
'email' => 'international.team@ico.org.uk ',
|
140 |
+
'website' => 'https://ico.org.uk',
|
141 |
+
],
|
142 |
+
|
143 |
+
/* EFTA countries */
|
144 |
+
|
145 |
+
'IS' => [
|
146 |
+
'phone' => '+354 510 9600',
|
147 |
+
'email' => 'postur@personuvernd.is',
|
148 |
+
'website' => 'http://personuvernd.is/',
|
149 |
+
],
|
150 |
+
'LI' => [
|
151 |
+
'phone' => '+423 236 6090',
|
152 |
+
'email' => 'info.dss@llv.li',
|
153 |
+
'website' => 'http://www.dss.llv.li/',
|
154 |
+
],
|
155 |
+
'NO' => [
|
156 |
+
'phone' => '+47 22 39 69 00',
|
157 |
+
'email' => 'postkasse@datatilsynet.no',
|
158 |
+
'website' => 'http://www.datatilsynet.no/',
|
159 |
+
],
|
160 |
+
'CH' => [
|
161 |
+
'phone' => '+41 31 322 4395',
|
162 |
+
'email' => 'contact20@edoeb.admin.ch',
|
163 |
+
'website' => 'http://www.edoeb.admin.ch/',
|
164 |
+
],
|
165 |
+
|
166 |
+
/* Others - default to Ireland */
|
167 |
+
|
168 |
+
'US' => [
|
169 |
+
'phone' => '+353 57 868 4800',
|
170 |
+
'email' => 'info@dataprotection.ie',
|
171 |
+
'website' => 'https://www.dataprotection.ie/',
|
172 |
+
],
|
173 |
+
'other' => [
|
174 |
+
'phone' => '+353 57 868 4800',
|
175 |
+
'email' => 'info@dataprotection.ie',
|
176 |
+
'website' => 'https://www.dataprotection.ie/',
|
177 |
+
],
|
178 |
+
];
|
|
|
|
|
|
|
|
|
|
assets/gdpr-admin.css
CHANGED
@@ -1,362 +1,362 @@
|
|
1 |
-
/** Admin notice **/
|
2 |
-
.notice-gdpr {
|
3 |
-
border-left-color: #0095a8;
|
4 |
-
overflow: hidden;
|
5 |
-
}
|
6 |
-
|
7 |
-
.notice-gdpr img {
|
8 |
-
width: 100px;
|
9 |
-
margin: 25px 0;
|
10 |
-
float: left;
|
11 |
-
}
|
12 |
-
|
13 |
-
.notice-gdpr .gdpr-content {
|
14 |
-
float: left;
|
15 |
-
width: calc(100% - 120px);
|
16 |
-
padding-left: 20px;
|
17 |
-
padding-bottom: 15px;
|
18 |
-
}
|
19 |
-
|
20 |
-
/** Modal window **/
|
21 |
-
.gdpr-modal {
|
22 |
-
max-width: 1200px;
|
23 |
-
}
|
24 |
-
|
25 |
-
.gdpr-modal li {
|
26 |
-
list-style-type: disc;
|
27 |
-
margin-left: 20px;
|
28 |
-
}
|
29 |
-
|
30 |
-
.gdpr-modal-footer {
|
31 |
-
background: #fcfcfc;
|
32 |
-
border-top: 1px solid #dfdfdf;
|
33 |
-
padding: 10px 0;
|
34 |
-
}
|
35 |
-
|
36 |
-
/** General **/
|
37 |
-
.gdpr-framework-wrap table {
|
38 |
-
table-layout: fixed;
|
39 |
-
border-spacing: 0;
|
40 |
-
}
|
41 |
-
|
42 |
-
.gdpr-framework-wrap input {
|
43 |
-
margin: 0;
|
44 |
-
}
|
45 |
-
|
46 |
-
.gdpr-framework-wrap .gdpr-select {
|
47 |
-
width: 300px;
|
48 |
-
max-width: 90%;
|
49 |
-
height: 32px;
|
50 |
-
border-color: #ddd;
|
51 |
-
background-color: #fff;
|
52 |
-
border: 1px solid #aaa;
|
53 |
-
border-radius: 4px;
|
54 |
-
box-sizing: border-box;
|
55 |
-
cursor: pointer;
|
56 |
-
display: block;
|
57 |
-
padding: 0 6px;
|
58 |
-
color: #666;
|
59 |
-
}
|
60 |
-
|
61 |
-
.gdpr-framework-wrap .select2-container {
|
62 |
-
display: block;
|
63 |
-
width: 300px;
|
64 |
-
max-width: 100%;
|
65 |
-
|
66 |
-
}
|
67 |
-
|
68 |
-
.gdpr-framework-wrap .select2-container--default .select2-selection--single .select2-selection__arrow,
|
69 |
-
.gdpr-framework-wrap .select2-container--default .select2-selection--single {
|
70 |
-
height: 32px !important;
|
71 |
-
}
|
72 |
-
|
73 |
-
.gdpr-framework-wrap .select2-container--default .select2-selection--single .select2-selection__arrow b {
|
74 |
-
border-width: 6px 3px 0 3px;
|
75 |
-
margin-left: -2px;
|
76 |
-
margin-top: -3px;
|
77 |
-
border-color: #666 transparent transparent transparent;
|
78 |
-
}
|
79 |
-
|
80 |
-
.gdpr-framework-wrap .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
81 |
-
border-color: transparent transparent #666 transparent;
|
82 |
-
border-width: 0 3px 6px 3px;
|
83 |
-
}
|
84 |
-
|
85 |
-
.gdpr-framework-wrap input {
|
86 |
-
border-radius: 4px;
|
87 |
-
border: 1px solid #aaa;
|
88 |
-
box-shadow: none;
|
89 |
-
height: 32px;
|
90 |
-
line-height: 28px;
|
91 |
-
min-width: 300px;
|
92 |
-
max-width: 100%;
|
93 |
-
}
|
94 |
-
|
95 |
-
.gdpr-framework-wrap textarea {
|
96 |
-
border-radius: 4px;
|
97 |
-
border: 1px solid #aaa;
|
98 |
-
box-shadow: none;
|
99 |
-
height: 32px;
|
100 |
-
line-height: 28px;
|
101 |
-
}
|
102 |
-
|
103 |
-
.gdpr-framework-wrap .select2-container input {
|
104 |
-
min-width: 0;
|
105 |
-
}
|
106 |
-
|
107 |
-
.gdpr-framework-wrap input[type=checkbox] {
|
108 |
-
line-height: initial;
|
109 |
-
height: 16px;
|
110 |
-
min-width: 0;
|
111 |
-
}
|
112 |
-
|
113 |
-
.gdpr-framework-wrap input[type=submit] {
|
114 |
-
min-width: 0;
|
115 |
-
}
|
116 |
-
|
117 |
-
.gdpr-framework-wrap input[type=button] {
|
118 |
-
min-width: 0;
|
119 |
-
}
|
120 |
-
|
121 |
-
.gdpr-framework-wrap .wp-editor-wrap {
|
122 |
-
width: 720px;
|
123 |
-
max-width: 100%;
|
124 |
-
}
|
125 |
-
|
126 |
-
.gdpr-framework-wrap .nav-tab-highlight {
|
127 |
-
background: #ffa200;
|
128 |
-
color: #fff;
|
129 |
-
font-weight: 700;
|
130 |
-
border-bottom: 1px solid #ccc;
|
131 |
-
}
|
132 |
-
|
133 |
-
.gdpr-framework-wrap .nav-tab-highlight:hover {
|
134 |
-
background: #ffc35c;
|
135 |
-
color: #fff;
|
136 |
-
}
|
137 |
-
|
138 |
-
.gdpr-framework-wrap .nav-tab-highlight:focus {
|
139 |
-
box-shadow: 0 0 2px 1px #5b9cd9;
|
140 |
-
}
|
141 |
-
|
142 |
-
/* Consent tables */
|
143 |
-
.gdpr-framework-wrap .gdpr-consent,
|
144 |
-
.gdpr-framework-wrap .gdpr-consent-admin {
|
145 |
-
table-layout: auto;
|
146 |
-
}
|
147 |
-
|
148 |
-
.gdpr-consent-user {
|
149 |
-
border-collapse: collapse;
|
150 |
-
}
|
151 |
-
|
152 |
-
.gdpr-consent-user th {
|
153 |
-
padding-bottom: 10px;
|
154 |
-
}
|
155 |
-
|
156 |
-
.gdpr-consent-user td,
|
157 |
-
.gdpr-consent-user th {
|
158 |
-
border: 1px solid #ccc;
|
159 |
-
}
|
160 |
-
|
161 |
-
.gdpr-consent-user tr:first-child th {
|
162 |
-
border: 0;
|
163 |
-
}
|
164 |
-
|
165 |
-
.gdpr-consent th {
|
166 |
-
text-align: left;
|
167 |
-
}
|
168 |
-
|
169 |
-
.gdpr-consent td {
|
170 |
-
padding-right: 16px;
|
171 |
-
}
|
172 |
-
|
173 |
-
.gdpr-consent-admin th {
|
174 |
-
text-align: left;
|
175 |
-
padding-bottom: 16px;
|
176 |
-
}
|
177 |
-
|
178 |
-
.gdpr-consent-admin + .button {
|
179 |
-
margin-top: 16px;
|
180 |
-
}
|
181 |
-
|
182 |
-
.gdpr-consent-admin td {
|
183 |
-
padding-right: 16px;
|
184 |
-
vertical-align: top;
|
185 |
-
padding-bottom: 20px;
|
186 |
-
}
|
187 |
-
|
188 |
-
.gdpr-framework-wrap .gdpr-consent-admin input {
|
189 |
-
min-width: 0;
|
190 |
-
}
|
191 |
-
|
192 |
-
.gdpr-consent-table-desc {
|
193 |
-
width: 450px;
|
194 |
-
}
|
195 |
-
|
196 |
-
.gdpr-consent-table-input {
|
197 |
-
width: 200px;
|
198 |
-
}
|
199 |
-
|
200 |
-
.gdpr-consent-table-input input {
|
201 |
-
width: 100%;
|
202 |
-
}
|
203 |
-
|
204 |
-
.gdpr-consent-table-desc textarea {
|
205 |
-
width: 100%;
|
206 |
-
min-height: 100px;
|
207 |
-
}
|
208 |
-
|
209 |
-
.gdpr-consent-add-button {
|
210 |
-
text-align: right;
|
211 |
-
width: 1051px;
|
212 |
-
}
|
213 |
-
|
214 |
-
.gdpr-consent-user {
|
215 |
-
table-layout: auto;
|
216 |
-
}
|
217 |
-
|
218 |
-
.gdpr-consent-user td {
|
219 |
-
padding: 15px;
|
220 |
-
}
|
221 |
-
|
222 |
-
.gdpr-consent-user-title {
|
223 |
-
width: 200px;
|
224 |
-
}
|
225 |
-
|
226 |
-
.gdpr-consent-user-desc {
|
227 |
-
width: 450px;
|
228 |
-
}
|
229 |
-
|
230 |
-
/* support page */
|
231 |
-
.gdpr-framework-wrap .align-center {
|
232 |
-
text-align: center;
|
233 |
-
}
|
234 |
-
|
235 |
-
.gdpr-framework-wrap .section {
|
236 |
-
margin: 25px 0;
|
237 |
-
max-width: 720px;
|
238 |
-
}
|
239 |
-
|
240 |
-
.gdpr-framework-wrap .row {
|
241 |
-
box-sizing: border-box;
|
242 |
-
display: -webkit-box;
|
243 |
-
display: -ms-flexbox;
|
244 |
-
display: flex;
|
245 |
-
-ms-flex-wrap: wrap;
|
246 |
-
flex-wrap: wrap;
|
247 |
-
margin-right: -8px;
|
248 |
-
margin-left: -8px;
|
249 |
-
-webkit-box-pack: center !important;
|
250 |
-
-ms-flex-pack: center !important;
|
251 |
-
justify-content: center !important;
|
252 |
-
}
|
253 |
-
|
254 |
-
.gdpr-framework-wrap .col {
|
255 |
-
box-sizing: border-box;
|
256 |
-
position: relative;
|
257 |
-
width: 100%;
|
258 |
-
min-height: 1px;
|
259 |
-
padding-right: 8px;
|
260 |
-
padding-left: 8px;
|
261 |
-
margin-bottom: 15px;
|
262 |
-
}
|
263 |
-
|
264 |
-
@media (min-width: 576px) {
|
265 |
-
.gdpr-framework-wrap .col {
|
266 |
-
-webkit-box-flex: 0;
|
267 |
-
-ms-flex: 0 0 50%;
|
268 |
-
flex: 0 0 50%;
|
269 |
-
max-width: 50%;
|
270 |
-
}
|
271 |
-
}
|
272 |
-
|
273 |
-
@media (min-width: 768px) {
|
274 |
-
.gdpr-framework-wrap .col {
|
275 |
-
-webkit-box-flex: 0;
|
276 |
-
-ms-flex: 0 0 33.33333%;
|
277 |
-
flex: 0 0 33.33333%;
|
278 |
-
max-width: 33.33333%;
|
279 |
-
}
|
280 |
-
}
|
281 |
-
|
282 |
-
.gdpr-framework-wrap .col .button {
|
283 |
-
display: block;
|
284 |
-
text-align: center;
|
285 |
-
}
|
286 |
-
|
287 |
-
.gdpr-framework-wrap .col_image {
|
288 |
-
background-position: center;
|
289 |
-
background-repeat: no-repeat;
|
290 |
-
background-size: cover;
|
291 |
-
border-radius: 6px;
|
292 |
-
background-color: #e5e5e5;
|
293 |
-
padding-bottom: 60%;
|
294 |
-
margin-bottom: 15px;
|
295 |
-
position: relative;
|
296 |
-
}
|
297 |
-
|
298 |
-
.gdpr-framework-wrap .col_image:after {
|
299 |
-
content: '';
|
300 |
-
position: absolute;
|
301 |
-
top: 0;
|
302 |
-
left: 0;
|
303 |
-
width: 100%;
|
304 |
-
height: 100%;
|
305 |
-
background-color: #ffa200;
|
306 |
-
opacity: .15;
|
307 |
-
}
|
308 |
-
|
309 |
-
.gdpr-framework-wrap .col .button {
|
310 |
-
font-size: 14px;
|
311 |
-
line-height: 28px;
|
312 |
-
padding: 4px 15px;
|
313 |
-
height: auto;
|
314 |
-
border: 1px solid #ccc;
|
315 |
-
box-shadow: 0 1px 0 #ccc;
|
316 |
-
-webkit-box-shadow: 0 1px 1px #ccc;
|
317 |
-
transition: .1s;
|
318 |
-
}
|
319 |
-
|
320 |
-
.gdpr-framework-wrap .col .button:hover {
|
321 |
-
box-shadow: 0 1px 1px #ccc;
|
322 |
-
-webkit-box-shadow: 0 1px 1px #ccc;
|
323 |
-
border: 1px solid #ccc;
|
324 |
-
background: #fff;
|
325 |
-
}
|
326 |
-
|
327 |
-
.gdpr-framework-wrap .col .button:focus {
|
328 |
-
box-shadow: 0 0 2px 1px #5b9cd9;
|
329 |
-
}
|
330 |
-
|
331 |
-
.gdpr-framework-wrap .col .button-primary {
|
332 |
-
background-color: #ffa200;
|
333 |
-
border-color: #ffa200;
|
334 |
-
color: #fff;
|
335 |
-
text-shadow: none;
|
336 |
-
-webkit-box-shadow: 0 1px 1px #ccc;
|
337 |
-
box-shadow: 0 1px 1px #ccc;
|
338 |
-
}
|
339 |
-
|
340 |
-
.gdpr-framework-wrap .col .button-primary:hover {
|
341 |
-
background: #ffc35c;
|
342 |
-
border-color: #ffc35c;
|
343 |
-
color: #fff;
|
344 |
-
}
|
345 |
-
|
346 |
-
.gdpr-framework-wrap .col .button-primary:active,
|
347 |
-
.gdpr-framework-wrap .col .button-primary:focus {
|
348 |
-
background-color: #ffa200;
|
349 |
-
border-color: #ccc;
|
350 |
-
color: #fff;
|
351 |
-
box-shadow: 0 0 2px 1px #5b9cd9;
|
352 |
-
}
|
353 |
-
|
354 |
-
.gdpr-framework-wrap .col p {
|
355 |
-
font-size: 14px;
|
356 |
-
line-height: 26px;
|
357 |
-
color: #555;
|
358 |
-
}
|
359 |
-
|
360 |
-
.gdpr-framework-wrap .col p:last-child {
|
361 |
-
margin-bottom: 0;
|
362 |
-
}
|
1 |
+
/** Admin notice **/
|
2 |
+
.notice-gdpr {
|
3 |
+
border-left-color: #0095a8;
|
4 |
+
overflow: hidden;
|
5 |
+
}
|
6 |
+
|
7 |
+
.notice-gdpr img {
|
8 |
+
width: 100px;
|
9 |
+
margin: 25px 0;
|
10 |
+
float: left;
|
11 |
+
}
|
12 |
+
|
13 |
+
.notice-gdpr .gdpr-content {
|
14 |
+
float: left;
|
15 |
+
width: calc(100% - 120px);
|
16 |
+
padding-left: 20px;
|
17 |
+
padding-bottom: 15px;
|
18 |
+
}
|
19 |
+
|
20 |
+
/** Modal window **/
|
21 |
+
.gdpr-modal {
|
22 |
+
max-width: 1200px;
|
23 |
+
}
|
24 |
+
|
25 |
+
.gdpr-modal li {
|
26 |
+
list-style-type: disc;
|
27 |
+
margin-left: 20px;
|
28 |
+
}
|
29 |
+
|
30 |
+
.gdpr-modal-footer {
|
31 |
+
background: #fcfcfc;
|
32 |
+
border-top: 1px solid #dfdfdf;
|
33 |
+
padding: 10px 0;
|
34 |
+
}
|
35 |
+
|
36 |
+
/** General **/
|
37 |
+
.gdpr-framework-wrap table {
|
38 |
+
table-layout: fixed;
|
39 |
+
border-spacing: 0;
|
40 |
+
}
|
41 |
+
|
42 |
+
.gdpr-framework-wrap input {
|
43 |
+
margin: 0;
|
44 |
+
}
|
45 |
+
|
46 |
+
.gdpr-framework-wrap .gdpr-select {
|
47 |
+
width: 300px;
|
48 |
+
max-width: 90%;
|
49 |
+
height: 32px;
|
50 |
+
border-color: #ddd;
|
51 |
+
background-color: #fff;
|
52 |
+
border: 1px solid #aaa;
|
53 |
+
border-radius: 4px;
|
54 |
+
box-sizing: border-box;
|
55 |
+
cursor: pointer;
|
56 |
+
display: block;
|
57 |
+
padding: 0 6px;
|
58 |
+
color: #666;
|
59 |
+
}
|
60 |
+
|
61 |
+
.gdpr-framework-wrap .select2-container {
|
62 |
+
display: block;
|
63 |
+
width: 300px;
|
64 |
+
max-width: 100%;
|
65 |
+
|
66 |
+
}
|
67 |
+
|
68 |
+
.gdpr-framework-wrap .select2-container--default .select2-selection--single .select2-selection__arrow,
|
69 |
+
.gdpr-framework-wrap .select2-container--default .select2-selection--single {
|
70 |
+
height: 32px !important;
|
71 |
+
}
|
72 |
+
|
73 |
+
.gdpr-framework-wrap .select2-container--default .select2-selection--single .select2-selection__arrow b {
|
74 |
+
border-width: 6px 3px 0 3px;
|
75 |
+
margin-left: -2px;
|
76 |
+
margin-top: -3px;
|
77 |
+
border-color: #666 transparent transparent transparent;
|
78 |
+
}
|
79 |
+
|
80 |
+
.gdpr-framework-wrap .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
|
81 |
+
border-color: transparent transparent #666 transparent;
|
82 |
+
border-width: 0 3px 6px 3px;
|
83 |
+
}
|
84 |
+
|
85 |
+
.gdpr-framework-wrap input {
|
86 |
+
border-radius: 4px;
|
87 |
+
border: 1px solid #aaa;
|
88 |
+
box-shadow: none;
|
89 |
+
height: 32px;
|
90 |
+
line-height: 28px;
|
91 |
+
min-width: 300px;
|
92 |
+
max-width: 100%;
|
93 |
+
}
|
94 |
+
|
95 |
+
.gdpr-framework-wrap textarea {
|
96 |
+
border-radius: 4px;
|
97 |
+
border: 1px solid #aaa;
|
98 |
+
box-shadow: none;
|
99 |
+
height: 32px;
|
100 |
+
line-height: 28px;
|
101 |
+
}
|
102 |
+
|
103 |
+
.gdpr-framework-wrap .select2-container input {
|
104 |
+
min-width: 0;
|
105 |
+
}
|
106 |
+
|
107 |
+
.gdpr-framework-wrap input[type=checkbox] {
|
108 |
+
line-height: initial;
|
109 |
+
height: 16px;
|
110 |
+
min-width: 0;
|
111 |
+
}
|
112 |
+
|
113 |
+
.gdpr-framework-wrap input[type=submit] {
|
114 |
+
min-width: 0;
|
115 |
+
}
|
116 |
+
|
117 |
+
.gdpr-framework-wrap input[type=button] {
|
118 |
+
min-width: 0;
|
119 |
+
}
|
120 |
+
|
121 |
+
.gdpr-framework-wrap .wp-editor-wrap {
|
122 |
+
width: 720px;
|
123 |
+
max-width: 100%;
|
124 |
+
}
|
125 |
+
|
126 |
+
.gdpr-framework-wrap .nav-tab-highlight {
|
127 |
+
background: #ffa200;
|
128 |
+
color: #fff;
|
129 |
+
font-weight: 700;
|
130 |
+
border-bottom: 1px solid #ccc;
|
131 |
+
}
|
132 |
+
|
133 |
+
.gdpr-framework-wrap .nav-tab-highlight:hover {
|
134 |
+
background: #ffc35c;
|
135 |
+
color: #fff;
|
136 |
+
}
|
137 |
+
|
138 |
+
.gdpr-framework-wrap .nav-tab-highlight:focus {
|
139 |
+
box-shadow: 0 0 2px 1px #5b9cd9;
|
140 |
+
}
|
141 |
+
|
142 |
+
/* Consent tables */
|
143 |
+
.gdpr-framework-wrap .gdpr-consent,
|
144 |
+
.gdpr-framework-wrap .gdpr-consent-admin {
|
145 |
+
table-layout: auto;
|
146 |
+
}
|
147 |
+
|
148 |
+
.gdpr-consent-user {
|
149 |
+
border-collapse: collapse;
|
150 |
+
}
|
151 |
+
|
152 |
+
.gdpr-consent-user th {
|
153 |
+
padding-bottom: 10px;
|
154 |
+
}
|
155 |
+
|
156 |
+
.gdpr-consent-user td,
|
157 |
+
.gdpr-consent-user th {
|
158 |
+
border: 1px solid #ccc;
|
159 |
+
}
|
160 |
+
|
161 |
+
.gdpr-consent-user tr:first-child th {
|
162 |
+
border: 0;
|
163 |
+
}
|
164 |
+
|
165 |
+
.gdpr-consent th {
|
166 |
+
text-align: left;
|
167 |
+
}
|
168 |
+
|
169 |
+
.gdpr-consent td {
|
170 |
+
padding-right: 16px;
|
171 |
+
}
|
172 |
+
|
173 |
+
.gdpr-consent-admin th {
|
174 |
+
text-align: left;
|
175 |
+
padding-bottom: 16px;
|
176 |
+
}
|
177 |
+
|
178 |
+
.gdpr-consent-admin + .button {
|
179 |
+
margin-top: 16px;
|
180 |
+
}
|
181 |
+
|
182 |
+
.gdpr-consent-admin td {
|
183 |
+
padding-right: 16px;
|
184 |
+
vertical-align: top;
|
185 |
+
padding-bottom: 20px;
|
186 |
+
}
|
187 |
+
|
188 |
+
.gdpr-framework-wrap .gdpr-consent-admin input {
|
189 |
+
min-width: 0;
|
190 |
+
}
|
191 |
+
|
192 |
+
.gdpr-consent-table-desc {
|
193 |
+
width: 450px;
|
194 |
+
}
|
195 |
+
|
196 |
+
.gdpr-consent-table-input {
|
197 |
+
width: 200px;
|
198 |
+
}
|
199 |
+
|
200 |
+
.gdpr-consent-table-input input {
|
201 |
+
width: 100%;
|
202 |
+
}
|
203 |
+
|
204 |
+
.gdpr-consent-table-desc textarea {
|
205 |
+
width: 100%;
|
206 |
+
min-height: 100px;
|
207 |
+
}
|
208 |
+
|
209 |
+
.gdpr-consent-add-button {
|
210 |
+
text-align: right;
|
211 |
+
width: 1051px;
|
212 |
+
}
|
213 |
+
|
214 |
+
.gdpr-consent-user {
|
215 |
+
table-layout: auto;
|
216 |
+
}
|
217 |
+
|
218 |
+
.gdpr-consent-user td {
|
219 |
+
padding: 15px;
|
220 |
+
}
|
221 |
+
|
222 |
+
.gdpr-consent-user-title {
|
223 |
+
width: 200px;
|
224 |
+
}
|
225 |
+
|
226 |
+
.gdpr-consent-user-desc {
|
227 |
+
width: 450px;
|
228 |
+
}
|
229 |
+
|
230 |
+
/* support page */
|
231 |
+
.gdpr-framework-wrap .align-center {
|
232 |
+
text-align: center;
|
233 |
+
}
|
234 |
+
|
235 |
+
.gdpr-framework-wrap .section {
|
236 |
+
margin: 25px 0;
|
237 |
+
max-width: 720px;
|
238 |
+
}
|
239 |
+
|
240 |
+
.gdpr-framework-wrap .row {
|
241 |
+
box-sizing: border-box;
|
242 |
+
display: -webkit-box;
|
243 |
+
display: -ms-flexbox;
|
244 |
+
display: flex;
|
245 |
+
-ms-flex-wrap: wrap;
|
246 |
+
flex-wrap: wrap;
|
247 |
+
margin-right: -8px;
|
248 |
+
margin-left: -8px;
|
249 |
+
-webkit-box-pack: center !important;
|
250 |
+
-ms-flex-pack: center !important;
|
251 |
+
justify-content: center !important;
|
252 |
+
}
|
253 |
+
|
254 |
+
.gdpr-framework-wrap .col {
|
255 |
+
box-sizing: border-box;
|
256 |
+
position: relative;
|
257 |
+
width: 100%;
|
258 |
+
min-height: 1px;
|
259 |
+
padding-right: 8px;
|
260 |
+
padding-left: 8px;
|
261 |
+
margin-bottom: 15px;
|
262 |
+
}
|
263 |
+
|
264 |
+
@media (min-width: 576px) {
|
265 |
+
.gdpr-framework-wrap .col {
|
266 |
+
-webkit-box-flex: 0;
|
267 |
+
-ms-flex: 0 0 50%;
|
268 |
+
flex: 0 0 50%;
|
269 |
+
max-width: 50%;
|
270 |
+
}
|
271 |
+
}
|
272 |
+
|
273 |
+
@media (min-width: 768px) {
|
274 |
+
.gdpr-framework-wrap .col {
|
275 |
+
-webkit-box-flex: 0;
|
276 |
+
-ms-flex: 0 0 33.33333%;
|
277 |
+
flex: 0 0 33.33333%;
|
278 |
+
max-width: 33.33333%;
|
279 |
+
}
|
280 |
+
}
|
281 |
+
|
282 |
+
.gdpr-framework-wrap .col .button {
|
283 |
+
display: block;
|
284 |
+
text-align: center;
|
285 |
+
}
|
286 |
+
|
287 |
+
.gdpr-framework-wrap .col_image {
|
288 |
+
background-position: center;
|
289 |
+
background-repeat: no-repeat;
|
290 |
+
background-size: cover;
|
291 |
+
border-radius: 6px;
|
292 |
+
background-color: #e5e5e5;
|
293 |
+
padding-bottom: 60%;
|
294 |
+
margin-bottom: 15px;
|
295 |
+
position: relative;
|
296 |
+
}
|
297 |
+
|
298 |
+
.gdpr-framework-wrap .col_image:after {
|
299 |
+
content: '';
|
300 |
+
position: absolute;
|
301 |
+
top: 0;
|
302 |
+
left: 0;
|
303 |
+
width: 100%;
|
304 |
+
height: 100%;
|
305 |
+
background-color: #ffa200;
|
306 |
+
opacity: .15;
|
307 |
+
}
|
308 |
+
|
309 |
+
.gdpr-framework-wrap .col .button {
|
310 |
+
font-size: 14px;
|
311 |
+
line-height: 28px;
|
312 |
+
padding: 4px 15px;
|
313 |
+
height: auto;
|
314 |
+
border: 1px solid #ccc;
|
315 |
+
box-shadow: 0 1px 0 #ccc;
|
316 |
+
-webkit-box-shadow: 0 1px 1px #ccc;
|
317 |
+
transition: .1s;
|
318 |
+
}
|
319 |
+
|
320 |
+
.gdpr-framework-wrap .col .button:hover {
|
321 |
+
box-shadow: 0 1px 1px #ccc;
|
322 |
+
-webkit-box-shadow: 0 1px 1px #ccc;
|
323 |
+
border: 1px solid #ccc;
|
324 |
+
background: #fff;
|
325 |
+
}
|
326 |
+
|
327 |
+
.gdpr-framework-wrap .col .button:focus {
|
328 |
+
box-shadow: 0 0 2px 1px #5b9cd9;
|
329 |
+
}
|
330 |
+
|
331 |
+
.gdpr-framework-wrap .col .button-primary {
|
332 |
+
background-color: #ffa200;
|
333 |
+
border-color: #ffa200;
|
334 |
+
color: #fff;
|
335 |
+
text-shadow: none;
|
336 |
+
-webkit-box-shadow: 0 1px 1px #ccc;
|
337 |
+
box-shadow: 0 1px 1px #ccc;
|
338 |
+
}
|
339 |
+
|
340 |
+
.gdpr-framework-wrap .col .button-primary:hover {
|
341 |
+
background: #ffc35c;
|
342 |
+
border-color: #ffc35c;
|
343 |
+
color: #fff;
|
344 |
+
}
|
345 |
+
|
346 |
+
.gdpr-framework-wrap .col .button-primary:active,
|
347 |
+
.gdpr-framework-wrap .col .button-primary:focus {
|
348 |
+
background-color: #ffa200;
|
349 |
+
border-color: #ccc;
|
350 |
+
color: #fff;
|
351 |
+
box-shadow: 0 0 2px 1px #5b9cd9;
|
352 |
+
}
|
353 |
+
|
354 |
+
.gdpr-framework-wrap .col p {
|
355 |
+
font-size: 14px;
|
356 |
+
line-height: 26px;
|
357 |
+
color: #555;
|
358 |
+
}
|
359 |
+
|
360 |
+
.gdpr-framework-wrap .col p:last-child {
|
361 |
+
margin-bottom: 0;
|
362 |
+
}
|
assets/gdpr-admin.js
CHANGED
@@ -1,102 +1,102 @@
|
|
1 |
-
jQuery(function ($) {
|
2 |
-
|
3 |
-
// Handler to open the modal dialog
|
4 |
-
$(document).on('click', '.gdpr-open-modal', function (e) {
|
5 |
-
$($(this).data('gdpr-modal-target')).dialog('open');
|
6 |
-
e.preventDefault();
|
7 |
-
});
|
8 |
-
|
9 |
-
// Initialize all modals on page
|
10 |
-
$('.gdpr-modal').each(function (i, e) {
|
11 |
-
var $base = $(this);
|
12 |
-
|
13 |
-
$base.dialog({
|
14 |
-
title: $base.data('gdpr-title'),
|
15 |
-
dialogClass: 'wp-dialog',
|
16 |
-
autoOpen: false,
|
17 |
-
draggable: false,
|
18 |
-
width: 'auto',
|
19 |
-
modal: true,
|
20 |
-
resizable: false,
|
21 |
-
closeOnEscape: true,
|
22 |
-
position: {
|
23 |
-
my: "center",
|
24 |
-
at: "center",
|
25 |
-
of: window
|
26 |
-
},
|
27 |
-
create: function () {
|
28 |
-
// style fix for WordPress admin
|
29 |
-
$('.ui-dialog-titlebar-close').addClass('ui-button');
|
30 |
-
},
|
31 |
-
open: function () {
|
32 |
-
// Bind a click on the overlay to close the dialog
|
33 |
-
$('.ui-widget-overlay').bind('click', function () {
|
34 |
-
$base.dialog('close');
|
35 |
-
});
|
36 |
-
|
37 |
-
// Bind a custom close button to close the dialog
|
38 |
-
$base.find('.gdpr-close-modal').bind('click', function (e) {
|
39 |
-
$base.dialog('close');
|
40 |
-
e.preventDefault();
|
41 |
-
});
|
42 |
-
|
43 |
-
// Fix overlay CSS issues in admin
|
44 |
-
$('.wp-dialog').css('z-index', 9999);
|
45 |
-
$('.ui-widget-overlay').css('z-index', 9998);
|
46 |
-
},
|
47 |
-
close: function () {
|
48 |
-
$('.wp-dialog').css('z-index', 101);
|
49 |
-
$('.ui-widget-overlay').css('z-index', 100);
|
50 |
-
}
|
51 |
-
});
|
52 |
-
});
|
53 |
-
|
54 |
-
/**
|
55 |
-
* https://github.com/DubFriend/jquery.repeater
|
56 |
-
*/
|
57 |
-
$('.js-gdpr-repeater').each(function () {
|
58 |
-
var $repeater = $(this).repeater({
|
59 |
-
isFirstItemUndeletable: true
|
60 |
-
});
|
61 |
-
|
62 |
-
if (typeof window.repeaterData[$(this).data('name')] !== undefined) {
|
63 |
-
$repeater.setList(window.repeaterData[$(this).data('name')]);
|
64 |
-
}
|
65 |
-
});
|
66 |
-
|
67 |
-
/**
|
68 |
-
* Init select2
|
69 |
-
*/
|
70 |
-
$('.js-gdpr-select2').select2({
|
71 |
-
width: 'style'
|
72 |
-
});
|
73 |
-
|
74 |
-
/**
|
75 |
-
* Auto-fill DPA info
|
76 |
-
*/
|
77 |
-
$('.js-gdpr-country-selector').on('change', function () {
|
78 |
-
var dpaData, $website, $email, $phone;
|
79 |
-
var countryCode = $(this).val();
|
80 |
-
|
81 |
-
if (!window.gdprDpaData[countryCode]) {
|
82 |
-
return;
|
83 |
-
}
|
84 |
-
|
85 |
-
dpaData = window.gdprDpaData[countryCode];
|
86 |
-
|
87 |
-
$website = $('#gdpr_dpa_website');
|
88 |
-
if ('' === $website.data('set')) {
|
89 |
-
$website.val(dpaData['website']);
|
90 |
-
}
|
91 |
-
|
92 |
-
$email = $('#gdpr_dpa_email');
|
93 |
-
if ('' === $email.data('set')) {
|
94 |
-
$email.val(dpaData['email']);
|
95 |
-
}
|
96 |
-
|
97 |
-
$phone = $('#gdpr_dpa_phone');
|
98 |
-
if ('' === $phone.data('set')) {
|
99 |
-
$phone.val(dpaData['phone']);
|
100 |
-
}
|
101 |
-
});
|
102 |
-
});
|
1 |
+
jQuery(function ($) {
|
2 |
+
|
3 |
+
// Handler to open the modal dialog
|
4 |
+
$(document).on('click', '.gdpr-open-modal', function (e) {
|
5 |
+
$($(this).data('gdpr-modal-target')).dialog('open');
|
6 |
+
e.preventDefault();
|
7 |
+
});
|
8 |
+
|
9 |
+
// Initialize all modals on page
|
10 |
+
$('.gdpr-modal').each(function (i, e) {
|
11 |
+
var $base = $(this);
|
12 |
+
|
13 |
+
$base.dialog({
|
14 |
+
title: $base.data('gdpr-title'),
|
15 |
+
dialogClass: 'wp-dialog',
|
16 |
+
autoOpen: false,
|
17 |
+
draggable: false,
|
18 |
+
width: 'auto',
|
19 |
+
modal: true,
|
20 |
+
resizable: false,
|
21 |
+
closeOnEscape: true,
|
22 |
+
position: {
|
23 |
+
my: "center",
|
24 |
+
at: "center",
|
25 |
+
of: window
|
26 |
+
},
|
27 |
+
create: function () {
|
28 |
+
// style fix for WordPress admin
|
29 |
+
$('.ui-dialog-titlebar-close').addClass('ui-button');
|
30 |
+
},
|
31 |
+
open: function () {
|
32 |
+
// Bind a click on the overlay to close the dialog
|
33 |
+
$('.ui-widget-overlay').bind('click', function () {
|
34 |
+
$base.dialog('close');
|
35 |
+
});
|
36 |
+
|
37 |
+
// Bind a custom close button to close the dialog
|
38 |
+
$base.find('.gdpr-close-modal').bind('click', function (e) {
|
39 |
+
$base.dialog('close');
|
40 |
+
e.preventDefault();
|
41 |
+
});
|
42 |
+
|
43 |
+
// Fix overlay CSS issues in admin
|
44 |
+
$('.wp-dialog').css('z-index', 9999);
|
45 |
+
$('.ui-widget-overlay').css('z-index', 9998);
|
46 |
+
},
|
47 |
+
close: function () {
|
48 |
+
$('.wp-dialog').css('z-index', 101);
|
49 |
+
$('.ui-widget-overlay').css('z-index', 100);
|
50 |
+
}
|
51 |
+
});
|
52 |
+
});
|
53 |
+
|
54 |
+
/**
|
55 |
+
* https://github.com/DubFriend/jquery.repeater
|
56 |
+
*/
|
57 |
+
$('.js-gdpr-repeater').each(function () {
|
58 |
+
var $repeater = $(this).repeater({
|
59 |
+
isFirstItemUndeletable: true
|
60 |
+
});
|
61 |
+
|
62 |
+
if (typeof window.repeaterData[$(this).data('name')] !== undefined) {
|
63 |
+
$repeater.setList(window.repeaterData[$(this).data('name')]);
|
64 |
+
}
|
65 |
+
});
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Init select2
|
69 |
+
*/
|
70 |
+
$('.js-gdpr-select2').select2({
|
71 |
+
width: 'style'
|
72 |
+
});
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Auto-fill DPA info
|
76 |
+
*/
|
77 |
+
$('.js-gdpr-country-selector').on('change', function () {
|
78 |
+
var dpaData, $website, $email, $phone;
|
79 |
+
var countryCode = $(this).val();
|
80 |
+
|
81 |
+
if (!window.gdprDpaData[countryCode]) {
|
82 |
+
return;
|
83 |
+
}
|
84 |
+
|
85 |
+
dpaData = window.gdprDpaData[countryCode];
|
86 |
+
|
87 |
+
$website = $('#gdpr_dpa_website');
|
88 |
+
if ('' === $website.data('set')) {
|
89 |
+
$website.val(dpaData['website']);
|
90 |
+
}
|
91 |
+
|
92 |
+
$email = $('#gdpr_dpa_email');
|
93 |
+
if ('' === $email.data('set')) {
|
94 |
+
$email.val(dpaData['email']);
|
95 |
+
}
|
96 |
+
|
97 |
+
$phone = $('#gdpr_dpa_phone');
|
98 |
+
if ('' === $phone.data('set')) {
|
99 |
+
$phone.val(dpaData['phone']);
|
100 |
+
}
|
101 |
+
});
|
102 |
+
});
|
assets/gdpr-installer.css
CHANGED
@@ -1,550 +1,550 @@
|
|
1 |
-
.gdpr-installer-container {
|
2 |
-
max-width: 720px;
|
3 |
-
margin: 30px auto;
|
4 |
-
font-size: 14px;
|
5 |
-
}
|
6 |
-
|
7 |
-
.gdpr-step-button-prev {
|
8 |
-
display: block;
|
9 |
-
float: left;
|
10 |
-
}
|
11 |
-
|
12 |
-
.gdpr-step-button-next {
|
13 |
-
display: block;
|
14 |
-
float: right;
|
15 |
-
}
|
16 |
-
|
17 |
-
.gdpr-header {
|
18 |
-
margin: 0 auto 30px;
|
19 |
-
overflow: hidden;
|
20 |
-
padding: 0 16px;
|
21 |
-
text-align: center;
|
22 |
-
}
|
23 |
-
|
24 |
-
.gdpr-header_left {
|
25 |
-
float: left;
|
26 |
-
width: 100%;
|
27 |
-
}
|
28 |
-
|
29 |
-
.gdpr-header_right {
|
30 |
-
float: left;
|
31 |
-
width: 100%;
|
32 |
-
}
|
33 |
-
|
34 |
-
@media (min-width: 576px) {
|
35 |
-
.gdpr-header {
|
36 |
-
text-align: left;
|
37 |
-
}
|
38 |
-
|
39 |
-
.gdpr-header_left {
|
40 |
-
width: 175px;
|
41 |
-
padding-right: 15px;
|
42 |
-
padding-top: 25px;
|
43 |
-
}
|
44 |
-
|
45 |
-
.gdpr-header_right {
|
46 |
-
width: calc(100% - 235px);
|
47 |
-
}
|
48 |
-
}
|
49 |
-
|
50 |
-
@media (min-width: 768px) {
|
51 |
-
.gdpr-header {
|
52 |
-
padding: 0;
|
53 |
-
}
|
54 |
-
}
|
55 |
-
|
56 |
-
.gdpr-logo {
|
57 |
-
width: 100px;
|
58 |
-
}
|
59 |
-
|
60 |
-
.gdpr-header h1 {
|
61 |
-
font-size: 1.8em;
|
62 |
-
line-height: normal;
|
63 |
-
margin-top: 15px;
|
64 |
-
margin-bottom: 20px;
|
65 |
-
font-weight: 700;
|
66 |
-
}
|
67 |
-
|
68 |
-
.gdpr-header h2 {
|
69 |
-
float: left;
|
70 |
-
}
|
71 |
-
|
72 |
-
.gdpr-installer .gdpr-content {
|
73 |
-
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .13);
|
74 |
-
box-shadow: 0 1px 3px rgba(0, 0, 0, .13);
|
75 |
-
padding: 16px;
|
76 |
-
margin: 0 0 20px;
|
77 |
-
background: #fff;
|
78 |
-
overflow: hidden;
|
79 |
-
zoom: 1;
|
80 |
-
}
|
81 |
-
|
82 |
-
.gdpr-installer .spacer {
|
83 |
-
margin-top: 2em;
|
84 |
-
}
|
85 |
-
|
86 |
-
.gdpr-installer .gdpr-content p {
|
87 |
-
font-size: 14px;
|
88 |
-
line-height: 26px;
|
89 |
-
color: #555;
|
90 |
-
}
|
91 |
-
|
92 |
-
.gdpr-installer .gdpr-content p:last-child {
|
93 |
-
margin-bottom: 0;
|
94 |
-
}
|
95 |
-
|
96 |
-
.gdpr-content a {
|
97 |
-
color: #0095a7;
|
98 |
-
font-weight: 700;
|
99 |
-
text-decoration: none;
|
100 |
-
box-shadow: none;
|
101 |
-
}
|
102 |
-
|
103 |
-
.gdpr-content a:hover,
|
104 |
-
.gdpr-content a:focus {
|
105 |
-
outline: none;
|
106 |
-
text-decoration: none;
|
107 |
-
color: #000;
|
108 |
-
}
|
109 |
-
|
110 |
-
.gdpr-installer .gdpr-content li {
|
111 |
-
margin-left: 20px;
|
112 |
-
list-style-type: disc;
|
113 |
-
}
|
114 |
-
|
115 |
-
.gdpr-installer .gdpr-content select {
|
116 |
-
height: 32px;
|
117 |
-
border-color: #ddd;
|
118 |
-
background-color: #fff;
|
119 |
-
border: 1px solid #aaa;
|
120 |
-
border-radius: 4px;
|
121 |
-
box-sizing: border-box;
|
122 |
-
cursor: pointer;
|
123 |
-
display: block;
|
124 |
-
padding: 0 6px;
|
125 |
-
color: #666;
|
126 |
-
}
|
127 |
-
|
128 |
-
.select2-container .select2-selection--single {
|
129 |
-
height: 32px !important;
|
130 |
-
}
|
131 |
-
|
132 |
-
.gdpr-installer .gdpr-content h1 {
|
133 |
-
font-weight: 700;
|
134 |
-
line-height: normal;
|
135 |
-
}
|
136 |
-
|
137 |
-
.gdpr-installer .gdpr-content h2 {
|
138 |
-
font-size: 22px;
|
139 |
-
line-height: 32px;
|
140 |
-
font-weight: 700;
|
141 |
-
}
|
142 |
-
|
143 |
-
.gdpr-installer .gdpr-content h3 {
|
144 |
-
font-size: 18px;
|
145 |
-
line-height: 22px;
|
146 |
-
font-weight: 700;
|
147 |
-
}
|
148 |
-
|
149 |
-
.wp-core-ui .button {
|
150 |
-
font-size: 14px;
|
151 |
-
line-height: 28px;
|
152 |
-
padding: 4px 15px;
|
153 |
-
height: auto;
|
154 |
-
border: 1px solid #ccc;
|
155 |
-
box-shadow: 0 1px 0 #ccc;
|
156 |
-
-webkit-box-shadow: 0 1px 1px #ccc;
|
157 |
-
transition: .1s;
|
158 |
-
}
|
159 |
-
|
160 |
-
.wp-core-ui .button:hover {
|
161 |
-
box-shadow: 0 1px 1px #ccc;
|
162 |
-
-webkit-box-shadow: 0 1px 1px #ccc;
|
163 |
-
border: 1px solid #ccc;
|
164 |
-
background: #fff;
|
165 |
-
}
|
166 |
-
|
167 |
-
.wp-core-ui .button:focus {
|
168 |
-
box-shadow: 0 0 2px 1px #5b9cd9;
|
169 |
-
}
|
170 |
-
|
171 |
-
.wp-core-ui .button-gdpr {
|
172 |
-
background: #0095a8;
|
173 |
-
border-color: #0095a8;
|
174 |
-
-webkit-box-shadow: 0 1px 1px #ccc;
|
175 |
-
box-shadow: 0 1px 1px #ccc;
|
176 |
-
color: #fff;
|
177 |
-
text-decoration: none;
|
178 |
-
transition: .1s;
|
179 |
-
}
|
180 |
-
|
181 |
-
.wp-core-ui .button-gdpr:hover {
|
182 |
-
background: #79c2cb;
|
183 |
-
border-color: #79c2cb;
|
184 |
-
color: #fff;
|
185 |
-
}
|
186 |
-
|
187 |
-
.wp-core-ui .button-gdpr:active,
|
188 |
-
.wp-core-ui .button-gdpr:focus {
|
189 |
-
background: #0095a8;
|
190 |
-
border-color: #ccc;
|
191 |
-
color: #fff;
|
192 |
-
box-shadow: 0 0 2px 1px #5b9cd9;
|
193 |
-
}
|
194 |
-
|
195 |
-
.wp-core-ui .button-primary {
|
196 |
-
background-color: #ffa200;
|
197 |
-
border-color: #ffa200;
|
198 |
-
color: #fff;
|
199 |
-
text-shadow: none;
|
200 |
-
-webkit-box-shadow: 0 1px 1px #ccc;
|
201 |
-
box-shadow: 0 1px 1px #ccc;
|
202 |
-
}
|
203 |
-
|
204 |
-
.wp-core-ui .button-primary:hover {
|
205 |
-
background: #ffc35c;
|
206 |
-
border-color: #ffc35c;
|
207 |
-
color: #fff;
|
208 |
-
}
|
209 |
-
|
210 |
-
.wp-core-ui .button-primary:active,
|
211 |
-
.wp-core-ui .button-primary:focus {
|
212 |
-
background-color: #ffa200;
|
213 |
-
border-color: #ccc;
|
214 |
-
color: #fff;
|
215 |
-
box-shadow: 0 0 2px 1px #5b9cd9;
|
216 |
-
}
|
217 |
-
|
218 |
-
.wp-core-ui.gdpr-installer .button-right {
|
219 |
-
float: right;
|
220 |
-
}
|
221 |
-
|
222 |
-
.wp-core-ui .button.button-gdpr-large {
|
223 |
-
font-size: 14px;
|
224 |
-
padding: 4px 15px;
|
225 |
-
height: auto;
|
226 |
-
}
|
227 |
-
|
228 |
-
.gdpr-footer-links {
|
229 |
-
text-align: center;
|
230 |
-
}
|
231 |
-
|
232 |
-
.wp-core-ui .button-center {
|
233 |
-
display: block;
|
234 |
-
margin: 25px auto 10px;
|
235 |
-
}
|
236 |
-
|
237 |
-
.gdpr-installer label {
|
238 |
-
color: #666;
|
239 |
-
font-size: 14px;
|
240 |
-
font-weight: 500;
|
241 |
-
margin-bottom: .5em;
|
242 |
-
margin-top: 1em;
|
243 |
-
display: block;
|
244 |
-
cursor: pointer;
|
245 |
-
}
|
246 |
-
|
247 |
-
.gdpr-installer input[type=text],
|
248 |
-
.gdpr-installer input[type=email] {
|
249 |
-
border: 1px solid #aaa;
|
250 |
-
border-color: #ddd;
|
251 |
-
border-radius: 4px;
|
252 |
-
height: 30px;
|
253 |
-
width: calc(100% - 8px - 24px - 2px);
|
254 |
-
padding-left: 8px;
|
255 |
-
padding-right: 24px;
|
256 |
-
color: #444;
|
257 |
-
background-color: #fff;
|
258 |
-
display: inline-block;
|
259 |
-
}
|
260 |
-
|
261 |
-
.gdpr-installer input + em {
|
262 |
-
display: block;
|
263 |
-
margin-top: 5px;
|
264 |
-
}
|
265 |
-
|
266 |
-
.gdpr-installer .select2 + em {
|
267 |
-
display: block;
|
268 |
-
margin-top: 5px;
|
269 |
-
}
|
270 |
-
|
271 |
-
.gdpr-installer textarea {
|
272 |
-
width: calc(100% - 8px - 24px - 2px);
|
273 |
-
height: 80px;
|
274 |
-
}
|
275 |
-
|
276 |
-
.gdpr-installer .select2-container {
|
277 |
-
display: block;
|
278 |
-
width: 300px;
|
279 |
-
max-width: 100%;
|
280 |
-
}
|
281 |
-
|
282 |
-
.gdpr-select {
|
283 |
-
width: 300px;
|
284 |
-
max-width: 100%;
|
285 |
-
}
|
286 |
-
|
287 |
-
.hidden {
|
288 |
-
display: none;
|
289 |
-
}
|
290 |
-
|
291 |
-
.gdpr-installer fieldset {
|
292 |
-
margin: -20px 0 0 0;
|
293 |
-
}
|
294 |
-
|
295 |
-
.wp-core-ui .button-side {
|
296 |
-
min-width: 220px;
|
297 |
-
text-align: center;
|
298 |
-
margin-right: 15px;
|
299 |
-
}
|
300 |
-
|
301 |
-
.align-center {
|
302 |
-
text-align: center;
|
303 |
-
}
|
304 |
-
|
305 |
-
.section {
|
306 |
-
margin: 25px 0;
|
307 |
-
}
|
308 |
-
|
309 |
-
.row {
|
310 |
-
box-sizing: border-box;
|
311 |
-
display: -webkit-box;
|
312 |
-
display: -ms-flexbox;
|
313 |
-
display: flex;
|
314 |
-
-ms-flex-wrap: wrap;
|
315 |
-
flex-wrap: wrap;
|
316 |
-
margin-right: -8px;
|
317 |
-
margin-left: -8px;
|
318 |
-
-webkit-box-pack: center !important;
|
319 |
-
-ms-flex-pack: center !important;
|
320 |
-
justify-content: center !important;
|
321 |
-
}
|
322 |
-
|
323 |
-
.col {
|
324 |
-
box-sizing: border-box;
|
325 |
-
position: relative;
|
326 |
-
width: 100%;
|
327 |
-
min-height: 1px;
|
328 |
-
padding-right: 8px;
|
329 |
-
padding-left: 8px;
|
330 |
-
margin-bottom: 15px;
|
331 |
-
}
|
332 |
-
|
333 |
-
@media (min-width: 576px) {
|
334 |
-
.col {
|
335 |
-
-webkit-box-flex: 0;
|
336 |
-
-ms-flex: 0 0 50%;
|
337 |
-
flex: 0 0 50%;
|
338 |
-
max-width: 50%;
|
339 |
-
}
|
340 |
-
}
|
341 |
-
|
342 |
-
@media (min-width: 768px) {
|
343 |
-
.col {
|
344 |
-
-webkit-box-flex: 0;
|
345 |
-
-ms-flex: 0 0 33.33333%;
|
346 |
-
flex: 0 0 33.33333%;
|
347 |
-
max-width: 33.33333%;
|
348 |
-
}
|
349 |
-
}
|
350 |
-
|
351 |
-
.wp-core-ui .col .button {
|
352 |
-
display: block;
|
353 |
-
text-align: center;
|
354 |
-
}
|
355 |
-
|
356 |
-
.col_image {
|
357 |
-
background-position: center;
|
358 |
-
background-repeat: no-repeat;
|
359 |
-
background-size: cover;
|
360 |
-
border-radius: 6px;
|
361 |
-
background-color: #e5e5e5;
|
362 |
-
padding-bottom: 60%;
|
363 |
-
margin-bottom: 15px;
|
364 |
-
position: relative;
|
365 |
-
}
|
366 |
-
|
367 |
-
.col_image:after {
|
368 |
-
content: '';
|
369 |
-
position: absolute;
|
370 |
-
top: 0;
|
371 |
-
left: 0;
|
372 |
-
width: 100%;
|
373 |
-
height: 100%;
|
374 |
-
background-color: #ffa200;
|
375 |
-
opacity: .15;
|
376 |
-
}
|
377 |
-
|
378 |
-
/* jQuery UI hacks */
|
379 |
-
.ui-tabs {
|
380 |
-
position: relative;
|
381 |
-
padding: .2em;
|
382 |
-
}
|
383 |
-
|
384 |
-
.ui-tabs-nav {
|
385 |
-
margin: 0;
|
386 |
-
padding: .2em .2em 0;
|
387 |
-
}
|
388 |
-
|
389 |
-
.ui-helper-clearfix {
|
390 |
-
min-height: 0;
|
391 |
-
}
|
392 |
-
|
393 |
-
.ui-helper-reset {
|
394 |
-
margin: 0;
|
395 |
-
padding: 0;
|
396 |
-
border: 0;
|
397 |
-
outline: 0;
|
398 |
-
line-height: 1.3;
|
399 |
-
text-decoration: none;
|
400 |
-
font-size: 100%;
|
401 |
-
list-style: none;
|
402 |
-
}
|
403 |
-
|
404 |
-
.ui-helper-clearfix:before, .ui-helper-clearfix:after {
|
405 |
-
content: "";
|
406 |
-
display: table;
|
407 |
-
border-collapse: collapse;
|
408 |
-
}
|
409 |
-
|
410 |
-
.ui-helper-clearfix:after {
|
411 |
-
clear: both;
|
412 |
-
}
|
413 |
-
|
414 |
-
.ui-tabs .ui-tabs-nav li {
|
415 |
-
list-style: none;
|
416 |
-
float: left;
|
417 |
-
position: relative;
|
418 |
-
top: 0;
|
419 |
-
margin: 1px .2em 0 0;
|
420 |
-
border-bottom-width: 0;
|
421 |
-
padding: 0;
|
422 |
-
white-space: nowrap;
|
423 |
-
background: #eee;
|
424 |
-
}
|
425 |
-
|
426 |
-
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
|
427 |
-
float: left;
|
428 |
-
padding: .5em 1em;
|
429 |
-
text-decoration: none;
|
430 |
-
}
|
431 |
-
|
432 |
-
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
|
433 |
-
background: #fff;
|
434 |
-
}
|
435 |
-
|
436 |
-
.handle {
|
437 |
-
cursor: move;
|
438 |
-
}
|
439 |
-
|
440 |
-
.gdpr-table {
|
441 |
-
width: 100%;
|
442 |
-
}
|
443 |
-
|
444 |
-
.gdpr-footer-links {
|
445 |
-
padding-bottom: 50px;
|
446 |
-
}
|
447 |
-
|
448 |
-
.slidePadding {
|
449 |
-
display: block;
|
450 |
-
padding-top: 1px;
|
451 |
-
padding-bottom: 1px;
|
452 |
-
}
|
453 |
-
|
454 |
-
.gdpr-installer p.error {
|
455 |
-
font-size: 16px;
|
456 |
-
font-weight: 700;
|
457 |
-
color: #e34639;
|
458 |
-
}
|
459 |
-
|
460 |
-
/* gdpr-breadcrumbs */
|
461 |
-
.gdpr-breadcrumbs {
|
462 |
-
margin-bottom: 22px;
|
463 |
-
}
|
464 |
-
|
465 |
-
.gdpr-breadcrumbs:after {
|
466 |
-
display: block;
|
467 |
-
clear: both;
|
468 |
-
content: '';
|
469 |
-
}
|
470 |
-
|
471 |
-
.gdpr-breadcrumbs_unit {
|
472 |
-
box-sizing: border-box;
|
473 |
-
float: left;
|
474 |
-
width: 50%;
|
475 |
-
font-size: 14px;
|
476 |
-
line-height: 26px;
|
477 |
-
padding-right: 15px;
|
478 |
-
}
|
479 |
-
|
480 |
-
.gdpr-breadcrumbs_unit:nth-child(3),
|
481 |
-
.gdpr-breadcrumbs_unit:nth-child(4) {
|
482 |
-
margin-top: 10px;
|
483 |
-
}
|
484 |
-
|
485 |
-
.gdpr-breadcrumbs_item {
|
486 |
-
background-color: #dddddd;
|
487 |
-
padding: 2px 0;
|
488 |
-
text-align: center;
|
489 |
-
position: relative;
|
490 |
-
color: #555555;
|
491 |
-
padding-left: 8px;
|
492 |
-
}
|
493 |
-
|
494 |
-
.gdpr-breadcrumbs_item:after {
|
495 |
-
position: absolute;
|
496 |
-
right: -15px;
|
497 |
-
top: 0;
|
498 |
-
content: '';
|
499 |
-
width: 0;
|
500 |
-
height: 0;
|
501 |
-
border-style: solid;
|
502 |
-
border-width: 15px 0 15px 15px;
|
503 |
-
border-color: transparent transparent transparent #dddddd;
|
504 |
-
}
|
505 |
-
|
506 |
-
.gdpr-breadcrumbs_item:before {
|
507 |
-
position: absolute;
|
508 |
-
left: 0;
|
509 |
-
top: 0;
|
510 |
-
content: '';
|
511 |
-
width: 0;
|
512 |
-
height: 0;
|
513 |
-
border-style: solid;
|
514 |
-
border-width: 15px 0 15px 15px;
|
515 |
-
border-color: transparent transparent transparent #f1f1f1;
|
516 |
-
}
|
517 |
-
|
518 |
-
.gdpr-breadcrumbs_unit.active .gdpr-breadcrumbs_item {
|
519 |
-
background-color: #0095a8;
|
520 |
-
color: #fff;
|
521 |
-
font-weight: 700;
|
522 |
-
}
|
523 |
-
|
524 |
-
.gdpr-breadcrumbs_unit.active .gdpr-breadcrumbs_item:after {
|
525 |
-
border-color: transparent transparent transparent #0095a8;
|
526 |
-
}
|
527 |
-
|
528 |
-
.gdpr-breadcrumbs_unit:first-child .gdpr-breadcrumbs_item:before,
|
529 |
-
.gdpr-breadcrumbs_unit:last-child .gdpr-breadcrumbs_item:after {
|
530 |
-
display: none;
|
531 |
-
}
|
532 |
-
|
533 |
-
.gdpr-breadcrumbs_unit:last-child {
|
534 |
-
padding: 0;
|
535 |
-
}
|
536 |
-
|
537 |
-
.gdpr-breadcrumbs_unit:last-child .gdpr-breadcrumbs_item {
|
538 |
-
padding-left: 0;
|
539 |
-
}
|
540 |
-
|
541 |
-
@media (min-width: 576px) {
|
542 |
-
.gdpr-breadcrumbs_unit {
|
543 |
-
width: 25%;
|
544 |
-
}
|
545 |
-
|
546 |
-
.gdpr-breadcrumbs_unit:nth-child(3),
|
547 |
-
.gdpr-breadcrumbs_unit:nth-child(4) {
|
548 |
-
margin-top: 0;
|
549 |
-
}
|
550 |
-
}
|
1 |
+
.gdpr-installer-container {
|
2 |
+
max-width: 720px;
|
3 |
+
margin: 30px auto;
|
4 |
+
font-size: 14px;
|
5 |
+
}
|
6 |
+
|
7 |
+
.gdpr-step-button-prev {
|
8 |
+
display: block;
|
9 |
+
float: left;
|
10 |
+
}
|
11 |
+
|
12 |
+
.gdpr-step-button-next {
|
13 |
+
display: block;
|
14 |
+
float: right;
|
15 |
+
}
|
16 |
+
|
17 |
+
.gdpr-header {
|
18 |
+
margin: 0 auto 30px;
|
19 |
+
overflow: hidden;
|
20 |
+
padding: 0 16px;
|
21 |
+
text-align: center;
|
22 |
+
}
|
23 |
+
|
24 |
+
.gdpr-header_left {
|
25 |
+
float: left;
|
26 |
+
width: 100%;
|
27 |
+
}
|
28 |
+
|
29 |
+
.gdpr-header_right {
|
30 |
+
float: left;
|
31 |
+
width: 100%;
|
32 |
+
}
|
33 |
+
|
34 |
+
@media (min-width: 576px) {
|
35 |
+
.gdpr-header {
|
36 |
+
text-align: left;
|
37 |
+
}
|
38 |
+
|
39 |
+
.gdpr-header_left {
|
40 |
+
width: 175px;
|
41 |
+
padding-right: 15px;
|
42 |
+
padding-top: 25px;
|
43 |
+
}
|
44 |
+
|
45 |
+
.gdpr-header_right {
|
46 |
+
width: calc(100% - 235px);
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
@media (min-width: 768px) {
|
51 |
+
.gdpr-header {
|
52 |
+
padding: 0;
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
.gdpr-logo {
|
57 |
+
width: 100px;
|
58 |
+
}
|
59 |
+
|
60 |
+
.gdpr-header h1 {
|
61 |
+
font-size: 1.8em;
|
62 |
+
line-height: normal;
|
63 |
+
margin-top: 15px;
|
64 |
+
margin-bottom: 20px;
|
65 |
+
font-weight: 700;
|
66 |
+
}
|
67 |
+
|
68 |
+
.gdpr-header h2 {
|
69 |
+
float: left;
|
70 |
+
}
|
71 |
+
|
72 |
+
.gdpr-installer .gdpr-content {
|
73 |
+
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .13);
|
74 |
+
box-shadow: 0 1px 3px rgba(0, 0, 0, .13);
|
75 |
+
padding: 16px;
|
76 |
+
margin: 0 0 20px;
|
77 |
+
background: #fff;
|
78 |
+
overflow: hidden;
|
79 |
+
zoom: 1;
|
80 |
+
}
|
81 |
+
|
82 |
+
.gdpr-installer .spacer {
|
83 |
+
margin-top: 2em;
|
84 |
+
}
|
85 |
+
|
86 |
+
.gdpr-installer .gdpr-content p {
|
87 |
+
font-size: 14px;
|
88 |
+
line-height: 26px;
|
89 |
+
color: #555;
|
90 |
+
}
|
91 |
+
|
92 |
+
.gdpr-installer .gdpr-content p:last-child {
|
93 |
+
margin-bottom: 0;
|
94 |
+
}
|
95 |
+
|
96 |
+
.gdpr-content a {
|
97 |
+
color: #0095a7;
|
98 |
+
font-weight: 700;
|
99 |
+
text-decoration: none;
|
100 |
+
box-shadow: none;
|
101 |
+
}
|
102 |
+
|
103 |
+
.gdpr-content a:hover,
|
104 |
+
.gdpr-content a:focus {
|
105 |
+
outline: none;
|
106 |
+
text-decoration: none;
|
107 |
+
color: #000;
|
108 |
+
}
|
109 |
+
|
110 |
+
.gdpr-installer .gdpr-content li {
|
111 |
+
margin-left: 20px;
|
112 |
+
list-style-type: disc;
|
113 |
+
}
|
114 |
+
|
115 |
+
.gdpr-installer .gdpr-content select {
|
116 |
+
height: 32px;
|
117 |
+
border-color: #ddd;
|
118 |
+
background-color: #fff;
|
119 |
+
border: 1px solid #aaa;
|
120 |
+
border-radius: 4px;
|
121 |
+
box-sizing: border-box;
|
122 |
+
cursor: pointer;
|
123 |
+
display: block;
|
124 |
+
padding: 0 6px;
|
125 |
+
color: #666;
|
126 |
+
}
|
127 |
+
|
128 |
+
.select2-container .select2-selection--single {
|
129 |
+
height: 32px !important;
|
130 |
+
}
|
131 |
+
|
132 |
+
.gdpr-installer .gdpr-content h1 {
|
133 |
+
font-weight: 700;
|
134 |
+
line-height: normal;
|
135 |
+
}
|
136 |
+
|
137 |
+
.gdpr-installer .gdpr-content h2 {
|
138 |
+
font-size: 22px;
|
139 |
+
line-height: 32px;
|
140 |
+
font-weight: 700;
|
141 |
+
}
|
142 |
+
|
143 |
+
.gdpr-installer .gdpr-content h3 {
|
144 |
+
font-size: 18px;
|
145 |
+
line-height: 22px;
|
146 |
+
font-weight: 700;
|
147 |
+
}
|
148 |
+
|
149 |
+
.wp-core-ui .button {
|
150 |
+
font-size: 14px;
|
151 |
+
line-height: 28px;
|
152 |
+
padding: 4px 15px;
|
153 |
+
height: auto;
|
154 |
+
border: 1px solid #ccc;
|
155 |
+
box-shadow: 0 1px 0 #ccc;
|
156 |
+
-webkit-box-shadow: 0 1px 1px #ccc;
|
157 |
+
transition: .1s;
|
158 |
+
}
|
159 |
+
|
160 |
+
.wp-core-ui .button:hover {
|
161 |
+
box-shadow: 0 1px 1px #ccc;
|
162 |
+
-webkit-box-shadow: 0 1px 1px #ccc;
|
163 |
+
border: 1px solid #ccc;
|
164 |
+
background: #fff;
|
165 |
+
}
|
166 |
+
|
167 |
+
.wp-core-ui .button:focus {
|
168 |
+
box-shadow: 0 0 2px 1px #5b9cd9;
|
169 |
+
}
|
170 |
+
|
171 |
+
.wp-core-ui .button-gdpr {
|
172 |
+
background: #0095a8;
|
173 |
+
border-color: #0095a8;
|
174 |
+
-webkit-box-shadow: 0 1px 1px #ccc;
|
175 |
+
box-shadow: 0 1px 1px #ccc;
|
176 |
+
color: #fff;
|
177 |
+
text-decoration: none;
|
178 |
+
transition: .1s;
|
179 |
+
}
|
180 |
+
|
181 |
+
.wp-core-ui .button-gdpr:hover {
|
182 |
+
background: #79c2cb;
|
183 |
+
border-color: #79c2cb;
|
184 |
+
color: #fff;
|
185 |
+
}
|
186 |
+
|
187 |
+
.wp-core-ui .button-gdpr:active,
|
188 |
+
.wp-core-ui .button-gdpr:focus {
|
189 |
+
background: #0095a8;
|
190 |
+
border-color: #ccc;
|
191 |
+
color: #fff;
|
192 |
+
box-shadow: 0 0 2px 1px #5b9cd9;
|
193 |
+
}
|
194 |
+
|
195 |
+
.wp-core-ui .button-primary {
|
196 |
+
background-color: #ffa200;
|
197 |
+
border-color: #ffa200;
|
198 |
+
color: #fff;
|
199 |
+
text-shadow: none;
|
200 |
+
-webkit-box-shadow: 0 1px 1px #ccc;
|
201 |
+
box-shadow: 0 1px 1px #ccc;
|
202 |
+
}
|
203 |
+
|
204 |
+
.wp-core-ui .button-primary:hover {
|
205 |
+
background: #ffc35c;
|
206 |
+
border-color: #ffc35c;
|
207 |
+
color: #fff;
|
208 |
+
}
|
209 |
+
|
210 |
+
.wp-core-ui .button-primary:active,
|
211 |
+
.wp-core-ui .button-primary:focus {
|
212 |
+
background-color: #ffa200;
|
213 |
+
border-color: #ccc;
|
214 |
+
color: #fff;
|
215 |
+
box-shadow: 0 0 2px 1px #5b9cd9;
|
216 |
+
}
|
217 |
+
|
218 |
+
.wp-core-ui.gdpr-installer .button-right {
|
219 |
+
float: right;
|
220 |
+
}
|
221 |
+
|
222 |
+
.wp-core-ui .button.button-gdpr-large {
|
223 |
+
font-size: 14px;
|
224 |
+
padding: 4px 15px;
|
225 |
+
height: auto;
|
226 |
+
}
|
227 |
+
|
228 |
+
.gdpr-footer-links {
|
229 |
+
text-align: center;
|
230 |
+
}
|
231 |
+
|
232 |
+
.wp-core-ui .button-center {
|
233 |
+
display: block;
|
234 |
+
margin: 25px auto 10px;
|
235 |
+
}
|
236 |
+
|
237 |
+
.gdpr-installer label {
|
238 |
+
color: #666;
|
239 |
+
font-size: 14px;
|
240 |
+
font-weight: 500;
|
241 |
+
margin-bottom: .5em;
|
242 |
+
margin-top: 1em;
|
243 |
+
display: block;
|
244 |
+
cursor: pointer;
|
245 |
+
}
|
246 |
+
|
247 |
+
.gdpr-installer input[type=text],
|
248 |
+
.gdpr-installer input[type=email] {
|
249 |
+
border: 1px solid #aaa;
|
250 |
+
border-color: #ddd;
|
251 |
+
border-radius: 4px;
|
252 |
+
height: 30px;
|
253 |
+
width: calc(100% - 8px - 24px - 2px);
|
254 |
+
padding-left: 8px;
|
255 |
+
padding-right: 24px;
|
256 |
+
color: #444;
|
257 |
+
background-color: #fff;
|
258 |
+
display: inline-block;
|
259 |
+
}
|
260 |
+
|
261 |
+
.gdpr-installer input + em {
|
262 |
+
display: block;
|
263 |
+
margin-top: 5px;
|
264 |
+
}
|
265 |
+
|
266 |
+
.gdpr-installer .select2 + em {
|
267 |
+
display: block;
|
268 |
+
margin-top: 5px;
|
269 |
+
}
|
270 |
+
|
271 |
+
.gdpr-installer textarea {
|
272 |
+
width: calc(100% - 8px - 24px - 2px);
|
273 |
+
height: 80px;
|
274 |
+
}
|
275 |
+
|
276 |
+
.gdpr-installer .select2-container {
|
277 |
+
display: block;
|
278 |
+
width: 300px;
|
279 |
+
max-width: 100%;
|
280 |
+
}
|
281 |
+
|
282 |
+
.gdpr-select {
|
283 |
+
width: 300px;
|
284 |
+
max-width: 100%;
|
285 |
+
}
|
286 |
+
|
287 |
+
.hidden {
|
288 |
+
display: none;
|
289 |
+
}
|
290 |
+
|
291 |
+
.gdpr-installer fieldset {
|
292 |
+
margin: -20px 0 0 0;
|
293 |
+
}
|
294 |
+
|
295 |
+
.wp-core-ui .button-side {
|
296 |
+
min-width: 220px;
|
297 |
+
text-align: center;
|
298 |
+
margin-right: 15px;
|
299 |
+
}
|
300 |
+
|
301 |
+
.align-center {
|
302 |
+
text-align: center;
|
303 |
+
}
|
304 |
+
|
305 |
+
.section {
|
306 |
+
margin: 25px 0;
|
307 |
+
}
|
308 |
+
|
309 |
+
.row {
|
310 |
+
box-sizing: border-box;
|
311 |
+
display: -webkit-box;
|
312 |
+
display: -ms-flexbox;
|
313 |
+
display: flex;
|
314 |
+
-ms-flex-wrap: wrap;
|
315 |
+
flex-wrap: wrap;
|
316 |
+
margin-right: -8px;
|
317 |
+
margin-left: -8px;
|
318 |
+
-webkit-box-pack: center !important;
|
319 |
+
-ms-flex-pack: center !important;
|
320 |
+
justify-content: center !important;
|
321 |
+
}
|
322 |
+
|
323 |
+
.col {
|
324 |
+
box-sizing: border-box;
|
325 |
+
position: relative;
|
326 |
+
width: 100%;
|
327 |
+
min-height: 1px;
|
328 |
+
padding-right: 8px;
|
329 |
+
padding-left: 8px;
|
330 |
+
margin-bottom: 15px;
|
331 |
+
}
|
332 |
+
|
333 |
+
@media (min-width: 576px) {
|
334 |
+
.col {
|
335 |
+
-webkit-box-flex: 0;
|
336 |
+
-ms-flex: 0 0 50%;
|
337 |
+
flex: 0 0 50%;
|
338 |
+
max-width: 50%;
|
339 |
+
}
|
340 |
+
}
|
341 |
+
|
342 |
+
@media (min-width: 768px) {
|
343 |
+
.col {
|
344 |
+
-webkit-box-flex: 0;
|
345 |
+
-ms-flex: 0 0 33.33333%;
|
346 |
+
flex: 0 0 33.33333%;
|
347 |
+
max-width: 33.33333%;
|
348 |
+
}
|
349 |
+
}
|
350 |
+
|
351 |
+
.wp-core-ui .col .button {
|
352 |
+
display: block;
|
353 |
+
text-align: center;
|
354 |
+
}
|
355 |
+
|
356 |
+
.col_image {
|
357 |
+
background-position: center;
|
358 |
+
background-repeat: no-repeat;
|
359 |
+
background-size: cover;
|
360 |
+
border-radius: 6px;
|
361 |
+
background-color: #e5e5e5;
|
362 |
+
padding-bottom: 60%;
|
363 |
+
margin-bottom: 15px;
|
364 |
+
position: relative;
|
365 |
+
}
|
366 |
+
|
367 |
+
.col_image:after {
|
368 |
+
content: '';
|
369 |
+
position: absolute;
|
370 |
+
top: 0;
|
371 |
+
left: 0;
|
372 |
+
width: 100%;
|
373 |
+
height: 100%;
|
374 |
+
background-color: #ffa200;
|
375 |
+
opacity: .15;
|
376 |
+
}
|
377 |
+
|
378 |
+
/* jQuery UI hacks */
|
379 |
+
.ui-tabs {
|
380 |
+
position: relative;
|
381 |
+
padding: .2em;
|
382 |
+
}
|
383 |
+
|
384 |
+
.ui-tabs-nav {
|
385 |
+
margin: 0;
|
386 |
+
padding: .2em .2em 0;
|
387 |
+
}
|
388 |
+
|
389 |
+
.ui-helper-clearfix {
|
390 |
+
min-height: 0;
|
391 |
+
}
|
392 |
+
|
393 |
+
.ui-helper-reset {
|
394 |
+
margin: 0;
|
395 |
+
padding: 0;
|
396 |
+
border: 0;
|
397 |
+
outline: 0;
|
398 |
+
line-height: 1.3;
|
399 |
+
text-decoration: none;
|
400 |
+
font-size: 100%;
|
401 |
+
list-style: none;
|
402 |
+
}
|
403 |
+
|
404 |
+
.ui-helper-clearfix:before, .ui-helper-clearfix:after {
|
405 |
+
content: "";
|
406 |
+
display: table;
|
407 |
+
border-collapse: collapse;
|
408 |
+
}
|
409 |
+
|
410 |
+
.ui-helper-clearfix:after {
|
411 |
+
clear: both;
|
412 |
+
}
|
413 |
+
|
414 |
+
.ui-tabs .ui-tabs-nav li {
|
415 |
+
list-style: none;
|
416 |
+
float: left;
|
417 |
+
position: relative;
|
418 |
+
top: 0;
|
419 |
+
margin: 1px .2em 0 0;
|
420 |
+
border-bottom-width: 0;
|
421 |
+
padding: 0;
|
422 |
+
white-space: nowrap;
|
423 |
+
background: #eee;
|
424 |
+
}
|
425 |
+
|
426 |
+
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
|
427 |
+
float: left;
|
428 |
+
padding: .5em 1em;
|
429 |
+
text-decoration: none;
|
430 |
+
}
|
431 |
+
|
432 |
+
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
|
433 |
+
background: #fff;
|
434 |
+
}
|
435 |
+
|
436 |
+
.handle {
|
437 |
+
cursor: move;
|
438 |
+
}
|
439 |
+
|
440 |
+
.gdpr-table {
|
441 |
+
width: 100%;
|
442 |
+
}
|
443 |
+
|
444 |
+
.gdpr-footer-links {
|
445 |
+
padding-bottom: 50px;
|
446 |
+
}
|
447 |
+
|
448 |
+
.slidePadding {
|
449 |
+
display: block;
|
450 |
+
padding-top: 1px;
|
451 |
+
padding-bottom: 1px;
|
452 |
+
}
|
453 |
+
|
454 |
+
.gdpr-installer p.error {
|
455 |
+
font-size: 16px;
|
456 |
+
font-weight: 700;
|
457 |
+
color: #e34639;
|
458 |
+
}
|
459 |
+
|
460 |
+
/* gdpr-breadcrumbs */
|
461 |
+
.gdpr-breadcrumbs {
|
462 |
+
margin-bottom: 22px;
|
463 |
+
}
|
464 |
+
|
465 |
+
.gdpr-breadcrumbs:after {
|
466 |
+
display: block;
|
467 |
+
clear: both;
|
468 |
+
content: '';
|
469 |
+
}
|
470 |
+
|
471 |
+
.gdpr-breadcrumbs_unit {
|
472 |
+
box-sizing: border-box;
|
473 |
+
float: left;
|
474 |
+
width: 50%;
|
475 |
+
font-size: 14px;
|
476 |
+
line-height: 26px;
|
477 |
+
padding-right: 15px;
|
478 |
+
}
|
479 |
+
|
480 |
+
.gdpr-breadcrumbs_unit:nth-child(3),
|
481 |
+
.gdpr-breadcrumbs_unit:nth-child(4) {
|
482 |
+
margin-top: 10px;
|
483 |
+
}
|
484 |
+
|
485 |
+
.gdpr-breadcrumbs_item {
|
486 |
+
background-color: #dddddd;
|
487 |
+
padding: 2px 0;
|
488 |
+
text-align: center;
|
489 |
+
position: relative;
|
490 |
+
color: #555555;
|
491 |
+
padding-left: 8px;
|
492 |
+
}
|
493 |
+
|
494 |
+
.gdpr-breadcrumbs_item:after {
|
495 |
+
position: absolute;
|
496 |
+
right: -15px;
|
497 |
+
top: 0;
|
498 |
+
content: '';
|
499 |
+
width: 0;
|
500 |
+
height: 0;
|
501 |
+
border-style: solid;
|
502 |
+
border-width: 15px 0 15px 15px;
|
503 |
+
border-color: transparent transparent transparent #dddddd;
|
504 |
+
}
|
505 |
+
|
506 |
+
.gdpr-breadcrumbs_item:before {
|
507 |
+
position: absolute;
|
508 |
+
left: 0;
|
509 |
+
top: 0;
|
510 |
+
content: '';
|
511 |
+
width: 0;
|
512 |
+
height: 0;
|
513 |
+
border-style: solid;
|
514 |
+
border-width: 15px 0 15px 15px;
|
515 |
+
border-color: transparent transparent transparent #f1f1f1;
|
516 |
+
}
|
517 |
+
|
518 |
+
.gdpr-breadcrumbs_unit.active .gdpr-breadcrumbs_item {
|
519 |
+
background-color: #0095a8;
|
520 |
+
color: #fff;
|
521 |
+
font-weight: 700;
|
522 |
+
}
|
523 |
+
|
524 |
+
.gdpr-breadcrumbs_unit.active .gdpr-breadcrumbs_item:after {
|
525 |
+
border-color: transparent transparent transparent #0095a8;
|
526 |
+
}
|
527 |
+
|
528 |
+
.gdpr-breadcrumbs_unit:first-child .gdpr-breadcrumbs_item:before,
|
529 |
+
.gdpr-breadcrumbs_unit:last-child .gdpr-breadcrumbs_item:after {
|
530 |
+
display: none;
|
531 |
+
}
|
532 |
+
|
533 |
+
.gdpr-breadcrumbs_unit:last-child {
|
534 |
+
padding: 0;
|
535 |
+
}
|
536 |
+
|
537 |
+
.gdpr-breadcrumbs_unit:last-child .gdpr-breadcrumbs_item {
|
538 |
+
padding-left: 0;
|
539 |
+
}
|
540 |
+
|
541 |
+
@media (min-width: 576px) {
|
542 |
+
.gdpr-breadcrumbs_unit {
|
543 |
+
width: 25%;
|
544 |
+
}
|
545 |
+
|
546 |
+
.gdpr-breadcrumbs_unit:nth-child(3),
|
547 |
+
.gdpr-breadcrumbs_unit:nth-child(4) {
|
548 |
+
margin-top: 0;
|
549 |
+
}
|
550 |
+
}
|
assets/gdpr-installer.js
CHANGED
@@ -1,58 +1,58 @@
|
|
1 |
-
jQuery(function ($) {
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Init select2
|
5 |
-
*/
|
6 |
-
$('.js-gdpr-select2').select2({
|
7 |
-
width: 'style'
|
8 |
-
});
|
9 |
-
|
10 |
-
$('#tabs').tabs();
|
11 |
-
|
12 |
-
$(".sortable").sortable();
|
13 |
-
|
14 |
-
/**
|
15 |
-
* https://github.com/DubFriend/jquery.repeater
|
16 |
-
*/
|
17 |
-
$repeater = $('.js-gdpr-repeater');
|
18 |
-
if ($repeater.length) {
|
19 |
-
$repeater.repeater({
|
20 |
-
ready: function (setIndexes) {
|
21 |
-
$(".sortable").on('sortupdate', setIndexes);
|
22 |
-
}
|
23 |
-
});
|
24 |
-
|
25 |
-
if (typeof window.gdprConsentTypes !== undefined) {
|
26 |
-
$repeater.setList(window.gdprConsentTypes);
|
27 |
-
}
|
28 |
-
}
|
29 |
-
|
30 |
-
/**
|
31 |
-
* Auto-fill DPA info
|
32 |
-
*/
|
33 |
-
$('.js-gdpr-country-selector').on('change', function () {
|
34 |
-
var dpaData, $website, $email, $phone;
|
35 |
-
var countryCode = $(this).val();
|
36 |
-
|
37 |
-
if (!window.gdprDpaData[countryCode]) {
|
38 |
-
return;
|
39 |
-
}
|
40 |
-
|
41 |
-
dpaData = window.gdprDpaData[countryCode];
|
42 |
-
|
43 |
-
$website = $('#gdpr_dpa_website');
|
44 |
-
if ('' === $website.data('set')) {
|
45 |
-
$website.val(dpaData['website']);
|
46 |
-
}
|
47 |
-
|
48 |
-
$email = $('#gdpr_dpa_email');
|
49 |
-
if ('' === $email.data('set')) {
|
50 |
-
$email.val(dpaData['email']);
|
51 |
-
}
|
52 |
-
|
53 |
-
$phone = $('#gdpr_dpa_phone');
|
54 |
-
if ('' === $phone.data('set')) {
|
55 |
-
$phone.val(dpaData['phone']);
|
56 |
-
}
|
57 |
-
});
|
58 |
-
});
|
1 |
+
jQuery(function ($) {
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Init select2
|
5 |
+
*/
|
6 |
+
$('.js-gdpr-select2').select2({
|
7 |
+
width: 'style'
|
8 |
+
});
|
9 |
+
|
10 |
+
$('#tabs').tabs();
|
11 |
+
|
12 |
+
$(".sortable").sortable();
|
13 |
+
|
14 |
+
/**
|
15 |
+
* https://github.com/DubFriend/jquery.repeater
|
16 |
+
*/
|
17 |
+
$repeater = $('.js-gdpr-repeater');
|
18 |
+
if ($repeater.length) {
|
19 |
+
$repeater.repeater({
|
20 |
+
ready: function (setIndexes) {
|
21 |
+
$(".sortable").on('sortupdate', setIndexes);
|
22 |
+
}
|
23 |
+
});
|
24 |
+
|
25 |
+
if (typeof window.gdprConsentTypes !== undefined) {
|
26 |
+
$repeater.setList(window.gdprConsentTypes);
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Auto-fill DPA info
|
32 |
+
*/
|
33 |
+
$('.js-gdpr-country-selector').on('change', function () {
|
34 |
+
var dpaData, $website, $email, $phone;
|
35 |
+
var countryCode = $(this).val();
|
36 |
+
|
37 |
+
if (!window.gdprDpaData[countryCode]) {
|
38 |
+
return;
|
39 |
+
}
|
40 |
+
|
41 |
+
dpaData = window.gdprDpaData[countryCode];
|
42 |
+
|
43 |
+
$website = $('#gdpr_dpa_website');
|
44 |
+
if ('' === $website.data('set')) {
|
45 |
+
$website.val(dpaData['website']);
|
46 |
+
}
|
47 |
+
|
48 |
+
$email = $('#gdpr_dpa_email');
|
49 |
+
if ('' === $email.data('set')) {
|
50 |
+
$email.val(dpaData['email']);
|
51 |
+
}
|
52 |
+
|
53 |
+
$phone = $('#gdpr_dpa_phone');
|
54 |
+
if ('' === $phone.data('set')) {
|
55 |
+
$phone.val(dpaData['phone']);
|
56 |
+
}
|
57 |
+
});
|
58 |
+
});
|
assets/gdpr-rhino.svg
CHANGED
@@ -1,42 +1,42 @@
|
|
1 |
-
<?xml version="1.0" encoding="utf-8"?>
|
2 |
-
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3 |
-
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4 |
-
viewBox="0 0 200 184.16" enable-background="new 0 0 200 184.16" xml:space="preserve">
|
5 |
-
<path fill="#0095A8" d="M68.231,30.327l0.963,0.557l0.48-1.003c2.165-4.529,7.729-7.769,16.538-9.631
|
6 |
-
c7.685-1.624,14.921-1.569,15.224-1.572l2.189,0.018l-0.753,2.055c-0.159,0.435-3.964,10.733-9.364,18.982l-0.795,1.215l1.41,0.346
|
7 |
-
c0.189,0.047,10.648,2.551,24.498,2.551c11.416,0,25.137-1.703,37.298-7.886l0.839-0.427l-0.351-0.874
|
8 |
-
c-2.805-6.968-9.737-13.46-20.045-18.775h-0.001c-14.728-7.591-34.4-11.771-55.393-11.771c-14.106,0-27.88,1.921-39.835,5.555
|
9 |
-
l-1.864,0.567l1.519,1.219C49.318,18.297,59.321,25.176,68.231,30.327z"/>
|
10 |
-
<path fill="#0095A8" d="M43.688,144.994l-0.763,0.659l0.643,0.775c10.468,12.634,22.864,23.576,36.845,32.524l0.554,0.354
|
11 |
-
l0.554-0.355c16.89-10.809,31.363-24.421,43.019-40.458c1.847-2.542,3.687-5.243,5.467-8.029l0.694-1.086l-1.213-0.436
|
12 |
-
C88.19,114.118,58.004,132.637,43.688,144.994z"/>
|
13 |
-
<path fill="#FFA200" d="M188.447,29.518l-1.785-4.136l-0.187,4.501c-0.127,3.055-0.367,6.079-0.714,8.99
|
14 |
-
c-1.792,15.057-6.219,26.337-13.159,33.528c-6.032,6.251-13.877,9.226-23.271,8.822c-0.952-0.064-9.353-0.788-11.247-6.271
|
15 |
-
c-1.457-4.214,1.406-9.483,8.753-16.11c9.307-8.394,15.282-16.207,18.266-23.883l1.416-3.641l-3.025,2.472
|
16 |
-
c-6.804,5.562-18.86,12.356-37.652,13.132c-6.599,0.268-23.328,0.448-36.131-3.678l-2.078-0.67l1.326-1.734
|
17 |
-
c4.231-5.538,7.811-13.361,9.568-17.531l0.643-1.526l-1.653,0.1c-5.844,0.354-23.189,1.406-25.986,13.83l-2.015-1.114
|
18 |
-
c-15.573-8.61-28.39-18.81-33.177-22.796l-0.457-0.381l-0.558,0.207c-3.508,1.298-6.787,2.73-9.748,4.256
|
19 |
-
c-13.84,7.135-21.463,16.3-21.463,25.808c0,0.228,0.113,23.103,9.867,51.417c5.736,16.65,13.638,31.952,23.486,45.481
|
20 |
-
c0.835,1.147,1.745,2.354,2.863,3.798l0.663,0.856l0.821-0.706c17.757-15.277,55.164-36.702,106.178-8.553l0.483,0.266l0.489-0.255
|
21 |
-
c5.617-2.93,34.134-19.045,43.894-48.605C198.522,68.234,197.038,49.436,188.447,29.518z"/>
|
22 |
-
<circle fill="#1F1F1F" cx="113.832" cy="74.693" r="5.619"/>
|
23 |
-
<path fill="#1F1F1F" d="M185.298,21.712c-1.757,8.569-3.513,36.397-15.654,47.833c-5.179,5.366-11.962,7.914-20.098,7.571
|
24 |
-
c-2.04-0.14-6.484-0.559-7.574-3.508c-0.384-1.11-0.409-4.47,7.621-11.712c0,0,22.418-17.262,17.92-35.129
|
25 |
-
c-2.391,2.179-4.928,4.074-7.563,5.728c-3.331-7.659-10.772-14.631-21.704-20.267C122.947,4.343,102.606,0,80.968,0
|
26 |
-
C59.33,0,38.99,4.343,23.691,12.229C8.413,20.105,0,30.568,0,41.692c0,0.235,0.115,23.8,10.092,52.757
|
27 |
-
c5.868,17.037,13.96,32.703,24.048,46.562c12.275,16.862,27.571,31.093,45.463,42.295l1.365,0.854l1.365-0.854
|
28 |
-
c17.929-11.228,33.25-25.491,45.536-42.396c2.123-2.92,4.186-5.982,6.158-9.109c4.267,1.772,8.645,3.896,13.135,6.43l1.151,0.65
|
29 |
-
l1.198-0.557c1.456-0.678,35.789-16.997,47.239-51.598C203.77,65.507,199.18,34.458,185.298,21.712z M135.89,16.798
|
30 |
-
c10.121,5.219,16.848,11.504,19.563,18.245c-26.884,13.67-61.084,5.254-61.084,5.254c5.462-8.345,9.289-18.701,9.468-19.191
|
31 |
-
l1.255-3.425l-3.648-0.03c-0.313-0.003-7.702-0.043-15.445,1.594c-9.158,1.936-14.94,5.356-17.253,10.194
|
32 |
-
c-9.919-5.735-19.809-12.765-27.313-18.785c11.811-3.591,25.364-5.511,39.535-5.511C101.802,5.141,121.306,9.282,135.89,16.798z
|
33 |
-
M123.709,137.888c-11.584,15.938-25.959,29.456-42.741,40.197c-13.937-8.919-26.209-19.762-36.608-32.313
|
34 |
-
c14.376-12.409,44.108-30.461,84.781-15.862C127.393,132.646,125.574,135.323,123.709,137.888z M191.881,85.069
|
35 |
-
c-9.592,29.05-37.389,44.883-43.393,48.015c-51.928-28.655-90.002-6.247-107.345,8.674c-0.964-1.244-1.917-2.498-2.845-3.774
|
36 |
-
c-9.788-13.445-17.643-28.657-23.345-45.211C5.278,64.692,5.141,41.918,5.141,41.692c0-9.103,7.424-17.944,20.905-24.894
|
37 |
-
c3.009-1.55,6.238-2.949,9.634-4.206c8.144,6.78,20.398,15.752,33.337,22.906l3.278,1.813c1.478-11.925,16.557-13.873,25.283-14.402
|
38 |
-
c-1.852,4.394-5.332,11.933-9.437,17.306l-2.209,2.891l3.463,1.117c12.994,4.186,29.847,3.997,36.488,3.727
|
39 |
-
c19.412-0.801,31.493-7.83,38.261-13.363c-2.078,5.345-6.463,13.09-17.996,23.492c-7.687,6.934-10.642,12.563-9.036,17.21
|
40 |
-
c2.111,6.105,11.069,6.888,12.15,6.961c9.72,0.41,17.836-2.664,24.08-9.134c7.099-7.356,11.62-18.836,13.44-34.12
|
41 |
-
c0.389-3.264,0.607-6.338,0.72-9.069C195.997,49.619,197.475,68.127,191.881,85.069z"/>
|
42 |
-
</svg>
|
1 |
+
<?xml version="1.0" encoding="utf-8"?>
|
2 |
+
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3 |
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
4 |
+
viewBox="0 0 200 184.16" enable-background="new 0 0 200 184.16" xml:space="preserve">
|
5 |
+
<path fill="#0095A8" d="M68.231,30.327l0.963,0.557l0.48-1.003c2.165-4.529,7.729-7.769,16.538-9.631
|
6 |
+
c7.685-1.624,14.921-1.569,15.224-1.572l2.189,0.018l-0.753,2.055c-0.159,0.435-3.964,10.733-9.364,18.982l-0.795,1.215l1.41,0.346
|
7 |
+
c0.189,0.047,10.648,2.551,24.498,2.551c11.416,0,25.137-1.703,37.298-7.886l0.839-0.427l-0.351-0.874
|
8 |
+
c-2.805-6.968-9.737-13.46-20.045-18.775h-0.001c-14.728-7.591-34.4-11.771-55.393-11.771c-14.106,0-27.88,1.921-39.835,5.555
|
9 |
+
l-1.864,0.567l1.519,1.219C49.318,18.297,59.321,25.176,68.231,30.327z"/>
|
10 |
+
<path fill="#0095A8" d="M43.688,144.994l-0.763,0.659l0.643,0.775c10.468,12.634,22.864,23.576,36.845,32.524l0.554,0.354
|
11 |
+
l0.554-0.355c16.89-10.809,31.363-24.421,43.019-40.458c1.847-2.542,3.687-5.243,5.467-8.029l0.694-1.086l-1.213-0.436
|
12 |
+
C88.19,114.118,58.004,132.637,43.688,144.994z"/>
|
13 |
+
<path fill="#FFA200" d="M188.447,29.518l-1.785-4.136l-0.187,4.501c-0.127,3.055-0.367,6.079-0.714,8.99
|
14 |
+
c-1.792,15.057-6.219,26.337-13.159,33.528c-6.032,6.251-13.877,9.226-23.271,8.822c-0.952-0.064-9.353-0.788-11.247-6.271
|
15 |
+
c-1.457-4.214,1.406-9.483,8.753-16.11c9.307-8.394,15.282-16.207,18.266-23.883l1.416-3.641l-3.025,2.472
|
16 |
+
c-6.804,5.562-18.86,12.356-37.652,13.132c-6.599,0.268-23.328,0.448-36.131-3.678l-2.078-0.67l1.326-1.734
|
17 |
+
c4.231-5.538,7.811-13.361,9.568-17.531l0.643-1.526l-1.653,0.1c-5.844,0.354-23.189,1.406-25.986,13.83l-2.015-1.114
|
18 |
+
c-15.573-8.61-28.39-18.81-33.177-22.796l-0.457-0.381l-0.558,0.207c-3.508,1.298-6.787,2.73-9.748,4.256
|
19 |
+
c-13.84,7.135-21.463,16.3-21.463,25.808c0,0.228,0.113,23.103,9.867,51.417c5.736,16.65,13.638,31.952,23.486,45.481
|
20 |
+
c0.835,1.147,1.745,2.354,2.863,3.798l0.663,0.856l0.821-0.706c17.757-15.277,55.164-36.702,106.178-8.553l0.483,0.266l0.489-0.255
|
21 |
+
c5.617-2.93,34.134-19.045,43.894-48.605C198.522,68.234,197.038,49.436,188.447,29.518z"/>
|
22 |
+
<circle fill="#1F1F1F" cx="113.832" cy="74.693" r="5.619"/>
|
23 |
+
<path fill="#1F1F1F" d="M185.298,21.712c-1.757,8.569-3.513,36.397-15.654,47.833c-5.179,5.366-11.962,7.914-20.098,7.571
|
24 |
+
c-2.04-0.14-6.484-0.559-7.574-3.508c-0.384-1.11-0.409-4.47,7.621-11.712c0,0,22.418-17.262,17.92-35.129
|
25 |
+
c-2.391,2.179-4.928,4.074-7.563,5.728c-3.331-7.659-10.772-14.631-21.704-20.267C122.947,4.343,102.606,0,80.968,0
|
26 |
+
C59.33,0,38.99,4.343,23.691,12.229C8.413,20.105,0,30.568,0,41.692c0,0.235,0.115,23.8,10.092,52.757
|
27 |
+
c5.868,17.037,13.96,32.703,24.048,46.562c12.275,16.862,27.571,31.093,45.463,42.295l1.365,0.854l1.365-0.854
|
28 |
+
c17.929-11.228,33.25-25.491,45.536-42.396c2.123-2.92,4.186-5.982,6.158-9.109c4.267,1.772,8.645,3.896,13.135,6.43l1.151,0.65
|
29 |
+
l1.198-0.557c1.456-0.678,35.789-16.997,47.239-51.598C203.77,65.507,199.18,34.458,185.298,21.712z M135.89,16.798
|
30 |
+
c10.121,5.219,16.848,11.504,19.563,18.245c-26.884,13.67-61.084,5.254-61.084,5.254c5.462-8.345,9.289-18.701,9.468-19.191
|
31 |
+
l1.255-3.425l-3.648-0.03c-0.313-0.003-7.702-0.043-15.445,1.594c-9.158,1.936-14.94,5.356-17.253,10.194
|
32 |
+
c-9.919-5.735-19.809-12.765-27.313-18.785c11.811-3.591,25.364-5.511,39.535-5.511C101.802,5.141,121.306,9.282,135.89,16.798z
|
33 |
+
M123.709,137.888c-11.584,15.938-25.959,29.456-42.741,40.197c-13.937-8.919-26.209-19.762-36.608-32.313
|
34 |
+
c14.376-12.409,44.108-30.461,84.781-15.862C127.393,132.646,125.574,135.323,123.709,137.888z M191.881,85.069
|
35 |
+
c-9.592,29.05-37.389,44.883-43.393,48.015c-51.928-28.655-90.002-6.247-107.345,8.674c-0.964-1.244-1.917-2.498-2.845-3.774
|
36 |
+
c-9.788-13.445-17.643-28.657-23.345-45.211C5.278,64.692,5.141,41.918,5.141,41.692c0-9.103,7.424-17.944,20.905-24.894
|
37 |
+
c3.009-1.55,6.238-2.949,9.634-4.206c8.144,6.78,20.398,15.752,33.337,22.906l3.278,1.813c1.478-11.925,16.557-13.873,25.283-14.402
|
38 |
+
c-1.852,4.394-5.332,11.933-9.437,17.306l-2.209,2.891l3.463,1.117c12.994,4.186,29.847,3.997,36.488,3.727
|
39 |
+
c19.412-0.801,31.493-7.83,38.261-13.363c-2.078,5.345-6.463,13.09-17.996,23.492c-7.687,6.934-10.642,12.563-9.036,17.21
|
40 |
+
c2.111,6.105,11.069,6.888,12.15,6.961c9.72,0.41,17.836-2.664,24.08-9.134c7.099-7.356,11.62-18.836,13.44-34.12
|
41 |
+
c0.389-3.264,0.607-6.338,0.72-9.069C195.997,49.619,197.475,68.127,191.881,85.069z"/>
|
42 |
+
</svg>
|
assets/privacy-tools.css
CHANGED
@@ -1,30 +1,30 @@
|
|
1 |
-
.gdpr-framework-privacy-tools .gdpr-notice {
|
2 |
-
padding: 10px 20px;
|
3 |
-
border: 1px solid #666;
|
4 |
-
}
|
5 |
-
|
6 |
-
.gdpr-framework-privacy-tools .gdpr-consent td {
|
7 |
-
padding: 0.6em;
|
8 |
-
}
|
9 |
-
|
10 |
-
.gdpr-framework-privacy-tools .gdpr-consent td:first-child {
|
11 |
-
padding-left: 0;
|
12 |
-
}
|
13 |
-
|
14 |
-
.gdpr-framework-privacy-tools .gdpr-consent td:last-child {
|
15 |
-
padding-right: 0;
|
16 |
-
}
|
17 |
-
|
18 |
-
.gdpr-framework-privacy-tools .gdpr-download-button,
|
19 |
-
.gdpr-framework-privacy-tools .gdpr-export-button,
|
20 |
-
.gdpr-framework-privacy-tools .gdpr-delete-button {
|
21 |
-
display: inline-block;
|
22 |
-
margin-right: 10px;
|
23 |
-
margin-bottom: 20px;
|
24 |
-
}
|
25 |
-
|
26 |
-
.gdpr-framework-privacy-tools .gdpr-download-button input.button,
|
27 |
-
.gdpr-framework-privacy-tools .gdpr-export-button input.button,
|
28 |
-
.gdpr-framework-privacy-tools .gdpr-delete-button input.button {
|
29 |
-
min-width: 200px;
|
30 |
-
}
|
1 |
+
.gdpr-framework-privacy-tools .gdpr-notice {
|
2 |
+
padding: 10px 20px;
|
3 |
+
border: 1px solid #666;
|
4 |
+
}
|
5 |
+
|
6 |
+
.gdpr-framework-privacy-tools .gdpr-consent td {
|
7 |
+
padding: 0.6em;
|
8 |
+
}
|
9 |
+
|
10 |
+
.gdpr-framework-privacy-tools .gdpr-consent td:first-child {
|
11 |
+
padding-left: 0;
|
12 |
+
}
|
13 |
+
|
14 |
+
.gdpr-framework-privacy-tools .gdpr-consent td:last-child {
|
15 |
+
padding-right: 0;
|
16 |
+
}
|
17 |
+
|
18 |
+
.gdpr-framework-privacy-tools .gdpr-download-button,
|
19 |
+
.gdpr-framework-privacy-tools .gdpr-export-button,
|
20 |
+
.gdpr-framework-privacy-tools .gdpr-delete-button {
|
21 |
+
display: inline-block;
|
22 |
+
margin-right: 10px;
|
23 |
+
margin-bottom: 20px;
|
24 |
+
}
|
25 |
+
|
26 |
+
.gdpr-framework-privacy-tools .gdpr-download-button input.button,
|
27 |
+
.gdpr-framework-privacy-tools .gdpr-export-button input.button,
|
28 |
+
.gdpr-framework-privacy-tools .gdpr-delete-button input.button {
|
29 |
+
min-width: 200px;
|
30 |
+
}
|
bootstrap.php
CHANGED
@@ -1,53 +1,53 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Set up config object, store plugin URL and path there
|
4 |
-
* along with various other items
|
5 |
-
*/
|
6 |
-
|
7 |
-
\Codelight\GDPR\Container::getInstance()->bindIf('config', function () {
|
8 |
-
return new \Codelight\GDPR\Config([
|
9 |
-
'plugin' => [
|
10 |
-
'url' => plugin_dir_url(__FILE__),
|
11 |
-
'path' => plugin_dir_path(__FILE__),
|
12 |
-
'template_path' => plugin_dir_path(__FILE__) . 'views/',
|
13 |
-
],
|
14 |
-
'help' => [
|
15 |
-
'url' => 'https://codelight.eu/wordpress-gdpr-framework/',
|
16 |
-
],
|
17 |
-
]);
|
18 |
-
}, true);
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Set up the application container
|
22 |
-
*
|
23 |
-
* @param string $abstract
|
24 |
-
* @param array $parameters
|
25 |
-
* @param Codelight\GDPR\Container $container
|
26 |
-
*
|
27 |
-
* @return Codelight\GDPR\Container|mixed
|
28 |
-
*/
|
29 |
-
function gdpr($abstract = null, $parameters = [], Codelight\GDPR\Container $container = null)
|
30 |
-
{
|
31 |
-
$container = $container ?: Codelight\GDPR\Container::getInstance();
|
32 |
-
|
33 |
-
if ( ! $abstract) {
|
34 |
-
return $container;
|
35 |
-
}
|
36 |
-
|
37 |
-
return $container->bound($abstract)
|
38 |
-
? $container->makeWith($abstract, $parameters)
|
39 |
-
: $container->makeWith("gdpr.{$abstract}", $parameters);
|
40 |
-
}
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Start the plugin on plugins_loaded at priority 0.
|
44 |
-
*/
|
45 |
-
add_action('plugins_loaded', function () use ($gdpr_error) {
|
46 |
-
|
47 |
-
load_plugin_textdomain('gdpr-framework', false, basename( dirname( __FILE__ ) ) . '/languages/');
|
48 |
-
|
49 |
-
new \Codelight\GDPR\Updater\Updater();
|
50 |
-
|
51 |
-
new \Codelight\GDPR\Setup();
|
52 |
-
|
53 |
-
}, 0);
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Set up config object, store plugin URL and path there
|
4 |
+
* along with various other items
|
5 |
+
*/
|
6 |
+
|
7 |
+
\Codelight\GDPR\Container::getInstance()->bindIf('config', function () {
|
8 |
+
return new \Codelight\GDPR\Config([
|
9 |
+
'plugin' => [
|
10 |
+
'url' => plugin_dir_url(__FILE__),
|
11 |
+
'path' => plugin_dir_path(__FILE__),
|
12 |
+
'template_path' => plugin_dir_path(__FILE__) . 'views/',
|
13 |
+
],
|
14 |
+
'help' => [
|
15 |
+
'url' => 'https://codelight.eu/wordpress-gdpr-framework/',
|
16 |
+
],
|
17 |
+
]);
|
18 |
+
}, true);
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Set up the application container
|
22 |
+
*
|
23 |
+
* @param string $abstract
|
24 |
+
* @param array $parameters
|
25 |
+
* @param Codelight\GDPR\Container $container
|
26 |
+
*
|
27 |
+
* @return Codelight\GDPR\Container|mixed
|
28 |
+
*/
|
29 |
+
function gdpr($abstract = null, $parameters = [], Codelight\GDPR\Container $container = null)
|
30 |
+
{
|
31 |
+
$container = $container ?: Codelight\GDPR\Container::getInstance();
|
32 |
+
|
33 |
+
if ( ! $abstract) {
|
34 |
+
return $container;
|
35 |
+
}
|
36 |
+
|
37 |
+
return $container->bound($abstract)
|
38 |
+
? $container->makeWith($abstract, $parameters)
|
39 |
+
: $container->makeWith("gdpr.{$abstract}", $parameters);
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Start the plugin on plugins_loaded at priority 0.
|
44 |
+
*/
|
45 |
+
add_action('plugins_loaded', function () use ($gdpr_error) {
|
46 |
+
|
47 |
+
load_plugin_textdomain('gdpr-framework', false, basename( dirname( __FILE__ ) ) . '/languages/');
|
48 |
+
|
49 |
+
new \Codelight\GDPR\Updater\Updater();
|
50 |
+
|
51 |
+
new \Codelight\GDPR\Setup();
|
52 |
+
|
53 |
+
}, 0);
|
gdpr-framework.php
CHANGED
@@ -1,94 +1,94 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Plugin Name: The GDPR Framework
|
5 |
-
* Plugin URI: https://codelight.eu/wordpress-gdpr-framework/
|
6 |
-
* Description: Tools to help make your website GDPR-compliant. Fully documented, extendable and developer-friendly.
|
7 |
-
* Version: 1.0.
|
8 |
-
* Author: Codelight
|
9 |
-
* Author URI: https://codelight.eu/
|
10 |
-
* Text Domain: gdpr-framework
|
11 |
-
* Domain Path: /languages
|
12 |
-
*/
|
13 |
-
|
14 |
-
if (!defined('WPINC')) {
|
15 |
-
die;
|
16 |
-
}
|
17 |
-
|
18 |
-
define('GDPR_FRAMEWORK_VERSION', '1.0.
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Helper function for prettying up errors
|
22 |
-
*
|
23 |
-
* @param string $message
|
24 |
-
* @param string $subtitle
|
25 |
-
* @param string $title
|
26 |
-
*/
|
27 |
-
$gdpr_error = function($message, $subtitle = '', $title = '') {
|
28 |
-
$title = $title ?: _x('WordPress GDPR › Error', '(Admin)', 'gdpr-framework');
|
29 |
-
$message = "<h1>{$title}<br><small>{$subtitle}</small></h1><p>{$message}</p>";
|
30 |
-
wp_die($message, $title);
|
31 |
-
};
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Ensure compatible version of PHP is used
|
35 |
-
*/
|
36 |
-
if (version_compare(phpversion(), '5.6.0', '<')) {
|
37 |
-
$gdpr_error(
|
38 |
-
_x('You must be using PHP 5.6.0 or greater.', '(Admin)', 'gdpr-framework'),
|
39 |
-
_x('Invalid PHP version', '(Admin)', 'gdpr-framework')
|
40 |
-
);
|
41 |
-
}
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Ensure compatible version of WordPress is used
|
45 |
-
*/
|
46 |
-
if (version_compare(get_bloginfo('version'), '4.3', '<')) {
|
47 |
-
$gdpr_error(
|
48 |
-
_x('You must be using WordPress 4.3.0 or greater.', '(Admin)', 'gdpr-framework'),
|
49 |
-
_x('Invalid WordPress version', '(Admin)', 'gdpr-framework')
|
50 |
-
);
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Load dependencies
|
55 |
-
*/
|
56 |
-
if (!class_exists('\Codelight\GDPR\Container')) {
|
57 |
-
|
58 |
-
if (!file_exists($composer = __DIR__ . '/vendor/autoload.php')) {
|
59 |
-
$gdpr_error(
|
60 |
-
_x(
|
61 |
-
'You appear to be running a development version of GDPR. You must run <code>composer install</code> from the plugin directory.',
|
62 |
-
'(Admin)',
|
63 |
-
'gdpr-framework'
|
64 |
-
),
|
65 |
-
_x(
|
66 |
-
'Autoloader not found.',
|
67 |
-
'(Admin)',
|
68 |
-
'gdpr-framework'
|
69 |
-
)
|
70 |
-
);
|
71 |
-
}
|
72 |
-
require_once $composer;
|
73 |
-
}
|
74 |
-
/**
|
75 |
-
* Install the database table and custom role
|
76 |
-
*/
|
77 |
-
register_activation_hook(__FILE__, function () {
|
78 |
-
$model = new \Codelight\GDPR\Components\Consent\UserConsentModel();
|
79 |
-
$model->createTable();
|
80 |
-
|
81 |
-
if (apply_filters('gdpr/data-subject/anonymize/change_role', true) && ! get_role('anonymous')) {
|
82 |
-
|
83 |
-
add_role(
|
84 |
-
'anonymous',
|
85 |
-
_x('Anonymous', '(Admin)', 'gdpr-framework'),
|
86 |
-
array()
|
87 |
-
);
|
88 |
-
}
|
89 |
-
|
90 |
-
update_option('gdpr_enable_stylesheet', true);
|
91 |
-
update_option('gdpr_enable', true);
|
92 |
-
});
|
93 |
-
|
94 |
-
require_once('bootstrap.php');
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Plugin Name: The GDPR Framework
|
5 |
+
* Plugin URI: https://codelight.eu/wordpress-gdpr-framework/
|
6 |
+
* Description: Tools to help make your website GDPR-compliant. Fully documented, extendable and developer-friendly.
|
7 |
+
* Version: 1.0.7
|
8 |
+
* Author: Codelight
|
9 |
+
* Author URI: https://codelight.eu/
|
10 |
+
* Text Domain: gdpr-framework
|
11 |
+
* Domain Path: /languages
|
12 |
+
*/
|
13 |
+
|
14 |
+
if (!defined('WPINC')) {
|
15 |
+
die;
|
16 |
+
}
|
17 |
+
|
18 |
+
define('GDPR_FRAMEWORK_VERSION', '1.0.7');
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Helper function for prettying up errors
|
22 |
+
*
|
23 |
+
* @param string $message
|
24 |
+
* @param string $subtitle
|
25 |
+
* @param string $title
|
26 |
+
*/
|
27 |
+
$gdpr_error = function($message, $subtitle = '', $title = '') {
|
28 |
+
$title = $title ?: _x('WordPress GDPR › Error', '(Admin)', 'gdpr-framework');
|
29 |
+
$message = "<h1>{$title}<br><small>{$subtitle}</small></h1><p>{$message}</p>";
|
30 |
+
wp_die($message, $title);
|
31 |
+
};
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Ensure compatible version of PHP is used
|
35 |
+
*/
|
36 |
+
if (version_compare(phpversion(), '5.6.0', '<')) {
|
37 |
+
$gdpr_error(
|
38 |
+
_x('You must be using PHP 5.6.0 or greater.', '(Admin)', 'gdpr-framework'),
|
39 |
+
_x('Invalid PHP version', '(Admin)', 'gdpr-framework')
|
40 |
+
);
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Ensure compatible version of WordPress is used
|
45 |
+
*/
|
46 |
+
if (version_compare(get_bloginfo('version'), '4.3', '<')) {
|
47 |
+
$gdpr_error(
|
48 |
+
_x('You must be using WordPress 4.3.0 or greater.', '(Admin)', 'gdpr-framework'),
|
49 |
+
_x('Invalid WordPress version', '(Admin)', 'gdpr-framework')
|
50 |
+
);
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Load dependencies
|
55 |
+
*/
|
56 |
+
if (!class_exists('\Codelight\GDPR\Container')) {
|
57 |
+
|
58 |
+
if (!file_exists($composer = __DIR__ . '/vendor/autoload.php')) {
|
59 |
+
$gdpr_error(
|
60 |
+
_x(
|
61 |
+
'You appear to be running a development version of GDPR. You must run <code>composer install</code> from the plugin directory.',
|
62 |
+
'(Admin)',
|
63 |
+
'gdpr-framework'
|
64 |
+
),
|
65 |
+
_x(
|
66 |
+
'Autoloader not found.',
|
67 |
+
'(Admin)',
|
68 |
+
'gdpr-framework'
|
69 |
+
)
|
70 |
+
);
|
71 |
+
}
|
72 |
+
require_once $composer;
|
73 |
+
}
|
74 |
+
/**
|
75 |
+
* Install the database table and custom role
|
76 |
+
*/
|
77 |
+
register_activation_hook(__FILE__, function () {
|
78 |
+
$model = new \Codelight\GDPR\Components\Consent\UserConsentModel();
|
79 |
+
$model->createTable();
|
80 |
+
|
81 |
+
if (apply_filters('gdpr/data-subject/anonymize/change_role', true) && ! get_role('anonymous')) {
|
82 |
+
|
83 |
+
add_role(
|
84 |
+
'anonymous',
|
85 |
+
_x('Anonymous', '(Admin)', 'gdpr-framework'),
|
86 |
+
array()
|
87 |
+
);
|
88 |
+
}
|
89 |
+
|
90 |
+
update_option('gdpr_enable_stylesheet', true);
|
91 |
+
update_option('gdpr_enable', true);
|
92 |
+
});
|
93 |
+
|
94 |
+
require_once('bootstrap.php');
|
languages/gdpr-framework-bg_BG.po
CHANGED
@@ -1,1334 +1,1334 @@
|
|
1 |
-
# SOME DESCRIPTIVE TITLE.
|
2 |
-
# Copyright (C) YEAR Codelight
|
3 |
-
# This file is distributed under the same license as the The GDPR Framework package.
|
4 |
-
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
-
#
|
6 |
-
msgid ""
|
7 |
-
msgstr ""
|
8 |
-
"Project-Id-Version: The GDPR Framework 1.0\n"
|
9 |
-
"Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
|
10 |
-
"POT-Creation-Date: 2018-04-16 10:50+0000\n"
|
11 |
-
"PO-Revision-Date: 2018-05-05 18:20+0300\n"
|
12 |
-
"Language-Team: \n"
|
13 |
-
"MIME-Version: 1.0\n"
|
14 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
-
"Content-Transfer-Encoding: 8bit\n"
|
16 |
-
"X-Generator: Poedit 2.0.7\n"
|
17 |
-
"Last-Translator: Zankov Group LTD. <office@zankov-group.com>\n"
|
18 |
-
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
19 |
-
"Language: bg_BG\n"
|
20 |
-
|
21 |
-
#: gdpr-framework.php:26
|
22 |
-
msgctxt "(Admin)"
|
23 |
-
msgid "WordPress GDPR › Error"
|
24 |
-
msgstr ""
|
25 |
-
|
26 |
-
#: gdpr-framework.php:35
|
27 |
-
msgctxt "(Admin)"
|
28 |
-
msgid "Invalid PHP version"
|
29 |
-
msgstr ""
|
30 |
-
|
31 |
-
#: gdpr-framework.php:35
|
32 |
-
msgctxt "(Admin)"
|
33 |
-
msgid "You must be using PHP 5.6.33 or greater."
|
34 |
-
msgstr ""
|
35 |
-
|
36 |
-
#: gdpr-framework.php:42
|
37 |
-
msgctxt "(Admin)"
|
38 |
-
msgid "Invalid WordPress version"
|
39 |
-
msgstr ""
|
40 |
-
|
41 |
-
#: gdpr-framework.php:42
|
42 |
-
msgctxt "(Admin)"
|
43 |
-
msgid "You must be using WordPress 4.3.0 or greater."
|
44 |
-
msgstr ""
|
45 |
-
|
46 |
-
#: gdpr-framework.php:52
|
47 |
-
msgctxt "(Admin)"
|
48 |
-
msgid ""
|
49 |
-
"You appear to be running a development version of GDPR. You must run "
|
50 |
-
"<code>composer install</code> from the plugin directory."
|
51 |
-
msgstr ""
|
52 |
-
|
53 |
-
#: gdpr-framework.php:53
|
54 |
-
msgctxt "(Admin)"
|
55 |
-
msgid "Autoloader not found."
|
56 |
-
msgstr ""
|
57 |
-
|
58 |
-
#: gdpr-framework.php:115
|
59 |
-
msgctxt "(Admin)"
|
60 |
-
msgid "Anonymous"
|
61 |
-
msgstr ""
|
62 |
-
|
63 |
-
#: src/Admin/AdminTab.php:115
|
64 |
-
msgctxt "(Admin)"
|
65 |
-
msgid "Save"
|
66 |
-
msgstr "Запази"
|
67 |
-
|
68 |
-
#: src/Admin/AdminTab.php:151
|
69 |
-
msgctxt "(Admin)"
|
70 |
-
msgid "Policy generated!"
|
71 |
-
msgstr "Политиката е генерирана!"
|
72 |
-
|
73 |
-
#: src/Admin/AdminTabGeneral.php:11
|
74 |
-
msgctxt "(Admin)"
|
75 |
-
msgid "General"
|
76 |
-
msgstr "Главни"
|
77 |
-
|
78 |
-
#: src/Admin/AdminTabGeneral.php:38
|
79 |
-
msgctxt "(Admin)"
|
80 |
-
msgid "General Settings"
|
81 |
-
msgstr "Главни настройки"
|
82 |
-
|
83 |
-
#: src/Admin/AdminTabGeneral.php:43
|
84 |
-
msgctxt "(Admin)"
|
85 |
-
msgid "Enable Privacy Tools"
|
86 |
-
msgstr "Включи Политика за лични данни"
|
87 |
-
|
88 |
-
#: src/Admin/AdminTabGeneral.php:53
|
89 |
-
msgctxt "(Admin)"
|
90 |
-
msgid "Pages"
|
91 |
-
msgstr "Страници"
|
92 |
-
|
93 |
-
#: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
|
94 |
-
msgctxt "(Admin)"
|
95 |
-
msgid "Privacy Tools Page"
|
96 |
-
msgstr "Страница с инструменти "
|
97 |
-
|
98 |
-
#: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
|
99 |
-
msgctxt "(Admin)"
|
100 |
-
msgid "Privacy Policy Page"
|
101 |
-
msgstr "Страница за лични данни"
|
102 |
-
|
103 |
-
#: src/Admin/AdminTabGeneral.php:72
|
104 |
-
msgctxt "(Admin)"
|
105 |
-
msgid "Terms & Conditions Page"
|
106 |
-
msgstr "Страница за Общи условия"
|
107 |
-
|
108 |
-
#: src/Admin/AdminTabGeneral.php:82
|
109 |
-
msgctxt "(Admin)"
|
110 |
-
msgid "View & Export Data"
|
111 |
-
msgstr "Преглед и Експортиране на данни"
|
112 |
-
|
113 |
-
#: src/Admin/AdminTabGeneral.php:87
|
114 |
-
msgctxt "(Admin)"
|
115 |
-
msgid "Export action"
|
116 |
-
msgstr "Действие за експортиране"
|
117 |
-
|
118 |
-
#: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
|
119 |
-
msgctxt "(Admin)"
|
120 |
-
msgid "Email to notify"
|
121 |
-
msgstr "Email за уведомяване"
|
122 |
-
|
123 |
-
#: src/Admin/AdminTabGeneral.php:105
|
124 |
-
msgctxt "(Admin)"
|
125 |
-
msgid "Delete & Anonymize Data"
|
126 |
-
msgstr "Изтриване и Анонимни данни"
|
127 |
-
|
128 |
-
#: src/Admin/AdminTabGeneral.php:110
|
129 |
-
msgctxt "(Admin)"
|
130 |
-
msgid "Delete action"
|
131 |
-
msgstr "Действие при изтриване"
|
132 |
-
|
133 |
-
#: src/Admin/AdminTabGeneral.php:117
|
134 |
-
msgctxt "(Admin)"
|
135 |
-
msgid "Delete or reassign content?"
|
136 |
-
msgstr ""
|
137 |
-
|
138 |
-
#: src/Admin/AdminTabGeneral.php:125
|
139 |
-
msgctxt "(Admin)"
|
140 |
-
msgid "Reassign content to"
|
141 |
-
msgstr ""
|
142 |
-
|
143 |
-
#: src/Admin/AdminTabGeneral.php:145
|
144 |
-
msgctxt "(Admin)"
|
145 |
-
msgid "Styling"
|
146 |
-
msgstr "Стил"
|
147 |
-
|
148 |
-
#: src/Admin/AdminTabGeneral.php:150
|
149 |
-
msgctxt "(Admin)"
|
150 |
-
msgid "Enable basic styling on Privacy Tools page"
|
151 |
-
msgstr ""
|
152 |
-
|
153 |
-
#: src/Admin/AdminTabGeneral.php:162
|
154 |
-
msgctxt "(Admin)"
|
155 |
-
msgid "Compatibility"
|
156 |
-
msgstr "Съвместимост"
|
157 |
-
|
158 |
-
#: src/Admin/AdminTabGeneral.php:167
|
159 |
-
msgctxt "(Admin)"
|
160 |
-
msgid "Enable automatic theme compatibility"
|
161 |
-
msgstr ""
|
162 |
-
|
163 |
-
#: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
|
164 |
-
#: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
|
165 |
-
#: views/installer/steps/configuration-settings.php:62
|
166 |
-
#, fuzzy
|
167 |
-
msgctxt "(Admin)"
|
168 |
-
msgid "— Select —"
|
169 |
-
msgstr "Избери размера на бутона."
|
170 |
-
|
171 |
-
#: src/Admin/WordpressAdmin.php:65
|
172 |
-
msgctxt "(Admin)"
|
173 |
-
msgid "Privacy & GDPR Settings"
|
174 |
-
msgstr ""
|
175 |
-
|
176 |
-
#: src/Admin/WordpressAdmin.php:66
|
177 |
-
msgctxt "(Admin)"
|
178 |
-
msgid "Privacy"
|
179 |
-
msgstr ""
|
180 |
-
|
181 |
-
#: src/Components/Consent/AdminTabConsent.php:30
|
182 |
-
#: src/Components/Consent/AdminTabConsent.php:49
|
183 |
-
msgctxt "(Admin)"
|
184 |
-
msgid "Consent"
|
185 |
-
msgstr "Съгласие"
|
186 |
-
|
187 |
-
#: src/Components/Consent/AdminTabConsent.php:157
|
188 |
-
msgctxt "(Admin)"
|
189 |
-
msgid "Consent slug is a required field!"
|
190 |
-
msgstr ""
|
191 |
-
|
192 |
-
#: src/Components/Consent/AdminTabConsent.php:162
|
193 |
-
msgctxt "(Admin)"
|
194 |
-
msgid ""
|
195 |
-
"You may only use alphanumeric characters, dash and underscore in the consent "
|
196 |
-
"slug field."
|
197 |
-
msgstr ""
|
198 |
-
|
199 |
-
#: src/Components/Consent/AdminTabConsent.php:167
|
200 |
-
msgctxt "(Admin)"
|
201 |
-
msgid "Consent title is a required field!"
|
202 |
-
msgstr "Типовото съгласие е задължително поле!"
|
203 |
-
|
204 |
-
#: src/Components/Consent/ConsentManager.php:46
|
205 |
-
#: views/modules/contact-form-7/content-privacy.php:2
|
206 |
-
#: views/modules/wordpress-comments/terms-checkbox.php:14
|
207 |
-
#: views/modules/wordpress-user/registration-terms-checkbox.php:15
|
208 |
-
#, php-format
|
209 |
-
msgid "I accept the %sPrivacy Policy%s"
|
210 |
-
msgstr "Приемам %sPrivacy Policy%s"
|
211 |
-
|
212 |
-
#: src/Components/Consent/ConsentManager.php:50
|
213 |
-
#: src/Components/Consent/ConsentManager.php:69
|
214 |
-
msgctxt "(Admin)"
|
215 |
-
msgid ""
|
216 |
-
"This consent is not visible by default. If someone wishes to withdraw it, "
|
217 |
-
"they should simply request to delete all their data."
|
218 |
-
msgstr ""
|
219 |
-
"Това съгласие не се вижда по подразбиране. Ако някой желае да го оттегли, "
|
220 |
-
"той трябва просто да поиска да изтрие всичките си данни."
|
221 |
-
|
222 |
-
#: src/Components/Consent/ConsentManager.php:65
|
223 |
-
#, php-format
|
224 |
-
msgid "I accept the %sTerms & Conditions%s"
|
225 |
-
msgstr "Приемам %sTerms & Conditions%s"
|
226 |
-
|
227 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
|
228 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
|
229 |
-
#: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
|
230 |
-
msgctxt "(Admin)"
|
231 |
-
msgid "Privacy Policy"
|
232 |
-
msgstr "Политика за Лични данни"
|
233 |
-
|
234 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
|
235 |
-
msgctxt "(Admin)"
|
236 |
-
msgid "Company information"
|
237 |
-
msgstr "Информация за Фирмата"
|
238 |
-
|
239 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
|
240 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
|
241 |
-
msgctxt "(Admin)"
|
242 |
-
msgid "Company Name"
|
243 |
-
msgstr "Име на Фирмата"
|
244 |
-
|
245 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
|
246 |
-
msgctxt "(Admin)"
|
247 |
-
msgid "Company Email"
|
248 |
-
msgstr "Фирмен Email"
|
249 |
-
|
250 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
|
251 |
-
msgctxt "(Admin)"
|
252 |
-
msgid "Company Location"
|
253 |
-
msgstr "Местоположение на Фирмата"
|
254 |
-
|
255 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
|
256 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
|
257 |
-
msgctxt "(Admin)"
|
258 |
-
msgid "Representative Contact Name"
|
259 |
-
msgstr ""
|
260 |
-
|
261 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
|
262 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
|
263 |
-
msgctxt "(Admin)"
|
264 |
-
msgid "Representative Contact Email"
|
265 |
-
msgstr ""
|
266 |
-
|
267 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
|
268 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
|
269 |
-
msgctxt "(Admin)"
|
270 |
-
msgid "Representative Contact Phone"
|
271 |
-
msgstr ""
|
272 |
-
|
273 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
|
274 |
-
msgctxt "(Admin)"
|
275 |
-
msgid "Data Protection Authority"
|
276 |
-
msgstr ""
|
277 |
-
|
278 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
|
279 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
|
280 |
-
msgctxt "(Admin)"
|
281 |
-
msgid "Data Protection Authority Website"
|
282 |
-
msgstr ""
|
283 |
-
|
284 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
|
285 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
|
286 |
-
msgctxt "(Admin)"
|
287 |
-
msgid "Data Protection Authority Email"
|
288 |
-
msgstr ""
|
289 |
-
|
290 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
|
291 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
|
292 |
-
msgctxt "(Admin)"
|
293 |
-
msgid "Data Protection Authority Phone"
|
294 |
-
msgstr ""
|
295 |
-
|
296 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
|
297 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
|
298 |
-
msgctxt "(Admin)"
|
299 |
-
msgid "Data Protection Officer"
|
300 |
-
msgstr "Служителя за защита на данните"
|
301 |
-
|
302 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
|
303 |
-
msgctxt "(Admin)"
|
304 |
-
msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
|
305 |
-
msgstr ""
|
306 |
-
|
307 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
|
308 |
-
msgctxt "(Admin)"
|
309 |
-
msgid "Data Protection Officer Name"
|
310 |
-
msgstr "Име на Служителя по защита на данните"
|
311 |
-
|
312 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
|
313 |
-
msgctxt "(Admin)"
|
314 |
-
msgid "Data Protection Officer Email"
|
315 |
-
msgstr "Email на Служителя по защита на данните"
|
316 |
-
|
317 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
|
318 |
-
msgctxt "(Admin)"
|
319 |
-
msgid "Contact Email"
|
320 |
-
msgstr "Email за конакт"
|
321 |
-
|
322 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
|
323 |
-
msgctxt "(Admin)"
|
324 |
-
msgid "Representative Contact"
|
325 |
-
msgstr "Представителен контакти"
|
326 |
-
|
327 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
|
328 |
-
msgctxt "(Admin)"
|
329 |
-
msgid "Knowledge base: Do I need to appoint an EU-based representative?"
|
330 |
-
msgstr ""
|
331 |
-
|
332 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
|
333 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
|
334 |
-
msgctxt "(Admin)"
|
335 |
-
msgid "DPO Name"
|
336 |
-
msgstr "ДПО Име"
|
337 |
-
|
338 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
|
339 |
-
msgctxt "(Admin)"
|
340 |
-
msgid "Save & Generate Policy"
|
341 |
-
msgstr "Запазване и генериране на правила"
|
342 |
-
|
343 |
-
#: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
|
344 |
-
#: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
|
345 |
-
#: views/themes/storefront/footer.php:3
|
346 |
-
#: views/themes/twentyseventeen/footer.php:3
|
347 |
-
#: views/themes/twentysixteen/footer.php:4
|
348 |
-
msgid "Privacy Policy"
|
349 |
-
msgstr "Политика за Лични данни"
|
350 |
-
|
351 |
-
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
|
352 |
-
msgid "This page is currently disabled."
|
353 |
-
msgstr "Тази страница не е активна."
|
354 |
-
|
355 |
-
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
|
356 |
-
#: src/Installer/Installer.php:279
|
357 |
-
#: src/Installer/Steps/ConfigurationPages.php:55
|
358 |
-
#: views/themes/storefront/footer.php:7
|
359 |
-
#: views/themes/twentyseventeen/footer.php:7
|
360 |
-
#: views/themes/twentysixteen/footer.php:9
|
361 |
-
msgid "Privacy Tools"
|
362 |
-
msgstr "Управление на Лични данни"
|
363 |
-
|
364 |
-
#: src/Components/Support/AdminTabSupport.php:13
|
365 |
-
#: src/Components/Support/AdminTabSupport.php:20
|
366 |
-
msgctxt "(Admin)"
|
367 |
-
msgid "Support"
|
368 |
-
msgstr ""
|
369 |
-
|
370 |
-
#: src/Components/WordpressComments/WordpressComments.php:90
|
371 |
-
#, php-format
|
372 |
-
msgid ""
|
373 |
-
"%sERROR:%s You need to accept the terms and conditions to post a comment."
|
374 |
-
msgstr "%sERROR:%s Трябва да приемете условията и за публикуване на коментар."
|
375 |
-
|
376 |
-
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
|
377 |
-
#: views/privacy-tools/notices.php:19
|
378 |
-
msgid "We have received your request and will reply within 30 days."
|
379 |
-
msgstr "Получихме Вашето искане и ще отговорим в рамките на 30 дни."
|
380 |
-
|
381 |
-
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
|
382 |
-
#: views/privacy-tools/notices.php:15
|
383 |
-
msgid "Consent withdrawn."
|
384 |
-
msgstr "Съгласието е оттеглено."
|
385 |
-
|
386 |
-
#: src/Components/WordpressUser/RegistrationForm.php:42
|
387 |
-
msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
|
388 |
-
msgstr "<strong>ERROR</strong>: Трябва да приемете Общите условия."
|
389 |
-
|
390 |
-
#: src/Components/WordpressUser/WordpressUser.php:63
|
391 |
-
#: src/Components/WordpressUser/WordpressUser.php:64
|
392 |
-
#: views/modules/wordpress-user/dashboard/data-page/header.php:2
|
393 |
-
msgctxt "(Admin)"
|
394 |
-
msgid "Privacy Tools"
|
395 |
-
msgstr "Управление на Лични данни"
|
396 |
-
|
397 |
-
#: src/DataSubject/AdminTabDataSubject.php:27
|
398 |
-
#: src/DataSubject/AdminTabDataSubject.php:41
|
399 |
-
msgctxt "(Admin)"
|
400 |
-
msgid "Data Subjects"
|
401 |
-
msgstr "Субекти на данни"
|
402 |
-
|
403 |
-
#: src/DataSubject/DataRepository.php:143
|
404 |
-
msgid "Data exported"
|
405 |
-
msgstr "Данните са Експортирани"
|
406 |
-
|
407 |
-
#: src/DataSubject/DataRepository.php:158
|
408 |
-
msgid "Data export request"
|
409 |
-
msgstr "Заявка за Експорт на данни"
|
410 |
-
|
411 |
-
#: src/DataSubject/DataRepository.php:171
|
412 |
-
msgid "Data removed"
|
413 |
-
msgstr "Данните са премахнати"
|
414 |
-
|
415 |
-
#: src/DataSubject/DataRepository.php:186
|
416 |
-
msgid "Data removal request"
|
417 |
-
msgstr "Заявка за премахване на Данни"
|
418 |
-
|
419 |
-
#: src/DataSubject/DataSubjectIdentificator.php:65
|
420 |
-
#: src/DataSubject/DataSubjectIdentificator.php:82
|
421 |
-
msgid "Your personal data on"
|
422 |
-
msgstr "Вашите лични данни за"
|
423 |
-
|
424 |
-
#: src/Helpers.php:27
|
425 |
-
msgctxt "(Admin)"
|
426 |
-
msgid "Austria"
|
427 |
-
msgstr ""
|
428 |
-
|
429 |
-
#: src/Helpers.php:28
|
430 |
-
msgctxt "(Admin)"
|
431 |
-
msgid "Belgium"
|
432 |
-
msgstr ""
|
433 |
-
|
434 |
-
#: src/Helpers.php:29
|
435 |
-
msgctxt "(Admin)"
|
436 |
-
msgid "Bulgaria"
|
437 |
-
msgstr ""
|
438 |
-
|
439 |
-
#: src/Helpers.php:30
|
440 |
-
msgctxt "(Admin)"
|
441 |
-
msgid "Croatia"
|
442 |
-
msgstr ""
|
443 |
-
|
444 |
-
#: src/Helpers.php:31
|
445 |
-
msgctxt "(Admin)"
|
446 |
-
msgid "Cyprus"
|
447 |
-
msgstr ""
|
448 |
-
|
449 |
-
#: src/Helpers.php:32
|
450 |
-
msgctxt "(Admin)"
|
451 |
-
msgid "Czech Republic"
|
452 |
-
msgstr ""
|
453 |
-
|
454 |
-
#: src/Helpers.php:33
|
455 |
-
msgctxt "(Admin)"
|
456 |
-
msgid "Denmark"
|
457 |
-
msgstr ""
|
458 |
-
|
459 |
-
#: src/Helpers.php:34
|
460 |
-
msgctxt "(Admin)"
|
461 |
-
msgid "Estonia"
|
462 |
-
msgstr ""
|
463 |
-
|
464 |
-
#: src/Helpers.php:35
|
465 |
-
msgctxt "(Admin)"
|
466 |
-
msgid "Finland"
|
467 |
-
msgstr ""
|
468 |
-
|
469 |
-
#: src/Helpers.php:36
|
470 |
-
msgctxt "(Admin)"
|
471 |
-
msgid "France"
|
472 |
-
msgstr ""
|
473 |
-
|
474 |
-
#: src/Helpers.php:37
|
475 |
-
msgctxt "(Admin)"
|
476 |
-
msgid "Germany"
|
477 |
-
msgstr ""
|
478 |
-
|
479 |
-
#: src/Helpers.php:38
|
480 |
-
msgctxt "(Admin)"
|
481 |
-
msgid "Greece"
|
482 |
-
msgstr ""
|
483 |
-
|
484 |
-
#: src/Helpers.php:39
|
485 |
-
msgctxt "(Admin)"
|
486 |
-
msgid "Hungary"
|
487 |
-
msgstr ""
|
488 |
-
|
489 |
-
#: src/Helpers.php:40
|
490 |
-
msgctxt "(Admin)"
|
491 |
-
msgid "Ireland"
|
492 |
-
msgstr ""
|
493 |
-
|
494 |
-
#: src/Helpers.php:41
|
495 |
-
msgctxt "(Admin)"
|
496 |
-
msgid "Italy"
|
497 |
-
msgstr ""
|
498 |
-
|
499 |
-
#: src/Helpers.php:42
|
500 |
-
msgctxt "(Admin)"
|
501 |
-
msgid "Latvia"
|
502 |
-
msgstr ""
|
503 |
-
|
504 |
-
#: src/Helpers.php:43
|
505 |
-
msgctxt "(Admin)"
|
506 |
-
msgid "Lithuania"
|
507 |
-
msgstr ""
|
508 |
-
|
509 |
-
#: src/Helpers.php:44
|
510 |
-
msgctxt "(Admin)"
|
511 |
-
msgid "Luxembourg"
|
512 |
-
msgstr ""
|
513 |
-
|
514 |
-
#: src/Helpers.php:45
|
515 |
-
msgctxt "(Admin)"
|
516 |
-
msgid "Malta"
|
517 |
-
msgstr ""
|
518 |
-
|
519 |
-
#: src/Helpers.php:46
|
520 |
-
msgctxt "(Admin)"
|
521 |
-
msgid "Netherlands"
|
522 |
-
msgstr ""
|
523 |
-
|
524 |
-
#: src/Helpers.php:47
|
525 |
-
msgctxt "(Admin)"
|
526 |
-
msgid "Poland"
|
527 |
-
msgstr ""
|
528 |
-
|
529 |
-
#: src/Helpers.php:48
|
530 |
-
msgctxt "(Admin)"
|
531 |
-
msgid "Portugal"
|
532 |
-
msgstr ""
|
533 |
-
|
534 |
-
#: src/Helpers.php:49
|
535 |
-
msgctxt "(Admin)"
|
536 |
-
msgid "Romania"
|
537 |
-
msgstr ""
|
538 |
-
|
539 |
-
#: src/Helpers.php:50
|
540 |
-
msgctxt "(Admin)"
|
541 |
-
msgid "Slovakia"
|
542 |
-
msgstr ""
|
543 |
-
|
544 |
-
#: src/Helpers.php:51
|
545 |
-
msgctxt "(Admin)"
|
546 |
-
msgid "Slovenia"
|
547 |
-
msgstr ""
|
548 |
-
|
549 |
-
#: src/Helpers.php:52
|
550 |
-
msgctxt "(Admin)"
|
551 |
-
msgid "Spain"
|
552 |
-
msgstr ""
|
553 |
-
|
554 |
-
#: src/Helpers.php:53
|
555 |
-
msgctxt "(Admin)"
|
556 |
-
msgid "Sweden"
|
557 |
-
msgstr ""
|
558 |
-
|
559 |
-
#: src/Helpers.php:54
|
560 |
-
msgctxt "(Admin)"
|
561 |
-
msgid "United Kingdom"
|
562 |
-
msgstr ""
|
563 |
-
|
564 |
-
#: src/Helpers.php:69
|
565 |
-
msgctxt "(Admin)"
|
566 |
-
msgid "Iceland"
|
567 |
-
msgstr ""
|
568 |
-
|
569 |
-
#: src/Helpers.php:70
|
570 |
-
msgctxt "(Admin)"
|
571 |
-
msgid "Norway"
|
572 |
-
msgstr ""
|
573 |
-
|
574 |
-
#: src/Helpers.php:71
|
575 |
-
msgctxt "(Admin)"
|
576 |
-
msgid "Liechtenstein"
|
577 |
-
msgstr ""
|
578 |
-
|
579 |
-
#: src/Helpers.php:72
|
580 |
-
msgctxt "(Admin)"
|
581 |
-
msgid "Switzerland"
|
582 |
-
msgstr ""
|
583 |
-
|
584 |
-
#: src/Helpers.php:73
|
585 |
-
msgctxt "(Admin)"
|
586 |
-
msgid "United States"
|
587 |
-
msgstr ""
|
588 |
-
|
589 |
-
#: src/Helpers.php:74
|
590 |
-
msgctxt "(Admin)"
|
591 |
-
msgid "Rest of the world"
|
592 |
-
msgstr ""
|
593 |
-
|
594 |
-
#: src/Helpers.php:145
|
595 |
-
msgid "An error has occurred. Please contact the site administrator."
|
596 |
-
msgstr ""
|
597 |
-
|
598 |
-
#: src/Installer/Installer.php:135
|
599 |
-
msgctxt "(Admin)"
|
600 |
-
msgid "Setup Wizard"
|
601 |
-
msgstr ""
|
602 |
-
|
603 |
-
#: src/Installer/Steps/ConfigurationPages.php:23
|
604 |
-
#: src/Installer/Steps/PolicySettings.php:23
|
605 |
-
#: src/Installer/Steps/PolicySettings.php:48
|
606 |
-
msgctxt "(Admin)"
|
607 |
-
msgid "— Create a new page —"
|
608 |
-
msgstr ""
|
609 |
-
|
610 |
-
#: src/Installer/Steps/PolicySettings.php:38
|
611 |
-
msgctxt "(Admin)"
|
612 |
-
msgid ""
|
613 |
-
"We have automatically selected your WooCommerce Terms & Conditions page."
|
614 |
-
msgstr ""
|
615 |
-
|
616 |
-
#: src/Modules/ContactForm7/ContactForm7.php:35
|
617 |
-
msgctxt "(Admin)"
|
618 |
-
msgid "gdpr terms txt"
|
619 |
-
msgstr ""
|
620 |
-
|
621 |
-
#: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
|
622 |
-
#, php-format
|
623 |
-
msgid "Nonce error for action \"%s\". Please go back and try again!"
|
624 |
-
msgstr ""
|
625 |
-
|
626 |
-
#: src/Router.php:149
|
627 |
-
msgctxt "(Admin)"
|
628 |
-
msgid "You do not have the required permissions to perform this action!"
|
629 |
-
msgstr "Нямате необходимите разрешения за изпълнение на това действие!"
|
630 |
-
|
631 |
-
#: views/admin/consent.php:3
|
632 |
-
msgctxt "(Admin)"
|
633 |
-
msgid "Default consent types"
|
634 |
-
msgstr "Стандартни типове съгласие"
|
635 |
-
|
636 |
-
#: views/admin/consent.php:4
|
637 |
-
msgctxt "(Admin)"
|
638 |
-
msgid ""
|
639 |
-
"These are the consent types that have been automatically registered by the "
|
640 |
-
"framework or a plugin."
|
641 |
-
msgstr ""
|
642 |
-
"Това са типовете съгласие, които са били автоматично регистрирани от рамката "
|
643 |
-
"или приставката."
|
644 |
-
|
645 |
-
#: views/admin/consent.php:7 views/admin/consent.php:52
|
646 |
-
msgctxt "(Admin)"
|
647 |
-
msgid "Slug"
|
648 |
-
msgstr ""
|
649 |
-
|
650 |
-
#: views/admin/consent.php:8 views/admin/consent.php:38
|
651 |
-
#: views/admin/consent.php:60
|
652 |
-
msgctxt "(Admin)"
|
653 |
-
msgid "Title"
|
654 |
-
msgstr "Заглавие"
|
655 |
-
|
656 |
-
#: views/admin/consent.php:9 views/admin/consent.php:41
|
657 |
-
#: views/admin/consent.php:63
|
658 |
-
msgctxt "(Admin)"
|
659 |
-
msgid "Description"
|
660 |
-
msgstr "Описание"
|
661 |
-
|
662 |
-
#: views/admin/consent.php:10
|
663 |
-
msgctxt "(Admin)"
|
664 |
-
msgid "Visibility"
|
665 |
-
msgstr "Видимост"
|
666 |
-
|
667 |
-
#: views/admin/consent.php:18
|
668 |
-
msgctxt "(Admin)"
|
669 |
-
msgid "Visible"
|
670 |
-
msgstr "Видимо"
|
671 |
-
|
672 |
-
#: views/admin/consent.php:20
|
673 |
-
msgctxt "(Admin)"
|
674 |
-
msgid "Hidden"
|
675 |
-
msgstr "Скрито"
|
676 |
-
|
677 |
-
#: views/admin/consent.php:29
|
678 |
-
msgctxt "(Admin)"
|
679 |
-
msgid "Custom consent types"
|
680 |
-
msgstr "Типове персонализирано съгласие"
|
681 |
-
|
682 |
-
#: views/admin/consent.php:30
|
683 |
-
msgctxt "(Admin)"
|
684 |
-
msgid ""
|
685 |
-
"Here you can add custom consent types to track. They will not be used "
|
686 |
-
"anywhere by default - you will need to build an integration for each of them."
|
687 |
-
msgstr ""
|
688 |
-
"Тук можете да добавяте персонализирани типове съгласие за проследяване. Те "
|
689 |
-
"няма да бъдат използвани никъде по подразбиране - ще трябва да изградите "
|
690 |
-
"интеграция за всеки от тях."
|
691 |
-
|
692 |
-
#: views/admin/consent.php:35
|
693 |
-
msgctxt "(Admin)"
|
694 |
-
msgid "Machine-readable slug"
|
695 |
-
msgstr ""
|
696 |
-
|
697 |
-
#: views/admin/consent.php:44 views/admin/consent.php:68
|
698 |
-
msgctxt "(Admin)"
|
699 |
-
msgid "Visible?"
|
700 |
-
msgstr "Видим?"
|
701 |
-
|
702 |
-
#: views/admin/consent.php:72
|
703 |
-
msgctxt "(Admin)"
|
704 |
-
msgid "Remove"
|
705 |
-
msgstr "Премахни"
|
706 |
-
|
707 |
-
#: views/admin/consent.php:93
|
708 |
-
msgctxt "(Admin)"
|
709 |
-
msgid "Additional info"
|
710 |
-
msgstr "ПОВЕЧЕ ИНФОРМАЦИЯ"
|
711 |
-
|
712 |
-
#: views/admin/consent.php:95
|
713 |
-
msgctxt "(Admin)"
|
714 |
-
msgid ""
|
715 |
-
"This text will be displayed to your data subjects on the Privacy Tools page."
|
716 |
-
msgstr ""
|
717 |
-
"Този текст ще се покаже на субектите Ви на данни на страницата Инструменти "
|
718 |
-
"за поверителност."
|
719 |
-
|
720 |
-
#: views/admin/data-subjects/search-form.php:2
|
721 |
-
msgctxt "(Admin)"
|
722 |
-
msgid ""
|
723 |
-
"On this page, you can find which data subjects personal data you are storing "
|
724 |
-
"and download, export or delete it."
|
725 |
-
msgstr ""
|
726 |
-
"На тази страница можете да намерите кои данни за лични данни съхранявате и "
|
727 |
-
"изтегляте, експортирате или изтривате."
|
728 |
-
|
729 |
-
#: views/admin/data-subjects/search-form.php:10
|
730 |
-
msgctxt "(Admin)"
|
731 |
-
msgid "Find data subject by email"
|
732 |
-
msgstr "Намери данни по Email"
|
733 |
-
|
734 |
-
#: views/admin/data-subjects/search-form.php:11
|
735 |
-
msgctxt "(Admin)"
|
736 |
-
msgid "Email address"
|
737 |
-
msgstr "Email адрес"
|
738 |
-
|
739 |
-
#: views/admin/data-subjects/search-form.php:16
|
740 |
-
msgctxt "(Admin)"
|
741 |
-
msgid "Search"
|
742 |
-
msgstr "ТЪРСИ"
|
743 |
-
|
744 |
-
#: views/admin/data-subjects/search-results.php:7
|
745 |
-
msgctxt "(Admin)"
|
746 |
-
msgid "Username"
|
747 |
-
msgstr "ПОТРЕБИТЕЛСКО ИМЕ"
|
748 |
-
|
749 |
-
#: views/admin/data-subjects/search-results.php:12
|
750 |
-
msgctxt "(Admin)"
|
751 |
-
msgid "is not a registered user."
|
752 |
-
msgstr "не е регистриран потребител."
|
753 |
-
|
754 |
-
#: views/admin/data-subjects/search-results.php:16
|
755 |
-
msgctxt "(Admin)"
|
756 |
-
msgid "Download data (html)"
|
757 |
-
msgstr "Свали данните (html) формат"
|
758 |
-
|
759 |
-
#: views/admin/data-subjects/search-results.php:17
|
760 |
-
msgctxt "(Admin)"
|
761 |
-
msgid "Export data (json)"
|
762 |
-
msgstr "Свали данните (json) формат"
|
763 |
-
|
764 |
-
#: views/admin/data-subjects/search-results.php:21
|
765 |
-
msgctxt "(Admin)"
|
766 |
-
msgid ""
|
767 |
-
"This user has admin capabilities. Deleting data via this interface is "
|
768 |
-
"disabled."
|
769 |
-
msgstr ""
|
770 |
-
"Този потребител има администраторски възможности. Изтриването на данни през "
|
771 |
-
"този интерфейс е деактивирано."
|
772 |
-
|
773 |
-
#: views/admin/data-subjects/search-results.php:24
|
774 |
-
msgctxt "(Admin)"
|
775 |
-
msgid "Anonymize data"
|
776 |
-
msgstr "Анонимни данни"
|
777 |
-
|
778 |
-
#: views/admin/data-subjects/search-results.php:25
|
779 |
-
msgctxt "(Admin)"
|
780 |
-
msgid "Delete data"
|
781 |
-
msgstr "Изтрий данните"
|
782 |
-
|
783 |
-
#: views/admin/data-subjects/search-results.php:29
|
784 |
-
msgctxt "(Admin)"
|
785 |
-
msgid "No data found!"
|
786 |
-
msgstr "Нищо не е намерено"
|
787 |
-
|
788 |
-
#: views/admin/general/delete-action-email.php:5
|
789 |
-
#: views/admin/general/export-action-email.php:5
|
790 |
-
#: views/installer/steps/configuration-settings.php:29
|
791 |
-
#: views/installer/steps/configuration-settings.php:79
|
792 |
-
msgid "Email address"
|
793 |
-
msgstr "Email адрес"
|
794 |
-
|
795 |
-
#: views/admin/general/delete-action-reassign.php:3
|
796 |
-
#: views/installer/steps/configuration-settings.php:50
|
797 |
-
msgctxt "(Admin)"
|
798 |
-
msgid "Delete content"
|
799 |
-
msgstr "Изтриване на съдържание"
|
800 |
-
|
801 |
-
#: views/admin/general/delete-action-reassign.php:6
|
802 |
-
#: views/installer/steps/configuration-settings.php:53
|
803 |
-
msgctxt "(Admin)"
|
804 |
-
msgid "Reassign content to a user"
|
805 |
-
msgstr "Преназначаване съдържание на потребител"
|
806 |
-
|
807 |
-
#: views/admin/general/delete-action-reassign.php:10
|
808 |
-
msgctxt "(Admin)"
|
809 |
-
msgid ""
|
810 |
-
"If the user has submitted any content on your site, should it be deleted or "
|
811 |
-
"reassigned to another user?"
|
812 |
-
msgstr ""
|
813 |
-
"Ако потребителят е изпратил съдържание на сайта Ви, трябва ли да бъде изтрит "
|
814 |
-
"или превъзложен на друг потребител?"
|
815 |
-
|
816 |
-
#: views/admin/general/description-data-page.php:2
|
817 |
-
msgctxt "(Admin)"
|
818 |
-
msgid ""
|
819 |
-
"Select the page where users can go to control their data. This page must "
|
820 |
-
"contain the [gdpr_privacy_tools] shortcode."
|
821 |
-
msgstr ""
|
822 |
-
"Изберете страницата, на която потребителите могат да отидат да контролират "
|
823 |
-
"данните си. Тази страница трябва да съдържа този код [gdpr_privacy_tools]"
|
824 |
-
|
825 |
-
#: views/admin/general/enable.php:9
|
826 |
-
msgctxt "(Admin)"
|
827 |
-
msgid "Enable the view, export and forget functionality for users and visitors"
|
828 |
-
msgstr ""
|
829 |
-
"Активирайте изгледа, експортирайте и забравете функционалността на "
|
830 |
-
"потребителите и посетителите"
|
831 |
-
|
832 |
-
#: views/admin/general/enable.php:12
|
833 |
-
msgctxt "(Admin)"
|
834 |
-
msgid ""
|
835 |
-
"Enable the Privacy Tools page on front-end and dashboard. This allows "
|
836 |
-
"visitors to request viewing and deleting their personal data and withdraw "
|
837 |
-
"consents."
|
838 |
-
msgstr ""
|
839 |
-
"Активирайте страницата Инструменти за поверителност на предния и на таблото "
|
840 |
-
"за управление. Това позволява на посетителите да изискват преглеждането и "
|
841 |
-
"изтриването на личните им данни и да оттеглят съгласието си."
|
842 |
-
|
843 |
-
#: views/admin/general/theme-compatibility.php:9
|
844 |
-
#: views/installer/steps/integrations.php:21
|
845 |
-
msgctxt "(Admin)"
|
846 |
-
msgid ""
|
847 |
-
"Automatically add Privacy Policy and Privacy Tools links to your site footer."
|
848 |
-
msgstr ""
|
849 |
-
"Автоматично добавяне на страниците Политика за лични данни и Управление на "
|
850 |
-
"лични данни в долната част на сайта."
|
851 |
-
|
852 |
-
#: views/admin/notices/header.php:4 views/admin/settings-page.php:3
|
853 |
-
#: views/installer/header.php:23
|
854 |
-
msgctxt "(Admin)"
|
855 |
-
msgid "The GDPR Framework"
|
856 |
-
msgstr ""
|
857 |
-
|
858 |
-
#: views/admin/notices/helper-autoinstall.php:2
|
859 |
-
msgctxt "(Admin)"
|
860 |
-
msgid ""
|
861 |
-
"A Privacy Policy page has been created, but it is empty. You can generate a "
|
862 |
-
"policy template on this page."
|
863 |
-
msgstr ""
|
864 |
-
"Страницата с правила за поверителност е създадена, но е празна. Можете да "
|
865 |
-
"генерирате шаблон за правила на тази страница."
|
866 |
-
|
867 |
-
#: views/admin/notices/helper-policy.php:2
|
868 |
-
msgctxt "(Admin)"
|
869 |
-
msgid ""
|
870 |
-
"Heads up - your Privacy Policy still requires some attention. Find the "
|
871 |
-
"places marked with [TODO] and replace them with real content!"
|
872 |
-
msgstr ""
|
873 |
-
"Глави - Вашата политика за поверителност все още изисква известно внимание. "
|
874 |
-
"Намерете местата, маркирани с [TODO], и ги заменете с истинско съдържание!"
|
875 |
-
|
876 |
-
#: views/admin/notices/helper-tools.php:2
|
877 |
-
msgctxt "(Admin)"
|
878 |
-
msgid "The contents of this page should contain the [gdpr_tools] shortcode."
|
879 |
-
msgstr ""
|
880 |
-
"Съдържанието на тази страница трябва да съдържа краткия код [gdpr_tools]."
|
881 |
-
|
882 |
-
#: views/admin/privacy-policy/description-policy-page.php:2
|
883 |
-
msgctxt "(Admin)"
|
884 |
-
msgid "Select the page which will contain your Privacy Policy"
|
885 |
-
msgstr "Изберете страницата, която ще съдържа вашата Политика за Лични данни"
|
886 |
-
|
887 |
-
#: views/admin/privacy-policy/generated.php:3
|
888 |
-
msgctxt "(Admin)"
|
889 |
-
msgid "Your Privacy Policy has been generated."
|
890 |
-
msgstr "Политиката за Лични данни беше генерирана."
|
891 |
-
|
892 |
-
#: views/admin/privacy-policy/generated.php:20
|
893 |
-
msgctxt "(Admin)"
|
894 |
-
msgid "« Back"
|
895 |
-
msgstr "« Назад"
|
896 |
-
|
897 |
-
#: views/admin/privacy-policy/header.php:2
|
898 |
-
msgctxt "(Admin)"
|
899 |
-
msgid ""
|
900 |
-
"This page allows you to generate a Privacy Policy based on the information "
|
901 |
-
"you entered below."
|
902 |
-
msgstr ""
|
903 |
-
"Тази страница ви позволява да генерирате Политика за личните данни въз "
|
904 |
-
"основа на въведената по-долу информация."
|
905 |
-
|
906 |
-
#: views/admin/settings-page.php:31
|
907 |
-
#, php-format
|
908 |
-
msgctxt "(Admin)"
|
909 |
-
msgid "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
910 |
-
msgstr ""
|
911 |
-
|
912 |
-
#: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
|
913 |
-
msgctxt "(Admin)"
|
914 |
-
msgid "Need more info?"
|
915 |
-
msgstr "Нуждаете се от повече информация?"
|
916 |
-
|
917 |
-
#: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
|
918 |
-
msgctxt "(Admin)"
|
919 |
-
msgid "Site Owner's guide to GDPR"
|
920 |
-
msgstr ""
|
921 |
-
|
922 |
-
#: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
|
923 |
-
msgctxt "(Admin)"
|
924 |
-
msgid "Read the full guide on GDPR compliance."
|
925 |
-
msgstr ""
|
926 |
-
|
927 |
-
#: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
|
928 |
-
msgctxt "(Admin)"
|
929 |
-
msgid "Knowledge base"
|
930 |
-
msgstr ""
|
931 |
-
|
932 |
-
#: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
|
933 |
-
msgctxt "(Admin)"
|
934 |
-
msgid "Check out the knowledge base for common questions and answers."
|
935 |
-
msgstr ""
|
936 |
-
|
937 |
-
#: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
|
938 |
-
msgctxt "(Admin)"
|
939 |
-
msgid "Developer's guide to GDPR"
|
940 |
-
msgstr ""
|
941 |
-
|
942 |
-
#: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
|
943 |
-
msgctxt "(Admin)"
|
944 |
-
msgid "We have a thorough guide to help making custom sites compliant."
|
945 |
-
msgstr ""
|
946 |
-
|
947 |
-
#: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
|
948 |
-
msgctxt "(Admin)"
|
949 |
-
msgid "Need help?"
|
950 |
-
msgstr ""
|
951 |
-
|
952 |
-
#: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
|
953 |
-
msgctxt "(Admin)"
|
954 |
-
msgid "Submit a support request"
|
955 |
-
msgstr ""
|
956 |
-
|
957 |
-
#: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
|
958 |
-
msgctxt "(Admin)"
|
959 |
-
msgid ""
|
960 |
-
"Found a bug or problem with the plugin? Post in the wordpress.org support "
|
961 |
-
"forum."
|
962 |
-
msgstr ""
|
963 |
-
|
964 |
-
#: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
|
965 |
-
msgctxt "(Admin)"
|
966 |
-
msgid "Request a consultation"
|
967 |
-
msgstr ""
|
968 |
-
|
969 |
-
#: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
|
970 |
-
msgctxt "(Admin)"
|
971 |
-
msgid ""
|
972 |
-
"Need development or legal assistance in making your site compliant? We can "
|
973 |
-
"help!"
|
974 |
-
msgstr ""
|
975 |
-
"Нуждаете се от развитие или правна помощ за привеждане на сайта Ви в "
|
976 |
-
"съответствие? Можем да помогнем!"
|
977 |
-
|
978 |
-
#: views/admin/wizard-buttons.php:2
|
979 |
-
msgctxt "(Admin)"
|
980 |
-
msgid "Restart setup wizard"
|
981 |
-
msgstr "Рестартирай настройката"
|
982 |
-
|
983 |
-
#: views/email/action-export.php:8 views/email/action-forget.php:12
|
984 |
-
msgctxt "(Admin)"
|
985 |
-
msgid ""
|
986 |
-
"This email is just for your information. You don't need to take any action"
|
987 |
-
msgstr ""
|
988 |
-
"Този имейл е само за вашата информация. Не е необходимо да предприемате "
|
989 |
-
"никакви действия"
|
990 |
-
|
991 |
-
#: views/email/action-forget.php:8
|
992 |
-
msgctxt "(Admin)"
|
993 |
-
msgid "The data subject had a user account on your website."
|
994 |
-
msgstr "Субектът на данните има потребителски профил на уебсайта Ви."
|
995 |
-
|
996 |
-
#: views/email/identify-data-subject.php:2
|
997 |
-
msgid "Someone has requested access to your data on"
|
998 |
-
msgstr "Някой е поискал достъп до данните ви"
|
999 |
-
|
1000 |
-
#: views/email/identify-data-subject.php:3
|
1001 |
-
msgid "If this was a mistake, just ignore this email and nothing will happen."
|
1002 |
-
msgstr ""
|
1003 |
-
"Ако това е грешка, просто игнорирайте този имейл и нищо няма да се случи. "
|
1004 |
-
"Никой няма да има достъп до Вашите данни, ако няма по - долния линк. За "
|
1005 |
-
"всеки случай ни уведомете на Email: privacy@zankov-group.com"
|
1006 |
-
|
1007 |
-
#: views/email/identify-data-subject.php:4
|
1008 |
-
msgid "To manage your data, visit the following address:"
|
1009 |
-
msgstr "За да управлявате данните си, посетете следния адрес:"
|
1010 |
-
|
1011 |
-
#: views/email/identify-data-subject.php:10
|
1012 |
-
msgid "This link is valid for 15 minutes."
|
1013 |
-
msgstr "Този линк ще бъде валиден само за 15 мин."
|
1014 |
-
|
1015 |
-
#: views/email/no-data.php:2
|
1016 |
-
msgid "Someone has requested information about your personal data on"
|
1017 |
-
msgstr "Някой е поискал информация за вашите лични данни"
|
1018 |
-
|
1019 |
-
#: views/email/no-data.php:3
|
1020 |
-
msgid "None of your personal data is stored on"
|
1021 |
-
msgstr "Не съхраняваме Ваши лични данни"
|
1022 |
-
|
1023 |
-
#: views/email/no-data.php:5
|
1024 |
-
msgid ""
|
1025 |
-
"If this was a mistake or you did not request this email, just ignore it and "
|
1026 |
-
"nothing will happen."
|
1027 |
-
msgstr ""
|
1028 |
-
"Ако това е грешка, просто игнорирайте този имейл и нищо няма да се случи. "
|
1029 |
-
"Никой няма да има достъп до Вашите данни, ако няма по - долния линк. За "
|
1030 |
-
"всеки случай ни уведомете на Email: privacy@zankov-group.com"
|
1031 |
-
|
1032 |
-
#: views/email/request-export.php:13 views/email/request-forget.php:13
|
1033 |
-
msgctxt "(Admin)"
|
1034 |
-
msgid "As a reminder: according to GDPR, you have 30 days to comply."
|
1035 |
-
msgstr "Напомняне: според GDPR имате 30 дни, за да се съобразите."
|
1036 |
-
|
1037 |
-
#: views/global/delete-action.php:2
|
1038 |
-
msgctxt "(Admin)"
|
1039 |
-
msgid "Automatically anonymize data"
|
1040 |
-
msgstr "Автоматично анонимизиране на данните"
|
1041 |
-
|
1042 |
-
#: views/global/delete-action.php:5
|
1043 |
-
msgctxt "(Admin)"
|
1044 |
-
msgid "Automatically delete data"
|
1045 |
-
msgstr "Автоматично изтриване на данните"
|
1046 |
-
|
1047 |
-
#: views/global/delete-action.php:9
|
1048 |
-
msgctxt "(Admin)"
|
1049 |
-
msgid "Automatically anonymize data and notify me via email"
|
1050 |
-
msgstr "Автоматично анонимизиране на данните и уведомяване чрез Email."
|
1051 |
-
|
1052 |
-
#: views/global/delete-action.php:13
|
1053 |
-
msgctxt "(Admin)"
|
1054 |
-
msgid "Automatically delete data and notify me via email"
|
1055 |
-
msgstr "Автоматично изтриване на данните и уведомяване чрез Email."
|
1056 |
-
|
1057 |
-
#: views/global/delete-action.php:16 views/global/export-action.php:10
|
1058 |
-
msgctxt "(Admin)"
|
1059 |
-
msgid "Only notify me via email"
|
1060 |
-
msgstr "Само ме уведоми чрез Email."
|
1061 |
-
|
1062 |
-
#: views/global/export-action.php:2
|
1063 |
-
msgctxt "(Admin)"
|
1064 |
-
msgid "Automatically download data"
|
1065 |
-
msgstr "Автоматично сваляне на данните"
|
1066 |
-
|
1067 |
-
#: views/global/export-action.php:6
|
1068 |
-
msgctxt "(Admin)"
|
1069 |
-
msgid "Automatically download data and notify me via email"
|
1070 |
-
msgstr "Автоматично сваляне на данните и уведомяване чрез Email."
|
1071 |
-
|
1072 |
-
#: views/installer/continue-notice.php:2
|
1073 |
-
msgctxt "(Admin)"
|
1074 |
-
msgid "The The GDPR Framework setup has not been finalized yet."
|
1075 |
-
msgstr "Настройката на GDPR все още не е финализирана."
|
1076 |
-
|
1077 |
-
#: views/installer/continue-notice.php:3
|
1078 |
-
msgctxt "(Admin)"
|
1079 |
-
msgid "You can continue the setup at any time."
|
1080 |
-
msgstr "Можете да продължите настройката по всяко време."
|
1081 |
-
|
1082 |
-
#: views/installer/continue-notice.php:6
|
1083 |
-
msgctxt "(Admin)"
|
1084 |
-
msgid "Continue the setup wizard"
|
1085 |
-
msgstr "Продължи с настройката"
|
1086 |
-
|
1087 |
-
#: views/installer/continue-notice.php:9
|
1088 |
-
msgctxt "(Admin)"
|
1089 |
-
msgid "Hide this message"
|
1090 |
-
msgstr "Скрий съобщението"
|
1091 |
-
|
1092 |
-
#: views/installer/footer.php:7
|
1093 |
-
msgid "Back"
|
1094 |
-
msgstr "Назад"
|
1095 |
-
|
1096 |
-
#: views/installer/header.php:26
|
1097 |
-
msgctxt "(Admin)"
|
1098 |
-
msgid "I need help"
|
1099 |
-
msgstr "Нуждая се от помощ"
|
1100 |
-
|
1101 |
-
#: views/installer/header.php:29
|
1102 |
-
msgctxt "(Admin)"
|
1103 |
-
msgid "Developer Docs"
|
1104 |
-
msgstr "Документация за програмисти"
|
1105 |
-
|
1106 |
-
#: views/installer/header.php:36
|
1107 |
-
msgctxt "(Admin)"
|
1108 |
-
msgid "Configuration"
|
1109 |
-
msgstr "Конфигурация"
|
1110 |
-
|
1111 |
-
#: views/installer/header.php:46
|
1112 |
-
msgctxt "(Admin)"
|
1113 |
-
msgid "Forms & Consent"
|
1114 |
-
msgstr "Форми и съгласие"
|
1115 |
-
|
1116 |
-
#: views/installer/header.php:51
|
1117 |
-
msgctxt "(Admin)"
|
1118 |
-
msgid "Integrations"
|
1119 |
-
msgstr "Интеграции"
|
1120 |
-
|
1121 |
-
#: views/installer/steps/configuration-settings.php:23
|
1122 |
-
#: views/installer/steps/configuration-settings.php:73
|
1123 |
-
msgctxt "(Admin)"
|
1124 |
-
msgid "Enter the email address to notify"
|
1125 |
-
msgstr "Въведете имейл адреса за уведомяване"
|
1126 |
-
|
1127 |
-
#: views/installer/steps/disclaimer.php:21
|
1128 |
-
msgctxt "(Admin)"
|
1129 |
-
msgid "I accept"
|
1130 |
-
msgstr "Приемам"
|
1131 |
-
|
1132 |
-
#: views/installer/welcome-notice.php:7
|
1133 |
-
msgctxt "(Admin)"
|
1134 |
-
msgid "Run the setup wizard"
|
1135 |
-
msgstr "Пуснете помощника за настройка"
|
1136 |
-
|
1137 |
-
#: views/installer/welcome-notice.php:11
|
1138 |
-
msgctxt "(Admin)"
|
1139 |
-
msgid "Auto-install pages"
|
1140 |
-
msgstr "Автоматично инсталиране на страници"
|
1141 |
-
|
1142 |
-
#: views/installer/welcome-notice.php:15
|
1143 |
-
msgctxt "(Admin)"
|
1144 |
-
msgid "Skip and install manually"
|
1145 |
-
msgstr "Инсталирай ръчно"
|
1146 |
-
|
1147 |
-
#: views/modules/contact-form-7/generator-privacy.php:6
|
1148 |
-
msgctxt "(Admin)"
|
1149 |
-
msgid ""
|
1150 |
-
"This tag generates the default text for Terms & Conditions and/or Privacy "
|
1151 |
-
"Policy checkbox."
|
1152 |
-
msgstr ""
|
1153 |
-
"Този маркер генерира стандартния текст за чекбокса за Общи условия и / или "
|
1154 |
-
"Политика за Лични данни."
|
1155 |
-
|
1156 |
-
#: views/modules/contact-form-7/generator-privacy.php:15
|
1157 |
-
msgid "Insert"
|
1158 |
-
msgstr "Вмъкни"
|
1159 |
-
|
1160 |
-
#: views/modules/wordpress-comments/terms-checkbox.php:6
|
1161 |
-
#: views/modules/wordpress-user/registration-terms-checkbox.php:7
|
1162 |
-
#, php-format
|
1163 |
-
msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
|
1164 |
-
msgstr "Приемам %sTerms and Conditions%s и %sPrivacy Policy%s"
|
1165 |
-
|
1166 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
|
1167 |
-
msgid "Manage consents"
|
1168 |
-
msgstr "Управлявайте съгласията"
|
1169 |
-
|
1170 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
|
1171 |
-
#: views/privacy-tools/form-consent.php:6
|
1172 |
-
msgid "Here you can withdraw any consents you have given."
|
1173 |
-
msgstr "Тук можете да оттеглите всички съгласия, които сте дали."
|
1174 |
-
|
1175 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
|
1176 |
-
#: views/privacy-tools/form-consent.php:9
|
1177 |
-
msgid "Consent types"
|
1178 |
-
msgstr "Типове съгласие"
|
1179 |
-
|
1180 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
|
1181 |
-
#: views/privacy-tools/form-consent.php:24
|
1182 |
-
msgid "Withdraw"
|
1183 |
-
msgstr "Оттегляне"
|
1184 |
-
|
1185 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
|
1186 |
-
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
|
1187 |
-
msgctxt "(Admin)"
|
1188 |
-
msgid "Delete this user and all data"
|
1189 |
-
msgstr "Изтрийте този потребител и всички данни"
|
1190 |
-
|
1191 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
|
1192 |
-
msgctxt "(Admin)"
|
1193 |
-
msgid "Delete my data"
|
1194 |
-
msgstr "Изтрий данните ми"
|
1195 |
-
|
1196 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
|
1197 |
-
#: views/privacy-tools/form-delete.php:13
|
1198 |
-
msgid "Delete all data we have gathered about you."
|
1199 |
-
msgstr "Изтрийте всички данни, които сме събрали за вас."
|
1200 |
-
|
1201 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
|
1202 |
-
#: views/privacy-tools/form-delete.php:14
|
1203 |
-
msgid "If you have a user account on our site, it will also be deleted."
|
1204 |
-
msgstr "Ако имате потребителски акаунт на нашия сайт, той също ще бъде изтрит."
|
1205 |
-
|
1206 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
|
1207 |
-
#: views/privacy-tools/form-delete.php:15
|
1208 |
-
msgid "Be careful - this action is permanent and CANNOT be undone."
|
1209 |
-
msgstr "Бъдете внимателни - това действие е не може да бъде отменено."
|
1210 |
-
|
1211 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
|
1212 |
-
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
|
1213 |
-
msgctxt "(Admin)"
|
1214 |
-
msgid ""
|
1215 |
-
"You seem to have an administrator or equivalent role, so deleting/"
|
1216 |
-
"anonymizing via this page is disabled."
|
1217 |
-
msgstr ""
|
1218 |
-
"Изглежда, че имате администратор или еквивалентна роля, така че "
|
1219 |
-
"изтриването / анонимирането чрез тази страница е деактивирано."
|
1220 |
-
|
1221 |
-
#: views/modules/wordpress-user/dashboard/form-export.php:7
|
1222 |
-
#: views/privacy-tools/form-export.php:1
|
1223 |
-
msgid "Download your data"
|
1224 |
-
msgstr "Изтеглете данните си"
|
1225 |
-
|
1226 |
-
#: views/modules/wordpress-user/dashboard/form-export.php:12
|
1227 |
-
#: views/privacy-tools/form-export.php:13
|
1228 |
-
msgid "Download as table"
|
1229 |
-
msgstr "Изтеглете в Таблица"
|
1230 |
-
|
1231 |
-
#: views/modules/wordpress-user/dashboard/form-export.php:15
|
1232 |
-
#: views/privacy-tools/form-export.php:22
|
1233 |
-
msgid "Export as JSON"
|
1234 |
-
msgstr "Експортирайте в JSON"
|
1235 |
-
|
1236 |
-
#: views/modules/wordpress-user/dashboard/form-export.php:19
|
1237 |
-
#: views/privacy-tools/form-export.php:4
|
1238 |
-
msgid "You can download all your data formatted as a table for viewing."
|
1239 |
-
msgstr ""
|
1240 |
-
"Можете да изтеглите всичките си данни, форматирани като таблица за преглед."
|
1241 |
-
|
1242 |
-
#: views/modules/wordpress-user/dashboard/form-export.php:20
|
1243 |
-
#: views/privacy-tools/form-export.php:5
|
1244 |
-
msgid "Alternatively, you can export it in machine-readable JSON format."
|
1245 |
-
msgstr "Друга възможност е да го експортирате във машинно четене JSON формат."
|
1246 |
-
|
1247 |
-
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
|
1248 |
-
msgctxt "(Admin)"
|
1249 |
-
msgid "Delete user and all data"
|
1250 |
-
msgstr "Изтрий потребителя и всички данни"
|
1251 |
-
|
1252 |
-
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
|
1253 |
-
msgctxt "(Admin)"
|
1254 |
-
msgid "Anonymize user and all data"
|
1255 |
-
msgstr "Анонимизиране на потребителя и всички данни"
|
1256 |
-
|
1257 |
-
#: views/modules/wordpress-user/dashboard/profile-page/header.php:2
|
1258 |
-
msgctxt "(Admin)"
|
1259 |
-
msgid "GDPR Data"
|
1260 |
-
msgstr "GDPR данни"
|
1261 |
-
|
1262 |
-
#: views/modules/wordpress-user/dashboard/profile-page/header.php:6
|
1263 |
-
msgctxt "(Admin)"
|
1264 |
-
msgid "This user has been anonymized."
|
1265 |
-
msgstr "Потребителя беше добавен, като анонимен."
|
1266 |
-
|
1267 |
-
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
|
1268 |
-
msgctxt "(Admin)"
|
1269 |
-
msgid "Consents given"
|
1270 |
-
msgstr "Дадени съгласия"
|
1271 |
-
|
1272 |
-
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
|
1273 |
-
msgctxt "(Admin)"
|
1274 |
-
msgid "No consents given"
|
1275 |
-
msgstr "Няма дадени съгласия"
|
1276 |
-
|
1277 |
-
#: views/privacy-tools/form-consent.php:2
|
1278 |
-
msgid "Consent"
|
1279 |
-
msgstr "Съгласие"
|
1280 |
-
|
1281 |
-
#: views/privacy-tools/form-delete.php:1
|
1282 |
-
#: views/privacy-tools/notice-admin-role.php:1
|
1283 |
-
msgid "Delete my user and data"
|
1284 |
-
msgstr "Изтрий ме, като потребител и данни."
|
1285 |
-
|
1286 |
-
#: views/privacy-tools/form-delete.php:7
|
1287 |
-
msgid "Delete my data"
|
1288 |
-
msgstr "Изтрий моите данни"
|
1289 |
-
|
1290 |
-
#: views/privacy-tools/form-identify.php:8
|
1291 |
-
msgid "Back to Privacy Tools"
|
1292 |
-
msgstr "Обратно в Политика за Лични данни"
|
1293 |
-
|
1294 |
-
#: views/privacy-tools/form-identify.php:14
|
1295 |
-
msgid "Identify yourself!"
|
1296 |
-
msgstr "Идентифицирай се!"
|
1297 |
-
|
1298 |
-
#: views/privacy-tools/form-identify.php:17
|
1299 |
-
#: views/privacy-tools/form-identify.php:20
|
1300 |
-
msgid "Enter your email address"
|
1301 |
-
msgstr "Въведете вашия Email адрес"
|
1302 |
-
|
1303 |
-
#: views/privacy-tools/form-identify.php:23
|
1304 |
-
msgid "Send email"
|
1305 |
-
msgstr "Изпрати Emial"
|
1306 |
-
|
1307 |
-
#: views/privacy-tools/notice-admin-role.php:4
|
1308 |
-
msgctxt "(Admin)"
|
1309 |
-
msgid "Data deletion is disabled for administrative accounts."
|
1310 |
-
msgstr "Изтриването на данни е забранено за административните профили."
|
1311 |
-
|
1312 |
-
#: views/privacy-tools/notices.php:3
|
1313 |
-
msgid ""
|
1314 |
-
"We will send you an email with the link to access your data. Please check "
|
1315 |
-
"your spam folder as well!"
|
1316 |
-
msgstr ""
|
1317 |
-
"Ще ви изпратим имейл с връзката, за да получите достъп до вашите данни. "
|
1318 |
-
"Моля, проверете и папката си за спам!"
|
1319 |
-
|
1320 |
-
#: views/privacy-tools/notices.php:7
|
1321 |
-
msgid "The email you entered does not appear to be a valid email."
|
1322 |
-
msgstr "Въведеният от вас имейл адрес не изглежда валиден имейл."
|
1323 |
-
|
1324 |
-
#: views/privacy-tools/notices.php:11
|
1325 |
-
msgid "Sorry - the link seems to have expired. Please try again!"
|
1326 |
-
msgstr "За съжаление - връзката изглежда е изтекла. Моля, опитайте отново!"
|
1327 |
-
|
1328 |
-
#: views/privacy-tools/notices.php:23
|
1329 |
-
msgid "Your personal data has been removed!"
|
1330 |
-
msgstr "Вашите лични данни бяха премахнати!"
|
1331 |
-
|
1332 |
-
#: views/privacy-tools/privacy-tools.php:5
|
1333 |
-
msgid "You are identified as"
|
1334 |
-
msgstr "Вие сте идентифицирани като"
|
1 |
+
# SOME DESCRIPTIVE TITLE.
|
2 |
+
# Copyright (C) YEAR Codelight
|
3 |
+
# This file is distributed under the same license as the The GDPR Framework package.
|
4 |
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
+
#
|
6 |
+
msgid ""
|
7 |
+
msgstr ""
|
8 |
+
"Project-Id-Version: The GDPR Framework 1.0\n"
|
9 |
+
"Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
|
10 |
+
"POT-Creation-Date: 2018-04-16 10:50+0000\n"
|
11 |
+
"PO-Revision-Date: 2018-05-05 18:20+0300\n"
|
12 |
+
"Language-Team: \n"
|
13 |
+
"MIME-Version: 1.0\n"
|
14 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
+
"Content-Transfer-Encoding: 8bit\n"
|
16 |
+
"X-Generator: Poedit 2.0.7\n"
|
17 |
+
"Last-Translator: Zankov Group LTD. <office@zankov-group.com>\n"
|
18 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
19 |
+
"Language: bg_BG\n"
|
20 |
+
|
21 |
+
#: gdpr-framework.php:26
|
22 |
+
msgctxt "(Admin)"
|
23 |
+
msgid "WordPress GDPR › Error"
|
24 |
+
msgstr ""
|
25 |
+
|
26 |
+
#: gdpr-framework.php:35
|
27 |
+
msgctxt "(Admin)"
|
28 |
+
msgid "Invalid PHP version"
|
29 |
+
msgstr ""
|
30 |
+
|
31 |
+
#: gdpr-framework.php:35
|
32 |
+
msgctxt "(Admin)"
|
33 |
+
msgid "You must be using PHP 5.6.33 or greater."
|
34 |
+
msgstr ""
|
35 |
+
|
36 |
+
#: gdpr-framework.php:42
|
37 |
+
msgctxt "(Admin)"
|
38 |
+
msgid "Invalid WordPress version"
|
39 |
+
msgstr ""
|
40 |
+
|
41 |
+
#: gdpr-framework.php:42
|
42 |
+
msgctxt "(Admin)"
|
43 |
+
msgid "You must be using WordPress 4.3.0 or greater."
|
44 |
+
msgstr ""
|
45 |
+
|
46 |
+
#: gdpr-framework.php:52
|
47 |
+
msgctxt "(Admin)"
|
48 |
+
msgid ""
|
49 |
+
"You appear to be running a development version of GDPR. You must run "
|
50 |
+
"<code>composer install</code> from the plugin directory."
|
51 |
+
msgstr ""
|
52 |
+
|
53 |
+
#: gdpr-framework.php:53
|
54 |
+
msgctxt "(Admin)"
|
55 |
+
msgid "Autoloader not found."
|
56 |
+
msgstr ""
|
57 |
+
|
58 |
+
#: gdpr-framework.php:115
|
59 |
+
msgctxt "(Admin)"
|
60 |
+
msgid "Anonymous"
|
61 |
+
msgstr ""
|
62 |
+
|
63 |
+
#: src/Admin/AdminTab.php:115
|
64 |
+
msgctxt "(Admin)"
|
65 |
+
msgid "Save"
|
66 |
+
msgstr "Запази"
|
67 |
+
|
68 |
+
#: src/Admin/AdminTab.php:151
|
69 |
+
msgctxt "(Admin)"
|
70 |
+
msgid "Policy generated!"
|
71 |
+
msgstr "Политиката е генерирана!"
|
72 |
+
|
73 |
+
#: src/Admin/AdminTabGeneral.php:11
|
74 |
+
msgctxt "(Admin)"
|
75 |
+
msgid "General"
|
76 |
+
msgstr "Главни"
|
77 |
+
|
78 |
+
#: src/Admin/AdminTabGeneral.php:38
|
79 |
+
msgctxt "(Admin)"
|
80 |
+
msgid "General Settings"
|
81 |
+
msgstr "Главни настройки"
|
82 |
+
|
83 |
+
#: src/Admin/AdminTabGeneral.php:43
|
84 |
+
msgctxt "(Admin)"
|
85 |
+
msgid "Enable Privacy Tools"
|
86 |
+
msgstr "Включи Политика за лични данни"
|
87 |
+
|
88 |
+
#: src/Admin/AdminTabGeneral.php:53
|
89 |
+
msgctxt "(Admin)"
|
90 |
+
msgid "Pages"
|
91 |
+
msgstr "Страници"
|
92 |
+
|
93 |
+
#: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
|
94 |
+
msgctxt "(Admin)"
|
95 |
+
msgid "Privacy Tools Page"
|
96 |
+
msgstr "Страница с инструменти "
|
97 |
+
|
98 |
+
#: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
|
99 |
+
msgctxt "(Admin)"
|
100 |
+
msgid "Privacy Policy Page"
|
101 |
+
msgstr "Страница за лични данни"
|
102 |
+
|
103 |
+
#: src/Admin/AdminTabGeneral.php:72
|
104 |
+
msgctxt "(Admin)"
|
105 |
+
msgid "Terms & Conditions Page"
|
106 |
+
msgstr "Страница за Общи условия"
|
107 |
+
|
108 |
+
#: src/Admin/AdminTabGeneral.php:82
|
109 |
+
msgctxt "(Admin)"
|
110 |
+
msgid "View & Export Data"
|
111 |
+
msgstr "Преглед и Експортиране на данни"
|
112 |
+
|
113 |
+
#: src/Admin/AdminTabGeneral.php:87
|
114 |
+
msgctxt "(Admin)"
|
115 |
+
msgid "Export action"
|
116 |
+
msgstr "Действие за експортиране"
|
117 |
+
|
118 |
+
#: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
|
119 |
+
msgctxt "(Admin)"
|
120 |
+
msgid "Email to notify"
|
121 |
+
msgstr "Email за уведомяване"
|
122 |
+
|
123 |
+
#: src/Admin/AdminTabGeneral.php:105
|
124 |
+
msgctxt "(Admin)"
|
125 |
+
msgid "Delete & Anonymize Data"
|
126 |
+
msgstr "Изтриване и Анонимни данни"
|
127 |
+
|
128 |
+
#: src/Admin/AdminTabGeneral.php:110
|
129 |
+
msgctxt "(Admin)"
|
130 |
+
msgid "Delete action"
|
131 |
+
msgstr "Действие при изтриване"
|
132 |
+
|
133 |
+
#: src/Admin/AdminTabGeneral.php:117
|
134 |
+
msgctxt "(Admin)"
|
135 |
+
msgid "Delete or reassign content?"
|
136 |
+
msgstr ""
|
137 |
+
|
138 |
+
#: src/Admin/AdminTabGeneral.php:125
|
139 |
+
msgctxt "(Admin)"
|
140 |
+
msgid "Reassign content to"
|
141 |
+
msgstr ""
|
142 |
+
|
143 |
+
#: src/Admin/AdminTabGeneral.php:145
|
144 |
+
msgctxt "(Admin)"
|
145 |
+
msgid "Styling"
|
146 |
+
msgstr "Стил"
|
147 |
+
|
148 |
+
#: src/Admin/AdminTabGeneral.php:150
|
149 |
+
msgctxt "(Admin)"
|
150 |
+
msgid "Enable basic styling on Privacy Tools page"
|
151 |
+
msgstr ""
|
152 |
+
|
153 |
+
#: src/Admin/AdminTabGeneral.php:162
|
154 |
+
msgctxt "(Admin)"
|
155 |
+
msgid "Compatibility"
|
156 |
+
msgstr "Съвместимост"
|
157 |
+
|
158 |
+
#: src/Admin/AdminTabGeneral.php:167
|
159 |
+
msgctxt "(Admin)"
|
160 |
+
msgid "Enable automatic theme compatibility"
|
161 |
+
msgstr ""
|
162 |
+
|
163 |
+
#: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
|
164 |
+
#: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
|
165 |
+
#: views/installer/steps/configuration-settings.php:62
|
166 |
+
#, fuzzy
|
167 |
+
msgctxt "(Admin)"
|
168 |
+
msgid "— Select —"
|
169 |
+
msgstr "Избери размера на бутона."
|
170 |
+
|
171 |
+
#: src/Admin/WordpressAdmin.php:65
|
172 |
+
msgctxt "(Admin)"
|
173 |
+
msgid "Privacy & GDPR Settings"
|
174 |
+
msgstr ""
|
175 |
+
|
176 |
+
#: src/Admin/WordpressAdmin.php:66
|
177 |
+
msgctxt "(Admin)"
|
178 |
+
msgid "Privacy"
|
179 |
+
msgstr ""
|
180 |
+
|
181 |
+
#: src/Components/Consent/AdminTabConsent.php:30
|
182 |
+
#: src/Components/Consent/AdminTabConsent.php:49
|
183 |
+
msgctxt "(Admin)"
|
184 |
+
msgid "Consent"
|
185 |
+
msgstr "Съгласие"
|
186 |
+
|
187 |
+
#: src/Components/Consent/AdminTabConsent.php:157
|
188 |
+
msgctxt "(Admin)"
|
189 |
+
msgid "Consent slug is a required field!"
|
190 |
+
msgstr ""
|
191 |
+
|
192 |
+
#: src/Components/Consent/AdminTabConsent.php:162
|
193 |
+
msgctxt "(Admin)"
|
194 |
+
msgid ""
|
195 |
+
"You may only use alphanumeric characters, dash and underscore in the consent "
|
196 |
+
"slug field."
|
197 |
+
msgstr ""
|
198 |
+
|
199 |
+
#: src/Components/Consent/AdminTabConsent.php:167
|
200 |
+
msgctxt "(Admin)"
|
201 |
+
msgid "Consent title is a required field!"
|
202 |
+
msgstr "Типовото съгласие е задължително поле!"
|
203 |
+
|
204 |
+
#: src/Components/Consent/ConsentManager.php:46
|
205 |
+
#: views/modules/contact-form-7/content-privacy.php:2
|
206 |
+
#: views/modules/wordpress-comments/terms-checkbox.php:14
|
207 |
+
#: views/modules/wordpress-user/registration-terms-checkbox.php:15
|
208 |
+
#, php-format
|
209 |
+
msgid "I accept the %sPrivacy Policy%s"
|
210 |
+
msgstr "Приемам %sPrivacy Policy%s"
|
211 |
+
|
212 |
+
#: src/Components/Consent/ConsentManager.php:50
|
213 |
+
#: src/Components/Consent/ConsentManager.php:69
|
214 |
+
msgctxt "(Admin)"
|
215 |
+
msgid ""
|
216 |
+
"This consent is not visible by default. If someone wishes to withdraw it, "
|
217 |
+
"they should simply request to delete all their data."
|
218 |
+
msgstr ""
|
219 |
+
"Това съгласие не се вижда по подразбиране. Ако някой желае да го оттегли, "
|
220 |
+
"той трябва просто да поиска да изтрие всичките си данни."
|
221 |
+
|
222 |
+
#: src/Components/Consent/ConsentManager.php:65
|
223 |
+
#, php-format
|
224 |
+
msgid "I accept the %sTerms & Conditions%s"
|
225 |
+
msgstr "Приемам %sTerms & Conditions%s"
|
226 |
+
|
227 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
|
228 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
|
229 |
+
#: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
|
230 |
+
msgctxt "(Admin)"
|
231 |
+
msgid "Privacy Policy"
|
232 |
+
msgstr "Политика за Лични данни"
|
233 |
+
|
234 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
|
235 |
+
msgctxt "(Admin)"
|
236 |
+
msgid "Company information"
|
237 |
+
msgstr "Информация за Фирмата"
|
238 |
+
|
239 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
|
240 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
|
241 |
+
msgctxt "(Admin)"
|
242 |
+
msgid "Company Name"
|
243 |
+
msgstr "Име на Фирмата"
|
244 |
+
|
245 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
|
246 |
+
msgctxt "(Admin)"
|
247 |
+
msgid "Company Email"
|
248 |
+
msgstr "Фирмен Email"
|
249 |
+
|
250 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
|
251 |
+
msgctxt "(Admin)"
|
252 |
+
msgid "Company Location"
|
253 |
+
msgstr "Местоположение на Фирмата"
|
254 |
+
|
255 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
|
256 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
|
257 |
+
msgctxt "(Admin)"
|
258 |
+
msgid "Representative Contact Name"
|
259 |
+
msgstr ""
|
260 |
+
|
261 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
|
262 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
|
263 |
+
msgctxt "(Admin)"
|
264 |
+
msgid "Representative Contact Email"
|
265 |
+
msgstr ""
|
266 |
+
|
267 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
|
268 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
|
269 |
+
msgctxt "(Admin)"
|
270 |
+
msgid "Representative Contact Phone"
|
271 |
+
msgstr ""
|
272 |
+
|
273 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
|
274 |
+
msgctxt "(Admin)"
|
275 |
+
msgid "Data Protection Authority"
|
276 |
+
msgstr ""
|
277 |
+
|
278 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
|
279 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
|
280 |
+
msgctxt "(Admin)"
|
281 |
+
msgid "Data Protection Authority Website"
|
282 |
+
msgstr ""
|
283 |
+
|
284 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
|
285 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
|
286 |
+
msgctxt "(Admin)"
|
287 |
+
msgid "Data Protection Authority Email"
|
288 |
+
msgstr ""
|
289 |
+
|
290 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
|
291 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
|
292 |
+
msgctxt "(Admin)"
|
293 |
+
msgid "Data Protection Authority Phone"
|
294 |
+
msgstr ""
|
295 |
+
|
296 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
|
297 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
|
298 |
+
msgctxt "(Admin)"
|
299 |
+
msgid "Data Protection Officer"
|
300 |
+
msgstr "Служителя за защита на данните"
|
301 |
+
|
302 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
|
303 |
+
msgctxt "(Admin)"
|
304 |
+
msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
|
305 |
+
msgstr ""
|
306 |
+
|
307 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
|
308 |
+
msgctxt "(Admin)"
|
309 |
+
msgid "Data Protection Officer Name"
|
310 |
+
msgstr "Име на Служителя по защита на данните"
|
311 |
+
|
312 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
|
313 |
+
msgctxt "(Admin)"
|
314 |
+
msgid "Data Protection Officer Email"
|
315 |
+
msgstr "Email на Служителя по защита на данните"
|
316 |
+
|
317 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
|
318 |
+
msgctxt "(Admin)"
|
319 |
+
msgid "Contact Email"
|
320 |
+
msgstr "Email за конакт"
|
321 |
+
|
322 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
|
323 |
+
msgctxt "(Admin)"
|
324 |
+
msgid "Representative Contact"
|
325 |
+
msgstr "Представителен контакти"
|
326 |
+
|
327 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
|
328 |
+
msgctxt "(Admin)"
|
329 |
+
msgid "Knowledge base: Do I need to appoint an EU-based representative?"
|
330 |
+
msgstr ""
|
331 |
+
|
332 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
|
333 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
|
334 |
+
msgctxt "(Admin)"
|
335 |
+
msgid "DPO Name"
|
336 |
+
msgstr "ДПО Име"
|
337 |
+
|
338 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
|
339 |
+
msgctxt "(Admin)"
|
340 |
+
msgid "Save & Generate Policy"
|
341 |
+
msgstr "Запазване и генериране на правила"
|
342 |
+
|
343 |
+
#: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
|
344 |
+
#: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
|
345 |
+
#: views/themes/storefront/footer.php:3
|
346 |
+
#: views/themes/twentyseventeen/footer.php:3
|
347 |
+
#: views/themes/twentysixteen/footer.php:4
|
348 |
+
msgid "Privacy Policy"
|
349 |
+
msgstr "Политика за Лични данни"
|
350 |
+
|
351 |
+
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
|
352 |
+
msgid "This page is currently disabled."
|
353 |
+
msgstr "Тази страница не е активна."
|
354 |
+
|
355 |
+
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
|
356 |
+
#: src/Installer/Installer.php:279
|
357 |
+
#: src/Installer/Steps/ConfigurationPages.php:55
|
358 |
+
#: views/themes/storefront/footer.php:7
|
359 |
+
#: views/themes/twentyseventeen/footer.php:7
|
360 |
+
#: views/themes/twentysixteen/footer.php:9
|
361 |
+
msgid "Privacy Tools"
|
362 |
+
msgstr "Управление на Лични данни"
|
363 |
+
|
364 |
+
#: src/Components/Support/AdminTabSupport.php:13
|
365 |
+
#: src/Components/Support/AdminTabSupport.php:20
|
366 |
+
msgctxt "(Admin)"
|
367 |
+
msgid "Support"
|
368 |
+
msgstr ""
|
369 |
+
|
370 |
+
#: src/Components/WordpressComments/WordpressComments.php:90
|
371 |
+
#, php-format
|
372 |
+
msgid ""
|
373 |
+
"%sERROR:%s You need to accept the terms and conditions to post a comment."
|
374 |
+
msgstr "%sERROR:%s Трябва да приемете условията и за публикуване на коментар."
|
375 |
+
|
376 |
+
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
|
377 |
+
#: views/privacy-tools/notices.php:19
|
378 |
+
msgid "We have received your request and will reply within 30 days."
|
379 |
+
msgstr "Получихме Вашето искане и ще отговорим в рамките на 30 дни."
|
380 |
+
|
381 |
+
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
|
382 |
+
#: views/privacy-tools/notices.php:15
|
383 |
+
msgid "Consent withdrawn."
|
384 |
+
msgstr "Съгласието е оттеглено."
|
385 |
+
|
386 |
+
#: src/Components/WordpressUser/RegistrationForm.php:42
|
387 |
+
msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
|
388 |
+
msgstr "<strong>ERROR</strong>: Трябва да приемете Общите условия."
|
389 |
+
|
390 |
+
#: src/Components/WordpressUser/WordpressUser.php:63
|
391 |
+
#: src/Components/WordpressUser/WordpressUser.php:64
|
392 |
+
#: views/modules/wordpress-user/dashboard/data-page/header.php:2
|
393 |
+
msgctxt "(Admin)"
|
394 |
+
msgid "Privacy Tools"
|
395 |
+
msgstr "Управление на Лични данни"
|
396 |
+
|
397 |
+
#: src/DataSubject/AdminTabDataSubject.php:27
|
398 |
+
#: src/DataSubject/AdminTabDataSubject.php:41
|
399 |
+
msgctxt "(Admin)"
|
400 |
+
msgid "Data Subjects"
|
401 |
+
msgstr "Субекти на данни"
|
402 |
+
|
403 |
+
#: src/DataSubject/DataRepository.php:143
|
404 |
+
msgid "Data exported"
|
405 |
+
msgstr "Данните са Експортирани"
|
406 |
+
|
407 |
+
#: src/DataSubject/DataRepository.php:158
|
408 |
+
msgid "Data export request"
|
409 |
+
msgstr "Заявка за Експорт на данни"
|
410 |
+
|
411 |
+
#: src/DataSubject/DataRepository.php:171
|
412 |
+
msgid "Data removed"
|
413 |
+
msgstr "Данните са премахнати"
|
414 |
+
|
415 |
+
#: src/DataSubject/DataRepository.php:186
|
416 |
+
msgid "Data removal request"
|
417 |
+
msgstr "Заявка за премахване на Данни"
|
418 |
+
|
419 |
+
#: src/DataSubject/DataSubjectIdentificator.php:65
|
420 |
+
#: src/DataSubject/DataSubjectIdentificator.php:82
|
421 |
+
msgid "Your personal data on"
|
422 |
+
msgstr "Вашите лични данни за"
|
423 |
+
|
424 |
+
#: src/Helpers.php:27
|
425 |
+
msgctxt "(Admin)"
|
426 |
+
msgid "Austria"
|
427 |
+
msgstr ""
|
428 |
+
|
429 |
+
#: src/Helpers.php:28
|
430 |
+
msgctxt "(Admin)"
|
431 |
+
msgid "Belgium"
|
432 |
+
msgstr ""
|
433 |
+
|
434 |
+
#: src/Helpers.php:29
|
435 |
+
msgctxt "(Admin)"
|
436 |
+
msgid "Bulgaria"
|
437 |
+
msgstr ""
|
438 |
+
|
439 |
+
#: src/Helpers.php:30
|
440 |
+
msgctxt "(Admin)"
|
441 |
+
msgid "Croatia"
|
442 |
+
msgstr ""
|
443 |
+
|
444 |
+
#: src/Helpers.php:31
|
445 |
+
msgctxt "(Admin)"
|
446 |
+
msgid "Cyprus"
|
447 |
+
msgstr ""
|
448 |
+
|
449 |
+
#: src/Helpers.php:32
|
450 |
+
msgctxt "(Admin)"
|
451 |
+
msgid "Czech Republic"
|
452 |
+
msgstr ""
|
453 |
+
|
454 |
+
#: src/Helpers.php:33
|
455 |
+
msgctxt "(Admin)"
|
456 |
+
msgid "Denmark"
|
457 |
+
msgstr ""
|
458 |
+
|
459 |
+
#: src/Helpers.php:34
|
460 |
+
msgctxt "(Admin)"
|
461 |
+
msgid "Estonia"
|
462 |
+
msgstr ""
|
463 |
+
|
464 |
+
#: src/Helpers.php:35
|
465 |
+
msgctxt "(Admin)"
|
466 |
+
msgid "Finland"
|
467 |
+
msgstr ""
|
468 |
+
|
469 |
+
#: src/Helpers.php:36
|
470 |
+
msgctxt "(Admin)"
|
471 |
+
msgid "France"
|
472 |
+
msgstr ""
|
473 |
+
|
474 |
+
#: src/Helpers.php:37
|
475 |
+
msgctxt "(Admin)"
|
476 |
+
msgid "Germany"
|
477 |
+
msgstr ""
|
478 |
+
|
479 |
+
#: src/Helpers.php:38
|
480 |
+
msgctxt "(Admin)"
|
481 |
+
msgid "Greece"
|
482 |
+
msgstr ""
|
483 |
+
|
484 |
+
#: src/Helpers.php:39
|
485 |
+
msgctxt "(Admin)"
|
486 |
+
msgid "Hungary"
|
487 |
+
msgstr ""
|
488 |
+
|
489 |
+
#: src/Helpers.php:40
|
490 |
+
msgctxt "(Admin)"
|
491 |
+
msgid "Ireland"
|
492 |
+
msgstr ""
|
493 |
+
|
494 |
+
#: src/Helpers.php:41
|
495 |
+
msgctxt "(Admin)"
|
496 |
+
msgid "Italy"
|
497 |
+
msgstr ""
|
498 |
+
|
499 |
+
#: src/Helpers.php:42
|
500 |
+
msgctxt "(Admin)"
|
501 |
+
msgid "Latvia"
|
502 |
+
msgstr ""
|
503 |
+
|
504 |
+
#: src/Helpers.php:43
|
505 |
+
msgctxt "(Admin)"
|
506 |
+
msgid "Lithuania"
|
507 |
+
msgstr ""
|
508 |
+
|
509 |
+
#: src/Helpers.php:44
|
510 |
+
msgctxt "(Admin)"
|
511 |
+
msgid "Luxembourg"
|
512 |
+
msgstr ""
|
513 |
+
|
514 |
+
#: src/Helpers.php:45
|
515 |
+
msgctxt "(Admin)"
|
516 |
+
msgid "Malta"
|
517 |
+
msgstr ""
|
518 |
+
|
519 |
+
#: src/Helpers.php:46
|
520 |
+
msgctxt "(Admin)"
|
521 |
+
msgid "Netherlands"
|
522 |
+
msgstr ""
|
523 |
+
|
524 |
+
#: src/Helpers.php:47
|
525 |
+
msgctxt "(Admin)"
|
526 |
+
msgid "Poland"
|
527 |
+
msgstr ""
|
528 |
+
|
529 |
+
#: src/Helpers.php:48
|
530 |
+
msgctxt "(Admin)"
|
531 |
+
msgid "Portugal"
|
532 |
+
msgstr ""
|
533 |
+
|
534 |
+
#: src/Helpers.php:49
|
535 |
+
msgctxt "(Admin)"
|
536 |
+
msgid "Romania"
|
537 |
+
msgstr ""
|
538 |
+
|
539 |
+
#: src/Helpers.php:50
|
540 |
+
msgctxt "(Admin)"
|
541 |
+
msgid "Slovakia"
|
542 |
+
msgstr ""
|
543 |
+
|
544 |
+
#: src/Helpers.php:51
|
545 |
+
msgctxt "(Admin)"
|
546 |
+
msgid "Slovenia"
|
547 |
+
msgstr ""
|
548 |
+
|
549 |
+
#: src/Helpers.php:52
|
550 |
+
msgctxt "(Admin)"
|
551 |
+
msgid "Spain"
|
552 |
+
msgstr ""
|
553 |
+
|
554 |
+
#: src/Helpers.php:53
|
555 |
+
msgctxt "(Admin)"
|
556 |
+
msgid "Sweden"
|
557 |
+
msgstr ""
|
558 |
+
|
559 |
+
#: src/Helpers.php:54
|
560 |
+
msgctxt "(Admin)"
|
561 |
+
msgid "United Kingdom"
|
562 |
+
msgstr ""
|
563 |
+
|
564 |
+
#: src/Helpers.php:69
|
565 |
+
msgctxt "(Admin)"
|
566 |
+
msgid "Iceland"
|
567 |
+
msgstr ""
|
568 |
+
|
569 |
+
#: src/Helpers.php:70
|
570 |
+
msgctxt "(Admin)"
|
571 |
+
msgid "Norway"
|
572 |
+
msgstr ""
|
573 |
+
|
574 |
+
#: src/Helpers.php:71
|
575 |
+
msgctxt "(Admin)"
|
576 |
+
msgid "Liechtenstein"
|
577 |
+
msgstr ""
|
578 |
+
|
579 |
+
#: src/Helpers.php:72
|
580 |
+
msgctxt "(Admin)"
|
581 |
+
msgid "Switzerland"
|
582 |
+
msgstr ""
|
583 |
+
|
584 |
+
#: src/Helpers.php:73
|
585 |
+
msgctxt "(Admin)"
|
586 |
+
msgid "United States"
|
587 |
+
msgstr ""
|
588 |
+
|
589 |
+
#: src/Helpers.php:74
|
590 |
+
msgctxt "(Admin)"
|
591 |
+
msgid "Rest of the world"
|
592 |
+
msgstr ""
|
593 |
+
|
594 |
+
#: src/Helpers.php:145
|
595 |
+
msgid "An error has occurred. Please contact the site administrator."
|
596 |
+
msgstr ""
|
597 |
+
|
598 |
+
#: src/Installer/Installer.php:135
|
599 |
+
msgctxt "(Admin)"
|
600 |
+
msgid "Setup Wizard"
|
601 |
+
msgstr ""
|
602 |
+
|
603 |
+
#: src/Installer/Steps/ConfigurationPages.php:23
|
604 |
+
#: src/Installer/Steps/PolicySettings.php:23
|
605 |
+
#: src/Installer/Steps/PolicySettings.php:48
|
606 |
+
msgctxt "(Admin)"
|
607 |
+
msgid "— Create a new page —"
|
608 |
+
msgstr ""
|
609 |
+
|
610 |
+
#: src/Installer/Steps/PolicySettings.php:38
|
611 |
+
msgctxt "(Admin)"
|
612 |
+
msgid ""
|
613 |
+
"We have automatically selected your WooCommerce Terms & Conditions page."
|
614 |
+
msgstr ""
|
615 |
+
|
616 |
+
#: src/Modules/ContactForm7/ContactForm7.php:35
|
617 |
+
msgctxt "(Admin)"
|
618 |
+
msgid "gdpr terms txt"
|
619 |
+
msgstr ""
|
620 |
+
|
621 |
+
#: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
|
622 |
+
#, php-format
|
623 |
+
msgid "Nonce error for action \"%s\". Please go back and try again!"
|
624 |
+
msgstr ""
|
625 |
+
|
626 |
+
#: src/Router.php:149
|
627 |
+
msgctxt "(Admin)"
|
628 |
+
msgid "You do not have the required permissions to perform this action!"
|
629 |
+
msgstr "Нямате необходимите разрешения за изпълнение на това действие!"
|
630 |
+
|
631 |
+
#: views/admin/consent.php:3
|
632 |
+
msgctxt "(Admin)"
|
633 |
+
msgid "Default consent types"
|
634 |
+
msgstr "Стандартни типове съгласие"
|
635 |
+
|
636 |
+
#: views/admin/consent.php:4
|
637 |
+
msgctxt "(Admin)"
|
638 |
+
msgid ""
|
639 |
+
"These are the consent types that have been automatically registered by the "
|
640 |
+
"framework or a plugin."
|
641 |
+
msgstr ""
|
642 |
+
"Това са типовете съгласие, които са били автоматично регистрирани от рамката "
|
643 |
+
"или приставката."
|
644 |
+
|
645 |
+
#: views/admin/consent.php:7 views/admin/consent.php:52
|
646 |
+
msgctxt "(Admin)"
|
647 |
+
msgid "Slug"
|
648 |
+
msgstr ""
|
649 |
+
|
650 |
+
#: views/admin/consent.php:8 views/admin/consent.php:38
|
651 |
+
#: views/admin/consent.php:60
|
652 |
+
msgctxt "(Admin)"
|
653 |
+
msgid "Title"
|
654 |
+
msgstr "Заглавие"
|
655 |
+
|
656 |
+
#: views/admin/consent.php:9 views/admin/consent.php:41
|
657 |
+
#: views/admin/consent.php:63
|
658 |
+
msgctxt "(Admin)"
|
659 |
+
msgid "Description"
|
660 |
+
msgstr "Описание"
|
661 |
+
|
662 |
+
#: views/admin/consent.php:10
|
663 |
+
msgctxt "(Admin)"
|
664 |
+
msgid "Visibility"
|
665 |
+
msgstr "Видимост"
|
666 |
+
|
667 |
+
#: views/admin/consent.php:18
|
668 |
+
msgctxt "(Admin)"
|
669 |
+
msgid "Visible"
|
670 |
+
msgstr "Видимо"
|
671 |
+
|
672 |
+
#: views/admin/consent.php:20
|
673 |
+
msgctxt "(Admin)"
|
674 |
+
msgid "Hidden"
|
675 |
+
msgstr "Скрито"
|
676 |
+
|
677 |
+
#: views/admin/consent.php:29
|
678 |
+
msgctxt "(Admin)"
|
679 |
+
msgid "Custom consent types"
|
680 |
+
msgstr "Типове персонализирано съгласие"
|
681 |
+
|
682 |
+
#: views/admin/consent.php:30
|
683 |
+
msgctxt "(Admin)"
|
684 |
+
msgid ""
|
685 |
+
"Here you can add custom consent types to track. They will not be used "
|
686 |
+
"anywhere by default - you will need to build an integration for each of them."
|
687 |
+
msgstr ""
|
688 |
+
"Тук можете да добавяте персонализирани типове съгласие за проследяване. Те "
|
689 |
+
"няма да бъдат използвани никъде по подразбиране - ще трябва да изградите "
|
690 |
+
"интеграция за всеки от тях."
|
691 |
+
|
692 |
+
#: views/admin/consent.php:35
|
693 |
+
msgctxt "(Admin)"
|
694 |
+
msgid "Machine-readable slug"
|
695 |
+
msgstr ""
|
696 |
+
|
697 |
+
#: views/admin/consent.php:44 views/admin/consent.php:68
|
698 |
+
msgctxt "(Admin)"
|
699 |
+
msgid "Visible?"
|
700 |
+
msgstr "Видим?"
|
701 |
+
|
702 |
+
#: views/admin/consent.php:72
|
703 |
+
msgctxt "(Admin)"
|
704 |
+
msgid "Remove"
|
705 |
+
msgstr "Премахни"
|
706 |
+
|
707 |
+
#: views/admin/consent.php:93
|
708 |
+
msgctxt "(Admin)"
|
709 |
+
msgid "Additional info"
|
710 |
+
msgstr "ПОВЕЧЕ ИНФОРМАЦИЯ"
|
711 |
+
|
712 |
+
#: views/admin/consent.php:95
|
713 |
+
msgctxt "(Admin)"
|
714 |
+
msgid ""
|
715 |
+
"This text will be displayed to your data subjects on the Privacy Tools page."
|
716 |
+
msgstr ""
|
717 |
+
"Този текст ще се покаже на субектите Ви на данни на страницата Инструменти "
|
718 |
+
"за поверителност."
|
719 |
+
|
720 |
+
#: views/admin/data-subjects/search-form.php:2
|
721 |
+
msgctxt "(Admin)"
|
722 |
+
msgid ""
|
723 |
+
"On this page, you can find which data subjects personal data you are storing "
|
724 |
+
"and download, export or delete it."
|
725 |
+
msgstr ""
|
726 |
+
"На тази страница можете да намерите кои данни за лични данни съхранявате и "
|
727 |
+
"изтегляте, експортирате или изтривате."
|
728 |
+
|
729 |
+
#: views/admin/data-subjects/search-form.php:10
|
730 |
+
msgctxt "(Admin)"
|
731 |
+
msgid "Find data subject by email"
|
732 |
+
msgstr "Намери данни по Email"
|
733 |
+
|
734 |
+
#: views/admin/data-subjects/search-form.php:11
|
735 |
+
msgctxt "(Admin)"
|
736 |
+
msgid "Email address"
|
737 |
+
msgstr "Email адрес"
|
738 |
+
|
739 |
+
#: views/admin/data-subjects/search-form.php:16
|
740 |
+
msgctxt "(Admin)"
|
741 |
+
msgid "Search"
|
742 |
+
msgstr "ТЪРСИ"
|
743 |
+
|
744 |
+
#: views/admin/data-subjects/search-results.php:7
|
745 |
+
msgctxt "(Admin)"
|
746 |
+
msgid "Username"
|
747 |
+
msgstr "ПОТРЕБИТЕЛСКО ИМЕ"
|
748 |
+
|
749 |
+
#: views/admin/data-subjects/search-results.php:12
|
750 |
+
msgctxt "(Admin)"
|
751 |
+
msgid "is not a registered user."
|
752 |
+
msgstr "не е регистриран потребител."
|
753 |
+
|
754 |
+
#: views/admin/data-subjects/search-results.php:16
|
755 |
+
msgctxt "(Admin)"
|
756 |
+
msgid "Download data (html)"
|
757 |
+
msgstr "Свали данните (html) формат"
|
758 |
+
|
759 |
+
#: views/admin/data-subjects/search-results.php:17
|
760 |
+
msgctxt "(Admin)"
|
761 |
+
msgid "Export data (json)"
|
762 |
+
msgstr "Свали данните (json) формат"
|
763 |
+
|
764 |
+
#: views/admin/data-subjects/search-results.php:21
|
765 |
+
msgctxt "(Admin)"
|
766 |
+
msgid ""
|
767 |
+
"This user has admin capabilities. Deleting data via this interface is "
|
768 |
+
"disabled."
|
769 |
+
msgstr ""
|
770 |
+
"Този потребител има администраторски възможности. Изтриването на данни през "
|
771 |
+
"този интерфейс е деактивирано."
|
772 |
+
|
773 |
+
#: views/admin/data-subjects/search-results.php:24
|
774 |
+
msgctxt "(Admin)"
|
775 |
+
msgid "Anonymize data"
|
776 |
+
msgstr "Анонимни данни"
|
777 |
+
|
778 |
+
#: views/admin/data-subjects/search-results.php:25
|
779 |
+
msgctxt "(Admin)"
|
780 |
+
msgid "Delete data"
|
781 |
+
msgstr "Изтрий данните"
|
782 |
+
|
783 |
+
#: views/admin/data-subjects/search-results.php:29
|
784 |
+
msgctxt "(Admin)"
|
785 |
+
msgid "No data found!"
|
786 |
+
msgstr "Нищо не е намерено"
|
787 |
+
|
788 |
+
#: views/admin/general/delete-action-email.php:5
|
789 |
+
#: views/admin/general/export-action-email.php:5
|
790 |
+
#: views/installer/steps/configuration-settings.php:29
|
791 |
+
#: views/installer/steps/configuration-settings.php:79
|
792 |
+
msgid "Email address"
|
793 |
+
msgstr "Email адрес"
|
794 |
+
|
795 |
+
#: views/admin/general/delete-action-reassign.php:3
|
796 |
+
#: views/installer/steps/configuration-settings.php:50
|
797 |
+
msgctxt "(Admin)"
|
798 |
+
msgid "Delete content"
|
799 |
+
msgstr "Изтриване на съдържание"
|
800 |
+
|
801 |
+
#: views/admin/general/delete-action-reassign.php:6
|
802 |
+
#: views/installer/steps/configuration-settings.php:53
|
803 |
+
msgctxt "(Admin)"
|
804 |
+
msgid "Reassign content to a user"
|
805 |
+
msgstr "Преназначаване съдържание на потребител"
|
806 |
+
|
807 |
+
#: views/admin/general/delete-action-reassign.php:10
|
808 |
+
msgctxt "(Admin)"
|
809 |
+
msgid ""
|
810 |
+
"If the user has submitted any content on your site, should it be deleted or "
|
811 |
+
"reassigned to another user?"
|
812 |
+
msgstr ""
|
813 |
+
"Ако потребителят е изпратил съдържание на сайта Ви, трябва ли да бъде изтрит "
|
814 |
+
"или превъзложен на друг потребител?"
|
815 |
+
|
816 |
+
#: views/admin/general/description-data-page.php:2
|
817 |
+
msgctxt "(Admin)"
|
818 |
+
msgid ""
|
819 |
+
"Select the page where users can go to control their data. This page must "
|
820 |
+
"contain the [gdpr_privacy_tools] shortcode."
|
821 |
+
msgstr ""
|
822 |
+
"Изберете страницата, на която потребителите могат да отидат да контролират "
|
823 |
+
"данните си. Тази страница трябва да съдържа този код [gdpr_privacy_tools]"
|
824 |
+
|
825 |
+
#: views/admin/general/enable.php:9
|
826 |
+
msgctxt "(Admin)"
|
827 |
+
msgid "Enable the view, export and forget functionality for users and visitors"
|
828 |
+
msgstr ""
|
829 |
+
"Активирайте изгледа, експортирайте и забравете функционалността на "
|
830 |
+
"потребителите и посетителите"
|
831 |
+
|
832 |
+
#: views/admin/general/enable.php:12
|
833 |
+
msgctxt "(Admin)"
|
834 |
+
msgid ""
|
835 |
+
"Enable the Privacy Tools page on front-end and dashboard. This allows "
|
836 |
+
"visitors to request viewing and deleting their personal data and withdraw "
|
837 |
+
"consents."
|
838 |
+
msgstr ""
|
839 |
+
"Активирайте страницата Инструменти за поверителност на предния и на таблото "
|
840 |
+
"за управление. Това позволява на посетителите да изискват преглеждането и "
|
841 |
+
"изтриването на личните им данни и да оттеглят съгласието си."
|
842 |
+
|
843 |
+
#: views/admin/general/theme-compatibility.php:9
|
844 |
+
#: views/installer/steps/integrations.php:21
|
845 |
+
msgctxt "(Admin)"
|
846 |
+
msgid ""
|
847 |
+
"Automatically add Privacy Policy and Privacy Tools links to your site footer."
|
848 |
+
msgstr ""
|
849 |
+
"Автоматично добавяне на страниците Политика за лични данни и Управление на "
|
850 |
+
"лични данни в долната част на сайта."
|
851 |
+
|
852 |
+
#: views/admin/notices/header.php:4 views/admin/settings-page.php:3
|
853 |
+
#: views/installer/header.php:23
|
854 |
+
msgctxt "(Admin)"
|
855 |
+
msgid "The GDPR Framework"
|
856 |
+
msgstr ""
|
857 |
+
|
858 |
+
#: views/admin/notices/helper-autoinstall.php:2
|
859 |
+
msgctxt "(Admin)"
|
860 |
+
msgid ""
|
861 |
+
"A Privacy Policy page has been created, but it is empty. You can generate a "
|
862 |
+
"policy template on this page."
|
863 |
+
msgstr ""
|
864 |
+
"Страницата с правила за поверителност е създадена, но е празна. Можете да "
|
865 |
+
"генерирате шаблон за правила на тази страница."
|
866 |
+
|
867 |
+
#: views/admin/notices/helper-policy.php:2
|
868 |
+
msgctxt "(Admin)"
|
869 |
+
msgid ""
|
870 |
+
"Heads up - your Privacy Policy still requires some attention. Find the "
|
871 |
+
"places marked with [TODO] and replace them with real content!"
|
872 |
+
msgstr ""
|
873 |
+
"Глави - Вашата политика за поверителност все още изисква известно внимание. "
|
874 |
+
"Намерете местата, маркирани с [TODO], и ги заменете с истинско съдържание!"
|
875 |
+
|
876 |
+
#: views/admin/notices/helper-tools.php:2
|
877 |
+
msgctxt "(Admin)"
|
878 |
+
msgid "The contents of this page should contain the [gdpr_tools] shortcode."
|
879 |
+
msgstr ""
|
880 |
+
"Съдържанието на тази страница трябва да съдържа краткия код [gdpr_tools]."
|
881 |
+
|
882 |
+
#: views/admin/privacy-policy/description-policy-page.php:2
|
883 |
+
msgctxt "(Admin)"
|
884 |
+
msgid "Select the page which will contain your Privacy Policy"
|
885 |
+
msgstr "Изберете страницата, която ще съдържа вашата Политика за Лични данни"
|
886 |
+
|
887 |
+
#: views/admin/privacy-policy/generated.php:3
|
888 |
+
msgctxt "(Admin)"
|
889 |
+
msgid "Your Privacy Policy has been generated."
|
890 |
+
msgstr "Политиката за Лични данни беше генерирана."
|
891 |
+
|
892 |
+
#: views/admin/privacy-policy/generated.php:20
|
893 |
+
msgctxt "(Admin)"
|
894 |
+
msgid "« Back"
|
895 |
+
msgstr "« Назад"
|
896 |
+
|
897 |
+
#: views/admin/privacy-policy/header.php:2
|
898 |
+
msgctxt "(Admin)"
|
899 |
+
msgid ""
|
900 |
+
"This page allows you to generate a Privacy Policy based on the information "
|
901 |
+
"you entered below."
|
902 |
+
msgstr ""
|
903 |
+
"Тази страница ви позволява да генерирате Политика за личните данни въз "
|
904 |
+
"основа на въведената по-долу информация."
|
905 |
+
|
906 |
+
#: views/admin/settings-page.php:31
|
907 |
+
#, php-format
|
908 |
+
msgctxt "(Admin)"
|
909 |
+
msgid "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
910 |
+
msgstr ""
|
911 |
+
|
912 |
+
#: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
|
913 |
+
msgctxt "(Admin)"
|
914 |
+
msgid "Need more info?"
|
915 |
+
msgstr "Нуждаете се от повече информация?"
|
916 |
+
|
917 |
+
#: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
|
918 |
+
msgctxt "(Admin)"
|
919 |
+
msgid "Site Owner's guide to GDPR"
|
920 |
+
msgstr ""
|
921 |
+
|
922 |
+
#: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
|
923 |
+
msgctxt "(Admin)"
|
924 |
+
msgid "Read the full guide on GDPR compliance."
|
925 |
+
msgstr ""
|
926 |
+
|
927 |
+
#: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
|
928 |
+
msgctxt "(Admin)"
|
929 |
+
msgid "Knowledge base"
|
930 |
+
msgstr ""
|
931 |
+
|
932 |
+
#: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
|
933 |
+
msgctxt "(Admin)"
|
934 |
+
msgid "Check out the knowledge base for common questions and answers."
|
935 |
+
msgstr ""
|
936 |
+
|
937 |
+
#: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
|
938 |
+
msgctxt "(Admin)"
|
939 |
+
msgid "Developer's guide to GDPR"
|
940 |
+
msgstr ""
|
941 |
+
|
942 |
+
#: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
|
943 |
+
msgctxt "(Admin)"
|
944 |
+
msgid "We have a thorough guide to help making custom sites compliant."
|
945 |
+
msgstr ""
|
946 |
+
|
947 |
+
#: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
|
948 |
+
msgctxt "(Admin)"
|
949 |
+
msgid "Need help?"
|
950 |
+
msgstr ""
|
951 |
+
|
952 |
+
#: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
|
953 |
+
msgctxt "(Admin)"
|
954 |
+
msgid "Submit a support request"
|
955 |
+
msgstr ""
|
956 |
+
|
957 |
+
#: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
|
958 |
+
msgctxt "(Admin)"
|
959 |
+
msgid ""
|
960 |
+
"Found a bug or problem with the plugin? Post in the wordpress.org support "
|
961 |
+
"forum."
|
962 |
+
msgstr ""
|
963 |
+
|
964 |
+
#: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
|
965 |
+
msgctxt "(Admin)"
|
966 |
+
msgid "Request a consultation"
|
967 |
+
msgstr ""
|
968 |
+
|
969 |
+
#: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
|
970 |
+
msgctxt "(Admin)"
|
971 |
+
msgid ""
|
972 |
+
"Need development or legal assistance in making your site compliant? We can "
|
973 |
+
"help!"
|
974 |
+
msgstr ""
|
975 |
+
"Нуждаете се от развитие или правна помощ за привеждане на сайта Ви в "
|
976 |
+
"съответствие? Можем да помогнем!"
|
977 |
+
|
978 |
+
#: views/admin/wizard-buttons.php:2
|
979 |
+
msgctxt "(Admin)"
|
980 |
+
msgid "Restart setup wizard"
|
981 |
+
msgstr "Рестартирай настройката"
|
982 |
+
|
983 |
+
#: views/email/action-export.php:8 views/email/action-forget.php:12
|
984 |
+
msgctxt "(Admin)"
|
985 |
+
msgid ""
|
986 |
+
"This email is just for your information. You don't need to take any action"
|
987 |
+
msgstr ""
|
988 |
+
"Този имейл е само за вашата информация. Не е необходимо да предприемате "
|
989 |
+
"никакви действия"
|
990 |
+
|
991 |
+
#: views/email/action-forget.php:8
|
992 |
+
msgctxt "(Admin)"
|
993 |
+
msgid "The data subject had a user account on your website."
|
994 |
+
msgstr "Субектът на данните има потребителски профил на уебсайта Ви."
|
995 |
+
|
996 |
+
#: views/email/identify-data-subject.php:2
|
997 |
+
msgid "Someone has requested access to your data on"
|
998 |
+
msgstr "Някой е поискал достъп до данните ви"
|
999 |
+
|
1000 |
+
#: views/email/identify-data-subject.php:3
|
1001 |
+
msgid "If this was a mistake, just ignore this email and nothing will happen."
|
1002 |
+
msgstr ""
|
1003 |
+
"Ако това е грешка, просто игнорирайте този имейл и нищо няма да се случи. "
|
1004 |
+
"Никой няма да има достъп до Вашите данни, ако няма по - долния линк. За "
|
1005 |
+
"всеки случай ни уведомете на Email: privacy@zankov-group.com"
|
1006 |
+
|
1007 |
+
#: views/email/identify-data-subject.php:4
|
1008 |
+
msgid "To manage your data, visit the following address:"
|
1009 |
+
msgstr "За да управлявате данните си, посетете следния адрес:"
|
1010 |
+
|
1011 |
+
#: views/email/identify-data-subject.php:10
|
1012 |
+
msgid "This link is valid for 15 minutes."
|
1013 |
+
msgstr "Този линк ще бъде валиден само за 15 мин."
|
1014 |
+
|
1015 |
+
#: views/email/no-data.php:2
|
1016 |
+
msgid "Someone has requested information about your personal data on"
|
1017 |
+
msgstr "Някой е поискал информация за вашите лични данни"
|
1018 |
+
|
1019 |
+
#: views/email/no-data.php:3
|
1020 |
+
msgid "None of your personal data is stored on"
|
1021 |
+
msgstr "Не съхраняваме Ваши лични данни"
|
1022 |
+
|
1023 |
+
#: views/email/no-data.php:5
|
1024 |
+
msgid ""
|
1025 |
+
"If this was a mistake or you did not request this email, just ignore it and "
|
1026 |
+
"nothing will happen."
|
1027 |
+
msgstr ""
|
1028 |
+
"Ако това е грешка, просто игнорирайте този имейл и нищо няма да се случи. "
|
1029 |
+
"Никой няма да има достъп до Вашите данни, ако няма по - долния линк. За "
|
1030 |
+
"всеки случай ни уведомете на Email: privacy@zankov-group.com"
|
1031 |
+
|
1032 |
+
#: views/email/request-export.php:13 views/email/request-forget.php:13
|
1033 |
+
msgctxt "(Admin)"
|
1034 |
+
msgid "As a reminder: according to GDPR, you have 30 days to comply."
|
1035 |
+
msgstr "Напомняне: според GDPR имате 30 дни, за да се съобразите."
|
1036 |
+
|
1037 |
+
#: views/global/delete-action.php:2
|
1038 |
+
msgctxt "(Admin)"
|
1039 |
+
msgid "Automatically anonymize data"
|
1040 |
+
msgstr "Автоматично анонимизиране на данните"
|
1041 |
+
|
1042 |
+
#: views/global/delete-action.php:5
|
1043 |
+
msgctxt "(Admin)"
|
1044 |
+
msgid "Automatically delete data"
|
1045 |
+
msgstr "Автоматично изтриване на данните"
|
1046 |
+
|
1047 |
+
#: views/global/delete-action.php:9
|
1048 |
+
msgctxt "(Admin)"
|
1049 |
+
msgid "Automatically anonymize data and notify me via email"
|
1050 |
+
msgstr "Автоматично анонимизиране на данните и уведомяване чрез Email."
|
1051 |
+
|
1052 |
+
#: views/global/delete-action.php:13
|
1053 |
+
msgctxt "(Admin)"
|
1054 |
+
msgid "Automatically delete data and notify me via email"
|
1055 |
+
msgstr "Автоматично изтриване на данните и уведомяване чрез Email."
|
1056 |
+
|
1057 |
+
#: views/global/delete-action.php:16 views/global/export-action.php:10
|
1058 |
+
msgctxt "(Admin)"
|
1059 |
+
msgid "Only notify me via email"
|
1060 |
+
msgstr "Само ме уведоми чрез Email."
|
1061 |
+
|
1062 |
+
#: views/global/export-action.php:2
|
1063 |
+
msgctxt "(Admin)"
|
1064 |
+
msgid "Automatically download data"
|
1065 |
+
msgstr "Автоматично сваляне на данните"
|
1066 |
+
|
1067 |
+
#: views/global/export-action.php:6
|
1068 |
+
msgctxt "(Admin)"
|
1069 |
+
msgid "Automatically download data and notify me via email"
|
1070 |
+
msgstr "Автоматично сваляне на данните и уведомяване чрез Email."
|
1071 |
+
|
1072 |
+
#: views/installer/continue-notice.php:2
|
1073 |
+
msgctxt "(Admin)"
|
1074 |
+
msgid "The The GDPR Framework setup has not been finalized yet."
|
1075 |
+
msgstr "Настройката на GDPR все още не е финализирана."
|
1076 |
+
|
1077 |
+
#: views/installer/continue-notice.php:3
|
1078 |
+
msgctxt "(Admin)"
|
1079 |
+
msgid "You can continue the setup at any time."
|
1080 |
+
msgstr "Можете да продължите настройката по всяко време."
|
1081 |
+
|
1082 |
+
#: views/installer/continue-notice.php:6
|
1083 |
+
msgctxt "(Admin)"
|
1084 |
+
msgid "Continue the setup wizard"
|
1085 |
+
msgstr "Продължи с настройката"
|
1086 |
+
|
1087 |
+
#: views/installer/continue-notice.php:9
|
1088 |
+
msgctxt "(Admin)"
|
1089 |
+
msgid "Hide this message"
|
1090 |
+
msgstr "Скрий съобщението"
|
1091 |
+
|
1092 |
+
#: views/installer/footer.php:7
|
1093 |
+
msgid "Back"
|
1094 |
+
msgstr "Назад"
|
1095 |
+
|
1096 |
+
#: views/installer/header.php:26
|
1097 |
+
msgctxt "(Admin)"
|
1098 |
+
msgid "I need help"
|
1099 |
+
msgstr "Нуждая се от помощ"
|
1100 |
+
|
1101 |
+
#: views/installer/header.php:29
|
1102 |
+
msgctxt "(Admin)"
|
1103 |
+
msgid "Developer Docs"
|
1104 |
+
msgstr "Документация за програмисти"
|
1105 |
+
|
1106 |
+
#: views/installer/header.php:36
|
1107 |
+
msgctxt "(Admin)"
|
1108 |
+
msgid "Configuration"
|
1109 |
+
msgstr "Конфигурация"
|
1110 |
+
|
1111 |
+
#: views/installer/header.php:46
|
1112 |
+
msgctxt "(Admin)"
|
1113 |
+
msgid "Forms & Consent"
|
1114 |
+
msgstr "Форми и съгласие"
|
1115 |
+
|
1116 |
+
#: views/installer/header.php:51
|
1117 |
+
msgctxt "(Admin)"
|
1118 |
+
msgid "Integrations"
|
1119 |
+
msgstr "Интеграции"
|
1120 |
+
|
1121 |
+
#: views/installer/steps/configuration-settings.php:23
|
1122 |
+
#: views/installer/steps/configuration-settings.php:73
|
1123 |
+
msgctxt "(Admin)"
|
1124 |
+
msgid "Enter the email address to notify"
|
1125 |
+
msgstr "Въведете имейл адреса за уведомяване"
|
1126 |
+
|
1127 |
+
#: views/installer/steps/disclaimer.php:21
|
1128 |
+
msgctxt "(Admin)"
|
1129 |
+
msgid "I accept"
|
1130 |
+
msgstr "Приемам"
|
1131 |
+
|
1132 |
+
#: views/installer/welcome-notice.php:7
|
1133 |
+
msgctxt "(Admin)"
|
1134 |
+
msgid "Run the setup wizard"
|
1135 |
+
msgstr "Пуснете помощника за настройка"
|
1136 |
+
|
1137 |
+
#: views/installer/welcome-notice.php:11
|
1138 |
+
msgctxt "(Admin)"
|
1139 |
+
msgid "Auto-install pages"
|
1140 |
+
msgstr "Автоматично инсталиране на страници"
|
1141 |
+
|
1142 |
+
#: views/installer/welcome-notice.php:15
|
1143 |
+
msgctxt "(Admin)"
|
1144 |
+
msgid "Skip and install manually"
|
1145 |
+
msgstr "Инсталирай ръчно"
|
1146 |
+
|
1147 |
+
#: views/modules/contact-form-7/generator-privacy.php:6
|
1148 |
+
msgctxt "(Admin)"
|
1149 |
+
msgid ""
|
1150 |
+
"This tag generates the default text for Terms & Conditions and/or Privacy "
|
1151 |
+
"Policy checkbox."
|
1152 |
+
msgstr ""
|
1153 |
+
"Този маркер генерира стандартния текст за чекбокса за Общи условия и / или "
|
1154 |
+
"Политика за Лични данни."
|
1155 |
+
|
1156 |
+
#: views/modules/contact-form-7/generator-privacy.php:15
|
1157 |
+
msgid "Insert"
|
1158 |
+
msgstr "Вмъкни"
|
1159 |
+
|
1160 |
+
#: views/modules/wordpress-comments/terms-checkbox.php:6
|
1161 |
+
#: views/modules/wordpress-user/registration-terms-checkbox.php:7
|
1162 |
+
#, php-format
|
1163 |
+
msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
|
1164 |
+
msgstr "Приемам %sTerms and Conditions%s и %sPrivacy Policy%s"
|
1165 |
+
|
1166 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
|
1167 |
+
msgid "Manage consents"
|
1168 |
+
msgstr "Управлявайте съгласията"
|
1169 |
+
|
1170 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
|
1171 |
+
#: views/privacy-tools/form-consent.php:6
|
1172 |
+
msgid "Here you can withdraw any consents you have given."
|
1173 |
+
msgstr "Тук можете да оттеглите всички съгласия, които сте дали."
|
1174 |
+
|
1175 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
|
1176 |
+
#: views/privacy-tools/form-consent.php:9
|
1177 |
+
msgid "Consent types"
|
1178 |
+
msgstr "Типове съгласие"
|
1179 |
+
|
1180 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
|
1181 |
+
#: views/privacy-tools/form-consent.php:24
|
1182 |
+
msgid "Withdraw"
|
1183 |
+
msgstr "Оттегляне"
|
1184 |
+
|
1185 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
|
1186 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
|
1187 |
+
msgctxt "(Admin)"
|
1188 |
+
msgid "Delete this user and all data"
|
1189 |
+
msgstr "Изтрийте този потребител и всички данни"
|
1190 |
+
|
1191 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
|
1192 |
+
msgctxt "(Admin)"
|
1193 |
+
msgid "Delete my data"
|
1194 |
+
msgstr "Изтрий данните ми"
|
1195 |
+
|
1196 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
|
1197 |
+
#: views/privacy-tools/form-delete.php:13
|
1198 |
+
msgid "Delete all data we have gathered about you."
|
1199 |
+
msgstr "Изтрийте всички данни, които сме събрали за вас."
|
1200 |
+
|
1201 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
|
1202 |
+
#: views/privacy-tools/form-delete.php:14
|
1203 |
+
msgid "If you have a user account on our site, it will also be deleted."
|
1204 |
+
msgstr "Ако имате потребителски акаунт на нашия сайт, той също ще бъде изтрит."
|
1205 |
+
|
1206 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
|
1207 |
+
#: views/privacy-tools/form-delete.php:15
|
1208 |
+
msgid "Be careful - this action is permanent and CANNOT be undone."
|
1209 |
+
msgstr "Бъдете внимателни - това действие е не може да бъде отменено."
|
1210 |
+
|
1211 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
|
1212 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
|
1213 |
+
msgctxt "(Admin)"
|
1214 |
+
msgid ""
|
1215 |
+
"You seem to have an administrator or equivalent role, so deleting/"
|
1216 |
+
"anonymizing via this page is disabled."
|
1217 |
+
msgstr ""
|
1218 |
+
"Изглежда, че имате администратор или еквивалентна роля, така че "
|
1219 |
+
"изтриването / анонимирането чрез тази страница е деактивирано."
|
1220 |
+
|
1221 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:7
|
1222 |
+
#: views/privacy-tools/form-export.php:1
|
1223 |
+
msgid "Download your data"
|
1224 |
+
msgstr "Изтеглете данните си"
|
1225 |
+
|
1226 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:12
|
1227 |
+
#: views/privacy-tools/form-export.php:13
|
1228 |
+
msgid "Download as table"
|
1229 |
+
msgstr "Изтеглете в Таблица"
|
1230 |
+
|
1231 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:15
|
1232 |
+
#: views/privacy-tools/form-export.php:22
|
1233 |
+
msgid "Export as JSON"
|
1234 |
+
msgstr "Експортирайте в JSON"
|
1235 |
+
|
1236 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:19
|
1237 |
+
#: views/privacy-tools/form-export.php:4
|
1238 |
+
msgid "You can download all your data formatted as a table for viewing."
|
1239 |
+
msgstr ""
|
1240 |
+
"Можете да изтеглите всичките си данни, форматирани като таблица за преглед."
|
1241 |
+
|
1242 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:20
|
1243 |
+
#: views/privacy-tools/form-export.php:5
|
1244 |
+
msgid "Alternatively, you can export it in machine-readable JSON format."
|
1245 |
+
msgstr "Друга възможност е да го експортирате във машинно четене JSON формат."
|
1246 |
+
|
1247 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
|
1248 |
+
msgctxt "(Admin)"
|
1249 |
+
msgid "Delete user and all data"
|
1250 |
+
msgstr "Изтрий потребителя и всички данни"
|
1251 |
+
|
1252 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
|
1253 |
+
msgctxt "(Admin)"
|
1254 |
+
msgid "Anonymize user and all data"
|
1255 |
+
msgstr "Анонимизиране на потребителя и всички данни"
|
1256 |
+
|
1257 |
+
#: views/modules/wordpress-user/dashboard/profile-page/header.php:2
|
1258 |
+
msgctxt "(Admin)"
|
1259 |
+
msgid "GDPR Data"
|
1260 |
+
msgstr "GDPR данни"
|
1261 |
+
|
1262 |
+
#: views/modules/wordpress-user/dashboard/profile-page/header.php:6
|
1263 |
+
msgctxt "(Admin)"
|
1264 |
+
msgid "This user has been anonymized."
|
1265 |
+
msgstr "Потребителя беше добавен, като анонимен."
|
1266 |
+
|
1267 |
+
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
|
1268 |
+
msgctxt "(Admin)"
|
1269 |
+
msgid "Consents given"
|
1270 |
+
msgstr "Дадени съгласия"
|
1271 |
+
|
1272 |
+
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
|
1273 |
+
msgctxt "(Admin)"
|
1274 |
+
msgid "No consents given"
|
1275 |
+
msgstr "Няма дадени съгласия"
|
1276 |
+
|
1277 |
+
#: views/privacy-tools/form-consent.php:2
|
1278 |
+
msgid "Consent"
|
1279 |
+
msgstr "Съгласие"
|
1280 |
+
|
1281 |
+
#: views/privacy-tools/form-delete.php:1
|
1282 |
+
#: views/privacy-tools/notice-admin-role.php:1
|
1283 |
+
msgid "Delete my user and data"
|
1284 |
+
msgstr "Изтрий ме, като потребител и данни."
|
1285 |
+
|
1286 |
+
#: views/privacy-tools/form-delete.php:7
|
1287 |
+
msgid "Delete my data"
|
1288 |
+
msgstr "Изтрий моите данни"
|
1289 |
+
|
1290 |
+
#: views/privacy-tools/form-identify.php:8
|
1291 |
+
msgid "Back to Privacy Tools"
|
1292 |
+
msgstr "Обратно в Политика за Лични данни"
|
1293 |
+
|
1294 |
+
#: views/privacy-tools/form-identify.php:14
|
1295 |
+
msgid "Identify yourself!"
|
1296 |
+
msgstr "Идентифицирай се!"
|
1297 |
+
|
1298 |
+
#: views/privacy-tools/form-identify.php:17
|
1299 |
+
#: views/privacy-tools/form-identify.php:20
|
1300 |
+
msgid "Enter your email address"
|
1301 |
+
msgstr "Въведете вашия Email адрес"
|
1302 |
+
|
1303 |
+
#: views/privacy-tools/form-identify.php:23
|
1304 |
+
msgid "Send email"
|
1305 |
+
msgstr "Изпрати Emial"
|
1306 |
+
|
1307 |
+
#: views/privacy-tools/notice-admin-role.php:4
|
1308 |
+
msgctxt "(Admin)"
|
1309 |
+
msgid "Data deletion is disabled for administrative accounts."
|
1310 |
+
msgstr "Изтриването на данни е забранено за административните профили."
|
1311 |
+
|
1312 |
+
#: views/privacy-tools/notices.php:3
|
1313 |
+
msgid ""
|
1314 |
+
"We will send you an email with the link to access your data. Please check "
|
1315 |
+
"your spam folder as well!"
|
1316 |
+
msgstr ""
|
1317 |
+
"Ще ви изпратим имейл с връзката, за да получите достъп до вашите данни. "
|
1318 |
+
"Моля, проверете и папката си за спам!"
|
1319 |
+
|
1320 |
+
#: views/privacy-tools/notices.php:7
|
1321 |
+
msgid "The email you entered does not appear to be a valid email."
|
1322 |
+
msgstr "Въведеният от вас имейл адрес не изглежда валиден имейл."
|
1323 |
+
|
1324 |
+
#: views/privacy-tools/notices.php:11
|
1325 |
+
msgid "Sorry - the link seems to have expired. Please try again!"
|
1326 |
+
msgstr "За съжаление - връзката изглежда е изтекла. Моля, опитайте отново!"
|
1327 |
+
|
1328 |
+
#: views/privacy-tools/notices.php:23
|
1329 |
+
msgid "Your personal data has been removed!"
|
1330 |
+
msgstr "Вашите лични данни бяха премахнати!"
|
1331 |
+
|
1332 |
+
#: views/privacy-tools/privacy-tools.php:5
|
1333 |
+
msgid "You are identified as"
|
1334 |
+
msgstr "Вие сте идентифицирани като"
|
languages/gdpr-framework-de_DE.po
CHANGED
@@ -1,1333 +1,1333 @@
|
|
1 |
-
# SOME DESCRIPTIVE TITLE.
|
2 |
-
# Copyright (C) YEAR Codelight
|
3 |
-
# This file is distributed under the same license as the The GDPR Framework package.
|
4 |
-
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
-
#
|
6 |
-
msgid ""
|
7 |
-
msgstr ""
|
8 |
-
"Project-Id-Version: The GDPR Framework 1.0\n"
|
9 |
-
"Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
|
10 |
-
"POT-Creation-Date: 2018-04-16 10:50+0000\n"
|
11 |
-
"PO-Revision-Date: 2018-05-18 07:39+0200\n"
|
12 |
-
"Last-Translator: \n"
|
13 |
-
"MIME-Version: 1.0\n"
|
14 |
-
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
-
"Content-Transfer-Encoding: 8bit\n"
|
16 |
-
"X-Generator: Poedit 2.0.5\n"
|
17 |
-
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
-
"Language: de_DE\n"
|
19 |
-
"Language-Team: Michael Hartl, michael@digitalfellow.eu\n"
|
20 |
-
|
21 |
-
#: gdpr-framework.php:26
|
22 |
-
msgctxt "(Admin)"
|
23 |
-
msgid "WordPress GDPR › Error"
|
24 |
-
msgstr "WordPress GDPR › Fehler"
|
25 |
-
|
26 |
-
#: gdpr-framework.php:35
|
27 |
-
msgctxt "(Admin)"
|
28 |
-
msgid "Invalid PHP version"
|
29 |
-
msgstr "Ungültige PHP-Version"
|
30 |
-
|
31 |
-
#: gdpr-framework.php:35
|
32 |
-
msgctxt "(Admin)"
|
33 |
-
msgid "You must be using PHP 5.6.33 or greater."
|
34 |
-
msgstr "Sie müssen PHP 5.6.33 oder höher verwenden."
|
35 |
-
|
36 |
-
#: gdpr-framework.php:42
|
37 |
-
msgctxt "(Admin)"
|
38 |
-
msgid "Invalid WordPress version"
|
39 |
-
msgstr "Ungültige WordPress-Version"
|
40 |
-
|
41 |
-
#: gdpr-framework.php:42
|
42 |
-
msgctxt "(Admin)"
|
43 |
-
msgid "You must be using WordPress 4.3.0 or greater."
|
44 |
-
msgstr "Sie müssen WordPress 4.3.0 oder höher verwenden."
|
45 |
-
|
46 |
-
#: gdpr-framework.php:52
|
47 |
-
msgctxt "(Admin)"
|
48 |
-
msgid ""
|
49 |
-
"You appear to be running a development version of GDPR. You must run <code>composer "
|
50 |
-
"install</code> from the plugin directory."
|
51 |
-
msgstr ""
|
52 |
-
"Es scheint, dass Sie eine Entwicklungsversion des GDPR Framework Plugins verwenden. "
|
53 |
-
"Sie müssen im Pluginverzeichnis <code>composer install</code> laufen lassen."
|
54 |
-
|
55 |
-
#: gdpr-framework.php:53
|
56 |
-
msgctxt "(Admin)"
|
57 |
-
msgid "Autoloader not found."
|
58 |
-
msgstr "Autoloader nicht gefunden."
|
59 |
-
|
60 |
-
#: gdpr-framework.php:115
|
61 |
-
msgctxt "(Admin)"
|
62 |
-
msgid "Anonymous"
|
63 |
-
msgstr "Anonym"
|
64 |
-
|
65 |
-
#: src/Admin/AdminTab.php:115
|
66 |
-
msgctxt "(Admin)"
|
67 |
-
msgid "Save"
|
68 |
-
msgstr "Speichern"
|
69 |
-
|
70 |
-
#: src/Admin/AdminTab.php:151
|
71 |
-
msgctxt "(Admin)"
|
72 |
-
msgid "Policy generated!"
|
73 |
-
msgstr "Richtlinie erstellt!"
|
74 |
-
|
75 |
-
#: src/Admin/AdminTabGeneral.php:11
|
76 |
-
msgctxt "(Admin)"
|
77 |
-
msgid "General"
|
78 |
-
msgstr "Allgemein"
|
79 |
-
|
80 |
-
#: src/Admin/AdminTabGeneral.php:38
|
81 |
-
msgctxt "(Admin)"
|
82 |
-
msgid "General Settings"
|
83 |
-
msgstr "Allgemeine Einstellungen"
|
84 |
-
|
85 |
-
#: src/Admin/AdminTabGeneral.php:43
|
86 |
-
msgctxt "(Admin)"
|
87 |
-
msgid "Enable Privacy Tools"
|
88 |
-
msgstr "Datenschutz-Tools aktivieren"
|
89 |
-
|
90 |
-
#: src/Admin/AdminTabGeneral.php:53
|
91 |
-
msgctxt "(Admin)"
|
92 |
-
msgid "Pages"
|
93 |
-
msgstr "Seiten"
|
94 |
-
|
95 |
-
#: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
|
96 |
-
msgctxt "(Admin)"
|
97 |
-
msgid "Privacy Tools Page"
|
98 |
-
msgstr "Seite der Datenschutz-Tools"
|
99 |
-
|
100 |
-
#: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
|
101 |
-
msgctxt "(Admin)"
|
102 |
-
msgid "Privacy Policy Page"
|
103 |
-
msgstr "Seite der Datenschutzerklärung"
|
104 |
-
|
105 |
-
#: src/Admin/AdminTabGeneral.php:72
|
106 |
-
msgctxt "(Admin)"
|
107 |
-
msgid "Terms & Conditions Page"
|
108 |
-
msgstr "Seite der Allgemeinen Geschäftsbedingungen"
|
109 |
-
|
110 |
-
#: src/Admin/AdminTabGeneral.php:82
|
111 |
-
msgctxt "(Admin)"
|
112 |
-
msgid "View & Export Data"
|
113 |
-
msgstr "Daten ansehen & exportieren"
|
114 |
-
|
115 |
-
#: src/Admin/AdminTabGeneral.php:87
|
116 |
-
msgctxt "(Admin)"
|
117 |
-
msgid "Export action"
|
118 |
-
msgstr "Export-Aktion"
|
119 |
-
|
120 |
-
#: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
|
121 |
-
msgctxt "(Admin)"
|
122 |
-
msgid "Email to notify"
|
123 |
-
msgstr "E-Mail für die Benachrichtigung"
|
124 |
-
|
125 |
-
#: src/Admin/AdminTabGeneral.php:105
|
126 |
-
msgctxt "(Admin)"
|
127 |
-
msgid "Delete & Anonymize Data"
|
128 |
-
msgstr "Daten löschen & anonymisieren"
|
129 |
-
|
130 |
-
#: src/Admin/AdminTabGeneral.php:110
|
131 |
-
msgctxt "(Admin)"
|
132 |
-
msgid "Delete action"
|
133 |
-
msgstr "Lösch-Aktion"
|
134 |
-
|
135 |
-
#: src/Admin/AdminTabGeneral.php:117
|
136 |
-
msgctxt "(Admin)"
|
137 |
-
msgid "Delete or reassign content?"
|
138 |
-
msgstr "Inhalt löschen oder neu zuordnen?"
|
139 |
-
|
140 |
-
#: src/Admin/AdminTabGeneral.php:125
|
141 |
-
msgctxt "(Admin)"
|
142 |
-
msgid "Reassign content to"
|
143 |
-
msgstr "Inhalt zuordnen an"
|
144 |
-
|
145 |
-
#: src/Admin/AdminTabGeneral.php:145
|
146 |
-
msgctxt "(Admin)"
|
147 |
-
msgid "Styling"
|
148 |
-
msgstr "Gestaltung"
|
149 |
-
|
150 |
-
#: src/Admin/AdminTabGeneral.php:150
|
151 |
-
msgctxt "(Admin)"
|
152 |
-
msgid "Enable basic styling on Privacy Tools page"
|
153 |
-
msgstr "Grundlegende Gestaltung auf der Seite der Datenschutz-Tools aktivieren"
|
154 |
-
|
155 |
-
#: src/Admin/AdminTabGeneral.php:162
|
156 |
-
msgctxt "(Admin)"
|
157 |
-
msgid "Compatibility"
|
158 |
-
msgstr "Kompatibilität"
|
159 |
-
|
160 |
-
#: src/Admin/AdminTabGeneral.php:167
|
161 |
-
msgctxt "(Admin)"
|
162 |
-
msgid "Enable automatic theme compatibility"
|
163 |
-
msgstr "Aktivieren Sie die automatische Theme-Kompatibilität"
|
164 |
-
|
165 |
-
#: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
|
166 |
-
#: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
|
167 |
-
#: views/installer/steps/configuration-settings.php:62
|
168 |
-
msgctxt "(Admin)"
|
169 |
-
msgid "— Select —"
|
170 |
-
msgstr "— Auswählen —"
|
171 |
-
|
172 |
-
#: src/Admin/WordpressAdmin.php:65
|
173 |
-
msgctxt "(Admin)"
|
174 |
-
msgid "Privacy & GDPR Settings"
|
175 |
-
msgstr "Datenschutz & DSGVO Einstellungen"
|
176 |
-
|
177 |
-
#: src/Admin/WordpressAdmin.php:66
|
178 |
-
msgctxt "(Admin)"
|
179 |
-
msgid "Privacy"
|
180 |
-
msgstr "Datenschutz"
|
181 |
-
|
182 |
-
#: src/Components/Consent/AdminTabConsent.php:30
|
183 |
-
#: src/Components/Consent/AdminTabConsent.php:49
|
184 |
-
msgctxt "(Admin)"
|
185 |
-
msgid "Consent"
|
186 |
-
msgstr "Zustimmung"
|
187 |
-
|
188 |
-
#: src/Components/Consent/AdminTabConsent.php:157
|
189 |
-
msgctxt "(Admin)"
|
190 |
-
msgid "Consent slug is a required field!"
|
191 |
-
msgstr "Der Pfad zur Zustimming ist ein Pflichtfeld!"
|
192 |
-
|
193 |
-
#: src/Components/Consent/AdminTabConsent.php:162
|
194 |
-
msgctxt "(Admin)"
|
195 |
-
msgid ""
|
196 |
-
"You may only use alphanumeric characters, dash and underscore in the consent slug "
|
197 |
-
"field."
|
198 |
-
msgstr ""
|
199 |
-
"Sie dürfen nur alphanumerische Zeichen, Bindestriche und Unterstriche im Feld für den "
|
200 |
-
"Zustimmungs-Pfad verwenden."
|
201 |
-
|
202 |
-
#: src/Components/Consent/AdminTabConsent.php:167
|
203 |
-
msgctxt "(Admin)"
|
204 |
-
msgid "Consent title is a required field!"
|
205 |
-
msgstr "Titel der Zustimmungsseite wird benötigt!"
|
206 |
-
|
207 |
-
#: src/Components/Consent/ConsentManager.php:46
|
208 |
-
#: views/modules/contact-form-7/content-privacy.php:2
|
209 |
-
#: views/modules/wordpress-comments/terms-checkbox.php:14
|
210 |
-
#: views/modules/wordpress-user/registration-terms-checkbox.php:15
|
211 |
-
#, php-format
|
212 |
-
msgid "I accept the %sPrivacy Policy%s"
|
213 |
-
msgstr "I stimme der %sDatenschutzerklärung%s zu"
|
214 |
-
|
215 |
-
#: src/Components/Consent/ConsentManager.php:50
|
216 |
-
#: src/Components/Consent/ConsentManager.php:69
|
217 |
-
msgctxt "(Admin)"
|
218 |
-
msgid ""
|
219 |
-
"This consent is not visible by default. If someone wishes to withdraw it, they should "
|
220 |
-
"simply request to delete all their data."
|
221 |
-
msgstr ""
|
222 |
-
"Diese Zustimmung ist per Voreinstellung nicht sichtbar. Wenn jemand sie widerrufen "
|
223 |
-
"möchte, sollte er einfach die Löschung aller seiner Daten verlangen."
|
224 |
-
|
225 |
-
#: src/Components/Consent/ConsentManager.php:65
|
226 |
-
#, php-format
|
227 |
-
msgid "I accept the %sTerms & Conditions%s"
|
228 |
-
msgstr "Ich akzeptiere die %sAllgemeinen Geschäftsbedingungen%s"
|
229 |
-
|
230 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
|
231 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
|
232 |
-
#: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
|
233 |
-
msgctxt "(Admin)"
|
234 |
-
msgid "Privacy Policy"
|
235 |
-
msgstr "Datenschutzerklärung"
|
236 |
-
|
237 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
|
238 |
-
msgctxt "(Admin)"
|
239 |
-
msgid "Company information"
|
240 |
-
msgstr "Firmen-Informationen"
|
241 |
-
|
242 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
|
243 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
|
244 |
-
msgctxt "(Admin)"
|
245 |
-
msgid "Company Name"
|
246 |
-
msgstr "Name der Firma"
|
247 |
-
|
248 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
|
249 |
-
msgctxt "(Admin)"
|
250 |
-
msgid "Company Email"
|
251 |
-
msgstr "E-Mail-Adresse der Firma"
|
252 |
-
|
253 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
|
254 |
-
msgctxt "(Admin)"
|
255 |
-
msgid "Company Location"
|
256 |
-
msgstr "Standort der Firma"
|
257 |
-
|
258 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
|
259 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
|
260 |
-
msgctxt "(Admin)"
|
261 |
-
msgid "Representative Contact Name"
|
262 |
-
msgstr "Name des Ansprechpartners"
|
263 |
-
|
264 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
|
265 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
|
266 |
-
msgctxt "(Admin)"
|
267 |
-
msgid "Representative Contact Email"
|
268 |
-
msgstr "E-Mail-Adresse des Ansprechpartners"
|
269 |
-
|
270 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
|
271 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
|
272 |
-
msgctxt "(Admin)"
|
273 |
-
msgid "Representative Contact Phone"
|
274 |
-
msgstr "Telefonnummer des Ansprechpartners"
|
275 |
-
|
276 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
|
277 |
-
msgctxt "(Admin)"
|
278 |
-
msgid "Data Protection Authority"
|
279 |
-
msgstr "Datenschutzbehörde"
|
280 |
-
|
281 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
|
282 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
|
283 |
-
msgctxt "(Admin)"
|
284 |
-
msgid "Data Protection Authority Website"
|
285 |
-
msgstr "Website der Datenschutzbehörde"
|
286 |
-
|
287 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
|
288 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
|
289 |
-
msgctxt "(Admin)"
|
290 |
-
msgid "Data Protection Authority Email"
|
291 |
-
msgstr "E-Mail-Adresse der Datenschutzbehörde"
|
292 |
-
|
293 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
|
294 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
|
295 |
-
msgctxt "(Admin)"
|
296 |
-
msgid "Data Protection Authority Phone"
|
297 |
-
msgstr "Telefonnummer der Datenschutzbehörde"
|
298 |
-
|
299 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
|
300 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
|
301 |
-
msgctxt "(Admin)"
|
302 |
-
msgid "Data Protection Officer"
|
303 |
-
msgstr "Datenschutzbeauftragter"
|
304 |
-
|
305 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
|
306 |
-
msgctxt "(Admin)"
|
307 |
-
msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
|
308 |
-
msgstr "Wissensdatenbank: Muss ich einen Datenschutzbeauftragten ernennen?"
|
309 |
-
|
310 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
|
311 |
-
msgctxt "(Admin)"
|
312 |
-
msgid "Data Protection Officer Name"
|
313 |
-
msgstr "Name des Datenschutzbeauftragten"
|
314 |
-
|
315 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
|
316 |
-
msgctxt "(Admin)"
|
317 |
-
msgid "Data Protection Officer Email"
|
318 |
-
msgstr "E-Mail-Adresse des Datenschutzbeauftragten"
|
319 |
-
|
320 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
|
321 |
-
msgctxt "(Admin)"
|
322 |
-
msgid "Contact Email"
|
323 |
-
msgstr "Kontakt-E-Mail-Adresse"
|
324 |
-
|
325 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
|
326 |
-
msgctxt "(Admin)"
|
327 |
-
msgid "Representative Contact"
|
328 |
-
msgstr "Vertretungsberechtigter Kontakt"
|
329 |
-
|
330 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
|
331 |
-
msgctxt "(Admin)"
|
332 |
-
msgid "Knowledge base: Do I need to appoint an EU-based representative?"
|
333 |
-
msgstr ""
|
334 |
-
"Wissensdatenbank: Muss ich einen Ansprechpartner bennen, der innerhalb der EU sitzt?"
|
335 |
-
|
336 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
|
337 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
|
338 |
-
msgctxt "(Admin)"
|
339 |
-
msgid "DPO Name"
|
340 |
-
msgstr "Behördliche Datenschutzbeauftragte"
|
341 |
-
|
342 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
|
343 |
-
msgctxt "(Admin)"
|
344 |
-
msgid "Save & Generate Policy"
|
345 |
-
msgstr "Speichern & Richtlinie erstellen"
|
346 |
-
|
347 |
-
#: src/Components/PrivacyPolicy/PrivacyPolicy.php:82 src/Installer/Installer.php:271
|
348 |
-
#: src/Installer/Steps/PolicySettings.php:199 views/themes/storefront/footer.php:3
|
349 |
-
#: views/themes/twentyseventeen/footer.php:3 views/themes/twentysixteen/footer.php:4
|
350 |
-
msgid "Privacy Policy"
|
351 |
-
msgstr "Datenschutzerklärung"
|
352 |
-
|
353 |
-
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
|
354 |
-
msgid "This page is currently disabled."
|
355 |
-
msgstr "Diese Seite ist derzeit deaktiviert."
|
356 |
-
|
357 |
-
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
|
358 |
-
#: src/Installer/Installer.php:279 src/Installer/Steps/ConfigurationPages.php:55
|
359 |
-
#: views/themes/storefront/footer.php:7 views/themes/twentyseventeen/footer.php:7
|
360 |
-
#: views/themes/twentysixteen/footer.php:9
|
361 |
-
msgid "Privacy Tools"
|
362 |
-
msgstr "Datenschutz-Tools"
|
363 |
-
|
364 |
-
#: src/Components/Support/AdminTabSupport.php:13
|
365 |
-
#: src/Components/Support/AdminTabSupport.php:20
|
366 |
-
msgctxt "(Admin)"
|
367 |
-
msgid "Support"
|
368 |
-
msgstr "Support"
|
369 |
-
|
370 |
-
#: src/Components/WordpressComments/WordpressComments.php:90
|
371 |
-
#, php-format
|
372 |
-
msgid "%sERROR:%s You need to accept the terms and conditions to post a comment."
|
373 |
-
msgstr ""
|
374 |
-
"%sFEHLER:%s Sie müssen die Allgemeinen Geschäftsbedingungen akzeptieren, um einen "
|
375 |
-
"Kommentar abgeben zu können."
|
376 |
-
|
377 |
-
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
|
378 |
-
#: views/privacy-tools/notices.php:19
|
379 |
-
msgid "We have received your request and will reply within 30 days."
|
380 |
-
msgstr ""
|
381 |
-
"Wir haben Ihre Anfrage erhalten und werden Ihnen innerhalb von 30 Tagen antworten."
|
382 |
-
|
383 |
-
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
|
384 |
-
#: views/privacy-tools/notices.php:15
|
385 |
-
msgid "Consent withdrawn."
|
386 |
-
msgstr "Zustimmung zurückgezogen."
|
387 |
-
|
388 |
-
#: src/Components/WordpressUser/RegistrationForm.php:42
|
389 |
-
msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
|
390 |
-
msgstr ""
|
391 |
-
"<strong>FEHLER</strong>: Sie müssen die Allgemeinen Geschäftsbedingungen akzeptieren."
|
392 |
-
|
393 |
-
#: src/Components/WordpressUser/WordpressUser.php:63
|
394 |
-
#: src/Components/WordpressUser/WordpressUser.php:64
|
395 |
-
#: views/modules/wordpress-user/dashboard/data-page/header.php:2
|
396 |
-
msgctxt "(Admin)"
|
397 |
-
msgid "Privacy Tools"
|
398 |
-
msgstr "Datenschutz-Tools"
|
399 |
-
|
400 |
-
#: src/DataSubject/AdminTabDataSubject.php:27 src/DataSubject/AdminTabDataSubject.php:41
|
401 |
-
msgctxt "(Admin)"
|
402 |
-
msgid "Data Subjects"
|
403 |
-
msgstr "Betroffene Personen"
|
404 |
-
|
405 |
-
#: src/DataSubject/DataRepository.php:143
|
406 |
-
msgid "Data exported"
|
407 |
-
msgstr "Daten exportiert"
|
408 |
-
|
409 |
-
#: src/DataSubject/DataRepository.php:158
|
410 |
-
msgid "Data export request"
|
411 |
-
msgstr "Anfrage eines Daten-Exports"
|
412 |
-
|
413 |
-
#: src/DataSubject/DataRepository.php:171
|
414 |
-
msgid "Data removed"
|
415 |
-
msgstr "Daten gelöscht"
|
416 |
-
|
417 |
-
#: src/DataSubject/DataRepository.php:186
|
418 |
-
msgid "Data removal request"
|
419 |
-
msgstr "Anfrage einer Datenlöschung"
|
420 |
-
|
421 |
-
#: src/DataSubject/DataSubjectIdentificator.php:65
|
422 |
-
#: src/DataSubject/DataSubjectIdentificator.php:82
|
423 |
-
msgid "Your personal data on"
|
424 |
-
msgstr "Ihre personenbezogenen Daten auf"
|
425 |
-
|
426 |
-
#: src/Helpers.php:27
|
427 |
-
msgctxt "(Admin)"
|
428 |
-
msgid "Austria"
|
429 |
-
msgstr "Österreich"
|
430 |
-
|
431 |
-
#: src/Helpers.php:28
|
432 |
-
msgctxt "(Admin)"
|
433 |
-
msgid "Belgium"
|
434 |
-
msgstr "Belgien"
|
435 |
-
|
436 |
-
#: src/Helpers.php:29
|
437 |
-
msgctxt "(Admin)"
|
438 |
-
msgid "Bulgaria"
|
439 |
-
msgstr "Bulgarien"
|
440 |
-
|
441 |
-
#: src/Helpers.php:30
|
442 |
-
msgctxt "(Admin)"
|
443 |
-
msgid "Croatia"
|
444 |
-
msgstr "Kroatien"
|
445 |
-
|
446 |
-
#: src/Helpers.php:31
|
447 |
-
msgctxt "(Admin)"
|
448 |
-
msgid "Cyprus"
|
449 |
-
msgstr "Zypern"
|
450 |
-
|
451 |
-
#: src/Helpers.php:32
|
452 |
-
msgctxt "(Admin)"
|
453 |
-
msgid "Czech Republic"
|
454 |
-
msgstr "Tschechische Republik"
|
455 |
-
|
456 |
-
#: src/Helpers.php:33
|
457 |
-
msgctxt "(Admin)"
|
458 |
-
msgid "Denmark"
|
459 |
-
msgstr "Dänemark"
|
460 |
-
|
461 |
-
#: src/Helpers.php:34
|
462 |
-
msgctxt "(Admin)"
|
463 |
-
msgid "Estonia"
|
464 |
-
msgstr "Estland"
|
465 |
-
|
466 |
-
#: src/Helpers.php:35
|
467 |
-
msgctxt "(Admin)"
|
468 |
-
msgid "Finland"
|
469 |
-
msgstr "Finnland"
|
470 |
-
|
471 |
-
#: src/Helpers.php:36
|
472 |
-
msgctxt "(Admin)"
|
473 |
-
msgid "France"
|
474 |
-
msgstr "Frankreich"
|
475 |
-
|
476 |
-
#: src/Helpers.php:37
|
477 |
-
msgctxt "(Admin)"
|
478 |
-
msgid "Germany"
|
479 |
-
msgstr "Deutschland"
|
480 |
-
|
481 |
-
#: src/Helpers.php:38
|
482 |
-
msgctxt "(Admin)"
|
483 |
-
msgid "Greece"
|
484 |
-
msgstr "Griechenland"
|
485 |
-
|
486 |
-
#: src/Helpers.php:39
|
487 |
-
msgctxt "(Admin)"
|
488 |
-
msgid "Hungary"
|
489 |
-
msgstr "Ungarn"
|
490 |
-
|
491 |
-
#: src/Helpers.php:40
|
492 |
-
msgctxt "(Admin)"
|
493 |
-
msgid "Ireland"
|
494 |
-
msgstr "Irland"
|
495 |
-
|
496 |
-
#: src/Helpers.php:41
|
497 |
-
msgctxt "(Admin)"
|
498 |
-
msgid "Italy"
|
499 |
-
msgstr "Italien"
|
500 |
-
|
501 |
-
#: src/Helpers.php:42
|
502 |
-
msgctxt "(Admin)"
|
503 |
-
msgid "Latvia"
|
504 |
-
msgstr "Lettland"
|
505 |
-
|
506 |
-
#: src/Helpers.php:43
|
507 |
-
msgctxt "(Admin)"
|
508 |
-
msgid "Lithuania"
|
509 |
-
msgstr "Litauen"
|
510 |
-
|
511 |
-
#: src/Helpers.php:44
|
512 |
-
msgctxt "(Admin)"
|
513 |
-
msgid "Luxembourg"
|
514 |
-
msgstr "Luxemburg"
|
515 |
-
|
516 |
-
#: src/Helpers.php:45
|
517 |
-
msgctxt "(Admin)"
|
518 |
-
msgid "Malta"
|
519 |
-
msgstr "Malta"
|
520 |
-
|
521 |
-
#: src/Helpers.php:46
|
522 |
-
msgctxt "(Admin)"
|
523 |
-
msgid "Netherlands"
|
524 |
-
msgstr "Niederlande"
|
525 |
-
|
526 |
-
#: src/Helpers.php:47
|
527 |
-
msgctxt "(Admin)"
|
528 |
-
msgid "Poland"
|
529 |
-
msgstr "Polen"
|
530 |
-
|
531 |
-
#: src/Helpers.php:48
|
532 |
-
msgctxt "(Admin)"
|
533 |
-
msgid "Portugal"
|
534 |
-
msgstr "Portugal"
|
535 |
-
|
536 |
-
#: src/Helpers.php:49
|
537 |
-
msgctxt "(Admin)"
|
538 |
-
msgid "Romania"
|
539 |
-
msgstr "Rumänien"
|
540 |
-
|
541 |
-
#: src/Helpers.php:50
|
542 |
-
msgctxt "(Admin)"
|
543 |
-
msgid "Slovakia"
|
544 |
-
msgstr "Slowakei"
|
545 |
-
|
546 |
-
#: src/Helpers.php:51
|
547 |
-
msgctxt "(Admin)"
|
548 |
-
msgid "Slovenia"
|
549 |
-
msgstr "Slowenien"
|
550 |
-
|
551 |
-
#: src/Helpers.php:52
|
552 |
-
msgctxt "(Admin)"
|
553 |
-
msgid "Spain"
|
554 |
-
msgstr "Spanien"
|
555 |
-
|
556 |
-
#: src/Helpers.php:53
|
557 |
-
msgctxt "(Admin)"
|
558 |
-
msgid "Sweden"
|
559 |
-
msgstr "Schweden"
|
560 |
-
|
561 |
-
#: src/Helpers.php:54
|
562 |
-
msgctxt "(Admin)"
|
563 |
-
msgid "United Kingdom"
|
564 |
-
msgstr "Großbritannien"
|
565 |
-
|
566 |
-
#: src/Helpers.php:69
|
567 |
-
msgctxt "(Admin)"
|
568 |
-
msgid "Iceland"
|
569 |
-
msgstr "Island"
|
570 |
-
|
571 |
-
#: src/Helpers.php:70
|
572 |
-
msgctxt "(Admin)"
|
573 |
-
msgid "Norway"
|
574 |
-
msgstr "Norwegen"
|
575 |
-
|
576 |
-
#: src/Helpers.php:71
|
577 |
-
msgctxt "(Admin)"
|
578 |
-
msgid "Liechtenstein"
|
579 |
-
msgstr "Liechtenstein"
|
580 |
-
|
581 |
-
#: src/Helpers.php:72
|
582 |
-
msgctxt "(Admin)"
|
583 |
-
msgid "Switzerland"
|
584 |
-
msgstr "Schweiz"
|
585 |
-
|
586 |
-
#: src/Helpers.php:73
|
587 |
-
msgctxt "(Admin)"
|
588 |
-
msgid "United States"
|
589 |
-
msgstr "USA"
|
590 |
-
|
591 |
-
#: src/Helpers.php:74
|
592 |
-
msgctxt "(Admin)"
|
593 |
-
msgid "Rest of the world"
|
594 |
-
msgstr "Übrige Welt"
|
595 |
-
|
596 |
-
#: src/Helpers.php:145
|
597 |
-
msgid "An error has occurred. Please contact the site administrator."
|
598 |
-
msgstr ""
|
599 |
-
"Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie den Webseiten-Administrator."
|
600 |
-
|
601 |
-
#: src/Installer/Installer.php:135
|
602 |
-
msgctxt "(Admin)"
|
603 |
-
msgid "Setup Wizard"
|
604 |
-
msgstr "Einrichtungsassistent"
|
605 |
-
|
606 |
-
#: src/Installer/Steps/ConfigurationPages.php:23
|
607 |
-
#: src/Installer/Steps/PolicySettings.php:23 src/Installer/Steps/PolicySettings.php:48
|
608 |
-
msgctxt "(Admin)"
|
609 |
-
msgid "— Create a new page —"
|
610 |
-
msgstr "— Neue Seite erstellen —"
|
611 |
-
|
612 |
-
#: src/Installer/Steps/PolicySettings.php:38
|
613 |
-
msgctxt "(Admin)"
|
614 |
-
msgid "We have automatically selected your WooCommerce Terms & Conditions page."
|
615 |
-
msgstr ""
|
616 |
-
"Wir haben automatisch Ihre Seite mit den Allgemeinen Geschäftsbedingungen von "
|
617 |
-
"WooCommerce ausgewählt."
|
618 |
-
|
619 |
-
#: src/Modules/ContactForm7/ContactForm7.php:35
|
620 |
-
msgctxt "(Admin)"
|
621 |
-
msgid "gdpr terms txt"
|
622 |
-
msgstr "DSGVO Bestimmungen txt"
|
623 |
-
|
624 |
-
#: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
|
625 |
-
#, php-format
|
626 |
-
msgid "Nonce error for action \"%s\". Please go back and try again!"
|
627 |
-
msgstr ""
|
628 |
-
"Ein Fehler für die Aktion %s ist aufgetreten. Bitte gehen Sie zurück und versuchen Sie "
|
629 |
-
"es erneut!"
|
630 |
-
|
631 |
-
#: src/Router.php:149
|
632 |
-
msgctxt "(Admin)"
|
633 |
-
msgid "You do not have the required permissions to perform this action!"
|
634 |
-
msgstr ""
|
635 |
-
"Sie verfügen nicht über die erforderlichen Berechtigungen zum Ausführen dieser Aktion!"
|
636 |
-
|
637 |
-
#: views/admin/consent.php:3
|
638 |
-
msgctxt "(Admin)"
|
639 |
-
msgid "Default consent types"
|
640 |
-
msgstr "Voreingestellte Arten der Zustimmung"
|
641 |
-
|
642 |
-
#: views/admin/consent.php:4
|
643 |
-
msgctxt "(Admin)"
|
644 |
-
msgid ""
|
645 |
-
"These are the consent types that have been automatically registered by the framework "
|
646 |
-
"or a plugin."
|
647 |
-
msgstr ""
|
648 |
-
"Dies sind die Zustimmungsarten, die automatisch durch das GDPR Framework oder ein "
|
649 |
-
"anderes Plugin registriert wurden."
|
650 |
-
|
651 |
-
#: views/admin/consent.php:7 views/admin/consent.php:52
|
652 |
-
msgctxt "(Admin)"
|
653 |
-
msgid "Slug"
|
654 |
-
msgstr "Pfad"
|
655 |
-
|
656 |
-
#: views/admin/consent.php:8 views/admin/consent.php:38 views/admin/consent.php:60
|
657 |
-
msgctxt "(Admin)"
|
658 |
-
msgid "Title"
|
659 |
-
msgstr "Titel"
|
660 |
-
|
661 |
-
#: views/admin/consent.php:9 views/admin/consent.php:41 views/admin/consent.php:63
|
662 |
-
msgctxt "(Admin)"
|
663 |
-
msgid "Description"
|
664 |
-
msgstr "Beschreibung"
|
665 |
-
|
666 |
-
#: views/admin/consent.php:10
|
667 |
-
msgctxt "(Admin)"
|
668 |
-
msgid "Visibility"
|
669 |
-
msgstr "Sichtbarkeit"
|
670 |
-
|
671 |
-
#: views/admin/consent.php:18
|
672 |
-
msgctxt "(Admin)"
|
673 |
-
msgid "Visible"
|
674 |
-
msgstr "Sichtbar"
|
675 |
-
|
676 |
-
#: views/admin/consent.php:20
|
677 |
-
msgctxt "(Admin)"
|
678 |
-
msgid "Hidden"
|
679 |
-
msgstr "Ausgeblendet"
|
680 |
-
|
681 |
-
#: views/admin/consent.php:29
|
682 |
-
msgctxt "(Admin)"
|
683 |
-
msgid "Custom consent types"
|
684 |
-
msgstr "Benutzerdefinierte Arten der Zustimmung"
|
685 |
-
|
686 |
-
#: views/admin/consent.php:30
|
687 |
-
msgctxt "(Admin)"
|
688 |
-
msgid ""
|
689 |
-
"Here you can add custom consent types to track. They will not be used anywhere by "
|
690 |
-
"default - you will need to build an integration for each of them."
|
691 |
-
msgstr ""
|
692 |
-
"Hier können Sie benutzerdefinierte Arten der Zustimmung hinzufügen, um sie zu "
|
693 |
-
"verfolgen. Sie werden nigends per Voreinstellung verwendet. Sie müssen dafür jeweils "
|
694 |
-
"eine Integration erstellen."
|
695 |
-
|
696 |
-
#: views/admin/consent.php:35
|
697 |
-
msgctxt "(Admin)"
|
698 |
-
msgid "Machine-readable slug"
|
699 |
-
msgstr "Maschinenlesbarer Pfad"
|
700 |
-
|
701 |
-
#: views/admin/consent.php:44 views/admin/consent.php:68
|
702 |
-
msgctxt "(Admin)"
|
703 |
-
msgid "Visible?"
|
704 |
-
msgstr "Sichtbar?"
|
705 |
-
|
706 |
-
#: views/admin/consent.php:72
|
707 |
-
msgctxt "(Admin)"
|
708 |
-
msgid "Remove"
|
709 |
-
msgstr "Entfernen"
|
710 |
-
|
711 |
-
#: views/admin/consent.php:93
|
712 |
-
msgctxt "(Admin)"
|
713 |
-
msgid "Additional info"
|
714 |
-
msgstr "Zusätzliche Informationen"
|
715 |
-
|
716 |
-
#: views/admin/consent.php:95
|
717 |
-
msgctxt "(Admin)"
|
718 |
-
msgid "This text will be displayed to your data subjects on the Privacy Tools page."
|
719 |
-
msgstr ""
|
720 |
-
"Dieser Text wird Ihren betroffenen Personen auf der Seite der Datenschutz-Tools "
|
721 |
-
"angezeigt."
|
722 |
-
|
723 |
-
#: views/admin/data-subjects/search-form.php:2
|
724 |
-
msgctxt "(Admin)"
|
725 |
-
msgid ""
|
726 |
-
"On this page, you can find which data subjects personal data you are storing and "
|
727 |
-
"download, export or delete it."
|
728 |
-
msgstr ""
|
729 |
-
"Auf dieser Seite können Sie nachlesen, welche personenbezogenen Daten Sie von "
|
730 |
-
"betroffenen Personen speichern und diese herunterladen, exportieren oder löschen."
|
731 |
-
|
732 |
-
#: views/admin/data-subjects/search-form.php:10
|
733 |
-
msgctxt "(Admin)"
|
734 |
-
msgid "Find data subject by email"
|
735 |
-
msgstr "Betroffene Personen über die E-Mail-Adresse finden"
|
736 |
-
|
737 |
-
#: views/admin/data-subjects/search-form.php:11
|
738 |
-
msgctxt "(Admin)"
|
739 |
-
msgid "Email address"
|
740 |
-
msgstr "E-Mail-Adresse"
|
741 |
-
|
742 |
-
#: views/admin/data-subjects/search-form.php:16
|
743 |
-
msgctxt "(Admin)"
|
744 |
-
msgid "Search"
|
745 |
-
msgstr "Suchen"
|
746 |
-
|
747 |
-
#: views/admin/data-subjects/search-results.php:7
|
748 |
-
msgctxt "(Admin)"
|
749 |
-
msgid "Username"
|
750 |
-
msgstr "Benutzername"
|
751 |
-
|
752 |
-
#: views/admin/data-subjects/search-results.php:12
|
753 |
-
msgctxt "(Admin)"
|
754 |
-
msgid "is not a registered user."
|
755 |
-
msgstr "ist nicht registriert."
|
756 |
-
|
757 |
-
#: views/admin/data-subjects/search-results.php:16
|
758 |
-
msgctxt "(Admin)"
|
759 |
-
msgid "Download data (html)"
|
760 |
-
msgstr "Download der Daten (html)"
|
761 |
-
|
762 |
-
#: views/admin/data-subjects/search-results.php:17
|
763 |
-
msgctxt "(Admin)"
|
764 |
-
msgid "Export data (json)"
|
765 |
-
msgstr "Datenexport (json)"
|
766 |
-
|
767 |
-
#: views/admin/data-subjects/search-results.php:21
|
768 |
-
msgctxt "(Admin)"
|
769 |
-
msgid "This user has admin capabilities. Deleting data via this interface is disabled."
|
770 |
-
msgstr ""
|
771 |
-
"Dieser Benutzer hat die Berechtigungsstufe eines Admins. Das Löschen der Daten über "
|
772 |
-
"diese Bedienoberfläche ist daher deaktiviert."
|
773 |
-
|
774 |
-
#: views/admin/data-subjects/search-results.php:24
|
775 |
-
msgctxt "(Admin)"
|
776 |
-
msgid "Anonymize data"
|
777 |
-
msgstr "Daten anonymisieren"
|
778 |
-
|
779 |
-
#: views/admin/data-subjects/search-results.php:25
|
780 |
-
msgctxt "(Admin)"
|
781 |
-
msgid "Delete data"
|
782 |
-
msgstr "Daten löschen"
|
783 |
-
|
784 |
-
#: views/admin/data-subjects/search-results.php:29
|
785 |
-
msgctxt "(Admin)"
|
786 |
-
msgid "No data found!"
|
787 |
-
msgstr "Keine Daten gefunden!"
|
788 |
-
|
789 |
-
#: views/admin/general/delete-action-email.php:5
|
790 |
-
#: views/admin/general/export-action-email.php:5
|
791 |
-
#: views/installer/steps/configuration-settings.php:29
|
792 |
-
#: views/installer/steps/configuration-settings.php:79
|
793 |
-
msgid "Email address"
|
794 |
-
msgstr "E-Mail-Adresse"
|
795 |
-
|
796 |
-
#: views/admin/general/delete-action-reassign.php:3
|
797 |
-
#: views/installer/steps/configuration-settings.php:50
|
798 |
-
msgctxt "(Admin)"
|
799 |
-
msgid "Delete content"
|
800 |
-
msgstr "Inhalt(e) löschen"
|
801 |
-
|
802 |
-
#: views/admin/general/delete-action-reassign.php:6
|
803 |
-
#: views/installer/steps/configuration-settings.php:53
|
804 |
-
msgctxt "(Admin)"
|
805 |
-
msgid "Reassign content to a user"
|
806 |
-
msgstr "Inhalt(e) einem anderen Benutzer zuweisen"
|
807 |
-
|
808 |
-
#: views/admin/general/delete-action-reassign.php:10
|
809 |
-
msgctxt "(Admin)"
|
810 |
-
msgid ""
|
811 |
-
"If the user has submitted any content on your site, should it be deleted or reassigned "
|
812 |
-
"to another user?"
|
813 |
-
msgstr ""
|
814 |
-
"Falls der Benutzer Inhalte an Ihre Website übermittelt hat, sollen diese gelöscht oder "
|
815 |
-
"einem anderen Benutzer zugewiesen werden?"
|
816 |
-
|
817 |
-
#: views/admin/general/description-data-page.php:2
|
818 |
-
msgctxt "(Admin)"
|
819 |
-
msgid ""
|
820 |
-
"Select the page where users can go to control their data. This page must contain the "
|
821 |
-
"[gdpr_privacy_tools] shortcode."
|
822 |
-
msgstr ""
|
823 |
-
"Wählen Sie die Seite aus, auf der Benutzer ihre Daten überprüfen können. Diese Seite "
|
824 |
-
"muss den folgenden Shortcode enthalten: [gdpr_privacy_tools]"
|
825 |
-
|
826 |
-
#: views/admin/general/enable.php:9
|
827 |
-
msgctxt "(Admin)"
|
828 |
-
msgid "Enable the view, export and forget functionality for users and visitors"
|
829 |
-
msgstr ""
|
830 |
-
"Aktivieren Sie die Ansichts-, Export- und Vergessens-Funktionalität für Benutzer und "
|
831 |
-
"Besucher"
|
832 |
-
|
833 |
-
#: views/admin/general/enable.php:12
|
834 |
-
msgctxt "(Admin)"
|
835 |
-
msgid ""
|
836 |
-
"Enable the Privacy Tools page on front-end and dashboard. This allows visitors to "
|
837 |
-
"request viewing and deleting their personal data and withdraw consents."
|
838 |
-
msgstr ""
|
839 |
-
"Aktivieren Sie die Seite der Datenschutz-Tools im Frontend und Dashboard. Dies "
|
840 |
-
"ermöglicht es den Besuchern, Einsicht in ihre persönlichen Daten zu verlangen, sie zu "
|
841 |
-
"löschen und ihre Zustimmung zur Speicherung zu widerrufen."
|
842 |
-
|
843 |
-
#: views/admin/general/theme-compatibility.php:9
|
844 |
-
#: views/installer/steps/integrations.php:21
|
845 |
-
msgctxt "(Admin)"
|
846 |
-
msgid "Automatically add Privacy Policy and Privacy Tools links to your site footer."
|
847 |
-
msgstr ""
|
848 |
-
"Automatisch die Links zur Datenschutzerklärung und zu den Datenschutz-Tools im Footer "
|
849 |
-
"Ihrer Website hinzufügen."
|
850 |
-
|
851 |
-
#: views/admin/notices/header.php:4 views/admin/settings-page.php:3
|
852 |
-
#: views/installer/header.php:23
|
853 |
-
msgctxt "(Admin)"
|
854 |
-
msgid "The GDPR Framework"
|
855 |
-
msgstr "The GDPR Framework"
|
856 |
-
|
857 |
-
#: views/admin/notices/helper-autoinstall.php:2
|
858 |
-
msgctxt "(Admin)"
|
859 |
-
msgid ""
|
860 |
-
"A Privacy Policy page has been created, but it is empty. You can generate a policy "
|
861 |
-
"template on this page."
|
862 |
-
msgstr ""
|
863 |
-
"Eine Seite für die Datenschutzerklärung wurde erstellt, aber sie ist leer. Sie können "
|
864 |
-
"auf dieser Seite eine Vorlage für die Datenschutzerklärung generieren."
|
865 |
-
|
866 |
-
#: views/admin/notices/helper-policy.php:2
|
867 |
-
msgctxt "(Admin)"
|
868 |
-
msgid ""
|
869 |
-
"Heads up - your Privacy Policy still requires some attention. Find the places marked "
|
870 |
-
"with [TODO] and replace them with real content!"
|
871 |
-
msgstr ""
|
872 |
-
"Aufgepasst - Ihre Datenschutzerklärung erfordert noch einige Aufmerksamkeit. Finden "
|
873 |
-
"Sie die mit [TODO] markierten Orte und ersetzen Sie sie durch echten Inhalt!"
|
874 |
-
|
875 |
-
#: views/admin/notices/helper-tools.php:2
|
876 |
-
msgctxt "(Admin)"
|
877 |
-
msgid "The contents of this page should contain the [gdpr_tools] shortcode."
|
878 |
-
msgstr "Der Inhalt dieser Seite sollte den Shortcode [gdpr_tools] enthalten."
|
879 |
-
|
880 |
-
#: views/admin/privacy-policy/description-policy-page.php:2
|
881 |
-
msgctxt "(Admin)"
|
882 |
-
msgid "Select the page which will contain your Privacy Policy"
|
883 |
-
msgstr "Wählen Sie die Seite aus, die Ihre Datenschutzerklärung enthalten wird"
|
884 |
-
|
885 |
-
#: views/admin/privacy-policy/generated.php:3
|
886 |
-
msgctxt "(Admin)"
|
887 |
-
msgid "Your Privacy Policy has been generated."
|
888 |
-
msgstr "Ihre Datenschutzerklärung wurde erstellt."
|
889 |
-
|
890 |
-
#: views/admin/privacy-policy/generated.php:20
|
891 |
-
msgctxt "(Admin)"
|
892 |
-
msgid "« Back"
|
893 |
-
msgstr "« Zurück"
|
894 |
-
|
895 |
-
#: views/admin/privacy-policy/header.php:2
|
896 |
-
msgctxt "(Admin)"
|
897 |
-
msgid ""
|
898 |
-
"This page allows you to generate a Privacy Policy based on the information you entered "
|
899 |
-
"below."
|
900 |
-
msgstr ""
|
901 |
-
"Auf dieser Seite können Sie eine Datenschutzerklärung erzeugen, die auf den "
|
902 |
-
"Informationen basiert, die Sie unten eingegeben haben."
|
903 |
-
|
904 |
-
#: views/admin/settings-page.php:31
|
905 |
-
#, php-format
|
906 |
-
msgctxt "(Admin)"
|
907 |
-
msgid "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
908 |
-
msgstr "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
909 |
-
|
910 |
-
#: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
|
911 |
-
msgctxt "(Admin)"
|
912 |
-
msgid "Need more info?"
|
913 |
-
msgstr "Benötigen Sie weitere Informationen?"
|
914 |
-
|
915 |
-
#: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
|
916 |
-
msgctxt "(Admin)"
|
917 |
-
msgid "Site Owner's guide to GDPR"
|
918 |
-
msgstr "DSGVO-Handbuch für Website-Besitzer"
|
919 |
-
|
920 |
-
#: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
|
921 |
-
msgctxt "(Admin)"
|
922 |
-
msgid "Read the full guide on GDPR compliance."
|
923 |
-
msgstr "Lesen Sie das vollständige Handbuch zur DSGVO-Konformität."
|
924 |
-
|
925 |
-
#: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
|
926 |
-
msgctxt "(Admin)"
|
927 |
-
msgid "Knowledge base"
|
928 |
-
msgstr "Wissensdatenbank"
|
929 |
-
|
930 |
-
#: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
|
931 |
-
msgctxt "(Admin)"
|
932 |
-
msgid "Check out the knowledge base for common questions and answers."
|
933 |
-
msgstr ""
|
934 |
-
"Sehen Sie sich die Wissensdatenbank an, um häufige Fragen und Antworten zu lesen."
|
935 |
-
|
936 |
-
#: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
|
937 |
-
msgctxt "(Admin)"
|
938 |
-
msgid "Developer's guide to GDPR"
|
939 |
-
msgstr "Entwicklerleitfaden zur DSGVO"
|
940 |
-
|
941 |
-
#: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
|
942 |
-
msgctxt "(Admin)"
|
943 |
-
msgid "We have a thorough guide to help making custom sites compliant."
|
944 |
-
msgstr ""
|
945 |
-
"Wir haben eine umfassende Anleitung, um benutzerdefinierte Websites DSGVO-konform zu "
|
946 |
-
"machen."
|
947 |
-
|
948 |
-
#: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
|
949 |
-
msgctxt "(Admin)"
|
950 |
-
msgid "Need help?"
|
951 |
-
msgstr "Brauchen Sie Hilfe?"
|
952 |
-
|
953 |
-
#: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
|
954 |
-
msgctxt "(Admin)"
|
955 |
-
msgid "Submit a support request"
|
956 |
-
msgstr "Supportanfrage stellen"
|
957 |
-
|
958 |
-
#: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
|
959 |
-
msgctxt "(Admin)"
|
960 |
-
msgid "Found a bug or problem with the plugin? Post in the wordpress.org support forum."
|
961 |
-
msgstr ""
|
962 |
-
"Einen Fehler gefunden oder ein Problem mit dem Plugin? Bitte schreiben Sie uns im "
|
963 |
-
"Support-Forum von wordpress.org."
|
964 |
-
|
965 |
-
#: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
|
966 |
-
msgctxt "(Admin)"
|
967 |
-
msgid "Request a consultation"
|
968 |
-
msgstr "Fordern Sie eine Beratung an"
|
969 |
-
|
970 |
-
#: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
|
971 |
-
msgctxt "(Admin)"
|
972 |
-
msgid "Need development or legal assistance in making your site compliant? We can help!"
|
973 |
-
msgstr ""
|
974 |
-
"Benötigen Sie Unterstützung bei der Web-Entwicklung oder Rechtshilfe um Ihre Website "
|
975 |
-
"DSGVO-konform einzurichten? Wir können helfen!"
|
976 |
-
|
977 |
-
#: views/admin/wizard-buttons.php:2
|
978 |
-
msgctxt "(Admin)"
|
979 |
-
msgid "Restart setup wizard"
|
980 |
-
msgstr "Einrichtungsassistenten erneut starten"
|
981 |
-
|
982 |
-
#: views/email/action-export.php:8 views/email/action-forget.php:12
|
983 |
-
msgctxt "(Admin)"
|
984 |
-
msgid "This email is just for your information. You don't need to take any action"
|
985 |
-
msgstr "Diese E-Mail dient nur zu Ihrer Information. Sie müssen nichts unternehmen"
|
986 |
-
|
987 |
-
#: views/email/action-forget.php:8
|
988 |
-
msgctxt "(Admin)"
|
989 |
-
msgid "The data subject had a user account on your website."
|
990 |
-
msgstr "Die betroffene Person hatte einen Benutzer-Account auf Ihrer Website."
|
991 |
-
|
992 |
-
#: views/email/identify-data-subject.php:2
|
993 |
-
msgid "Someone has requested access to your data on"
|
994 |
-
msgstr "Jemand hat Zugriff auf Ihre Daten angefordert"
|
995 |
-
|
996 |
-
#: views/email/identify-data-subject.php:3
|
997 |
-
msgid "If this was a mistake, just ignore this email and nothing will happen."
|
998 |
-
msgstr ""
|
999 |
-
"Falls Sie diese E-Mail irrtümlich erhalten haben, ignorieren Sie sie bitte und es wird "
|
1000 |
-
"nichts weiter passieren."
|
1001 |
-
|
1002 |
-
#: views/email/identify-data-subject.php:4
|
1003 |
-
msgid "To manage your data, visit the following address:"
|
1004 |
-
msgstr "Um Ihre Daten zu verwalten, besuchen Sie die folgende Adresse:"
|
1005 |
-
|
1006 |
-
#: views/email/identify-data-subject.php:10
|
1007 |
-
msgid "This link is valid for 15 minutes."
|
1008 |
-
msgstr "Dieser Link ist 15 Minuten gültig."
|
1009 |
-
|
1010 |
-
#: views/email/no-data.php:2
|
1011 |
-
msgid "Someone has requested information about your personal data on"
|
1012 |
-
msgstr "Jemand hat Auskunft über Ihre personenbezogenen Daten erbeten auf"
|
1013 |
-
|
1014 |
-
#: views/email/no-data.php:3
|
1015 |
-
msgid "None of your personal data is stored on"
|
1016 |
-
msgstr "Keine Ihrer persönlichen Daten wurden gespeichert auf"
|
1017 |
-
|
1018 |
-
#: views/email/no-data.php:5
|
1019 |
-
msgid ""
|
1020 |
-
"If this was a mistake or you did not request this email, just ignore it and nothing "
|
1021 |
-
"will happen."
|
1022 |
-
msgstr ""
|
1023 |
-
"Falls Sie diese E-Mail irrtümlich erhalten haben, ignorieren Sie sie bitte und es wird "
|
1024 |
-
"nichts weiter passieren."
|
1025 |
-
|
1026 |
-
#: views/email/request-export.php:13 views/email/request-forget.php:13
|
1027 |
-
msgctxt "(Admin)"
|
1028 |
-
msgid "As a reminder: according to GDPR, you have 30 days to comply."
|
1029 |
-
msgstr "Zur Erinnerung: Gemäß der DSGVO müssen Sie 30 Tage einhalten."
|
1030 |
-
|
1031 |
-
#: views/global/delete-action.php:2
|
1032 |
-
msgctxt "(Admin)"
|
1033 |
-
msgid "Automatically anonymize data"
|
1034 |
-
msgstr "Daten automatisch anonymisieren"
|
1035 |
-
|
1036 |
-
#: views/global/delete-action.php:5
|
1037 |
-
msgctxt "(Admin)"
|
1038 |
-
msgid "Automatically delete data"
|
1039 |
-
msgstr "Daten automatisch löschen"
|
1040 |
-
|
1041 |
-
#: views/global/delete-action.php:9
|
1042 |
-
msgctxt "(Admin)"
|
1043 |
-
msgid "Automatically anonymize data and notify me via email"
|
1044 |
-
msgstr "Daten automatisch anonymisieren und mich über E-Mail benachrichtigen"
|
1045 |
-
|
1046 |
-
#: views/global/delete-action.php:13
|
1047 |
-
msgctxt "(Admin)"
|
1048 |
-
msgid "Automatically delete data and notify me via email"
|
1049 |
-
msgstr "Daten automatisch löschen und mich über E-Mail benachrichtigen"
|
1050 |
-
|
1051 |
-
#: views/global/delete-action.php:16 views/global/export-action.php:10
|
1052 |
-
msgctxt "(Admin)"
|
1053 |
-
msgid "Only notify me via email"
|
1054 |
-
msgstr "Mich lediglich über E-Mail benachrichtigen"
|
1055 |
-
|
1056 |
-
#: views/global/export-action.php:2
|
1057 |
-
msgctxt "(Admin)"
|
1058 |
-
msgid "Automatically download data"
|
1059 |
-
msgstr "Daten automatisch herunterladen"
|
1060 |
-
|
1061 |
-
#: views/global/export-action.php:6
|
1062 |
-
msgctxt "(Admin)"
|
1063 |
-
msgid "Automatically download data and notify me via email"
|
1064 |
-
msgstr "Daten automatisch herunterladen und mich über E-Mail benachrichtigen"
|
1065 |
-
|
1066 |
-
#: views/installer/continue-notice.php:2
|
1067 |
-
msgctxt "(Admin)"
|
1068 |
-
msgid "The The GDPR Framework setup has not been finalized yet."
|
1069 |
-
msgstr "Die Einrichtung des GDPR Frameworks ist noch nicht abgeschlossen."
|
1070 |
-
|
1071 |
-
#: views/installer/continue-notice.php:3
|
1072 |
-
msgctxt "(Admin)"
|
1073 |
-
msgid "You can continue the setup at any time."
|
1074 |
-
msgstr "Sie können die Einrichtung jederzeit fortsetzen."
|
1075 |
-
|
1076 |
-
#: views/installer/continue-notice.php:6
|
1077 |
-
msgctxt "(Admin)"
|
1078 |
-
msgid "Continue the setup wizard"
|
1079 |
-
msgstr "Setzen Sie den Einrichtungsassistenten fort"
|
1080 |
-
|
1081 |
-
#: views/installer/continue-notice.php:9
|
1082 |
-
msgctxt "(Admin)"
|
1083 |
-
msgid "Hide this message"
|
1084 |
-
msgstr "Diese Nachricht ausblenden"
|
1085 |
-
|
1086 |
-
#: views/installer/footer.php:7
|
1087 |
-
msgid "Back"
|
1088 |
-
msgstr "Zurück"
|
1089 |
-
|
1090 |
-
#: views/installer/header.php:26
|
1091 |
-
msgctxt "(Admin)"
|
1092 |
-
msgid "I need help"
|
1093 |
-
msgstr "Ich benötige Unterstützung"
|
1094 |
-
|
1095 |
-
#: views/installer/header.php:29
|
1096 |
-
msgctxt "(Admin)"
|
1097 |
-
msgid "Developer Docs"
|
1098 |
-
msgstr "Entwickler-Dokumentation"
|
1099 |
-
|
1100 |
-
#: views/installer/header.php:36
|
1101 |
-
msgctxt "(Admin)"
|
1102 |
-
msgid "Configuration"
|
1103 |
-
msgstr "Konfiguration"
|
1104 |
-
|
1105 |
-
#: views/installer/header.php:46
|
1106 |
-
msgctxt "(Admin)"
|
1107 |
-
msgid "Forms & Consent"
|
1108 |
-
msgstr "Formulare & Zustimmung"
|
1109 |
-
|
1110 |
-
#: views/installer/header.php:51
|
1111 |
-
msgctxt "(Admin)"
|
1112 |
-
msgid "Integrations"
|
1113 |
-
msgstr "Integrationen"
|
1114 |
-
|
1115 |
-
#: views/installer/steps/configuration-settings.php:23
|
1116 |
-
#: views/installer/steps/configuration-settings.php:73
|
1117 |
-
msgctxt "(Admin)"
|
1118 |
-
msgid "Enter the email address to notify"
|
1119 |
-
msgstr "Geben Sie die zu benachrichtigende E-Mail-Adresse ein"
|
1120 |
-
|
1121 |
-
#: views/installer/steps/disclaimer.php:21
|
1122 |
-
msgctxt "(Admin)"
|
1123 |
-
msgid "I accept"
|
1124 |
-
msgstr "Ich akzeptiere"
|
1125 |
-
|
1126 |
-
#: views/installer/welcome-notice.php:7
|
1127 |
-
msgctxt "(Admin)"
|
1128 |
-
msgid "Run the setup wizard"
|
1129 |
-
msgstr "Einrichtungsassistent jetzt starten"
|
1130 |
-
|
1131 |
-
#: views/installer/welcome-notice.php:11
|
1132 |
-
msgctxt "(Admin)"
|
1133 |
-
msgid "Auto-install pages"
|
1134 |
-
msgstr "Seiten automatisch einrichten"
|
1135 |
-
|
1136 |
-
#: views/installer/welcome-notice.php:15
|
1137 |
-
msgctxt "(Admin)"
|
1138 |
-
msgid "Skip and install manually"
|
1139 |
-
msgstr "Überspringen und manuell einrichten"
|
1140 |
-
|
1141 |
-
#: views/modules/contact-form-7/generator-privacy.php:6
|
1142 |
-
msgctxt "(Admin)"
|
1143 |
-
msgid ""
|
1144 |
-
"This tag generates the default text for Terms & Conditions and/or Privacy Policy "
|
1145 |
-
"checkbox."
|
1146 |
-
msgstr ""
|
1147 |
-
"Dieser Tag generiert den Standardtext für die Checkbox der Geschäftsbedingungen und/"
|
1148 |
-
"oder Datenschutzerklärung."
|
1149 |
-
|
1150 |
-
#: views/modules/contact-form-7/generator-privacy.php:15
|
1151 |
-
msgid "Insert"
|
1152 |
-
msgstr "Einfügen"
|
1153 |
-
|
1154 |
-
#: views/modules/wordpress-comments/terms-checkbox.php:6
|
1155 |
-
#: views/modules/wordpress-user/registration-terms-checkbox.php:7
|
1156 |
-
#, php-format
|
1157 |
-
msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
|
1158 |
-
msgstr ""
|
1159 |
-
"Ich akzeptiere die %sAllgemeinen Geschäftsbedingungen%s und die %sDatenschutzerklärung"
|
1160 |
-
"%s"
|
1161 |
-
|
1162 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
|
1163 |
-
msgid "Manage consents"
|
1164 |
-
msgstr "Zustimmungen verwalten"
|
1165 |
-
|
1166 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
|
1167 |
-
#: views/privacy-tools/form-consent.php:6
|
1168 |
-
msgid "Here you can withdraw any consents you have given."
|
1169 |
-
msgstr "Hier können Sie Ihre gegebenen Einwilligungen widerrufen."
|
1170 |
-
|
1171 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
|
1172 |
-
#: views/privacy-tools/form-consent.php:9
|
1173 |
-
msgid "Consent types"
|
1174 |
-
msgstr "Arten der Zustimmung"
|
1175 |
-
|
1176 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
|
1177 |
-
#: views/privacy-tools/form-consent.php:24
|
1178 |
-
msgid "Withdraw"
|
1179 |
-
msgstr "Widerrufen"
|
1180 |
-
|
1181 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
|
1182 |
-
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
|
1183 |
-
msgctxt "(Admin)"
|
1184 |
-
msgid "Delete this user and all data"
|
1185 |
-
msgstr "Diesen Benutzer und alle Daten löschen"
|
1186 |
-
|
1187 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
|
1188 |
-
msgctxt "(Admin)"
|
1189 |
-
msgid "Delete my data"
|
1190 |
-
msgstr "Löschen Sie meine Daten"
|
1191 |
-
|
1192 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
|
1193 |
-
#: views/privacy-tools/form-delete.php:13
|
1194 |
-
msgid "Delete all data we have gathered about you."
|
1195 |
-
msgstr "Lassen Sie uns alle Daten, die wir über Sie haben, löschen."
|
1196 |
-
|
1197 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
|
1198 |
-
#: views/privacy-tools/form-delete.php:14
|
1199 |
-
msgid "If you have a user account on our site, it will also be deleted."
|
1200 |
-
msgstr ""
|
1201 |
-
"Falls Sie auf unserer Website ein Benutzerkonto haben, wird dieses ebenfalls gelöscht."
|
1202 |
-
|
1203 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
|
1204 |
-
#: views/privacy-tools/form-delete.php:15
|
1205 |
-
msgid "Be careful - this action is permanent and CANNOT be undone."
|
1206 |
-
msgstr ""
|
1207 |
-
"Seien Sie vorsichtig - diese Aktion ist dauerhaft und kann NICHT rückgängig gemacht "
|
1208 |
-
"werden."
|
1209 |
-
|
1210 |
-
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
|
1211 |
-
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
|
1212 |
-
msgctxt "(Admin)"
|
1213 |
-
msgid ""
|
1214 |
-
"You seem to have an administrator or equivalent role, so deleting/anonymizing via this "
|
1215 |
-
"page is disabled."
|
1216 |
-
msgstr ""
|
1217 |
-
"Du scheinst die Rolle eines Administrators oder eine gleichwertige Rolle zu haben, so "
|
1218 |
-
"dass löschen/anonymisieren über diese Seite deaktiviert ist."
|
1219 |
-
|
1220 |
-
#: views/modules/wordpress-user/dashboard/form-export.php:7
|
1221 |
-
#: views/privacy-tools/form-export.php:1
|
1222 |
-
msgid "Download your data"
|
1223 |
-
msgstr "Laden Sie Ihre Daten herunter"
|
1224 |
-
|
1225 |
-
#: views/modules/wordpress-user/dashboard/form-export.php:12
|
1226 |
-
#: views/privacy-tools/form-export.php:13
|
1227 |
-
msgid "Download as table"
|
1228 |
-
msgstr "Als Tabelle herunterladen"
|
1229 |
-
|
1230 |
-
#: views/modules/wordpress-user/dashboard/form-export.php:15
|
1231 |
-
#: views/privacy-tools/form-export.php:22
|
1232 |
-
msgid "Export as JSON"
|
1233 |
-
msgstr "Export als JSON"
|
1234 |
-
|
1235 |
-
#: views/modules/wordpress-user/dashboard/form-export.php:19
|
1236 |
-
#: views/privacy-tools/form-export.php:4
|
1237 |
-
msgid "You can download all your data formatted as a table for viewing."
|
1238 |
-
msgstr ""
|
1239 |
-
"Für eine einfachere Betrachtung können Sie alle Ihre Daten in Form einer Tabelle "
|
1240 |
-
"herunterladen."
|
1241 |
-
|
1242 |
-
#: views/modules/wordpress-user/dashboard/form-export.php:20
|
1243 |
-
#: views/privacy-tools/form-export.php:5
|
1244 |
-
msgid "Alternatively, you can export it in machine-readable JSON format."
|
1245 |
-
msgstr "Alternativ können Sie sie im maschinenlesbaren JSON-Format exportieren."
|
1246 |
-
|
1247 |
-
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
|
1248 |
-
msgctxt "(Admin)"
|
1249 |
-
msgid "Delete user and all data"
|
1250 |
-
msgstr "Diesen Benutzer und alle Daten löschen"
|
1251 |
-
|
1252 |
-
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
|
1253 |
-
msgctxt "(Admin)"
|
1254 |
-
msgid "Anonymize user and all data"
|
1255 |
-
msgstr "Diesen Benutzer und alle Daten anonymisieren"
|
1256 |
-
|
1257 |
-
#: views/modules/wordpress-user/dashboard/profile-page/header.php:2
|
1258 |
-
msgctxt "(Admin)"
|
1259 |
-
msgid "GDPR Data"
|
1260 |
-
msgstr "DSGVO Daten"
|
1261 |
-
|
1262 |
-
#: views/modules/wordpress-user/dashboard/profile-page/header.php:6
|
1263 |
-
msgctxt "(Admin)"
|
1264 |
-
msgid "This user has been anonymized."
|
1265 |
-
msgstr "Dieser Benutzer wurde anonymisiert."
|
1266 |
-
|
1267 |
-
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
|
1268 |
-
msgctxt "(Admin)"
|
1269 |
-
msgid "Consents given"
|
1270 |
-
msgstr "Gegebene Zustimmungen"
|
1271 |
-
|
1272 |
-
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
|
1273 |
-
msgctxt "(Admin)"
|
1274 |
-
msgid "No consents given"
|
1275 |
-
msgstr "Keine Zustimmungen gegeben"
|
1276 |
-
|
1277 |
-
#: views/privacy-tools/form-consent.php:2
|
1278 |
-
msgid "Consent"
|
1279 |
-
msgstr "Zustimmung"
|
1280 |
-
|
1281 |
-
#: views/privacy-tools/form-delete.php:1 views/privacy-tools/notice-admin-role.php:1
|
1282 |
-
msgid "Delete my user and data"
|
1283 |
-
msgstr "Mein Benutzerkonto und meine Daten löschen"
|
1284 |
-
|
1285 |
-
#: views/privacy-tools/form-delete.php:7
|
1286 |
-
msgid "Delete my data"
|
1287 |
-
msgstr "Meine Daten löschen"
|
1288 |
-
|
1289 |
-
#: views/privacy-tools/form-identify.php:8
|
1290 |
-
msgid "Back to Privacy Tools"
|
1291 |
-
msgstr "Zurück zu den Datenschutz-Tools"
|
1292 |
-
|
1293 |
-
#: views/privacy-tools/form-identify.php:14
|
1294 |
-
msgid "Identify yourself!"
|
1295 |
-
msgstr "Bitte identifizieren Sie sich!"
|
1296 |
-
|
1297 |
-
#: views/privacy-tools/form-identify.php:17 views/privacy-tools/form-identify.php:20
|
1298 |
-
msgid "Enter your email address"
|
1299 |
-
msgstr "Geben Sie ihren E-Mail-Adresse ein"
|
1300 |
-
|
1301 |
-
#: views/privacy-tools/form-identify.php:23
|
1302 |
-
msgid "Send email"
|
1303 |
-
msgstr "E-Mail senden"
|
1304 |
-
|
1305 |
-
#: views/privacy-tools/notice-admin-role.php:4
|
1306 |
-
msgctxt "(Admin)"
|
1307 |
-
msgid "Data deletion is disabled for administrative accounts."
|
1308 |
-
msgstr "Die Löschung der Daten ist für administrative Benutzerkonten deaktiviert."
|
1309 |
-
|
1310 |
-
#: views/privacy-tools/notices.php:3
|
1311 |
-
msgid ""
|
1312 |
-
"We will send you an email with the link to access your data. Please check your spam "
|
1313 |
-
"folder as well!"
|
1314 |
-
msgstr ""
|
1315 |
-
"Wir senden Ihnen eine E-Mail mit einem Link, um auf Ihre Daten zuzugreifen. Bitte "
|
1316 |
-
"überprüfen Sie auch Ihren Spam-Ordner!"
|
1317 |
-
|
1318 |
-
#: views/privacy-tools/notices.php:7
|
1319 |
-
msgid "The email you entered does not appear to be a valid email."
|
1320 |
-
msgstr "Die eingegebene E-Mail-Adresse scheint ungültig zu sein."
|
1321 |
-
|
1322 |
-
#: views/privacy-tools/notices.php:11
|
1323 |
-
msgid "Sorry - the link seems to have expired. Please try again!"
|
1324 |
-
msgstr ""
|
1325 |
-
"Entschuldigung - der Link scheint abgelaufen zu sein. Bitte versuchen Sie es erneut!"
|
1326 |
-
|
1327 |
-
#: views/privacy-tools/notices.php:23
|
1328 |
-
msgid "Your personal data has been removed!"
|
1329 |
-
msgstr "Ihre personenbezogenen Daten wurden gelöscht!"
|
1330 |
-
|
1331 |
-
#: views/privacy-tools/privacy-tools.php:5
|
1332 |
-
msgid "You are identified as"
|
1333 |
-
msgstr "Sie sind indentifiziert als"
|
1 |
+
# SOME DESCRIPTIVE TITLE.
|
2 |
+
# Copyright (C) YEAR Codelight
|
3 |
+
# This file is distributed under the same license as the The GDPR Framework package.
|
4 |
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
+
#
|
6 |
+
msgid ""
|
7 |
+
msgstr ""
|
8 |
+
"Project-Id-Version: The GDPR Framework 1.0\n"
|
9 |
+
"Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
|
10 |
+
"POT-Creation-Date: 2018-04-16 10:50+0000\n"
|
11 |
+
"PO-Revision-Date: 2018-05-18 07:39+0200\n"
|
12 |
+
"Last-Translator: \n"
|
13 |
+
"MIME-Version: 1.0\n"
|
14 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
+
"Content-Transfer-Encoding: 8bit\n"
|
16 |
+
"X-Generator: Poedit 2.0.5\n"
|
17 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
18 |
+
"Language: de_DE\n"
|
19 |
+
"Language-Team: Michael Hartl, michael@digitalfellow.eu\n"
|
20 |
+
|
21 |
+
#: gdpr-framework.php:26
|
22 |
+
msgctxt "(Admin)"
|
23 |
+
msgid "WordPress GDPR › Error"
|
24 |
+
msgstr "WordPress GDPR › Fehler"
|
25 |
+
|
26 |
+
#: gdpr-framework.php:35
|
27 |
+
msgctxt "(Admin)"
|
28 |
+
msgid "Invalid PHP version"
|
29 |
+
msgstr "Ungültige PHP-Version"
|
30 |
+
|
31 |
+
#: gdpr-framework.php:35
|
32 |
+
msgctxt "(Admin)"
|
33 |
+
msgid "You must be using PHP 5.6.33 or greater."
|
34 |
+
msgstr "Sie müssen PHP 5.6.33 oder höher verwenden."
|
35 |
+
|
36 |
+
#: gdpr-framework.php:42
|
37 |
+
msgctxt "(Admin)"
|
38 |
+
msgid "Invalid WordPress version"
|
39 |
+
msgstr "Ungültige WordPress-Version"
|
40 |
+
|
41 |
+
#: gdpr-framework.php:42
|
42 |
+
msgctxt "(Admin)"
|
43 |
+
msgid "You must be using WordPress 4.3.0 or greater."
|
44 |
+
msgstr "Sie müssen WordPress 4.3.0 oder höher verwenden."
|
45 |
+
|
46 |
+
#: gdpr-framework.php:52
|
47 |
+
msgctxt "(Admin)"
|
48 |
+
msgid ""
|
49 |
+
"You appear to be running a development version of GDPR. You must run <code>composer "
|
50 |
+
"install</code> from the plugin directory."
|
51 |
+
msgstr ""
|
52 |
+
"Es scheint, dass Sie eine Entwicklungsversion des GDPR Framework Plugins verwenden. "
|
53 |
+
"Sie müssen im Pluginverzeichnis <code>composer install</code> laufen lassen."
|
54 |
+
|
55 |
+
#: gdpr-framework.php:53
|
56 |
+
msgctxt "(Admin)"
|
57 |
+
msgid "Autoloader not found."
|
58 |
+
msgstr "Autoloader nicht gefunden."
|
59 |
+
|
60 |
+
#: gdpr-framework.php:115
|
61 |
+
msgctxt "(Admin)"
|
62 |
+
msgid "Anonymous"
|
63 |
+
msgstr "Anonym"
|
64 |
+
|
65 |
+
#: src/Admin/AdminTab.php:115
|
66 |
+
msgctxt "(Admin)"
|
67 |
+
msgid "Save"
|
68 |
+
msgstr "Speichern"
|
69 |
+
|
70 |
+
#: src/Admin/AdminTab.php:151
|
71 |
+
msgctxt "(Admin)"
|
72 |
+
msgid "Policy generated!"
|
73 |
+
msgstr "Richtlinie erstellt!"
|
74 |
+
|
75 |
+
#: src/Admin/AdminTabGeneral.php:11
|
76 |
+
msgctxt "(Admin)"
|
77 |
+
msgid "General"
|
78 |
+
msgstr "Allgemein"
|
79 |
+
|
80 |
+
#: src/Admin/AdminTabGeneral.php:38
|
81 |
+
msgctxt "(Admin)"
|
82 |
+
msgid "General Settings"
|
83 |
+
msgstr "Allgemeine Einstellungen"
|
84 |
+
|
85 |
+
#: src/Admin/AdminTabGeneral.php:43
|
86 |
+
msgctxt "(Admin)"
|
87 |
+
msgid "Enable Privacy Tools"
|
88 |
+
msgstr "Datenschutz-Tools aktivieren"
|
89 |
+
|
90 |
+
#: src/Admin/AdminTabGeneral.php:53
|
91 |
+
msgctxt "(Admin)"
|
92 |
+
msgid "Pages"
|
93 |
+
msgstr "Seiten"
|
94 |
+
|
95 |
+
#: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
|
96 |
+
msgctxt "(Admin)"
|
97 |
+
msgid "Privacy Tools Page"
|
98 |
+
msgstr "Seite der Datenschutz-Tools"
|
99 |
+
|
100 |
+
#: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
|
101 |
+
msgctxt "(Admin)"
|
102 |
+
msgid "Privacy Policy Page"
|
103 |
+
msgstr "Seite der Datenschutzerklärung"
|
104 |
+
|
105 |
+
#: src/Admin/AdminTabGeneral.php:72
|
106 |
+
msgctxt "(Admin)"
|
107 |
+
msgid "Terms & Conditions Page"
|
108 |
+
msgstr "Seite der Allgemeinen Geschäftsbedingungen"
|
109 |
+
|
110 |
+
#: src/Admin/AdminTabGeneral.php:82
|
111 |
+
msgctxt "(Admin)"
|
112 |
+
msgid "View & Export Data"
|
113 |
+
msgstr "Daten ansehen & exportieren"
|
114 |
+
|
115 |
+
#: src/Admin/AdminTabGeneral.php:87
|
116 |
+
msgctxt "(Admin)"
|
117 |
+
msgid "Export action"
|
118 |
+
msgstr "Export-Aktion"
|
119 |
+
|
120 |
+
#: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
|
121 |
+
msgctxt "(Admin)"
|
122 |
+
msgid "Email to notify"
|
123 |
+
msgstr "E-Mail für die Benachrichtigung"
|
124 |
+
|
125 |
+
#: src/Admin/AdminTabGeneral.php:105
|
126 |
+
msgctxt "(Admin)"
|
127 |
+
msgid "Delete & Anonymize Data"
|
128 |
+
msgstr "Daten löschen & anonymisieren"
|
129 |
+
|
130 |
+
#: src/Admin/AdminTabGeneral.php:110
|
131 |
+
msgctxt "(Admin)"
|
132 |
+
msgid "Delete action"
|
133 |
+
msgstr "Lösch-Aktion"
|
134 |
+
|
135 |
+
#: src/Admin/AdminTabGeneral.php:117
|
136 |
+
msgctxt "(Admin)"
|
137 |
+
msgid "Delete or reassign content?"
|
138 |
+
msgstr "Inhalt löschen oder neu zuordnen?"
|
139 |
+
|
140 |
+
#: src/Admin/AdminTabGeneral.php:125
|
141 |
+
msgctxt "(Admin)"
|
142 |
+
msgid "Reassign content to"
|
143 |
+
msgstr "Inhalt zuordnen an"
|
144 |
+
|
145 |
+
#: src/Admin/AdminTabGeneral.php:145
|
146 |
+
msgctxt "(Admin)"
|
147 |
+
msgid "Styling"
|
148 |
+
msgstr "Gestaltung"
|
149 |
+
|
150 |
+
#: src/Admin/AdminTabGeneral.php:150
|
151 |
+
msgctxt "(Admin)"
|
152 |
+
msgid "Enable basic styling on Privacy Tools page"
|
153 |
+
msgstr "Grundlegende Gestaltung auf der Seite der Datenschutz-Tools aktivieren"
|
154 |
+
|
155 |
+
#: src/Admin/AdminTabGeneral.php:162
|
156 |
+
msgctxt "(Admin)"
|
157 |
+
msgid "Compatibility"
|
158 |
+
msgstr "Kompatibilität"
|
159 |
+
|
160 |
+
#: src/Admin/AdminTabGeneral.php:167
|
161 |
+
msgctxt "(Admin)"
|
162 |
+
msgid "Enable automatic theme compatibility"
|
163 |
+
msgstr "Aktivieren Sie die automatische Theme-Kompatibilität"
|
164 |
+
|
165 |
+
#: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
|
166 |
+
#: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
|
167 |
+
#: views/installer/steps/configuration-settings.php:62
|
168 |
+
msgctxt "(Admin)"
|
169 |
+
msgid "— Select —"
|
170 |
+
msgstr "— Auswählen —"
|
171 |
+
|
172 |
+
#: src/Admin/WordpressAdmin.php:65
|
173 |
+
msgctxt "(Admin)"
|
174 |
+
msgid "Privacy & GDPR Settings"
|
175 |
+
msgstr "Datenschutz & DSGVO Einstellungen"
|
176 |
+
|
177 |
+
#: src/Admin/WordpressAdmin.php:66
|
178 |
+
msgctxt "(Admin)"
|
179 |
+
msgid "Privacy"
|
180 |
+
msgstr "Datenschutz"
|
181 |
+
|
182 |
+
#: src/Components/Consent/AdminTabConsent.php:30
|
183 |
+
#: src/Components/Consent/AdminTabConsent.php:49
|
184 |
+
msgctxt "(Admin)"
|
185 |
+
msgid "Consent"
|
186 |
+
msgstr "Zustimmung"
|
187 |
+
|
188 |
+
#: src/Components/Consent/AdminTabConsent.php:157
|
189 |
+
msgctxt "(Admin)"
|
190 |
+
msgid "Consent slug is a required field!"
|
191 |
+
msgstr "Der Pfad zur Zustimming ist ein Pflichtfeld!"
|
192 |
+
|
193 |
+
#: src/Components/Consent/AdminTabConsent.php:162
|
194 |
+
msgctxt "(Admin)"
|
195 |
+
msgid ""
|
196 |
+
"You may only use alphanumeric characters, dash and underscore in the consent slug "
|
197 |
+
"field."
|
198 |
+
msgstr ""
|
199 |
+
"Sie dürfen nur alphanumerische Zeichen, Bindestriche und Unterstriche im Feld für den "
|
200 |
+
"Zustimmungs-Pfad verwenden."
|
201 |
+
|
202 |
+
#: src/Components/Consent/AdminTabConsent.php:167
|
203 |
+
msgctxt "(Admin)"
|
204 |
+
msgid "Consent title is a required field!"
|
205 |
+
msgstr "Titel der Zustimmungsseite wird benötigt!"
|
206 |
+
|
207 |
+
#: src/Components/Consent/ConsentManager.php:46
|
208 |
+
#: views/modules/contact-form-7/content-privacy.php:2
|
209 |
+
#: views/modules/wordpress-comments/terms-checkbox.php:14
|
210 |
+
#: views/modules/wordpress-user/registration-terms-checkbox.php:15
|
211 |
+
#, php-format
|
212 |
+
msgid "I accept the %sPrivacy Policy%s"
|
213 |
+
msgstr "I stimme der %sDatenschutzerklärung%s zu"
|
214 |
+
|
215 |
+
#: src/Components/Consent/ConsentManager.php:50
|
216 |
+
#: src/Components/Consent/ConsentManager.php:69
|
217 |
+
msgctxt "(Admin)"
|
218 |
+
msgid ""
|
219 |
+
"This consent is not visible by default. If someone wishes to withdraw it, they should "
|
220 |
+
"simply request to delete all their data."
|
221 |
+
msgstr ""
|
222 |
+
"Diese Zustimmung ist per Voreinstellung nicht sichtbar. Wenn jemand sie widerrufen "
|
223 |
+
"möchte, sollte er einfach die Löschung aller seiner Daten verlangen."
|
224 |
+
|
225 |
+
#: src/Components/Consent/ConsentManager.php:65
|
226 |
+
#, php-format
|
227 |
+
msgid "I accept the %sTerms & Conditions%s"
|
228 |
+
msgstr "Ich akzeptiere die %sAllgemeinen Geschäftsbedingungen%s"
|
229 |
+
|
230 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
|
231 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
|
232 |
+
#: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
|
233 |
+
msgctxt "(Admin)"
|
234 |
+
msgid "Privacy Policy"
|
235 |
+
msgstr "Datenschutzerklärung"
|
236 |
+
|
237 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
|
238 |
+
msgctxt "(Admin)"
|
239 |
+
msgid "Company information"
|
240 |
+
msgstr "Firmen-Informationen"
|
241 |
+
|
242 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
|
243 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
|
244 |
+
msgctxt "(Admin)"
|
245 |
+
msgid "Company Name"
|
246 |
+
msgstr "Name der Firma"
|
247 |
+
|
248 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
|
249 |
+
msgctxt "(Admin)"
|
250 |
+
msgid "Company Email"
|
251 |
+
msgstr "E-Mail-Adresse der Firma"
|
252 |
+
|
253 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
|
254 |
+
msgctxt "(Admin)"
|
255 |
+
msgid "Company Location"
|
256 |
+
msgstr "Standort der Firma"
|
257 |
+
|
258 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
|
259 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
|
260 |
+
msgctxt "(Admin)"
|
261 |
+
msgid "Representative Contact Name"
|
262 |
+
msgstr "Name des Ansprechpartners"
|
263 |
+
|
264 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
|
265 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
|
266 |
+
msgctxt "(Admin)"
|
267 |
+
msgid "Representative Contact Email"
|
268 |
+
msgstr "E-Mail-Adresse des Ansprechpartners"
|
269 |
+
|
270 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
|
271 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
|
272 |
+
msgctxt "(Admin)"
|
273 |
+
msgid "Representative Contact Phone"
|
274 |
+
msgstr "Telefonnummer des Ansprechpartners"
|
275 |
+
|
276 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
|
277 |
+
msgctxt "(Admin)"
|
278 |
+
msgid "Data Protection Authority"
|
279 |
+
msgstr "Datenschutzbehörde"
|
280 |
+
|
281 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
|
282 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
|
283 |
+
msgctxt "(Admin)"
|
284 |
+
msgid "Data Protection Authority Website"
|
285 |
+
msgstr "Website der Datenschutzbehörde"
|
286 |
+
|
287 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
|
288 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
|
289 |
+
msgctxt "(Admin)"
|
290 |
+
msgid "Data Protection Authority Email"
|
291 |
+
msgstr "E-Mail-Adresse der Datenschutzbehörde"
|
292 |
+
|
293 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
|
294 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
|
295 |
+
msgctxt "(Admin)"
|
296 |
+
msgid "Data Protection Authority Phone"
|
297 |
+
msgstr "Telefonnummer der Datenschutzbehörde"
|
298 |
+
|
299 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
|
300 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
|
301 |
+
msgctxt "(Admin)"
|
302 |
+
msgid "Data Protection Officer"
|
303 |
+
msgstr "Datenschutzbeauftragter"
|
304 |
+
|
305 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
|
306 |
+
msgctxt "(Admin)"
|
307 |
+
msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
|
308 |
+
msgstr "Wissensdatenbank: Muss ich einen Datenschutzbeauftragten ernennen?"
|
309 |
+
|
310 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
|
311 |
+
msgctxt "(Admin)"
|
312 |
+
msgid "Data Protection Officer Name"
|
313 |
+
msgstr "Name des Datenschutzbeauftragten"
|
314 |
+
|
315 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
|
316 |
+
msgctxt "(Admin)"
|
317 |
+
msgid "Data Protection Officer Email"
|
318 |
+
msgstr "E-Mail-Adresse des Datenschutzbeauftragten"
|
319 |
+
|
320 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
|
321 |
+
msgctxt "(Admin)"
|
322 |
+
msgid "Contact Email"
|
323 |
+
msgstr "Kontakt-E-Mail-Adresse"
|
324 |
+
|
325 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
|
326 |
+
msgctxt "(Admin)"
|
327 |
+
msgid "Representative Contact"
|
328 |
+
msgstr "Vertretungsberechtigter Kontakt"
|
329 |
+
|
330 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
|
331 |
+
msgctxt "(Admin)"
|
332 |
+
msgid "Knowledge base: Do I need to appoint an EU-based representative?"
|
333 |
+
msgstr ""
|
334 |
+
"Wissensdatenbank: Muss ich einen Ansprechpartner bennen, der innerhalb der EU sitzt?"
|
335 |
+
|
336 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
|
337 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
|
338 |
+
msgctxt "(Admin)"
|
339 |
+
msgid "DPO Name"
|
340 |
+
msgstr "Behördliche Datenschutzbeauftragte"
|
341 |
+
|
342 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
|
343 |
+
msgctxt "(Admin)"
|
344 |
+
msgid "Save & Generate Policy"
|
345 |
+
msgstr "Speichern & Richtlinie erstellen"
|
346 |
+
|
347 |
+
#: src/Components/PrivacyPolicy/PrivacyPolicy.php:82 src/Installer/Installer.php:271
|
348 |
+
#: src/Installer/Steps/PolicySettings.php:199 views/themes/storefront/footer.php:3
|
349 |
+
#: views/themes/twentyseventeen/footer.php:3 views/themes/twentysixteen/footer.php:4
|
350 |
+
msgid "Privacy Policy"
|
351 |
+
msgstr "Datenschutzerklärung"
|
352 |
+
|
353 |
+
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
|
354 |
+
msgid "This page is currently disabled."
|
355 |
+
msgstr "Diese Seite ist derzeit deaktiviert."
|
356 |
+
|
357 |
+
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
|
358 |
+
#: src/Installer/Installer.php:279 src/Installer/Steps/ConfigurationPages.php:55
|
359 |
+
#: views/themes/storefront/footer.php:7 views/themes/twentyseventeen/footer.php:7
|
360 |
+
#: views/themes/twentysixteen/footer.php:9
|
361 |
+
msgid "Privacy Tools"
|
362 |
+
msgstr "Datenschutz-Tools"
|
363 |
+
|
364 |
+
#: src/Components/Support/AdminTabSupport.php:13
|
365 |
+
#: src/Components/Support/AdminTabSupport.php:20
|
366 |
+
msgctxt "(Admin)"
|
367 |
+
msgid "Support"
|
368 |
+
msgstr "Support"
|
369 |
+
|
370 |
+
#: src/Components/WordpressComments/WordpressComments.php:90
|
371 |
+
#, php-format
|
372 |
+
msgid "%sERROR:%s You need to accept the terms and conditions to post a comment."
|
373 |
+
msgstr ""
|
374 |
+
"%sFEHLER:%s Sie müssen die Allgemeinen Geschäftsbedingungen akzeptieren, um einen "
|
375 |
+
"Kommentar abgeben zu können."
|
376 |
+
|
377 |
+
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
|
378 |
+
#: views/privacy-tools/notices.php:19
|
379 |
+
msgid "We have received your request and will reply within 30 days."
|
380 |
+
msgstr ""
|
381 |
+
"Wir haben Ihre Anfrage erhalten und werden Ihnen innerhalb von 30 Tagen antworten."
|
382 |
+
|
383 |
+
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
|
384 |
+
#: views/privacy-tools/notices.php:15
|
385 |
+
msgid "Consent withdrawn."
|
386 |
+
msgstr "Zustimmung zurückgezogen."
|
387 |
+
|
388 |
+
#: src/Components/WordpressUser/RegistrationForm.php:42
|
389 |
+
msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
|
390 |
+
msgstr ""
|
391 |
+
"<strong>FEHLER</strong>: Sie müssen die Allgemeinen Geschäftsbedingungen akzeptieren."
|
392 |
+
|
393 |
+
#: src/Components/WordpressUser/WordpressUser.php:63
|
394 |
+
#: src/Components/WordpressUser/WordpressUser.php:64
|
395 |
+
#: views/modules/wordpress-user/dashboard/data-page/header.php:2
|
396 |
+
msgctxt "(Admin)"
|
397 |
+
msgid "Privacy Tools"
|
398 |
+
msgstr "Datenschutz-Tools"
|
399 |
+
|
400 |
+
#: src/DataSubject/AdminTabDataSubject.php:27 src/DataSubject/AdminTabDataSubject.php:41
|
401 |
+
msgctxt "(Admin)"
|
402 |
+
msgid "Data Subjects"
|
403 |
+
msgstr "Betroffene Personen"
|
404 |
+
|
405 |
+
#: src/DataSubject/DataRepository.php:143
|
406 |
+
msgid "Data exported"
|
407 |
+
msgstr "Daten exportiert"
|
408 |
+
|
409 |
+
#: src/DataSubject/DataRepository.php:158
|
410 |
+
msgid "Data export request"
|
411 |
+
msgstr "Anfrage eines Daten-Exports"
|
412 |
+
|
413 |
+
#: src/DataSubject/DataRepository.php:171
|
414 |
+
msgid "Data removed"
|
415 |
+
msgstr "Daten gelöscht"
|
416 |
+
|
417 |
+
#: src/DataSubject/DataRepository.php:186
|
418 |
+
msgid "Data removal request"
|
419 |
+
msgstr "Anfrage einer Datenlöschung"
|
420 |
+
|
421 |
+
#: src/DataSubject/DataSubjectIdentificator.php:65
|
422 |
+
#: src/DataSubject/DataSubjectIdentificator.php:82
|
423 |
+
msgid "Your personal data on"
|
424 |
+
msgstr "Ihre personenbezogenen Daten auf"
|
425 |
+
|
426 |
+
#: src/Helpers.php:27
|
427 |
+
msgctxt "(Admin)"
|
428 |
+
msgid "Austria"
|
429 |
+
msgstr "Österreich"
|
430 |
+
|
431 |
+
#: src/Helpers.php:28
|
432 |
+
msgctxt "(Admin)"
|
433 |
+
msgid "Belgium"
|
434 |
+
msgstr "Belgien"
|
435 |
+
|
436 |
+
#: src/Helpers.php:29
|
437 |
+
msgctxt "(Admin)"
|
438 |
+
msgid "Bulgaria"
|
439 |
+
msgstr "Bulgarien"
|
440 |
+
|
441 |
+
#: src/Helpers.php:30
|
442 |
+
msgctxt "(Admin)"
|
443 |
+
msgid "Croatia"
|
444 |
+
msgstr "Kroatien"
|
445 |
+
|
446 |
+
#: src/Helpers.php:31
|
447 |
+
msgctxt "(Admin)"
|
448 |
+
msgid "Cyprus"
|
449 |
+
msgstr "Zypern"
|
450 |
+
|
451 |
+
#: src/Helpers.php:32
|
452 |
+
msgctxt "(Admin)"
|
453 |
+
msgid "Czech Republic"
|
454 |
+
msgstr "Tschechische Republik"
|
455 |
+
|
456 |
+
#: src/Helpers.php:33
|
457 |
+
msgctxt "(Admin)"
|
458 |
+
msgid "Denmark"
|
459 |
+
msgstr "Dänemark"
|
460 |
+
|
461 |
+
#: src/Helpers.php:34
|
462 |
+
msgctxt "(Admin)"
|
463 |
+
msgid "Estonia"
|
464 |
+
msgstr "Estland"
|
465 |
+
|
466 |
+
#: src/Helpers.php:35
|
467 |
+
msgctxt "(Admin)"
|
468 |
+
msgid "Finland"
|
469 |
+
msgstr "Finnland"
|
470 |
+
|
471 |
+
#: src/Helpers.php:36
|
472 |
+
msgctxt "(Admin)"
|
473 |
+
msgid "France"
|
474 |
+
msgstr "Frankreich"
|
475 |
+
|
476 |
+
#: src/Helpers.php:37
|
477 |
+
msgctxt "(Admin)"
|
478 |
+
msgid "Germany"
|
479 |
+
msgstr "Deutschland"
|
480 |
+
|
481 |
+
#: src/Helpers.php:38
|
482 |
+
msgctxt "(Admin)"
|
483 |
+
msgid "Greece"
|
484 |
+
msgstr "Griechenland"
|
485 |
+
|
486 |
+
#: src/Helpers.php:39
|
487 |
+
msgctxt "(Admin)"
|
488 |
+
msgid "Hungary"
|
489 |
+
msgstr "Ungarn"
|
490 |
+
|
491 |
+
#: src/Helpers.php:40
|
492 |
+
msgctxt "(Admin)"
|
493 |
+
msgid "Ireland"
|
494 |
+
msgstr "Irland"
|
495 |
+
|
496 |
+
#: src/Helpers.php:41
|
497 |
+
msgctxt "(Admin)"
|
498 |
+
msgid "Italy"
|
499 |
+
msgstr "Italien"
|
500 |
+
|
501 |
+
#: src/Helpers.php:42
|
502 |
+
msgctxt "(Admin)"
|
503 |
+
msgid "Latvia"
|
504 |
+
msgstr "Lettland"
|
505 |
+
|
506 |
+
#: src/Helpers.php:43
|
507 |
+
msgctxt "(Admin)"
|
508 |
+
msgid "Lithuania"
|
509 |
+
msgstr "Litauen"
|
510 |
+
|
511 |
+
#: src/Helpers.php:44
|
512 |
+
msgctxt "(Admin)"
|
513 |
+
msgid "Luxembourg"
|
514 |
+
msgstr "Luxemburg"
|
515 |
+
|
516 |
+
#: src/Helpers.php:45
|
517 |
+
msgctxt "(Admin)"
|
518 |
+
msgid "Malta"
|
519 |
+
msgstr "Malta"
|
520 |
+
|
521 |
+
#: src/Helpers.php:46
|
522 |
+
msgctxt "(Admin)"
|
523 |
+
msgid "Netherlands"
|
524 |
+
msgstr "Niederlande"
|
525 |
+
|
526 |
+
#: src/Helpers.php:47
|
527 |
+
msgctxt "(Admin)"
|
528 |
+
msgid "Poland"
|
529 |
+
msgstr "Polen"
|
530 |
+
|
531 |
+
#: src/Helpers.php:48
|
532 |
+
msgctxt "(Admin)"
|
533 |
+
msgid "Portugal"
|
534 |
+
msgstr "Portugal"
|
535 |
+
|
536 |
+
#: src/Helpers.php:49
|
537 |
+
msgctxt "(Admin)"
|
538 |
+
msgid "Romania"
|
539 |
+
msgstr "Rumänien"
|
540 |
+
|
541 |
+
#: src/Helpers.php:50
|
542 |
+
msgctxt "(Admin)"
|
543 |
+
msgid "Slovakia"
|
544 |
+
msgstr "Slowakei"
|
545 |
+
|
546 |
+
#: src/Helpers.php:51
|
547 |
+
msgctxt "(Admin)"
|
548 |
+
msgid "Slovenia"
|
549 |
+
msgstr "Slowenien"
|
550 |
+
|
551 |
+
#: src/Helpers.php:52
|
552 |
+
msgctxt "(Admin)"
|
553 |
+
msgid "Spain"
|
554 |
+
msgstr "Spanien"
|
555 |
+
|
556 |
+
#: src/Helpers.php:53
|
557 |
+
msgctxt "(Admin)"
|
558 |
+
msgid "Sweden"
|
559 |
+
msgstr "Schweden"
|
560 |
+
|
561 |
+
#: src/Helpers.php:54
|
562 |
+
msgctxt "(Admin)"
|
563 |
+
msgid "United Kingdom"
|
564 |
+
msgstr "Großbritannien"
|
565 |
+
|
566 |
+
#: src/Helpers.php:69
|
567 |
+
msgctxt "(Admin)"
|
568 |
+
msgid "Iceland"
|
569 |
+
msgstr "Island"
|
570 |
+
|
571 |
+
#: src/Helpers.php:70
|
572 |
+
msgctxt "(Admin)"
|
573 |
+
msgid "Norway"
|
574 |
+
msgstr "Norwegen"
|
575 |
+
|
576 |
+
#: src/Helpers.php:71
|
577 |
+
msgctxt "(Admin)"
|
578 |
+
msgid "Liechtenstein"
|
579 |
+
msgstr "Liechtenstein"
|
580 |
+
|
581 |
+
#: src/Helpers.php:72
|
582 |
+
msgctxt "(Admin)"
|
583 |
+
msgid "Switzerland"
|
584 |
+
msgstr "Schweiz"
|
585 |
+
|
586 |
+
#: src/Helpers.php:73
|
587 |
+
msgctxt "(Admin)"
|
588 |
+
msgid "United States"
|
589 |
+
msgstr "USA"
|
590 |
+
|
591 |
+
#: src/Helpers.php:74
|
592 |
+
msgctxt "(Admin)"
|
593 |
+
msgid "Rest of the world"
|
594 |
+
msgstr "Übrige Welt"
|
595 |
+
|
596 |
+
#: src/Helpers.php:145
|
597 |
+
msgid "An error has occurred. Please contact the site administrator."
|
598 |
+
msgstr ""
|
599 |
+
"Es ist ein Fehler aufgetreten. Bitte kontaktieren Sie den Webseiten-Administrator."
|
600 |
+
|
601 |
+
#: src/Installer/Installer.php:135
|
602 |
+
msgctxt "(Admin)"
|
603 |
+
msgid "Setup Wizard"
|
604 |
+
msgstr "Einrichtungsassistent"
|
605 |
+
|
606 |
+
#: src/Installer/Steps/ConfigurationPages.php:23
|
607 |
+
#: src/Installer/Steps/PolicySettings.php:23 src/Installer/Steps/PolicySettings.php:48
|
608 |
+
msgctxt "(Admin)"
|
609 |
+
msgid "— Create a new page —"
|
610 |
+
msgstr "— Neue Seite erstellen —"
|
611 |
+
|
612 |
+
#: src/Installer/Steps/PolicySettings.php:38
|
613 |
+
msgctxt "(Admin)"
|
614 |
+
msgid "We have automatically selected your WooCommerce Terms & Conditions page."
|
615 |
+
msgstr ""
|
616 |
+
"Wir haben automatisch Ihre Seite mit den Allgemeinen Geschäftsbedingungen von "
|
617 |
+
"WooCommerce ausgewählt."
|
618 |
+
|
619 |
+
#: src/Modules/ContactForm7/ContactForm7.php:35
|
620 |
+
msgctxt "(Admin)"
|
621 |
+
msgid "gdpr terms txt"
|
622 |
+
msgstr "DSGVO Bestimmungen txt"
|
623 |
+
|
624 |
+
#: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
|
625 |
+
#, php-format
|
626 |
+
msgid "Nonce error for action \"%s\". Please go back and try again!"
|
627 |
+
msgstr ""
|
628 |
+
"Ein Fehler für die Aktion %s ist aufgetreten. Bitte gehen Sie zurück und versuchen Sie "
|
629 |
+
"es erneut!"
|
630 |
+
|
631 |
+
#: src/Router.php:149
|
632 |
+
msgctxt "(Admin)"
|
633 |
+
msgid "You do not have the required permissions to perform this action!"
|
634 |
+
msgstr ""
|
635 |
+
"Sie verfügen nicht über die erforderlichen Berechtigungen zum Ausführen dieser Aktion!"
|
636 |
+
|
637 |
+
#: views/admin/consent.php:3
|
638 |
+
msgctxt "(Admin)"
|
639 |
+
msgid "Default consent types"
|
640 |
+
msgstr "Voreingestellte Arten der Zustimmung"
|
641 |
+
|
642 |
+
#: views/admin/consent.php:4
|
643 |
+
msgctxt "(Admin)"
|
644 |
+
msgid ""
|
645 |
+
"These are the consent types that have been automatically registered by the framework "
|
646 |
+
"or a plugin."
|
647 |
+
msgstr ""
|
648 |
+
"Dies sind die Zustimmungsarten, die automatisch durch das GDPR Framework oder ein "
|
649 |
+
"anderes Plugin registriert wurden."
|
650 |
+
|
651 |
+
#: views/admin/consent.php:7 views/admin/consent.php:52
|
652 |
+
msgctxt "(Admin)"
|
653 |
+
msgid "Slug"
|
654 |
+
msgstr "Pfad"
|
655 |
+
|
656 |
+
#: views/admin/consent.php:8 views/admin/consent.php:38 views/admin/consent.php:60
|
657 |
+
msgctxt "(Admin)"
|
658 |
+
msgid "Title"
|
659 |
+
msgstr "Titel"
|
660 |
+
|
661 |
+
#: views/admin/consent.php:9 views/admin/consent.php:41 views/admin/consent.php:63
|
662 |
+
msgctxt "(Admin)"
|
663 |
+
msgid "Description"
|
664 |
+
msgstr "Beschreibung"
|
665 |
+
|
666 |
+
#: views/admin/consent.php:10
|
667 |
+
msgctxt "(Admin)"
|
668 |
+
msgid "Visibility"
|
669 |
+
msgstr "Sichtbarkeit"
|
670 |
+
|
671 |
+
#: views/admin/consent.php:18
|
672 |
+
msgctxt "(Admin)"
|
673 |
+
msgid "Visible"
|
674 |
+
msgstr "Sichtbar"
|
675 |
+
|
676 |
+
#: views/admin/consent.php:20
|
677 |
+
msgctxt "(Admin)"
|
678 |
+
msgid "Hidden"
|
679 |
+
msgstr "Ausgeblendet"
|
680 |
+
|
681 |
+
#: views/admin/consent.php:29
|
682 |
+
msgctxt "(Admin)"
|
683 |
+
msgid "Custom consent types"
|
684 |
+
msgstr "Benutzerdefinierte Arten der Zustimmung"
|
685 |
+
|
686 |
+
#: views/admin/consent.php:30
|
687 |
+
msgctxt "(Admin)"
|
688 |
+
msgid ""
|
689 |
+
"Here you can add custom consent types to track. They will not be used anywhere by "
|
690 |
+
"default - you will need to build an integration for each of them."
|
691 |
+
msgstr ""
|
692 |
+
"Hier können Sie benutzerdefinierte Arten der Zustimmung hinzufügen, um sie zu "
|
693 |
+
"verfolgen. Sie werden nigends per Voreinstellung verwendet. Sie müssen dafür jeweils "
|
694 |
+
"eine Integration erstellen."
|
695 |
+
|
696 |
+
#: views/admin/consent.php:35
|
697 |
+
msgctxt "(Admin)"
|
698 |
+
msgid "Machine-readable slug"
|
699 |
+
msgstr "Maschinenlesbarer Pfad"
|
700 |
+
|
701 |
+
#: views/admin/consent.php:44 views/admin/consent.php:68
|
702 |
+
msgctxt "(Admin)"
|
703 |
+
msgid "Visible?"
|
704 |
+
msgstr "Sichtbar?"
|
705 |
+
|
706 |
+
#: views/admin/consent.php:72
|
707 |
+
msgctxt "(Admin)"
|
708 |
+
msgid "Remove"
|
709 |
+
msgstr "Entfernen"
|
710 |
+
|
711 |
+
#: views/admin/consent.php:93
|
712 |
+
msgctxt "(Admin)"
|
713 |
+
msgid "Additional info"
|
714 |
+
msgstr "Zusätzliche Informationen"
|
715 |
+
|
716 |
+
#: views/admin/consent.php:95
|
717 |
+
msgctxt "(Admin)"
|
718 |
+
msgid "This text will be displayed to your data subjects on the Privacy Tools page."
|
719 |
+
msgstr ""
|
720 |
+
"Dieser Text wird Ihren betroffenen Personen auf der Seite der Datenschutz-Tools "
|
721 |
+
"angezeigt."
|
722 |
+
|
723 |
+
#: views/admin/data-subjects/search-form.php:2
|
724 |
+
msgctxt "(Admin)"
|
725 |
+
msgid ""
|
726 |
+
"On this page, you can find which data subjects personal data you are storing and "
|
727 |
+
"download, export or delete it."
|
728 |
+
msgstr ""
|
729 |
+
"Auf dieser Seite können Sie nachlesen, welche personenbezogenen Daten Sie von "
|
730 |
+
"betroffenen Personen speichern und diese herunterladen, exportieren oder löschen."
|
731 |
+
|
732 |
+
#: views/admin/data-subjects/search-form.php:10
|
733 |
+
msgctxt "(Admin)"
|
734 |
+
msgid "Find data subject by email"
|
735 |
+
msgstr "Betroffene Personen über die E-Mail-Adresse finden"
|
736 |
+
|
737 |
+
#: views/admin/data-subjects/search-form.php:11
|
738 |
+
msgctxt "(Admin)"
|
739 |
+
msgid "Email address"
|
740 |
+
msgstr "E-Mail-Adresse"
|
741 |
+
|
742 |
+
#: views/admin/data-subjects/search-form.php:16
|
743 |
+
msgctxt "(Admin)"
|
744 |
+
msgid "Search"
|
745 |
+
msgstr "Suchen"
|
746 |
+
|
747 |
+
#: views/admin/data-subjects/search-results.php:7
|
748 |
+
msgctxt "(Admin)"
|
749 |
+
msgid "Username"
|
750 |
+
msgstr "Benutzername"
|
751 |
+
|
752 |
+
#: views/admin/data-subjects/search-results.php:12
|
753 |
+
msgctxt "(Admin)"
|
754 |
+
msgid "is not a registered user."
|
755 |
+
msgstr "ist nicht registriert."
|
756 |
+
|
757 |
+
#: views/admin/data-subjects/search-results.php:16
|
758 |
+
msgctxt "(Admin)"
|
759 |
+
msgid "Download data (html)"
|
760 |
+
msgstr "Download der Daten (html)"
|
761 |
+
|
762 |
+
#: views/admin/data-subjects/search-results.php:17
|
763 |
+
msgctxt "(Admin)"
|
764 |
+
msgid "Export data (json)"
|
765 |
+
msgstr "Datenexport (json)"
|
766 |
+
|
767 |
+
#: views/admin/data-subjects/search-results.php:21
|
768 |
+
msgctxt "(Admin)"
|
769 |
+
msgid "This user has admin capabilities. Deleting data via this interface is disabled."
|
770 |
+
msgstr ""
|
771 |
+
"Dieser Benutzer hat die Berechtigungsstufe eines Admins. Das Löschen der Daten über "
|
772 |
+
"diese Bedienoberfläche ist daher deaktiviert."
|
773 |
+
|
774 |
+
#: views/admin/data-subjects/search-results.php:24
|
775 |
+
msgctxt "(Admin)"
|
776 |
+
msgid "Anonymize data"
|
777 |
+
msgstr "Daten anonymisieren"
|
778 |
+
|
779 |
+
#: views/admin/data-subjects/search-results.php:25
|
780 |
+
msgctxt "(Admin)"
|
781 |
+
msgid "Delete data"
|
782 |
+
msgstr "Daten löschen"
|
783 |
+
|
784 |
+
#: views/admin/data-subjects/search-results.php:29
|
785 |
+
msgctxt "(Admin)"
|
786 |
+
msgid "No data found!"
|
787 |
+
msgstr "Keine Daten gefunden!"
|
788 |
+
|
789 |
+
#: views/admin/general/delete-action-email.php:5
|
790 |
+
#: views/admin/general/export-action-email.php:5
|
791 |
+
#: views/installer/steps/configuration-settings.php:29
|
792 |
+
#: views/installer/steps/configuration-settings.php:79
|
793 |
+
msgid "Email address"
|
794 |
+
msgstr "E-Mail-Adresse"
|
795 |
+
|
796 |
+
#: views/admin/general/delete-action-reassign.php:3
|
797 |
+
#: views/installer/steps/configuration-settings.php:50
|
798 |
+
msgctxt "(Admin)"
|
799 |
+
msgid "Delete content"
|
800 |
+
msgstr "Inhalt(e) löschen"
|
801 |
+
|
802 |
+
#: views/admin/general/delete-action-reassign.php:6
|
803 |
+
#: views/installer/steps/configuration-settings.php:53
|
804 |
+
msgctxt "(Admin)"
|
805 |
+
msgid "Reassign content to a user"
|
806 |
+
msgstr "Inhalt(e) einem anderen Benutzer zuweisen"
|
807 |
+
|
808 |
+
#: views/admin/general/delete-action-reassign.php:10
|
809 |
+
msgctxt "(Admin)"
|
810 |
+
msgid ""
|
811 |
+
"If the user has submitted any content on your site, should it be deleted or reassigned "
|
812 |
+
"to another user?"
|
813 |
+
msgstr ""
|
814 |
+
"Falls der Benutzer Inhalte an Ihre Website übermittelt hat, sollen diese gelöscht oder "
|
815 |
+
"einem anderen Benutzer zugewiesen werden?"
|
816 |
+
|
817 |
+
#: views/admin/general/description-data-page.php:2
|
818 |
+
msgctxt "(Admin)"
|
819 |
+
msgid ""
|
820 |
+
"Select the page where users can go to control their data. This page must contain the "
|
821 |
+
"[gdpr_privacy_tools] shortcode."
|
822 |
+
msgstr ""
|
823 |
+
"Wählen Sie die Seite aus, auf der Benutzer ihre Daten überprüfen können. Diese Seite "
|
824 |
+
"muss den folgenden Shortcode enthalten: [gdpr_privacy_tools]"
|
825 |
+
|
826 |
+
#: views/admin/general/enable.php:9
|
827 |
+
msgctxt "(Admin)"
|
828 |
+
msgid "Enable the view, export and forget functionality for users and visitors"
|
829 |
+
msgstr ""
|
830 |
+
"Aktivieren Sie die Ansichts-, Export- und Vergessens-Funktionalität für Benutzer und "
|
831 |
+
"Besucher"
|
832 |
+
|
833 |
+
#: views/admin/general/enable.php:12
|
834 |
+
msgctxt "(Admin)"
|
835 |
+
msgid ""
|
836 |
+
"Enable the Privacy Tools page on front-end and dashboard. This allows visitors to "
|
837 |
+
"request viewing and deleting their personal data and withdraw consents."
|
838 |
+
msgstr ""
|
839 |
+
"Aktivieren Sie die Seite der Datenschutz-Tools im Frontend und Dashboard. Dies "
|
840 |
+
"ermöglicht es den Besuchern, Einsicht in ihre persönlichen Daten zu verlangen, sie zu "
|
841 |
+
"löschen und ihre Zustimmung zur Speicherung zu widerrufen."
|
842 |
+
|
843 |
+
#: views/admin/general/theme-compatibility.php:9
|
844 |
+
#: views/installer/steps/integrations.php:21
|
845 |
+
msgctxt "(Admin)"
|
846 |
+
msgid "Automatically add Privacy Policy and Privacy Tools links to your site footer."
|
847 |
+
msgstr ""
|
848 |
+
"Automatisch die Links zur Datenschutzerklärung und zu den Datenschutz-Tools im Footer "
|
849 |
+
"Ihrer Website hinzufügen."
|
850 |
+
|
851 |
+
#: views/admin/notices/header.php:4 views/admin/settings-page.php:3
|
852 |
+
#: views/installer/header.php:23
|
853 |
+
msgctxt "(Admin)"
|
854 |
+
msgid "The GDPR Framework"
|
855 |
+
msgstr "The GDPR Framework"
|
856 |
+
|
857 |
+
#: views/admin/notices/helper-autoinstall.php:2
|
858 |
+
msgctxt "(Admin)"
|
859 |
+
msgid ""
|
860 |
+
"A Privacy Policy page has been created, but it is empty. You can generate a policy "
|
861 |
+
"template on this page."
|
862 |
+
msgstr ""
|
863 |
+
"Eine Seite für die Datenschutzerklärung wurde erstellt, aber sie ist leer. Sie können "
|
864 |
+
"auf dieser Seite eine Vorlage für die Datenschutzerklärung generieren."
|
865 |
+
|
866 |
+
#: views/admin/notices/helper-policy.php:2
|
867 |
+
msgctxt "(Admin)"
|
868 |
+
msgid ""
|
869 |
+
"Heads up - your Privacy Policy still requires some attention. Find the places marked "
|
870 |
+
"with [TODO] and replace them with real content!"
|
871 |
+
msgstr ""
|
872 |
+
"Aufgepasst - Ihre Datenschutzerklärung erfordert noch einige Aufmerksamkeit. Finden "
|
873 |
+
"Sie die mit [TODO] markierten Orte und ersetzen Sie sie durch echten Inhalt!"
|
874 |
+
|
875 |
+
#: views/admin/notices/helper-tools.php:2
|
876 |
+
msgctxt "(Admin)"
|
877 |
+
msgid "The contents of this page should contain the [gdpr_tools] shortcode."
|
878 |
+
msgstr "Der Inhalt dieser Seite sollte den Shortcode [gdpr_tools] enthalten."
|
879 |
+
|
880 |
+
#: views/admin/privacy-policy/description-policy-page.php:2
|
881 |
+
msgctxt "(Admin)"
|
882 |
+
msgid "Select the page which will contain your Privacy Policy"
|
883 |
+
msgstr "Wählen Sie die Seite aus, die Ihre Datenschutzerklärung enthalten wird"
|
884 |
+
|
885 |
+
#: views/admin/privacy-policy/generated.php:3
|
886 |
+
msgctxt "(Admin)"
|
887 |
+
msgid "Your Privacy Policy has been generated."
|
888 |
+
msgstr "Ihre Datenschutzerklärung wurde erstellt."
|
889 |
+
|
890 |
+
#: views/admin/privacy-policy/generated.php:20
|
891 |
+
msgctxt "(Admin)"
|
892 |
+
msgid "« Back"
|
893 |
+
msgstr "« Zurück"
|
894 |
+
|
895 |
+
#: views/admin/privacy-policy/header.php:2
|
896 |
+
msgctxt "(Admin)"
|
897 |
+
msgid ""
|
898 |
+
"This page allows you to generate a Privacy Policy based on the information you entered "
|
899 |
+
"below."
|
900 |
+
msgstr ""
|
901 |
+
"Auf dieser Seite können Sie eine Datenschutzerklärung erzeugen, die auf den "
|
902 |
+
"Informationen basiert, die Sie unten eingegeben haben."
|
903 |
+
|
904 |
+
#: views/admin/settings-page.php:31
|
905 |
+
#, php-format
|
906 |
+
msgctxt "(Admin)"
|
907 |
+
msgid "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
908 |
+
msgstr "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
909 |
+
|
910 |
+
#: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
|
911 |
+
msgctxt "(Admin)"
|
912 |
+
msgid "Need more info?"
|
913 |
+
msgstr "Benötigen Sie weitere Informationen?"
|
914 |
+
|
915 |
+
#: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
|
916 |
+
msgctxt "(Admin)"
|
917 |
+
msgid "Site Owner's guide to GDPR"
|
918 |
+
msgstr "DSGVO-Handbuch für Website-Besitzer"
|
919 |
+
|
920 |
+
#: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
|
921 |
+
msgctxt "(Admin)"
|
922 |
+
msgid "Read the full guide on GDPR compliance."
|
923 |
+
msgstr "Lesen Sie das vollständige Handbuch zur DSGVO-Konformität."
|
924 |
+
|
925 |
+
#: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
|
926 |
+
msgctxt "(Admin)"
|
927 |
+
msgid "Knowledge base"
|
928 |
+
msgstr "Wissensdatenbank"
|
929 |
+
|
930 |
+
#: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
|
931 |
+
msgctxt "(Admin)"
|
932 |
+
msgid "Check out the knowledge base for common questions and answers."
|
933 |
+
msgstr ""
|
934 |
+
"Sehen Sie sich die Wissensdatenbank an, um häufige Fragen und Antworten zu lesen."
|
935 |
+
|
936 |
+
#: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
|
937 |
+
msgctxt "(Admin)"
|
938 |
+
msgid "Developer's guide to GDPR"
|
939 |
+
msgstr "Entwicklerleitfaden zur DSGVO"
|
940 |
+
|
941 |
+
#: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
|
942 |
+
msgctxt "(Admin)"
|
943 |
+
msgid "We have a thorough guide to help making custom sites compliant."
|
944 |
+
msgstr ""
|
945 |
+
"Wir haben eine umfassende Anleitung, um benutzerdefinierte Websites DSGVO-konform zu "
|
946 |
+
"machen."
|
947 |
+
|
948 |
+
#: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
|
949 |
+
msgctxt "(Admin)"
|
950 |
+
msgid "Need help?"
|
951 |
+
msgstr "Brauchen Sie Hilfe?"
|
952 |
+
|
953 |
+
#: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
|
954 |
+
msgctxt "(Admin)"
|
955 |
+
msgid "Submit a support request"
|
956 |
+
msgstr "Supportanfrage stellen"
|
957 |
+
|
958 |
+
#: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
|
959 |
+
msgctxt "(Admin)"
|
960 |
+
msgid "Found a bug or problem with the plugin? Post in the wordpress.org support forum."
|
961 |
+
msgstr ""
|
962 |
+
"Einen Fehler gefunden oder ein Problem mit dem Plugin? Bitte schreiben Sie uns im "
|
963 |
+
"Support-Forum von wordpress.org."
|
964 |
+
|
965 |
+
#: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
|
966 |
+
msgctxt "(Admin)"
|
967 |
+
msgid "Request a consultation"
|
968 |
+
msgstr "Fordern Sie eine Beratung an"
|
969 |
+
|
970 |
+
#: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
|
971 |
+
msgctxt "(Admin)"
|
972 |
+
msgid "Need development or legal assistance in making your site compliant? We can help!"
|
973 |
+
msgstr ""
|
974 |
+
"Benötigen Sie Unterstützung bei der Web-Entwicklung oder Rechtshilfe um Ihre Website "
|
975 |
+
"DSGVO-konform einzurichten? Wir können helfen!"
|
976 |
+
|
977 |
+
#: views/admin/wizard-buttons.php:2
|
978 |
+
msgctxt "(Admin)"
|
979 |
+
msgid "Restart setup wizard"
|
980 |
+
msgstr "Einrichtungsassistenten erneut starten"
|
981 |
+
|
982 |
+
#: views/email/action-export.php:8 views/email/action-forget.php:12
|
983 |
+
msgctxt "(Admin)"
|
984 |
+
msgid "This email is just for your information. You don't need to take any action"
|
985 |
+
msgstr "Diese E-Mail dient nur zu Ihrer Information. Sie müssen nichts unternehmen"
|
986 |
+
|
987 |
+
#: views/email/action-forget.php:8
|
988 |
+
msgctxt "(Admin)"
|
989 |
+
msgid "The data subject had a user account on your website."
|
990 |
+
msgstr "Die betroffene Person hatte einen Benutzer-Account auf Ihrer Website."
|
991 |
+
|
992 |
+
#: views/email/identify-data-subject.php:2
|
993 |
+
msgid "Someone has requested access to your data on"
|
994 |
+
msgstr "Jemand hat Zugriff auf Ihre Daten angefordert"
|
995 |
+
|
996 |
+
#: views/email/identify-data-subject.php:3
|
997 |
+
msgid "If this was a mistake, just ignore this email and nothing will happen."
|
998 |
+
msgstr ""
|
999 |
+
"Falls Sie diese E-Mail irrtümlich erhalten haben, ignorieren Sie sie bitte und es wird "
|
1000 |
+
"nichts weiter passieren."
|
1001 |
+
|
1002 |
+
#: views/email/identify-data-subject.php:4
|
1003 |
+
msgid "To manage your data, visit the following address:"
|
1004 |
+
msgstr "Um Ihre Daten zu verwalten, besuchen Sie die folgende Adresse:"
|
1005 |
+
|
1006 |
+
#: views/email/identify-data-subject.php:10
|
1007 |
+
msgid "This link is valid for 15 minutes."
|
1008 |
+
msgstr "Dieser Link ist 15 Minuten gültig."
|
1009 |
+
|
1010 |
+
#: views/email/no-data.php:2
|
1011 |
+
msgid "Someone has requested information about your personal data on"
|
1012 |
+
msgstr "Jemand hat Auskunft über Ihre personenbezogenen Daten erbeten auf"
|
1013 |
+
|
1014 |
+
#: views/email/no-data.php:3
|
1015 |
+
msgid "None of your personal data is stored on"
|
1016 |
+
msgstr "Keine Ihrer persönlichen Daten wurden gespeichert auf"
|
1017 |
+
|
1018 |
+
#: views/email/no-data.php:5
|
1019 |
+
msgid ""
|
1020 |
+
"If this was a mistake or you did not request this email, just ignore it and nothing "
|
1021 |
+
"will happen."
|
1022 |
+
msgstr ""
|
1023 |
+
"Falls Sie diese E-Mail irrtümlich erhalten haben, ignorieren Sie sie bitte und es wird "
|
1024 |
+
"nichts weiter passieren."
|
1025 |
+
|
1026 |
+
#: views/email/request-export.php:13 views/email/request-forget.php:13
|
1027 |
+
msgctxt "(Admin)"
|
1028 |
+
msgid "As a reminder: according to GDPR, you have 30 days to comply."
|
1029 |
+
msgstr "Zur Erinnerung: Gemäß der DSGVO müssen Sie 30 Tage einhalten."
|
1030 |
+
|
1031 |
+
#: views/global/delete-action.php:2
|
1032 |
+
msgctxt "(Admin)"
|
1033 |
+
msgid "Automatically anonymize data"
|
1034 |
+
msgstr "Daten automatisch anonymisieren"
|
1035 |
+
|
1036 |
+
#: views/global/delete-action.php:5
|
1037 |
+
msgctxt "(Admin)"
|
1038 |
+
msgid "Automatically delete data"
|
1039 |
+
msgstr "Daten automatisch löschen"
|
1040 |
+
|
1041 |
+
#: views/global/delete-action.php:9
|
1042 |
+
msgctxt "(Admin)"
|
1043 |
+
msgid "Automatically anonymize data and notify me via email"
|
1044 |
+
msgstr "Daten automatisch anonymisieren und mich über E-Mail benachrichtigen"
|
1045 |
+
|
1046 |
+
#: views/global/delete-action.php:13
|
1047 |
+
msgctxt "(Admin)"
|
1048 |
+
msgid "Automatically delete data and notify me via email"
|
1049 |
+
msgstr "Daten automatisch löschen und mich über E-Mail benachrichtigen"
|
1050 |
+
|
1051 |
+
#: views/global/delete-action.php:16 views/global/export-action.php:10
|
1052 |
+
msgctxt "(Admin)"
|
1053 |
+
msgid "Only notify me via email"
|
1054 |
+
msgstr "Mich lediglich über E-Mail benachrichtigen"
|
1055 |
+
|
1056 |
+
#: views/global/export-action.php:2
|
1057 |
+
msgctxt "(Admin)"
|
1058 |
+
msgid "Automatically download data"
|
1059 |
+
msgstr "Daten automatisch herunterladen"
|
1060 |
+
|
1061 |
+
#: views/global/export-action.php:6
|
1062 |
+
msgctxt "(Admin)"
|
1063 |
+
msgid "Automatically download data and notify me via email"
|
1064 |
+
msgstr "Daten automatisch herunterladen und mich über E-Mail benachrichtigen"
|
1065 |
+
|
1066 |
+
#: views/installer/continue-notice.php:2
|
1067 |
+
msgctxt "(Admin)"
|
1068 |
+
msgid "The The GDPR Framework setup has not been finalized yet."
|
1069 |
+
msgstr "Die Einrichtung des GDPR Frameworks ist noch nicht abgeschlossen."
|
1070 |
+
|
1071 |
+
#: views/installer/continue-notice.php:3
|
1072 |
+
msgctxt "(Admin)"
|
1073 |
+
msgid "You can continue the setup at any time."
|
1074 |
+
msgstr "Sie können die Einrichtung jederzeit fortsetzen."
|
1075 |
+
|
1076 |
+
#: views/installer/continue-notice.php:6
|
1077 |
+
msgctxt "(Admin)"
|
1078 |
+
msgid "Continue the setup wizard"
|
1079 |
+
msgstr "Setzen Sie den Einrichtungsassistenten fort"
|
1080 |
+
|
1081 |
+
#: views/installer/continue-notice.php:9
|
1082 |
+
msgctxt "(Admin)"
|
1083 |
+
msgid "Hide this message"
|
1084 |
+
msgstr "Diese Nachricht ausblenden"
|
1085 |
+
|
1086 |
+
#: views/installer/footer.php:7
|
1087 |
+
msgid "Back"
|
1088 |
+
msgstr "Zurück"
|
1089 |
+
|
1090 |
+
#: views/installer/header.php:26
|
1091 |
+
msgctxt "(Admin)"
|
1092 |
+
msgid "I need help"
|
1093 |
+
msgstr "Ich benötige Unterstützung"
|
1094 |
+
|
1095 |
+
#: views/installer/header.php:29
|
1096 |
+
msgctxt "(Admin)"
|
1097 |
+
msgid "Developer Docs"
|
1098 |
+
msgstr "Entwickler-Dokumentation"
|
1099 |
+
|
1100 |
+
#: views/installer/header.php:36
|
1101 |
+
msgctxt "(Admin)"
|
1102 |
+
msgid "Configuration"
|
1103 |
+
msgstr "Konfiguration"
|
1104 |
+
|
1105 |
+
#: views/installer/header.php:46
|
1106 |
+
msgctxt "(Admin)"
|
1107 |
+
msgid "Forms & Consent"
|
1108 |
+
msgstr "Formulare & Zustimmung"
|
1109 |
+
|
1110 |
+
#: views/installer/header.php:51
|
1111 |
+
msgctxt "(Admin)"
|
1112 |
+
msgid "Integrations"
|
1113 |
+
msgstr "Integrationen"
|
1114 |
+
|
1115 |
+
#: views/installer/steps/configuration-settings.php:23
|
1116 |
+
#: views/installer/steps/configuration-settings.php:73
|
1117 |
+
msgctxt "(Admin)"
|
1118 |
+
msgid "Enter the email address to notify"
|
1119 |
+
msgstr "Geben Sie die zu benachrichtigende E-Mail-Adresse ein"
|
1120 |
+
|
1121 |
+
#: views/installer/steps/disclaimer.php:21
|
1122 |
+
msgctxt "(Admin)"
|
1123 |
+
msgid "I accept"
|
1124 |
+
msgstr "Ich akzeptiere"
|
1125 |
+
|
1126 |
+
#: views/installer/welcome-notice.php:7
|
1127 |
+
msgctxt "(Admin)"
|
1128 |
+
msgid "Run the setup wizard"
|
1129 |
+
msgstr "Einrichtungsassistent jetzt starten"
|
1130 |
+
|
1131 |
+
#: views/installer/welcome-notice.php:11
|
1132 |
+
msgctxt "(Admin)"
|
1133 |
+
msgid "Auto-install pages"
|
1134 |
+
msgstr "Seiten automatisch einrichten"
|
1135 |
+
|
1136 |
+
#: views/installer/welcome-notice.php:15
|
1137 |
+
msgctxt "(Admin)"
|
1138 |
+
msgid "Skip and install manually"
|
1139 |
+
msgstr "Überspringen und manuell einrichten"
|
1140 |
+
|
1141 |
+
#: views/modules/contact-form-7/generator-privacy.php:6
|
1142 |
+
msgctxt "(Admin)"
|
1143 |
+
msgid ""
|
1144 |
+
"This tag generates the default text for Terms & Conditions and/or Privacy Policy "
|
1145 |
+
"checkbox."
|
1146 |
+
msgstr ""
|
1147 |
+
"Dieser Tag generiert den Standardtext für die Checkbox der Geschäftsbedingungen und/"
|
1148 |
+
"oder Datenschutzerklärung."
|
1149 |
+
|
1150 |
+
#: views/modules/contact-form-7/generator-privacy.php:15
|
1151 |
+
msgid "Insert"
|
1152 |
+
msgstr "Einfügen"
|
1153 |
+
|
1154 |
+
#: views/modules/wordpress-comments/terms-checkbox.php:6
|
1155 |
+
#: views/modules/wordpress-user/registration-terms-checkbox.php:7
|
1156 |
+
#, php-format
|
1157 |
+
msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
|
1158 |
+
msgstr ""
|
1159 |
+
"Ich akzeptiere die %sAllgemeinen Geschäftsbedingungen%s und die %sDatenschutzerklärung"
|
1160 |
+
"%s"
|
1161 |
+
|
1162 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
|
1163 |
+
msgid "Manage consents"
|
1164 |
+
msgstr "Zustimmungen verwalten"
|
1165 |
+
|
1166 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
|
1167 |
+
#: views/privacy-tools/form-consent.php:6
|
1168 |
+
msgid "Here you can withdraw any consents you have given."
|
1169 |
+
msgstr "Hier können Sie Ihre gegebenen Einwilligungen widerrufen."
|
1170 |
+
|
1171 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
|
1172 |
+
#: views/privacy-tools/form-consent.php:9
|
1173 |
+
msgid "Consent types"
|
1174 |
+
msgstr "Arten der Zustimmung"
|
1175 |
+
|
1176 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
|
1177 |
+
#: views/privacy-tools/form-consent.php:24
|
1178 |
+
msgid "Withdraw"
|
1179 |
+
msgstr "Widerrufen"
|
1180 |
+
|
1181 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
|
1182 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
|
1183 |
+
msgctxt "(Admin)"
|
1184 |
+
msgid "Delete this user and all data"
|
1185 |
+
msgstr "Diesen Benutzer und alle Daten löschen"
|
1186 |
+
|
1187 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
|
1188 |
+
msgctxt "(Admin)"
|
1189 |
+
msgid "Delete my data"
|
1190 |
+
msgstr "Löschen Sie meine Daten"
|
1191 |
+
|
1192 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
|
1193 |
+
#: views/privacy-tools/form-delete.php:13
|
1194 |
+
msgid "Delete all data we have gathered about you."
|
1195 |
+
msgstr "Lassen Sie uns alle Daten, die wir über Sie haben, löschen."
|
1196 |
+
|
1197 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
|
1198 |
+
#: views/privacy-tools/form-delete.php:14
|
1199 |
+
msgid "If you have a user account on our site, it will also be deleted."
|
1200 |
+
msgstr ""
|
1201 |
+
"Falls Sie auf unserer Website ein Benutzerkonto haben, wird dieses ebenfalls gelöscht."
|
1202 |
+
|
1203 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
|
1204 |
+
#: views/privacy-tools/form-delete.php:15
|
1205 |
+
msgid "Be careful - this action is permanent and CANNOT be undone."
|
1206 |
+
msgstr ""
|
1207 |
+
"Seien Sie vorsichtig - diese Aktion ist dauerhaft und kann NICHT rückgängig gemacht "
|
1208 |
+
"werden."
|
1209 |
+
|
1210 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
|
1211 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
|
1212 |
+
msgctxt "(Admin)"
|
1213 |
+
msgid ""
|
1214 |
+
"You seem to have an administrator or equivalent role, so deleting/anonymizing via this "
|
1215 |
+
"page is disabled."
|
1216 |
+
msgstr ""
|
1217 |
+
"Du scheinst die Rolle eines Administrators oder eine gleichwertige Rolle zu haben, so "
|
1218 |
+
"dass löschen/anonymisieren über diese Seite deaktiviert ist."
|
1219 |
+
|
1220 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:7
|
1221 |
+
#: views/privacy-tools/form-export.php:1
|
1222 |
+
msgid "Download your data"
|
1223 |
+
msgstr "Laden Sie Ihre Daten herunter"
|
1224 |
+
|
1225 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:12
|
1226 |
+
#: views/privacy-tools/form-export.php:13
|
1227 |
+
msgid "Download as table"
|
1228 |
+
msgstr "Als Tabelle herunterladen"
|
1229 |
+
|
1230 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:15
|
1231 |
+
#: views/privacy-tools/form-export.php:22
|
1232 |
+
msgid "Export as JSON"
|
1233 |
+
msgstr "Export als JSON"
|
1234 |
+
|
1235 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:19
|
1236 |
+
#: views/privacy-tools/form-export.php:4
|
1237 |
+
msgid "You can download all your data formatted as a table for viewing."
|
1238 |
+
msgstr ""
|
1239 |
+
"Für eine einfachere Betrachtung können Sie alle Ihre Daten in Form einer Tabelle "
|
1240 |
+
"herunterladen."
|
1241 |
+
|
1242 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:20
|
1243 |
+
#: views/privacy-tools/form-export.php:5
|
1244 |
+
msgid "Alternatively, you can export it in machine-readable JSON format."
|
1245 |
+
msgstr "Alternativ können Sie sie im maschinenlesbaren JSON-Format exportieren."
|
1246 |
+
|
1247 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
|
1248 |
+
msgctxt "(Admin)"
|
1249 |
+
msgid "Delete user and all data"
|
1250 |
+
msgstr "Diesen Benutzer und alle Daten löschen"
|
1251 |
+
|
1252 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
|
1253 |
+
msgctxt "(Admin)"
|
1254 |
+
msgid "Anonymize user and all data"
|
1255 |
+
msgstr "Diesen Benutzer und alle Daten anonymisieren"
|
1256 |
+
|
1257 |
+
#: views/modules/wordpress-user/dashboard/profile-page/header.php:2
|
1258 |
+
msgctxt "(Admin)"
|
1259 |
+
msgid "GDPR Data"
|
1260 |
+
msgstr "DSGVO Daten"
|
1261 |
+
|
1262 |
+
#: views/modules/wordpress-user/dashboard/profile-page/header.php:6
|
1263 |
+
msgctxt "(Admin)"
|
1264 |
+
msgid "This user has been anonymized."
|
1265 |
+
msgstr "Dieser Benutzer wurde anonymisiert."
|
1266 |
+
|
1267 |
+
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
|
1268 |
+
msgctxt "(Admin)"
|
1269 |
+
msgid "Consents given"
|
1270 |
+
msgstr "Gegebene Zustimmungen"
|
1271 |
+
|
1272 |
+
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
|
1273 |
+
msgctxt "(Admin)"
|
1274 |
+
msgid "No consents given"
|
1275 |
+
msgstr "Keine Zustimmungen gegeben"
|
1276 |
+
|
1277 |
+
#: views/privacy-tools/form-consent.php:2
|
1278 |
+
msgid "Consent"
|
1279 |
+
msgstr "Zustimmung"
|
1280 |
+
|
1281 |
+
#: views/privacy-tools/form-delete.php:1 views/privacy-tools/notice-admin-role.php:1
|
1282 |
+
msgid "Delete my user and data"
|
1283 |
+
msgstr "Mein Benutzerkonto und meine Daten löschen"
|
1284 |
+
|
1285 |
+
#: views/privacy-tools/form-delete.php:7
|
1286 |
+
msgid "Delete my data"
|
1287 |
+
msgstr "Meine Daten löschen"
|
1288 |
+
|
1289 |
+
#: views/privacy-tools/form-identify.php:8
|
1290 |
+
msgid "Back to Privacy Tools"
|
1291 |
+
msgstr "Zurück zu den Datenschutz-Tools"
|
1292 |
+
|
1293 |
+
#: views/privacy-tools/form-identify.php:14
|
1294 |
+
msgid "Identify yourself!"
|
1295 |
+
msgstr "Bitte identifizieren Sie sich!"
|
1296 |
+
|
1297 |
+
#: views/privacy-tools/form-identify.php:17 views/privacy-tools/form-identify.php:20
|
1298 |
+
msgid "Enter your email address"
|
1299 |
+
msgstr "Geben Sie ihren E-Mail-Adresse ein"
|
1300 |
+
|
1301 |
+
#: views/privacy-tools/form-identify.php:23
|
1302 |
+
msgid "Send email"
|
1303 |
+
msgstr "E-Mail senden"
|
1304 |
+
|
1305 |
+
#: views/privacy-tools/notice-admin-role.php:4
|
1306 |
+
msgctxt "(Admin)"
|
1307 |
+
msgid "Data deletion is disabled for administrative accounts."
|
1308 |
+
msgstr "Die Löschung der Daten ist für administrative Benutzerkonten deaktiviert."
|
1309 |
+
|
1310 |
+
#: views/privacy-tools/notices.php:3
|
1311 |
+
msgid ""
|
1312 |
+
"We will send you an email with the link to access your data. Please check your spam "
|
1313 |
+
"folder as well!"
|
1314 |
+
msgstr ""
|
1315 |
+
"Wir senden Ihnen eine E-Mail mit einem Link, um auf Ihre Daten zuzugreifen. Bitte "
|
1316 |
+
"überprüfen Sie auch Ihren Spam-Ordner!"
|
1317 |
+
|
1318 |
+
#: views/privacy-tools/notices.php:7
|
1319 |
+
msgid "The email you entered does not appear to be a valid email."
|
1320 |
+
msgstr "Die eingegebene E-Mail-Adresse scheint ungültig zu sein."
|
1321 |
+
|
1322 |
+
#: views/privacy-tools/notices.php:11
|
1323 |
+
msgid "Sorry - the link seems to have expired. Please try again!"
|
1324 |
+
msgstr ""
|
1325 |
+
"Entschuldigung - der Link scheint abgelaufen zu sein. Bitte versuchen Sie es erneut!"
|
1326 |
+
|
1327 |
+
#: views/privacy-tools/notices.php:23
|
1328 |
+
msgid "Your personal data has been removed!"
|
1329 |
+
msgstr "Ihre personenbezogenen Daten wurden gelöscht!"
|
1330 |
+
|
1331 |
+
#: views/privacy-tools/privacy-tools.php:5
|
1332 |
+
msgid "You are identified as"
|
1333 |
+
msgstr "Sie sind indentifiziert als"
|
languages/gdpr-framework-el.mo
ADDED
Binary file
|
languages/gdpr-framework-el.po
ADDED
@@ -0,0 +1,1351 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# SOME DESCRIPTIVE TITLE.
|
2 |
+
# Copyright (C) YEAR Codelight
|
3 |
+
# This file is distributed under the same license as the The GDPR Framework package.
|
4 |
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
+
#
|
6 |
+
msgid ""
|
7 |
+
msgstr ""
|
8 |
+
"Project-Id-Version: The GDPR Framework 1.0\n"
|
9 |
+
"Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
|
10 |
+
"POT-Creation-Date: 2018-04-16 10:50+0000\n"
|
11 |
+
"PO-Revision-Date: 2018-05-18 21:23+0300\n"
|
12 |
+
"Last-Translator: john maniatopoulos <webace.wp@gmail.com>\n"
|
13 |
+
"Language-Team: Greek\n"
|
14 |
+
"Language: el\n"
|
15 |
+
"MIME-Version: 1.0\n"
|
16 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
17 |
+
"Content-Transfer-Encoding: 8bit\n"
|
18 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
19 |
+
"X-Generator: Poedit 1.8.6\n"
|
20 |
+
|
21 |
+
#: gdpr-framework.php:26
|
22 |
+
msgctxt "(Admin)"
|
23 |
+
msgid "WordPress GDPR › Error"
|
24 |
+
msgstr ""
|
25 |
+
|
26 |
+
#: gdpr-framework.php:35
|
27 |
+
msgctxt "(Admin)"
|
28 |
+
msgid "Invalid PHP version"
|
29 |
+
msgstr "Μη έγκυρη έκδοση PHP"
|
30 |
+
|
31 |
+
#: gdpr-framework.php:35
|
32 |
+
msgctxt "(Admin)"
|
33 |
+
msgid "You must be using PHP 5.6.33 or greater."
|
34 |
+
msgstr "Πρέπει να χρησιμοποιείτε την PHP 5.6.33 ή μεγαλύτερη."
|
35 |
+
|
36 |
+
#: gdpr-framework.php:42
|
37 |
+
msgctxt "(Admin)"
|
38 |
+
msgid "Invalid WordPress version"
|
39 |
+
msgstr "Μη έγκυρη έκδοση WordPress"
|
40 |
+
|
41 |
+
#: gdpr-framework.php:42
|
42 |
+
msgctxt "(Admin)"
|
43 |
+
msgid "You must be using WordPress 4.3.0 or greater."
|
44 |
+
msgstr "Πρέπει να χρησιμοποιείτε WordPress 4.3.0 ή μεγαλύτερη."
|
45 |
+
|
46 |
+
#: gdpr-framework.php:52
|
47 |
+
msgctxt "(Admin)"
|
48 |
+
msgid ""
|
49 |
+
"You appear to be running a development version of GDPR. You must run "
|
50 |
+
"<code>composer install</code> from the plugin directory."
|
51 |
+
msgstr ""
|
52 |
+
"Σας φαίνεται να λειτουργεί μια έκδοση ανάπτυξης του GDPR πρέπει να "
|
53 |
+
"εκτελέσετε το <code>composer install</code> από τον κατάλογο του plugin."
|
54 |
+
|
55 |
+
#: gdpr-framework.php:53
|
56 |
+
msgctxt "(Admin)"
|
57 |
+
msgid "Autoloader not found."
|
58 |
+
msgstr "Autoloader δεν βρέθηκε."
|
59 |
+
|
60 |
+
#: gdpr-framework.php:115
|
61 |
+
msgctxt "(Admin)"
|
62 |
+
msgid "Anonymous"
|
63 |
+
msgstr "Ανώνυμος"
|
64 |
+
|
65 |
+
#: src/Admin/AdminTab.php:115
|
66 |
+
msgctxt "(Admin)"
|
67 |
+
msgid "Save"
|
68 |
+
msgstr "Αποθήκευση"
|
69 |
+
|
70 |
+
#: src/Admin/AdminTab.php:151
|
71 |
+
msgctxt "(Admin)"
|
72 |
+
msgid "Policy generated!"
|
73 |
+
msgstr "Πολιτική που δημιουργήθηκε!"
|
74 |
+
|
75 |
+
#: src/Admin/AdminTabGeneral.php:11
|
76 |
+
msgctxt "(Admin)"
|
77 |
+
msgid "General"
|
78 |
+
msgstr "Γενικά"
|
79 |
+
|
80 |
+
#: src/Admin/AdminTabGeneral.php:38
|
81 |
+
msgctxt "(Admin)"
|
82 |
+
msgid "General Settings"
|
83 |
+
msgstr "Γενικές Ρυθμίσεις"
|
84 |
+
|
85 |
+
#: src/Admin/AdminTabGeneral.php:43
|
86 |
+
msgctxt "(Admin)"
|
87 |
+
msgid "Enable Privacy Tools"
|
88 |
+
msgstr "Ενεργοποίηση εργαλείων προστασίας προσωπικών δεδομένων"
|
89 |
+
|
90 |
+
#: src/Admin/AdminTabGeneral.php:53
|
91 |
+
msgctxt "(Admin)"
|
92 |
+
msgid "Pages"
|
93 |
+
msgstr "Σελίδες"
|
94 |
+
|
95 |
+
#: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
|
96 |
+
msgctxt "(Admin)"
|
97 |
+
msgid "Privacy Tools Page"
|
98 |
+
msgstr "Εργαλεία σελίδας απορρήτου"
|
99 |
+
|
100 |
+
#: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
|
101 |
+
msgctxt "(Admin)"
|
102 |
+
msgid "Privacy Policy Page"
|
103 |
+
msgstr "Σελίδα Πολιτικής Απορρήτου"
|
104 |
+
|
105 |
+
#: src/Admin/AdminTabGeneral.php:72
|
106 |
+
msgctxt "(Admin)"
|
107 |
+
msgid "Terms & Conditions Page"
|
108 |
+
msgstr "Σελίδα Όρων & Προϋποθέσεων"
|
109 |
+
|
110 |
+
#: src/Admin/AdminTabGeneral.php:82
|
111 |
+
msgctxt "(Admin)"
|
112 |
+
msgid "View & Export Data"
|
113 |
+
msgstr "Προβολή & εξαγωγή δεδομένων"
|
114 |
+
|
115 |
+
#: src/Admin/AdminTabGeneral.php:87
|
116 |
+
msgctxt "(Admin)"
|
117 |
+
msgid "Export action"
|
118 |
+
msgstr "Εξαγωγή"
|
119 |
+
|
120 |
+
#: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
|
121 |
+
msgctxt "(Admin)"
|
122 |
+
msgid "Email to notify"
|
123 |
+
msgstr "Διεύθυνση ηλεκτρονικού ταχυδρομείου για κοινοποίηση"
|
124 |
+
|
125 |
+
#: src/Admin/AdminTabGeneral.php:105
|
126 |
+
msgctxt "(Admin)"
|
127 |
+
msgid "Delete & Anonymize Data"
|
128 |
+
msgstr "Διαγραφή του & ανωνυμία δεδομένων"
|
129 |
+
|
130 |
+
#: src/Admin/AdminTabGeneral.php:110
|
131 |
+
msgctxt "(Admin)"
|
132 |
+
msgid "Delete action"
|
133 |
+
msgstr "Διαγραφή ενέργειας"
|
134 |
+
|
135 |
+
#: src/Admin/AdminTabGeneral.php:117
|
136 |
+
msgctxt "(Admin)"
|
137 |
+
msgid "Delete or reassign content?"
|
138 |
+
msgstr "Διαγράψετε ή να εκχωρήσετε εκ νέου περιεχομένου;"
|
139 |
+
|
140 |
+
#: src/Admin/AdminTabGeneral.php:125
|
141 |
+
msgctxt "(Admin)"
|
142 |
+
msgid "Reassign content to"
|
143 |
+
msgstr "Επανατοποθετήστε περιεχόμενο σε"
|
144 |
+
|
145 |
+
#: src/Admin/AdminTabGeneral.php:145
|
146 |
+
msgctxt "(Admin)"
|
147 |
+
msgid "Styling"
|
148 |
+
msgstr "Μορφοποίηση"
|
149 |
+
|
150 |
+
#: src/Admin/AdminTabGeneral.php:150
|
151 |
+
msgctxt "(Admin)"
|
152 |
+
msgid "Enable basic styling on Privacy Tools page"
|
153 |
+
msgstr "Ενεργοποίηση βασικού στυλ στη σελίδα εργαλεία απορρήτου"
|
154 |
+
|
155 |
+
#: src/Admin/AdminTabGeneral.php:162
|
156 |
+
msgctxt "(Admin)"
|
157 |
+
msgid "Compatibility"
|
158 |
+
msgstr "Συμβατότητα"
|
159 |
+
|
160 |
+
#: src/Admin/AdminTabGeneral.php:167
|
161 |
+
msgctxt "(Admin)"
|
162 |
+
msgid "Enable automatic theme compatibility"
|
163 |
+
msgstr "Ενεργοποίηση αυτόματης συμβατότητας θέματος"
|
164 |
+
|
165 |
+
#: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
|
166 |
+
#: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
|
167 |
+
#: views/installer/steps/configuration-settings.php:62
|
168 |
+
msgctxt "(Admin)"
|
169 |
+
msgid "— Select —"
|
170 |
+
msgstr ""
|
171 |
+
|
172 |
+
#: src/Admin/WordpressAdmin.php:65
|
173 |
+
msgctxt "(Admin)"
|
174 |
+
msgid "Privacy & GDPR Settings"
|
175 |
+
msgstr "Απορρήτου & GDPR ρυθμίσεις"
|
176 |
+
|
177 |
+
#: src/Admin/WordpressAdmin.php:66
|
178 |
+
msgctxt "(Admin)"
|
179 |
+
msgid "Privacy"
|
180 |
+
msgstr "Προστασία Απορρήτου"
|
181 |
+
|
182 |
+
#: src/Components/Consent/AdminTabConsent.php:30
|
183 |
+
#: src/Components/Consent/AdminTabConsent.php:49
|
184 |
+
msgctxt "(Admin)"
|
185 |
+
msgid "Consent"
|
186 |
+
msgstr "Συγκατάθεση"
|
187 |
+
|
188 |
+
#: src/Components/Consent/AdminTabConsent.php:157
|
189 |
+
msgctxt "(Admin)"
|
190 |
+
msgid "Consent slug is a required field!"
|
191 |
+
msgstr "Συγκατάθεση slug είναι ένα απαιτούμενο πεδίο!"
|
192 |
+
|
193 |
+
#: src/Components/Consent/AdminTabConsent.php:162
|
194 |
+
msgctxt "(Admin)"
|
195 |
+
msgid ""
|
196 |
+
"You may only use alphanumeric characters, dash and underscore in the consent "
|
197 |
+
"slug field."
|
198 |
+
msgstr ""
|
199 |
+
|
200 |
+
#: src/Components/Consent/AdminTabConsent.php:167
|
201 |
+
msgctxt "(Admin)"
|
202 |
+
msgid "Consent title is a required field!"
|
203 |
+
msgstr "Συγκατάθεση τίτλος το πεδίο είναι υποχρεωτικό!"
|
204 |
+
|
205 |
+
#: src/Components/Consent/ConsentManager.php:46
|
206 |
+
#: views/modules/contact-form-7/content-privacy.php:2
|
207 |
+
#: views/modules/wordpress-comments/terms-checkbox.php:14
|
208 |
+
#: views/modules/wordpress-user/registration-terms-checkbox.php:15
|
209 |
+
#, php-format
|
210 |
+
msgid "I accept the %sPrivacy Policy%s"
|
211 |
+
msgstr "Αποδέχομαι την %sΠολιτική Προστασίας Προσωπικών Δεδομένων%s"
|
212 |
+
|
213 |
+
#: src/Components/Consent/ConsentManager.php:50
|
214 |
+
#: src/Components/Consent/ConsentManager.php:69
|
215 |
+
msgctxt "(Admin)"
|
216 |
+
msgid ""
|
217 |
+
"This consent is not visible by default. If someone wishes to withdraw it, "
|
218 |
+
"they should simply request to delete all their data."
|
219 |
+
msgstr ""
|
220 |
+
"Αυτή η συγκατάθεση δεν είναι ορατή από προεπιλογή. Αν κάποιος επιθυμεί να "
|
221 |
+
"την αποσύρει, θα πρέπει απλώς να ζητήσει τη διαγραφή όλων των δεδομένων."
|
222 |
+
|
223 |
+
#: src/Components/Consent/ConsentManager.php:65
|
224 |
+
#, php-format
|
225 |
+
msgid "I accept the %sTerms & Conditions%s"
|
226 |
+
msgstr "Αποδέχομαι τους %sΌρους & Προϋποθέσεις%s"
|
227 |
+
|
228 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
|
229 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
|
230 |
+
#: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
|
231 |
+
msgctxt "(Admin)"
|
232 |
+
msgid "Privacy Policy"
|
233 |
+
msgstr "Πολιτική Απορρήτου"
|
234 |
+
|
235 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
|
236 |
+
msgctxt "(Admin)"
|
237 |
+
msgid "Company information"
|
238 |
+
msgstr "ΠΛΗΡΟΦΟΡΙΕΣ ΓΙΑ ΤΗΝ ΕΤΑΙΡΙΑ"
|
239 |
+
|
240 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
|
241 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
|
242 |
+
msgctxt "(Admin)"
|
243 |
+
msgid "Company Name"
|
244 |
+
msgstr "Όνομα Εταιρίας"
|
245 |
+
|
246 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
|
247 |
+
msgctxt "(Admin)"
|
248 |
+
msgid "Company Email"
|
249 |
+
msgstr "Εταιρικό email"
|
250 |
+
|
251 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
|
252 |
+
msgctxt "(Admin)"
|
253 |
+
msgid "Company Location"
|
254 |
+
msgstr "Τοποθεσία της εταιρείας"
|
255 |
+
|
256 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
|
257 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
|
258 |
+
msgctxt "(Admin)"
|
259 |
+
msgid "Representative Contact Name"
|
260 |
+
msgstr "Αντιπροσωπευτικό όνομα επαφής"
|
261 |
+
|
262 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
|
263 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
|
264 |
+
msgctxt "(Admin)"
|
265 |
+
msgid "Representative Contact Email"
|
266 |
+
msgstr "Εκπρόσωπος επικοινωνίας Email"
|
267 |
+
|
268 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
|
269 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
|
270 |
+
msgctxt "(Admin)"
|
271 |
+
msgid "Representative Contact Phone"
|
272 |
+
msgstr "Τηλέφωνο επικοινωνίας του εκπροσώπου"
|
273 |
+
|
274 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
|
275 |
+
msgctxt "(Admin)"
|
276 |
+
msgid "Data Protection Authority"
|
277 |
+
msgstr "Αρχή προστασίας δεδομένων"
|
278 |
+
|
279 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
|
280 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
|
281 |
+
msgctxt "(Admin)"
|
282 |
+
msgid "Data Protection Authority Website"
|
283 |
+
msgstr "Δικτυακός τόπος της αρχής προστασίας δεδομένων"
|
284 |
+
|
285 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
|
286 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
|
287 |
+
msgctxt "(Admin)"
|
288 |
+
msgid "Data Protection Authority Email"
|
289 |
+
msgstr "Ηλεκτρονικό ταχυδρομείο αρχής προστασίας δεδομένων"
|
290 |
+
|
291 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
|
292 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
|
293 |
+
msgctxt "(Admin)"
|
294 |
+
msgid "Data Protection Authority Phone"
|
295 |
+
msgstr "Τηλέφωνο αρχής προστασίας δεδομένων"
|
296 |
+
|
297 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
|
298 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
|
299 |
+
msgctxt "(Admin)"
|
300 |
+
msgid "Data Protection Officer"
|
301 |
+
msgstr "Υπεύθυνος προστασίας δεδομένων"
|
302 |
+
|
303 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
|
304 |
+
msgctxt "(Admin)"
|
305 |
+
msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
|
306 |
+
msgstr ""
|
307 |
+
"Γνωσιακή βάση: χρειάζεται να διορίσει έναν υπεύθυνο προστασίας δεδομένων;"
|
308 |
+
|
309 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
|
310 |
+
msgctxt "(Admin)"
|
311 |
+
msgid "Data Protection Officer Name"
|
312 |
+
msgstr "Όνομα υπευθύνου προστασίας δεδομένων"
|
313 |
+
|
314 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
|
315 |
+
msgctxt "(Admin)"
|
316 |
+
msgid "Data Protection Officer Email"
|
317 |
+
msgstr "Ηλεκτρονικό ταχυδρομείο υπευθύνου προστασίας δεδομένων"
|
318 |
+
|
319 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
|
320 |
+
msgctxt "(Admin)"
|
321 |
+
msgid "Contact Email"
|
322 |
+
msgstr "Email επικοινωνίας"
|
323 |
+
|
324 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
|
325 |
+
msgctxt "(Admin)"
|
326 |
+
msgid "Representative Contact"
|
327 |
+
msgstr "Εκπρόσωπος επικοινωνίας"
|
328 |
+
|
329 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
|
330 |
+
msgctxt "(Admin)"
|
331 |
+
msgid "Knowledge base: Do I need to appoint an EU-based representative?"
|
332 |
+
msgstr "Γνωσιακή Βάση : πρέπει να διορίζει έναν εκπρόσωπο που εδρεύει στην ΕΕ;"
|
333 |
+
|
334 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
|
335 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
|
336 |
+
msgctxt "(Admin)"
|
337 |
+
msgid "DPO Name"
|
338 |
+
msgstr ""
|
339 |
+
|
340 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
|
341 |
+
msgctxt "(Admin)"
|
342 |
+
msgid "Save & Generate Policy"
|
343 |
+
msgstr ""
|
344 |
+
|
345 |
+
#: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
|
346 |
+
#: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
|
347 |
+
#: views/themes/storefront/footer.php:3
|
348 |
+
#: views/themes/twentyseventeen/footer.php:3
|
349 |
+
#: views/themes/twentysixteen/footer.php:4
|
350 |
+
msgid "Privacy Policy"
|
351 |
+
msgstr "Προσωπικά δεδομένα"
|
352 |
+
|
353 |
+
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
|
354 |
+
msgid "This page is currently disabled."
|
355 |
+
msgstr "Αυτήν τη στιγμή αυτή η σελίδα είναι απενεργοποιημένη."
|
356 |
+
|
357 |
+
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
|
358 |
+
#: src/Installer/Installer.php:279
|
359 |
+
#: src/Installer/Steps/ConfigurationPages.php:55
|
360 |
+
#: views/themes/storefront/footer.php:7
|
361 |
+
#: views/themes/twentyseventeen/footer.php:7
|
362 |
+
#: views/themes/twentysixteen/footer.php:9
|
363 |
+
msgid "Privacy Tools"
|
364 |
+
msgstr "Επεξεργασία προσωπικών δεδομένων"
|
365 |
+
|
366 |
+
#: src/Components/Support/AdminTabSupport.php:13
|
367 |
+
#: src/Components/Support/AdminTabSupport.php:20
|
368 |
+
msgctxt "(Admin)"
|
369 |
+
msgid "Support"
|
370 |
+
msgstr "Υποστήριξη"
|
371 |
+
|
372 |
+
#: src/Components/WordpressComments/WordpressComments.php:90
|
373 |
+
#, php-format
|
374 |
+
msgid ""
|
375 |
+
"%sERROR:%s You need to accept the terms and conditions to post a comment."
|
376 |
+
msgstr ""
|
377 |
+
"%sERROR:%s Πρέπει να αποδεχτείτε τους όρους και τις προϋποθέσεις για να "
|
378 |
+
"δημοσιεύσετε ένα σχόλιο."
|
379 |
+
|
380 |
+
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
|
381 |
+
#: views/privacy-tools/notices.php:19
|
382 |
+
msgid "We have received your request and will reply within 30 days."
|
383 |
+
msgstr "Λάβαμε το αίτημά σας και θα απαντήσουμε εντός 30 ημερών."
|
384 |
+
|
385 |
+
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
|
386 |
+
#: views/privacy-tools/notices.php:15
|
387 |
+
msgid "Consent withdrawn."
|
388 |
+
msgstr "Η συγκατάθεση αποσύρεται."
|
389 |
+
|
390 |
+
#: src/Components/WordpressUser/RegistrationForm.php:42
|
391 |
+
msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
|
392 |
+
msgstr ""
|
393 |
+
"<strong>ΣΦΑΛΜΑ</ strong>: Πρέπει να αποδεχτείτε τους όρους και τις "
|
394 |
+
"προϋποθέσεις."
|
395 |
+
|
396 |
+
#: src/Components/WordpressUser/WordpressUser.php:63
|
397 |
+
#: src/Components/WordpressUser/WordpressUser.php:64
|
398 |
+
#: views/modules/wordpress-user/dashboard/data-page/header.php:2
|
399 |
+
msgctxt "(Admin)"
|
400 |
+
msgid "Privacy Tools"
|
401 |
+
msgstr "Εργαλεία απορρήτου"
|
402 |
+
|
403 |
+
#: src/DataSubject/AdminTabDataSubject.php:27
|
404 |
+
#: src/DataSubject/AdminTabDataSubject.php:41
|
405 |
+
msgctxt "(Admin)"
|
406 |
+
msgid "Data Subjects"
|
407 |
+
msgstr "Υποκείμενα των δεδομένων"
|
408 |
+
|
409 |
+
#: src/DataSubject/DataRepository.php:143
|
410 |
+
msgid "Data exported"
|
411 |
+
msgstr "Εξαγόμενα δεδομένα"
|
412 |
+
|
413 |
+
#: src/DataSubject/DataRepository.php:158
|
414 |
+
msgid "Data export request"
|
415 |
+
msgstr "Αίτημα εξαγωγής δεδομένων"
|
416 |
+
|
417 |
+
#: src/DataSubject/DataRepository.php:171
|
418 |
+
msgid "Data removed"
|
419 |
+
msgstr "Τα δεδομένα καταργήθηκαν"
|
420 |
+
|
421 |
+
#: src/DataSubject/DataRepository.php:186
|
422 |
+
msgid "Data removal request"
|
423 |
+
msgstr "Αίτημα κατάργησης δεδομένων"
|
424 |
+
|
425 |
+
#: src/DataSubject/DataSubjectIdentificator.php:65
|
426 |
+
#: src/DataSubject/DataSubjectIdentificator.php:82
|
427 |
+
msgid "Your personal data on"
|
428 |
+
msgstr "Τα προσωπικά σας δεδομένα στο"
|
429 |
+
|
430 |
+
#: src/Helpers.php:27
|
431 |
+
msgctxt "(Admin)"
|
432 |
+
msgid "Austria"
|
433 |
+
msgstr "Αυστρία"
|
434 |
+
|
435 |
+
#: src/Helpers.php:28
|
436 |
+
msgctxt "(Admin)"
|
437 |
+
msgid "Belgium"
|
438 |
+
msgstr "Βέλγιο"
|
439 |
+
|
440 |
+
#: src/Helpers.php:29
|
441 |
+
msgctxt "(Admin)"
|
442 |
+
msgid "Bulgaria"
|
443 |
+
msgstr "Βουλγαρία"
|
444 |
+
|
445 |
+
#: src/Helpers.php:30
|
446 |
+
msgctxt "(Admin)"
|
447 |
+
msgid "Croatia"
|
448 |
+
msgstr "Κροατία"
|
449 |
+
|
450 |
+
#: src/Helpers.php:31
|
451 |
+
msgctxt "(Admin)"
|
452 |
+
msgid "Cyprus"
|
453 |
+
msgstr "Κύπρος"
|
454 |
+
|
455 |
+
#: src/Helpers.php:32
|
456 |
+
msgctxt "(Admin)"
|
457 |
+
msgid "Czech Republic"
|
458 |
+
msgstr "Τσεχική Δημοκρατία"
|
459 |
+
|
460 |
+
#: src/Helpers.php:33
|
461 |
+
msgctxt "(Admin)"
|
462 |
+
msgid "Denmark"
|
463 |
+
msgstr "Δανία"
|
464 |
+
|
465 |
+
#: src/Helpers.php:34
|
466 |
+
msgctxt "(Admin)"
|
467 |
+
msgid "Estonia"
|
468 |
+
msgstr "Εσθονία"
|
469 |
+
|
470 |
+
#: src/Helpers.php:35
|
471 |
+
msgctxt "(Admin)"
|
472 |
+
msgid "Finland"
|
473 |
+
msgstr "Φινλανδία"
|
474 |
+
|
475 |
+
#: src/Helpers.php:36
|
476 |
+
msgctxt "(Admin)"
|
477 |
+
msgid "France"
|
478 |
+
msgstr "Γαλλία"
|
479 |
+
|
480 |
+
#: src/Helpers.php:37
|
481 |
+
msgctxt "(Admin)"
|
482 |
+
msgid "Germany"
|
483 |
+
msgstr "Γερμανία"
|
484 |
+
|
485 |
+
#: src/Helpers.php:38
|
486 |
+
msgctxt "(Admin)"
|
487 |
+
msgid "Greece"
|
488 |
+
msgstr "Ελλάδα"
|
489 |
+
|
490 |
+
#: src/Helpers.php:39
|
491 |
+
msgctxt "(Admin)"
|
492 |
+
msgid "Hungary"
|
493 |
+
msgstr "Ουγγαρία"
|
494 |
+
|
495 |
+
#: src/Helpers.php:40
|
496 |
+
msgctxt "(Admin)"
|
497 |
+
msgid "Ireland"
|
498 |
+
msgstr "Ιρλανδία"
|
499 |
+
|
500 |
+
#: src/Helpers.php:41
|
501 |
+
msgctxt "(Admin)"
|
502 |
+
msgid "Italy"
|
503 |
+
msgstr "Ιταλία"
|
504 |
+
|
505 |
+
#: src/Helpers.php:42
|
506 |
+
msgctxt "(Admin)"
|
507 |
+
msgid "Latvia"
|
508 |
+
msgstr "Λετονία"
|
509 |
+
|
510 |
+
#: src/Helpers.php:43
|
511 |
+
msgctxt "(Admin)"
|
512 |
+
msgid "Lithuania"
|
513 |
+
msgstr "Λιθουανία"
|
514 |
+
|
515 |
+
#: src/Helpers.php:44
|
516 |
+
msgctxt "(Admin)"
|
517 |
+
msgid "Luxembourg"
|
518 |
+
msgstr "Λουξεμβούργο"
|
519 |
+
|
520 |
+
#: src/Helpers.php:45
|
521 |
+
msgctxt "(Admin)"
|
522 |
+
msgid "Malta"
|
523 |
+
msgstr "Μάλτα"
|
524 |
+
|
525 |
+
#: src/Helpers.php:46
|
526 |
+
msgctxt "(Admin)"
|
527 |
+
msgid "Netherlands"
|
528 |
+
msgstr "Ολλανδία"
|
529 |
+
|
530 |
+
#: src/Helpers.php:47
|
531 |
+
msgctxt "(Admin)"
|
532 |
+
msgid "Poland"
|
533 |
+
msgstr "Πολωνία"
|
534 |
+
|
535 |
+
#: src/Helpers.php:48
|
536 |
+
msgctxt "(Admin)"
|
537 |
+
msgid "Portugal"
|
538 |
+
msgstr "Πορτογαλία"
|
539 |
+
|
540 |
+
#: src/Helpers.php:49
|
541 |
+
msgctxt "(Admin)"
|
542 |
+
msgid "Romania"
|
543 |
+
msgstr "Ρουμανία"
|
544 |
+
|
545 |
+
#: src/Helpers.php:50
|
546 |
+
msgctxt "(Admin)"
|
547 |
+
msgid "Slovakia"
|
548 |
+
msgstr "Σλοβακία"
|
549 |
+
|
550 |
+
#: src/Helpers.php:51
|
551 |
+
msgctxt "(Admin)"
|
552 |
+
msgid "Slovenia"
|
553 |
+
msgstr "Σλοβενία"
|
554 |
+
|
555 |
+
#: src/Helpers.php:52
|
556 |
+
msgctxt "(Admin)"
|
557 |
+
msgid "Spain"
|
558 |
+
msgstr "Ισπανία"
|
559 |
+
|
560 |
+
#: src/Helpers.php:53
|
561 |
+
msgctxt "(Admin)"
|
562 |
+
msgid "Sweden"
|
563 |
+
msgstr "Σουηδία"
|
564 |
+
|
565 |
+
#: src/Helpers.php:54
|
566 |
+
msgctxt "(Admin)"
|
567 |
+
msgid "United Kingdom"
|
568 |
+
msgstr "Ηνωμένο Βασίλειο"
|
569 |
+
|
570 |
+
#: src/Helpers.php:69
|
571 |
+
msgctxt "(Admin)"
|
572 |
+
msgid "Iceland"
|
573 |
+
msgstr "Ισλανδία"
|
574 |
+
|
575 |
+
#: src/Helpers.php:70
|
576 |
+
msgctxt "(Admin)"
|
577 |
+
msgid "Norway"
|
578 |
+
msgstr "Νορβηγία"
|
579 |
+
|
580 |
+
#: src/Helpers.php:71
|
581 |
+
msgctxt "(Admin)"
|
582 |
+
msgid "Liechtenstein"
|
583 |
+
msgstr "Λιχτενστάιν"
|
584 |
+
|
585 |
+
#: src/Helpers.php:72
|
586 |
+
msgctxt "(Admin)"
|
587 |
+
msgid "Switzerland"
|
588 |
+
msgstr "Ελβετία"
|
589 |
+
|
590 |
+
#: src/Helpers.php:73
|
591 |
+
msgctxt "(Admin)"
|
592 |
+
msgid "United States"
|
593 |
+
msgstr "Ηνωμένες Πολιτείες"
|
594 |
+
|
595 |
+
#: src/Helpers.php:74
|
596 |
+
msgctxt "(Admin)"
|
597 |
+
msgid "Rest of the world"
|
598 |
+
msgstr "Υπόλοιπος κόσμος"
|
599 |
+
|
600 |
+
#: src/Helpers.php:145
|
601 |
+
msgid "An error has occurred. Please contact the site administrator."
|
602 |
+
msgstr "Παρουσιάστηκε σφάλμα. Επικοινωνήστε με τον διαχειριστή του ιστότοπου."
|
603 |
+
|
604 |
+
#: src/Installer/Installer.php:135
|
605 |
+
msgctxt "(Admin)"
|
606 |
+
msgid "Setup Wizard"
|
607 |
+
msgstr ""
|
608 |
+
|
609 |
+
#: src/Installer/Steps/ConfigurationPages.php:23
|
610 |
+
#: src/Installer/Steps/PolicySettings.php:23
|
611 |
+
#: src/Installer/Steps/PolicySettings.php:48
|
612 |
+
msgctxt "(Admin)"
|
613 |
+
msgid "— Create a new page —"
|
614 |
+
msgstr "— Δημιουργήστε μια νέα σελίδα —"
|
615 |
+
|
616 |
+
#: src/Installer/Steps/PolicySettings.php:38
|
617 |
+
msgctxt "(Admin)"
|
618 |
+
msgid ""
|
619 |
+
"We have automatically selected your WooCommerce Terms & Conditions page."
|
620 |
+
msgstr ""
|
621 |
+
"Έχουμε επιλέξει αυτόματα τη σελίδα σας όρους WooCommerce & προϋποθέσεις."
|
622 |
+
|
623 |
+
#: src/Modules/ContactForm7/ContactForm7.php:35
|
624 |
+
msgctxt "(Admin)"
|
625 |
+
msgid "gdpr terms txt"
|
626 |
+
msgstr ""
|
627 |
+
|
628 |
+
#: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
|
629 |
+
#, php-format
|
630 |
+
msgid "Nonce error for action \"%s\". Please go back and try again!"
|
631 |
+
msgstr "Σφάλμα nonce για ενέργεια \"%s\". Επιστρέψτε και δοκιμάστε ξανά!"
|
632 |
+
|
633 |
+
#: src/Router.php:149
|
634 |
+
msgctxt "(Admin)"
|
635 |
+
msgid "You do not have the required permissions to perform this action!"
|
636 |
+
msgstr ""
|
637 |
+
"Δεν έχετε τα απαιτούμενα δικαιώματα για να εκτελέσετε αυτήν την ενέργεια!"
|
638 |
+
|
639 |
+
#: views/admin/consent.php:3
|
640 |
+
msgctxt "(Admin)"
|
641 |
+
msgid "Default consent types"
|
642 |
+
msgstr "Προεπιλεγμένοι τύποι συγκατάθεσης"
|
643 |
+
|
644 |
+
#: views/admin/consent.php:4
|
645 |
+
msgctxt "(Admin)"
|
646 |
+
msgid ""
|
647 |
+
"These are the consent types that have been automatically registered by the "
|
648 |
+
"framework or a plugin."
|
649 |
+
msgstr ""
|
650 |
+
|
651 |
+
#: views/admin/consent.php:7 views/admin/consent.php:52
|
652 |
+
msgctxt "(Admin)"
|
653 |
+
msgid "Slug"
|
654 |
+
msgstr ""
|
655 |
+
|
656 |
+
#: views/admin/consent.php:8 views/admin/consent.php:38
|
657 |
+
#: views/admin/consent.php:60
|
658 |
+
msgctxt "(Admin)"
|
659 |
+
msgid "Title"
|
660 |
+
msgstr "Τίτλος"
|
661 |
+
|
662 |
+
#: views/admin/consent.php:9 views/admin/consent.php:41
|
663 |
+
#: views/admin/consent.php:63
|
664 |
+
msgctxt "(Admin)"
|
665 |
+
msgid "Description"
|
666 |
+
msgstr "Περιγραφή"
|
667 |
+
|
668 |
+
#: views/admin/consent.php:10
|
669 |
+
msgctxt "(Admin)"
|
670 |
+
msgid "Visibility"
|
671 |
+
msgstr "Εμφάνιση"
|
672 |
+
|
673 |
+
#: views/admin/consent.php:18
|
674 |
+
msgctxt "(Admin)"
|
675 |
+
msgid "Visible"
|
676 |
+
msgstr "Ορατό"
|
677 |
+
|
678 |
+
#: views/admin/consent.php:20
|
679 |
+
msgctxt "(Admin)"
|
680 |
+
msgid "Hidden"
|
681 |
+
msgstr "Κρυφό"
|
682 |
+
|
683 |
+
#: views/admin/consent.php:29
|
684 |
+
msgctxt "(Admin)"
|
685 |
+
msgid "Custom consent types"
|
686 |
+
msgstr " Προσαρμοσμένοι τύποι συγκατάθεσης"
|
687 |
+
|
688 |
+
#: views/admin/consent.php:30
|
689 |
+
msgctxt "(Admin)"
|
690 |
+
msgid ""
|
691 |
+
"Here you can add custom consent types to track. They will not be used "
|
692 |
+
"anywhere by default - you will need to build an integration for each of them."
|
693 |
+
msgstr ""
|
694 |
+
"Εδώ μπορείτε να προσθέσετε προσαρμοσμένους τύπους συγκατάθεσης για "
|
695 |
+
"παρακολούθηση. Δεν θα χρησιμοποιηθούν οπουδήποτε από προεπιλογή - θα "
|
696 |
+
"χρειαστεί να οικοδομήσετε μια ενοποίηση για καθένα από αυτά."
|
697 |
+
|
698 |
+
#: views/admin/consent.php:35
|
699 |
+
msgctxt "(Admin)"
|
700 |
+
msgid "Machine-readable slug"
|
701 |
+
msgstr ""
|
702 |
+
|
703 |
+
#: views/admin/consent.php:44 views/admin/consent.php:68
|
704 |
+
msgctxt "(Admin)"
|
705 |
+
msgid "Visible?"
|
706 |
+
msgstr ""
|
707 |
+
|
708 |
+
#: views/admin/consent.php:72
|
709 |
+
msgctxt "(Admin)"
|
710 |
+
msgid "Remove"
|
711 |
+
msgstr "Αφαίρεση"
|
712 |
+
|
713 |
+
#: views/admin/consent.php:93
|
714 |
+
msgctxt "(Admin)"
|
715 |
+
msgid "Additional info"
|
716 |
+
msgstr "Επιπλέον πληροφορίες"
|
717 |
+
|
718 |
+
#: views/admin/consent.php:95
|
719 |
+
msgctxt "(Admin)"
|
720 |
+
msgid ""
|
721 |
+
"This text will be displayed to your data subjects on the Privacy Tools page."
|
722 |
+
msgstr ""
|
723 |
+
"Αυτό το κείμενο θα εμφανιστεί στα υποκείμενα των δεδομένων σας στη σελίδα "
|
724 |
+
"εργαλεία απορρήτου."
|
725 |
+
|
726 |
+
#: views/admin/data-subjects/search-form.php:2
|
727 |
+
msgctxt "(Admin)"
|
728 |
+
msgid ""
|
729 |
+
"On this page, you can find which data subjects personal data you are storing "
|
730 |
+
"and download, export or delete it."
|
731 |
+
msgstr ""
|
732 |
+
"Σε αυτή τη σελίδα μπορείτε να βρείτε ποια δεδομένα θέματα προσωπικών "
|
733 |
+
"δεδομένων, μπορείτε να αποθηκεύετε και να κατεβάσετε, εξαγωγή ή να "
|
734 |
+
"διαγράψετε αυτό."
|
735 |
+
|
736 |
+
#: views/admin/data-subjects/search-form.php:10
|
737 |
+
msgctxt "(Admin)"
|
738 |
+
msgid "Find data subject by email"
|
739 |
+
msgstr "Βρείτε το υποκείμενο των δεδομένων μέσω ηλεκτρονικού ταχυδρομείου"
|
740 |
+
|
741 |
+
#: views/admin/data-subjects/search-form.php:11
|
742 |
+
msgctxt "(Admin)"
|
743 |
+
msgid "Email address"
|
744 |
+
msgstr "Διεύθυνση Email"
|
745 |
+
|
746 |
+
#: views/admin/data-subjects/search-form.php:16
|
747 |
+
msgctxt "(Admin)"
|
748 |
+
msgid "Search"
|
749 |
+
msgstr "Αναζήτηση"
|
750 |
+
|
751 |
+
#: views/admin/data-subjects/search-results.php:7
|
752 |
+
msgctxt "(Admin)"
|
753 |
+
msgid "Username"
|
754 |
+
msgstr "Όνομα χρήστη"
|
755 |
+
|
756 |
+
#: views/admin/data-subjects/search-results.php:12
|
757 |
+
msgctxt "(Admin)"
|
758 |
+
msgid "is not a registered user."
|
759 |
+
msgstr "δεν είναι εγγεγραμμένος χρήστης."
|
760 |
+
|
761 |
+
#: views/admin/data-subjects/search-results.php:16
|
762 |
+
msgctxt "(Admin)"
|
763 |
+
msgid "Download data (html)"
|
764 |
+
msgstr "Λήψη δεδομένων (html)"
|
765 |
+
|
766 |
+
#: views/admin/data-subjects/search-results.php:17
|
767 |
+
msgctxt "(Admin)"
|
768 |
+
msgid "Export data (json)"
|
769 |
+
msgstr "Εξαγωγή δεδομένων (json)"
|
770 |
+
|
771 |
+
#: views/admin/data-subjects/search-results.php:21
|
772 |
+
msgctxt "(Admin)"
|
773 |
+
msgid ""
|
774 |
+
"This user has admin capabilities. Deleting data via this interface is "
|
775 |
+
"disabled."
|
776 |
+
msgstr ""
|
777 |
+
"Αυτός ο χρήστης έχει τις δυνατότητες διαχείρισης. Διαγραφή δεδομένων μέσω "
|
778 |
+
"αυτής της διασύνδεσης είναι απενεργοποιημένη."
|
779 |
+
|
780 |
+
#: views/admin/data-subjects/search-results.php:24
|
781 |
+
msgctxt "(Admin)"
|
782 |
+
msgid "Anonymize data"
|
783 |
+
msgstr "Ανωνυμία δεδομένων"
|
784 |
+
|
785 |
+
#: views/admin/data-subjects/search-results.php:25
|
786 |
+
msgctxt "(Admin)"
|
787 |
+
msgid "Delete data"
|
788 |
+
msgstr "Διαγραφή Δεδομένων"
|
789 |
+
|
790 |
+
#: views/admin/data-subjects/search-results.php:29
|
791 |
+
msgctxt "(Admin)"
|
792 |
+
msgid "No data found!"
|
793 |
+
msgstr "Δεν βρέθηκαν δεδομένα"
|
794 |
+
|
795 |
+
#: views/admin/general/delete-action-email.php:5
|
796 |
+
#: views/admin/general/export-action-email.php:5
|
797 |
+
#: views/installer/steps/configuration-settings.php:29
|
798 |
+
#: views/installer/steps/configuration-settings.php:79
|
799 |
+
msgid "Email address"
|
800 |
+
msgstr "Διεύθυνση ηλεκτρονικού ταχυδρομείου"
|
801 |
+
|
802 |
+
#: views/admin/general/delete-action-reassign.php:3
|
803 |
+
#: views/installer/steps/configuration-settings.php:50
|
804 |
+
msgctxt "(Admin)"
|
805 |
+
msgid "Delete content"
|
806 |
+
msgstr "Διαγραφή περιεχομένου"
|
807 |
+
|
808 |
+
#: views/admin/general/delete-action-reassign.php:6
|
809 |
+
#: views/installer/steps/configuration-settings.php:53
|
810 |
+
msgctxt "(Admin)"
|
811 |
+
msgid "Reassign content to a user"
|
812 |
+
msgstr "Αντιστοιχίστε εκ νέου το περιεχόμενο σε ένα χρήστη"
|
813 |
+
|
814 |
+
#: views/admin/general/delete-action-reassign.php:10
|
815 |
+
msgctxt "(Admin)"
|
816 |
+
msgid ""
|
817 |
+
"If the user has submitted any content on your site, should it be deleted or "
|
818 |
+
"reassigned to another user?"
|
819 |
+
msgstr ""
|
820 |
+
"Εάν ο χρήστης έχει υποβάλει οποιοδήποτε περιεχόμενο στην ιστοσελίδα σας, "
|
821 |
+
"πρέπει να διαγραφεί και να εκχωρηθούν σε κάποιον άλλο χρήστη;"
|
822 |
+
|
823 |
+
#: views/admin/general/description-data-page.php:2
|
824 |
+
msgctxt "(Admin)"
|
825 |
+
msgid ""
|
826 |
+
"Select the page where users can go to control their data. This page must "
|
827 |
+
"contain the [gdpr_privacy_tools] shortcode."
|
828 |
+
msgstr ""
|
829 |
+
"Επιλέξτε τη σελίδα όπου οι χρήστες μπορούν να πάνε για τον έλεγχο των "
|
830 |
+
"δεδομένων τους. Αυτή η σελίδα πρέπει να περιέχει το shortcode "
|
831 |
+
"[gdpr_privacy_tools]."
|
832 |
+
|
833 |
+
#: views/admin/general/enable.php:9
|
834 |
+
msgctxt "(Admin)"
|
835 |
+
msgid "Enable the view, export and forget functionality for users and visitors"
|
836 |
+
msgstr ""
|
837 |
+
"Ενεργοποιήσετε την προβολή, να εξαγάγετε και να ξεχάσετε τη λειτουργικότητα "
|
838 |
+
"για τους χρήστες και επισκέπτες."
|
839 |
+
|
840 |
+
#: views/admin/general/enable.php:12
|
841 |
+
msgctxt "(Admin)"
|
842 |
+
msgid ""
|
843 |
+
"Enable the Privacy Tools page on front-end and dashboard. This allows "
|
844 |
+
"visitors to request viewing and deleting their personal data and withdraw "
|
845 |
+
"consents."
|
846 |
+
msgstr ""
|
847 |
+
"Ενεργοποίηση της σελίδας εργαλείων προστασίας προσωπικών δεδομένων για front-"
|
848 |
+
"end και ταμπλό. Αυτό επιτρέπει στους επισκέπτες να ζητήσουν προβολή και "
|
849 |
+
"διαγραφή των προσωπικών τους δεδομένων και να αποσύρουν τις συναινέσεις."
|
850 |
+
|
851 |
+
#: views/admin/general/theme-compatibility.php:9
|
852 |
+
#: views/installer/steps/integrations.php:21
|
853 |
+
msgctxt "(Admin)"
|
854 |
+
msgid ""
|
855 |
+
"Automatically add Privacy Policy and Privacy Tools links to your site footer."
|
856 |
+
msgstr ""
|
857 |
+
"Αυτόματα προσθέστε πολιτική απορρήτου και προστασίας προσωπικών δεδομένων "
|
858 |
+
"εργαλεία συνδέσεις υποσέλιδο ιστοσελίδα σας."
|
859 |
+
|
860 |
+
#: views/admin/notices/header.php:4 views/admin/settings-page.php:3
|
861 |
+
#: views/installer/header.php:23
|
862 |
+
msgctxt "(Admin)"
|
863 |
+
msgid "The GDPR Framework"
|
864 |
+
msgstr ""
|
865 |
+
|
866 |
+
#: views/admin/notices/helper-autoinstall.php:2
|
867 |
+
msgctxt "(Admin)"
|
868 |
+
msgid ""
|
869 |
+
"A Privacy Policy page has been created, but it is empty. You can generate a "
|
870 |
+
"policy template on this page."
|
871 |
+
msgstr ""
|
872 |
+
"Έχει δημιουργηθεί μια σελίδα Πολιτική προστασίας προσωπικών δεδομένων, αλλά "
|
873 |
+
"είναι κενή. Μπορείτε να δημιουργήσετε ένα πρότυπο πολιτικής σε αυτήν τη "
|
874 |
+
"σελίδα."
|
875 |
+
|
876 |
+
#: views/admin/notices/helper-policy.php:2
|
877 |
+
msgctxt "(Admin)"
|
878 |
+
msgid ""
|
879 |
+
"Heads up - your Privacy Policy still requires some attention. Find the "
|
880 |
+
"places marked with [TODO] and replace them with real content!"
|
881 |
+
msgstr ""
|
882 |
+
"Heads up - πολιτική απορρήτου σας εξακολουθεί να απαιτεί κάποια προσοχή. "
|
883 |
+
"Βρείτε τα σημεία που σημειώνονται με [TODO] και την αντικατάστασή τους με "
|
884 |
+
"πραγματικό περιεχόμενο!"
|
885 |
+
|
886 |
+
#: views/admin/notices/helper-tools.php:2
|
887 |
+
msgctxt "(Admin)"
|
888 |
+
msgid "The contents of this page should contain the [gdpr_tools] shortcode."
|
889 |
+
msgstr ""
|
890 |
+
"Το περιεχόμενο αυτής της σελίδας θα πρέπει να περιέχει το shortcode "
|
891 |
+
"[gdpr_tools]."
|
892 |
+
|
893 |
+
#: views/admin/privacy-policy/description-policy-page.php:2
|
894 |
+
msgctxt "(Admin)"
|
895 |
+
msgid "Select the page which will contain your Privacy Policy"
|
896 |
+
msgstr "Επιλέξτε τη σελίδα που θα περιέχει την πολιτική απορρήτου σας"
|
897 |
+
|
898 |
+
#: views/admin/privacy-policy/generated.php:3
|
899 |
+
msgctxt "(Admin)"
|
900 |
+
msgid "Your Privacy Policy has been generated."
|
901 |
+
msgstr "Η Πολιτική προστασίας προσωπικών δεδομένων σας έχει δημιουργηθεί."
|
902 |
+
|
903 |
+
#: views/admin/privacy-policy/generated.php:20
|
904 |
+
msgctxt "(Admin)"
|
905 |
+
msgid "« Back"
|
906 |
+
msgstr "« Πίσω"
|
907 |
+
|
908 |
+
#: views/admin/privacy-policy/header.php:2
|
909 |
+
msgctxt "(Admin)"
|
910 |
+
msgid ""
|
911 |
+
"This page allows you to generate a Privacy Policy based on the information "
|
912 |
+
"you entered below."
|
913 |
+
msgstr ""
|
914 |
+
"Η σελίδα αυτή σας επιτρέπει να δημιουργήσετε μια πολιτική απορρήτου που "
|
915 |
+
"βασίζεται στις πληροφορίες που καθορίσατε παρακάτω."
|
916 |
+
|
917 |
+
#: views/admin/settings-page.php:31
|
918 |
+
#, php-format
|
919 |
+
msgctxt "(Admin)"
|
920 |
+
msgid "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
921 |
+
msgstr ""
|
922 |
+
|
923 |
+
#: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
|
924 |
+
msgctxt "(Admin)"
|
925 |
+
msgid "Need more info?"
|
926 |
+
msgstr "Χρειάζεστε περισσότερες πληροφορίες;"
|
927 |
+
|
928 |
+
#: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
|
929 |
+
msgctxt "(Admin)"
|
930 |
+
msgid "Site Owner's guide to GDPR"
|
931 |
+
msgstr ""
|
932 |
+
|
933 |
+
#: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
|
934 |
+
msgctxt "(Admin)"
|
935 |
+
msgid "Read the full guide on GDPR compliance."
|
936 |
+
msgstr "Διαβάστε τον πλήρη οδηγό σχετικά με τη συμμόρφωση του GDPR."
|
937 |
+
|
938 |
+
#: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
|
939 |
+
msgctxt "(Admin)"
|
940 |
+
msgid "Knowledge base"
|
941 |
+
msgstr "Γνωσιακή Βάση"
|
942 |
+
|
943 |
+
#: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
|
944 |
+
msgctxt "(Admin)"
|
945 |
+
msgid "Check out the knowledge base for common questions and answers."
|
946 |
+
msgstr "Ελέγξτε την Γνωσιακή βάση για συχνές ερωτήσεις και απαντήσεις."
|
947 |
+
|
948 |
+
#: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
|
949 |
+
msgctxt "(Admin)"
|
950 |
+
msgid "Developer's guide to GDPR"
|
951 |
+
msgstr "Οδηγός για προγραμματιστές να GDPR"
|
952 |
+
|
953 |
+
#: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
|
954 |
+
msgctxt "(Admin)"
|
955 |
+
msgid "We have a thorough guide to help making custom sites compliant."
|
956 |
+
msgstr ""
|
957 |
+
|
958 |
+
#: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
|
959 |
+
msgctxt "(Admin)"
|
960 |
+
msgid "Need help?"
|
961 |
+
msgstr "Χρειάζεστε βοήθεια;"
|
962 |
+
|
963 |
+
#: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
|
964 |
+
msgctxt "(Admin)"
|
965 |
+
msgid "Submit a support request"
|
966 |
+
msgstr "Υποβάλετε ένα αίτημα υποστήριξης"
|
967 |
+
|
968 |
+
#: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
|
969 |
+
msgctxt "(Admin)"
|
970 |
+
msgid ""
|
971 |
+
"Found a bug or problem with the plugin? Post in the wordpress.org support "
|
972 |
+
"forum."
|
973 |
+
msgstr ""
|
974 |
+
"Βρέθηκε ένα bug ή πρόβλημα με το plugin; Δημοσίευση στα φόρουμ υποστήριξης "
|
975 |
+
"της wordpress.org."
|
976 |
+
|
977 |
+
#: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
|
978 |
+
msgctxt "(Admin)"
|
979 |
+
msgid "Request a consultation"
|
980 |
+
msgstr "Αίτηση διαβούλευσης"
|
981 |
+
|
982 |
+
#: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
|
983 |
+
msgctxt "(Admin)"
|
984 |
+
msgid ""
|
985 |
+
"Need development or legal assistance in making your site compliant? We can "
|
986 |
+
"help!"
|
987 |
+
msgstr ""
|
988 |
+
"Ανάγκη ανάπτυξης ή νομική βοήθεια στο να καταστεί συμβατό με το site σας; "
|
989 |
+
"Μπορούμε να σας βοηθήσουμε!"
|
990 |
+
|
991 |
+
#: views/admin/wizard-buttons.php:2
|
992 |
+
msgctxt "(Admin)"
|
993 |
+
msgid "Restart setup wizard"
|
994 |
+
msgstr "Κάντε επανεκκίνηση του οδηγού εγκατάστασης"
|
995 |
+
|
996 |
+
#: views/email/action-export.php:8 views/email/action-forget.php:12
|
997 |
+
msgctxt "(Admin)"
|
998 |
+
msgid ""
|
999 |
+
"This email is just for your information. You don't need to take any action"
|
1000 |
+
msgstr ""
|
1001 |
+
"Αυτό το email είναι μόνο για τις πληροφορίες σας. Δεν χρειάζεται να προβείτε "
|
1002 |
+
"σε καμία ενέργεια"
|
1003 |
+
|
1004 |
+
#: views/email/action-forget.php:8
|
1005 |
+
msgctxt "(Admin)"
|
1006 |
+
msgid "The data subject had a user account on your website."
|
1007 |
+
msgstr ""
|
1008 |
+
"Το υποκείμενο των δεδομένων είχε ένα λογαριασμό χρήστη στην ιστοσελίδα σας."
|
1009 |
+
|
1010 |
+
#: views/email/identify-data-subject.php:2
|
1011 |
+
msgid "Someone has requested access to your data on"
|
1012 |
+
msgstr "Κάποιος έχει ζητήσει πρόσβαση στα δεδομένα σας στο"
|
1013 |
+
|
1014 |
+
#: views/email/identify-data-subject.php:3
|
1015 |
+
msgid "If this was a mistake, just ignore this email and nothing will happen."
|
1016 |
+
msgstr ""
|
1017 |
+
"Εάν αυτό ήταν λάθος, απλά αγνοήστε αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου "
|
1018 |
+
"και τίποτα δεν θα συμβεί."
|
1019 |
+
|
1020 |
+
#: views/email/identify-data-subject.php:4
|
1021 |
+
msgid "To manage your data, visit the following address:"
|
1022 |
+
msgstr ""
|
1023 |
+
"Για να διαχειριστείτε τα δεδομένα σας, επισκεφθείτε την ακόλουθη διεύθυνση:"
|
1024 |
+
|
1025 |
+
#: views/email/identify-data-subject.php:10
|
1026 |
+
msgid "This link is valid for 15 minutes."
|
1027 |
+
msgstr "Αυτός ο σύνδεσμος ισχύει για 15 λεπτά."
|
1028 |
+
|
1029 |
+
#: views/email/no-data.php:2
|
1030 |
+
msgid "Someone has requested information about your personal data on"
|
1031 |
+
msgstr ""
|
1032 |
+
"Κάποιος έχει ζητήσει πληροφορίες σχετικά με τα προσωπικά σας δεδομένα στο"
|
1033 |
+
|
1034 |
+
#: views/email/no-data.php:3
|
1035 |
+
msgid "None of your personal data is stored on"
|
1036 |
+
msgstr "Κανένα από τα προσωπικά σας δεδομένα δεν αποθηκεύεται στο"
|
1037 |
+
|
1038 |
+
#: views/email/no-data.php:5
|
1039 |
+
msgid ""
|
1040 |
+
"If this was a mistake or you did not request this email, just ignore it and "
|
1041 |
+
"nothing will happen."
|
1042 |
+
msgstr ""
|
1043 |
+
"Εάν αυτό ήταν λάθος ή δεν ζητήσατε αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου, "
|
1044 |
+
"απλώς το αγνοήστε και δεν θα συμβεί τίποτα."
|
1045 |
+
|
1046 |
+
#: views/email/request-export.php:13 views/email/request-forget.php:13
|
1047 |
+
msgctxt "(Admin)"
|
1048 |
+
msgid "As a reminder: according to GDPR, you have 30 days to comply."
|
1049 |
+
msgstr ""
|
1050 |
+
"Ως μια υπενθύμιση: σύμφωνα με το GDPR, έχετε 30 ημέρες για να συμμορφωθεί."
|
1051 |
+
|
1052 |
+
#: views/global/delete-action.php:2
|
1053 |
+
msgctxt "(Admin)"
|
1054 |
+
msgid "Automatically anonymize data"
|
1055 |
+
msgstr "Αυτόματη ανώνυμη επεξεργασία δεδομένων"
|
1056 |
+
|
1057 |
+
#: views/global/delete-action.php:5
|
1058 |
+
msgctxt "(Admin)"
|
1059 |
+
msgid "Automatically delete data"
|
1060 |
+
msgstr "Αυτόματη διαγραφή δεδομένων"
|
1061 |
+
|
1062 |
+
#: views/global/delete-action.php:9
|
1063 |
+
msgctxt "(Admin)"
|
1064 |
+
msgid "Automatically anonymize data and notify me via email"
|
1065 |
+
msgstr "Ανωνυμία δεδομένων αυτόματα και να ειδοποιούμαι μέσω e-mail"
|
1066 |
+
|
1067 |
+
#: views/global/delete-action.php:13
|
1068 |
+
msgctxt "(Admin)"
|
1069 |
+
msgid "Automatically delete data and notify me via email"
|
1070 |
+
msgstr "Αυτόματη διαγραφή δεδομένων και να ειδοποιούμαι μέσω e-mail"
|
1071 |
+
|
1072 |
+
#: views/global/delete-action.php:16 views/global/export-action.php:10
|
1073 |
+
msgctxt "(Admin)"
|
1074 |
+
msgid "Only notify me via email"
|
1075 |
+
msgstr "Να ειδοποιούμαι μόνο μέσω ηλεκτρονικού ταχυδρομείου"
|
1076 |
+
|
1077 |
+
#: views/global/export-action.php:2
|
1078 |
+
msgctxt "(Admin)"
|
1079 |
+
msgid "Automatically download data"
|
1080 |
+
msgstr "Αυτόματη λήψη δεδομένων"
|
1081 |
+
|
1082 |
+
#: views/global/export-action.php:6
|
1083 |
+
msgctxt "(Admin)"
|
1084 |
+
msgid "Automatically download data and notify me via email"
|
1085 |
+
msgstr "Αυτόματη λήψη δεδομένων και να ειδοποιούμαι μέσω e-mail"
|
1086 |
+
|
1087 |
+
#: views/installer/continue-notice.php:2
|
1088 |
+
msgctxt "(Admin)"
|
1089 |
+
msgid "The The GDPR Framework setup has not been finalized yet."
|
1090 |
+
msgstr ""
|
1091 |
+
|
1092 |
+
#: views/installer/continue-notice.php:3
|
1093 |
+
msgctxt "(Admin)"
|
1094 |
+
msgid "You can continue the setup at any time."
|
1095 |
+
msgstr "Μπορείτε να συνεχίσετε τη ρύθμιση οποιαδήποτε στιγμή."
|
1096 |
+
|
1097 |
+
#: views/installer/continue-notice.php:6
|
1098 |
+
msgctxt "(Admin)"
|
1099 |
+
msgid "Continue the setup wizard"
|
1100 |
+
msgstr ""
|
1101 |
+
|
1102 |
+
#: views/installer/continue-notice.php:9
|
1103 |
+
msgctxt "(Admin)"
|
1104 |
+
msgid "Hide this message"
|
1105 |
+
msgstr "Απόκρυψη αυτού του μηνύματος"
|
1106 |
+
|
1107 |
+
#: views/installer/footer.php:7
|
1108 |
+
msgid "Back"
|
1109 |
+
msgstr "Πίσω"
|
1110 |
+
|
1111 |
+
#: views/installer/header.php:26
|
1112 |
+
msgctxt "(Admin)"
|
1113 |
+
msgid "I need help"
|
1114 |
+
msgstr "Χρειάζομαι βοήθεια"
|
1115 |
+
|
1116 |
+
#: views/installer/header.php:29
|
1117 |
+
msgctxt "(Admin)"
|
1118 |
+
msgid "Developer Docs"
|
1119 |
+
msgstr "Έγγραφα για developers"
|
1120 |
+
|
1121 |
+
#: views/installer/header.php:36
|
1122 |
+
msgctxt "(Admin)"
|
1123 |
+
msgid "Configuration"
|
1124 |
+
msgstr ""
|
1125 |
+
|
1126 |
+
#: views/installer/header.php:46
|
1127 |
+
msgctxt "(Admin)"
|
1128 |
+
msgid "Forms & Consent"
|
1129 |
+
msgstr "Έντυπα συγκατάθεσης"
|
1130 |
+
|
1131 |
+
#: views/installer/header.php:51
|
1132 |
+
msgctxt "(Admin)"
|
1133 |
+
msgid "Integrations"
|
1134 |
+
msgstr "Ενσωματώσεις"
|
1135 |
+
|
1136 |
+
#: views/installer/steps/configuration-settings.php:23
|
1137 |
+
#: views/installer/steps/configuration-settings.php:73
|
1138 |
+
msgctxt "(Admin)"
|
1139 |
+
msgid "Enter the email address to notify"
|
1140 |
+
msgstr "Εισάγετε τη διεύθυνση email για να κοινοποίηση"
|
1141 |
+
|
1142 |
+
#: views/installer/steps/disclaimer.php:21
|
1143 |
+
msgctxt "(Admin)"
|
1144 |
+
msgid "I accept"
|
1145 |
+
msgstr "Δέχομαι"
|
1146 |
+
|
1147 |
+
#: views/installer/welcome-notice.php:7
|
1148 |
+
msgctxt "(Admin)"
|
1149 |
+
msgid "Run the setup wizard"
|
1150 |
+
msgstr ""
|
1151 |
+
|
1152 |
+
#: views/installer/welcome-notice.php:11
|
1153 |
+
msgctxt "(Admin)"
|
1154 |
+
msgid "Auto-install pages"
|
1155 |
+
msgstr "Αυτόματη εγκατάσταση σελίδων"
|
1156 |
+
|
1157 |
+
#: views/installer/welcome-notice.php:15
|
1158 |
+
msgctxt "(Admin)"
|
1159 |
+
msgid "Skip and install manually"
|
1160 |
+
msgstr "Χειροκίνητη εγκατάσταση"
|
1161 |
+
|
1162 |
+
#: views/modules/contact-form-7/generator-privacy.php:6
|
1163 |
+
msgctxt "(Admin)"
|
1164 |
+
msgid ""
|
1165 |
+
"This tag generates the default text for Terms & Conditions and/or Privacy "
|
1166 |
+
"Policy checkbox."
|
1167 |
+
msgstr ""
|
1168 |
+
"Αυτή η ετικέτα δημιουργεί το προεπιλεγμένο κείμενο για & όροι ή/και πολιτική "
|
1169 |
+
"προστασίας προσωπικών δεδομένων το πλαίσιο ελέγχου."
|
1170 |
+
|
1171 |
+
#: views/modules/contact-form-7/generator-privacy.php:15
|
1172 |
+
msgid "Insert"
|
1173 |
+
msgstr "Εισάγετε"
|
1174 |
+
|
1175 |
+
#: views/modules/wordpress-comments/terms-checkbox.php:6
|
1176 |
+
#: views/modules/wordpress-user/registration-terms-checkbox.php:7
|
1177 |
+
#, php-format
|
1178 |
+
msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
|
1179 |
+
msgstr "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
|
1180 |
+
|
1181 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
|
1182 |
+
msgid "Manage consents"
|
1183 |
+
msgstr "Διαχειριστείτε τις συγκαταθέσεις"
|
1184 |
+
|
1185 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
|
1186 |
+
#: views/privacy-tools/form-consent.php:6
|
1187 |
+
msgid "Here you can withdraw any consents you have given."
|
1188 |
+
msgstr "Εδώ μπορείτε να αποσύρετε τυχόν συγκαταθέσεις που έχετε δώσει."
|
1189 |
+
|
1190 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
|
1191 |
+
#: views/privacy-tools/form-consent.php:9
|
1192 |
+
msgid "Consent types"
|
1193 |
+
msgstr "Τύποι συγκατάθεσης"
|
1194 |
+
|
1195 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
|
1196 |
+
#: views/privacy-tools/form-consent.php:24
|
1197 |
+
msgid "Withdraw"
|
1198 |
+
msgstr "Αποσύρω"
|
1199 |
+
|
1200 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
|
1201 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
|
1202 |
+
msgctxt "(Admin)"
|
1203 |
+
msgid "Delete this user and all data"
|
1204 |
+
msgstr "Διαγραφή αυτού του χρήστη και όλα τα δεδομένα"
|
1205 |
+
|
1206 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
|
1207 |
+
msgctxt "(Admin)"
|
1208 |
+
msgid "Delete my data"
|
1209 |
+
msgstr "Διαγράψτε τα δεδομένα μου"
|
1210 |
+
|
1211 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
|
1212 |
+
#: views/privacy-tools/form-delete.php:13
|
1213 |
+
msgid "Delete all data we have gathered about you."
|
1214 |
+
msgstr "Διαγράψτε όλα τα δεδομένα που έχουμε συγκεντρώσει για εσάς."
|
1215 |
+
|
1216 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
|
1217 |
+
#: views/privacy-tools/form-delete.php:14
|
1218 |
+
msgid "If you have a user account on our site, it will also be deleted."
|
1219 |
+
msgstr ""
|
1220 |
+
"Εάν διαθέτετε λογαριασμό χρήστη στον ιστότοπό μας, θα διαγραφεί επίσης."
|
1221 |
+
|
1222 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
|
1223 |
+
#: views/privacy-tools/form-delete.php:15
|
1224 |
+
msgid "Be careful - this action is permanent and CANNOT be undone."
|
1225 |
+
msgstr "ΠΡΟΣΟΧΗ - αυτή η ενέργεια είναι μόνιμη και ΔΕΝ μπορεί να ακυρωθεί."
|
1226 |
+
|
1227 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
|
1228 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
|
1229 |
+
msgctxt "(Admin)"
|
1230 |
+
msgid ""
|
1231 |
+
"You seem to have an administrator or equivalent role, so deleting/"
|
1232 |
+
"anonymizing via this page is disabled."
|
1233 |
+
msgstr ""
|
1234 |
+
|
1235 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:7
|
1236 |
+
#: views/privacy-tools/form-export.php:1
|
1237 |
+
msgid "Download your data"
|
1238 |
+
msgstr "Κατεβάστε τα δεδομένα σας"
|
1239 |
+
|
1240 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:12
|
1241 |
+
#: views/privacy-tools/form-export.php:13
|
1242 |
+
msgid "Download as table"
|
1243 |
+
msgstr "Κάντε λήψη ως πίνακας"
|
1244 |
+
|
1245 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:15
|
1246 |
+
#: views/privacy-tools/form-export.php:22
|
1247 |
+
msgid "Export as JSON"
|
1248 |
+
msgstr "Εξαγωγή ως JSON αρχειο"
|
1249 |
+
|
1250 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:19
|
1251 |
+
#: views/privacy-tools/form-export.php:4
|
1252 |
+
msgid "You can download all your data formatted as a table for viewing."
|
1253 |
+
msgstr ""
|
1254 |
+
"Μπορείτε να κατεβάσετε όλα τα δεδομένα σας μορφοποιημένα ως πίνακα για "
|
1255 |
+
"προβολή."
|
1256 |
+
|
1257 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:20
|
1258 |
+
#: views/privacy-tools/form-export.php:5
|
1259 |
+
msgid "Alternatively, you can export it in machine-readable JSON format."
|
1260 |
+
msgstr ""
|
1261 |
+
"Εναλλακτικά, μπορείτε να την εξαγάγετε σε μορφή JSON αναγνώσιμη από μηχανή."
|
1262 |
+
|
1263 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
|
1264 |
+
msgctxt "(Admin)"
|
1265 |
+
msgid "Delete user and all data"
|
1266 |
+
msgstr "Διαγραφή χρήστη και όλα τα δεδομένα"
|
1267 |
+
|
1268 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
|
1269 |
+
msgctxt "(Admin)"
|
1270 |
+
msgid "Anonymize user and all data"
|
1271 |
+
msgstr "Ανωνυμία χρήστη και όλα τα δεδομένα"
|
1272 |
+
|
1273 |
+
#: views/modules/wordpress-user/dashboard/profile-page/header.php:2
|
1274 |
+
msgctxt "(Admin)"
|
1275 |
+
msgid "GDPR Data"
|
1276 |
+
msgstr ""
|
1277 |
+
|
1278 |
+
#: views/modules/wordpress-user/dashboard/profile-page/header.php:6
|
1279 |
+
msgctxt "(Admin)"
|
1280 |
+
msgid "This user has been anonymized."
|
1281 |
+
msgstr ""
|
1282 |
+
|
1283 |
+
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
|
1284 |
+
msgctxt "(Admin)"
|
1285 |
+
msgid "Consents given"
|
1286 |
+
msgstr "Συναινέσεις που έχουν χορηγηθεί"
|
1287 |
+
|
1288 |
+
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
|
1289 |
+
msgctxt "(Admin)"
|
1290 |
+
msgid "No consents given"
|
1291 |
+
msgstr ""
|
1292 |
+
|
1293 |
+
#: views/privacy-tools/form-consent.php:2
|
1294 |
+
msgid "Consent"
|
1295 |
+
msgstr "Συγκατάθεση"
|
1296 |
+
|
1297 |
+
#: views/privacy-tools/form-delete.php:1
|
1298 |
+
#: views/privacy-tools/notice-admin-role.php:1
|
1299 |
+
msgid "Delete my user and data"
|
1300 |
+
msgstr "Διαγράψτε τον χρήστη και τα δεδομένα μου"
|
1301 |
+
|
1302 |
+
#: views/privacy-tools/form-delete.php:7
|
1303 |
+
msgid "Delete my data"
|
1304 |
+
msgstr "Διαγράψτε τα δεδομένα μου"
|
1305 |
+
|
1306 |
+
#: views/privacy-tools/form-identify.php:8
|
1307 |
+
msgid "Back to Privacy Tools"
|
1308 |
+
msgstr "Πίσω στην επεξεργασία προσωπικών δεδομένων"
|
1309 |
+
|
1310 |
+
#: views/privacy-tools/form-identify.php:14
|
1311 |
+
msgid "Identify yourself!"
|
1312 |
+
msgstr "Προσδιορίστε τον εαυτό σας!"
|
1313 |
+
|
1314 |
+
#: views/privacy-tools/form-identify.php:17
|
1315 |
+
#: views/privacy-tools/form-identify.php:20
|
1316 |
+
msgid "Enter your email address"
|
1317 |
+
msgstr "Εισάγετε το email σας"
|
1318 |
+
|
1319 |
+
#: views/privacy-tools/form-identify.php:23
|
1320 |
+
msgid "Send email"
|
1321 |
+
msgstr "Αποστολή email"
|
1322 |
+
|
1323 |
+
#: views/privacy-tools/notice-admin-role.php:4
|
1324 |
+
msgctxt "(Admin)"
|
1325 |
+
msgid "Data deletion is disabled for administrative accounts."
|
1326 |
+
msgstr "Διαγραφή δεδομένων είναι απενεργοποιημένη για λογαριασμών διαχειριστή."
|
1327 |
+
|
1328 |
+
#: views/privacy-tools/notices.php:3
|
1329 |
+
msgid ""
|
1330 |
+
"We will send you an email with the link to access your data. Please check "
|
1331 |
+
"your spam folder as well!"
|
1332 |
+
msgstr ""
|
1333 |
+
"Θα σας στείλουμε ένα μήνυμα ηλεκτρονικού ταχυδρομείου με το σύνδεσμο για να "
|
1334 |
+
"έχετε πρόσβαση στα δεδομένα σας. Ελέγξτε επίσης το φάκελο spam σας!"
|
1335 |
+
|
1336 |
+
#: views/privacy-tools/notices.php:7
|
1337 |
+
msgid "The email you entered does not appear to be a valid email."
|
1338 |
+
msgstr "Το email που καταχωρίσατε δεν φαίνεται να είναι έγκυρο."
|
1339 |
+
|
1340 |
+
#: views/privacy-tools/notices.php:11
|
1341 |
+
msgid "Sorry - the link seems to have expired. Please try again!"
|
1342 |
+
msgstr ""
|
1343 |
+
"Λυπούμαστε - ο σύνδεσμος φαίνεται να έχει λήξει. ΠΑΡΑΚΑΛΩ προσπαθησε ξανα!"
|
1344 |
+
|
1345 |
+
#: views/privacy-tools/notices.php:23
|
1346 |
+
msgid "Your personal data has been removed!"
|
1347 |
+
msgstr "Τα προσωπικά σας δεδομένα έχουν αφαιρεθεί!"
|
1348 |
+
|
1349 |
+
#: views/privacy-tools/privacy-tools.php:5
|
1350 |
+
msgid "You are identified as"
|
1351 |
+
msgstr "Έχετε αναγνωριστεί ως"
|
languages/gdpr-framework-et.mo
CHANGED
Binary file
|
languages/gdpr-framework-et.po
CHANGED
@@ -7,55 +7,55 @@ msgid ""
|
|
7 |
msgstr ""
|
8 |
"Project-Id-Version: The GDPR Framework 1.0\n"
|
9 |
"Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
|
10 |
-
"POT-Creation-Date: 2018-
|
11 |
-
"PO-Revision-Date: 2018-
|
|
|
12 |
"Language-Team: \n"
|
|
|
13 |
"MIME-Version: 1.0\n"
|
14 |
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
"Content-Transfer-Encoding: 8bit\n"
|
16 |
"X-Generator: Poedit 2.0.6\n"
|
17 |
-
"Last-Translator: \n"
|
18 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
19 |
-
"Language: et_EE\n"
|
20 |
|
21 |
-
#: gdpr-framework.php:
|
22 |
msgctxt "(Admin)"
|
23 |
msgid "WordPress GDPR › Error"
|
24 |
msgstr ""
|
25 |
|
26 |
-
#: gdpr-framework.php:
|
27 |
msgctxt "(Admin)"
|
28 |
-
msgid "
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: gdpr-framework.php:
|
32 |
msgctxt "(Admin)"
|
33 |
-
msgid "
|
34 |
msgstr ""
|
35 |
|
36 |
-
#: gdpr-framework.php:
|
37 |
msgctxt "(Admin)"
|
38 |
-
msgid "
|
39 |
msgstr ""
|
40 |
|
41 |
-
#: gdpr-framework.php:
|
42 |
msgctxt "(Admin)"
|
43 |
-
msgid "
|
44 |
msgstr ""
|
45 |
|
46 |
-
#: gdpr-framework.php:
|
47 |
msgctxt "(Admin)"
|
48 |
msgid ""
|
49 |
"You appear to be running a development version of GDPR. You must run "
|
50 |
"<code>composer install</code> from the plugin directory."
|
51 |
msgstr ""
|
52 |
|
53 |
-
#: gdpr-framework.php:
|
54 |
msgctxt "(Admin)"
|
55 |
msgid "Autoloader not found."
|
56 |
msgstr ""
|
57 |
|
58 |
-
#: gdpr-framework.php:
|
59 |
msgctxt "(Admin)"
|
60 |
msgid "Anonymous"
|
61 |
msgstr ""
|
@@ -200,6 +200,12 @@ msgctxt "(Admin)"
|
|
200 |
msgid "Consent title is a required field!"
|
201 |
msgstr ""
|
202 |
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
#: src/Components/Consent/ConsentManager.php:46
|
204 |
#: views/modules/contact-form-7/content-privacy.php:2
|
205 |
#: views/modules/wordpress-comments/terms-checkbox.php:14
|
@@ -804,6 +810,23 @@ msgid ""
|
|
804 |
"contain the [gdpr_privacy_tools] shortcode."
|
805 |
msgstr ""
|
806 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
807 |
#: views/admin/general/enable.php:9
|
808 |
msgctxt "(Admin)"
|
809 |
msgid "Enable the view, export and forget functionality for users and visitors"
|
@@ -817,6 +840,11 @@ msgid ""
|
|
817 |
"consents."
|
818 |
msgstr ""
|
819 |
|
|
|
|
|
|
|
|
|
|
|
820 |
#: views/admin/general/theme-compatibility.php:9
|
821 |
#: views/installer/steps/integrations.php:21
|
822 |
msgctxt "(Admin)"
|
@@ -871,12 +899,23 @@ msgid ""
|
|
871 |
"you entered below."
|
872 |
msgstr ""
|
873 |
|
|
|
|
|
|
|
|
|
|
|
874 |
#: views/admin/settings-page.php:31
|
875 |
#, php-format
|
876 |
msgctxt "(Admin)"
|
877 |
msgid "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
878 |
msgstr ""
|
879 |
|
|
|
|
|
|
|
|
|
|
|
|
|
880 |
#: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
|
881 |
msgctxt "(Admin)"
|
882 |
msgid "Need more info?"
|
@@ -1124,8 +1163,9 @@ msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
|
|
1124 |
msgstr "Nõustun %sKasutustingimustega%s ja %sPrivaatsustingimustega%s"
|
1125 |
|
1126 |
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
|
1127 |
-
|
1128 |
-
|
|
|
1129 |
|
1130 |
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
|
1131 |
#: views/privacy-tools/form-consent.php:6
|
@@ -1133,9 +1173,8 @@ msgid "Here you can withdraw any consents you have given."
|
|
1133 |
msgstr "Siin saate tagasi võtta kõik antud nõusolekud"
|
1134 |
|
1135 |
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
|
1136 |
-
|
1137 |
-
|
1138 |
-
msgstr "Nõusoleku tüübid"
|
1139 |
|
1140 |
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
|
1141 |
#: views/privacy-tools/form-consent.php:24
|
@@ -1211,6 +1250,13 @@ msgctxt "(Admin)"
|
|
1211 |
msgid "Anonymize user and all data"
|
1212 |
msgstr ""
|
1213 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1214 |
#: views/modules/wordpress-user/dashboard/profile-page/header.php:2
|
1215 |
msgctxt "(Admin)"
|
1216 |
msgid "GDPR Data"
|
@@ -1231,9 +1277,9 @@ msgctxt "(Admin)"
|
|
1231 |
msgid "No consents given"
|
1232 |
msgstr ""
|
1233 |
|
1234 |
-
#: views/privacy-tools/form-consent.php:
|
1235 |
-
msgid "Consent"
|
1236 |
-
msgstr "
|
1237 |
|
1238 |
#: views/privacy-tools/form-delete.php:1
|
1239 |
#: views/privacy-tools/notice-admin-role.php:1
|
@@ -1245,19 +1291,21 @@ msgid "Delete my data"
|
|
1245 |
msgstr "Kustuta minu andmed"
|
1246 |
|
1247 |
#: views/privacy-tools/form-identify.php:8
|
1248 |
-
msgid "Back to
|
1249 |
-
msgstr "
|
1250 |
|
1251 |
-
#: views/privacy-tools/form-identify.php:
|
1252 |
-
|
|
|
|
|
1253 |
msgstr "Tuvasta ennast!"
|
1254 |
|
1255 |
-
#: views/privacy-tools/form-identify.php:
|
1256 |
-
#: views/privacy-tools/form-identify.php:
|
1257 |
msgid "Enter your email address"
|
1258 |
msgstr "Sisestage oma e-maili aadress"
|
1259 |
|
1260 |
-
#: views/privacy-tools/form-identify.php:
|
1261 |
msgid "Send email"
|
1262 |
msgstr "Saada e-mail"
|
1263 |
|
@@ -1289,3 +1337,9 @@ msgstr "Teie isiklikud andmed on kustutatud!"
|
|
1289 |
#: views/privacy-tools/privacy-tools.php:5
|
1290 |
msgid "You are identified as"
|
1291 |
msgstr "Te olete tuvastatud e-maili aadressiga"
|
|
|
|
|
|
|
|
|
|
|
|
7 |
msgstr ""
|
8 |
"Project-Id-Version: The GDPR Framework 1.0\n"
|
9 |
"Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
|
10 |
+
"POT-Creation-Date: 2018-05-22 15:47+0300\n"
|
11 |
+
"PO-Revision-Date: 2018-05-22 15:48+0300\n"
|
12 |
+
"Last-Translator: Codelight <team@codelight.eu>\n"
|
13 |
"Language-Team: \n"
|
14 |
+
"Language: et_EE\n"
|
15 |
"MIME-Version: 1.0\n"
|
16 |
"Content-Type: text/plain; charset=UTF-8\n"
|
17 |
"Content-Transfer-Encoding: 8bit\n"
|
18 |
"X-Generator: Poedit 2.0.6\n"
|
|
|
19 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
|
20 |
|
21 |
+
#: gdpr-framework.php:28
|
22 |
msgctxt "(Admin)"
|
23 |
msgid "WordPress GDPR › Error"
|
24 |
msgstr ""
|
25 |
|
26 |
+
#: gdpr-framework.php:38
|
27 |
msgctxt "(Admin)"
|
28 |
+
msgid "You must be using PHP 5.6.0 or greater."
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: gdpr-framework.php:39
|
32 |
msgctxt "(Admin)"
|
33 |
+
msgid "Invalid PHP version"
|
34 |
msgstr ""
|
35 |
|
36 |
+
#: gdpr-framework.php:48
|
37 |
msgctxt "(Admin)"
|
38 |
+
msgid "You must be using WordPress 4.3.0 or greater."
|
39 |
msgstr ""
|
40 |
|
41 |
+
#: gdpr-framework.php:49
|
42 |
msgctxt "(Admin)"
|
43 |
+
msgid "Invalid WordPress version"
|
44 |
msgstr ""
|
45 |
|
46 |
+
#: gdpr-framework.php:61
|
47 |
msgctxt "(Admin)"
|
48 |
msgid ""
|
49 |
"You appear to be running a development version of GDPR. You must run "
|
50 |
"<code>composer install</code> from the plugin directory."
|
51 |
msgstr ""
|
52 |
|
53 |
+
#: gdpr-framework.php:66
|
54 |
msgctxt "(Admin)"
|
55 |
msgid "Autoloader not found."
|
56 |
msgstr ""
|
57 |
|
58 |
+
#: gdpr-framework.php:86 src/Updater/Updater.php:40
|
59 |
msgctxt "(Admin)"
|
60 |
msgid "Anonymous"
|
61 |
msgstr ""
|
200 |
msgid "Consent title is a required field!"
|
201 |
msgstr ""
|
202 |
|
203 |
+
#: src/Components/Consent/AdminTabConsent.php:179
|
204 |
+
msgid ""
|
205 |
+
"To use this website, you accepted our Privacy Policy. If you wish to "
|
206 |
+
"withdraw your acceptance, please use the \"Delete my data\" button below."
|
207 |
+
msgstr ""
|
208 |
+
|
209 |
#: src/Components/Consent/ConsentManager.php:46
|
210 |
#: views/modules/contact-form-7/content-privacy.php:2
|
211 |
#: views/modules/wordpress-comments/terms-checkbox.php:14
|
810 |
"contain the [gdpr_privacy_tools] shortcode."
|
811 |
msgstr ""
|
812 |
|
813 |
+
#: views/admin/general/description-delete-action.php:2
|
814 |
+
msgctxt "(Admin)"
|
815 |
+
msgid "What should happen if a data subject requests deleting their data."
|
816 |
+
msgstr ""
|
817 |
+
|
818 |
+
#: views/admin/general/description-export-action.php:2
|
819 |
+
msgctxt "(Admin)"
|
820 |
+
msgid ""
|
821 |
+
"What should happen if a data subject requests viewing or exporting their "
|
822 |
+
"data."
|
823 |
+
msgstr ""
|
824 |
+
|
825 |
+
#: views/admin/general/description-terms-page.php:2
|
826 |
+
msgctxt "(Admin)"
|
827 |
+
msgid "Optional. Select the page which contains your Terms & Conditions"
|
828 |
+
msgstr ""
|
829 |
+
|
830 |
#: views/admin/general/enable.php:9
|
831 |
msgctxt "(Admin)"
|
832 |
msgid "Enable the view, export and forget functionality for users and visitors"
|
840 |
"consents."
|
841 |
msgstr ""
|
842 |
|
843 |
+
#: views/admin/general/stylesheet.php:9
|
844 |
+
msgctxt "(Admin)"
|
845 |
+
msgid "Enable basic styling for Privacy Tools page."
|
846 |
+
msgstr ""
|
847 |
+
|
848 |
#: views/admin/general/theme-compatibility.php:9
|
849 |
#: views/installer/steps/integrations.php:21
|
850 |
msgctxt "(Admin)"
|
899 |
"you entered below."
|
900 |
msgstr ""
|
901 |
|
902 |
+
#: views/admin/settings-page.php:8
|
903 |
+
msgctxt "(Admin)"
|
904 |
+
msgid "GDPR settings saved!"
|
905 |
+
msgstr ""
|
906 |
+
|
907 |
#: views/admin/settings-page.php:31
|
908 |
#, php-format
|
909 |
msgctxt "(Admin)"
|
910 |
msgid "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
911 |
msgstr ""
|
912 |
|
913 |
+
#: views/admin/settings-page.php:39
|
914 |
+
#, php-format
|
915 |
+
msgctxt "(Admin)"
|
916 |
+
msgid "Support our development efforts with a %s5-star rating%s."
|
917 |
+
msgstr ""
|
918 |
+
|
919 |
#: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
|
920 |
msgctxt "(Admin)"
|
921 |
msgid "Need more info?"
|
1163 |
msgstr "Nõustun %sKasutustingimustega%s ja %sPrivaatsustingimustega%s"
|
1164 |
|
1165 |
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
|
1166 |
+
#: views/privacy-tools/form-consent.php:2
|
1167 |
+
msgid "Consent"
|
1168 |
+
msgstr "Nõusolek"
|
1169 |
|
1170 |
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
|
1171 |
#: views/privacy-tools/form-consent.php:6
|
1173 |
msgstr "Siin saate tagasi võtta kõik antud nõusolekud"
|
1174 |
|
1175 |
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
|
1176 |
+
msgid "Consents"
|
1177 |
+
msgstr "Nõusolekud"
|
|
|
1178 |
|
1179 |
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
|
1180 |
#: views/privacy-tools/form-consent.php:24
|
1250 |
msgid "Anonymize user and all data"
|
1251 |
msgstr ""
|
1252 |
|
1253 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:18
|
1254 |
+
#, fuzzy
|
1255 |
+
#| msgid "Be careful - this action is permanent and CANNOT be undone."
|
1256 |
+
msgctxt "gdpr-framework"
|
1257 |
+
msgid "Be careful - this action is permanent and CANNOT be undone."
|
1258 |
+
msgstr "Ettevaatust - seda tegevust EI SAA tagasi võtta."
|
1259 |
+
|
1260 |
#: views/modules/wordpress-user/dashboard/profile-page/header.php:2
|
1261 |
msgctxt "(Admin)"
|
1262 |
msgid "GDPR Data"
|
1277 |
msgid "No consents given"
|
1278 |
msgstr ""
|
1279 |
|
1280 |
+
#: views/privacy-tools/form-consent.php:9
|
1281 |
+
msgid "Consent types"
|
1282 |
+
msgstr "Nõusoleku tüübid"
|
1283 |
|
1284 |
#: views/privacy-tools/form-delete.php:1
|
1285 |
#: views/privacy-tools/notice-admin-role.php:1
|
1291 |
msgstr "Kustuta minu andmed"
|
1292 |
|
1293 |
#: views/privacy-tools/form-identify.php:8
|
1294 |
+
msgid "Back to front page"
|
1295 |
+
msgstr ""
|
1296 |
|
1297 |
+
#: views/privacy-tools/form-identify.php:15
|
1298 |
+
#, fuzzy
|
1299 |
+
#| msgid "Identify yourself!"
|
1300 |
+
msgid "Please identify yourself via e-mail"
|
1301 |
msgstr "Tuvasta ennast!"
|
1302 |
|
1303 |
+
#: views/privacy-tools/form-identify.php:19
|
1304 |
+
#: views/privacy-tools/form-identify.php:22
|
1305 |
msgid "Enter your email address"
|
1306 |
msgstr "Sisestage oma e-maili aadress"
|
1307 |
|
1308 |
+
#: views/privacy-tools/form-identify.php:25
|
1309 |
msgid "Send email"
|
1310 |
msgstr "Saada e-mail"
|
1311 |
|
1337 |
#: views/privacy-tools/privacy-tools.php:5
|
1338 |
msgid "You are identified as"
|
1339 |
msgstr "Te olete tuvastatud e-maili aadressiga"
|
1340 |
+
|
1341 |
+
#~ msgid "Manage consents"
|
1342 |
+
#~ msgstr "Halda nõusolekuid"
|
1343 |
+
|
1344 |
+
#~ msgid "Back to Privacy Tools"
|
1345 |
+
#~ msgstr "Tagasi privaatsustööriistade juurde"
|
languages/gdpr-framework-nl_NL.mo
ADDED
Binary file
|
languages/gdpr-framework-nl_NL.po
ADDED
@@ -0,0 +1,1346 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# SOME DESCRIPTIVE TITLE.
|
2 |
+
# Copyright (C) YEAR Codelight
|
3 |
+
# This file is distributed under the same license as the The GDPR Framework package.
|
4 |
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
+
#
|
6 |
+
msgid ""
|
7 |
+
msgstr ""
|
8 |
+
"Project-Id-Version: The GDPR Framework 1.0\n"
|
9 |
+
"Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
|
10 |
+
"POT-Creation-Date: 2018-04-16 10:50+0000\n"
|
11 |
+
"PO-Revision-Date: 2018-04-30 14:08+0200\n"
|
12 |
+
"Language-Team: \n"
|
13 |
+
"MIME-Version: 1.0\n"
|
14 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
15 |
+
"Content-Transfer-Encoding: 8bit\n"
|
16 |
+
"X-Generator: Poedit 2.0.7\n"
|
17 |
+
"Last-Translator: \n"
|
18 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
19 |
+
"Language: nl_NL\n"
|
20 |
+
|
21 |
+
#: gdpr-framework.php:26
|
22 |
+
msgctxt "(Admin)"
|
23 |
+
msgid "WordPress GDPR › Error"
|
24 |
+
msgstr "WordPress GDPR › fout"
|
25 |
+
|
26 |
+
#: gdpr-framework.php:35
|
27 |
+
msgctxt "(Admin)"
|
28 |
+
msgid "Invalid PHP version"
|
29 |
+
msgstr "Ongeldige PHP versie"
|
30 |
+
|
31 |
+
#: gdpr-framework.php:35
|
32 |
+
msgctxt "(Admin)"
|
33 |
+
msgid "You must be using PHP 5.6.33 or greater."
|
34 |
+
msgstr "Je moet PHP 5.6.33 of hoger gebruiken."
|
35 |
+
|
36 |
+
#: gdpr-framework.php:42
|
37 |
+
msgctxt "(Admin)"
|
38 |
+
msgid "Invalid WordPress version"
|
39 |
+
msgstr "Ongeldige WordPress versie"
|
40 |
+
|
41 |
+
#: gdpr-framework.php:42
|
42 |
+
msgctxt "(Admin)"
|
43 |
+
msgid "You must be using WordPress 4.3.0 or greater."
|
44 |
+
msgstr "Je moet gebruik maken van WordPress 4.3.0 of hoger."
|
45 |
+
|
46 |
+
#: gdpr-framework.php:52
|
47 |
+
msgctxt "(Admin)"
|
48 |
+
msgid ""
|
49 |
+
"You appear to be running a development version of GDPR. You must run "
|
50 |
+
"<code>composer install</code> from the plugin directory."
|
51 |
+
msgstr ""
|
52 |
+
"Het lijkt erop dat je momenteel werkt in de ontwikkelmodus van GDRP. Je "
|
53 |
+
"dient <code>composer install</code> uit te voeren vanuit de plugin directory."
|
54 |
+
|
55 |
+
#: gdpr-framework.php:53
|
56 |
+
msgctxt "(Admin)"
|
57 |
+
msgid "Autoloader not found."
|
58 |
+
msgstr "Autoloader niet gevonden."
|
59 |
+
|
60 |
+
#: gdpr-framework.php:115
|
61 |
+
msgctxt "(Admin)"
|
62 |
+
msgid "Anonymous"
|
63 |
+
msgstr "Anoniem"
|
64 |
+
|
65 |
+
#: src/Admin/AdminTab.php:115
|
66 |
+
msgctxt "(Admin)"
|
67 |
+
msgid "Save"
|
68 |
+
msgstr "Opslaan"
|
69 |
+
|
70 |
+
#: src/Admin/AdminTab.php:151
|
71 |
+
msgctxt "(Admin)"
|
72 |
+
msgid "Policy generated!"
|
73 |
+
msgstr "Policy gegenereerd!"
|
74 |
+
|
75 |
+
#: src/Admin/AdminTabGeneral.php:11
|
76 |
+
msgctxt "(Admin)"
|
77 |
+
msgid "General"
|
78 |
+
msgstr "Algemeen"
|
79 |
+
|
80 |
+
#: src/Admin/AdminTabGeneral.php:38
|
81 |
+
msgctxt "(Admin)"
|
82 |
+
msgid "General Settings"
|
83 |
+
msgstr "Algemene instellingen"
|
84 |
+
|
85 |
+
#: src/Admin/AdminTabGeneral.php:43
|
86 |
+
msgctxt "(Admin)"
|
87 |
+
msgid "Enable Privacy Tools"
|
88 |
+
msgstr "Privacy Tools Inschakelen"
|
89 |
+
|
90 |
+
#: src/Admin/AdminTabGeneral.php:53
|
91 |
+
msgctxt "(Admin)"
|
92 |
+
msgid "Pages"
|
93 |
+
msgstr "Pagina’s"
|
94 |
+
|
95 |
+
#: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
|
96 |
+
msgctxt "(Admin)"
|
97 |
+
msgid "Privacy Tools Page"
|
98 |
+
msgstr "Privacy Tools Pagina"
|
99 |
+
|
100 |
+
#: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
|
101 |
+
msgctxt "(Admin)"
|
102 |
+
msgid "Privacy Policy Page"
|
103 |
+
msgstr "Privacy Policy Pagina"
|
104 |
+
|
105 |
+
#: src/Admin/AdminTabGeneral.php:72
|
106 |
+
msgctxt "(Admin)"
|
107 |
+
msgid "Terms & Conditions Page"
|
108 |
+
msgstr "Algemene Voorwaarden Pagina"
|
109 |
+
|
110 |
+
#: src/Admin/AdminTabGeneral.php:82
|
111 |
+
msgctxt "(Admin)"
|
112 |
+
msgid "View & Export Data"
|
113 |
+
msgstr "Bekijk & Exporteer Data"
|
114 |
+
|
115 |
+
#: src/Admin/AdminTabGeneral.php:87
|
116 |
+
msgctxt "(Admin)"
|
117 |
+
msgid "Export action"
|
118 |
+
msgstr "Export Actie"
|
119 |
+
|
120 |
+
#: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
|
121 |
+
msgctxt "(Admin)"
|
122 |
+
msgid "Email to notify"
|
123 |
+
msgstr "E-mail voor notificatie"
|
124 |
+
|
125 |
+
#: src/Admin/AdminTabGeneral.php:105
|
126 |
+
msgctxt "(Admin)"
|
127 |
+
msgid "Delete & Anonymize Data"
|
128 |
+
msgstr "Verwijder & Anonimiseer Data"
|
129 |
+
|
130 |
+
#: src/Admin/AdminTabGeneral.php:110
|
131 |
+
msgctxt "(Admin)"
|
132 |
+
msgid "Delete action"
|
133 |
+
msgstr "Verwijder actie"
|
134 |
+
|
135 |
+
#: src/Admin/AdminTabGeneral.php:117
|
136 |
+
msgctxt "(Admin)"
|
137 |
+
msgid "Delete or reassign content?"
|
138 |
+
msgstr "Content verwijderen of opnieuw toekennen?"
|
139 |
+
|
140 |
+
#: src/Admin/AdminTabGeneral.php:125
|
141 |
+
msgctxt "(Admin)"
|
142 |
+
msgid "Reassign content to"
|
143 |
+
msgstr "Content toekennen aan"
|
144 |
+
|
145 |
+
#: src/Admin/AdminTabGeneral.php:145
|
146 |
+
msgctxt "(Admin)"
|
147 |
+
msgid "Styling"
|
148 |
+
msgstr "Styling"
|
149 |
+
|
150 |
+
#: src/Admin/AdminTabGeneral.php:150
|
151 |
+
msgctxt "(Admin)"
|
152 |
+
msgid "Enable basic styling on Privacy Tools page"
|
153 |
+
msgstr "Basis Styling inschakelen op de Privacy Tools pagina"
|
154 |
+
|
155 |
+
#: src/Admin/AdminTabGeneral.php:162
|
156 |
+
msgctxt "(Admin)"
|
157 |
+
msgid "Compatibility"
|
158 |
+
msgstr "Compatibiliteit"
|
159 |
+
|
160 |
+
#: src/Admin/AdminTabGeneral.php:167
|
161 |
+
msgctxt "(Admin)"
|
162 |
+
msgid "Enable automatic theme compatibility"
|
163 |
+
msgstr "Schakel automatische thema-compatibiliteit in"
|
164 |
+
|
165 |
+
#: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
|
166 |
+
#: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
|
167 |
+
#: views/installer/steps/configuration-settings.php:62
|
168 |
+
msgctxt "(Admin)"
|
169 |
+
msgid "— Select —"
|
170 |
+
msgstr "— Selecteer —"
|
171 |
+
|
172 |
+
#: src/Admin/WordpressAdmin.php:65
|
173 |
+
msgctxt "(Admin)"
|
174 |
+
msgid "Privacy & GDPR Settings"
|
175 |
+
msgstr "Privacy & GDPR Instellingen"
|
176 |
+
|
177 |
+
#: src/Admin/WordpressAdmin.php:66
|
178 |
+
msgctxt "(Admin)"
|
179 |
+
msgid "Privacy"
|
180 |
+
msgstr "Privacy"
|
181 |
+
|
182 |
+
#: src/Components/Consent/AdminTabConsent.php:30
|
183 |
+
#: src/Components/Consent/AdminTabConsent.php:49
|
184 |
+
msgctxt "(Admin)"
|
185 |
+
msgid "Consent"
|
186 |
+
msgstr "Toestemming"
|
187 |
+
|
188 |
+
#: src/Components/Consent/AdminTabConsent.php:157
|
189 |
+
msgctxt "(Admin)"
|
190 |
+
msgid "Consent slug is a required field!"
|
191 |
+
msgstr "Toestemming slug is een verplicht veld!"
|
192 |
+
|
193 |
+
#: src/Components/Consent/AdminTabConsent.php:162
|
194 |
+
msgctxt "(Admin)"
|
195 |
+
msgid ""
|
196 |
+
"You may only use alphanumeric characters, dash and underscore in the consent "
|
197 |
+
"slug field."
|
198 |
+
msgstr ""
|
199 |
+
"Alleen alfanummerieke karakters, streep en underscore mogen worden gebruikt "
|
200 |
+
"in de toestemming slug veld."
|
201 |
+
|
202 |
+
#: src/Components/Consent/AdminTabConsent.php:167
|
203 |
+
msgctxt "(Admin)"
|
204 |
+
msgid "Consent title is a required field!"
|
205 |
+
msgstr "Toestemming titel is een verplicht veld!"
|
206 |
+
|
207 |
+
#: src/Components/Consent/ConsentManager.php:46
|
208 |
+
#: views/modules/contact-form-7/content-privacy.php:2
|
209 |
+
#: views/modules/wordpress-comments/terms-checkbox.php:14
|
210 |
+
#: views/modules/wordpress-user/registration-terms-checkbox.php:15
|
211 |
+
#, php-format
|
212 |
+
msgid "I accept the %sPrivacy Policy%s"
|
213 |
+
msgstr "I accepteer de %sPrivacy Policy%s"
|
214 |
+
|
215 |
+
#: src/Components/Consent/ConsentManager.php:50
|
216 |
+
#: src/Components/Consent/ConsentManager.php:69
|
217 |
+
msgctxt "(Admin)"
|
218 |
+
msgid ""
|
219 |
+
"This consent is not visible by default. If someone wishes to withdraw it, "
|
220 |
+
"they should simply request to delete all their data."
|
221 |
+
msgstr ""
|
222 |
+
"Deze toestemming is standaard niet zichtbaar. Als iemand het wil intrekken, "
|
223 |
+
"moeten ze eenvoudig verzoeken om al hun gegevens te verwijderen."
|
224 |
+
|
225 |
+
#: src/Components/Consent/ConsentManager.php:65
|
226 |
+
#, php-format
|
227 |
+
msgid "I accept the %sTerms & Conditions%s"
|
228 |
+
msgstr "Ik accepteer de %sAlgemene Voorwaarden%s"
|
229 |
+
|
230 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
|
231 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
|
232 |
+
#: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
|
233 |
+
msgctxt "(Admin)"
|
234 |
+
msgid "Privacy Policy"
|
235 |
+
msgstr "Privacy Policy"
|
236 |
+
|
237 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
|
238 |
+
msgctxt "(Admin)"
|
239 |
+
msgid "Company information"
|
240 |
+
msgstr "Bedrijfsinformatie"
|
241 |
+
|
242 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
|
243 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
|
244 |
+
msgctxt "(Admin)"
|
245 |
+
msgid "Company Name"
|
246 |
+
msgstr "Bedrijfsnaam"
|
247 |
+
|
248 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
|
249 |
+
msgctxt "(Admin)"
|
250 |
+
msgid "Company Email"
|
251 |
+
msgstr "Bedrijfs E-mailadres"
|
252 |
+
|
253 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
|
254 |
+
msgctxt "(Admin)"
|
255 |
+
msgid "Company Location"
|
256 |
+
msgstr "Bedrijfslocatie"
|
257 |
+
|
258 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
|
259 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
|
260 |
+
msgctxt "(Admin)"
|
261 |
+
msgid "Representative Contact Name"
|
262 |
+
msgstr "De naam van de contactpersoon van de vertegenwoordiger"
|
263 |
+
|
264 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
|
265 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
|
266 |
+
msgctxt "(Admin)"
|
267 |
+
msgid "Representative Contact Email"
|
268 |
+
msgstr "Vertegenwoordiger E-mail"
|
269 |
+
|
270 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
|
271 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
|
272 |
+
msgctxt "(Admin)"
|
273 |
+
msgid "Representative Contact Phone"
|
274 |
+
msgstr "Vertegenwoordiger Telefoonnummer"
|
275 |
+
|
276 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
|
277 |
+
msgctxt "(Admin)"
|
278 |
+
msgid "Data Protection Authority"
|
279 |
+
msgstr "Autoriteit Persoonsgegevens"
|
280 |
+
|
281 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
|
282 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
|
283 |
+
msgctxt "(Admin)"
|
284 |
+
msgid "Data Protection Authority Website"
|
285 |
+
msgstr "Autoriteit Persoonsgegevens Website"
|
286 |
+
|
287 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
|
288 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
|
289 |
+
msgctxt "(Admin)"
|
290 |
+
msgid "Data Protection Authority Email"
|
291 |
+
msgstr "Autoriteit Persoonsgegevens E-mail"
|
292 |
+
|
293 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
|
294 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
|
295 |
+
msgctxt "(Admin)"
|
296 |
+
msgid "Data Protection Authority Phone"
|
297 |
+
msgstr "Autoriteit Persoonsgegevens Telefoonnummer"
|
298 |
+
|
299 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
|
300 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
|
301 |
+
msgctxt "(Admin)"
|
302 |
+
msgid "Data Protection Officer"
|
303 |
+
msgstr "Functionaris Gegevensbescherming"
|
304 |
+
|
305 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
|
306 |
+
msgctxt "(Admin)"
|
307 |
+
msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
|
308 |
+
msgstr ""
|
309 |
+
"Veelgestelde Vragen: Moet ik een Functionaris Gegevensbeschermer aanstellen?"
|
310 |
+
|
311 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
|
312 |
+
msgctxt "(Admin)"
|
313 |
+
msgid "Data Protection Officer Name"
|
314 |
+
msgstr "Naam van de Functionaris Gegevensbescherming"
|
315 |
+
|
316 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
|
317 |
+
msgctxt "(Admin)"
|
318 |
+
msgid "Data Protection Officer Email"
|
319 |
+
msgstr "E-mailadres van de Functionaris Gegevensbescherming"
|
320 |
+
|
321 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
|
322 |
+
msgctxt "(Admin)"
|
323 |
+
msgid "Contact Email"
|
324 |
+
msgstr "Vertegenwoordiger E-mail"
|
325 |
+
|
326 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
|
327 |
+
msgctxt "(Admin)"
|
328 |
+
msgid "Representative Contact"
|
329 |
+
msgstr "Vertegenwoordiger Contact"
|
330 |
+
|
331 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
|
332 |
+
msgctxt "(Admin)"
|
333 |
+
msgid "Knowledge base: Do I need to appoint an EU-based representative?"
|
334 |
+
msgstr ""
|
335 |
+
"Veelgestelde Vragen: Moet ik een EU-gebaseerde vertegenwoordiger benoemen?"
|
336 |
+
|
337 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
|
338 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
|
339 |
+
msgctxt "(Admin)"
|
340 |
+
msgid "DPO Name"
|
341 |
+
msgstr "DPO Naam"
|
342 |
+
|
343 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
|
344 |
+
msgctxt "(Admin)"
|
345 |
+
msgid "Save & Generate Policy"
|
346 |
+
msgstr "Bewaar en genereer beleid"
|
347 |
+
|
348 |
+
#: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
|
349 |
+
#: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
|
350 |
+
#: views/themes/storefront/footer.php:3
|
351 |
+
#: views/themes/twentyseventeen/footer.php:3
|
352 |
+
#: views/themes/twentysixteen/footer.php:4
|
353 |
+
msgid "Privacy Policy"
|
354 |
+
msgstr "Privacy Policy"
|
355 |
+
|
356 |
+
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
|
357 |
+
msgid "This page is currently disabled."
|
358 |
+
msgstr "Deze pagina is momenteel uitgeschakeld."
|
359 |
+
|
360 |
+
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
|
361 |
+
#: src/Installer/Installer.php:279
|
362 |
+
#: src/Installer/Steps/ConfigurationPages.php:55
|
363 |
+
#: views/themes/storefront/footer.php:7
|
364 |
+
#: views/themes/twentyseventeen/footer.php:7
|
365 |
+
#: views/themes/twentysixteen/footer.php:9
|
366 |
+
msgid "Privacy Tools"
|
367 |
+
msgstr "Privacy Tools"
|
368 |
+
|
369 |
+
#: src/Components/Support/AdminTabSupport.php:13
|
370 |
+
#: src/Components/Support/AdminTabSupport.php:20
|
371 |
+
msgctxt "(Admin)"
|
372 |
+
msgid "Support"
|
373 |
+
msgstr "Support"
|
374 |
+
|
375 |
+
#: src/Components/WordpressComments/WordpressComments.php:90
|
376 |
+
#, php-format
|
377 |
+
msgid ""
|
378 |
+
"%sERROR:%s You need to accept the terms and conditions to post a comment."
|
379 |
+
msgstr ""
|
380 |
+
"%sERROR:%s Je dient de algemene voorwaarden te accepteren voordat je een "
|
381 |
+
"reactie kunt plaatsen."
|
382 |
+
|
383 |
+
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
|
384 |
+
#: views/privacy-tools/notices.php:19
|
385 |
+
msgid "We have received your request and will reply within 30 days."
|
386 |
+
msgstr "Wij hebben uw aanvraag ontvangen en geven u binnen 30 dagen antwoord."
|
387 |
+
|
388 |
+
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
|
389 |
+
#: views/privacy-tools/notices.php:15
|
390 |
+
msgid "Consent withdrawn."
|
391 |
+
msgstr "Toestemming ingetrokken."
|
392 |
+
|
393 |
+
#: src/Components/WordpressUser/RegistrationForm.php:42
|
394 |
+
msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
|
395 |
+
msgstr ""
|
396 |
+
"<strong>ERROR</strong>: Je dient de algemene voorwaarden te accepteren."
|
397 |
+
|
398 |
+
#: src/Components/WordpressUser/WordpressUser.php:63
|
399 |
+
#: src/Components/WordpressUser/WordpressUser.php:64
|
400 |
+
#: views/modules/wordpress-user/dashboard/data-page/header.php:2
|
401 |
+
msgctxt "(Admin)"
|
402 |
+
msgid "Privacy Tools"
|
403 |
+
msgstr "Privacy Tools"
|
404 |
+
|
405 |
+
#: src/DataSubject/AdminTabDataSubject.php:27
|
406 |
+
#: src/DataSubject/AdminTabDataSubject.php:41
|
407 |
+
msgctxt "(Admin)"
|
408 |
+
msgid "Data Subjects"
|
409 |
+
msgstr "Data onderwerpen"
|
410 |
+
|
411 |
+
#: src/DataSubject/DataRepository.php:143
|
412 |
+
msgid "Data exported"
|
413 |
+
msgstr "Data geëxporteerd"
|
414 |
+
|
415 |
+
#: src/DataSubject/DataRepository.php:158
|
416 |
+
msgid "Data export request"
|
417 |
+
msgstr "Verzoek tot exporteren data"
|
418 |
+
|
419 |
+
#: src/DataSubject/DataRepository.php:171
|
420 |
+
msgid "Data removed"
|
421 |
+
msgstr "Data verwijderd"
|
422 |
+
|
423 |
+
#: src/DataSubject/DataRepository.php:186
|
424 |
+
msgid "Data removal request"
|
425 |
+
msgstr "Verzoek tot verwijderen data"
|
426 |
+
|
427 |
+
#: src/DataSubject/DataSubjectIdentificator.php:65
|
428 |
+
#: src/DataSubject/DataSubjectIdentificator.php:82
|
429 |
+
msgid "Your personal data on"
|
430 |
+
msgstr "Je persoonlijke data op"
|
431 |
+
|
432 |
+
#: src/Helpers.php:27
|
433 |
+
msgctxt "(Admin)"
|
434 |
+
msgid "Austria"
|
435 |
+
msgstr "Oostenrijk"
|
436 |
+
|
437 |
+
#: src/Helpers.php:28
|
438 |
+
msgctxt "(Admin)"
|
439 |
+
msgid "Belgium"
|
440 |
+
msgstr "België"
|
441 |
+
|
442 |
+
#: src/Helpers.php:29
|
443 |
+
msgctxt "(Admin)"
|
444 |
+
msgid "Bulgaria"
|
445 |
+
msgstr "Bulgarije"
|
446 |
+
|
447 |
+
#: src/Helpers.php:30
|
448 |
+
msgctxt "(Admin)"
|
449 |
+
msgid "Croatia"
|
450 |
+
msgstr "Kroatië"
|
451 |
+
|
452 |
+
#: src/Helpers.php:31
|
453 |
+
msgctxt "(Admin)"
|
454 |
+
msgid "Cyprus"
|
455 |
+
msgstr "Cyprus"
|
456 |
+
|
457 |
+
#: src/Helpers.php:32
|
458 |
+
msgctxt "(Admin)"
|
459 |
+
msgid "Czech Republic"
|
460 |
+
msgstr "Tsjechische Republiek"
|
461 |
+
|
462 |
+
#: src/Helpers.php:33
|
463 |
+
msgctxt "(Admin)"
|
464 |
+
msgid "Denmark"
|
465 |
+
msgstr "Denemarken"
|
466 |
+
|
467 |
+
#: src/Helpers.php:34
|
468 |
+
msgctxt "(Admin)"
|
469 |
+
msgid "Estonia"
|
470 |
+
msgstr "Estland"
|
471 |
+
|
472 |
+
#: src/Helpers.php:35
|
473 |
+
msgctxt "(Admin)"
|
474 |
+
msgid "Finland"
|
475 |
+
msgstr "Finland"
|
476 |
+
|
477 |
+
#: src/Helpers.php:36
|
478 |
+
msgctxt "(Admin)"
|
479 |
+
msgid "France"
|
480 |
+
msgstr "Frankrijk"
|
481 |
+
|
482 |
+
#: src/Helpers.php:37
|
483 |
+
msgctxt "(Admin)"
|
484 |
+
msgid "Germany"
|
485 |
+
msgstr "Duitsland"
|
486 |
+
|
487 |
+
#: src/Helpers.php:38
|
488 |
+
msgctxt "(Admin)"
|
489 |
+
msgid "Greece"
|
490 |
+
msgstr "Griekenland"
|
491 |
+
|
492 |
+
#: src/Helpers.php:39
|
493 |
+
msgctxt "(Admin)"
|
494 |
+
msgid "Hungary"
|
495 |
+
msgstr "Hongarije"
|
496 |
+
|
497 |
+
#: src/Helpers.php:40
|
498 |
+
msgctxt "(Admin)"
|
499 |
+
msgid "Ireland"
|
500 |
+
msgstr "Ierland"
|
501 |
+
|
502 |
+
#: src/Helpers.php:41
|
503 |
+
msgctxt "(Admin)"
|
504 |
+
msgid "Italy"
|
505 |
+
msgstr "Italië"
|
506 |
+
|
507 |
+
#: src/Helpers.php:42
|
508 |
+
msgctxt "(Admin)"
|
509 |
+
msgid "Latvia"
|
510 |
+
msgstr "Letland"
|
511 |
+
|
512 |
+
#: src/Helpers.php:43
|
513 |
+
msgctxt "(Admin)"
|
514 |
+
msgid "Lithuania"
|
515 |
+
msgstr "Litouwen"
|
516 |
+
|
517 |
+
#: src/Helpers.php:44
|
518 |
+
msgctxt "(Admin)"
|
519 |
+
msgid "Luxembourg"
|
520 |
+
msgstr "Luxemburg"
|
521 |
+
|
522 |
+
#: src/Helpers.php:45
|
523 |
+
msgctxt "(Admin)"
|
524 |
+
msgid "Malta"
|
525 |
+
msgstr "Malta"
|
526 |
+
|
527 |
+
#: src/Helpers.php:46
|
528 |
+
msgctxt "(Admin)"
|
529 |
+
msgid "Netherlands"
|
530 |
+
msgstr "Nederland"
|
531 |
+
|
532 |
+
#: src/Helpers.php:47
|
533 |
+
msgctxt "(Admin)"
|
534 |
+
msgid "Poland"
|
535 |
+
msgstr "Polen"
|
536 |
+
|
537 |
+
#: src/Helpers.php:48
|
538 |
+
msgctxt "(Admin)"
|
539 |
+
msgid "Portugal"
|
540 |
+
msgstr "Portugal"
|
541 |
+
|
542 |
+
#: src/Helpers.php:49
|
543 |
+
msgctxt "(Admin)"
|
544 |
+
msgid "Romania"
|
545 |
+
msgstr "Roemenië"
|
546 |
+
|
547 |
+
#: src/Helpers.php:50
|
548 |
+
msgctxt "(Admin)"
|
549 |
+
msgid "Slovakia"
|
550 |
+
msgstr "Slowakije"
|
551 |
+
|
552 |
+
#: src/Helpers.php:51
|
553 |
+
msgctxt "(Admin)"
|
554 |
+
msgid "Slovenia"
|
555 |
+
msgstr "Slovenië"
|
556 |
+
|
557 |
+
#: src/Helpers.php:52
|
558 |
+
msgctxt "(Admin)"
|
559 |
+
msgid "Spain"
|
560 |
+
msgstr "Spanje"
|
561 |
+
|
562 |
+
#: src/Helpers.php:53
|
563 |
+
msgctxt "(Admin)"
|
564 |
+
msgid "Sweden"
|
565 |
+
msgstr "Zweden"
|
566 |
+
|
567 |
+
#: src/Helpers.php:54
|
568 |
+
msgctxt "(Admin)"
|
569 |
+
msgid "United Kingdom"
|
570 |
+
msgstr "Verenigd Koninkrijk"
|
571 |
+
|
572 |
+
#: src/Helpers.php:69
|
573 |
+
msgctxt "(Admin)"
|
574 |
+
msgid "Iceland"
|
575 |
+
msgstr "IJsland"
|
576 |
+
|
577 |
+
#: src/Helpers.php:70
|
578 |
+
msgctxt "(Admin)"
|
579 |
+
msgid "Norway"
|
580 |
+
msgstr "Noorwegen"
|
581 |
+
|
582 |
+
#: src/Helpers.php:71
|
583 |
+
msgctxt "(Admin)"
|
584 |
+
msgid "Liechtenstein"
|
585 |
+
msgstr "Liechtenstein"
|
586 |
+
|
587 |
+
#: src/Helpers.php:72
|
588 |
+
msgctxt "(Admin)"
|
589 |
+
msgid "Switzerland"
|
590 |
+
msgstr "Zwitserland"
|
591 |
+
|
592 |
+
#: src/Helpers.php:73
|
593 |
+
msgctxt "(Admin)"
|
594 |
+
msgid "United States"
|
595 |
+
msgstr "Verenigde Staten"
|
596 |
+
|
597 |
+
#: src/Helpers.php:74
|
598 |
+
msgctxt "(Admin)"
|
599 |
+
msgid "Rest of the world"
|
600 |
+
msgstr "Overige landen"
|
601 |
+
|
602 |
+
#: src/Helpers.php:145
|
603 |
+
msgid "An error has occurred. Please contact the site administrator."
|
604 |
+
msgstr "Er is een fout opgetreden, neem contact op met de sitebeheerder."
|
605 |
+
|
606 |
+
#: src/Installer/Installer.php:135
|
607 |
+
msgctxt "(Admin)"
|
608 |
+
msgid "Setup Wizard"
|
609 |
+
msgstr "Installatie Wizard"
|
610 |
+
|
611 |
+
#: src/Installer/Steps/ConfigurationPages.php:23
|
612 |
+
#: src/Installer/Steps/PolicySettings.php:23
|
613 |
+
#: src/Installer/Steps/PolicySettings.php:48
|
614 |
+
msgctxt "(Admin)"
|
615 |
+
msgid "— Create a new page —"
|
616 |
+
msgstr "— Maak nieuwe pagina aan —"
|
617 |
+
|
618 |
+
#: src/Installer/Steps/PolicySettings.php:38
|
619 |
+
msgctxt "(Admin)"
|
620 |
+
msgid ""
|
621 |
+
"We have automatically selected your WooCommerce Terms & Conditions page."
|
622 |
+
msgstr ""
|
623 |
+
"We hebben automatisch je WooCommerce Algemene Voorwaarden pagina "
|
624 |
+
"geselecteerd."
|
625 |
+
|
626 |
+
#: src/Modules/ContactForm7/ContactForm7.php:35
|
627 |
+
msgctxt "(Admin)"
|
628 |
+
msgid "gdpr terms txt"
|
629 |
+
msgstr "gdpr-termen txt"
|
630 |
+
|
631 |
+
#: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
|
632 |
+
#, php-format
|
633 |
+
msgid "Nonce error for action \"%s\". Please go back and try again!"
|
634 |
+
msgstr "Nonce fout voor actie \"%s\". Ga terug en probeer het opnieuw!"
|
635 |
+
|
636 |
+
#: src/Router.php:149
|
637 |
+
msgctxt "(Admin)"
|
638 |
+
msgid "You do not have the required permissions to perform this action!"
|
639 |
+
msgstr "U heeft onvoldoende rechten om deze actie uit te voeren."
|
640 |
+
|
641 |
+
#: views/admin/consent.php:3
|
642 |
+
msgctxt "(Admin)"
|
643 |
+
msgid "Default consent types"
|
644 |
+
msgstr "Standaard toestemming types"
|
645 |
+
|
646 |
+
#: views/admin/consent.php:4
|
647 |
+
msgctxt "(Admin)"
|
648 |
+
msgid ""
|
649 |
+
"These are the consent types that have been automatically registered by the "
|
650 |
+
"framework or a plugin."
|
651 |
+
msgstr ""
|
652 |
+
"Dit zijn de toestemming typen die automatisch zijn geregistreerd door het "
|
653 |
+
"framework of een plugin."
|
654 |
+
|
655 |
+
#: views/admin/consent.php:7 views/admin/consent.php:52
|
656 |
+
msgctxt "(Admin)"
|
657 |
+
msgid "Slug"
|
658 |
+
msgstr "Slug"
|
659 |
+
|
660 |
+
#: views/admin/consent.php:8 views/admin/consent.php:38
|
661 |
+
#: views/admin/consent.php:60
|
662 |
+
msgctxt "(Admin)"
|
663 |
+
msgid "Title"
|
664 |
+
msgstr "Titel"
|
665 |
+
|
666 |
+
#: views/admin/consent.php:9 views/admin/consent.php:41
|
667 |
+
#: views/admin/consent.php:63
|
668 |
+
msgctxt "(Admin)"
|
669 |
+
msgid "Description"
|
670 |
+
msgstr "Omschrijving"
|
671 |
+
|
672 |
+
#: views/admin/consent.php:10
|
673 |
+
msgctxt "(Admin)"
|
674 |
+
msgid "Visibility"
|
675 |
+
msgstr "Zichtbaarheid"
|
676 |
+
|
677 |
+
#: views/admin/consent.php:18
|
678 |
+
msgctxt "(Admin)"
|
679 |
+
msgid "Visible"
|
680 |
+
msgstr "Zichtbaar"
|
681 |
+
|
682 |
+
#: views/admin/consent.php:20
|
683 |
+
msgctxt "(Admin)"
|
684 |
+
msgid "Hidden"
|
685 |
+
msgstr "Verborgen"
|
686 |
+
|
687 |
+
#: views/admin/consent.php:29
|
688 |
+
msgctxt "(Admin)"
|
689 |
+
msgid "Custom consent types"
|
690 |
+
msgstr "Aangepaste toestemming typen"
|
691 |
+
|
692 |
+
#: views/admin/consent.php:30
|
693 |
+
msgctxt "(Admin)"
|
694 |
+
msgid ""
|
695 |
+
"Here you can add custom consent types to track. They will not be used "
|
696 |
+
"anywhere by default - you will need to build an integration for each of them."
|
697 |
+
msgstr ""
|
698 |
+
"Hier kunt u aangepaste toestemmingstypen toevoegen om bij te houden. Ze "
|
699 |
+
"worden nergens standaard gebruikt - u moet voor elk daarvan een integratie "
|
700 |
+
"maken."
|
701 |
+
|
702 |
+
#: views/admin/consent.php:35
|
703 |
+
msgctxt "(Admin)"
|
704 |
+
msgid "Machine-readable slug"
|
705 |
+
msgstr "Machineleesbare Slug"
|
706 |
+
|
707 |
+
#: views/admin/consent.php:44 views/admin/consent.php:68
|
708 |
+
msgctxt "(Admin)"
|
709 |
+
msgid "Visible?"
|
710 |
+
msgstr "Zichtbaar?"
|
711 |
+
|
712 |
+
#: views/admin/consent.php:72
|
713 |
+
msgctxt "(Admin)"
|
714 |
+
msgid "Remove"
|
715 |
+
msgstr "Verwijderen"
|
716 |
+
|
717 |
+
#: views/admin/consent.php:93
|
718 |
+
msgctxt "(Admin)"
|
719 |
+
msgid "Additional info"
|
720 |
+
msgstr "Aanvullende informatie"
|
721 |
+
|
722 |
+
#: views/admin/consent.php:95
|
723 |
+
msgctxt "(Admin)"
|
724 |
+
msgid ""
|
725 |
+
"This text will be displayed to your data subjects on the Privacy Tools page."
|
726 |
+
msgstr ""
|
727 |
+
"Deze tekst wordt weergegeven bij je onderwerpen op de Privacy Tools pagina."
|
728 |
+
|
729 |
+
#: views/admin/data-subjects/search-form.php:2
|
730 |
+
msgctxt "(Admin)"
|
731 |
+
msgid ""
|
732 |
+
"On this page, you can find which data subjects personal data you are storing "
|
733 |
+
"and download, export or delete it."
|
734 |
+
msgstr ""
|
735 |
+
"Op deze pagina kunt u zien welke onderwerpen met persoonlijke gegevens die u "
|
736 |
+
"opslaat, downloaden en exporteren of verwijderen."
|
737 |
+
|
738 |
+
#: views/admin/data-subjects/search-form.php:10
|
739 |
+
msgctxt "(Admin)"
|
740 |
+
msgid "Find data subject by email"
|
741 |
+
msgstr "Vind data onderwerp per e-mail"
|
742 |
+
|
743 |
+
#: views/admin/data-subjects/search-form.php:11
|
744 |
+
msgctxt "(Admin)"
|
745 |
+
msgid "Email address"
|
746 |
+
msgstr "E-mailadres"
|
747 |
+
|
748 |
+
#: views/admin/data-subjects/search-form.php:16
|
749 |
+
msgctxt "(Admin)"
|
750 |
+
msgid "Search"
|
751 |
+
msgstr "Zoeken"
|
752 |
+
|
753 |
+
#: views/admin/data-subjects/search-results.php:7
|
754 |
+
msgctxt "(Admin)"
|
755 |
+
msgid "Username"
|
756 |
+
msgstr "Gebruikersnaam"
|
757 |
+
|
758 |
+
#: views/admin/data-subjects/search-results.php:12
|
759 |
+
msgctxt "(Admin)"
|
760 |
+
msgid "is not a registered user."
|
761 |
+
msgstr "is niet een geregisseerde gebruiker."
|
762 |
+
|
763 |
+
#: views/admin/data-subjects/search-results.php:16
|
764 |
+
msgctxt "(Admin)"
|
765 |
+
msgid "Download data (html)"
|
766 |
+
msgstr "Gegevens downloaden (HTML)"
|
767 |
+
|
768 |
+
#: views/admin/data-subjects/search-results.php:17
|
769 |
+
msgctxt "(Admin)"
|
770 |
+
msgid "Export data (json)"
|
771 |
+
msgstr "Exporteer gegevens (JSON)"
|
772 |
+
|
773 |
+
#: views/admin/data-subjects/search-results.php:21
|
774 |
+
msgctxt "(Admin)"
|
775 |
+
msgid ""
|
776 |
+
"This user has admin capabilities. Deleting data via this interface is "
|
777 |
+
"disabled."
|
778 |
+
msgstr ""
|
779 |
+
"Deze gebruiker heeft beheerdersfuncties. Het verwijderen van gegevens via "
|
780 |
+
"deze interface is uitgeschakeld."
|
781 |
+
|
782 |
+
#: views/admin/data-subjects/search-results.php:24
|
783 |
+
msgctxt "(Admin)"
|
784 |
+
msgid "Anonymize data"
|
785 |
+
msgstr "Gegevens anoniem maken"
|
786 |
+
|
787 |
+
#: views/admin/data-subjects/search-results.php:25
|
788 |
+
msgctxt "(Admin)"
|
789 |
+
msgid "Delete data"
|
790 |
+
msgstr "Gegevens verwijderen"
|
791 |
+
|
792 |
+
#: views/admin/data-subjects/search-results.php:29
|
793 |
+
msgctxt "(Admin)"
|
794 |
+
msgid "No data found!"
|
795 |
+
msgstr "Geen data gevonden!"
|
796 |
+
|
797 |
+
#: views/admin/general/delete-action-email.php:5
|
798 |
+
#: views/admin/general/export-action-email.php:5
|
799 |
+
#: views/installer/steps/configuration-settings.php:29
|
800 |
+
#: views/installer/steps/configuration-settings.php:79
|
801 |
+
msgid "Email address"
|
802 |
+
msgstr "E-mailadres"
|
803 |
+
|
804 |
+
#: views/admin/general/delete-action-reassign.php:3
|
805 |
+
#: views/installer/steps/configuration-settings.php:50
|
806 |
+
msgctxt "(Admin)"
|
807 |
+
msgid "Delete content"
|
808 |
+
msgstr "Inhoud verwijderen"
|
809 |
+
|
810 |
+
#: views/admin/general/delete-action-reassign.php:6
|
811 |
+
#: views/installer/steps/configuration-settings.php:53
|
812 |
+
msgctxt "(Admin)"
|
813 |
+
msgid "Reassign content to a user"
|
814 |
+
msgstr "Wijs inhoud opnieuw toe aan een gebruiker"
|
815 |
+
|
816 |
+
#: views/admin/general/delete-action-reassign.php:10
|
817 |
+
msgctxt "(Admin)"
|
818 |
+
msgid ""
|
819 |
+
"If the user has submitted any content on your site, should it be deleted or "
|
820 |
+
"reassigned to another user?"
|
821 |
+
msgstr ""
|
822 |
+
"Als de gebruiker inhoud op uw site heeft geplaatst, moet deze dan worden "
|
823 |
+
"verwijderd of opnieuw worden toegewezen aan een andere gebruiker?"
|
824 |
+
|
825 |
+
#: views/admin/general/description-data-page.php:2
|
826 |
+
msgctxt "(Admin)"
|
827 |
+
msgid ""
|
828 |
+
"Select the page where users can go to control their data. This page must "
|
829 |
+
"contain the [gdpr_privacy_tools] shortcode."
|
830 |
+
msgstr ""
|
831 |
+
"Selecteer de pagina waar gebruikers naartoe kunnen om hun gegevens te "
|
832 |
+
"beheren. Deze pagina moet de [gdpr_privacy_tools] shortcode bevatten."
|
833 |
+
|
834 |
+
#: views/admin/general/enable.php:9
|
835 |
+
msgctxt "(Admin)"
|
836 |
+
msgid "Enable the view, export and forget functionality for users and visitors"
|
837 |
+
msgstr ""
|
838 |
+
"Schakel de weergave-, export- en vergeet-functionaliteit in voor gebruikers "
|
839 |
+
"en bezoekers"
|
840 |
+
|
841 |
+
#: views/admin/general/enable.php:12
|
842 |
+
msgctxt "(Admin)"
|
843 |
+
msgid ""
|
844 |
+
"Enable the Privacy Tools page on front-end and dashboard. This allows "
|
845 |
+
"visitors to request viewing and deleting their personal data and withdraw "
|
846 |
+
"consents."
|
847 |
+
msgstr ""
|
848 |
+
"Schakel de Privacy Tools-pagina in op de website en het beheergedeelte van "
|
849 |
+
"de website. Hierdoor kunnen bezoekers een verzoek indienen om hun "
|
850 |
+
"persoonlijke gegevens te bekijken en verwijderen of het intrekken van "
|
851 |
+
"toestemmingen."
|
852 |
+
|
853 |
+
#: views/admin/general/theme-compatibility.php:9
|
854 |
+
#: views/installer/steps/integrations.php:21
|
855 |
+
msgctxt "(Admin)"
|
856 |
+
msgid ""
|
857 |
+
"Automatically add Privacy Policy and Privacy Tools links to your site footer."
|
858 |
+
msgstr ""
|
859 |
+
"Automatisch links toevoegen aan de footer voor de Privacy Policy en de "
|
860 |
+
"Privacy Tools."
|
861 |
+
|
862 |
+
#: views/admin/notices/header.php:4 views/admin/settings-page.php:3
|
863 |
+
#: views/installer/header.php:23
|
864 |
+
msgctxt "(Admin)"
|
865 |
+
msgid "The GDPR Framework"
|
866 |
+
msgstr "Het GDRP Framework"
|
867 |
+
|
868 |
+
#: views/admin/notices/helper-autoinstall.php:2
|
869 |
+
msgctxt "(Admin)"
|
870 |
+
msgid ""
|
871 |
+
"A Privacy Policy page has been created, but it is empty. You can generate a "
|
872 |
+
"policy template on this page."
|
873 |
+
msgstr ""
|
874 |
+
"Er is een pagina Privacy Policy aangemaakt, maar deze is leeg. U kunt op "
|
875 |
+
"deze pagina een policy-sjabloon genereren."
|
876 |
+
|
877 |
+
#: views/admin/notices/helper-policy.php:2
|
878 |
+
msgctxt "(Admin)"
|
879 |
+
msgid ""
|
880 |
+
"Heads up - your Privacy Policy still requires some attention. Find the "
|
881 |
+
"places marked with [TODO] and replace them with real content!"
|
882 |
+
msgstr ""
|
883 |
+
"Let op - uw privacybeleid vereist nog steeds enige aandacht. Zoek de "
|
884 |
+
"plaatsen gemarkeerd met [TODO] en vervang ze door echte inhoud!"
|
885 |
+
|
886 |
+
#: views/admin/notices/helper-tools.php:2
|
887 |
+
msgctxt "(Admin)"
|
888 |
+
msgid "The contents of this page should contain the [gdpr_tools] shortcode."
|
889 |
+
msgstr "De inhoud van deze pagina moet de [gdpr_tools] shortcode bevatten."
|
890 |
+
|
891 |
+
#: views/admin/privacy-policy/description-policy-page.php:2
|
892 |
+
msgctxt "(Admin)"
|
893 |
+
msgid "Select the page which will contain your Privacy Policy"
|
894 |
+
msgstr "Selecteer de pagina die uw privacybeleid zal bevatten"
|
895 |
+
|
896 |
+
#: views/admin/privacy-policy/generated.php:3
|
897 |
+
msgctxt "(Admin)"
|
898 |
+
msgid "Your Privacy Policy has been generated."
|
899 |
+
msgstr "Uw privacybeleid is gegenereerd."
|
900 |
+
|
901 |
+
#: views/admin/privacy-policy/generated.php:20
|
902 |
+
msgctxt "(Admin)"
|
903 |
+
msgid "« Back"
|
904 |
+
msgstr "« Terug"
|
905 |
+
|
906 |
+
#: views/admin/privacy-policy/header.php:2
|
907 |
+
msgctxt "(Admin)"
|
908 |
+
msgid ""
|
909 |
+
"This page allows you to generate a Privacy Policy based on the information "
|
910 |
+
"you entered below."
|
911 |
+
msgstr ""
|
912 |
+
"Op deze pagina kunt u een Privacy Policy genereren op basis van de "
|
913 |
+
"informatie die u hieronder heeft ingevoerd."
|
914 |
+
|
915 |
+
#: views/admin/settings-page.php:31
|
916 |
+
#, php-format
|
917 |
+
msgctxt "(Admin)"
|
918 |
+
msgid "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
919 |
+
msgstr "Het GDPR Framework. Ontwikkeld met ♥ door %sCodelight%s."
|
920 |
+
|
921 |
+
#: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
|
922 |
+
msgctxt "(Admin)"
|
923 |
+
msgid "Need more info?"
|
924 |
+
msgstr "Meer informatie nodig?"
|
925 |
+
|
926 |
+
#: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
|
927 |
+
msgctxt "(Admin)"
|
928 |
+
msgid "Site Owner's guide to GDPR"
|
929 |
+
msgstr "Handleiding voor websitebeheerders"
|
930 |
+
|
931 |
+
#: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
|
932 |
+
msgctxt "(Admin)"
|
933 |
+
msgid "Read the full guide on GDPR compliance."
|
934 |
+
msgstr "Lees de volledige handleiding over GDRP complice."
|
935 |
+
|
936 |
+
#: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
|
937 |
+
msgctxt "(Admin)"
|
938 |
+
msgid "Knowledge base"
|
939 |
+
msgstr "Kennisbank"
|
940 |
+
|
941 |
+
#: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
|
942 |
+
msgctxt "(Admin)"
|
943 |
+
msgid "Check out the knowledge base for common questions and answers."
|
944 |
+
msgstr "Bekijk de kennisbank voor veelgestelde vragen en antwoorden."
|
945 |
+
|
946 |
+
#: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
|
947 |
+
msgctxt "(Admin)"
|
948 |
+
msgid "Developer's guide to GDPR"
|
949 |
+
msgstr "Developer’s guide to GDPR"
|
950 |
+
|
951 |
+
#: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
|
952 |
+
msgctxt "(Admin)"
|
953 |
+
msgid "We have a thorough guide to help making custom sites compliant."
|
954 |
+
msgstr "Ik ben het met u eens dat het onze morele plicht is hen te helpen."
|
955 |
+
|
956 |
+
#: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
|
957 |
+
msgctxt "(Admin)"
|
958 |
+
msgid "Need help?"
|
959 |
+
msgstr "Hulp nodig?"
|
960 |
+
|
961 |
+
#: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
|
962 |
+
msgctxt "(Admin)"
|
963 |
+
msgid "Submit a support request"
|
964 |
+
msgstr "Vraag een support-ticket aan"
|
965 |
+
|
966 |
+
#: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
|
967 |
+
msgctxt "(Admin)"
|
968 |
+
msgid ""
|
969 |
+
"Found a bug or problem with the plugin? Post in the wordpress.org support "
|
970 |
+
"forum."
|
971 |
+
msgstr ""
|
972 |
+
"Heeft u een bug of probleem met de plug-in gevonden? Plaats het op het "
|
973 |
+
"supportforum van wordpress.org."
|
974 |
+
|
975 |
+
#: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
|
976 |
+
msgctxt "(Admin)"
|
977 |
+
msgid "Request a consultation"
|
978 |
+
msgstr "Vraag nu een consult aan"
|
979 |
+
|
980 |
+
#: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
|
981 |
+
msgctxt "(Admin)"
|
982 |
+
msgid ""
|
983 |
+
"Need development or legal assistance in making your site compliant? We can "
|
984 |
+
"help!"
|
985 |
+
msgstr ""
|
986 |
+
"Ondersteuning of juridische hulp nodig om je website GDRP compliant te "
|
987 |
+
"maken? Wij kunnen je helpen!"
|
988 |
+
|
989 |
+
#: views/admin/wizard-buttons.php:2
|
990 |
+
msgctxt "(Admin)"
|
991 |
+
msgid "Restart setup wizard"
|
992 |
+
msgstr "Installatiewizard opnieuw uitvoeren"
|
993 |
+
|
994 |
+
#: views/email/action-export.php:8 views/email/action-forget.php:12
|
995 |
+
msgctxt "(Admin)"
|
996 |
+
msgid ""
|
997 |
+
"This email is just for your information. You don't need to take any action"
|
998 |
+
msgstr ""
|
999 |
+
"Deze e-mail is puur ter info. Je hoeft geen verdere actie te ondernemen"
|
1000 |
+
|
1001 |
+
#: views/email/action-forget.php:8
|
1002 |
+
msgctxt "(Admin)"
|
1003 |
+
msgid "The data subject had a user account on your website."
|
1004 |
+
msgstr "De betrokkene had een gebruikersaccount op uw website."
|
1005 |
+
|
1006 |
+
#: views/email/identify-data-subject.php:2
|
1007 |
+
msgid "Someone has requested access to your data on"
|
1008 |
+
msgstr "Iemand heeft om toegang tot uw gegevens gevraagd op"
|
1009 |
+
|
1010 |
+
#: views/email/identify-data-subject.php:3
|
1011 |
+
msgid "If this was a mistake, just ignore this email and nothing will happen."
|
1012 |
+
msgstr ""
|
1013 |
+
"Als dit een vergissing was, negeer dan deze e-mail en er zal niets gebeuren."
|
1014 |
+
|
1015 |
+
#: views/email/identify-data-subject.php:4
|
1016 |
+
msgid "To manage your data, visit the following address:"
|
1017 |
+
msgstr "Ga naar het volgende adres om je data te beheren:"
|
1018 |
+
|
1019 |
+
#: views/email/identify-data-subject.php:10
|
1020 |
+
msgid "This link is valid for 15 minutes."
|
1021 |
+
msgstr "Deze link is 15 minuten geldig."
|
1022 |
+
|
1023 |
+
#: views/email/no-data.php:2
|
1024 |
+
msgid "Someone has requested information about your personal data on"
|
1025 |
+
msgstr "Iemand heeft om informatie over uw persoonlijke gegevens gevraagd op"
|
1026 |
+
|
1027 |
+
#: views/email/no-data.php:3
|
1028 |
+
msgid "None of your personal data is stored on"
|
1029 |
+
msgstr "Geen van uw persoonlijke gegevens wordt opgeslagen op"
|
1030 |
+
|
1031 |
+
#: views/email/no-data.php:5
|
1032 |
+
msgid ""
|
1033 |
+
"If this was a mistake or you did not request this email, just ignore it and "
|
1034 |
+
"nothing will happen."
|
1035 |
+
msgstr ""
|
1036 |
+
"Als dit een vergissing was, negeer dan deze e-mail en er zal niets gebeuren."
|
1037 |
+
|
1038 |
+
#: views/email/request-export.php:13 views/email/request-forget.php:13
|
1039 |
+
msgctxt "(Admin)"
|
1040 |
+
msgid "As a reminder: according to GDPR, you have 30 days to comply."
|
1041 |
+
msgstr "Ter herinnering: volgens de GDPR heb je 30 dagen om eraan te voldoen."
|
1042 |
+
|
1043 |
+
#: views/global/delete-action.php:2
|
1044 |
+
msgctxt "(Admin)"
|
1045 |
+
msgid "Automatically anonymize data"
|
1046 |
+
msgstr "Automatisch gegevens te anonimiseren"
|
1047 |
+
|
1048 |
+
#: views/global/delete-action.php:5
|
1049 |
+
msgctxt "(Admin)"
|
1050 |
+
msgid "Automatically delete data"
|
1051 |
+
msgstr "Automatisch gegevens verwijderen"
|
1052 |
+
|
1053 |
+
#: views/global/delete-action.php:9
|
1054 |
+
msgctxt "(Admin)"
|
1055 |
+
msgid "Automatically anonymize data and notify me via email"
|
1056 |
+
msgstr ""
|
1057 |
+
"Gegevens automatisch anonimiseren en me via e-mail op de hoogte stellen"
|
1058 |
+
|
1059 |
+
#: views/global/delete-action.php:13
|
1060 |
+
msgctxt "(Admin)"
|
1061 |
+
msgid "Automatically delete data and notify me via email"
|
1062 |
+
msgstr "Automatisch gegevens verwijderen en me via e-mail op de hoogte stellen"
|
1063 |
+
|
1064 |
+
#: views/global/delete-action.php:16 views/global/export-action.php:10
|
1065 |
+
msgctxt "(Admin)"
|
1066 |
+
msgid "Only notify me via email"
|
1067 |
+
msgstr "Geef mij alleen via emaill bericht"
|
1068 |
+
|
1069 |
+
#: views/global/export-action.php:2
|
1070 |
+
msgctxt "(Admin)"
|
1071 |
+
msgid "Automatically download data"
|
1072 |
+
msgstr "Gegevens automatisch downloaden"
|
1073 |
+
|
1074 |
+
#: views/global/export-action.php:6
|
1075 |
+
msgctxt "(Admin)"
|
1076 |
+
msgid "Automatically download data and notify me via email"
|
1077 |
+
msgstr "Automatisch gegevens downloaden en me een e-mail sturen"
|
1078 |
+
|
1079 |
+
#: views/installer/continue-notice.php:2
|
1080 |
+
msgctxt "(Admin)"
|
1081 |
+
msgid "The The GDPR Framework setup has not been finalized yet."
|
1082 |
+
msgstr "De opstelling van The GDPR Framework is nog niet voltooid."
|
1083 |
+
|
1084 |
+
#: views/installer/continue-notice.php:3
|
1085 |
+
msgctxt "(Admin)"
|
1086 |
+
msgid "You can continue the setup at any time."
|
1087 |
+
msgstr "U kunt de installatie op elk gewenst moment voortzetten."
|
1088 |
+
|
1089 |
+
#: views/installer/continue-notice.php:6
|
1090 |
+
msgctxt "(Admin)"
|
1091 |
+
msgid "Continue the setup wizard"
|
1092 |
+
msgstr "Ga verder met de setup-wizard"
|
1093 |
+
|
1094 |
+
#: views/installer/continue-notice.php:9
|
1095 |
+
msgctxt "(Admin)"
|
1096 |
+
msgid "Hide this message"
|
1097 |
+
msgstr "Deze melding verbergen"
|
1098 |
+
|
1099 |
+
#: views/installer/footer.php:7
|
1100 |
+
msgid "Back"
|
1101 |
+
msgstr "Terug"
|
1102 |
+
|
1103 |
+
#: views/installer/header.php:26
|
1104 |
+
msgctxt "(Admin)"
|
1105 |
+
msgid "I need help"
|
1106 |
+
msgstr "Ik heb hulp nodig"
|
1107 |
+
|
1108 |
+
#: views/installer/header.php:29
|
1109 |
+
msgctxt "(Admin)"
|
1110 |
+
msgid "Developer Docs"
|
1111 |
+
msgstr "Ontwikkelaars Docs"
|
1112 |
+
|
1113 |
+
#: views/installer/header.php:36
|
1114 |
+
msgctxt "(Admin)"
|
1115 |
+
msgid "Configuration"
|
1116 |
+
msgstr "Configuratie"
|
1117 |
+
|
1118 |
+
#: views/installer/header.php:46
|
1119 |
+
msgctxt "(Admin)"
|
1120 |
+
msgid "Forms & Consent"
|
1121 |
+
msgstr "Formulieren & Toestemming"
|
1122 |
+
|
1123 |
+
#: views/installer/header.php:51
|
1124 |
+
msgctxt "(Admin)"
|
1125 |
+
msgid "Integrations"
|
1126 |
+
msgstr "Integraties"
|
1127 |
+
|
1128 |
+
#: views/installer/steps/configuration-settings.php:23
|
1129 |
+
#: views/installer/steps/configuration-settings.php:73
|
1130 |
+
msgctxt "(Admin)"
|
1131 |
+
msgid "Enter the email address to notify"
|
1132 |
+
msgstr "E-mailadres voor notificatie"
|
1133 |
+
|
1134 |
+
#: views/installer/steps/disclaimer.php:21
|
1135 |
+
msgctxt "(Admin)"
|
1136 |
+
msgid "I accept"
|
1137 |
+
msgstr "Ik ga akkoord"
|
1138 |
+
|
1139 |
+
#: views/installer/welcome-notice.php:7
|
1140 |
+
msgctxt "(Admin)"
|
1141 |
+
msgid "Run the setup wizard"
|
1142 |
+
msgstr "Installatiewizard uitvoeren"
|
1143 |
+
|
1144 |
+
#: views/installer/welcome-notice.php:11
|
1145 |
+
msgctxt "(Admin)"
|
1146 |
+
msgid "Auto-install pages"
|
1147 |
+
msgstr "Pagina’s automatisch installeren"
|
1148 |
+
|
1149 |
+
#: views/installer/welcome-notice.php:15
|
1150 |
+
msgctxt "(Admin)"
|
1151 |
+
msgid "Skip and install manually"
|
1152 |
+
msgstr "Overslaan en handmatig installeren"
|
1153 |
+
|
1154 |
+
#: views/modules/contact-form-7/generator-privacy.php:6
|
1155 |
+
msgctxt "(Admin)"
|
1156 |
+
msgid ""
|
1157 |
+
"This tag generates the default text for Terms & Conditions and/or Privacy "
|
1158 |
+
"Policy checkbox."
|
1159 |
+
msgstr ""
|
1160 |
+
"Deze tag genereert de standaardtekst voor het selectievakje Algemene "
|
1161 |
+
"voorwaarden en/of Privacybeleid."
|
1162 |
+
|
1163 |
+
#: views/modules/contact-form-7/generator-privacy.php:15
|
1164 |
+
msgid "Insert"
|
1165 |
+
msgstr "Invoegen"
|
1166 |
+
|
1167 |
+
#: views/modules/wordpress-comments/terms-checkbox.php:6
|
1168 |
+
#: views/modules/wordpress-user/registration-terms-checkbox.php:7
|
1169 |
+
#, php-format
|
1170 |
+
msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
|
1171 |
+
msgstr "Ik accepteer de %sAlgemene voorwaarden%s en de %sPrivacy Policy%s"
|
1172 |
+
|
1173 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
|
1174 |
+
msgid "Manage consents"
|
1175 |
+
msgstr "Toestemmingen beheren"
|
1176 |
+
|
1177 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
|
1178 |
+
#: views/privacy-tools/form-consent.php:6
|
1179 |
+
msgid "Here you can withdraw any consents you have given."
|
1180 |
+
msgstr "Hier kunt u alle toestemmingen die u heeft gegeven intrekken."
|
1181 |
+
|
1182 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
|
1183 |
+
#: views/privacy-tools/form-consent.php:9
|
1184 |
+
msgid "Consent types"
|
1185 |
+
msgstr "Toestemming typen"
|
1186 |
+
|
1187 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
|
1188 |
+
#: views/privacy-tools/form-consent.php:24
|
1189 |
+
msgid "Withdraw"
|
1190 |
+
msgstr "Terugtrekken"
|
1191 |
+
|
1192 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
|
1193 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
|
1194 |
+
msgctxt "(Admin)"
|
1195 |
+
msgid "Delete this user and all data"
|
1196 |
+
msgstr "Verwijder gebruiker en alle data"
|
1197 |
+
|
1198 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
|
1199 |
+
msgctxt "(Admin)"
|
1200 |
+
msgid "Delete my data"
|
1201 |
+
msgstr "Verwijder mijn gegevens"
|
1202 |
+
|
1203 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
|
1204 |
+
#: views/privacy-tools/form-delete.php:13
|
1205 |
+
msgid "Delete all data we have gathered about you."
|
1206 |
+
msgstr "Verwijder alle gegevens die wij van jou hebben verzameld."
|
1207 |
+
|
1208 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
|
1209 |
+
#: views/privacy-tools/form-delete.php:14
|
1210 |
+
msgid "If you have a user account on our site, it will also be deleted."
|
1211 |
+
msgstr ""
|
1212 |
+
"Heeft u een gebruikersaccount op onze site, dan zal het deze ook worden "
|
1213 |
+
"verwijderd."
|
1214 |
+
|
1215 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
|
1216 |
+
#: views/privacy-tools/form-delete.php:15
|
1217 |
+
msgid "Be careful - this action is permanent and CANNOT be undone."
|
1218 |
+
msgstr ""
|
1219 |
+
"Wees voorzichtig, deze actie kan niet ongedaan worden gemaakt en is "
|
1220 |
+
"permanent."
|
1221 |
+
|
1222 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
|
1223 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
|
1224 |
+
msgctxt "(Admin)"
|
1225 |
+
msgid ""
|
1226 |
+
"You seem to have an administrator or equivalent role, so deleting/"
|
1227 |
+
"anonymizing via this page is disabled."
|
1228 |
+
msgstr ""
|
1229 |
+
"U lijkt een beheerder of een vergelijkbare rol te hebben, dus verwijderen/"
|
1230 |
+
"anonimiseren via deze pagina is uitgeschakeld."
|
1231 |
+
|
1232 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:7
|
1233 |
+
#: views/privacy-tools/form-export.php:1
|
1234 |
+
msgid "Download your data"
|
1235 |
+
msgstr "Download uw gegevens"
|
1236 |
+
|
1237 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:12
|
1238 |
+
#: views/privacy-tools/form-export.php:13
|
1239 |
+
msgid "Download as table"
|
1240 |
+
msgstr "Downloaden als tabel"
|
1241 |
+
|
1242 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:15
|
1243 |
+
#: views/privacy-tools/form-export.php:22
|
1244 |
+
msgid "Export as JSON"
|
1245 |
+
msgstr "Exporteer gegevens (JSON)"
|
1246 |
+
|
1247 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:19
|
1248 |
+
#: views/privacy-tools/form-export.php:4
|
1249 |
+
msgid "You can download all your data formatted as a table for viewing."
|
1250 |
+
msgstr "U kunt al uw gegevens downloaden om te bekijken in een tabel."
|
1251 |
+
|
1252 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:20
|
1253 |
+
#: views/privacy-tools/form-export.php:5
|
1254 |
+
msgid "Alternatively, you can export it in machine-readable JSON format."
|
1255 |
+
msgstr ""
|
1256 |
+
"Als alternatief kun je de data exporteren naar een machine-leesbaar JSON "
|
1257 |
+
"formaat."
|
1258 |
+
|
1259 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
|
1260 |
+
msgctxt "(Admin)"
|
1261 |
+
msgid "Delete user and all data"
|
1262 |
+
msgstr "Verwijder gebruiker en alle data"
|
1263 |
+
|
1264 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
|
1265 |
+
msgctxt "(Admin)"
|
1266 |
+
msgid "Anonymize user and all data"
|
1267 |
+
msgstr "Anonimiseer gebruiker en alle data"
|
1268 |
+
|
1269 |
+
#: views/modules/wordpress-user/dashboard/profile-page/header.php:2
|
1270 |
+
msgctxt "(Admin)"
|
1271 |
+
msgid "GDPR Data"
|
1272 |
+
msgstr "GDPR-gegevens"
|
1273 |
+
|
1274 |
+
#: views/modules/wordpress-user/dashboard/profile-page/header.php:6
|
1275 |
+
msgctxt "(Admin)"
|
1276 |
+
msgid "This user has been anonymized."
|
1277 |
+
msgstr "Deze gebruiker is geanonimiseerd."
|
1278 |
+
|
1279 |
+
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
|
1280 |
+
msgctxt "(Admin)"
|
1281 |
+
msgid "Consents given"
|
1282 |
+
msgstr "Toestemmingen gegeven"
|
1283 |
+
|
1284 |
+
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
|
1285 |
+
msgctxt "(Admin)"
|
1286 |
+
msgid "No consents given"
|
1287 |
+
msgstr "Geen toestemmingen gegeven"
|
1288 |
+
|
1289 |
+
#: views/privacy-tools/form-consent.php:2
|
1290 |
+
msgid "Consent"
|
1291 |
+
msgstr "Toestemming"
|
1292 |
+
|
1293 |
+
#: views/privacy-tools/form-delete.php:1
|
1294 |
+
#: views/privacy-tools/notice-admin-role.php:1
|
1295 |
+
msgid "Delete my user and data"
|
1296 |
+
msgstr "Mijn gebruiker en gegevens verwijderen"
|
1297 |
+
|
1298 |
+
#: views/privacy-tools/form-delete.php:7
|
1299 |
+
msgid "Delete my data"
|
1300 |
+
msgstr "Verwijder mijn gegevens"
|
1301 |
+
|
1302 |
+
#: views/privacy-tools/form-identify.php:8
|
1303 |
+
msgid "Back to Privacy Tools"
|
1304 |
+
msgstr "Terug naar Privacy Tools"
|
1305 |
+
|
1306 |
+
#: views/privacy-tools/form-identify.php:14
|
1307 |
+
msgid "Identify yourself!"
|
1308 |
+
msgstr "Identificeer jezelf!"
|
1309 |
+
|
1310 |
+
#: views/privacy-tools/form-identify.php:17
|
1311 |
+
#: views/privacy-tools/form-identify.php:20
|
1312 |
+
msgid "Enter your email address"
|
1313 |
+
msgstr "Voer uw e-mailadres in"
|
1314 |
+
|
1315 |
+
#: views/privacy-tools/form-identify.php:23
|
1316 |
+
msgid "Send email"
|
1317 |
+
msgstr "Verstuur email"
|
1318 |
+
|
1319 |
+
#: views/privacy-tools/notice-admin-role.php:4
|
1320 |
+
msgctxt "(Admin)"
|
1321 |
+
msgid "Data deletion is disabled for administrative accounts."
|
1322 |
+
msgstr "Verwijdering van de gegevens is uitgeschakeld voor beheerdersaccounts."
|
1323 |
+
|
1324 |
+
#: views/privacy-tools/notices.php:3
|
1325 |
+
msgid ""
|
1326 |
+
"We will send you an email with the link to access your data. Please check "
|
1327 |
+
"your spam folder as well!"
|
1328 |
+
msgstr ""
|
1329 |
+
"Wij sturen u een e-mail met de link voor toegang tot uw gegevens. Controleer "
|
1330 |
+
"je spam-map ook!"
|
1331 |
+
|
1332 |
+
#: views/privacy-tools/notices.php:7
|
1333 |
+
msgid "The email you entered does not appear to be a valid email."
|
1334 |
+
msgstr "Het e-mailadres dat u hebt ingevoerd, lijkt ongeldig."
|
1335 |
+
|
1336 |
+
#: views/privacy-tools/notices.php:11
|
1337 |
+
msgid "Sorry - the link seems to have expired. Please try again!"
|
1338 |
+
msgstr "Sorry - de link lijkt verlopen. Probeer het opnieuw!"
|
1339 |
+
|
1340 |
+
#: views/privacy-tools/notices.php:23
|
1341 |
+
msgid "Your personal data has been removed!"
|
1342 |
+
msgstr "Je persoonlijke data is verwijderd!"
|
1343 |
+
|
1344 |
+
#: views/privacy-tools/privacy-tools.php:5
|
1345 |
+
msgid "You are identified as"
|
1346 |
+
msgstr "Je bent geïdentificeerd als"
|
languages/gdpr-framework.pot
CHANGED
@@ -1,1284 +1,1328 @@
|
|
1 |
-
# SOME DESCRIPTIVE TITLE.
|
2 |
-
# Copyright (C) YEAR Codelight
|
3 |
-
# This file is distributed under the same license as the The GDPR Framework package.
|
4 |
-
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
-
#
|
6 |
-
#, fuzzy
|
7 |
-
msgid ""
|
8 |
-
msgstr ""
|
9 |
-
"Project-Id-Version: The GDPR Framework 1.0\n"
|
10 |
-
"Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
|
11 |
-
"POT-Creation-Date: 2018-
|
12 |
-
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
13 |
-
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14 |
-
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15 |
-
"Language: \n"
|
16 |
-
"MIME-Version: 1.0\n"
|
17 |
-
"Content-Type: text/plain; charset=CHARSET\n"
|
18 |
-
"Content-Transfer-Encoding: 8bit\n"
|
19 |
-
|
20 |
-
#: gdpr-framework.php:
|
21 |
-
msgctxt "(Admin)"
|
22 |
-
msgid "WordPress GDPR › Error"
|
23 |
-
msgstr ""
|
24 |
-
|
25 |
-
#: gdpr-framework.php:
|
26 |
-
msgctxt "(Admin)"
|
27 |
-
msgid "
|
28 |
-
msgstr ""
|
29 |
-
|
30 |
-
#: gdpr-framework.php:
|
31 |
-
msgctxt "(Admin)"
|
32 |
-
msgid "
|
33 |
-
msgstr ""
|
34 |
-
|
35 |
-
#: gdpr-framework.php:
|
36 |
-
msgctxt "(Admin)"
|
37 |
-
msgid "
|
38 |
-
msgstr ""
|
39 |
-
|
40 |
-
#: gdpr-framework.php:
|
41 |
-
msgctxt "(Admin)"
|
42 |
-
msgid "
|
43 |
-
msgstr ""
|
44 |
-
|
45 |
-
#: gdpr-framework.php:
|
46 |
-
msgctxt "(Admin)"
|
47 |
-
msgid ""
|
48 |
-
"You appear to be running a development version of GDPR. You must run "
|
49 |
-
"<code>composer install</code> from the plugin directory."
|
50 |
-
msgstr ""
|
51 |
-
|
52 |
-
#: gdpr-framework.php:
|
53 |
-
msgctxt "(Admin)"
|
54 |
-
msgid "Autoloader not found."
|
55 |
-
msgstr ""
|
56 |
-
|
57 |
-
#: gdpr-framework.php:
|
58 |
-
msgctxt "(Admin)"
|
59 |
-
msgid "Anonymous"
|
60 |
-
msgstr ""
|
61 |
-
|
62 |
-
#: src/Admin/AdminTab.php:115
|
63 |
-
msgctxt "(Admin)"
|
64 |
-
msgid "Save"
|
65 |
-
msgstr ""
|
66 |
-
|
67 |
-
#: src/Admin/AdminTab.php:151
|
68 |
-
msgctxt "(Admin)"
|
69 |
-
msgid "Policy generated!"
|
70 |
-
msgstr ""
|
71 |
-
|
72 |
-
#: src/Admin/AdminTabGeneral.php:11
|
73 |
-
msgctxt "(Admin)"
|
74 |
-
msgid "General"
|
75 |
-
msgstr ""
|
76 |
-
|
77 |
-
#: src/Admin/AdminTabGeneral.php:38
|
78 |
-
msgctxt "(Admin)"
|
79 |
-
msgid "General Settings"
|
80 |
-
msgstr ""
|
81 |
-
|
82 |
-
#: src/Admin/AdminTabGeneral.php:43
|
83 |
-
msgctxt "(Admin)"
|
84 |
-
msgid "Enable Privacy Tools"
|
85 |
-
msgstr ""
|
86 |
-
|
87 |
-
#: src/Admin/AdminTabGeneral.php:53
|
88 |
-
msgctxt "(Admin)"
|
89 |
-
msgid "Pages"
|
90 |
-
msgstr ""
|
91 |
-
|
92 |
-
#: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
|
93 |
-
msgctxt "(Admin)"
|
94 |
-
msgid "Privacy Tools Page"
|
95 |
-
msgstr ""
|
96 |
-
|
97 |
-
#: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
|
98 |
-
msgctxt "(Admin)"
|
99 |
-
msgid "Privacy Policy Page"
|
100 |
-
msgstr ""
|
101 |
-
|
102 |
-
#: src/Admin/AdminTabGeneral.php:72
|
103 |
-
msgctxt "(Admin)"
|
104 |
-
msgid "Terms & Conditions Page"
|
105 |
-
msgstr ""
|
106 |
-
|
107 |
-
#: src/Admin/AdminTabGeneral.php:82
|
108 |
-
msgctxt "(Admin)"
|
109 |
-
msgid "View & Export Data"
|
110 |
-
msgstr ""
|
111 |
-
|
112 |
-
#: src/Admin/AdminTabGeneral.php:87
|
113 |
-
msgctxt "(Admin)"
|
114 |
-
msgid "Export action"
|
115 |
-
msgstr ""
|
116 |
-
|
117 |
-
#: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
|
118 |
-
msgctxt "(Admin)"
|
119 |
-
msgid "Email to notify"
|
120 |
-
msgstr ""
|
121 |
-
|
122 |
-
#: src/Admin/AdminTabGeneral.php:105
|
123 |
-
msgctxt "(Admin)"
|
124 |
-
msgid "Delete & Anonymize Data"
|
125 |
-
msgstr ""
|
126 |
-
|
127 |
-
#: src/Admin/AdminTabGeneral.php:110
|
128 |
-
msgctxt "(Admin)"
|
129 |
-
msgid "Delete action"
|
130 |
-
msgstr ""
|
131 |
-
|
132 |
-
#: src/Admin/AdminTabGeneral.php:117
|
133 |
-
msgctxt "(Admin)"
|
134 |
-
msgid "Delete or reassign content?"
|
135 |
-
msgstr ""
|
136 |
-
|
137 |
-
#: src/Admin/AdminTabGeneral.php:125
|
138 |
-
msgctxt "(Admin)"
|
139 |
-
msgid "Reassign content to"
|
140 |
-
msgstr ""
|
141 |
-
|
142 |
-
#: src/Admin/AdminTabGeneral.php:145
|
143 |
-
msgctxt "(Admin)"
|
144 |
-
msgid "Styling"
|
145 |
-
msgstr ""
|
146 |
-
|
147 |
-
#: src/Admin/AdminTabGeneral.php:150
|
148 |
-
msgctxt "(Admin)"
|
149 |
-
msgid "Enable basic styling on Privacy Tools page"
|
150 |
-
msgstr ""
|
151 |
-
|
152 |
-
#: src/Admin/AdminTabGeneral.php:162
|
153 |
-
msgctxt "(Admin)"
|
154 |
-
msgid "Compatibility"
|
155 |
-
msgstr ""
|
156 |
-
|
157 |
-
#: src/Admin/AdminTabGeneral.php:167
|
158 |
-
msgctxt "(Admin)"
|
159 |
-
msgid "Enable automatic theme compatibility"
|
160 |
-
msgstr ""
|
161 |
-
|
162 |
-
#: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
|
163 |
-
#: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
|
164 |
-
#: views/installer/steps/configuration-settings.php:62
|
165 |
-
msgctxt "(Admin)"
|
166 |
-
msgid "— Select —"
|
167 |
-
msgstr ""
|
168 |
-
|
169 |
-
#: src/Admin/WordpressAdmin.php:65
|
170 |
-
msgctxt "(Admin)"
|
171 |
-
msgid "Privacy & GDPR Settings"
|
172 |
-
msgstr ""
|
173 |
-
|
174 |
-
#: src/Admin/WordpressAdmin.php:66
|
175 |
-
msgctxt "(Admin)"
|
176 |
-
msgid "Privacy"
|
177 |
-
msgstr ""
|
178 |
-
|
179 |
-
#: src/Components/Consent/AdminTabConsent.php:30
|
180 |
-
#: src/Components/Consent/AdminTabConsent.php:49
|
181 |
-
msgctxt "(Admin)"
|
182 |
-
msgid "Consent"
|
183 |
-
msgstr ""
|
184 |
-
|
185 |
-
#: src/Components/Consent/AdminTabConsent.php:157
|
186 |
-
msgctxt "(Admin)"
|
187 |
-
msgid "Consent slug is a required field!"
|
188 |
-
msgstr ""
|
189 |
-
|
190 |
-
#: src/Components/Consent/AdminTabConsent.php:162
|
191 |
-
msgctxt "(Admin)"
|
192 |
-
msgid ""
|
193 |
-
"You may only use alphanumeric characters, dash and underscore in the consent "
|
194 |
-
"slug field."
|
195 |
-
msgstr ""
|
196 |
-
|
197 |
-
#: src/Components/Consent/AdminTabConsent.php:167
|
198 |
-
msgctxt "(Admin)"
|
199 |
-
msgid "Consent title is a required field!"
|
200 |
-
msgstr ""
|
201 |
-
|
202 |
-
#: src/Components/Consent/
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
209 |
-
|
210 |
-
#:
|
211 |
-
#:
|
212 |
-
|
213 |
-
msgid ""
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
#: src/Components/
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
237 |
-
msgctxt "(Admin)"
|
238 |
-
msgid "Company
|
239 |
-
msgstr ""
|
240 |
-
|
241 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
253 |
-
msgctxt "(Admin)"
|
254 |
-
msgid "
|
255 |
-
msgstr ""
|
256 |
-
|
257 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
258 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
259 |
-
msgctxt "(Admin)"
|
260 |
-
msgid "Representative Contact
|
261 |
-
msgstr ""
|
262 |
-
|
263 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
264 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
265 |
-
msgctxt "(Admin)"
|
266 |
-
msgid "Representative Contact
|
267 |
-
msgstr ""
|
268 |
-
|
269 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
276 |
-
msgctxt "(Admin)"
|
277 |
-
msgid "Data Protection Authority
|
278 |
-
msgstr ""
|
279 |
-
|
280 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
281 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
282 |
-
msgctxt "(Admin)"
|
283 |
-
msgid "Data Protection Authority
|
284 |
-
msgstr ""
|
285 |
-
|
286 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
287 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
288 |
-
msgctxt "(Admin)"
|
289 |
-
msgid "Data Protection Authority
|
290 |
-
msgstr ""
|
291 |
-
|
292 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
293 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
294 |
-
msgctxt "(Admin)"
|
295 |
-
msgid "Data Protection
|
296 |
-
msgstr ""
|
297 |
-
|
298 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
330 |
-
msgctxt "(Admin)"
|
331 |
-
msgid "
|
332 |
-
msgstr ""
|
333 |
-
|
334 |
-
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
#: src/
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
#:
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
#: src/
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
#:
|
361 |
-
#:
|
362 |
-
|
363 |
-
msgid "
|
364 |
-
msgstr ""
|
365 |
-
|
366 |
-
#: src/Components/
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
msgstr ""
|
371 |
-
|
372 |
-
#: src/Components/
|
373 |
-
|
374 |
-
msgid "
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
#:
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
#:
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
#: src/
|
394 |
-
#:
|
395 |
-
msgctxt "(Admin)"
|
396 |
-
msgid "
|
397 |
-
msgstr ""
|
398 |
-
|
399 |
-
#: src/DataSubject/
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
#: src/Installer/
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
#: src/Installer/Steps/PolicySettings.php:
|
607 |
-
|
608 |
-
|
609 |
-
"
|
610 |
-
msgstr ""
|
611 |
-
|
612 |
-
#: src/
|
613 |
-
msgctxt "(Admin)"
|
614 |
-
msgid "
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
"
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
#: views/admin/consent.php:
|
646 |
-
msgctxt "(Admin)"
|
647 |
-
msgid "
|
648 |
-
msgstr ""
|
649 |
-
|
650 |
-
#: views/admin/consent.php:
|
651 |
-
#: views/admin/consent.php:
|
652 |
-
msgctxt "(Admin)"
|
653 |
-
msgid "
|
654 |
-
msgstr ""
|
655 |
-
|
656 |
-
#: views/admin/consent.php:
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
"
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
"
|
707 |
-
msgstr ""
|
708 |
-
|
709 |
-
#: views/admin/
|
710 |
-
msgctxt "(Admin)"
|
711 |
-
msgid ""
|
712 |
-
"
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
"
|
755 |
-
"
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
#: views/admin/
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
#: views/admin/general/
|
781 |
-
#: views/installer/steps/configuration-settings.php:
|
782 |
-
|
783 |
-
msgid "
|
784 |
-
msgstr ""
|
785 |
-
|
786 |
-
#: views/admin/general/delete-action-reassign.php:
|
787 |
-
#: views/installer/steps/configuration-settings.php:
|
788 |
-
msgctxt "(Admin)"
|
789 |
-
msgid "
|
790 |
-
msgstr ""
|
791 |
-
|
792 |
-
#: views/admin/general/delete-action-reassign.php:
|
793 |
-
|
794 |
-
|
795 |
-
"
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
"
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
"
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
"
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
msgctxt "(Admin)"
|
876 |
-
msgid "The
|
877 |
-
msgstr ""
|
878 |
-
|
879 |
-
#: views/admin/
|
880 |
-
msgctxt "(Admin)"
|
881 |
-
msgid "
|
882 |
-
msgstr ""
|
883 |
-
|
884 |
-
#: views/admin/
|
885 |
-
msgctxt "(Admin)"
|
886 |
-
msgid "
|
887 |
-
msgstr ""
|
888 |
-
|
889 |
-
#: views/admin/
|
890 |
-
msgctxt "(Admin)"
|
891 |
-
msgid "
|
892 |
-
msgstr ""
|
893 |
-
|
894 |
-
#: views/admin/
|
895 |
-
msgctxt "(Admin)"
|
896 |
-
msgid "
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
"
|
941 |
-
msgstr ""
|
942 |
-
|
943 |
-
#: views/admin/
|
944 |
-
msgctxt "(Admin)"
|
945 |
-
msgid "
|
946 |
-
msgstr ""
|
947 |
-
|
948 |
-
#: views/
|
949 |
-
msgctxt "(Admin)"
|
950 |
-
msgid ""
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
msgid "
|
961 |
-
msgstr ""
|
962 |
-
|
963 |
-
#: views/
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
msgid "
|
973 |
-
msgstr ""
|
974 |
-
|
975 |
-
#: views/
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
msgid ""
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
|
1001 |
-
|
1002 |
-
|
1003 |
-
|
1004 |
-
|
1005 |
-
|
1006 |
-
|
1007 |
-
|
1008 |
-
|
1009 |
-
|
1010 |
-
|
1011 |
-
msgid "
|
1012 |
-
msgstr ""
|
1013 |
-
|
1014 |
-
#: views/
|
1015 |
-
|
1016 |
-
|
1017 |
-
|
1018 |
-
|
1019 |
-
|
1020 |
-
|
1021 |
-
|
1022 |
-
|
1023 |
-
|
1024 |
-
|
1025 |
-
|
1026 |
-
|
1027 |
-
|
1028 |
-
|
1029 |
-
|
1030 |
-
|
1031 |
-
|
1032 |
-
|
1033 |
-
|
1034 |
-
|
1035 |
-
|
1036 |
-
|
1037 |
-
|
1038 |
-
|
1039 |
-
|
1040 |
-
|
1041 |
-
|
1042 |
-
|
1043 |
-
|
1044 |
-
|
1045 |
-
|
1046 |
-
|
1047 |
-
|
1048 |
-
|
1049 |
-
|
1050 |
-
msgid "
|
1051 |
-
msgstr ""
|
1052 |
-
|
1053 |
-
#: views/
|
1054 |
-
msgctxt "(Admin)"
|
1055 |
-
msgid "
|
1056 |
-
msgstr ""
|
1057 |
-
|
1058 |
-
#: views/
|
1059 |
-
msgctxt "(Admin)"
|
1060 |
-
msgid "
|
1061 |
-
msgstr ""
|
1062 |
-
|
1063 |
-
#: views/
|
1064 |
-
msgctxt "(Admin)"
|
1065 |
-
msgid "
|
1066 |
-
msgstr ""
|
1067 |
-
|
1068 |
-
#: views/installer/
|
1069 |
-
msgctxt "(Admin)"
|
1070 |
-
msgid "
|
1071 |
-
msgstr ""
|
1072 |
-
|
1073 |
-
#: views/installer/
|
1074 |
-
msgctxt "(Admin)"
|
1075 |
-
msgid "
|
1076 |
-
msgstr ""
|
1077 |
-
|
1078 |
-
#: views/installer/
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
1095 |
-
|
1096 |
-
|
1097 |
-
|
1098 |
-
|
1099 |
-
|
1100 |
-
|
1101 |
-
|
1102 |
-
|
1103 |
-
|
1104 |
-
|
1105 |
-
|
1106 |
-
|
1107 |
-
|
1108 |
-
|
1109 |
-
|
1110 |
-
|
1111 |
-
|
1112 |
-
|
1113 |
-
|
1114 |
-
|
1115 |
-
|
1116 |
-
|
1117 |
-
|
1118 |
-
|
1119 |
-
|
1120 |
-
|
1121 |
-
|
1122 |
-
|
1123 |
-
|
1124 |
-
|
1125 |
-
|
1126 |
-
|
1127 |
-
|
1128 |
-
|
1129 |
-
|
1130 |
-
|
1131 |
-
|
1132 |
-
|
1133 |
-
|
1134 |
-
|
1135 |
-
|
1136 |
-
|
1137 |
-
|
1138 |
-
|
1139 |
-
|
1140 |
-
|
1141 |
-
|
1142 |
-
|
1143 |
-
|
1144 |
-
|
1145 |
-
|
1146 |
-
|
1147 |
-
|
1148 |
-
|
1149 |
-
|
1150 |
-
|
1151 |
-
|
1152 |
-
|
1153 |
-
|
1154 |
-
|
1155 |
-
|
1156 |
-
|
1157 |
-
|
1158 |
-
|
1159 |
-
|
1160 |
-
|
1161 |
-
#: views/
|
1162 |
-
|
1163 |
-
|
1164 |
-
|
1165 |
-
|
1166 |
-
#: views/
|
1167 |
-
|
1168 |
-
|
1169 |
-
|
1170 |
-
|
1171 |
-
|
1172 |
-
msgstr ""
|
1173 |
-
|
1174 |
-
#: views/modules/wordpress-user/dashboard/form-
|
1175 |
-
#: views/privacy-tools/form-
|
1176 |
-
msgid "
|
1177 |
-
msgstr ""
|
1178 |
-
|
1179 |
-
#: views/modules/wordpress-user/dashboard/form-
|
1180 |
-
#: views/
|
1181 |
-
|
1182 |
-
|
1183 |
-
|
1184 |
-
|
1185 |
-
#: views/
|
1186 |
-
|
1187 |
-
|
1188 |
-
|
1189 |
-
|
1190 |
-
#: views/
|
1191 |
-
|
1192 |
-
|
1193 |
-
|
1194 |
-
|
1195 |
-
#: views/
|
1196 |
-
|
1197 |
-
|
1198 |
-
|
1199 |
-
|
1200 |
-
|
1201 |
-
|
1202 |
-
|
1203 |
-
|
1204 |
-
|
1205 |
-
|
1206 |
-
|
1207 |
-
|
1208 |
-
|
1209 |
-
|
1210 |
-
|
1211 |
-
|
1212 |
-
|
1213 |
-
|
1214 |
-
#: views/
|
1215 |
-
|
1216 |
-
|
1217 |
-
|
1218 |
-
|
1219 |
-
#: views/
|
1220 |
-
|
1221 |
-
|
1222 |
-
|
1223 |
-
|
1224 |
-
#: views/
|
1225 |
-
|
1226 |
-
|
1227 |
-
|
1228 |
-
|
1229 |
-
#: views/privacy-tools/form-
|
1230 |
-
msgid "
|
1231 |
-
msgstr ""
|
1232 |
-
|
1233 |
-
#: views/
|
1234 |
-
#: views/privacy-tools/
|
1235 |
-
msgid "
|
1236 |
-
msgstr ""
|
1237 |
-
|
1238 |
-
#: views/
|
1239 |
-
|
1240 |
-
|
1241 |
-
|
1242 |
-
|
1243 |
-
|
1244 |
-
|
1245 |
-
|
1246 |
-
|
1247 |
-
|
1248 |
-
|
1249 |
-
|
1250 |
-
|
1251 |
-
|
1252 |
-
|
1253 |
-
|
1254 |
-
|
1255 |
-
|
1256 |
-
|
1257 |
-
|
1258 |
-
|
1259 |
-
|
1260 |
-
|
1261 |
-
|
1262 |
-
|
1263 |
-
|
1264 |
-
|
1265 |
-
msgid ""
|
1266 |
-
|
1267 |
-
|
1268 |
-
|
1269 |
-
|
1270 |
-
|
1271 |
-
|
1272 |
-
|
1273 |
-
|
1274 |
-
|
1275 |
-
|
1276 |
-
|
1277 |
-
|
1278 |
-
#: views/privacy-tools/
|
1279 |
-
msgid "
|
1280 |
-
msgstr ""
|
1281 |
-
|
1282 |
-
#: views/privacy-tools/
|
1283 |
-
msgid "
|
1284 |
-
msgstr ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# SOME DESCRIPTIVE TITLE.
|
2 |
+
# Copyright (C) YEAR Codelight
|
3 |
+
# This file is distributed under the same license as the The GDPR Framework package.
|
4 |
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
5 |
+
#
|
6 |
+
#, fuzzy
|
7 |
+
msgid ""
|
8 |
+
msgstr ""
|
9 |
+
"Project-Id-Version: The GDPR Framework 1.0\n"
|
10 |
+
"Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
|
11 |
+
"POT-Creation-Date: 2018-05-22 15:47+0300\n"
|
12 |
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
13 |
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14 |
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15 |
+
"Language: \n"
|
16 |
+
"MIME-Version: 1.0\n"
|
17 |
+
"Content-Type: text/plain; charset=CHARSET\n"
|
18 |
+
"Content-Transfer-Encoding: 8bit\n"
|
19 |
+
|
20 |
+
#: gdpr-framework.php:28
|
21 |
+
msgctxt "(Admin)"
|
22 |
+
msgid "WordPress GDPR › Error"
|
23 |
+
msgstr ""
|
24 |
+
|
25 |
+
#: gdpr-framework.php:38
|
26 |
+
msgctxt "(Admin)"
|
27 |
+
msgid "You must be using PHP 5.6.0 or greater."
|
28 |
+
msgstr ""
|
29 |
+
|
30 |
+
#: gdpr-framework.php:39
|
31 |
+
msgctxt "(Admin)"
|
32 |
+
msgid "Invalid PHP version"
|
33 |
+
msgstr ""
|
34 |
+
|
35 |
+
#: gdpr-framework.php:48
|
36 |
+
msgctxt "(Admin)"
|
37 |
+
msgid "You must be using WordPress 4.3.0 or greater."
|
38 |
+
msgstr ""
|
39 |
+
|
40 |
+
#: gdpr-framework.php:49
|
41 |
+
msgctxt "(Admin)"
|
42 |
+
msgid "Invalid WordPress version"
|
43 |
+
msgstr ""
|
44 |
+
|
45 |
+
#: gdpr-framework.php:61
|
46 |
+
msgctxt "(Admin)"
|
47 |
+
msgid ""
|
48 |
+
"You appear to be running a development version of GDPR. You must run "
|
49 |
+
"<code>composer install</code> from the plugin directory."
|
50 |
+
msgstr ""
|
51 |
+
|
52 |
+
#: gdpr-framework.php:66
|
53 |
+
msgctxt "(Admin)"
|
54 |
+
msgid "Autoloader not found."
|
55 |
+
msgstr ""
|
56 |
+
|
57 |
+
#: gdpr-framework.php:86 src/Updater/Updater.php:40
|
58 |
+
msgctxt "(Admin)"
|
59 |
+
msgid "Anonymous"
|
60 |
+
msgstr ""
|
61 |
+
|
62 |
+
#: src/Admin/AdminTab.php:115
|
63 |
+
msgctxt "(Admin)"
|
64 |
+
msgid "Save"
|
65 |
+
msgstr ""
|
66 |
+
|
67 |
+
#: src/Admin/AdminTab.php:151
|
68 |
+
msgctxt "(Admin)"
|
69 |
+
msgid "Policy generated!"
|
70 |
+
msgstr ""
|
71 |
+
|
72 |
+
#: src/Admin/AdminTabGeneral.php:11
|
73 |
+
msgctxt "(Admin)"
|
74 |
+
msgid "General"
|
75 |
+
msgstr ""
|
76 |
+
|
77 |
+
#: src/Admin/AdminTabGeneral.php:38
|
78 |
+
msgctxt "(Admin)"
|
79 |
+
msgid "General Settings"
|
80 |
+
msgstr ""
|
81 |
+
|
82 |
+
#: src/Admin/AdminTabGeneral.php:43
|
83 |
+
msgctxt "(Admin)"
|
84 |
+
msgid "Enable Privacy Tools"
|
85 |
+
msgstr ""
|
86 |
+
|
87 |
+
#: src/Admin/AdminTabGeneral.php:53
|
88 |
+
msgctxt "(Admin)"
|
89 |
+
msgid "Pages"
|
90 |
+
msgstr ""
|
91 |
+
|
92 |
+
#: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
|
93 |
+
msgctxt "(Admin)"
|
94 |
+
msgid "Privacy Tools Page"
|
95 |
+
msgstr ""
|
96 |
+
|
97 |
+
#: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
|
98 |
+
msgctxt "(Admin)"
|
99 |
+
msgid "Privacy Policy Page"
|
100 |
+
msgstr ""
|
101 |
+
|
102 |
+
#: src/Admin/AdminTabGeneral.php:72
|
103 |
+
msgctxt "(Admin)"
|
104 |
+
msgid "Terms & Conditions Page"
|
105 |
+
msgstr ""
|
106 |
+
|
107 |
+
#: src/Admin/AdminTabGeneral.php:82
|
108 |
+
msgctxt "(Admin)"
|
109 |
+
msgid "View & Export Data"
|
110 |
+
msgstr ""
|
111 |
+
|
112 |
+
#: src/Admin/AdminTabGeneral.php:87
|
113 |
+
msgctxt "(Admin)"
|
114 |
+
msgid "Export action"
|
115 |
+
msgstr ""
|
116 |
+
|
117 |
+
#: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
|
118 |
+
msgctxt "(Admin)"
|
119 |
+
msgid "Email to notify"
|
120 |
+
msgstr ""
|
121 |
+
|
122 |
+
#: src/Admin/AdminTabGeneral.php:105
|
123 |
+
msgctxt "(Admin)"
|
124 |
+
msgid "Delete & Anonymize Data"
|
125 |
+
msgstr ""
|
126 |
+
|
127 |
+
#: src/Admin/AdminTabGeneral.php:110
|
128 |
+
msgctxt "(Admin)"
|
129 |
+
msgid "Delete action"
|
130 |
+
msgstr ""
|
131 |
+
|
132 |
+
#: src/Admin/AdminTabGeneral.php:117
|
133 |
+
msgctxt "(Admin)"
|
134 |
+
msgid "Delete or reassign content?"
|
135 |
+
msgstr ""
|
136 |
+
|
137 |
+
#: src/Admin/AdminTabGeneral.php:125
|
138 |
+
msgctxt "(Admin)"
|
139 |
+
msgid "Reassign content to"
|
140 |
+
msgstr ""
|
141 |
+
|
142 |
+
#: src/Admin/AdminTabGeneral.php:145
|
143 |
+
msgctxt "(Admin)"
|
144 |
+
msgid "Styling"
|
145 |
+
msgstr ""
|
146 |
+
|
147 |
+
#: src/Admin/AdminTabGeneral.php:150
|
148 |
+
msgctxt "(Admin)"
|
149 |
+
msgid "Enable basic styling on Privacy Tools page"
|
150 |
+
msgstr ""
|
151 |
+
|
152 |
+
#: src/Admin/AdminTabGeneral.php:162
|
153 |
+
msgctxt "(Admin)"
|
154 |
+
msgid "Compatibility"
|
155 |
+
msgstr ""
|
156 |
+
|
157 |
+
#: src/Admin/AdminTabGeneral.php:167
|
158 |
+
msgctxt "(Admin)"
|
159 |
+
msgid "Enable automatic theme compatibility"
|
160 |
+
msgstr ""
|
161 |
+
|
162 |
+
#: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
|
163 |
+
#: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
|
164 |
+
#: views/installer/steps/configuration-settings.php:62
|
165 |
+
msgctxt "(Admin)"
|
166 |
+
msgid "— Select —"
|
167 |
+
msgstr ""
|
168 |
+
|
169 |
+
#: src/Admin/WordpressAdmin.php:65
|
170 |
+
msgctxt "(Admin)"
|
171 |
+
msgid "Privacy & GDPR Settings"
|
172 |
+
msgstr ""
|
173 |
+
|
174 |
+
#: src/Admin/WordpressAdmin.php:66
|
175 |
+
msgctxt "(Admin)"
|
176 |
+
msgid "Privacy"
|
177 |
+
msgstr ""
|
178 |
+
|
179 |
+
#: src/Components/Consent/AdminTabConsent.php:30
|
180 |
+
#: src/Components/Consent/AdminTabConsent.php:49
|
181 |
+
msgctxt "(Admin)"
|
182 |
+
msgid "Consent"
|
183 |
+
msgstr ""
|
184 |
+
|
185 |
+
#: src/Components/Consent/AdminTabConsent.php:157
|
186 |
+
msgctxt "(Admin)"
|
187 |
+
msgid "Consent slug is a required field!"
|
188 |
+
msgstr ""
|
189 |
+
|
190 |
+
#: src/Components/Consent/AdminTabConsent.php:162
|
191 |
+
msgctxt "(Admin)"
|
192 |
+
msgid ""
|
193 |
+
"You may only use alphanumeric characters, dash and underscore in the consent "
|
194 |
+
"slug field."
|
195 |
+
msgstr ""
|
196 |
+
|
197 |
+
#: src/Components/Consent/AdminTabConsent.php:167
|
198 |
+
msgctxt "(Admin)"
|
199 |
+
msgid "Consent title is a required field!"
|
200 |
+
msgstr ""
|
201 |
+
|
202 |
+
#: src/Components/Consent/AdminTabConsent.php:179
|
203 |
+
msgid ""
|
204 |
+
"To use this website, you accepted our Privacy Policy. If you wish to "
|
205 |
+
"withdraw your acceptance, please use the \"Delete my data\" button below."
|
206 |
+
msgstr ""
|
207 |
+
|
208 |
+
#: src/Components/Consent/ConsentManager.php:46
|
209 |
+
#: views/modules/contact-form-7/content-privacy.php:2
|
210 |
+
#: views/modules/wordpress-comments/terms-checkbox.php:14
|
211 |
+
#: views/modules/wordpress-user/registration-terms-checkbox.php:15
|
212 |
+
#, php-format
|
213 |
+
msgid "I accept the %sPrivacy Policy%s"
|
214 |
+
msgstr ""
|
215 |
+
|
216 |
+
#: src/Components/Consent/ConsentManager.php:50
|
217 |
+
#: src/Components/Consent/ConsentManager.php:69
|
218 |
+
msgctxt "(Admin)"
|
219 |
+
msgid ""
|
220 |
+
"This consent is not visible by default. If someone wishes to withdraw it, "
|
221 |
+
"they should simply request to delete all their data."
|
222 |
+
msgstr ""
|
223 |
+
|
224 |
+
#: src/Components/Consent/ConsentManager.php:65
|
225 |
+
#, php-format
|
226 |
+
msgid "I accept the %sTerms & Conditions%s"
|
227 |
+
msgstr ""
|
228 |
+
|
229 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
|
230 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
|
231 |
+
#: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
|
232 |
+
msgctxt "(Admin)"
|
233 |
+
msgid "Privacy Policy"
|
234 |
+
msgstr ""
|
235 |
+
|
236 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
|
237 |
+
msgctxt "(Admin)"
|
238 |
+
msgid "Company information"
|
239 |
+
msgstr ""
|
240 |
+
|
241 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
|
242 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
|
243 |
+
msgctxt "(Admin)"
|
244 |
+
msgid "Company Name"
|
245 |
+
msgstr ""
|
246 |
+
|
247 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
|
248 |
+
msgctxt "(Admin)"
|
249 |
+
msgid "Company Email"
|
250 |
+
msgstr ""
|
251 |
+
|
252 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
|
253 |
+
msgctxt "(Admin)"
|
254 |
+
msgid "Company Location"
|
255 |
+
msgstr ""
|
256 |
+
|
257 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
|
258 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
|
259 |
+
msgctxt "(Admin)"
|
260 |
+
msgid "Representative Contact Name"
|
261 |
+
msgstr ""
|
262 |
+
|
263 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
|
264 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
|
265 |
+
msgctxt "(Admin)"
|
266 |
+
msgid "Representative Contact Email"
|
267 |
+
msgstr ""
|
268 |
+
|
269 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
|
270 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
|
271 |
+
msgctxt "(Admin)"
|
272 |
+
msgid "Representative Contact Phone"
|
273 |
+
msgstr ""
|
274 |
+
|
275 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
|
276 |
+
msgctxt "(Admin)"
|
277 |
+
msgid "Data Protection Authority"
|
278 |
+
msgstr ""
|
279 |
+
|
280 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
|
281 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
|
282 |
+
msgctxt "(Admin)"
|
283 |
+
msgid "Data Protection Authority Website"
|
284 |
+
msgstr ""
|
285 |
+
|
286 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
|
287 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
|
288 |
+
msgctxt "(Admin)"
|
289 |
+
msgid "Data Protection Authority Email"
|
290 |
+
msgstr ""
|
291 |
+
|
292 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
|
293 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
|
294 |
+
msgctxt "(Admin)"
|
295 |
+
msgid "Data Protection Authority Phone"
|
296 |
+
msgstr ""
|
297 |
+
|
298 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
|
299 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
|
300 |
+
msgctxt "(Admin)"
|
301 |
+
msgid "Data Protection Officer"
|
302 |
+
msgstr ""
|
303 |
+
|
304 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
|
305 |
+
msgctxt "(Admin)"
|
306 |
+
msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
|
307 |
+
msgstr ""
|
308 |
+
|
309 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
|
310 |
+
msgctxt "(Admin)"
|
311 |
+
msgid "Data Protection Officer Name"
|
312 |
+
msgstr ""
|
313 |
+
|
314 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
|
315 |
+
msgctxt "(Admin)"
|
316 |
+
msgid "Data Protection Officer Email"
|
317 |
+
msgstr ""
|
318 |
+
|
319 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
|
320 |
+
msgctxt "(Admin)"
|
321 |
+
msgid "Contact Email"
|
322 |
+
msgstr ""
|
323 |
+
|
324 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
|
325 |
+
msgctxt "(Admin)"
|
326 |
+
msgid "Representative Contact"
|
327 |
+
msgstr ""
|
328 |
+
|
329 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
|
330 |
+
msgctxt "(Admin)"
|
331 |
+
msgid "Knowledge base: Do I need to appoint an EU-based representative?"
|
332 |
+
msgstr ""
|
333 |
+
|
334 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
|
335 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
|
336 |
+
msgctxt "(Admin)"
|
337 |
+
msgid "DPO Name"
|
338 |
+
msgstr ""
|
339 |
+
|
340 |
+
#: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
|
341 |
+
msgctxt "(Admin)"
|
342 |
+
msgid "Save & Generate Policy"
|
343 |
+
msgstr ""
|
344 |
+
|
345 |
+
#: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
|
346 |
+
#: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
|
347 |
+
#: views/themes/storefront/footer.php:3
|
348 |
+
#: views/themes/twentyseventeen/footer.php:3
|
349 |
+
#: views/themes/twentysixteen/footer.php:4
|
350 |
+
msgid "Privacy Policy"
|
351 |
+
msgstr ""
|
352 |
+
|
353 |
+
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
|
354 |
+
msgid "This page is currently disabled."
|
355 |
+
msgstr ""
|
356 |
+
|
357 |
+
#: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
|
358 |
+
#: src/Installer/Installer.php:279
|
359 |
+
#: src/Installer/Steps/ConfigurationPages.php:55
|
360 |
+
#: views/themes/storefront/footer.php:7
|
361 |
+
#: views/themes/twentyseventeen/footer.php:7
|
362 |
+
#: views/themes/twentysixteen/footer.php:9
|
363 |
+
msgid "Privacy Tools"
|
364 |
+
msgstr ""
|
365 |
+
|
366 |
+
#: src/Components/Support/AdminTabSupport.php:13
|
367 |
+
#: src/Components/Support/AdminTabSupport.php:20
|
368 |
+
msgctxt "(Admin)"
|
369 |
+
msgid "Support"
|
370 |
+
msgstr ""
|
371 |
+
|
372 |
+
#: src/Components/WordpressComments/WordpressComments.php:90
|
373 |
+
#, php-format
|
374 |
+
msgid ""
|
375 |
+
"%sERROR:%s You need to accept the terms and conditions to post a comment."
|
376 |
+
msgstr ""
|
377 |
+
|
378 |
+
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
|
379 |
+
#: views/privacy-tools/notices.php:19
|
380 |
+
msgid "We have received your request and will reply within 30 days."
|
381 |
+
msgstr ""
|
382 |
+
|
383 |
+
#: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
|
384 |
+
#: views/privacy-tools/notices.php:15
|
385 |
+
msgid "Consent withdrawn."
|
386 |
+
msgstr ""
|
387 |
+
|
388 |
+
#: src/Components/WordpressUser/RegistrationForm.php:42
|
389 |
+
msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
|
390 |
+
msgstr ""
|
391 |
+
|
392 |
+
#: src/Components/WordpressUser/WordpressUser.php:63
|
393 |
+
#: src/Components/WordpressUser/WordpressUser.php:64
|
394 |
+
#: views/modules/wordpress-user/dashboard/data-page/header.php:2
|
395 |
+
msgctxt "(Admin)"
|
396 |
+
msgid "Privacy Tools"
|
397 |
+
msgstr ""
|
398 |
+
|
399 |
+
#: src/DataSubject/AdminTabDataSubject.php:27
|
400 |
+
#: src/DataSubject/AdminTabDataSubject.php:41
|
401 |
+
msgctxt "(Admin)"
|
402 |
+
msgid "Data Subjects"
|
403 |
+
msgstr ""
|
404 |
+
|
405 |
+
#: src/DataSubject/DataRepository.php:143
|
406 |
+
msgid "Data exported"
|
407 |
+
msgstr ""
|
408 |
+
|
409 |
+
#: src/DataSubject/DataRepository.php:158
|
410 |
+
msgid "Data export request"
|
411 |
+
msgstr ""
|
412 |
+
|
413 |
+
#: src/DataSubject/DataRepository.php:171
|
414 |
+
msgid "Data removed"
|
415 |
+
msgstr ""
|
416 |
+
|
417 |
+
#: src/DataSubject/DataRepository.php:186
|
418 |
+
msgid "Data removal request"
|
419 |
+
msgstr ""
|
420 |
+
|
421 |
+
#: src/DataSubject/DataSubjectIdentificator.php:65
|
422 |
+
#: src/DataSubject/DataSubjectIdentificator.php:82
|
423 |
+
msgid "Your personal data on"
|
424 |
+
msgstr ""
|
425 |
+
|
426 |
+
#: src/Helpers.php:27
|
427 |
+
msgctxt "(Admin)"
|
428 |
+
msgid "Austria"
|
429 |
+
msgstr ""
|
430 |
+
|
431 |
+
#: src/Helpers.php:28
|
432 |
+
msgctxt "(Admin)"
|
433 |
+
msgid "Belgium"
|
434 |
+
msgstr ""
|
435 |
+
|
436 |
+
#: src/Helpers.php:29
|
437 |
+
msgctxt "(Admin)"
|
438 |
+
msgid "Bulgaria"
|
439 |
+
msgstr ""
|
440 |
+
|
441 |
+
#: src/Helpers.php:30
|
442 |
+
msgctxt "(Admin)"
|
443 |
+
msgid "Croatia"
|
444 |
+
msgstr ""
|
445 |
+
|
446 |
+
#: src/Helpers.php:31
|
447 |
+
msgctxt "(Admin)"
|
448 |
+
msgid "Cyprus"
|
449 |
+
msgstr ""
|
450 |
+
|
451 |
+
#: src/Helpers.php:32
|
452 |
+
msgctxt "(Admin)"
|
453 |
+
msgid "Czech Republic"
|
454 |
+
msgstr ""
|
455 |
+
|
456 |
+
#: src/Helpers.php:33
|
457 |
+
msgctxt "(Admin)"
|
458 |
+
msgid "Denmark"
|
459 |
+
msgstr ""
|
460 |
+
|
461 |
+
#: src/Helpers.php:34
|
462 |
+
msgctxt "(Admin)"
|
463 |
+
msgid "Estonia"
|
464 |
+
msgstr ""
|
465 |
+
|
466 |
+
#: src/Helpers.php:35
|
467 |
+
msgctxt "(Admin)"
|
468 |
+
msgid "Finland"
|
469 |
+
msgstr ""
|
470 |
+
|
471 |
+
#: src/Helpers.php:36
|
472 |
+
msgctxt "(Admin)"
|
473 |
+
msgid "France"
|
474 |
+
msgstr ""
|
475 |
+
|
476 |
+
#: src/Helpers.php:37
|
477 |
+
msgctxt "(Admin)"
|
478 |
+
msgid "Germany"
|
479 |
+
msgstr ""
|
480 |
+
|
481 |
+
#: src/Helpers.php:38
|
482 |
+
msgctxt "(Admin)"
|
483 |
+
msgid "Greece"
|
484 |
+
msgstr ""
|
485 |
+
|
486 |
+
#: src/Helpers.php:39
|
487 |
+
msgctxt "(Admin)"
|
488 |
+
msgid "Hungary"
|
489 |
+
msgstr ""
|
490 |
+
|
491 |
+
#: src/Helpers.php:40
|
492 |
+
msgctxt "(Admin)"
|
493 |
+
msgid "Ireland"
|
494 |
+
msgstr ""
|
495 |
+
|
496 |
+
#: src/Helpers.php:41
|
497 |
+
msgctxt "(Admin)"
|
498 |
+
msgid "Italy"
|
499 |
+
msgstr ""
|
500 |
+
|
501 |
+
#: src/Helpers.php:42
|
502 |
+
msgctxt "(Admin)"
|
503 |
+
msgid "Latvia"
|
504 |
+
msgstr ""
|
505 |
+
|
506 |
+
#: src/Helpers.php:43
|
507 |
+
msgctxt "(Admin)"
|
508 |
+
msgid "Lithuania"
|
509 |
+
msgstr ""
|
510 |
+
|
511 |
+
#: src/Helpers.php:44
|
512 |
+
msgctxt "(Admin)"
|
513 |
+
msgid "Luxembourg"
|
514 |
+
msgstr ""
|
515 |
+
|
516 |
+
#: src/Helpers.php:45
|
517 |
+
msgctxt "(Admin)"
|
518 |
+
msgid "Malta"
|
519 |
+
msgstr ""
|
520 |
+
|
521 |
+
#: src/Helpers.php:46
|
522 |
+
msgctxt "(Admin)"
|
523 |
+
msgid "Netherlands"
|
524 |
+
msgstr ""
|
525 |
+
|
526 |
+
#: src/Helpers.php:47
|
527 |
+
msgctxt "(Admin)"
|
528 |
+
msgid "Poland"
|
529 |
+
msgstr ""
|
530 |
+
|
531 |
+
#: src/Helpers.php:48
|
532 |
+
msgctxt "(Admin)"
|
533 |
+
msgid "Portugal"
|
534 |
+
msgstr ""
|
535 |
+
|
536 |
+
#: src/Helpers.php:49
|
537 |
+
msgctxt "(Admin)"
|
538 |
+
msgid "Romania"
|
539 |
+
msgstr ""
|
540 |
+
|
541 |
+
#: src/Helpers.php:50
|
542 |
+
msgctxt "(Admin)"
|
543 |
+
msgid "Slovakia"
|
544 |
+
msgstr ""
|
545 |
+
|
546 |
+
#: src/Helpers.php:51
|
547 |
+
msgctxt "(Admin)"
|
548 |
+
msgid "Slovenia"
|
549 |
+
msgstr ""
|
550 |
+
|
551 |
+
#: src/Helpers.php:52
|
552 |
+
msgctxt "(Admin)"
|
553 |
+
msgid "Spain"
|
554 |
+
msgstr ""
|
555 |
+
|
556 |
+
#: src/Helpers.php:53
|
557 |
+
msgctxt "(Admin)"
|
558 |
+
msgid "Sweden"
|
559 |
+
msgstr ""
|
560 |
+
|
561 |
+
#: src/Helpers.php:54
|
562 |
+
msgctxt "(Admin)"
|
563 |
+
msgid "United Kingdom"
|
564 |
+
msgstr ""
|
565 |
+
|
566 |
+
#: src/Helpers.php:69
|
567 |
+
msgctxt "(Admin)"
|
568 |
+
msgid "Iceland"
|
569 |
+
msgstr ""
|
570 |
+
|
571 |
+
#: src/Helpers.php:70
|
572 |
+
msgctxt "(Admin)"
|
573 |
+
msgid "Norway"
|
574 |
+
msgstr ""
|
575 |
+
|
576 |
+
#: src/Helpers.php:71
|
577 |
+
msgctxt "(Admin)"
|
578 |
+
msgid "Liechtenstein"
|
579 |
+
msgstr ""
|
580 |
+
|
581 |
+
#: src/Helpers.php:72
|
582 |
+
msgctxt "(Admin)"
|
583 |
+
msgid "Switzerland"
|
584 |
+
msgstr ""
|
585 |
+
|
586 |
+
#: src/Helpers.php:73
|
587 |
+
msgctxt "(Admin)"
|
588 |
+
msgid "United States"
|
589 |
+
msgstr ""
|
590 |
+
|
591 |
+
#: src/Helpers.php:74
|
592 |
+
msgctxt "(Admin)"
|
593 |
+
msgid "Rest of the world"
|
594 |
+
msgstr ""
|
595 |
+
|
596 |
+
#: src/Helpers.php:145
|
597 |
+
msgid "An error has occurred. Please contact the site administrator."
|
598 |
+
msgstr ""
|
599 |
+
|
600 |
+
#: src/Installer/Installer.php:135
|
601 |
+
msgctxt "(Admin)"
|
602 |
+
msgid "Setup Wizard"
|
603 |
+
msgstr ""
|
604 |
+
|
605 |
+
#: src/Installer/Steps/ConfigurationPages.php:23
|
606 |
+
#: src/Installer/Steps/PolicySettings.php:23
|
607 |
+
#: src/Installer/Steps/PolicySettings.php:48
|
608 |
+
msgctxt "(Admin)"
|
609 |
+
msgid "— Create a new page —"
|
610 |
+
msgstr ""
|
611 |
+
|
612 |
+
#: src/Installer/Steps/PolicySettings.php:38
|
613 |
+
msgctxt "(Admin)"
|
614 |
+
msgid ""
|
615 |
+
"We have automatically selected your WooCommerce Terms & Conditions page."
|
616 |
+
msgstr ""
|
617 |
+
|
618 |
+
#: src/Modules/ContactForm7/ContactForm7.php:35
|
619 |
+
msgctxt "(Admin)"
|
620 |
+
msgid "gdpr terms txt"
|
621 |
+
msgstr ""
|
622 |
+
|
623 |
+
#: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
|
624 |
+
#, php-format
|
625 |
+
msgid "Nonce error for action \"%s\". Please go back and try again!"
|
626 |
+
msgstr ""
|
627 |
+
|
628 |
+
#: src/Router.php:149
|
629 |
+
msgctxt "(Admin)"
|
630 |
+
msgid "You do not have the required permissions to perform this action!"
|
631 |
+
msgstr ""
|
632 |
+
|
633 |
+
#: views/admin/consent.php:3
|
634 |
+
msgctxt "(Admin)"
|
635 |
+
msgid "Default consent types"
|
636 |
+
msgstr ""
|
637 |
+
|
638 |
+
#: views/admin/consent.php:4
|
639 |
+
msgctxt "(Admin)"
|
640 |
+
msgid ""
|
641 |
+
"These are the consent types that have been automatically registered by the "
|
642 |
+
"framework or a plugin."
|
643 |
+
msgstr ""
|
644 |
+
|
645 |
+
#: views/admin/consent.php:7 views/admin/consent.php:52
|
646 |
+
msgctxt "(Admin)"
|
647 |
+
msgid "Slug"
|
648 |
+
msgstr ""
|
649 |
+
|
650 |
+
#: views/admin/consent.php:8 views/admin/consent.php:38
|
651 |
+
#: views/admin/consent.php:60
|
652 |
+
msgctxt "(Admin)"
|
653 |
+
msgid "Title"
|
654 |
+
msgstr ""
|
655 |
+
|
656 |
+
#: views/admin/consent.php:9 views/admin/consent.php:41
|
657 |
+
#: views/admin/consent.php:63
|
658 |
+
msgctxt "(Admin)"
|
659 |
+
msgid "Description"
|
660 |
+
msgstr ""
|
661 |
+
|
662 |
+
#: views/admin/consent.php:10
|
663 |
+
msgctxt "(Admin)"
|
664 |
+
msgid "Visibility"
|
665 |
+
msgstr ""
|
666 |
+
|
667 |
+
#: views/admin/consent.php:18
|
668 |
+
msgctxt "(Admin)"
|
669 |
+
msgid "Visible"
|
670 |
+
msgstr ""
|
671 |
+
|
672 |
+
#: views/admin/consent.php:20
|
673 |
+
msgctxt "(Admin)"
|
674 |
+
msgid "Hidden"
|
675 |
+
msgstr ""
|
676 |
+
|
677 |
+
#: views/admin/consent.php:29
|
678 |
+
msgctxt "(Admin)"
|
679 |
+
msgid "Custom consent types"
|
680 |
+
msgstr ""
|
681 |
+
|
682 |
+
#: views/admin/consent.php:30
|
683 |
+
msgctxt "(Admin)"
|
684 |
+
msgid ""
|
685 |
+
"Here you can add custom consent types to track. They will not be used "
|
686 |
+
"anywhere by default - you will need to build an integration for each of them."
|
687 |
+
msgstr ""
|
688 |
+
|
689 |
+
#: views/admin/consent.php:35
|
690 |
+
msgctxt "(Admin)"
|
691 |
+
msgid "Machine-readable slug"
|
692 |
+
msgstr ""
|
693 |
+
|
694 |
+
#: views/admin/consent.php:44 views/admin/consent.php:68
|
695 |
+
msgctxt "(Admin)"
|
696 |
+
msgid "Visible?"
|
697 |
+
msgstr ""
|
698 |
+
|
699 |
+
#: views/admin/consent.php:72
|
700 |
+
msgctxt "(Admin)"
|
701 |
+
msgid "Remove"
|
702 |
+
msgstr ""
|
703 |
+
|
704 |
+
#: views/admin/consent.php:93
|
705 |
+
msgctxt "(Admin)"
|
706 |
+
msgid "Additional info"
|
707 |
+
msgstr ""
|
708 |
+
|
709 |
+
#: views/admin/consent.php:95
|
710 |
+
msgctxt "(Admin)"
|
711 |
+
msgid ""
|
712 |
+
"This text will be displayed to your data subjects on the Privacy Tools page."
|
713 |
+
msgstr ""
|
714 |
+
|
715 |
+
#: views/admin/data-subjects/search-form.php:2
|
716 |
+
msgctxt "(Admin)"
|
717 |
+
msgid ""
|
718 |
+
"On this page, you can find which data subjects personal data you are storing "
|
719 |
+
"and download, export or delete it."
|
720 |
+
msgstr ""
|
721 |
+
|
722 |
+
#: views/admin/data-subjects/search-form.php:10
|
723 |
+
msgctxt "(Admin)"
|
724 |
+
msgid "Find data subject by email"
|
725 |
+
msgstr ""
|
726 |
+
|
727 |
+
#: views/admin/data-subjects/search-form.php:11
|
728 |
+
msgctxt "(Admin)"
|
729 |
+
msgid "Email address"
|
730 |
+
msgstr ""
|
731 |
+
|
732 |
+
#: views/admin/data-subjects/search-form.php:16
|
733 |
+
msgctxt "(Admin)"
|
734 |
+
msgid "Search"
|
735 |
+
msgstr ""
|
736 |
+
|
737 |
+
#: views/admin/data-subjects/search-results.php:7
|
738 |
+
msgctxt "(Admin)"
|
739 |
+
msgid "Username"
|
740 |
+
msgstr ""
|
741 |
+
|
742 |
+
#: views/admin/data-subjects/search-results.php:12
|
743 |
+
msgctxt "(Admin)"
|
744 |
+
msgid "is not a registered user."
|
745 |
+
msgstr ""
|
746 |
+
|
747 |
+
#: views/admin/data-subjects/search-results.php:16
|
748 |
+
msgctxt "(Admin)"
|
749 |
+
msgid "Download data (html)"
|
750 |
+
msgstr ""
|
751 |
+
|
752 |
+
#: views/admin/data-subjects/search-results.php:17
|
753 |
+
msgctxt "(Admin)"
|
754 |
+
msgid "Export data (json)"
|
755 |
+
msgstr ""
|
756 |
+
|
757 |
+
#: views/admin/data-subjects/search-results.php:21
|
758 |
+
msgctxt "(Admin)"
|
759 |
+
msgid ""
|
760 |
+
"This user has admin capabilities. Deleting data via this interface is "
|
761 |
+
"disabled."
|
762 |
+
msgstr ""
|
763 |
+
|
764 |
+
#: views/admin/data-subjects/search-results.php:24
|
765 |
+
msgctxt "(Admin)"
|
766 |
+
msgid "Anonymize data"
|
767 |
+
msgstr ""
|
768 |
+
|
769 |
+
#: views/admin/data-subjects/search-results.php:25
|
770 |
+
msgctxt "(Admin)"
|
771 |
+
msgid "Delete data"
|
772 |
+
msgstr ""
|
773 |
+
|
774 |
+
#: views/admin/data-subjects/search-results.php:29
|
775 |
+
msgctxt "(Admin)"
|
776 |
+
msgid "No data found!"
|
777 |
+
msgstr ""
|
778 |
+
|
779 |
+
#: views/admin/general/delete-action-email.php:5
|
780 |
+
#: views/admin/general/export-action-email.php:5
|
781 |
+
#: views/installer/steps/configuration-settings.php:29
|
782 |
+
#: views/installer/steps/configuration-settings.php:79
|
783 |
+
msgid "Email address"
|
784 |
+
msgstr ""
|
785 |
+
|
786 |
+
#: views/admin/general/delete-action-reassign.php:3
|
787 |
+
#: views/installer/steps/configuration-settings.php:50
|
788 |
+
msgctxt "(Admin)"
|
789 |
+
msgid "Delete content"
|
790 |
+
msgstr ""
|
791 |
+
|
792 |
+
#: views/admin/general/delete-action-reassign.php:6
|
793 |
+
#: views/installer/steps/configuration-settings.php:53
|
794 |
+
msgctxt "(Admin)"
|
795 |
+
msgid "Reassign content to a user"
|
796 |
+
msgstr ""
|
797 |
+
|
798 |
+
#: views/admin/general/delete-action-reassign.php:10
|
799 |
+
msgctxt "(Admin)"
|
800 |
+
msgid ""
|
801 |
+
"If the user has submitted any content on your site, should it be deleted or "
|
802 |
+
"reassigned to another user?"
|
803 |
+
msgstr ""
|
804 |
+
|
805 |
+
#: views/admin/general/description-data-page.php:2
|
806 |
+
msgctxt "(Admin)"
|
807 |
+
msgid ""
|
808 |
+
"Select the page where users can go to control their data. This page must "
|
809 |
+
"contain the [gdpr_privacy_tools] shortcode."
|
810 |
+
msgstr ""
|
811 |
+
|
812 |
+
#: views/admin/general/description-delete-action.php:2
|
813 |
+
msgctxt "(Admin)"
|
814 |
+
msgid "What should happen if a data subject requests deleting their data."
|
815 |
+
msgstr ""
|
816 |
+
|
817 |
+
#: views/admin/general/description-export-action.php:2
|
818 |
+
msgctxt "(Admin)"
|
819 |
+
msgid ""
|
820 |
+
"What should happen if a data subject requests viewing or exporting their "
|
821 |
+
"data."
|
822 |
+
msgstr ""
|
823 |
+
|
824 |
+
#: views/admin/general/description-terms-page.php:2
|
825 |
+
msgctxt "(Admin)"
|
826 |
+
msgid "Optional. Select the page which contains your Terms & Conditions"
|
827 |
+
msgstr ""
|
828 |
+
|
829 |
+
#: views/admin/general/enable.php:9
|
830 |
+
msgctxt "(Admin)"
|
831 |
+
msgid "Enable the view, export and forget functionality for users and visitors"
|
832 |
+
msgstr ""
|
833 |
+
|
834 |
+
#: views/admin/general/enable.php:12
|
835 |
+
msgctxt "(Admin)"
|
836 |
+
msgid ""
|
837 |
+
"Enable the Privacy Tools page on front-end and dashboard. This allows "
|
838 |
+
"visitors to request viewing and deleting their personal data and withdraw "
|
839 |
+
"consents."
|
840 |
+
msgstr ""
|
841 |
+
|
842 |
+
#: views/admin/general/stylesheet.php:9
|
843 |
+
msgctxt "(Admin)"
|
844 |
+
msgid "Enable basic styling for Privacy Tools page."
|
845 |
+
msgstr ""
|
846 |
+
|
847 |
+
#: views/admin/general/theme-compatibility.php:9
|
848 |
+
#: views/installer/steps/integrations.php:21
|
849 |
+
msgctxt "(Admin)"
|
850 |
+
msgid ""
|
851 |
+
"Automatically add Privacy Policy and Privacy Tools links to your site footer."
|
852 |
+
msgstr ""
|
853 |
+
|
854 |
+
#: views/admin/notices/header.php:4 views/admin/settings-page.php:3
|
855 |
+
#: views/installer/header.php:23
|
856 |
+
msgctxt "(Admin)"
|
857 |
+
msgid "The GDPR Framework"
|
858 |
+
msgstr ""
|
859 |
+
|
860 |
+
#: views/admin/notices/helper-autoinstall.php:2
|
861 |
+
msgctxt "(Admin)"
|
862 |
+
msgid ""
|
863 |
+
"A Privacy Policy page has been created, but it is empty. You can generate a "
|
864 |
+
"policy template on this page."
|
865 |
+
msgstr ""
|
866 |
+
|
867 |
+
#: views/admin/notices/helper-policy.php:2
|
868 |
+
msgctxt "(Admin)"
|
869 |
+
msgid ""
|
870 |
+
"Heads up - your Privacy Policy still requires some attention. Find the "
|
871 |
+
"places marked with [TODO] and replace them with real content!"
|
872 |
+
msgstr ""
|
873 |
+
|
874 |
+
#: views/admin/notices/helper-tools.php:2
|
875 |
+
msgctxt "(Admin)"
|
876 |
+
msgid "The contents of this page should contain the [gdpr_tools] shortcode."
|
877 |
+
msgstr ""
|
878 |
+
|
879 |
+
#: views/admin/privacy-policy/description-policy-page.php:2
|
880 |
+
msgctxt "(Admin)"
|
881 |
+
msgid "Select the page which will contain your Privacy Policy"
|
882 |
+
msgstr ""
|
883 |
+
|
884 |
+
#: views/admin/privacy-policy/generated.php:3
|
885 |
+
msgctxt "(Admin)"
|
886 |
+
msgid "Your Privacy Policy has been generated."
|
887 |
+
msgstr ""
|
888 |
+
|
889 |
+
#: views/admin/privacy-policy/generated.php:20
|
890 |
+
msgctxt "(Admin)"
|
891 |
+
msgid "« Back"
|
892 |
+
msgstr ""
|
893 |
+
|
894 |
+
#: views/admin/privacy-policy/header.php:2
|
895 |
+
msgctxt "(Admin)"
|
896 |
+
msgid ""
|
897 |
+
"This page allows you to generate a Privacy Policy based on the information "
|
898 |
+
"you entered below."
|
899 |
+
msgstr ""
|
900 |
+
|
901 |
+
#: views/admin/settings-page.php:8
|
902 |
+
msgctxt "(Admin)"
|
903 |
+
msgid "GDPR settings saved!"
|
904 |
+
msgstr ""
|
905 |
+
|
906 |
+
#: views/admin/settings-page.php:31
|
907 |
+
#, php-format
|
908 |
+
msgctxt "(Admin)"
|
909 |
+
msgid "The GDPR Framework. Built with ♥ by %sCodelight%s."
|
910 |
+
msgstr ""
|
911 |
+
|
912 |
+
#: views/admin/settings-page.php:39
|
913 |
+
#, php-format
|
914 |
+
msgctxt "(Admin)"
|
915 |
+
msgid "Support our development efforts with a %s5-star rating%s."
|
916 |
+
msgstr ""
|
917 |
+
|
918 |
+
#: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
|
919 |
+
msgctxt "(Admin)"
|
920 |
+
msgid "Need more info?"
|
921 |
+
msgstr ""
|
922 |
+
|
923 |
+
#: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
|
924 |
+
msgctxt "(Admin)"
|
925 |
+
msgid "Site Owner's guide to GDPR"
|
926 |
+
msgstr ""
|
927 |
+
|
928 |
+
#: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
|
929 |
+
msgctxt "(Admin)"
|
930 |
+
msgid "Read the full guide on GDPR compliance."
|
931 |
+
msgstr ""
|
932 |
+
|
933 |
+
#: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
|
934 |
+
msgctxt "(Admin)"
|
935 |
+
msgid "Knowledge base"
|
936 |
+
msgstr ""
|
937 |
+
|
938 |
+
#: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
|
939 |
+
msgctxt "(Admin)"
|
940 |
+
msgid "Check out the knowledge base for common questions and answers."
|
941 |
+
msgstr ""
|
942 |
+
|
943 |
+
#: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
|
944 |
+
msgctxt "(Admin)"
|
945 |
+
msgid "Developer's guide to GDPR"
|
946 |
+
msgstr ""
|
947 |
+
|
948 |
+
#: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
|
949 |
+
msgctxt "(Admin)"
|
950 |
+
msgid "We have a thorough guide to help making custom sites compliant."
|
951 |
+
msgstr ""
|
952 |
+
|
953 |
+
#: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
|
954 |
+
msgctxt "(Admin)"
|
955 |
+
msgid "Need help?"
|
956 |
+
msgstr ""
|
957 |
+
|
958 |
+
#: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
|
959 |
+
msgctxt "(Admin)"
|
960 |
+
msgid "Submit a support request"
|
961 |
+
msgstr ""
|
962 |
+
|
963 |
+
#: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
|
964 |
+
msgctxt "(Admin)"
|
965 |
+
msgid ""
|
966 |
+
"Found a bug or problem with the plugin? Post in the wordpress.org support "
|
967 |
+
"forum."
|
968 |
+
msgstr ""
|
969 |
+
|
970 |
+
#: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
|
971 |
+
msgctxt "(Admin)"
|
972 |
+
msgid "Request a consultation"
|
973 |
+
msgstr ""
|
974 |
+
|
975 |
+
#: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
|
976 |
+
msgctxt "(Admin)"
|
977 |
+
msgid ""
|
978 |
+
"Need development or legal assistance in making your site compliant? We can "
|
979 |
+
"help!"
|
980 |
+
msgstr ""
|
981 |
+
|
982 |
+
#: views/admin/wizard-buttons.php:2
|
983 |
+
msgctxt "(Admin)"
|
984 |
+
msgid "Restart setup wizard"
|
985 |
+
msgstr ""
|
986 |
+
|
987 |
+
#: views/email/action-export.php:8 views/email/action-forget.php:12
|
988 |
+
msgctxt "(Admin)"
|
989 |
+
msgid ""
|
990 |
+
"This email is just for your information. You don't need to take any action"
|
991 |
+
msgstr ""
|
992 |
+
|
993 |
+
#: views/email/action-forget.php:8
|
994 |
+
msgctxt "(Admin)"
|
995 |
+
msgid "The data subject had a user account on your website."
|
996 |
+
msgstr ""
|
997 |
+
|
998 |
+
#: views/email/identify-data-subject.php:2
|
999 |
+
msgid "Someone has requested access to your data on"
|
1000 |
+
msgstr ""
|
1001 |
+
|
1002 |
+
#: views/email/identify-data-subject.php:3
|
1003 |
+
msgid "If this was a mistake, just ignore this email and nothing will happen."
|
1004 |
+
msgstr ""
|
1005 |
+
|
1006 |
+
#: views/email/identify-data-subject.php:4
|
1007 |
+
msgid "To manage your data, visit the following address:"
|
1008 |
+
msgstr ""
|
1009 |
+
|
1010 |
+
#: views/email/identify-data-subject.php:10
|
1011 |
+
msgid "This link is valid for 15 minutes."
|
1012 |
+
msgstr ""
|
1013 |
+
|
1014 |
+
#: views/email/no-data.php:2
|
1015 |
+
msgid "Someone has requested information about your personal data on"
|
1016 |
+
msgstr ""
|
1017 |
+
|
1018 |
+
#: views/email/no-data.php:3
|
1019 |
+
msgid "None of your personal data is stored on"
|
1020 |
+
msgstr ""
|
1021 |
+
|
1022 |
+
#: views/email/no-data.php:5
|
1023 |
+
msgid ""
|
1024 |
+
"If this was a mistake or you did not request this email, just ignore it and "
|
1025 |
+
"nothing will happen."
|
1026 |
+
msgstr ""
|
1027 |
+
|
1028 |
+
#: views/email/request-export.php:13 views/email/request-forget.php:13
|
1029 |
+
msgctxt "(Admin)"
|
1030 |
+
msgid "As a reminder: according to GDPR, you have 30 days to comply."
|
1031 |
+
msgstr ""
|
1032 |
+
|
1033 |
+
#: views/global/delete-action.php:2
|
1034 |
+
msgctxt "(Admin)"
|
1035 |
+
msgid "Automatically anonymize data"
|
1036 |
+
msgstr ""
|
1037 |
+
|
1038 |
+
#: views/global/delete-action.php:5
|
1039 |
+
msgctxt "(Admin)"
|
1040 |
+
msgid "Automatically delete data"
|
1041 |
+
msgstr ""
|
1042 |
+
|
1043 |
+
#: views/global/delete-action.php:9
|
1044 |
+
msgctxt "(Admin)"
|
1045 |
+
msgid "Automatically anonymize data and notify me via email"
|
1046 |
+
msgstr ""
|
1047 |
+
|
1048 |
+
#: views/global/delete-action.php:13
|
1049 |
+
msgctxt "(Admin)"
|
1050 |
+
msgid "Automatically delete data and notify me via email"
|
1051 |
+
msgstr ""
|
1052 |
+
|
1053 |
+
#: views/global/delete-action.php:16 views/global/export-action.php:10
|
1054 |
+
msgctxt "(Admin)"
|
1055 |
+
msgid "Only notify me via email"
|
1056 |
+
msgstr ""
|
1057 |
+
|
1058 |
+
#: views/global/export-action.php:2
|
1059 |
+
msgctxt "(Admin)"
|
1060 |
+
msgid "Automatically download data"
|
1061 |
+
msgstr ""
|
1062 |
+
|
1063 |
+
#: views/global/export-action.php:6
|
1064 |
+
msgctxt "(Admin)"
|
1065 |
+
msgid "Automatically download data and notify me via email"
|
1066 |
+
msgstr ""
|
1067 |
+
|
1068 |
+
#: views/installer/continue-notice.php:2
|
1069 |
+
msgctxt "(Admin)"
|
1070 |
+
msgid "The The GDPR Framework setup has not been finalized yet."
|
1071 |
+
msgstr ""
|
1072 |
+
|
1073 |
+
#: views/installer/continue-notice.php:3
|
1074 |
+
msgctxt "(Admin)"
|
1075 |
+
msgid "You can continue the setup at any time."
|
1076 |
+
msgstr ""
|
1077 |
+
|
1078 |
+
#: views/installer/continue-notice.php:6
|
1079 |
+
msgctxt "(Admin)"
|
1080 |
+
msgid "Continue the setup wizard"
|
1081 |
+
msgstr ""
|
1082 |
+
|
1083 |
+
#: views/installer/continue-notice.php:9
|
1084 |
+
msgctxt "(Admin)"
|
1085 |
+
msgid "Hide this message"
|
1086 |
+
msgstr ""
|
1087 |
+
|
1088 |
+
#: views/installer/footer.php:7
|
1089 |
+
msgid "Back"
|
1090 |
+
msgstr ""
|
1091 |
+
|
1092 |
+
#: views/installer/header.php:26
|
1093 |
+
msgctxt "(Admin)"
|
1094 |
+
msgid "I need help"
|
1095 |
+
msgstr ""
|
1096 |
+
|
1097 |
+
#: views/installer/header.php:29
|
1098 |
+
msgctxt "(Admin)"
|
1099 |
+
msgid "Developer Docs"
|
1100 |
+
msgstr ""
|
1101 |
+
|
1102 |
+
#: views/installer/header.php:36
|
1103 |
+
msgctxt "(Admin)"
|
1104 |
+
msgid "Configuration"
|
1105 |
+
msgstr ""
|
1106 |
+
|
1107 |
+
#: views/installer/header.php:46
|
1108 |
+
msgctxt "(Admin)"
|
1109 |
+
msgid "Forms & Consent"
|
1110 |
+
msgstr ""
|
1111 |
+
|
1112 |
+
#: views/installer/header.php:51
|
1113 |
+
msgctxt "(Admin)"
|
1114 |
+
msgid "Integrations"
|
1115 |
+
msgstr ""
|
1116 |
+
|
1117 |
+
#: views/installer/steps/configuration-settings.php:23
|
1118 |
+
#: views/installer/steps/configuration-settings.php:73
|
1119 |
+
msgctxt "(Admin)"
|
1120 |
+
msgid "Enter the email address to notify"
|
1121 |
+
msgstr ""
|
1122 |
+
|
1123 |
+
#: views/installer/steps/disclaimer.php:21
|
1124 |
+
msgctxt "(Admin)"
|
1125 |
+
msgid "I accept"
|
1126 |
+
msgstr ""
|
1127 |
+
|
1128 |
+
#: views/installer/welcome-notice.php:7
|
1129 |
+
msgctxt "(Admin)"
|
1130 |
+
msgid "Run the setup wizard"
|
1131 |
+
msgstr ""
|
1132 |
+
|
1133 |
+
#: views/installer/welcome-notice.php:11
|
1134 |
+
msgctxt "(Admin)"
|
1135 |
+
msgid "Auto-install pages"
|
1136 |
+
msgstr ""
|
1137 |
+
|
1138 |
+
#: views/installer/welcome-notice.php:15
|
1139 |
+
msgctxt "(Admin)"
|
1140 |
+
msgid "Skip and install manually"
|
1141 |
+
msgstr ""
|
1142 |
+
|
1143 |
+
#: views/modules/contact-form-7/generator-privacy.php:6
|
1144 |
+
msgctxt "(Admin)"
|
1145 |
+
msgid ""
|
1146 |
+
"This tag generates the default text for Terms & Conditions and/or Privacy "
|
1147 |
+
"Policy checkbox."
|
1148 |
+
msgstr ""
|
1149 |
+
|
1150 |
+
#: views/modules/contact-form-7/generator-privacy.php:15
|
1151 |
+
msgid "Insert"
|
1152 |
+
msgstr ""
|
1153 |
+
|
1154 |
+
#: views/modules/wordpress-comments/terms-checkbox.php:6
|
1155 |
+
#: views/modules/wordpress-user/registration-terms-checkbox.php:7
|
1156 |
+
#, php-format
|
1157 |
+
msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
|
1158 |
+
msgstr ""
|
1159 |
+
|
1160 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
|
1161 |
+
#: views/privacy-tools/form-consent.php:2
|
1162 |
+
msgid "Consent"
|
1163 |
+
msgstr ""
|
1164 |
+
|
1165 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
|
1166 |
+
#: views/privacy-tools/form-consent.php:6
|
1167 |
+
msgid "Here you can withdraw any consents you have given."
|
1168 |
+
msgstr ""
|
1169 |
+
|
1170 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
|
1171 |
+
msgid "Consents"
|
1172 |
+
msgstr ""
|
1173 |
+
|
1174 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
|
1175 |
+
#: views/privacy-tools/form-consent.php:24
|
1176 |
+
msgid "Withdraw"
|
1177 |
+
msgstr ""
|
1178 |
+
|
1179 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
|
1180 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
|
1181 |
+
msgctxt "(Admin)"
|
1182 |
+
msgid "Delete this user and all data"
|
1183 |
+
msgstr ""
|
1184 |
+
|
1185 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
|
1186 |
+
msgctxt "(Admin)"
|
1187 |
+
msgid "Delete my data"
|
1188 |
+
msgstr ""
|
1189 |
+
|
1190 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
|
1191 |
+
#: views/privacy-tools/form-delete.php:13
|
1192 |
+
msgid "Delete all data we have gathered about you."
|
1193 |
+
msgstr ""
|
1194 |
+
|
1195 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
|
1196 |
+
#: views/privacy-tools/form-delete.php:14
|
1197 |
+
msgid "If you have a user account on our site, it will also be deleted."
|
1198 |
+
msgstr ""
|
1199 |
+
|
1200 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
|
1201 |
+
#: views/privacy-tools/form-delete.php:15
|
1202 |
+
msgid "Be careful - this action is permanent and CANNOT be undone."
|
1203 |
+
msgstr ""
|
1204 |
+
|
1205 |
+
#: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
|
1206 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
|
1207 |
+
msgctxt "(Admin)"
|
1208 |
+
msgid ""
|
1209 |
+
"You seem to have an administrator or equivalent role, so deleting/"
|
1210 |
+
"anonymizing via this page is disabled."
|
1211 |
+
msgstr ""
|
1212 |
+
|
1213 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:7
|
1214 |
+
#: views/privacy-tools/form-export.php:1
|
1215 |
+
msgid "Download your data"
|
1216 |
+
msgstr ""
|
1217 |
+
|
1218 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:12
|
1219 |
+
#: views/privacy-tools/form-export.php:13
|
1220 |
+
msgid "Download as table"
|
1221 |
+
msgstr ""
|
1222 |
+
|
1223 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:15
|
1224 |
+
#: views/privacy-tools/form-export.php:22
|
1225 |
+
msgid "Export as JSON"
|
1226 |
+
msgstr ""
|
1227 |
+
|
1228 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:19
|
1229 |
+
#: views/privacy-tools/form-export.php:4
|
1230 |
+
msgid "You can download all your data formatted as a table for viewing."
|
1231 |
+
msgstr ""
|
1232 |
+
|
1233 |
+
#: views/modules/wordpress-user/dashboard/form-export.php:20
|
1234 |
+
#: views/privacy-tools/form-export.php:5
|
1235 |
+
msgid "Alternatively, you can export it in machine-readable JSON format."
|
1236 |
+
msgstr ""
|
1237 |
+
|
1238 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
|
1239 |
+
msgctxt "(Admin)"
|
1240 |
+
msgid "Delete user and all data"
|
1241 |
+
msgstr ""
|
1242 |
+
|
1243 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
|
1244 |
+
msgctxt "(Admin)"
|
1245 |
+
msgid "Anonymize user and all data"
|
1246 |
+
msgstr ""
|
1247 |
+
|
1248 |
+
#: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:18
|
1249 |
+
msgctxt "gdpr-framework"
|
1250 |
+
msgid "Be careful - this action is permanent and CANNOT be undone."
|
1251 |
+
msgstr ""
|
1252 |
+
|
1253 |
+
#: views/modules/wordpress-user/dashboard/profile-page/header.php:2
|
1254 |
+
msgctxt "(Admin)"
|
1255 |
+
msgid "GDPR Data"
|
1256 |
+
msgstr ""
|
1257 |
+
|
1258 |
+
#: views/modules/wordpress-user/dashboard/profile-page/header.php:6
|
1259 |
+
msgctxt "(Admin)"
|
1260 |
+
msgid "This user has been anonymized."
|
1261 |
+
msgstr ""
|
1262 |
+
|
1263 |
+
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
|
1264 |
+
msgctxt "(Admin)"
|
1265 |
+
msgid "Consents given"
|
1266 |
+
msgstr ""
|
1267 |
+
|
1268 |
+
#: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
|
1269 |
+
msgctxt "(Admin)"
|
1270 |
+
msgid "No consents given"
|
1271 |
+
msgstr ""
|
1272 |
+
|
1273 |
+
#: views/privacy-tools/form-consent.php:9
|
1274 |
+
msgid "Consent types"
|
1275 |
+
msgstr ""
|
1276 |
+
|
1277 |
+
#: views/privacy-tools/form-delete.php:1
|
1278 |
+
#: views/privacy-tools/notice-admin-role.php:1
|
1279 |
+
msgid "Delete my user and data"
|
1280 |
+
msgstr ""
|
1281 |
+
|
1282 |
+
#: views/privacy-tools/form-delete.php:7
|
1283 |
+
msgid "Delete my data"
|
1284 |
+
msgstr ""
|
1285 |
+
|
1286 |
+
#: views/privacy-tools/form-identify.php:8
|
1287 |
+
msgid "Back to front page"
|
1288 |
+
msgstr ""
|
1289 |
+
|
1290 |
+
#: views/privacy-tools/form-identify.php:15
|
1291 |
+
msgid "Please identify yourself via e-mail"
|
1292 |
+
msgstr ""
|
1293 |
+
|
1294 |
+
#: views/privacy-tools/form-identify.php:19
|
1295 |
+
#: views/privacy-tools/form-identify.php:22
|
1296 |
+
msgid "Enter your email address"
|
1297 |
+
msgstr ""
|
1298 |
+
|
1299 |
+
#: views/privacy-tools/form-identify.php:25
|
1300 |
+
msgid "Send email"
|
1301 |
+
msgstr ""
|
1302 |
+
|
1303 |
+
#: views/privacy-tools/notice-admin-role.php:4
|
1304 |
+
msgctxt "(Admin)"
|
1305 |
+
msgid "Data deletion is disabled for administrative accounts."
|
1306 |
+
msgstr ""
|
1307 |
+
|
1308 |
+
#: views/privacy-tools/notices.php:3
|
1309 |
+
msgid ""
|
1310 |
+
"We will send you an email with the link to access your data. Please check "
|
1311 |
+
"your spam folder as well!"
|
1312 |
+
msgstr ""
|
1313 |
+
|
1314 |
+
#: views/privacy-tools/notices.php:7
|
1315 |
+
msgid "The email you entered does not appear to be a valid email."
|
1316 |
+
msgstr ""
|
1317 |
+
|
1318 |
+
#: views/privacy-tools/notices.php:11
|
1319 |
+
msgid "Sorry - the link seems to have expired. Please try again!"
|
1320 |
+
msgstr ""
|
1321 |
+
|
1322 |
+
#: views/privacy-tools/notices.php:23
|
1323 |
+
msgid "Your personal data has been removed!"
|
1324 |
+
msgstr ""
|
1325 |
+
|
1326 |
+
#: views/privacy-tools/privacy-tools.php:5
|
1327 |
+
msgid "You are identified as"
|
1328 |
+
msgstr ""
|
license.txt
CHANGED
@@ -1,199 +1,199 @@
|
|
1 |
-
This program is free software: you can redistribute it and/or modify
|
2 |
-
it under the terms of the GNU General Public License as published by
|
3 |
-
the Free Software Foundation, either version 3 of the License, or
|
4 |
-
(at your option) any later version.
|
5 |
-
|
6 |
-
This program is distributed in the hope that it will be useful,
|
7 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
8 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
9 |
-
GNU General Public License for more details.
|
10 |
-
|
11 |
-
You should have received a copy of the GNU General Public License
|
12 |
-
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
13 |
-
|
14 |
-
|
15 |
-
GNU GENERAL PUBLIC LICENSE
|
16 |
-
Version 3, 29 June 2007
|
17 |
-
|
18 |
-
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
19 |
-
|
20 |
-
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
21 |
-
|
22 |
-
Preamble
|
23 |
-
The GNU General Public License is a free, copyleft license for software and other kinds of works.
|
24 |
-
|
25 |
-
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
|
26 |
-
|
27 |
-
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
|
28 |
-
|
29 |
-
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
|
30 |
-
|
31 |
-
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
|
32 |
-
|
33 |
-
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
|
34 |
-
|
35 |
-
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
|
36 |
-
|
37 |
-
Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
|
38 |
-
|
39 |
-
Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
|
40 |
-
|
41 |
-
The precise terms and conditions for copying, distribution and modification follow.
|
42 |
-
|
43 |
-
TERMS AND CONDITIONS
|
44 |
-
0. Definitions.
|
45 |
-
“This License” refers to version 3 of the GNU General Public License.
|
46 |
-
|
47 |
-
“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
|
48 |
-
|
49 |
-
“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
|
50 |
-
|
51 |
-
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
|
52 |
-
|
53 |
-
A “covered work” means either the unmodified Program or a work based on the Program.
|
54 |
-
|
55 |
-
To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
|
56 |
-
|
57 |
-
To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
|
58 |
-
|
59 |
-
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
|
60 |
-
|
61 |
-
1. Source Code.
|
62 |
-
The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
|
63 |
-
|
64 |
-
A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
|
65 |
-
|
66 |
-
The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
|
67 |
-
|
68 |
-
The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
|
69 |
-
|
70 |
-
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
|
71 |
-
|
72 |
-
The Corresponding Source for a work in source code form is that same work.
|
73 |
-
|
74 |
-
2. Basic Permissions.
|
75 |
-
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
|
76 |
-
|
77 |
-
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
|
78 |
-
|
79 |
-
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
|
80 |
-
|
81 |
-
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
82 |
-
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
|
83 |
-
|
84 |
-
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
|
85 |
-
|
86 |
-
4. Conveying Verbatim Copies.
|
87 |
-
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
|
88 |
-
|
89 |
-
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
|
90 |
-
|
91 |
-
5. Conveying Modified Source Versions.
|
92 |
-
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
|
93 |
-
|
94 |
-
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
|
95 |
-
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
|
96 |
-
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
|
97 |
-
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
|
98 |
-
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
|
99 |
-
|
100 |
-
6. Conveying Non-Source Forms.
|
101 |
-
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
|
102 |
-
|
103 |
-
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
|
104 |
-
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
|
105 |
-
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
|
106 |
-
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
|
107 |
-
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
|
108 |
-
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
|
109 |
-
|
110 |
-
A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
|
111 |
-
|
112 |
-
“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
|
113 |
-
|
114 |
-
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
|
115 |
-
|
116 |
-
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
|
117 |
-
|
118 |
-
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
|
119 |
-
|
120 |
-
7. Additional Terms.
|
121 |
-
“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
|
122 |
-
|
123 |
-
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
|
124 |
-
|
125 |
-
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
|
126 |
-
|
127 |
-
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
|
128 |
-
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
|
129 |
-
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
|
130 |
-
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
|
131 |
-
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
|
132 |
-
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
|
133 |
-
All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
|
134 |
-
|
135 |
-
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
|
136 |
-
|
137 |
-
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
|
138 |
-
|
139 |
-
8. Termination.
|
140 |
-
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
|
141 |
-
|
142 |
-
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
|
143 |
-
|
144 |
-
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
|
145 |
-
|
146 |
-
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
|
147 |
-
|
148 |
-
9. Acceptance Not Required for Having Copies.
|
149 |
-
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
|
150 |
-
|
151 |
-
10. Automatic Licensing of Downstream Recipients.
|
152 |
-
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
|
153 |
-
|
154 |
-
An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
|
155 |
-
|
156 |
-
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
|
157 |
-
|
158 |
-
11. Patents.
|
159 |
-
A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
|
160 |
-
|
161 |
-
A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
|
162 |
-
|
163 |
-
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
|
164 |
-
|
165 |
-
In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
|
166 |
-
|
167 |
-
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
|
168 |
-
|
169 |
-
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
|
170 |
-
|
171 |
-
A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
|
172 |
-
|
173 |
-
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
|
174 |
-
|
175 |
-
12. No Surrender of Others' Freedom.
|
176 |
-
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
|
177 |
-
|
178 |
-
13. Use with the GNU Affero General Public License.
|
179 |
-
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
|
180 |
-
|
181 |
-
14. Revised Versions of this License.
|
182 |
-
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
183 |
-
|
184 |
-
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
|
185 |
-
|
186 |
-
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
|
187 |
-
|
188 |
-
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
|
189 |
-
|
190 |
-
15. Disclaimer of Warranty.
|
191 |
-
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
192 |
-
|
193 |
-
16. Limitation of Liability.
|
194 |
-
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
195 |
-
|
196 |
-
17. Interpretation of Sections 15 and 16.
|
197 |
-
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
|
198 |
-
|
199 |
END OF TERMS AND CONDITIONS
|
1 |
+
This program is free software: you can redistribute it and/or modify
|
2 |
+
it under the terms of the GNU General Public License as published by
|
3 |
+
the Free Software Foundation, either version 3 of the License, or
|
4 |
+
(at your option) any later version.
|
5 |
+
|
6 |
+
This program is distributed in the hope that it will be useful,
|
7 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
8 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
9 |
+
GNU General Public License for more details.
|
10 |
+
|
11 |
+
You should have received a copy of the GNU General Public License
|
12 |
+
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
13 |
+
|
14 |
+
|
15 |
+
GNU GENERAL PUBLIC LICENSE
|
16 |
+
Version 3, 29 June 2007
|
17 |
+
|
18 |
+
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
19 |
+
|
20 |
+
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
|
21 |
+
|
22 |
+
Preamble
|
23 |
+
The GNU General Public License is a free, copyleft license for software and other kinds of works.
|
24 |
+
|
25 |
+
The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
|
26 |
+
|
27 |
+
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
|
28 |
+
|
29 |
+
To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
|
30 |
+
|
31 |
+
For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
|
32 |
+
|
33 |
+
Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
|
34 |
+
|
35 |
+
For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
|
36 |
+
|
37 |
+
Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
|
38 |
+
|
39 |
+
Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
|
40 |
+
|
41 |
+
The precise terms and conditions for copying, distribution and modification follow.
|
42 |
+
|
43 |
+
TERMS AND CONDITIONS
|
44 |
+
0. Definitions.
|
45 |
+
“This License” refers to version 3 of the GNU General Public License.
|
46 |
+
|
47 |
+
“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
|
48 |
+
|
49 |
+
“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
|
50 |
+
|
51 |
+
To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
|
52 |
+
|
53 |
+
A “covered work” means either the unmodified Program or a work based on the Program.
|
54 |
+
|
55 |
+
To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
|
56 |
+
|
57 |
+
To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
|
58 |
+
|
59 |
+
An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
|
60 |
+
|
61 |
+
1. Source Code.
|
62 |
+
The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
|
63 |
+
|
64 |
+
A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
|
65 |
+
|
66 |
+
The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
|
67 |
+
|
68 |
+
The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
|
69 |
+
|
70 |
+
The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
|
71 |
+
|
72 |
+
The Corresponding Source for a work in source code form is that same work.
|
73 |
+
|
74 |
+
2. Basic Permissions.
|
75 |
+
All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
|
76 |
+
|
77 |
+
You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
|
78 |
+
|
79 |
+
Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
|
80 |
+
|
81 |
+
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
82 |
+
No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
|
83 |
+
|
84 |
+
When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
|
85 |
+
|
86 |
+
4. Conveying Verbatim Copies.
|
87 |
+
You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
|
88 |
+
|
89 |
+
You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
|
90 |
+
|
91 |
+
5. Conveying Modified Source Versions.
|
92 |
+
You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
|
93 |
+
|
94 |
+
a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
|
95 |
+
b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
|
96 |
+
c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
|
97 |
+
d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
|
98 |
+
A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
|
99 |
+
|
100 |
+
6. Conveying Non-Source Forms.
|
101 |
+
You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
|
102 |
+
|
103 |
+
a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
|
104 |
+
b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
|
105 |
+
c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
|
106 |
+
d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
|
107 |
+
e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
|
108 |
+
A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
|
109 |
+
|
110 |
+
A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
|
111 |
+
|
112 |
+
“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
|
113 |
+
|
114 |
+
If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
|
115 |
+
|
116 |
+
The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
|
117 |
+
|
118 |
+
Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
|
119 |
+
|
120 |
+
7. Additional Terms.
|
121 |
+
“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
|
122 |
+
|
123 |
+
When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
|
124 |
+
|
125 |
+
Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
|
126 |
+
|
127 |
+
a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
|
128 |
+
b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
|
129 |
+
c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
|
130 |
+
d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
|
131 |
+
e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
|
132 |
+
f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
|
133 |
+
All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
|
134 |
+
|
135 |
+
If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
|
136 |
+
|
137 |
+
Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
|
138 |
+
|
139 |
+
8. Termination.
|
140 |
+
You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
|
141 |
+
|
142 |
+
However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
|
143 |
+
|
144 |
+
Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
|
145 |
+
|
146 |
+
Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
|
147 |
+
|
148 |
+
9. Acceptance Not Required for Having Copies.
|
149 |
+
You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
|
150 |
+
|
151 |
+
10. Automatic Licensing of Downstream Recipients.
|
152 |
+
Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
|
153 |
+
|
154 |
+
An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
|
155 |
+
|
156 |
+
You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
|
157 |
+
|
158 |
+
11. Patents.
|
159 |
+
A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
|
160 |
+
|
161 |
+
A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
|
162 |
+
|
163 |
+
Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
|
164 |
+
|
165 |
+
In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
|
166 |
+
|
167 |
+
If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
|
168 |
+
|
169 |
+
If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
|
170 |
+
|
171 |
+
A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
|
172 |
+
|
173 |
+
Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
|
174 |
+
|
175 |
+
12. No Surrender of Others' Freedom.
|
176 |
+
If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
|
177 |
+
|
178 |
+
13. Use with the GNU Affero General Public License.
|
179 |
+
Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
|
180 |
+
|
181 |
+
14. Revised Versions of this License.
|
182 |
+
The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
|
183 |
+
|
184 |
+
Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
|
185 |
+
|
186 |
+
If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
|
187 |
+
|
188 |
+
Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
|
189 |
+
|
190 |
+
15. Disclaimer of Warranty.
|
191 |
+
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
192 |
+
|
193 |
+
16. Limitation of Liability.
|
194 |
+
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
195 |
+
|
196 |
+
17. Interpretation of Sections 15 and 16.
|
197 |
+
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
|
198 |
+
|
199 |
END OF TERMS AND CONDITIONS
|
readme.txt
CHANGED
@@ -1,129 +1,134 @@
|
|
1 |
-
=== The GDPR Framework ===
|
2 |
-
Contributors: codelight
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
License
|
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 |
-
* Fix
|
105 |
-
*
|
106 |
-
|
107 |
-
|
108 |
-
*
|
109 |
-
*
|
110 |
-
* Fix PHP
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
*
|
115 |
-
*
|
116 |
-
* Add
|
117 |
-
|
118 |
-
= 1.0.
|
119 |
-
*
|
120 |
-
* Add
|
121 |
-
*
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
*
|
127 |
-
|
128 |
-
|
129 |
-
|
|
|
|
|
|
|
|
|
|
1 |
+
=== The GDPR Framework ===
|
2 |
+
Contributors: codelight
|
3 |
+
Donate link:
|
4 |
+
Tags: gdpr
|
5 |
+
Requires at least: 4.7
|
6 |
+
Tested up to: 4.9.5
|
7 |
+
Requires PHP: 5.6.33
|
8 |
+
Stable tag: 1.0.7
|
9 |
+
License: GPLv3
|
10 |
+
License URI: https://www.gnu.org/licenses/gpl-3.0.en.html
|
11 |
+
|
12 |
+
Easy to use tools to help make your website GDPR-compliant. Fully documented, extendable and developer-friendly.
|
13 |
+
|
14 |
+
== Description ==
|
15 |
+
|
16 |
+
Easy to use tools to help make your website GDPR-compliant.
|
17 |
+
|
18 |
+
GDPR is a whopping 88 pages of legal text. Becoming compliant takes a lot more than just adding a couple of checkboxes to your forms! But worry not, we’ve got it covered. With help from [Triniti](https://triniti.eu), one of the top business and IT law firms in Europe, we’ve put together this plugin and written a thorough guide for making WordPress sites compliant with minimal effort.
|
19 |
+
|
20 |
+
You don't need to drown your customers in pointless acceptance checkboxes if you know what you're doing!
|
21 |
+
|
22 |
+
## IMPORTANT
|
23 |
+
The current version of the GDPR Framework fixes a ton of minor bugs. However, it's not yet compatible with WordPress v4.9.6. This will be added in the next major release. (Everything will still work, though.)
|
24 |
+
|
25 |
+
## Disclaimer
|
26 |
+
Using The GDPR Framework does NOT guarantee compliance to GDPR. This plugin gives you general information and tools, but is NOT meant to serve as complete compliance package. Compliance to GDPR is risk-based ongoing process that involves your whole business. Codelight is not eligible for any claim or action based on any information or functionality provided by this plugin.
|
27 |
+
|
28 |
+
### Documentation
|
29 |
+
Full documentation: [The WordPress Site Owner's Guide to GDPR](https://codelight.eu/wordpress-gdpr-framework/wordpress-site-owners-guide-to-gdpr/)
|
30 |
+
For developers: [Developer Docs](https://codelight.eu/wordpress-gdpr-framework/developer-docs/)
|
31 |
+
|
32 |
+
### Features
|
33 |
+
☑ Allow both users and visitors without an account to automatically view, export and delete their personal data;
|
34 |
+
☑ Configure the plugin to delete or anonymize personal data automatically or send a notification and allow admins to do it manually;
|
35 |
+
☑ Track, manage and withdraw consent;
|
36 |
+
☑ Generate a GDPR-compatible Privacy Policy template for your site;
|
37 |
+
☑ Comes with a helpful installation wizard to get you started quickly;
|
38 |
+
☑ Fully documented;
|
39 |
+
☑ Developer-friendly. Everything can be extended, every feature and template can be overridden.
|
40 |
+
|
41 |
+
GDPR is here to stay and we are just getting started. There's lots more to come!
|
42 |
+
|
43 |
+
### Plugin support:
|
44 |
+
The GDPR Framework currently works with the following plugins
|
45 |
+
☑ Contact Form 7
|
46 |
+
☑ Gravity Forms - [Download the GDPR add-on](https://wordpress.org/plugins/gdpr-for-gravity-forms/)
|
47 |
+
☑ Formidable Forms - [Download the GDPR add-on](https://wordpress.org/plugins/gdpr-for-formidable-forms/)
|
48 |
+
☑ WPML
|
49 |
+
|
50 |
+
Coming soon:
|
51 |
+
☐ Ninja Forms
|
52 |
+
☐ Contact Form 7 Flamingo
|
53 |
+
|
54 |
+
Still free and open-source.
|
55 |
+
|
56 |
+
Other integrations coming up:
|
57 |
+
☐ WP Migrate DB
|
58 |
+
☐ WooCommerce (postponed until the launch of their own compliance toolkit)
|
59 |
+
☐ Easy Digital Downloads
|
60 |
+
|
61 |
+
We're happy to add support for other major plugins as well. If you have a request, get in touch!
|
62 |
+
|
63 |
+
== Frequently Asked Questions ==
|
64 |
+
= Help, the identification emails are not sent! =
|
65 |
+
The GDPR Framework uses the exact same mechanism for sending emails as the rest of your WordPress site. Please test if your site sends out emails at all using the Forgot Password form, for example.
|
66 |
+
If you get the forgot password email but not the identification email, please make a post in the support forums.
|
67 |
+
|
68 |
+
= Help, the link in the identification email doesn't work! =
|
69 |
+
Are you using SendGrid or another email delivery service? This might corrupt the link in the email.
|
70 |
+
In case you're using Sendgrid, make sure to turn off "click tracking". Otherwise, please post in the support forum!
|
71 |
+
|
72 |
+
= Help, the Privacy Tools page acts weirdly or always displays the "link expired" message! =
|
73 |
+
Check if you're using any caching plugins. If yes, then make sure the Privacy Tools page is excluded.
|
74 |
+
Also check if a server side cache is enabled by your web host.
|
75 |
+
|
76 |
+
= How is this plugin different from the tools in WordPress v4.9.6? =
|
77 |
+
WordPress 4.9.6 provides tools to allow administrators to manually handle GDPR requests. However, the GDPR framework allows visitors to automatically download and export data to reduce administrative work load.
|
78 |
+
In addition to that, we provide tools to manage and track custom consent types and also a privacy policy generator.
|
79 |
+
We are also planning to add other important privacy-related features missing from WordPress core over time.
|
80 |
+
|
81 |
+
= What about cookies? =
|
82 |
+
This is a very important aspect of GDPR which we will definitely find a solution for. We are currently working on it and will hopefully have something before May 25th.
|
83 |
+
|
84 |
+
== Changelog ==
|
85 |
+
|
86 |
+
= 1.0.7 =
|
87 |
+
* Update translation pot file
|
88 |
+
* Add partial Greek translations (Thanks @webace-creative-studio)
|
89 |
+
|
90 |
+
= 1.0.6 =
|
91 |
+
* Fix administrative roles not being able to comment via admin interface
|
92 |
+
* Fix trashed or spam comments not being deleted
|
93 |
+
* Minor usability tweaks everywhere
|
94 |
+
* Fix PHP5.6 not properly saving custom consent (Thanks @paulnewson!)
|
95 |
+
* Fix CF7 always showing as enabled in wizard
|
96 |
+
* In Tools > Privacy > Data Subjects, add the display of given consents
|
97 |
+
* Add warning about Sendgrid compatibility in the installer
|
98 |
+
* Fix issue with installer wizard not properly saving export action
|
99 |
+
* Add notice in case the settings are not properly configured
|
100 |
+
* Added Bulgarian translation (thanks Zankov Group!)
|
101 |
+
* Added partial Italian translation (thanks Matteo Bruno!)
|
102 |
+
|
103 |
+
= 1.0.5 =
|
104 |
+
* Fix installing consent tables and roles properly
|
105 |
+
* Add Spanish translations (Thanks @elarequi!)
|
106 |
+
* Add partial German translations (Thanks @knodderdachs!)
|
107 |
+
* Lower required PHP version to 5.6.0
|
108 |
+
* Re-add container alias for DataSubjectManager
|
109 |
+
* Fix for installer giving the option to add links to footer for unsupported themes
|
110 |
+
* Fix PHP notice in WPML module
|
111 |
+
|
112 |
+
= 1.0.4 =
|
113 |
+
* Fix translations, for real this time
|
114 |
+
* Add French translations (Thanks @datagitateur!)
|
115 |
+
* Fix PHP warning if WPML is activated
|
116 |
+
* Add filter around $headers array for all outgoing emails sent via this plugin
|
117 |
+
|
118 |
+
= 1.0.3 =
|
119 |
+
* Change text domain to 'gdpr-framework' to avoid conflict with other plugins
|
120 |
+
* Add Portuguese translation (Thanks @kativiti!)
|
121 |
+
* Add partial Estonian translation
|
122 |
+
|
123 |
+
= 1.0.2 =
|
124 |
+
* Fix T&C and Privacy Policy URLs on registration and comments forms
|
125 |
+
* Add basic styling and separate stylesheet for Privacy Tools page
|
126 |
+
* Allow disabling styles for Privacy Tools page via admin
|
127 |
+
* Add confirmation notice on deleting data via front-end Privacy Tools
|
128 |
+
* Change strings with 'gdpr-admin' domain back to 'gdpr'. Add context to all admin strings.
|
129 |
+
|
130 |
+
= 1.0.1 =
|
131 |
+
* Fix PHP notice on Privacy Tools frontend page if logged in as admin
|
132 |
+
|
133 |
+
= 1.0.0 =
|
134 |
+
* Initial release
|
src/Admin/AdminError.php
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
namespace Codelight\GDPR\Admin;
|
5 |
-
|
6 |
-
|
7 |
-
class AdminError extends AdminNotice
|
8 |
-
{
|
9 |
-
public function render()
|
10 |
-
{
|
11 |
-
if (!$this->template) {
|
12 |
-
trigger_error('Template not set for admin notice!', E_USER_ERROR);
|
13 |
-
}
|
14 |
-
|
15 |
-
echo gdpr('view')->render($this->template, $this->data);
|
16 |
-
}
|
17 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
namespace Codelight\GDPR\Admin;
|
5 |
+
|
6 |
+
|
7 |
+
class AdminError extends AdminNotice
|
8 |
+
{
|
9 |
+
public function render()
|
10 |
+
{
|
11 |
+
if (!$this->template) {
|
12 |
+
trigger_error('Template not set for admin notice!', E_USER_ERROR);
|
13 |
+
}
|
14 |
+
|
15 |
+
echo gdpr('view')->render($this->template, $this->data);
|
16 |
+
}
|
17 |
}
|
src/Admin/AdminHelper.php
CHANGED
@@ -1,84 +1,84 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Admin;
|
4 |
-
|
5 |
-
class AdminHelper
|
6 |
-
{
|
7 |
-
public function __construct()
|
8 |
-
{
|
9 |
-
$this->toolsHelper();
|
10 |
-
$this->autoinstallHelper();
|
11 |
-
$this->policyHelper();
|
12 |
-
$this->settingsHelper();
|
13 |
-
}
|
14 |
-
|
15 |
-
protected function toolsHelper()
|
16 |
-
{
|
17 |
-
$toolsPage = gdpr('options')->get('tools_page');
|
18 |
-
|
19 |
-
// Display the notice only on Tools page
|
20 |
-
if (!$toolsPage || !isset($_GET['post']) || $_GET['post'] !== $toolsPage) {
|
21 |
-
return;
|
22 |
-
}
|
23 |
-
|
24 |
-
$post = get_post($toolsPage);
|
25 |
-
$helpUrl = gdpr('helpers')->docs();
|
26 |
-
|
27 |
-
if (!stristr($post->post_content, '[gdpr_privacy_tools]')) {
|
28 |
-
gdpr('admin-notice')->add('admin/notices/helper-tools', compact('helpUrl'));
|
29 |
-
}
|
30 |
-
}
|
31 |
-
|
32 |
-
protected function autoinstallHelper()
|
33 |
-
{
|
34 |
-
if (!isset($_GET['gdpr-notice']) || empty($_GET['gdpr-notice']) || 'autoinstall' !== $_GET['gdpr-notice']) {
|
35 |
-
return;
|
36 |
-
}
|
37 |
-
|
38 |
-
$helpUrl = gdpr('helpers')->docs();
|
39 |
-
|
40 |
-
gdpr('admin-notice')->add('admin/notices/helper-autoinstall', compact('helpUrl'));
|
41 |
-
}
|
42 |
-
|
43 |
-
protected function policyHelper()
|
44 |
-
{
|
45 |
-
$policyPage = gdpr('options')->get('policy_page');
|
46 |
-
|
47 |
-
// Display the notice only on Policy page
|
48 |
-
if (!$policyPage || !isset($_GET['post']) || $_GET['post'] !== $policyPage) {
|
49 |
-
return;
|
50 |
-
}
|
51 |
-
|
52 |
-
$post = get_post($policyPage);
|
53 |
-
$helpUrl = gdpr('helpers')->docs();
|
54 |
-
|
55 |
-
if (stristr($post->post_content, '[TODO]')) {
|
56 |
-
gdpr('admin-notice')->add('admin/notices/helper-policy', compact('helpUrl'));
|
57 |
-
}
|
58 |
-
}
|
59 |
-
|
60 |
-
protected function settingsHelper()
|
61 |
-
{
|
62 |
-
|
63 |
-
if ('download_and_notify' === gdpr('options')->get('export_action') || 'notify' === gdpr('options')->get('export_action')) {
|
64 |
-
if (!gdpr('options')->get('export_action_email')) {
|
65 |
-
$this->renderSettingsHelperNotice();
|
66 |
-
}
|
67 |
-
}
|
68 |
-
|
69 |
-
|
70 |
-
if ('anonymize_and_notify' === gdpr('options')->get('delete_action') ||
|
71 |
-
'delete_and_notify' === gdpr('options')->get('delete_action') ||
|
72 |
-
'notify' === gdpr('options')->get('delete_action')
|
73 |
-
) {
|
74 |
-
if (!gdpr('options')->get('delete_action_email')) {
|
75 |
-
$this->renderSettingsHelperNotice();
|
76 |
-
}
|
77 |
-
}
|
78 |
-
}
|
79 |
-
|
80 |
-
protected function renderSettingsHelperNotice()
|
81 |
-
{
|
82 |
-
gdpr('admin-notice')->add('admin/notices/helper-settings');
|
83 |
-
}
|
84 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Admin;
|
4 |
+
|
5 |
+
class AdminHelper
|
6 |
+
{
|
7 |
+
public function __construct()
|
8 |
+
{
|
9 |
+
$this->toolsHelper();
|
10 |
+
$this->autoinstallHelper();
|
11 |
+
$this->policyHelper();
|
12 |
+
$this->settingsHelper();
|
13 |
+
}
|
14 |
+
|
15 |
+
protected function toolsHelper()
|
16 |
+
{
|
17 |
+
$toolsPage = gdpr('options')->get('tools_page');
|
18 |
+
|
19 |
+
// Display the notice only on Tools page
|
20 |
+
if (!$toolsPage || !isset($_GET['post']) || $_GET['post'] !== $toolsPage) {
|
21 |
+
return;
|
22 |
+
}
|
23 |
+
|
24 |
+
$post = get_post($toolsPage);
|
25 |
+
$helpUrl = gdpr('helpers')->docs();
|
26 |
+
|
27 |
+
if (!stristr($post->post_content, '[gdpr_privacy_tools]')) {
|
28 |
+
gdpr('admin-notice')->add('admin/notices/helper-tools', compact('helpUrl'));
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
protected function autoinstallHelper()
|
33 |
+
{
|
34 |
+
if (!isset($_GET['gdpr-notice']) || empty($_GET['gdpr-notice']) || 'autoinstall' !== $_GET['gdpr-notice']) {
|
35 |
+
return;
|
36 |
+
}
|
37 |
+
|
38 |
+
$helpUrl = gdpr('helpers')->docs();
|
39 |
+
|
40 |
+
gdpr('admin-notice')->add('admin/notices/helper-autoinstall', compact('helpUrl'));
|
41 |
+
}
|
42 |
+
|
43 |
+
protected function policyHelper()
|
44 |
+
{
|
45 |
+
$policyPage = gdpr('options')->get('policy_page');
|
46 |
+
|
47 |
+
// Display the notice only on Policy page
|
48 |
+
if (!$policyPage || !isset($_GET['post']) || $_GET['post'] !== $policyPage) {
|
49 |
+
return;
|
50 |
+
}
|
51 |
+
|
52 |
+
$post = get_post($policyPage);
|
53 |
+
$helpUrl = gdpr('helpers')->docs();
|
54 |
+
|
55 |
+
if (stristr($post->post_content, '[TODO]')) {
|
56 |
+
gdpr('admin-notice')->add('admin/notices/helper-policy', compact('helpUrl'));
|
57 |
+
}
|
58 |
+
}
|
59 |
+
|
60 |
+
protected function settingsHelper()
|
61 |
+
{
|
62 |
+
|
63 |
+
if ('download_and_notify' === gdpr('options')->get('export_action') || 'notify' === gdpr('options')->get('export_action')) {
|
64 |
+
if (!gdpr('options')->get('export_action_email')) {
|
65 |
+
$this->renderSettingsHelperNotice();
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
|
70 |
+
if ('anonymize_and_notify' === gdpr('options')->get('delete_action') ||
|
71 |
+
'delete_and_notify' === gdpr('options')->get('delete_action') ||
|
72 |
+
'notify' === gdpr('options')->get('delete_action')
|
73 |
+
) {
|
74 |
+
if (!gdpr('options')->get('delete_action_email')) {
|
75 |
+
$this->renderSettingsHelperNotice();
|
76 |
+
}
|
77 |
+
}
|
78 |
+
}
|
79 |
+
|
80 |
+
protected function renderSettingsHelperNotice()
|
81 |
+
{
|
82 |
+
gdpr('admin-notice')->add('admin/notices/helper-settings');
|
83 |
+
}
|
84 |
+
}
|
src/Admin/AdminNotice.php
CHANGED
@@ -1,41 +1,41 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Admin;
|
4 |
-
|
5 |
-
class AdminNotice
|
6 |
-
{
|
7 |
-
protected $template;
|
8 |
-
|
9 |
-
protected $data;
|
10 |
-
|
11 |
-
/**
|
12 |
-
* todo: replace with a proper factory pattern via gdpr()?
|
13 |
-
*
|
14 |
-
* AdminNotice constructor.
|
15 |
-
*/
|
16 |
-
public function __construct()
|
17 |
-
{
|
18 |
-
if (did_action('admin_notices')) {
|
19 |
-
trigger_error('AdminNotice class called incorrectly - admin_notices action has already ran!', E_USER_ERROR);
|
20 |
-
}
|
21 |
-
|
22 |
-
add_action('admin_notices', [$this, 'render'], 9999);
|
23 |
-
}
|
24 |
-
|
25 |
-
public function add($template, $data = [])
|
26 |
-
{
|
27 |
-
$this->template = $template;
|
28 |
-
$this->data = $data;
|
29 |
-
}
|
30 |
-
|
31 |
-
public function render()
|
32 |
-
{
|
33 |
-
if (!$this->template) {
|
34 |
-
trigger_error('Template not set for admin notice!', E_USER_ERROR);
|
35 |
-
}
|
36 |
-
|
37 |
-
echo gdpr('view')->render('admin/notices/header');
|
38 |
-
echo gdpr('view')->render($this->template, $this->data);
|
39 |
-
echo gdpr('view')->render('admin/notices/footer');
|
40 |
-
}
|
41 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Admin;
|
4 |
+
|
5 |
+
class AdminNotice
|
6 |
+
{
|
7 |
+
protected $template;
|
8 |
+
|
9 |
+
protected $data;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* todo: replace with a proper factory pattern via gdpr()?
|
13 |
+
*
|
14 |
+
* AdminNotice constructor.
|
15 |
+
*/
|
16 |
+
public function __construct()
|
17 |
+
{
|
18 |
+
if (did_action('admin_notices')) {
|
19 |
+
trigger_error('AdminNotice class called incorrectly - admin_notices action has already ran!', E_USER_ERROR);
|
20 |
+
}
|
21 |
+
|
22 |
+
add_action('admin_notices', [$this, 'render'], 9999);
|
23 |
+
}
|
24 |
+
|
25 |
+
public function add($template, $data = [])
|
26 |
+
{
|
27 |
+
$this->template = $template;
|
28 |
+
$this->data = $data;
|
29 |
+
}
|
30 |
+
|
31 |
+
public function render()
|
32 |
+
{
|
33 |
+
if (!$this->template) {
|
34 |
+
trigger_error('Template not set for admin notice!', E_USER_ERROR);
|
35 |
+
}
|
36 |
+
|
37 |
+
echo gdpr('view')->render('admin/notices/header');
|
38 |
+
echo gdpr('view')->render($this->template, $this->data);
|
39 |
+
echo gdpr('view')->render('admin/notices/footer');
|
40 |
+
}
|
41 |
+
}
|
src/Admin/AdminTab.php
CHANGED
@@ -1,157 +1,157 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Admin;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Base class for admin tabs. Extend this.
|
7 |
-
*
|
8 |
-
* Class AdminTab
|
9 |
-
*
|
10 |
-
* @package Codelight\GDPR\Admin
|
11 |
-
*/
|
12 |
-
abstract class AdminTab implements AdminTabInterface
|
13 |
-
{
|
14 |
-
/* @var string */
|
15 |
-
protected $slug;
|
16 |
-
|
17 |
-
/* @var string */
|
18 |
-
protected $title;
|
19 |
-
|
20 |
-
/**
|
21 |
-
* @return string
|
22 |
-
*/
|
23 |
-
public function getSlug()
|
24 |
-
{
|
25 |
-
return $this->slug;
|
26 |
-
}
|
27 |
-
|
28 |
-
/**
|
29 |
-
* @return string
|
30 |
-
*/
|
31 |
-
public function getTitle()
|
32 |
-
{
|
33 |
-
return $this->title;
|
34 |
-
}
|
35 |
-
|
36 |
-
/**
|
37 |
-
* @return string
|
38 |
-
*/
|
39 |
-
public function getOptionsGroupName()
|
40 |
-
{
|
41 |
-
return 'gdpr_' . $this->getSlug();
|
42 |
-
}
|
43 |
-
|
44 |
-
/**
|
45 |
-
* Register a setting on the admin page
|
46 |
-
*
|
47 |
-
* @param $optionName
|
48 |
-
* @param string $args
|
49 |
-
*/
|
50 |
-
public function registerSetting($optionName, $args = [])
|
51 |
-
{
|
52 |
-
register_setting($this->getOptionsGroupName(), $optionName, $args);
|
53 |
-
}
|
54 |
-
|
55 |
-
/**
|
56 |
-
* Register a section on the admin page
|
57 |
-
*
|
58 |
-
* @param $name
|
59 |
-
* @param $callback
|
60 |
-
*/
|
61 |
-
public function registerSettingSection($id, $title, $callback = null)
|
62 |
-
{
|
63 |
-
add_settings_section(
|
64 |
-
$id,
|
65 |
-
$title,
|
66 |
-
$callback,
|
67 |
-
$this->getOptionsGroupName()
|
68 |
-
);
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Register a setting field on the admin page
|
73 |
-
*
|
74 |
-
* @param $id
|
75 |
-
* @param $title
|
76 |
-
* @param $callback
|
77 |
-
*/
|
78 |
-
public function registerSettingField($id, $title, $callback = null, $section = '', $args = [])
|
79 |
-
{
|
80 |
-
add_settings_field(
|
81 |
-
$id,
|
82 |
-
$title,
|
83 |
-
$callback,
|
84 |
-
$this->getOptionsGroupName(),
|
85 |
-
$section,
|
86 |
-
$args
|
87 |
-
);
|
88 |
-
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* Render the contents including settings fields, sections and submit button.
|
92 |
-
* Trigger hooks for rendering content before and after the settings fields.
|
93 |
-
*
|
94 |
-
* @return string
|
95 |
-
*/
|
96 |
-
public function renderContents()
|
97 |
-
{
|
98 |
-
ob_start();
|
99 |
-
|
100 |
-
do_action("gdpr/tabs/{$this->getSlug()}/before", $this);
|
101 |
-
settings_fields($this->getOptionsGroupName());
|
102 |
-
do_settings_sections($this->getOptionsGroupName());
|
103 |
-
do_action("gdpr/tabs/{$this->getSlug()}/after", $this);
|
104 |
-
|
105 |
-
$this->renderSubmitButton();
|
106 |
-
|
107 |
-
return ob_get_clean();
|
108 |
-
}
|
109 |
-
|
110 |
-
/**
|
111 |
-
* Render WP's default submit button
|
112 |
-
*/
|
113 |
-
public function renderSubmitButton()
|
114 |
-
{
|
115 |
-
submit_button(_x('Save', '(Admin)', 'gdpr-framework'));
|
116 |
-
}
|
117 |
-
|
118 |
-
/**
|
119 |
-
* Enqueue scripts, run the child class init function, trigger action for adding custom stuff
|
120 |
-
*/
|
121 |
-
public function setup()
|
122 |
-
{
|
123 |
-
// Automatically run the 'enqueue' method if it exists
|
124 |
-
if (method_exists($this, 'enqueue')) {
|
125 |
-
add_action('admin_enqueue_scripts', [$this, 'enqueue']);
|
126 |
-
}
|
127 |
-
|
128 |
-
$this->init();
|
129 |
-
|
130 |
-
// This hook can be used for registering custom settings
|
131 |
-
do_action("gdpr/tabs/{$this->getSlug()}/init", $this);
|
132 |
-
|
133 |
-
// Render the admin notices
|
134 |
-
add_action('admin_notices', [$this, 'renderAdminNotices']);
|
135 |
-
}
|
136 |
-
|
137 |
-
/**
|
138 |
-
* Render success notices via admin_notice action
|
139 |
-
*/
|
140 |
-
public function renderAdminNotices()
|
141 |
-
{
|
142 |
-
if ('tools_page_privacy' !== get_current_screen()->base) {
|
143 |
-
return;
|
144 |
-
}
|
145 |
-
|
146 |
-
if (!isset($_REQUEST['gdpr_notice'])) {
|
147 |
-
return;
|
148 |
-
}
|
149 |
-
|
150 |
-
if ('policy_generated' === $_REQUEST['gdpr_notice']) {
|
151 |
-
$message = _x('Policy generated!', '(Admin)', 'gdpr-framework');
|
152 |
-
$class = 'notice notice-success';
|
153 |
-
}
|
154 |
-
|
155 |
-
echo gdpr('view')->render('admin/notice', compact('message', 'class'));
|
156 |
-
}
|
157 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Admin;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Base class for admin tabs. Extend this.
|
7 |
+
*
|
8 |
+
* Class AdminTab
|
9 |
+
*
|
10 |
+
* @package Codelight\GDPR\Admin
|
11 |
+
*/
|
12 |
+
abstract class AdminTab implements AdminTabInterface
|
13 |
+
{
|
14 |
+
/* @var string */
|
15 |
+
protected $slug;
|
16 |
+
|
17 |
+
/* @var string */
|
18 |
+
protected $title;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @return string
|
22 |
+
*/
|
23 |
+
public function getSlug()
|
24 |
+
{
|
25 |
+
return $this->slug;
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @return string
|
30 |
+
*/
|
31 |
+
public function getTitle()
|
32 |
+
{
|
33 |
+
return $this->title;
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @return string
|
38 |
+
*/
|
39 |
+
public function getOptionsGroupName()
|
40 |
+
{
|
41 |
+
return 'gdpr_' . $this->getSlug();
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Register a setting on the admin page
|
46 |
+
*
|
47 |
+
* @param $optionName
|
48 |
+
* @param string $args
|
49 |
+
*/
|
50 |
+
public function registerSetting($optionName, $args = [])
|
51 |
+
{
|
52 |
+
register_setting($this->getOptionsGroupName(), $optionName, $args);
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Register a section on the admin page
|
57 |
+
*
|
58 |
+
* @param $name
|
59 |
+
* @param $callback
|
60 |
+
*/
|
61 |
+
public function registerSettingSection($id, $title, $callback = null)
|
62 |
+
{
|
63 |
+
add_settings_section(
|
64 |
+
$id,
|
65 |
+
$title,
|
66 |
+
$callback,
|
67 |
+
$this->getOptionsGroupName()
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Register a setting field on the admin page
|
73 |
+
*
|
74 |
+
* @param $id
|
75 |
+
* @param $title
|
76 |
+
* @param $callback
|
77 |
+
*/
|
78 |
+
public function registerSettingField($id, $title, $callback = null, $section = '', $args = [])
|
79 |
+
{
|
80 |
+
add_settings_field(
|
81 |
+
$id,
|
82 |
+
$title,
|
83 |
+
$callback,
|
84 |
+
$this->getOptionsGroupName(),
|
85 |
+
$section,
|
86 |
+
$args
|
87 |
+
);
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Render the contents including settings fields, sections and submit button.
|
92 |
+
* Trigger hooks for rendering content before and after the settings fields.
|
93 |
+
*
|
94 |
+
* @return string
|
95 |
+
*/
|
96 |
+
public function renderContents()
|
97 |
+
{
|
98 |
+
ob_start();
|
99 |
+
|
100 |
+
do_action("gdpr/tabs/{$this->getSlug()}/before", $this);
|
101 |
+
settings_fields($this->getOptionsGroupName());
|
102 |
+
do_settings_sections($this->getOptionsGroupName());
|
103 |
+
do_action("gdpr/tabs/{$this->getSlug()}/after", $this);
|
104 |
+
|
105 |
+
$this->renderSubmitButton();
|
106 |
+
|
107 |
+
return ob_get_clean();
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Render WP's default submit button
|
112 |
+
*/
|
113 |
+
public function renderSubmitButton()
|
114 |
+
{
|
115 |
+
submit_button(_x('Save', '(Admin)', 'gdpr-framework'));
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Enqueue scripts, run the child class init function, trigger action for adding custom stuff
|
120 |
+
*/
|
121 |
+
public function setup()
|
122 |
+
{
|
123 |
+
// Automatically run the 'enqueue' method if it exists
|
124 |
+
if (method_exists($this, 'enqueue')) {
|
125 |
+
add_action('admin_enqueue_scripts', [$this, 'enqueue']);
|
126 |
+
}
|
127 |
+
|
128 |
+
$this->init();
|
129 |
+
|
130 |
+
// This hook can be used for registering custom settings
|
131 |
+
do_action("gdpr/tabs/{$this->getSlug()}/init", $this);
|
132 |
+
|
133 |
+
// Render the admin notices
|
134 |
+
add_action('admin_notices', [$this, 'renderAdminNotices']);
|
135 |
+
}
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Render success notices via admin_notice action
|
139 |
+
*/
|
140 |
+
public function renderAdminNotices()
|
141 |
+
{
|
142 |
+
if ('tools_page_privacy' !== get_current_screen()->base) {
|
143 |
+
return;
|
144 |
+
}
|
145 |
+
|
146 |
+
if (!isset($_REQUEST['gdpr_notice'])) {
|
147 |
+
return;
|
148 |
+
}
|
149 |
+
|
150 |
+
if ('policy_generated' === $_REQUEST['gdpr_notice']) {
|
151 |
+
$message = _x('Policy generated!', '(Admin)', 'gdpr-framework');
|
152 |
+
$class = 'notice notice-success';
|
153 |
+
}
|
154 |
+
|
155 |
+
echo gdpr('view')->render('admin/notice', compact('message', 'class'));
|
156 |
+
}
|
157 |
+
}
|
src/Admin/AdminTabGeneral.php
CHANGED
@@ -1,277 +1,277 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Admin;
|
4 |
-
|
5 |
-
class AdminTabGeneral extends AdminTab
|
6 |
-
{
|
7 |
-
protected $slug = 'general';
|
8 |
-
|
9 |
-
public function __construct()
|
10 |
-
{
|
11 |
-
$this->title = _x('General', '(Admin)', 'gdpr-framework');
|
12 |
-
|
13 |
-
$this->registerSetting('gdpr_enable');
|
14 |
-
|
15 |
-
$this->registerSetting('gdpr_tools_page');
|
16 |
-
$this->registerSetting('gdpr_policy_page');
|
17 |
-
$this->registerSetting('gdpr_terms_page');
|
18 |
-
|
19 |
-
$this->registerSetting('gdpr_export_action');
|
20 |
-
$this->registerSetting('gdpr_export_action_email');
|
21 |
-
|
22 |
-
$this->registerSetting('gdpr_delete_action');
|
23 |
-
$this->registerSetting('gdpr_delete_action_reassign');
|
24 |
-
$this->registerSetting('gdpr_delete_action_reassign_user');
|
25 |
-
$this->registerSetting('gdpr_delete_action_email');
|
26 |
-
|
27 |
-
$this->registerSetting('gdpr_enable_stylesheet');
|
28 |
-
$this->registerSetting('gdpr_enable_theme_compatibility');
|
29 |
-
}
|
30 |
-
|
31 |
-
public function init()
|
32 |
-
{
|
33 |
-
/**
|
34 |
-
* General
|
35 |
-
*/
|
36 |
-
$this->registerSettingSection(
|
37 |
-
'gdpr_section_general',
|
38 |
-
_x('General Settings', '(Admin)', 'gdpr-framework')
|
39 |
-
);
|
40 |
-
|
41 |
-
$this->registerSettingField(
|
42 |
-
'gdpr_enable',
|
43 |
-
_x('Enable Privacy Tools', '(Admin)', 'gdpr-framework'),
|
44 |
-
[$this, 'renderEnableCheckbox'],
|
45 |
-
'gdpr_section_general'
|
46 |
-
);
|
47 |
-
|
48 |
-
/**
|
49 |
-
* GDPR system pages
|
50 |
-
*/
|
51 |
-
$this->registerSettingSection(
|
52 |
-
'gdpr_section_pages',
|
53 |
-
_x('Pages', '(Admin)', 'gdpr-framework')
|
54 |
-
);
|
55 |
-
|
56 |
-
$this->registerSettingField(
|
57 |
-
'gdpr_tools_page',
|
58 |
-
_x('Privacy Tools Page', '(Admin)', 'gdpr-framework') . '*',
|
59 |
-
[$this, 'renderPrivacyToolsPageSelector'],
|
60 |
-
'gdpr_section_pages'
|
61 |
-
);
|
62 |
-
|
63 |
-
$this->registerSettingField(
|
64 |
-
'gdpr_policy_page',
|
65 |
-
_x('Privacy Policy Page', '(Admin)', 'gdpr-framework') . '*',
|
66 |
-
[$this, 'renderPolicyPageSelector'],
|
67 |
-
'gdpr_section_pages'
|
68 |
-
);
|
69 |
-
|
70 |
-
$this->registerSettingField(
|
71 |
-
'gdpr_terms_page',
|
72 |
-
_x('Terms & Conditions Page', '(Admin)', 'gdpr-framework'),
|
73 |
-
[$this, 'renderTermsPageSelector'],
|
74 |
-
'gdpr_section_pages'
|
75 |
-
);
|
76 |
-
|
77 |
-
/**
|
78 |
-
* View & Export
|
79 |
-
*/
|
80 |
-
$this->registerSettingSection(
|
81 |
-
'gdpr_section_export',
|
82 |
-
_x('View & Export Data', '(Admin)', 'gdpr-framework')
|
83 |
-
);
|
84 |
-
|
85 |
-
$this->registerSettingField(
|
86 |
-
'gdpr_export_action',
|
87 |
-
_x('Export action', '(Admin)', 'gdpr-framework'),
|
88 |
-
[$this, 'renderExportActionSelector'],
|
89 |
-
'gdpr_section_export'
|
90 |
-
);
|
91 |
-
|
92 |
-
$this->registerSettingField(
|
93 |
-
'gdpr_export_action_email',
|
94 |
-
_x('Email to notify', '(Admin)', 'gdpr-framework'),
|
95 |
-
[$this, 'renderExportActionEmail'],
|
96 |
-
'gdpr_section_export',
|
97 |
-
['class' => 'js-gdpr-export-action-email hidden']
|
98 |
-
);
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Delete data
|
102 |
-
*/
|
103 |
-
$this->registerSettingSection(
|
104 |
-
'gdpr_section_delete',
|
105 |
-
_x('Delete & Anonymize Data', '(Admin)', 'gdpr-framework')
|
106 |
-
);
|
107 |
-
|
108 |
-
$this->registerSettingField(
|
109 |
-
'gdpr_delete_action',
|
110 |
-
_x('Delete action', '(Admin)', 'gdpr-framework'),
|
111 |
-
[$this, 'renderDeleteActionSelector'],
|
112 |
-
'gdpr_section_delete'
|
113 |
-
);
|
114 |
-
|
115 |
-
$this->registerSettingField(
|
116 |
-
'gdpr_delete_action_reassign',
|
117 |
-
_x('Delete or reassign content?', '(Admin)', 'gdpr-framework'),
|
118 |
-
[$this, 'renderDeleteActionReassign'],
|
119 |
-
'gdpr_section_delete',
|
120 |
-
['class' => 'js-gdpr-delete-action-reassign hidden']
|
121 |
-
);
|
122 |
-
|
123 |
-
$this->registerSettingField(
|
124 |
-
'gdpr_delete_action_reassign_user',
|
125 |
-
_x('Reassign content to', '(Admin)', 'gdpr-framework'),
|
126 |
-
[$this, 'renderDeleteActionReassignUser'],
|
127 |
-
'gdpr_section_delete',
|
128 |
-
['class' => 'js-gdpr-delete-action-reassign-user hidden']
|
129 |
-
);
|
130 |
-
|
131 |
-
$this->registerSettingField(
|
132 |
-
'gdpr_delete_action_email',
|
133 |
-
_x('Email to notify', '(Admin)', 'gdpr-framework'),
|
134 |
-
[$this, 'renderDeleteActionEmail'],
|
135 |
-
'gdpr_section_delete',
|
136 |
-
['class' => 'js-gdpr-delete-action-email hidden']
|
137 |
-
);
|
138 |
-
|
139 |
-
/**
|
140 |
-
* Stylesheet
|
141 |
-
*/
|
142 |
-
|
143 |
-
$this->registerSettingSection(
|
144 |
-
'gdpr_section_stylesheet',
|
145 |
-
_x('Styling', '(Admin)', 'gdpr-framework')
|
146 |
-
);
|
147 |
-
|
148 |
-
$this->registerSettingField(
|
149 |
-
'gdpr_enable_theme_compatibility',
|
150 |
-
_x('Enable basic styling on Privacy Tools page', '(Admin)', 'gdpr-framework'),
|
151 |
-
[$this, 'renderStylesheetSelector'],
|
152 |
-
'gdpr_section_stylesheet'
|
153 |
-
);
|
154 |
-
|
155 |
-
if (gdpr('themes')->isCurrentThemeSupported()) {
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Compatibility settings
|
159 |
-
*/
|
160 |
-
$this->registerSettingSection(
|
161 |
-
'gdpr_section_compatibility',
|
162 |
-
_x('Compatibility', '(Admin)', 'gdpr-framework')
|
163 |
-
);
|
164 |
-
|
165 |
-
$this->registerSettingField(
|
166 |
-
'gdpr_enable_theme_compatibility',
|
167 |
-
_x('Enable automatic theme compatibility', '(Admin)', 'gdpr-framework'),
|
168 |
-
[$this, 'renderThemeCompatibilitySelector'],
|
169 |
-
'gdpr_section_compatibility'
|
170 |
-
);
|
171 |
-
}
|
172 |
-
}
|
173 |
-
|
174 |
-
public function renderEnableCheckbox()
|
175 |
-
{
|
176 |
-
$enabled = gdpr('options')->get('enable');
|
177 |
-
echo gdpr('view')->render('admin/general/enable', compact('enabled'));
|
178 |
-
}
|
179 |
-
|
180 |
-
public function renderPrivacyToolsPageSelector()
|
181 |
-
{
|
182 |
-
wp_dropdown_pages([
|
183 |
-
'name' => 'gdpr_tools_page',
|
184 |
-
'show_option_none' => _x('— Select —', '(Admin)', 'gdpr-framework'),
|
185 |
-
'option_none_value' => '0',
|
186 |
-
'selected' => gdpr('options')->get('tools_page'),
|
187 |
-
'class' => 'js-gdpr-select2 gdpr-select',
|
188 |
-
'post_status' => 'publish,draft',
|
189 |
-
]);
|
190 |
-
echo gdpr('view')->render('admin/general/description-data-page');
|
191 |
-
}
|
192 |
-
|
193 |
-
/**
|
194 |
-
* Render the GDPR policy page selector dropdown
|
195 |
-
*/
|
196 |
-
public function renderPolicyPageSelector()
|
197 |
-
{
|
198 |
-
wp_dropdown_pages([
|
199 |
-
'name' => 'gdpr_policy_page',
|
200 |
-
'show_option_none' => _x('— Select —', '(Admin)', 'gdpr-framework'),
|
201 |
-
'option_none_value' => '0',
|
202 |
-
'selected' => gdpr('options')->get('policy_page'),
|
203 |
-
'class' => 'js-gdpr-select2 gdpr-select',
|
204 |
-
'post_status' => 'publish,draft',
|
205 |
-
]);
|
206 |
-
echo gdpr('view')->render('admin/privacy-policy/description-policy-page');
|
207 |
-
}
|
208 |
-
|
209 |
-
public function renderTermsPageSelector()
|
210 |
-
{
|
211 |
-
wp_dropdown_pages([
|
212 |
-
'name' => 'gdpr_terms_page',
|
213 |
-
'show_option_none' => _x('— Select —', '(Admin)', 'gdpr-framework'),
|
214 |
-
'option_none_value' => '0',
|
215 |
-
'selected' => gdpr('options')->get('terms_page'),
|
216 |
-
'class' => 'js-gdpr-select2 gdpr-select',
|
217 |
-
'post_status' => 'publish,draft',
|
218 |
-
]);
|
219 |
-
echo gdpr('view')->render('admin/general/description-terms-page');
|
220 |
-
}
|
221 |
-
|
222 |
-
public function renderExportActionSelector()
|
223 |
-
{
|
224 |
-
$exportAction = gdpr('options')->get('export_action');
|
225 |
-
echo gdpr('view')->render('admin/general/export-action', compact('exportAction'));
|
226 |
-
echo gdpr('view')->render('admin/general/description-export-action');
|
227 |
-
}
|
228 |
-
|
229 |
-
public function renderExportActionEmail()
|
230 |
-
{
|
231 |
-
$exportActionEmail = gdpr('options')->get('export_action_email');
|
232 |
-
echo gdpr('view')->render('admin/general/export-action-email', compact('exportActionEmail'));
|
233 |
-
}
|
234 |
-
|
235 |
-
public function renderDeleteActionSelector()
|
236 |
-
{
|
237 |
-
$deleteAction = gdpr('options')->get('delete_action');
|
238 |
-
echo gdpr('view')->render('admin/general/delete-action', compact('deleteAction'));
|
239 |
-
echo gdpr('view')->render('admin/general/description-delete-action');
|
240 |
-
}
|
241 |
-
|
242 |
-
public function renderDeleteActionReassign()
|
243 |
-
{
|
244 |
-
$reassign = gdpr('options')->get('delete_action_reassign');
|
245 |
-
echo gdpr('view')->render('admin/general/delete-action-reassign', compact('reassign'));
|
246 |
-
}
|
247 |
-
|
248 |
-
public function renderDeleteActionReassignUser()
|
249 |
-
{
|
250 |
-
wp_dropdown_users([
|
251 |
-
'name' => 'gdpr_delete_action_reassign_user',
|
252 |
-
'show_option_none' => _x('— Select —', '(Admin)', 'gdpr-framework'),
|
253 |
-
'option_none_value' => '0',
|
254 |
-
'selected' => gdpr('options')->get('delete_action_reassign_user'),
|
255 |
-
'class' => 'js-gdpr-select2 gdpr-select',
|
256 |
-
'role__in' => apply_filters('gdpr/options/reassign/roles', ['administrator', 'editor']),
|
257 |
-
]);
|
258 |
-
}
|
259 |
-
|
260 |
-
public function renderDeleteActionEmail()
|
261 |
-
{
|
262 |
-
$deleteActionEmail = gdpr('options')->get('delete_action_email');
|
263 |
-
echo gdpr('view')->render('admin/general/delete-action-email', compact('deleteActionEmail'));
|
264 |
-
}
|
265 |
-
|
266 |
-
public function renderStylesheetSelector()
|
267 |
-
{
|
268 |
-
$enabled = gdpr('options')->get('enable_stylesheet');
|
269 |
-
echo gdpr('view')->render('admin/general/stylesheet', compact('enabled'));
|
270 |
-
}
|
271 |
-
|
272 |
-
public function renderThemeCompatibilitySelector()
|
273 |
-
{
|
274 |
-
$enabled = gdpr('options')->get('enable_theme_compatibility');
|
275 |
-
echo gdpr('view')->render('admin/general/theme-compatibility', compact('enabled'));
|
276 |
-
}
|
277 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Admin;
|
4 |
+
|
5 |
+
class AdminTabGeneral extends AdminTab
|
6 |
+
{
|
7 |
+
protected $slug = 'general';
|
8 |
+
|
9 |
+
public function __construct()
|
10 |
+
{
|
11 |
+
$this->title = _x('General', '(Admin)', 'gdpr-framework');
|
12 |
+
|
13 |
+
$this->registerSetting('gdpr_enable');
|
14 |
+
|
15 |
+
$this->registerSetting('gdpr_tools_page');
|
16 |
+
$this->registerSetting('gdpr_policy_page');
|
17 |
+
$this->registerSetting('gdpr_terms_page');
|
18 |
+
|
19 |
+
$this->registerSetting('gdpr_export_action');
|
20 |
+
$this->registerSetting('gdpr_export_action_email');
|
21 |
+
|
22 |
+
$this->registerSetting('gdpr_delete_action');
|
23 |
+
$this->registerSetting('gdpr_delete_action_reassign');
|
24 |
+
$this->registerSetting('gdpr_delete_action_reassign_user');
|
25 |
+
$this->registerSetting('gdpr_delete_action_email');
|
26 |
+
|
27 |
+
$this->registerSetting('gdpr_enable_stylesheet');
|
28 |
+
$this->registerSetting('gdpr_enable_theme_compatibility');
|
29 |
+
}
|
30 |
+
|
31 |
+
public function init()
|
32 |
+
{
|
33 |
+
/**
|
34 |
+
* General
|
35 |
+
*/
|
36 |
+
$this->registerSettingSection(
|
37 |
+
'gdpr_section_general',
|
38 |
+
_x('General Settings', '(Admin)', 'gdpr-framework')
|
39 |
+
);
|
40 |
+
|
41 |
+
$this->registerSettingField(
|
42 |
+
'gdpr_enable',
|
43 |
+
_x('Enable Privacy Tools', '(Admin)', 'gdpr-framework'),
|
44 |
+
[$this, 'renderEnableCheckbox'],
|
45 |
+
'gdpr_section_general'
|
46 |
+
);
|
47 |
+
|
48 |
+
/**
|
49 |
+
* GDPR system pages
|
50 |
+
*/
|
51 |
+
$this->registerSettingSection(
|
52 |
+
'gdpr_section_pages',
|
53 |
+
_x('Pages', '(Admin)', 'gdpr-framework')
|
54 |
+
);
|
55 |
+
|
56 |
+
$this->registerSettingField(
|
57 |
+
'gdpr_tools_page',
|
58 |
+
_x('Privacy Tools Page', '(Admin)', 'gdpr-framework') . '*',
|
59 |
+
[$this, 'renderPrivacyToolsPageSelector'],
|
60 |
+
'gdpr_section_pages'
|
61 |
+
);
|
62 |
+
|
63 |
+
$this->registerSettingField(
|
64 |
+
'gdpr_policy_page',
|
65 |
+
_x('Privacy Policy Page', '(Admin)', 'gdpr-framework') . '*',
|
66 |
+
[$this, 'renderPolicyPageSelector'],
|
67 |
+
'gdpr_section_pages'
|
68 |
+
);
|
69 |
+
|
70 |
+
$this->registerSettingField(
|
71 |
+
'gdpr_terms_page',
|
72 |
+
_x('Terms & Conditions Page', '(Admin)', 'gdpr-framework'),
|
73 |
+
[$this, 'renderTermsPageSelector'],
|
74 |
+
'gdpr_section_pages'
|
75 |
+
);
|
76 |
+
|
77 |
+
/**
|
78 |
+
* View & Export
|
79 |
+
*/
|
80 |
+
$this->registerSettingSection(
|
81 |
+
'gdpr_section_export',
|
82 |
+
_x('View & Export Data', '(Admin)', 'gdpr-framework')
|
83 |
+
);
|
84 |
+
|
85 |
+
$this->registerSettingField(
|
86 |
+
'gdpr_export_action',
|
87 |
+
_x('Export action', '(Admin)', 'gdpr-framework'),
|
88 |
+
[$this, 'renderExportActionSelector'],
|
89 |
+
'gdpr_section_export'
|
90 |
+
);
|
91 |
+
|
92 |
+
$this->registerSettingField(
|
93 |
+
'gdpr_export_action_email',
|
94 |
+
_x('Email to notify', '(Admin)', 'gdpr-framework'),
|
95 |
+
[$this, 'renderExportActionEmail'],
|
96 |
+
'gdpr_section_export',
|
97 |
+
['class' => 'js-gdpr-export-action-email hidden']
|
98 |
+
);
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Delete data
|
102 |
+
*/
|
103 |
+
$this->registerSettingSection(
|
104 |
+
'gdpr_section_delete',
|
105 |
+
_x('Delete & Anonymize Data', '(Admin)', 'gdpr-framework')
|
106 |
+
);
|
107 |
+
|
108 |
+
$this->registerSettingField(
|
109 |
+
'gdpr_delete_action',
|
110 |
+
_x('Delete action', '(Admin)', 'gdpr-framework'),
|
111 |
+
[$this, 'renderDeleteActionSelector'],
|
112 |
+
'gdpr_section_delete'
|
113 |
+
);
|
114 |
+
|
115 |
+
$this->registerSettingField(
|
116 |
+
'gdpr_delete_action_reassign',
|
117 |
+
_x('Delete or reassign content?', '(Admin)', 'gdpr-framework'),
|
118 |
+
[$this, 'renderDeleteActionReassign'],
|
119 |
+
'gdpr_section_delete',
|
120 |
+
['class' => 'js-gdpr-delete-action-reassign hidden']
|
121 |
+
);
|
122 |
+
|
123 |
+
$this->registerSettingField(
|
124 |
+
'gdpr_delete_action_reassign_user',
|
125 |
+
_x('Reassign content to', '(Admin)', 'gdpr-framework'),
|
126 |
+
[$this, 'renderDeleteActionReassignUser'],
|
127 |
+
'gdpr_section_delete',
|
128 |
+
['class' => 'js-gdpr-delete-action-reassign-user hidden']
|
129 |
+
);
|
130 |
+
|
131 |
+
$this->registerSettingField(
|
132 |
+
'gdpr_delete_action_email',
|
133 |
+
_x('Email to notify', '(Admin)', 'gdpr-framework'),
|
134 |
+
[$this, 'renderDeleteActionEmail'],
|
135 |
+
'gdpr_section_delete',
|
136 |
+
['class' => 'js-gdpr-delete-action-email hidden']
|
137 |
+
);
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Stylesheet
|
141 |
+
*/
|
142 |
+
|
143 |
+
$this->registerSettingSection(
|
144 |
+
'gdpr_section_stylesheet',
|
145 |
+
_x('Styling', '(Admin)', 'gdpr-framework')
|
146 |
+
);
|
147 |
+
|
148 |
+
$this->registerSettingField(
|
149 |
+
'gdpr_enable_theme_compatibility',
|
150 |
+
_x('Enable basic styling on Privacy Tools page', '(Admin)', 'gdpr-framework'),
|
151 |
+
[$this, 'renderStylesheetSelector'],
|
152 |
+
'gdpr_section_stylesheet'
|
153 |
+
);
|
154 |
+
|
155 |
+
if (gdpr('themes')->isCurrentThemeSupported()) {
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Compatibility settings
|
159 |
+
*/
|
160 |
+
$this->registerSettingSection(
|
161 |
+
'gdpr_section_compatibility',
|
162 |
+
_x('Compatibility', '(Admin)', 'gdpr-framework')
|
163 |
+
);
|
164 |
+
|
165 |
+
$this->registerSettingField(
|
166 |
+
'gdpr_enable_theme_compatibility',
|
167 |
+
_x('Enable automatic theme compatibility', '(Admin)', 'gdpr-framework'),
|
168 |
+
[$this, 'renderThemeCompatibilitySelector'],
|
169 |
+
'gdpr_section_compatibility'
|
170 |
+
);
|
171 |
+
}
|
172 |
+
}
|
173 |
+
|
174 |
+
public function renderEnableCheckbox()
|
175 |
+
{
|
176 |
+
$enabled = gdpr('options')->get('enable');
|
177 |
+
echo gdpr('view')->render('admin/general/enable', compact('enabled'));
|
178 |
+
}
|
179 |
+
|
180 |
+
public function renderPrivacyToolsPageSelector()
|
181 |
+
{
|
182 |
+
wp_dropdown_pages([
|
183 |
+
'name' => 'gdpr_tools_page',
|
184 |
+
'show_option_none' => _x('— Select —', '(Admin)', 'gdpr-framework'),
|
185 |
+
'option_none_value' => '0',
|
186 |
+
'selected' => gdpr('options')->get('tools_page'),
|
187 |
+
'class' => 'js-gdpr-select2 gdpr-select',
|
188 |
+
'post_status' => 'publish,draft',
|
189 |
+
]);
|
190 |
+
echo gdpr('view')->render('admin/general/description-data-page');
|
191 |
+
}
|
192 |
+
|
193 |
+
/**
|
194 |
+
* Render the GDPR policy page selector dropdown
|
195 |
+
*/
|
196 |
+
public function renderPolicyPageSelector()
|
197 |
+
{
|
198 |
+
wp_dropdown_pages([
|
199 |
+
'name' => 'gdpr_policy_page',
|
200 |
+
'show_option_none' => _x('— Select —', '(Admin)', 'gdpr-framework'),
|
201 |
+
'option_none_value' => '0',
|
202 |
+
'selected' => gdpr('options')->get('policy_page'),
|
203 |
+
'class' => 'js-gdpr-select2 gdpr-select',
|
204 |
+
'post_status' => 'publish,draft',
|
205 |
+
]);
|
206 |
+
echo gdpr('view')->render('admin/privacy-policy/description-policy-page');
|
207 |
+
}
|
208 |
+
|
209 |
+
public function renderTermsPageSelector()
|
210 |
+
{
|
211 |
+
wp_dropdown_pages([
|
212 |
+
'name' => 'gdpr_terms_page',
|
213 |
+
'show_option_none' => _x('— Select —', '(Admin)', 'gdpr-framework'),
|
214 |
+
'option_none_value' => '0',
|
215 |
+
'selected' => gdpr('options')->get('terms_page'),
|
216 |
+
'class' => 'js-gdpr-select2 gdpr-select',
|
217 |
+
'post_status' => 'publish,draft',
|
218 |
+
]);
|
219 |
+
echo gdpr('view')->render('admin/general/description-terms-page');
|
220 |
+
}
|
221 |
+
|
222 |
+
public function renderExportActionSelector()
|
223 |
+
{
|
224 |
+
$exportAction = gdpr('options')->get('export_action');
|
225 |
+
echo gdpr('view')->render('admin/general/export-action', compact('exportAction'));
|
226 |
+
echo gdpr('view')->render('admin/general/description-export-action');
|
227 |
+
}
|
228 |
+
|
229 |
+
public function renderExportActionEmail()
|
230 |
+
{
|
231 |
+
$exportActionEmail = gdpr('options')->get('export_action_email');
|
232 |
+
echo gdpr('view')->render('admin/general/export-action-email', compact('exportActionEmail'));
|
233 |
+
}
|
234 |
+
|
235 |
+
public function renderDeleteActionSelector()
|
236 |
+
{
|
237 |
+
$deleteAction = gdpr('options')->get('delete_action');
|
238 |
+
echo gdpr('view')->render('admin/general/delete-action', compact('deleteAction'));
|
239 |
+
echo gdpr('view')->render('admin/general/description-delete-action');
|
240 |
+
}
|
241 |
+
|
242 |
+
public function renderDeleteActionReassign()
|
243 |
+
{
|
244 |
+
$reassign = gdpr('options')->get('delete_action_reassign');
|
245 |
+
echo gdpr('view')->render('admin/general/delete-action-reassign', compact('reassign'));
|
246 |
+
}
|
247 |
+
|
248 |
+
public function renderDeleteActionReassignUser()
|
249 |
+
{
|
250 |
+
wp_dropdown_users([
|
251 |
+
'name' => 'gdpr_delete_action_reassign_user',
|
252 |
+
'show_option_none' => _x('— Select —', '(Admin)', 'gdpr-framework'),
|
253 |
+
'option_none_value' => '0',
|
254 |
+
'selected' => gdpr('options')->get('delete_action_reassign_user'),
|
255 |
+
'class' => 'js-gdpr-select2 gdpr-select',
|
256 |
+
'role__in' => apply_filters('gdpr/options/reassign/roles', ['administrator', 'editor']),
|
257 |
+
]);
|
258 |
+
}
|
259 |
+
|
260 |
+
public function renderDeleteActionEmail()
|
261 |
+
{
|
262 |
+
$deleteActionEmail = gdpr('options')->get('delete_action_email');
|
263 |
+
echo gdpr('view')->render('admin/general/delete-action-email', compact('deleteActionEmail'));
|
264 |
+
}
|
265 |
+
|
266 |
+
public function renderStylesheetSelector()
|
267 |
+
{
|
268 |
+
$enabled = gdpr('options')->get('enable_stylesheet');
|
269 |
+
echo gdpr('view')->render('admin/general/stylesheet', compact('enabled'));
|
270 |
+
}
|
271 |
+
|
272 |
+
public function renderThemeCompatibilitySelector()
|
273 |
+
{
|
274 |
+
$enabled = gdpr('options')->get('enable_theme_compatibility');
|
275 |
+
echo gdpr('view')->render('admin/general/theme-compatibility', compact('enabled'));
|
276 |
+
}
|
277 |
+
}
|
src/Admin/Modal.php
CHANGED
@@ -1,41 +1,41 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Admin;
|
4 |
-
|
5 |
-
class Modal
|
6 |
-
{
|
7 |
-
protected $id;
|
8 |
-
|
9 |
-
protected $template;
|
10 |
-
|
11 |
-
protected $data;
|
12 |
-
|
13 |
-
/**
|
14 |
-
* todo: replace with a proper factory pattern via gdpr()?
|
15 |
-
*
|
16 |
-
* AdminNotice constructor.
|
17 |
-
*/
|
18 |
-
public function __construct()
|
19 |
-
{
|
20 |
-
add_action('admin_footer', [$this, 'render']);
|
21 |
-
}
|
22 |
-
|
23 |
-
public function add($id, $template, $data = [])
|
24 |
-
{
|
25 |
-
$this->id = $id;
|
26 |
-
$this->template = $template;
|
27 |
-
$this->data = $data;
|
28 |
-
$this->data['id'] = $this->id;
|
29 |
-
}
|
30 |
-
|
31 |
-
public function render()
|
32 |
-
{
|
33 |
-
if (!$this->template) {
|
34 |
-
trigger_error('Template not set for admin notice!', E_USER_ERROR);
|
35 |
-
}
|
36 |
-
|
37 |
-
echo gdpr('view')->render('admin/modals/header', $this->data);
|
38 |
-
echo gdpr('view')->render($this->template, $this->data);
|
39 |
-
echo gdpr('view')->render('admin/modals/footer', $this->data);
|
40 |
-
}
|
41 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Admin;
|
4 |
+
|
5 |
+
class Modal
|
6 |
+
{
|
7 |
+
protected $id;
|
8 |
+
|
9 |
+
protected $template;
|
10 |
+
|
11 |
+
protected $data;
|
12 |
+
|
13 |
+
/**
|
14 |
+
* todo: replace with a proper factory pattern via gdpr()?
|
15 |
+
*
|
16 |
+
* AdminNotice constructor.
|
17 |
+
*/
|
18 |
+
public function __construct()
|
19 |
+
{
|
20 |
+
add_action('admin_footer', [$this, 'render']);
|
21 |
+
}
|
22 |
+
|
23 |
+
public function add($id, $template, $data = [])
|
24 |
+
{
|
25 |
+
$this->id = $id;
|
26 |
+
$this->template = $template;
|
27 |
+
$this->data = $data;
|
28 |
+
$this->data['id'] = $this->id;
|
29 |
+
}
|
30 |
+
|
31 |
+
public function render()
|
32 |
+
{
|
33 |
+
if (!$this->template) {
|
34 |
+
trigger_error('Template not set for admin notice!', E_USER_ERROR);
|
35 |
+
}
|
36 |
+
|
37 |
+
echo gdpr('view')->render('admin/modals/header', $this->data);
|
38 |
+
echo gdpr('view')->render($this->template, $this->data);
|
39 |
+
echo gdpr('view')->render('admin/modals/footer', $this->data);
|
40 |
+
}
|
41 |
+
}
|
src/Admin/WordpressAdmin.php
CHANGED
@@ -1,156 +1,156 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Admin;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Handles general admin functionality
|
7 |
-
*
|
8 |
-
* Class WordpressAdmin
|
9 |
-
*
|
10 |
-
* @package Codelight\GDPR\Admin
|
11 |
-
*/
|
12 |
-
class WordpressAdmin
|
13 |
-
{
|
14 |
-
public function __construct(WordpressAdminPage $adminPage)
|
15 |
-
{
|
16 |
-
$this->adminPage = $adminPage;
|
17 |
-
|
18 |
-
// Register the AdminTabGeneral class in our container
|
19 |
-
gdpr()->bind(AdminTabGeneral::class);
|
20 |
-
|
21 |
-
// Allow turning off helpers
|
22 |
-
if (apply_filters('gdpr/admin/helpers/enabled', true)) {
|
23 |
-
gdpr()->make(AdminHelper::class);
|
24 |
-
}
|
25 |
-
|
26 |
-
$this->setup();
|
27 |
-
|
28 |
-
}
|
29 |
-
|
30 |
-
/**
|
31 |
-
* Set up hooks
|
32 |
-
*/
|
33 |
-
protected function setup()
|
34 |
-
{
|
35 |
-
// Register the main GDPR options page
|
36 |
-
add_action('admin_menu', [$this, 'registerGDPROptionsPage']);
|
37 |
-
|
38 |
-
// Register General admin tab
|
39 |
-
add_filter('gdpr/admin/tabs', [$this, 'registerAdminTabGeneral'], 0);
|
40 |
-
|
41 |
-
// Enqueue assets
|
42 |
-
add_action('admin_enqueue_scripts', [$this, 'enqueue']);
|
43 |
-
|
44 |
-
// Register post states
|
45 |
-
add_filter('display_post_states', [$this, 'registerPostStates'], 10, 2);
|
46 |
-
|
47 |
-
// Show help notice
|
48 |
-
add_action('current_screen', [$this, 'maybeShowHelpNotice'], 999);
|
49 |
-
}
|
50 |
-
|
51 |
-
|
52 |
-
public function maybeShowHelpNotice()
|
53 |
-
{
|
54 |
-
if ('tools_page_privacy' === get_current_screen()->base) {
|
55 |
-
gdpr('admin-notice')->add('admin/notices/help');
|
56 |
-
}
|
57 |
-
}
|
58 |
-
|
59 |
-
/**
|
60 |
-
* Register the GDPR options page in WP admin
|
61 |
-
*/
|
62 |
-
public function registerGDPROptionsPage()
|
63 |
-
{
|
64 |
-
add_management_page(
|
65 |
-
_x('Privacy & GDPR Settings', '(Admin)', 'gdpr-framework'),
|
66 |
-
_x('Privacy', '(Admin)', 'gdpr-framework'),
|
67 |
-
'manage_options',
|
68 |
-
'privacy',
|
69 |
-
[$this->adminPage, 'renderPage']
|
70 |
-
);
|
71 |
-
}
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Register General admin tab
|
75 |
-
*
|
76 |
-
* @param $tabs
|
77 |
-
* @return array
|
78 |
-
*/
|
79 |
-
public function registerAdminTabGeneral($tabs)
|
80 |
-
{
|
81 |
-
$tabs['general'] = gdpr(AdminTabGeneral::class);
|
82 |
-
|
83 |
-
return $tabs;
|
84 |
-
}
|
85 |
-
|
86 |
-
/**
|
87 |
-
* Enqueue all admin scripts and styles
|
88 |
-
*/
|
89 |
-
public function enqueue()
|
90 |
-
{
|
91 |
-
/**
|
92 |
-
* General admin styles
|
93 |
-
*/
|
94 |
-
wp_enqueue_style(
|
95 |
-
'gdpr-admin',
|
96 |
-
gdpr('config')->get('plugin.url') . 'assets/gdpr-admin.css'
|
97 |
-
);
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
/**
|
102 |
-
* jQuery UI dialog for modals
|
103 |
-
*/
|
104 |
-
wp_enqueue_style('wp-jquery-ui-dialog');
|
105 |
-
wp_enqueue_script(
|
106 |
-
'gdpr-admin',
|
107 |
-
gdpr('config')->get('plugin.url') . 'assets/gdpr-admin.js',
|
108 |
-
['jquery-ui-dialog']
|
109 |
-
);
|
110 |
-
|
111 |
-
/**
|
112 |
-
* jQuery Repeater
|
113 |
-
*/
|
114 |
-
wp_enqueue_script(
|
115 |
-
'jquery-repeater',
|
116 |
-
gdpr('config')->get('plugin.url') . 'assets/jquery.repeater.min.js',
|
117 |
-
['jquery']
|
118 |
-
);
|
119 |
-
|
120 |
-
/**
|
121 |
-
* Select2
|
122 |
-
*/
|
123 |
-
wp_enqueue_style(
|
124 |
-
'select2css',
|
125 |
-
'//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css'
|
126 |
-
);
|
127 |
-
|
128 |
-
wp_enqueue_script(
|
129 |
-
'select2',
|
130 |
-
'//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js',
|
131 |
-
['jquery']
|
132 |
-
);
|
133 |
-
|
134 |
-
wp_enqueue_script(
|
135 |
-
'conditional-show',
|
136 |
-
gdpr('config')->get('plugin.url') . 'assets/conditional-show.js',
|
137 |
-
['jquery']
|
138 |
-
);
|
139 |
-
}
|
140 |
-
|
141 |
-
/**
|
142 |
-
* Add a new Post State for our super important system pages
|
143 |
-
*/
|
144 |
-
public function registerPostStates($postStates, $post)
|
145 |
-
{
|
146 |
-
if (gdpr('options')->get('policy_page') == $post->ID) {
|
147 |
-
$postStates['gdpr_policy_page'] = _x('Privacy Policy Page', '(Admin)', 'gdpr-framework');
|
148 |
-
}
|
149 |
-
|
150 |
-
if (gdpr('options')->get('tools_page') == $post->ID) {
|
151 |
-
$postStates['gdpr_tools_page'] = _x('Privacy Tools Page', '(Admin)', 'gdpr-framework');
|
152 |
-
}
|
153 |
-
|
154 |
-
return $postStates;
|
155 |
-
}
|
156 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Admin;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Handles general admin functionality
|
7 |
+
*
|
8 |
+
* Class WordpressAdmin
|
9 |
+
*
|
10 |
+
* @package Codelight\GDPR\Admin
|
11 |
+
*/
|
12 |
+
class WordpressAdmin
|
13 |
+
{
|
14 |
+
public function __construct(WordpressAdminPage $adminPage)
|
15 |
+
{
|
16 |
+
$this->adminPage = $adminPage;
|
17 |
+
|
18 |
+
// Register the AdminTabGeneral class in our container
|
19 |
+
gdpr()->bind(AdminTabGeneral::class);
|
20 |
+
|
21 |
+
// Allow turning off helpers
|
22 |
+
if (apply_filters('gdpr/admin/helpers/enabled', true)) {
|
23 |
+
gdpr()->make(AdminHelper::class);
|
24 |
+
}
|
25 |
+
|
26 |
+
$this->setup();
|
27 |
+
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Set up hooks
|
32 |
+
*/
|
33 |
+
protected function setup()
|
34 |
+
{
|
35 |
+
// Register the main GDPR options page
|
36 |
+
add_action('admin_menu', [$this, 'registerGDPROptionsPage']);
|
37 |
+
|
38 |
+
// Register General admin tab
|
39 |
+
add_filter('gdpr/admin/tabs', [$this, 'registerAdminTabGeneral'], 0);
|
40 |
+
|
41 |
+
// Enqueue assets
|
42 |
+
add_action('admin_enqueue_scripts', [$this, 'enqueue']);
|
43 |
+
|
44 |
+
// Register post states
|
45 |
+
add_filter('display_post_states', [$this, 'registerPostStates'], 10, 2);
|
46 |
+
|
47 |
+
// Show help notice
|
48 |
+
add_action('current_screen', [$this, 'maybeShowHelpNotice'], 999);
|
49 |
+
}
|
50 |
+
|
51 |
+
|
52 |
+
public function maybeShowHelpNotice()
|
53 |
+
{
|
54 |
+
if ('tools_page_privacy' === get_current_screen()->base) {
|
55 |
+
gdpr('admin-notice')->add('admin/notices/help');
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Register the GDPR options page in WP admin
|
61 |
+
*/
|
62 |
+
public function registerGDPROptionsPage()
|
63 |
+
{
|
64 |
+
add_management_page(
|
65 |
+
_x('Privacy & GDPR Settings', '(Admin)', 'gdpr-framework'),
|
66 |
+
_x('Privacy', '(Admin)', 'gdpr-framework'),
|
67 |
+
'manage_options',
|
68 |
+
'privacy',
|
69 |
+
[$this->adminPage, 'renderPage']
|
70 |
+
);
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Register General admin tab
|
75 |
+
*
|
76 |
+
* @param $tabs
|
77 |
+
* @return array
|
78 |
+
*/
|
79 |
+
public function registerAdminTabGeneral($tabs)
|
80 |
+
{
|
81 |
+
$tabs['general'] = gdpr(AdminTabGeneral::class);
|
82 |
+
|
83 |
+
return $tabs;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Enqueue all admin scripts and styles
|
88 |
+
*/
|
89 |
+
public function enqueue()
|
90 |
+
{
|
91 |
+
/**
|
92 |
+
* General admin styles
|
93 |
+
*/
|
94 |
+
wp_enqueue_style(
|
95 |
+
'gdpr-admin',
|
96 |
+
gdpr('config')->get('plugin.url') . 'assets/gdpr-admin.css'
|
97 |
+
);
|
98 |
+
|
99 |
+
|
100 |
+
|
101 |
+
/**
|
102 |
+
* jQuery UI dialog for modals
|
103 |
+
*/
|
104 |
+
wp_enqueue_style('wp-jquery-ui-dialog');
|
105 |
+
wp_enqueue_script(
|
106 |
+
'gdpr-admin',
|
107 |
+
gdpr('config')->get('plugin.url') . 'assets/gdpr-admin.js',
|
108 |
+
['jquery-ui-dialog']
|
109 |
+
);
|
110 |
+
|
111 |
+
/**
|
112 |
+
* jQuery Repeater
|
113 |
+
*/
|
114 |
+
wp_enqueue_script(
|
115 |
+
'jquery-repeater',
|
116 |
+
gdpr('config')->get('plugin.url') . 'assets/jquery.repeater.min.js',
|
117 |
+
['jquery']
|
118 |
+
);
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Select2
|
122 |
+
*/
|
123 |
+
wp_enqueue_style(
|
124 |
+
'select2css',
|
125 |
+
'//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css'
|
126 |
+
);
|
127 |
+
|
128 |
+
wp_enqueue_script(
|
129 |
+
'select2',
|
130 |
+
'//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js',
|
131 |
+
['jquery']
|
132 |
+
);
|
133 |
+
|
134 |
+
wp_enqueue_script(
|
135 |
+
'conditional-show',
|
136 |
+
gdpr('config')->get('plugin.url') . 'assets/conditional-show.js',
|
137 |
+
['jquery']
|
138 |
+
);
|
139 |
+
}
|
140 |
+
|
141 |
+
/**
|
142 |
+
* Add a new Post State for our super important system pages
|
143 |
+
*/
|
144 |
+
public function registerPostStates($postStates, $post)
|
145 |
+
{
|
146 |
+
if (gdpr('options')->get('policy_page') == $post->ID) {
|
147 |
+
$postStates['gdpr_policy_page'] = _x('Privacy Policy Page', '(Admin)', 'gdpr-framework');
|
148 |
+
}
|
149 |
+
|
150 |
+
if (gdpr('options')->get('tools_page') == $post->ID) {
|
151 |
+
$postStates['gdpr_tools_page'] = _x('Privacy Tools Page', '(Admin)', 'gdpr-framework');
|
152 |
+
}
|
153 |
+
|
154 |
+
return $postStates;
|
155 |
+
}
|
156 |
+
}
|
src/Admin/WordpressAdminPage.php
CHANGED
@@ -1,147 +1,147 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Admin;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Handle registering and rendering the GDPR admin page contents
|
7 |
-
*
|
8 |
-
* Class WordpressAdminPage
|
9 |
-
*
|
10 |
-
* @package Codelight\GDPR\Admin
|
11 |
-
*/
|
12 |
-
class WordpressAdminPage
|
13 |
-
{
|
14 |
-
protected $slug = 'gdpr';
|
15 |
-
|
16 |
-
protected $tabs = [];
|
17 |
-
|
18 |
-
public function __construct()
|
19 |
-
{
|
20 |
-
$this->setup();
|
21 |
-
}
|
22 |
-
|
23 |
-
protected function setup()
|
24 |
-
{
|
25 |
-
// Register the tabs
|
26 |
-
add_action('admin_init', [$this, 'registerTabs']);
|
27 |
-
|
28 |
-
// todo
|
29 |
-
//if (gdpr('options')->get('plugin_disclaimer_accepted')) {
|
30 |
-
// Initialize the active tab
|
31 |
-
add_action('admin_init', [$this, 'initActiveTab']);
|
32 |
-
//}
|
33 |
-
|
34 |
-
// todo
|
35 |
-
// gdpr('admin-modal')->add('gdpr-test', 'admin/modals/test', ['title' => 'Test modal']);
|
36 |
-
}
|
37 |
-
|
38 |
-
/**
|
39 |
-
* Render the main GDPR options page
|
40 |
-
*/
|
41 |
-
public function renderPage()
|
42 |
-
{
|
43 |
-
$tabs = $this->getNavigationData();
|
44 |
-
$currentTabContents = $this->getActiveTab()->renderContents();
|
45 |
-
$signature = apply_filters('gdpr/admin/show_signature', true);
|
46 |
-
echo gdpr('view')->render('admin/settings-page', compact('tabs', 'currentTabContents', 'signature'));
|
47 |
-
}
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Allow modules to add tabs
|
51 |
-
*/
|
52 |
-
public function registerTabs()
|
53 |
-
{
|
54 |
-
$this->tabs = apply_filters('gdpr/admin/tabs', []);
|
55 |
-
}
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Get the active tab or the first tab if none are active
|
59 |
-
*
|
60 |
-
* @return AdminTabInterface
|
61 |
-
*/
|
62 |
-
public function getActiveTab()
|
63 |
-
{
|
64 |
-
foreach ($this->tabs as $tab) {
|
65 |
-
if (isset($_GET['gdpr-tab']) && $_GET['gdpr-tab'] === $tab->getSlug()) {
|
66 |
-
return $tab;
|
67 |
-
}
|
68 |
-
}
|
69 |
-
|
70 |
-
return reset($this->tabs);
|
71 |
-
}
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Check if the given tab is active
|
75 |
-
*
|
76 |
-
* @param $slug
|
77 |
-
* @return bool
|
78 |
-
*/
|
79 |
-
public function isTabActive($slug)
|
80 |
-
{
|
81 |
-
$activeTab = $this->getActiveTab();
|
82 |
-
if ($activeTab->getSlug() === $slug) {
|
83 |
-
return true;
|
84 |
-
}
|
85 |
-
|
86 |
-
// Hacky: if no tab set, the first tab is active
|
87 |
-
if (!isset($_GET['gdpr-tab'])) {
|
88 |
-
$firstTab = reset($this->tabs);
|
89 |
-
if ($firstTab->getSlug() === $slug) {
|
90 |
-
return true;
|
91 |
-
}
|
92 |
-
}
|
93 |
-
|
94 |
-
return false;
|
95 |
-
}
|
96 |
-
|
97 |
-
/**
|
98 |
-
* Initialize the active tab
|
99 |
-
*/
|
100 |
-
public function initActiveTab()
|
101 |
-
{
|
102 |
-
$activeTab = $this->getActiveTab();
|
103 |
-
$activeTab->setup();
|
104 |
-
}
|
105 |
-
|
106 |
-
/**
|
107 |
-
* Get the tabbed navigation for GDPR options page
|
108 |
-
*
|
109 |
-
* @return array
|
110 |
-
*/
|
111 |
-
public function getNavigationData()
|
112 |
-
{
|
113 |
-
if (!count($this->tabs)) {
|
114 |
-
return [];
|
115 |
-
}
|
116 |
-
|
117 |
-
$navigation = [];
|
118 |
-
|
119 |
-
foreach ($this->tabs as $tab) {
|
120 |
-
/* @var $tab AdminTabInterface */
|
121 |
-
$navigation[$tab->getSlug()] = [
|
122 |
-
'slug' => $tab->getSlug(),
|
123 |
-
'url' => $this->getTabUrl($tab->getSlug()),
|
124 |
-
'title' => $tab->getTitle(),
|
125 |
-
'active' => false,
|
126 |
-
];
|
127 |
-
|
128 |
-
if ($this->isTabActive($tab->getSlug())) {
|
129 |
-
$navigation[$tab->getSlug()]['active'] = true;
|
130 |
-
}
|
131 |
-
}
|
132 |
-
|
133 |
-
return $navigation;
|
134 |
-
}
|
135 |
-
|
136 |
-
|
137 |
-
/**
|
138 |
-
* todo: move to helper?
|
139 |
-
*
|
140 |
-
* @param $slug
|
141 |
-
* @return string
|
142 |
-
*/
|
143 |
-
public function getTabUrl($slug)
|
144 |
-
{
|
145 |
-
return admin_url('tools.php?page=privacy&gdpr-tab=' . $slug);
|
146 |
-
}
|
147 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Admin;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Handle registering and rendering the GDPR admin page contents
|
7 |
+
*
|
8 |
+
* Class WordpressAdminPage
|
9 |
+
*
|
10 |
+
* @package Codelight\GDPR\Admin
|
11 |
+
*/
|
12 |
+
class WordpressAdminPage
|
13 |
+
{
|
14 |
+
protected $slug = 'gdpr';
|
15 |
+
|
16 |
+
protected $tabs = [];
|
17 |
+
|
18 |
+
public function __construct()
|
19 |
+
{
|
20 |
+
$this->setup();
|
21 |
+
}
|
22 |
+
|
23 |
+
protected function setup()
|
24 |
+
{
|
25 |
+
// Register the tabs
|
26 |
+
add_action('admin_init', [$this, 'registerTabs']);
|
27 |
+
|
28 |
+
// todo
|
29 |
+
//if (gdpr('options')->get('plugin_disclaimer_accepted')) {
|
30 |
+
// Initialize the active tab
|
31 |
+
add_action('admin_init', [$this, 'initActiveTab']);
|
32 |
+
//}
|
33 |
+
|
34 |
+
// todo
|
35 |
+
// gdpr('admin-modal')->add('gdpr-test', 'admin/modals/test', ['title' => 'Test modal']);
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Render the main GDPR options page
|
40 |
+
*/
|
41 |
+
public function renderPage()
|
42 |
+
{
|
43 |
+
$tabs = $this->getNavigationData();
|
44 |
+
$currentTabContents = $this->getActiveTab()->renderContents();
|
45 |
+
$signature = apply_filters('gdpr/admin/show_signature', true);
|
46 |
+
echo gdpr('view')->render('admin/settings-page', compact('tabs', 'currentTabContents', 'signature'));
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Allow modules to add tabs
|
51 |
+
*/
|
52 |
+
public function registerTabs()
|
53 |
+
{
|
54 |
+
$this->tabs = apply_filters('gdpr/admin/tabs', []);
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Get the active tab or the first tab if none are active
|
59 |
+
*
|
60 |
+
* @return AdminTabInterface
|
61 |
+
*/
|
62 |
+
public function getActiveTab()
|
63 |
+
{
|
64 |
+
foreach ($this->tabs as $tab) {
|
65 |
+
if (isset($_GET['gdpr-tab']) && $_GET['gdpr-tab'] === $tab->getSlug()) {
|
66 |
+
return $tab;
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
return reset($this->tabs);
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Check if the given tab is active
|
75 |
+
*
|
76 |
+
* @param $slug
|
77 |
+
* @return bool
|
78 |
+
*/
|
79 |
+
public function isTabActive($slug)
|
80 |
+
{
|
81 |
+
$activeTab = $this->getActiveTab();
|
82 |
+
if ($activeTab->getSlug() === $slug) {
|
83 |
+
return true;
|
84 |
+
}
|
85 |
+
|
86 |
+
// Hacky: if no tab set, the first tab is active
|
87 |
+
if (!isset($_GET['gdpr-tab'])) {
|
88 |
+
$firstTab = reset($this->tabs);
|
89 |
+
if ($firstTab->getSlug() === $slug) {
|
90 |
+
return true;
|
91 |
+
}
|
92 |
+
}
|
93 |
+
|
94 |
+
return false;
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Initialize the active tab
|
99 |
+
*/
|
100 |
+
public function initActiveTab()
|
101 |
+
{
|
102 |
+
$activeTab = $this->getActiveTab();
|
103 |
+
$activeTab->setup();
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Get the tabbed navigation for GDPR options page
|
108 |
+
*
|
109 |
+
* @return array
|
110 |
+
*/
|
111 |
+
public function getNavigationData()
|
112 |
+
{
|
113 |
+
if (!count($this->tabs)) {
|
114 |
+
return [];
|
115 |
+
}
|
116 |
+
|
117 |
+
$navigation = [];
|
118 |
+
|
119 |
+
foreach ($this->tabs as $tab) {
|
120 |
+
/* @var $tab AdminTabInterface */
|
121 |
+
$navigation[$tab->getSlug()] = [
|
122 |
+
'slug' => $tab->getSlug(),
|
123 |
+
'url' => $this->getTabUrl($tab->getSlug()),
|
124 |
+
'title' => $tab->getTitle(),
|
125 |
+
'active' => false,
|
126 |
+
];
|
127 |
+
|
128 |
+
if ($this->isTabActive($tab->getSlug())) {
|
129 |
+
$navigation[$tab->getSlug()]['active'] = true;
|
130 |
+
}
|
131 |
+
}
|
132 |
+
|
133 |
+
return $navigation;
|
134 |
+
}
|
135 |
+
|
136 |
+
|
137 |
+
/**
|
138 |
+
* todo: move to helper?
|
139 |
+
*
|
140 |
+
* @param $slug
|
141 |
+
* @return string
|
142 |
+
*/
|
143 |
+
public function getTabUrl($slug)
|
144 |
+
{
|
145 |
+
return admin_url('tools.php?page=privacy&gdpr-tab=' . $slug);
|
146 |
+
}
|
147 |
+
}
|
src/Components/Consent/AdminTabConsent.php
CHANGED
@@ -1,181 +1,181 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\Consent;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Admin\AdminTab;
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Handle rendering and saving the Consent tab on GDPR Options page
|
9 |
-
*
|
10 |
-
* Class AdminTabConsent
|
11 |
-
* @package Codelight\GDPR\Components\Consent
|
12 |
-
*/
|
13 |
-
class AdminTabConsent extends AdminTab
|
14 |
-
{
|
15 |
-
/* @var string */
|
16 |
-
protected $slug = 'consent';
|
17 |
-
|
18 |
-
/* @var ConsentManager */
|
19 |
-
protected $consentManager;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* AdminTabConsent constructor.
|
23 |
-
*
|
24 |
-
* @param ConsentManager $consentManager
|
25 |
-
*/
|
26 |
-
public function __construct(ConsentManager $consentManager)
|
27 |
-
{
|
28 |
-
$this->consentManager = $consentManager;
|
29 |
-
|
30 |
-
$this->title = _x('Consent', '(Admin)', 'gdpr-framework');
|
31 |
-
|
32 |
-
// If we don't register the settings, WP will not allow this page to be submitted
|
33 |
-
$this->registerSetting('consent_types');
|
34 |
-
$this->registerSetting('consent_info');
|
35 |
-
|
36 |
-
$this->renderErrors();
|
37 |
-
|
38 |
-
// Register handler for this action
|
39 |
-
add_action('gdpr/admin/action/update_consent_data', [$this, 'updateConsentData']);
|
40 |
-
}
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Initialize tab contents and register hooks
|
44 |
-
*/
|
45 |
-
public function init()
|
46 |
-
{
|
47 |
-
$this->registerSettingSection(
|
48 |
-
'gdpr_section_consent',
|
49 |
-
_x('Consent', '(Admin)', 'gdpr-framework'),
|
50 |
-
[$this, 'renderConsentForm']
|
51 |
-
);
|
52 |
-
}
|
53 |
-
|
54 |
-
/**
|
55 |
-
* Render the contents of the registered section
|
56 |
-
*/
|
57 |
-
public function renderConsentForm()
|
58 |
-
{
|
59 |
-
$consentInfo = gdpr('options')->get('consent_info');
|
60 |
-
|
61 |
-
if (is_null($consentInfo)) {
|
62 |
-
$consentInfo = $this->getDefaultConsentInfo();
|
63 |
-
} elseif (!$consentInfo) {
|
64 |
-
$consentInfo = '';
|
65 |
-
}
|
66 |
-
|
67 |
-
$nonce = wp_create_nonce("gdpr/admin/action/update_consent_data");
|
68 |
-
$defaultConsentTypes = $this->consentManager->getDefaultConsentTypes();
|
69 |
-
$customConsentTypes = $this->consentManager->getCustomConsentTypes();
|
70 |
-
|
71 |
-
// todo: move to a filter
|
72 |
-
if (defined('ICL_LANGUAGE_CODE')) {
|
73 |
-
$prefix = ICL_LANGUAGE_CODE . '_';
|
74 |
-
} else {
|
75 |
-
$prefix = '';
|
76 |
-
}
|
77 |
-
|
78 |
-
echo gdpr('view')->render('admin/consent', compact('nonce', 'customConsentTypes', 'defaultConsentTypes', 'consentInfo', 'prefix'));
|
79 |
-
}
|
80 |
-
|
81 |
-
/**
|
82 |
-
* Save the submitted consent types
|
83 |
-
*/
|
84 |
-
public function updateConsentData()
|
85 |
-
{
|
86 |
-
// Update additional information
|
87 |
-
if (isset($_POST['gdpr_consent_info'])) {
|
88 |
-
gdpr('options')->set('consent_info', wp_unslash($_POST['gdpr_consent_info']));
|
89 |
-
}
|
90 |
-
|
91 |
-
// Update consent types
|
92 |
-
if (isset($_POST['gdpr_consent_types']) && is_array($_POST['gdpr_consent_types'])) {
|
93 |
-
$consentTypes = $_POST['gdpr_consent_types'];
|
94 |
-
} else {
|
95 |
-
$consentTypes = [];
|
96 |
-
}
|
97 |
-
|
98 |
-
// Strip slashes which WP adds automatically
|
99 |
-
if (count($consentTypes)) {
|
100 |
-
foreach ($consentTypes as &$type) {
|
101 |
-
foreach ($type as $key => $item) {
|
102 |
-
if (is_array($item)) {
|
103 |
-
$type[$key] = array_map('wp_unslash', $item);
|
104 |
-
} else {
|
105 |
-
$type[$key] = wp_unslash($item);
|
106 |
-
}
|
107 |
-
|
108 |
-
if ('visible' === $key) {
|
109 |
-
$type[$key] = 1;
|
110 |
-
}
|
111 |
-
}
|
112 |
-
}
|
113 |
-
}
|
114 |
-
|
115 |
-
$errors = [];
|
116 |
-
|
117 |
-
if (!empty($consentTypes)) {
|
118 |
-
$errors = $this->validate($consentTypes);
|
119 |
-
}
|
120 |
-
|
121 |
-
if (!count($errors)) {
|
122 |
-
$this->consentManager->saveCustomConsentTypes($consentTypes);
|
123 |
-
} else {
|
124 |
-
$errorQuery = http_build_query($errors);
|
125 |
-
wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=consent&') . $errorQuery);
|
126 |
-
exit;
|
127 |
-
}
|
128 |
-
}
|
129 |
-
|
130 |
-
protected function validate($consentTypes)
|
131 |
-
{
|
132 |
-
$errors = [];
|
133 |
-
|
134 |
-
foreach ($consentTypes as $consentType) {
|
135 |
-
if (empty($consentType['slug'])) {
|
136 |
-
$errors['errors[]'] = 'slug-empty';
|
137 |
-
}
|
138 |
-
|
139 |
-
if (!preg_match('/^[A-Za-z0-9_-]+$/', $consentType['slug'])) {
|
140 |
-
$errors['errors[]'] = 'slug-invalid';
|
141 |
-
}
|
142 |
-
|
143 |
-
if (empty($consentType['title'])) {
|
144 |
-
$errors['errors[]'] = 'title-empty';
|
145 |
-
}
|
146 |
-
}
|
147 |
-
|
148 |
-
return $errors;
|
149 |
-
}
|
150 |
-
|
151 |
-
public function renderErrors()
|
152 |
-
{
|
153 |
-
if (isset($_GET['errors']) && count($_GET['errors'])) {
|
154 |
-
|
155 |
-
foreach ($_GET['errors'] as $error) {
|
156 |
-
if ('slug-empty' === $error) {
|
157 |
-
$message = _x("Consent slug is a required field!", '(Admin)', 'gdpr-framework');
|
158 |
-
gdpr('admin-error')->add('admin/notices/error', compact('message'));
|
159 |
-
}
|
160 |
-
|
161 |
-
if ('slug-invalid' === $error) {
|
162 |
-
$message = _x("You may only use alphanumeric characters, dash and underscore in the consent slug field.", '(Admin)', 'gdpr-framework');
|
163 |
-
gdpr('admin-error')->add('admin/notices/error', compact('message'));
|
164 |
-
}
|
165 |
-
|
166 |
-
if ('title-empty' === $error) {
|
167 |
-
$message = _x("Consent title is a required field!", '(Admin)', 'gdpr-framework');
|
168 |
-
gdpr('admin-error')->add('admin/notices/error', compact('message'));
|
169 |
-
}
|
170 |
-
}
|
171 |
-
}
|
172 |
-
}
|
173 |
-
|
174 |
-
/**
|
175 |
-
* @return string
|
176 |
-
*/
|
177 |
-
public function getDefaultConsentInfo()
|
178 |
-
{
|
179 |
-
return __('To use this website, you accepted our Privacy Policy. If you wish to withdraw your acceptance, please use the "Delete my data" button below.', 'gdpr-framework');
|
180 |
-
}
|
181 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\Consent;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Admin\AdminTab;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Handle rendering and saving the Consent tab on GDPR Options page
|
9 |
+
*
|
10 |
+
* Class AdminTabConsent
|
11 |
+
* @package Codelight\GDPR\Components\Consent
|
12 |
+
*/
|
13 |
+
class AdminTabConsent extends AdminTab
|
14 |
+
{
|
15 |
+
/* @var string */
|
16 |
+
protected $slug = 'consent';
|
17 |
+
|
18 |
+
/* @var ConsentManager */
|
19 |
+
protected $consentManager;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* AdminTabConsent constructor.
|
23 |
+
*
|
24 |
+
* @param ConsentManager $consentManager
|
25 |
+
*/
|
26 |
+
public function __construct(ConsentManager $consentManager)
|
27 |
+
{
|
28 |
+
$this->consentManager = $consentManager;
|
29 |
+
|
30 |
+
$this->title = _x('Consent', '(Admin)', 'gdpr-framework');
|
31 |
+
|
32 |
+
// If we don't register the settings, WP will not allow this page to be submitted
|
33 |
+
$this->registerSetting('consent_types');
|
34 |
+
$this->registerSetting('consent_info');
|
35 |
+
|
36 |
+
$this->renderErrors();
|
37 |
+
|
38 |
+
// Register handler for this action
|
39 |
+
add_action('gdpr/admin/action/update_consent_data', [$this, 'updateConsentData']);
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Initialize tab contents and register hooks
|
44 |
+
*/
|
45 |
+
public function init()
|
46 |
+
{
|
47 |
+
$this->registerSettingSection(
|
48 |
+
'gdpr_section_consent',
|
49 |
+
_x('Consent', '(Admin)', 'gdpr-framework'),
|
50 |
+
[$this, 'renderConsentForm']
|
51 |
+
);
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Render the contents of the registered section
|
56 |
+
*/
|
57 |
+
public function renderConsentForm()
|
58 |
+
{
|
59 |
+
$consentInfo = gdpr('options')->get('consent_info');
|
60 |
+
|
61 |
+
if (is_null($consentInfo)) {
|
62 |
+
$consentInfo = $this->getDefaultConsentInfo();
|
63 |
+
} elseif (!$consentInfo) {
|
64 |
+
$consentInfo = '';
|
65 |
+
}
|
66 |
+
|
67 |
+
$nonce = wp_create_nonce("gdpr/admin/action/update_consent_data");
|
68 |
+
$defaultConsentTypes = $this->consentManager->getDefaultConsentTypes();
|
69 |
+
$customConsentTypes = $this->consentManager->getCustomConsentTypes();
|
70 |
+
|
71 |
+
// todo: move to a filter
|
72 |
+
if (defined('ICL_LANGUAGE_CODE')) {
|
73 |
+
$prefix = ICL_LANGUAGE_CODE . '_';
|
74 |
+
} else {
|
75 |
+
$prefix = '';
|
76 |
+
}
|
77 |
+
|
78 |
+
echo gdpr('view')->render('admin/consent', compact('nonce', 'customConsentTypes', 'defaultConsentTypes', 'consentInfo', 'prefix'));
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Save the submitted consent types
|
83 |
+
*/
|
84 |
+
public function updateConsentData()
|
85 |
+
{
|
86 |
+
// Update additional information
|
87 |
+
if (isset($_POST['gdpr_consent_info'])) {
|
88 |
+
gdpr('options')->set('consent_info', wp_unslash($_POST['gdpr_consent_info']));
|
89 |
+
}
|
90 |
+
|
91 |
+
// Update consent types
|
92 |
+
if (isset($_POST['gdpr_consent_types']) && is_array($_POST['gdpr_consent_types'])) {
|
93 |
+
$consentTypes = $_POST['gdpr_consent_types'];
|
94 |
+
} else {
|
95 |
+
$consentTypes = [];
|
96 |
+
}
|
97 |
+
|
98 |
+
// Strip slashes which WP adds automatically
|
99 |
+
if (count($consentTypes)) {
|
100 |
+
foreach ($consentTypes as &$type) {
|
101 |
+
foreach ($type as $key => $item) {
|
102 |
+
if (is_array($item)) {
|
103 |
+
$type[$key] = array_map('wp_unslash', $item);
|
104 |
+
} else {
|
105 |
+
$type[$key] = wp_unslash($item);
|
106 |
+
}
|
107 |
+
|
108 |
+
if ('visible' === $key) {
|
109 |
+
$type[$key] = 1;
|
110 |
+
}
|
111 |
+
}
|
112 |
+
}
|
113 |
+
}
|
114 |
+
|
115 |
+
$errors = [];
|
116 |
+
|
117 |
+
if (!empty($consentTypes)) {
|
118 |
+
$errors = $this->validate($consentTypes);
|
119 |
+
}
|
120 |
+
|
121 |
+
if (!count($errors)) {
|
122 |
+
$this->consentManager->saveCustomConsentTypes($consentTypes);
|
123 |
+
} else {
|
124 |
+
$errorQuery = http_build_query($errors);
|
125 |
+
wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=consent&') . $errorQuery);
|
126 |
+
exit;
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
protected function validate($consentTypes)
|
131 |
+
{
|
132 |
+
$errors = [];
|
133 |
+
|
134 |
+
foreach ($consentTypes as $consentType) {
|
135 |
+
if (empty($consentType['slug'])) {
|
136 |
+
$errors['errors[]'] = 'slug-empty';
|
137 |
+
}
|
138 |
+
|
139 |
+
if (!preg_match('/^[A-Za-z0-9_-]+$/', $consentType['slug'])) {
|
140 |
+
$errors['errors[]'] = 'slug-invalid';
|
141 |
+
}
|
142 |
+
|
143 |
+
if (empty($consentType['title'])) {
|
144 |
+
$errors['errors[]'] = 'title-empty';
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
return $errors;
|
149 |
+
}
|
150 |
+
|
151 |
+
public function renderErrors()
|
152 |
+
{
|
153 |
+
if (isset($_GET['errors']) && count($_GET['errors'])) {
|
154 |
+
|
155 |
+
foreach ($_GET['errors'] as $error) {
|
156 |
+
if ('slug-empty' === $error) {
|
157 |
+
$message = _x("Consent slug is a required field!", '(Admin)', 'gdpr-framework');
|
158 |
+
gdpr('admin-error')->add('admin/notices/error', compact('message'));
|
159 |
+
}
|
160 |
+
|
161 |
+
if ('slug-invalid' === $error) {
|
162 |
+
$message = _x("You may only use alphanumeric characters, dash and underscore in the consent slug field.", '(Admin)', 'gdpr-framework');
|
163 |
+
gdpr('admin-error')->add('admin/notices/error', compact('message'));
|
164 |
+
}
|
165 |
+
|
166 |
+
if ('title-empty' === $error) {
|
167 |
+
$message = _x("Consent title is a required field!", '(Admin)', 'gdpr-framework');
|
168 |
+
gdpr('admin-error')->add('admin/notices/error', compact('message'));
|
169 |
+
}
|
170 |
+
}
|
171 |
+
}
|
172 |
+
}
|
173 |
+
|
174 |
+
/**
|
175 |
+
* @return string
|
176 |
+
*/
|
177 |
+
public function getDefaultConsentInfo()
|
178 |
+
{
|
179 |
+
return __('To use this website, you accepted our Privacy Policy. If you wish to withdraw your acceptance, please use the "Delete my data" button below.', 'gdpr-framework');
|
180 |
+
}
|
181 |
+
}
|
src/Components/Consent/ConsentManager.php
CHANGED
@@ -1,317 +1,317 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\Consent;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Handles getting, saving and removing consent based on a whitelist
|
7 |
-
*
|
8 |
-
* Class ConsentManager
|
9 |
-
*
|
10 |
-
* @package Codelight\GDPR\Components\Consent
|
11 |
-
*/
|
12 |
-
class ConsentManager
|
13 |
-
{
|
14 |
-
/* @var UserConsentModel */
|
15 |
-
protected $model;
|
16 |
-
|
17 |
-
/* @var array */
|
18 |
-
protected $defaultConsentTypes = [];
|
19 |
-
|
20 |
-
/* @var array */
|
21 |
-
protected $customConsentTypes = [];
|
22 |
-
|
23 |
-
/**
|
24 |
-
* ConsentManager constructor.
|
25 |
-
*
|
26 |
-
* @param UserConsentModel $model
|
27 |
-
*/
|
28 |
-
public function __construct(UserConsentModel $model)
|
29 |
-
{
|
30 |
-
$this->model = $model;
|
31 |
-
|
32 |
-
add_action('init', [$this, 'registerCustomConsentTypes'], 0);
|
33 |
-
add_action('init', [$this, 'registerDefaultConsentTypes'], 0);
|
34 |
-
|
35 |
-
add_action('gdpr/data-subject/delete', [$this, 'delete']);
|
36 |
-
add_action('gdpr/data-subject/anonymize', [$this, 'anonymize'], 10, 2);
|
37 |
-
}
|
38 |
-
|
39 |
-
public function registerDefaultConsentTypes()
|
40 |
-
{
|
41 |
-
$policyPageUrl = get_permalink(gdpr('options')->get('policy_page'));
|
42 |
-
|
43 |
-
gdpr('consent')->register(
|
44 |
-
'privacy-policy',
|
45 |
-
sprintf(
|
46 |
-
__('I accept the %sPrivacy Policy%s', 'gdpr-framework'),
|
47 |
-
"<a href='{$policyPageUrl}' target='_blank'>",
|
48 |
-
"</a>"
|
49 |
-
),
|
50 |
-
_x('This consent is not visible by default. If someone wishes to withdraw it, they should simply request to delete all their data.', '(Admin)', 'gdpr-framework'),
|
51 |
-
false
|
52 |
-
);
|
53 |
-
|
54 |
-
$termsPage = gdpr('options')->get('terms_page');
|
55 |
-
if ($termsPage) {
|
56 |
-
$termsPageUrl = get_permalink($termsPage);
|
57 |
-
} else {
|
58 |
-
$termsPageUrl = false;
|
59 |
-
}
|
60 |
-
|
61 |
-
if ($termsPageUrl) {
|
62 |
-
gdpr('consent')->register(
|
63 |
-
'terms-conditions',
|
64 |
-
sprintf(
|
65 |
-
__('I accept the %sTerms & Conditions%s', 'gdpr-framework'),
|
66 |
-
"<a href='{$termsPageUrl}' target='_blank'>",
|
67 |
-
"</a>"
|
68 |
-
),
|
69 |
-
_x('This consent is not visible by default. If someone wishes to withdraw it, they should simply request to delete all their data.', '(Admin)', 'gdpr-framework'),
|
70 |
-
false
|
71 |
-
);
|
72 |
-
}
|
73 |
-
}
|
74 |
-
|
75 |
-
/**
|
76 |
-
* Get a list of all registered consent types
|
77 |
-
*
|
78 |
-
* @return array
|
79 |
-
*/
|
80 |
-
public function getConsentTypes()
|
81 |
-
{
|
82 |
-
return apply_filters('gdpr/consent/types', $this->getDefaultConsentTypes() + $this->getCustomConsentTypes());
|
83 |
-
}
|
84 |
-
|
85 |
-
/**
|
86 |
-
* Get all consent types registered by external sources, i.e. not stored in the database
|
87 |
-
*
|
88 |
-
* @return array
|
89 |
-
*/
|
90 |
-
public function getDefaultConsentTypes()
|
91 |
-
{
|
92 |
-
return apply_filters('gdpr/consent/types/default', $this->defaultConsentTypes);
|
93 |
-
}
|
94 |
-
|
95 |
-
/**
|
96 |
-
* Get all consent types registered by the admin, i.e. stored in the database
|
97 |
-
*
|
98 |
-
* @return array
|
99 |
-
*/
|
100 |
-
public function getCustomConsentTypes()
|
101 |
-
{
|
102 |
-
return apply_filters('gdpr/consent/types/custom', $this->customConsentTypes);
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Register a *default* consent in the list of valid consents
|
107 |
-
*
|
108 |
-
* @param $consent
|
109 |
-
*/
|
110 |
-
public function register($slug, $title, $description, $visible = true)
|
111 |
-
{
|
112 |
-
$this->defaultConsentTypes[$slug] = [
|
113 |
-
'slug' => $slug,
|
114 |
-
'title' => $title,
|
115 |
-
'description' => $description,
|
116 |
-
'visible' => $visible,
|
117 |
-
];
|
118 |
-
}
|
119 |
-
|
120 |
-
/**
|
121 |
-
* Register consent types saved via WP admin
|
122 |
-
*/
|
123 |
-
public function registerCustomConsentTypes()
|
124 |
-
{
|
125 |
-
$savedConsentTypes = gdpr('options')->get('consent_types');
|
126 |
-
|
127 |
-
if (is_array($savedConsentTypes) && count($savedConsentTypes)) {
|
128 |
-
foreach ($savedConsentTypes as $consentType) {
|
129 |
-
$this->customConsentTypes[$consentType['slug']] = [
|
130 |
-
'slug' => isset($consentType['slug']) ? $consentType['slug'] : '',
|
131 |
-
'title' => isset($consentType['title']) ? $consentType['title'] : '',
|
132 |
-
'description' => isset($consentType['description']) ? $consentType['description'] : '',
|
133 |
-
'visible' => isset($consentType['visible']) ? $consentType['visible'] : '',
|
134 |
-
];
|
135 |
-
}
|
136 |
-
}
|
137 |
-
}
|
138 |
-
|
139 |
-
/**
|
140 |
-
* Save the given consent types to database
|
141 |
-
*
|
142 |
-
* @param $consentTypes
|
143 |
-
*/
|
144 |
-
public function saveCustomConsentTypes($consentTypes)
|
145 |
-
{
|
146 |
-
// Todo: validate to make sure something broken is not saved to DB
|
147 |
-
gdpr('options')->set('consent_types', $consentTypes);
|
148 |
-
}
|
149 |
-
|
150 |
-
/**
|
151 |
-
* Check if a consent is valid so that we don't write random stuff in the database by accident
|
152 |
-
*
|
153 |
-
* @param $consent
|
154 |
-
* @return bool
|
155 |
-
*/
|
156 |
-
public function isRegisteredConsent($consent)
|
157 |
-
{
|
158 |
-
return isset($this->getConsentTypes()[$consent]);
|
159 |
-
}
|
160 |
-
|
161 |
-
/**
|
162 |
-
* Check if the given consent is valid. If not, throw error.
|
163 |
-
*
|
164 |
-
* @param $consent
|
165 |
-
*/
|
166 |
-
protected function validateConsent($consent)
|
167 |
-
{
|
168 |
-
if (!$this->isRegisteredConsent($consent)) {
|
169 |
-
wp_die("Not a valid consent: " . esc_html($consent));
|
170 |
-
}
|
171 |
-
}
|
172 |
-
|
173 |
-
/**
|
174 |
-
* Set a consent as 'given' for the data subject
|
175 |
-
*
|
176 |
-
* @param $email
|
177 |
-
* @param $consent
|
178 |
-
*/
|
179 |
-
public function giveConsent($email, $consent)
|
180 |
-
{
|
181 |
-
$this->validateConsent($consent);
|
182 |
-
|
183 |
-
$validation = apply_filters('gdpr/consent/give', true, $email, $consent);
|
184 |
-
|
185 |
-
// If the data subject has already given this consent, do nothing
|
186 |
-
if ($this->model->given($email, $consent) || !$validation) {
|
187 |
-
return;
|
188 |
-
}
|
189 |
-
|
190 |
-
$this->model->give($email, $consent);
|
191 |
-
do_action('gdpr/consent/given', $email, $consent);
|
192 |
-
}
|
193 |
-
|
194 |
-
/**
|
195 |
-
* Set a consent as withdrawn for the data subject
|
196 |
-
*
|
197 |
-
* @param $email
|
198 |
-
* @param $consent
|
199 |
-
*/
|
200 |
-
public function withdrawConsent($email, $consent)
|
201 |
-
{
|
202 |
-
$this->validateConsent($consent);
|
203 |
-
|
204 |
-
$validation = apply_filters('gdpr/consent/withdraw', true, $email, $consent);
|
205 |
-
|
206 |
-
// If the consent has never been given or if data subject has already withdrawn this consent, do nothing
|
207 |
-
if (!$this->model->exists($email, $consent) || $this->model->withdrawn($email, $consent) || !$validation) {
|
208 |
-
return;
|
209 |
-
}
|
210 |
-
|
211 |
-
$this->model->withdraw($email, $consent);
|
212 |
-
do_action('gdpr/consent/withdrawn', $email, $consent, 'withdrawn');
|
213 |
-
}
|
214 |
-
|
215 |
-
/**
|
216 |
-
* Remove consent given by subject
|
217 |
-
*
|
218 |
-
* @param $email
|
219 |
-
* @param $consent
|
220 |
-
*/
|
221 |
-
public function deleteConsent($email, $consent)
|
222 |
-
{
|
223 |
-
$this->validateConsent($consent);
|
224 |
-
|
225 |
-
if ($this->model->given($email, $consent)) {
|
226 |
-
do_action('gdpr/consent/withdrawn', $email, $consent, 'deleted');
|
227 |
-
}
|
228 |
-
|
229 |
-
$this->model->delete($email, $consent);
|
230 |
-
}
|
231 |
-
|
232 |
-
/**
|
233 |
-
* Withdraw and anonymize a consent
|
234 |
-
*
|
235 |
-
* @param $email
|
236 |
-
* @param $consent
|
237 |
-
* @param $anonymizedId
|
238 |
-
*/
|
239 |
-
public function anonymizeConsent($email, $consent, $anonymizedId)
|
240 |
-
{
|
241 |
-
$this->validateConsent($consent);
|
242 |
-
|
243 |
-
if ($this->model->given($email, $consent)) {
|
244 |
-
do_action('gdpr/consent/withdrawn', $email, $consent, 'anonymized');
|
245 |
-
}
|
246 |
-
|
247 |
-
$this->model->anonymize($email, $consent, $anonymizedId);
|
248 |
-
}
|
249 |
-
|
250 |
-
/**
|
251 |
-
* Get all consent given by subject
|
252 |
-
*
|
253 |
-
* @param $email
|
254 |
-
*/
|
255 |
-
public function getAllConsents($email)
|
256 |
-
{
|
257 |
-
return $this->model->getAll($email);
|
258 |
-
}
|
259 |
-
|
260 |
-
/**
|
261 |
-
* Get the registered consent types and add 'given' field depending
|
262 |
-
* on whether or not the user has given this particular consent
|
263 |
-
*
|
264 |
-
* @param $dataSubjectConsents
|
265 |
-
* @return array
|
266 |
-
*/
|
267 |
-
public function getConsentData($dataSubjectConsents)
|
268 |
-
{
|
269 |
-
$consentTypes = $this->getConsentTypes();
|
270 |
-
$consents = [];
|
271 |
-
|
272 |
-
foreach ($consentTypes as $slug => $consentType) {
|
273 |
-
if (in_array($slug, $dataSubjectConsents)) {
|
274 |
-
$consents[$slug] = $consentType;
|
275 |
-
}
|
276 |
-
}
|
277 |
-
|
278 |
-
return $consents;
|
279 |
-
}
|
280 |
-
|
281 |
-
/**
|
282 |
-
* Return a list of all data subjects who have given a particular consent
|
283 |
-
*
|
284 |
-
* @param $consent
|
285 |
-
*/
|
286 |
-
public function getAllDataSubjectsByConsent($consent)
|
287 |
-
{
|
288 |
-
// Todo
|
289 |
-
}
|
290 |
-
|
291 |
-
/**
|
292 |
-
* Withdraw and delete all consents given by a data subject
|
293 |
-
*
|
294 |
-
* @param $email
|
295 |
-
*/
|
296 |
-
public function delete($email)
|
297 |
-
{
|
298 |
-
$consents = $this->getAllConsents($email);
|
299 |
-
foreach ($consents as $consent) {
|
300 |
-
$this->deleteConsent($email, $consent);
|
301 |
-
}
|
302 |
-
}
|
303 |
-
|
304 |
-
/**
|
305 |
-
* Withdraw and anonymize all consents given by a data subject
|
306 |
-
*
|
307 |
-
* @param $email
|
308 |
-
* @param $anonymizedId
|
309 |
-
*/
|
310 |
-
public function anonymize($email, $anonymizedId)
|
311 |
-
{
|
312 |
-
$consents = $this->getAllConsents($email);
|
313 |
-
foreach ($consents as $consent) {
|
314 |
-
$this->anonymizeConsent($email, $consent, $anonymizedId);
|
315 |
-
}
|
316 |
-
}
|
317 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\Consent;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Handles getting, saving and removing consent based on a whitelist
|
7 |
+
*
|
8 |
+
* Class ConsentManager
|
9 |
+
*
|
10 |
+
* @package Codelight\GDPR\Components\Consent
|
11 |
+
*/
|
12 |
+
class ConsentManager
|
13 |
+
{
|
14 |
+
/* @var UserConsentModel */
|
15 |
+
protected $model;
|
16 |
+
|
17 |
+
/* @var array */
|
18 |
+
protected $defaultConsentTypes = [];
|
19 |
+
|
20 |
+
/* @var array */
|
21 |
+
protected $customConsentTypes = [];
|
22 |
+
|
23 |
+
/**
|
24 |
+
* ConsentManager constructor.
|
25 |
+
*
|
26 |
+
* @param UserConsentModel $model
|
27 |
+
*/
|
28 |
+
public function __construct(UserConsentModel $model)
|
29 |
+
{
|
30 |
+
$this->model = $model;
|
31 |
+
|
32 |
+
add_action('init', [$this, 'registerCustomConsentTypes'], 0);
|
33 |
+
add_action('init', [$this, 'registerDefaultConsentTypes'], 0);
|
34 |
+
|
35 |
+
add_action('gdpr/data-subject/delete', [$this, 'delete']);
|
36 |
+
add_action('gdpr/data-subject/anonymize', [$this, 'anonymize'], 10, 2);
|
37 |
+
}
|
38 |
+
|
39 |
+
public function registerDefaultConsentTypes()
|
40 |
+
{
|
41 |
+
$policyPageUrl = get_permalink(gdpr('options')->get('policy_page'));
|
42 |
+
|
43 |
+
gdpr('consent')->register(
|
44 |
+
'privacy-policy',
|
45 |
+
sprintf(
|
46 |
+
__('I accept the %sPrivacy Policy%s', 'gdpr-framework'),
|
47 |
+
"<a href='{$policyPageUrl}' target='_blank'>",
|
48 |
+
"</a>"
|
49 |
+
),
|
50 |
+
_x('This consent is not visible by default. If someone wishes to withdraw it, they should simply request to delete all their data.', '(Admin)', 'gdpr-framework'),
|
51 |
+
false
|
52 |
+
);
|
53 |
+
|
54 |
+
$termsPage = gdpr('options')->get('terms_page');
|
55 |
+
if ($termsPage) {
|
56 |
+
$termsPageUrl = get_permalink($termsPage);
|
57 |
+
} else {
|
58 |
+
$termsPageUrl = false;
|
59 |
+
}
|
60 |
+
|
61 |
+
if ($termsPageUrl) {
|
62 |
+
gdpr('consent')->register(
|
63 |
+
'terms-conditions',
|
64 |
+
sprintf(
|
65 |
+
__('I accept the %sTerms & Conditions%s', 'gdpr-framework'),
|
66 |
+
"<a href='{$termsPageUrl}' target='_blank'>",
|
67 |
+
"</a>"
|
68 |
+
),
|
69 |
+
_x('This consent is not visible by default. If someone wishes to withdraw it, they should simply request to delete all their data.', '(Admin)', 'gdpr-framework'),
|
70 |
+
false
|
71 |
+
);
|
72 |
+
}
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Get a list of all registered consent types
|
77 |
+
*
|
78 |
+
* @return array
|
79 |
+
*/
|
80 |
+
public function getConsentTypes()
|
81 |
+
{
|
82 |
+
return apply_filters('gdpr/consent/types', $this->getDefaultConsentTypes() + $this->getCustomConsentTypes());
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Get all consent types registered by external sources, i.e. not stored in the database
|
87 |
+
*
|
88 |
+
* @return array
|
89 |
+
*/
|
90 |
+
public function getDefaultConsentTypes()
|
91 |
+
{
|
92 |
+
return apply_filters('gdpr/consent/types/default', $this->defaultConsentTypes);
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Get all consent types registered by the admin, i.e. stored in the database
|
97 |
+
*
|
98 |
+
* @return array
|
99 |
+
*/
|
100 |
+
public function getCustomConsentTypes()
|
101 |
+
{
|
102 |
+
return apply_filters('gdpr/consent/types/custom', $this->customConsentTypes);
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Register a *default* consent in the list of valid consents
|
107 |
+
*
|
108 |
+
* @param $consent
|
109 |
+
*/
|
110 |
+
public function register($slug, $title, $description, $visible = true)
|
111 |
+
{
|
112 |
+
$this->defaultConsentTypes[$slug] = [
|
113 |
+
'slug' => $slug,
|
114 |
+
'title' => $title,
|
115 |
+
'description' => $description,
|
116 |
+
'visible' => $visible,
|
117 |
+
];
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Register consent types saved via WP admin
|
122 |
+
*/
|
123 |
+
public function registerCustomConsentTypes()
|
124 |
+
{
|
125 |
+
$savedConsentTypes = gdpr('options')->get('consent_types');
|
126 |
+
|
127 |
+
if (is_array($savedConsentTypes) && count($savedConsentTypes)) {
|
128 |
+
foreach ($savedConsentTypes as $consentType) {
|
129 |
+
$this->customConsentTypes[$consentType['slug']] = [
|
130 |
+
'slug' => isset($consentType['slug']) ? $consentType['slug'] : '',
|
131 |
+
'title' => isset($consentType['title']) ? $consentType['title'] : '',
|
132 |
+
'description' => isset($consentType['description']) ? $consentType['description'] : '',
|
133 |
+
'visible' => isset($consentType['visible']) ? $consentType['visible'] : '',
|
134 |
+
];
|
135 |
+
}
|
136 |
+
}
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* Save the given consent types to database
|
141 |
+
*
|
142 |
+
* @param $consentTypes
|
143 |
+
*/
|
144 |
+
public function saveCustomConsentTypes($consentTypes)
|
145 |
+
{
|
146 |
+
// Todo: validate to make sure something broken is not saved to DB
|
147 |
+
gdpr('options')->set('consent_types', $consentTypes);
|
148 |
+
}
|
149 |
+
|
150 |
+
/**
|
151 |
+
* Check if a consent is valid so that we don't write random stuff in the database by accident
|
152 |
+
*
|
153 |
+
* @param $consent
|
154 |
+
* @return bool
|
155 |
+
*/
|
156 |
+
public function isRegisteredConsent($consent)
|
157 |
+
{
|
158 |
+
return isset($this->getConsentTypes()[$consent]);
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Check if the given consent is valid. If not, throw error.
|
163 |
+
*
|
164 |
+
* @param $consent
|
165 |
+
*/
|
166 |
+
protected function validateConsent($consent)
|
167 |
+
{
|
168 |
+
if (!$this->isRegisteredConsent($consent)) {
|
169 |
+
wp_die("Not a valid consent: " . esc_html($consent));
|
170 |
+
}
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Set a consent as 'given' for the data subject
|
175 |
+
*
|
176 |
+
* @param $email
|
177 |
+
* @param $consent
|
178 |
+
*/
|
179 |
+
public function giveConsent($email, $consent)
|
180 |
+
{
|
181 |
+
$this->validateConsent($consent);
|
182 |
+
|
183 |
+
$validation = apply_filters('gdpr/consent/give', true, $email, $consent);
|
184 |
+
|
185 |
+
// If the data subject has already given this consent, do nothing
|
186 |
+
if ($this->model->given($email, $consent) || !$validation) {
|
187 |
+
return;
|
188 |
+
}
|
189 |
+
|
190 |
+
$this->model->give($email, $consent);
|
191 |
+
do_action('gdpr/consent/given', $email, $consent);
|
192 |
+
}
|
193 |
+
|
194 |
+
/**
|
195 |
+
* Set a consent as withdrawn for the data subject
|
196 |
+
*
|
197 |
+
* @param $email
|
198 |
+
* @param $consent
|
199 |
+
*/
|
200 |
+
public function withdrawConsent($email, $consent)
|
201 |
+
{
|
202 |
+
$this->validateConsent($consent);
|
203 |
+
|
204 |
+
$validation = apply_filters('gdpr/consent/withdraw', true, $email, $consent);
|
205 |
+
|
206 |
+
// If the consent has never been given or if data subject has already withdrawn this consent, do nothing
|
207 |
+
if (!$this->model->exists($email, $consent) || $this->model->withdrawn($email, $consent) || !$validation) {
|
208 |
+
return;
|
209 |
+
}
|
210 |
+
|
211 |
+
$this->model->withdraw($email, $consent);
|
212 |
+
do_action('gdpr/consent/withdrawn', $email, $consent, 'withdrawn');
|
213 |
+
}
|
214 |
+
|
215 |
+
/**
|
216 |
+
* Remove consent given by subject
|
217 |
+
*
|
218 |
+
* @param $email
|
219 |
+
* @param $consent
|
220 |
+
*/
|
221 |
+
public function deleteConsent($email, $consent)
|
222 |
+
{
|
223 |
+
$this->validateConsent($consent);
|
224 |
+
|
225 |
+
if ($this->model->given($email, $consent)) {
|
226 |
+
do_action('gdpr/consent/withdrawn', $email, $consent, 'deleted');
|
227 |
+
}
|
228 |
+
|
229 |
+
$this->model->delete($email, $consent);
|
230 |
+
}
|
231 |
+
|
232 |
+
/**
|
233 |
+
* Withdraw and anonymize a consent
|
234 |
+
*
|
235 |
+
* @param $email
|
236 |
+
* @param $consent
|
237 |
+
* @param $anonymizedId
|
238 |
+
*/
|
239 |
+
public function anonymizeConsent($email, $consent, $anonymizedId)
|
240 |
+
{
|
241 |
+
$this->validateConsent($consent);
|
242 |
+
|
243 |
+
if ($this->model->given($email, $consent)) {
|
244 |
+
do_action('gdpr/consent/withdrawn', $email, $consent, 'anonymized');
|
245 |
+
}
|
246 |
+
|
247 |
+
$this->model->anonymize($email, $consent, $anonymizedId);
|
248 |
+
}
|
249 |
+
|
250 |
+
/**
|
251 |
+
* Get all consent given by subject
|
252 |
+
*
|
253 |
+
* @param $email
|
254 |
+
*/
|
255 |
+
public function getAllConsents($email)
|
256 |
+
{
|
257 |
+
return $this->model->getAll($email);
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
* Get the registered consent types and add 'given' field depending
|
262 |
+
* on whether or not the user has given this particular consent
|
263 |
+
*
|
264 |
+
* @param $dataSubjectConsents
|
265 |
+
* @return array
|
266 |
+
*/
|
267 |
+
public function getConsentData($dataSubjectConsents)
|
268 |
+
{
|
269 |
+
$consentTypes = $this->getConsentTypes();
|
270 |
+
$consents = [];
|
271 |
+
|
272 |
+
foreach ($consentTypes as $slug => $consentType) {
|
273 |
+
if (in_array($slug, $dataSubjectConsents)) {
|
274 |
+
$consents[$slug] = $consentType;
|
275 |
+
}
|
276 |
+
}
|
277 |
+
|
278 |
+
return $consents;
|
279 |
+
}
|
280 |
+
|
281 |
+
/**
|
282 |
+
* Return a list of all data subjects who have given a particular consent
|
283 |
+
*
|
284 |
+
* @param $consent
|
285 |
+
*/
|
286 |
+
public function getAllDataSubjectsByConsent($consent)
|
287 |
+
{
|
288 |
+
// Todo
|
289 |
+
}
|
290 |
+
|
291 |
+
/**
|
292 |
+
* Withdraw and delete all consents given by a data subject
|
293 |
+
*
|
294 |
+
* @param $email
|
295 |
+
*/
|
296 |
+
public function delete($email)
|
297 |
+
{
|
298 |
+
$consents = $this->getAllConsents($email);
|
299 |
+
foreach ($consents as $consent) {
|
300 |
+
$this->deleteConsent($email, $consent);
|
301 |
+
}
|
302 |
+
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
* Withdraw and anonymize all consents given by a data subject
|
306 |
+
*
|
307 |
+
* @param $email
|
308 |
+
* @param $anonymizedId
|
309 |
+
*/
|
310 |
+
public function anonymize($email, $anonymizedId)
|
311 |
+
{
|
312 |
+
$consents = $this->getAllConsents($email);
|
313 |
+
foreach ($consents as $consent) {
|
314 |
+
$this->anonymizeConsent($email, $consent, $anonymizedId);
|
315 |
+
}
|
316 |
+
}
|
317 |
+
}
|
src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php
CHANGED
@@ -1,436 +1,436 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\PrivacyPolicy;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Admin\AdminTab;
|
6 |
-
|
7 |
-
class AdminTabPrivacyPolicy extends AdminTab
|
8 |
-
{
|
9 |
-
/* @var string */
|
10 |
-
protected $slug = 'privacy-policy';
|
11 |
-
|
12 |
-
/* @var PolicyGenerator */
|
13 |
-
protected $policyGenerator;
|
14 |
-
|
15 |
-
public function __construct(PolicyGenerator $policyGenerator)
|
16 |
-
{
|
17 |
-
$this->policyGenerator = $policyGenerator;
|
18 |
-
|
19 |
-
$this->title = _x('Privacy Policy', '(Admin)', 'gdpr-framework');
|
20 |
-
|
21 |
-
$this->registerSetting('gdpr_company_name');
|
22 |
-
$this->registerSetting('gdpr_contact_email');
|
23 |
-
$this->registerSetting('gdpr_company_location');
|
24 |
-
|
25 |
-
$this->registerSetting('gdpr_representative_contact_name');
|
26 |
-
$this->registerSetting('gdpr_representative_contact_email');
|
27 |
-
$this->registerSetting('gdpr_representative_contact_phone');
|
28 |
-
|
29 |
-
$this->registerSetting('gdpr_dpa_website');
|
30 |
-
$this->registerSetting('gdpr_dpa_email');
|
31 |
-
$this->registerSetting('gdpr_dpa_phone');
|
32 |
-
|
33 |
-
$this->registerSetting('gdpr_has_dpo');
|
34 |
-
$this->registerSetting('gdpr_dpo_name');
|
35 |
-
$this->registerSetting('gdpr_dpo_email');
|
36 |
-
|
37 |
-
/*
|
38 |
-
$this->registerSetting('gdpr_pp_data_gathered_1');
|
39 |
-
$this->registerSetting('gdpr_pp_data_gathered_2');
|
40 |
-
$this->registerSetting('gdpr_pp_data_gathered_3');
|
41 |
-
$this->registerSetting('gdpr_pp_data_gathered_4');
|
42 |
-
|
43 |
-
$this->registerSetting('gdpr_pp_data_usage_1');
|
44 |
-
$this->registerSetting('gdpr_pp_data_usage_2');
|
45 |
-
$this->registerSetting('gdpr_pp_data_usage_3');
|
46 |
-
$this->registerSetting('gdpr_pp_data_usage_4');
|
47 |
-
|
48 |
-
$this->registerSetting('gdpr_pp_data_partners');
|
49 |
-
*/
|
50 |
-
|
51 |
-
add_action('gdpr/admin/action/privacy-policy/generate', [$this, 'generatePolicy']);
|
52 |
-
}
|
53 |
-
|
54 |
-
public function init()
|
55 |
-
{
|
56 |
-
/**
|
57 |
-
* General settings
|
58 |
-
*/
|
59 |
-
$this->registerSettingSection(
|
60 |
-
'gdpr_section_privacy_policy',
|
61 |
-
_x('Privacy Policy', '(Admin)', 'gdpr-framework'),
|
62 |
-
[$this, 'renderHeader']
|
63 |
-
);
|
64 |
-
|
65 |
-
/**
|
66 |
-
* Company info
|
67 |
-
*/
|
68 |
-
$this->registerSettingSection(
|
69 |
-
'gdpr_section_privacy_policy_company',
|
70 |
-
_x('Company information', '(Admin)', 'gdpr-framework')
|
71 |
-
);
|
72 |
-
|
73 |
-
$this->registerSettingField(
|
74 |
-
'gdpr_company_name',
|
75 |
-
_x('Company Name', '(Admin)', 'gdpr-framework'),
|
76 |
-
[$this, 'renderCompanyNameHtml'],
|
77 |
-
'gdpr_section_privacy_policy_company'
|
78 |
-
);
|
79 |
-
|
80 |
-
$this->registerSettingField(
|
81 |
-
'gdpr_company_email',
|
82 |
-
_x('Company Email', '(Admin)', 'gdpr-framework'),
|
83 |
-
[$this, 'renderCompanyEmailHtml'],
|
84 |
-
'gdpr_section_privacy_policy_company'
|
85 |
-
);
|
86 |
-
|
87 |
-
$this->registerSettingField(
|
88 |
-
'gdpr_company_location',
|
89 |
-
_x('Company Location', '(Admin)', 'gdpr-framework'),
|
90 |
-
[$this, 'renderCompanyLocationHtml'],
|
91 |
-
'gdpr_section_privacy_policy_company'
|
92 |
-
);
|
93 |
-
|
94 |
-
/**
|
95 |
-
* Representative
|
96 |
-
*/
|
97 |
-
$this->registerSettingSection(
|
98 |
-
'gdpr_section_privacy_policy_representative',
|
99 |
-
false,
|
100 |
-
[$this, 'renderRepresentativeOpen']
|
101 |
-
);
|
102 |
-
|
103 |
-
$this->registerSettingField(
|
104 |
-
'gdpr_representative_contact_name',
|
105 |
-
_x('Representative Contact Name', '(Admin)', 'gdpr-framework'),
|
106 |
-
[$this, 'renderRepresentativeContactName'],
|
107 |
-
'gdpr_section_privacy_policy_representative'
|
108 |
-
);
|
109 |
-
|
110 |
-
$this->registerSettingField(
|
111 |
-
'gdpr_representative_contact_email',
|
112 |
-
_x('Representative Contact Email', '(Admin)', 'gdpr-framework'),
|
113 |
-
[$this, 'renderRepresentativeContactEmail'],
|
114 |
-
'gdpr_section_privacy_policy_representative'
|
115 |
-
);
|
116 |
-
|
117 |
-
$this->registerSettingField(
|
118 |
-
'gdpr_representative_contact_phone',
|
119 |
-
_x('Representative Contact Phone', '(Admin)', 'gdpr-framework'),
|
120 |
-
[$this, 'renderRepresentativeContactPhone'],
|
121 |
-
'gdpr_section_privacy_policy_representative'
|
122 |
-
);
|
123 |
-
|
124 |
-
$this->registerSettingSection(
|
125 |
-
'gdpr_section_privacy_policy_representative_close',
|
126 |
-
false,
|
127 |
-
[$this, 'renderRepresentativeClose']
|
128 |
-
);
|
129 |
-
|
130 |
-
/**
|
131 |
-
* DPA
|
132 |
-
*/
|
133 |
-
$this->registerSettingSection(
|
134 |
-
'gdpr_section_privacy_policy_dpa',
|
135 |
-
_x('Data Protection Authority', '(Admin)', 'gdpr-framework'),
|
136 |
-
[$this, 'renderDpaJS']
|
137 |
-
);
|
138 |
-
|
139 |
-
$this->registerSettingField(
|
140 |
-
'gdpr_dpa_website',
|
141 |
-
_x('Data Protection Authority Website', '(Admin)', 'gdpr-framework'),
|
142 |
-
[$this, 'renderDpaWebsite'],
|
143 |
-
'gdpr_section_privacy_policy_dpa'
|
144 |
-
);
|
145 |
-
|
146 |
-
$this->registerSettingField(
|
147 |
-
'gdpr_dpa_email',
|
148 |
-
_x('Data Protection Authority Email', '(Admin)', 'gdpr-framework'),
|
149 |
-
[$this, 'renderDpaEmail'],
|
150 |
-
'gdpr_section_privacy_policy_dpa'
|
151 |
-
);
|
152 |
-
|
153 |
-
$this->registerSettingField(
|
154 |
-
'gdpr_dpa_phone',
|
155 |
-
_x('Data Protection Authority Phone', '(Admin)', 'gdpr-framework'),
|
156 |
-
[$this, 'renderDpaPhone'],
|
157 |
-
'gdpr_section_privacy_policy_dpa'
|
158 |
-
);
|
159 |
-
|
160 |
-
/**
|
161 |
-
* DPO
|
162 |
-
*/
|
163 |
-
$this->registerSettingSection(
|
164 |
-
'gdpr_section_privacy_policy_dpo',
|
165 |
-
_x('Data Protection Officer', '(Admin)', 'gdpr-framework'),
|
166 |
-
function() {
|
167 |
-
echo "<a href='https://codelight.eu/wordpress-gdpr-framework/knowledge-base/do-i-need-to-appoint-data-protection-officer-dpo/' target='_blank'>";
|
168 |
-
echo _x('Knowledge base: Do I need to appoint a Data Protection Officer?', '(Admin)', 'gdpr-framework');
|
169 |
-
echo "</a>";
|
170 |
-
}
|
171 |
-
);
|
172 |
-
|
173 |
-
$this->registerSettingField(
|
174 |
-
'gdpr_has_dpo',
|
175 |
-
_x('Data Protection Officer', '(Admin)', 'gdpr-framework'),
|
176 |
-
[$this, 'renderHasDPOHtml'],
|
177 |
-
'gdpr_section_privacy_policy_dpo'
|
178 |
-
);
|
179 |
-
|
180 |
-
$this->registerSettingField(
|
181 |
-
'gdpr_dpo_name',
|
182 |
-
_x('Data Protection Officer Name', '(Admin)', 'gdpr-framework'),
|
183 |
-
[$this, 'renderDPONameHtml'],
|
184 |
-
'gdpr_section_privacy_policy_dpo',
|
185 |
-
['class' => 'gdpr-dpo hidden']
|
186 |
-
);
|
187 |
-
|
188 |
-
$this->registerSettingField(
|
189 |
-
'gdpr_dpo_email',
|
190 |
-
_x('Data Protection Officer Email', '(Admin)', 'gdpr-framework'),
|
191 |
-
[$this, 'renderDPOEmailHtml'],
|
192 |
-
'gdpr_section_privacy_policy_dpo',
|
193 |
-
['class' => 'gdpr-dpo hidden']
|
194 |
-
);
|
195 |
-
}
|
196 |
-
|
197 |
-
public function renderHeader()
|
198 |
-
{
|
199 |
-
echo gdpr('view')->render('admin/privacy-policy/header');
|
200 |
-
}
|
201 |
-
|
202 |
-
/**
|
203 |
-
* Company info
|
204 |
-
*/
|
205 |
-
|
206 |
-
public function renderCompanyNameHtml()
|
207 |
-
{
|
208 |
-
$value = gdpr('options')->get('company_name') ? esc_attr(gdpr('options')->get('company_name')) : '';
|
209 |
-
$placeholder = _x('Company Name', '(Admin)', 'gdpr-framework');
|
210 |
-
echo "<input name='gdpr_company_name' placeholder='{$placeholder}' value='{$value}'>";
|
211 |
-
}
|
212 |
-
|
213 |
-
public function renderCompanyEmailHtml()
|
214 |
-
{
|
215 |
-
$value = gdpr('options')->get('contact_email') ? esc_attr(gdpr('options')->get('contact_email')) : '';
|
216 |
-
$placeholder = _x('Contact Email', '(Admin)', 'gdpr-framework');
|
217 |
-
echo "<input type='email' name='gdpr_contact_email' placeholder='{$placeholder}' value='{$value}'>";
|
218 |
-
}
|
219 |
-
|
220 |
-
public function renderCompanyLocationHtml()
|
221 |
-
{
|
222 |
-
$country = gdpr('options')->get('company_location') ? gdpr('options')->get('company_location') : '';
|
223 |
-
$countrySelectOptions = gdpr('helpers')->getCountrySelectOptions($country);
|
224 |
-
echo gdpr('view')->render('admin/privacy-policy/company-location', compact('countrySelectOptions'));
|
225 |
-
}
|
226 |
-
|
227 |
-
/**
|
228 |
-
* Representative contact
|
229 |
-
*/
|
230 |
-
|
231 |
-
public function renderRepresentativeOpen()
|
232 |
-
{
|
233 |
-
echo "<span class='gdpr-representative hidden'>";
|
234 |
-
echo "<h3>";
|
235 |
-
echo _x('Representative Contact', '(Admin)', 'gdpr-framework');
|
236 |
-
echo "</h3>";
|
237 |
-
echo "<a href='https://codelight.eu/wordpress-gdpr-framework/knowledge-base/do-i-need-to-appoint-an-eu-based-representative/' target='_blank'>";
|
238 |
-
echo _x('Knowledge base: Do I need to appoint an EU-based representative?', '(Admin)', 'gdpr-framework');
|
239 |
-
echo "</a>";
|
240 |
-
}
|
241 |
-
|
242 |
-
public function renderRepresentativeContactName()
|
243 |
-
{
|
244 |
-
$value = gdpr('options')->get('representative_contact_name') ? esc_attr(gdpr('options')->get('representative_contact_name')) : '';
|
245 |
-
$placeholder = _x('Representative Contact Name', '(Admin)', 'gdpr-framework');
|
246 |
-
echo "<input name='gdpr_representative_contact_name' placeholder='{$placeholder}' value='{$value}'>";
|
247 |
-
}
|
248 |
-
|
249 |
-
public function renderRepresentativeContactEmail()
|
250 |
-
{
|
251 |
-
$value = gdpr('options')->get('representative_contact_email') ? esc_attr(gdpr('options')->get('representative_contact_email')) : '';
|
252 |
-
$placeholder = _x('Representative Contact Email', '(Admin)', 'gdpr-framework');
|
253 |
-
echo "<input type='email' name='gdpr_representative_contact_email' placeholder='{$placeholder}' value='{$value}'>";
|
254 |
-
}
|
255 |
-
|
256 |
-
public function renderRepresentativeContactPhone()
|
257 |
-
{
|
258 |
-
$value = gdpr('options')->get('representative_contact_phone') ? esc_attr(gdpr('options')->get('representative_contact_phone')) : '';
|
259 |
-
$placeholder = _x('Representative Contact Phone', '(Admin)', 'gdpr-framework');
|
260 |
-
echo "<input name='gdpr_representative_contact_phone' placeholder='{$placeholder}' value='{$value}'>";
|
261 |
-
}
|
262 |
-
|
263 |
-
public function renderRepresentativeClose()
|
264 |
-
{
|
265 |
-
echo "</span>";
|
266 |
-
}
|
267 |
-
|
268 |
-
/**
|
269 |
-
* Data Protection Authority
|
270 |
-
*/
|
271 |
-
public function renderDpaJS()
|
272 |
-
{
|
273 |
-
echo "<a href='https://codelight.eu/wordpress-gdpr-framework/knowledge-base/do-i-need-to-appoint-an-eu-based-representative/' target='_blank'>";
|
274 |
-
echo 'See the <a href="http://ec.europa.eu/justice/data-protection/article-29/structure/data-protection-authorities/index_en.htm" target="_blank">list of contacts here</a>';
|
275 |
-
echo "</a>";
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
$dpaData = json_encode(gdpr('helpers')->getDataProtectionAuthorities());
|
280 |
-
echo gdpr('view')->render('admin/privacy-policy/dpa', compact('dpaData'));
|
281 |
-
}
|
282 |
-
|
283 |
-
public function renderDpaWebsite()
|
284 |
-
{
|
285 |
-
$value = gdpr('options')->get('dpa_website') ? esc_attr(gdpr('options')->get('dpa_website')) : '';
|
286 |
-
$placeholder = _x('Data Protection Authority Website', '(Admin)', 'gdpr-framework');
|
287 |
-
echo "<input name='gdpr_dpa_website' id='gdpr_dpa_website' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
|
288 |
-
}
|
289 |
-
|
290 |
-
public function renderDpaEmail()
|
291 |
-
{
|
292 |
-
$value = gdpr('options')->get('dpa_email') ? esc_attr(gdpr('options')->get('dpa_email')) : '';
|
293 |
-
$placeholder = _x('Data Protection Authority Email', '(Admin)', 'gdpr-framework');
|
294 |
-
echo "<input type='email' name='gdpr_dpa_email' id='gdpr_dpa_email' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
|
295 |
-
}
|
296 |
-
|
297 |
-
public function renderDpaPhone()
|
298 |
-
{
|
299 |
-
$value = gdpr('options')->get('dpa_phone') ? esc_attr(gdpr('options')->get('dpa_phone')) : '';
|
300 |
-
$placeholder = _x('Data Protection Authority Phone', '(Admin)', 'gdpr-framework');
|
301 |
-
echo "<input name='gdpr_dpa_phone' id='gdpr_dpa_phone' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
|
302 |
-
}
|
303 |
-
|
304 |
-
/**
|
305 |
-
* Data Protection Officer
|
306 |
-
*/
|
307 |
-
|
308 |
-
public function renderHasDPOHtml()
|
309 |
-
{
|
310 |
-
$hasDPO = gdpr('options')->get('has_dpo');
|
311 |
-
echo gdpr('view')->render('admin/privacy-policy/has-dpo', compact('hasDPO'));
|
312 |
-
}
|
313 |
-
|
314 |
-
public function renderDPONameHtml()
|
315 |
-
{
|
316 |
-
$value = gdpr('options')->get('dpo_name') ? esc_attr(gdpr('options')->get('dpo_name')) : '';
|
317 |
-
$placeholder = _x('DPO Name', '(Admin)', 'gdpr-framework');
|
318 |
-
echo "<input name='gdpr_dpo_name' placeholder='{$placeholder}' value='{$value}'>";
|
319 |
-
}
|
320 |
-
|
321 |
-
public function renderDPOEmailHtml()
|
322 |
-
{
|
323 |
-
$value = gdpr('options')->get('dpo_email') ? esc_attr(gdpr('options')->get('dpo_email')) : '';
|
324 |
-
$placeholder = _x('DPO Name', '(Admin)', 'gdpr-framework');
|
325 |
-
echo "<input type='email' name='gdpr_dpo_email' placeholder='{$placeholder}' value='{$value}'>";
|
326 |
-
}
|
327 |
-
|
328 |
-
|
329 |
-
public function generatePolicy()
|
330 |
-
{
|
331 |
-
$policyPage = gdpr('options')->get('policy_page');
|
332 |
-
|
333 |
-
// todo: handle errors
|
334 |
-
if ( ! $policyPage) {
|
335 |
-
return;
|
336 |
-
}
|
337 |
-
|
338 |
-
$policy = gdpr('view')->render(
|
339 |
-
'policy/policy'
|
340 |
-
);
|
341 |
-
|
342 |
-
wp_update_post([
|
343 |
-
'ID' => $policyPage,
|
344 |
-
'post_content' => $policy,
|
345 |
-
]);
|
346 |
-
|
347 |
-
wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy&gdpr_notice=policy_generated'));
|
348 |
-
}
|
349 |
-
|
350 |
-
/**
|
351 |
-
* Render either the settings or the generated policy
|
352 |
-
*/
|
353 |
-
public function renderContents()
|
354 |
-
{
|
355 |
-
if (isset($_GET['generate']) && 'yes' == $_GET['generate']) {
|
356 |
-
return $this->renderPolicy();
|
357 |
-
} else {
|
358 |
-
return $this->renderSettings();
|
359 |
-
}
|
360 |
-
}
|
361 |
-
|
362 |
-
/**
|
363 |
-
* Render the contents including settings fields, sections and submit button.
|
364 |
-
* Trigger hooks for rendering content before and after the settings fields.
|
365 |
-
*
|
366 |
-
* @return string
|
367 |
-
*/
|
368 |
-
public function renderSettings()
|
369 |
-
{
|
370 |
-
ob_start();
|
371 |
-
|
372 |
-
do_action("gdpr/tabs/{$this->getSlug()}/before", $this);
|
373 |
-
$this->settingsFields($this->getOptionsGroupName());
|
374 |
-
do_settings_sections($this->getOptionsGroupName());
|
375 |
-
do_action("gdpr/tabs/{$this->getSlug()}/after", $this);
|
376 |
-
|
377 |
-
$this->renderSubmitButton();
|
378 |
-
|
379 |
-
return ob_get_clean();
|
380 |
-
}
|
381 |
-
|
382 |
-
public function renderPolicy()
|
383 |
-
{
|
384 |
-
$policyPageId = gdpr('options')->get('policy_page');
|
385 |
-
if ($policyPageId) {
|
386 |
-
$policyUrl = get_edit_post_link($policyPageId);
|
387 |
-
} else {
|
388 |
-
$policyUrl = false;
|
389 |
-
}
|
390 |
-
|
391 |
-
$editor = $this->getPolicyEditor();
|
392 |
-
$backUrl = gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy');
|
393 |
-
|
394 |
-
return gdpr('view')->render('admin/privacy-policy/generated', compact('editor', 'policyUrl', 'backUrl'));
|
395 |
-
}
|
396 |
-
|
397 |
-
protected function getPolicyEditor()
|
398 |
-
{
|
399 |
-
ob_start();
|
400 |
-
|
401 |
-
wp_editor(
|
402 |
-
wp_kses_post($this->policyGenerator->generate()),
|
403 |
-
'gdpr_policy',
|
404 |
-
[
|
405 |
-
'media_buttons' => false,
|
406 |
-
'editor_height' => 600,
|
407 |
-
'teeny' => true,
|
408 |
-
'editor_css' => '<style>#mceu_16 { display: none; }</style>'
|
409 |
-
]
|
410 |
-
);
|
411 |
-
|
412 |
-
return ob_get_clean();
|
413 |
-
}
|
414 |
-
|
415 |
-
/**
|
416 |
-
* Render WP's default submit button
|
417 |
-
*/
|
418 |
-
public function renderSubmitButton()
|
419 |
-
{
|
420 |
-
submit_button(_x('Save & Generate Policy', '(Admin)', 'gdpr-framework'));
|
421 |
-
}
|
422 |
-
|
423 |
-
/**
|
424 |
-
* In order to set up a proper redirect to the generated policy
|
425 |
-
* after saving settings, we modify the way wp_nonce_field is called and insert our own referer input.
|
426 |
-
*
|
427 |
-
* @param $optionGroup
|
428 |
-
*/
|
429 |
-
public function settingsFields($optionGroup)
|
430 |
-
{
|
431 |
-
echo "<input type='hidden' name='option_page' value='" . esc_attr($optionGroup) . "' />";
|
432 |
-
echo '<input type="hidden" name="action" value="update" />';
|
433 |
-
wp_nonce_field("$optionGroup-options", '_wpnonce', false);
|
434 |
-
echo '<input type="hidden" name="_wp_http_referer" value="'. esc_attr( wp_unslash( $_SERVER['REQUEST_URI'] ) . '&generate=yes' ) . '" />';
|
435 |
-
}
|
436 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\PrivacyPolicy;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Admin\AdminTab;
|
6 |
+
|
7 |
+
class AdminTabPrivacyPolicy extends AdminTab
|
8 |
+
{
|
9 |
+
/* @var string */
|
10 |
+
protected $slug = 'privacy-policy';
|
11 |
+
|
12 |
+
/* @var PolicyGenerator */
|
13 |
+
protected $policyGenerator;
|
14 |
+
|
15 |
+
public function __construct(PolicyGenerator $policyGenerator)
|
16 |
+
{
|
17 |
+
$this->policyGenerator = $policyGenerator;
|
18 |
+
|
19 |
+
$this->title = _x('Privacy Policy', '(Admin)', 'gdpr-framework');
|
20 |
+
|
21 |
+
$this->registerSetting('gdpr_company_name');
|
22 |
+
$this->registerSetting('gdpr_contact_email');
|
23 |
+
$this->registerSetting('gdpr_company_location');
|
24 |
+
|
25 |
+
$this->registerSetting('gdpr_representative_contact_name');
|
26 |
+
$this->registerSetting('gdpr_representative_contact_email');
|
27 |
+
$this->registerSetting('gdpr_representative_contact_phone');
|
28 |
+
|
29 |
+
$this->registerSetting('gdpr_dpa_website');
|
30 |
+
$this->registerSetting('gdpr_dpa_email');
|
31 |
+
$this->registerSetting('gdpr_dpa_phone');
|
32 |
+
|
33 |
+
$this->registerSetting('gdpr_has_dpo');
|
34 |
+
$this->registerSetting('gdpr_dpo_name');
|
35 |
+
$this->registerSetting('gdpr_dpo_email');
|
36 |
+
|
37 |
+
/*
|
38 |
+
$this->registerSetting('gdpr_pp_data_gathered_1');
|
39 |
+
$this->registerSetting('gdpr_pp_data_gathered_2');
|
40 |
+
$this->registerSetting('gdpr_pp_data_gathered_3');
|
41 |
+
$this->registerSetting('gdpr_pp_data_gathered_4');
|
42 |
+
|
43 |
+
$this->registerSetting('gdpr_pp_data_usage_1');
|
44 |
+
$this->registerSetting('gdpr_pp_data_usage_2');
|
45 |
+
$this->registerSetting('gdpr_pp_data_usage_3');
|
46 |
+
$this->registerSetting('gdpr_pp_data_usage_4');
|
47 |
+
|
48 |
+
$this->registerSetting('gdpr_pp_data_partners');
|
49 |
+
*/
|
50 |
+
|
51 |
+
add_action('gdpr/admin/action/privacy-policy/generate', [$this, 'generatePolicy']);
|
52 |
+
}
|
53 |
+
|
54 |
+
public function init()
|
55 |
+
{
|
56 |
+
/**
|
57 |
+
* General settings
|
58 |
+
*/
|
59 |
+
$this->registerSettingSection(
|
60 |
+
'gdpr_section_privacy_policy',
|
61 |
+
_x('Privacy Policy', '(Admin)', 'gdpr-framework'),
|
62 |
+
[$this, 'renderHeader']
|
63 |
+
);
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Company info
|
67 |
+
*/
|
68 |
+
$this->registerSettingSection(
|
69 |
+
'gdpr_section_privacy_policy_company',
|
70 |
+
_x('Company information', '(Admin)', 'gdpr-framework')
|
71 |
+
);
|
72 |
+
|
73 |
+
$this->registerSettingField(
|
74 |
+
'gdpr_company_name',
|
75 |
+
_x('Company Name', '(Admin)', 'gdpr-framework'),
|
76 |
+
[$this, 'renderCompanyNameHtml'],
|
77 |
+
'gdpr_section_privacy_policy_company'
|
78 |
+
);
|
79 |
+
|
80 |
+
$this->registerSettingField(
|
81 |
+
'gdpr_company_email',
|
82 |
+
_x('Company Email', '(Admin)', 'gdpr-framework'),
|
83 |
+
[$this, 'renderCompanyEmailHtml'],
|
84 |
+
'gdpr_section_privacy_policy_company'
|
85 |
+
);
|
86 |
+
|
87 |
+
$this->registerSettingField(
|
88 |
+
'gdpr_company_location',
|
89 |
+
_x('Company Location', '(Admin)', 'gdpr-framework'),
|
90 |
+
[$this, 'renderCompanyLocationHtml'],
|
91 |
+
'gdpr_section_privacy_policy_company'
|
92 |
+
);
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Representative
|
96 |
+
*/
|
97 |
+
$this->registerSettingSection(
|
98 |
+
'gdpr_section_privacy_policy_representative',
|
99 |
+
false,
|
100 |
+
[$this, 'renderRepresentativeOpen']
|
101 |
+
);
|
102 |
+
|
103 |
+
$this->registerSettingField(
|
104 |
+
'gdpr_representative_contact_name',
|
105 |
+
_x('Representative Contact Name', '(Admin)', 'gdpr-framework'),
|
106 |
+
[$this, 'renderRepresentativeContactName'],
|
107 |
+
'gdpr_section_privacy_policy_representative'
|
108 |
+
);
|
109 |
+
|
110 |
+
$this->registerSettingField(
|
111 |
+
'gdpr_representative_contact_email',
|
112 |
+
_x('Representative Contact Email', '(Admin)', 'gdpr-framework'),
|
113 |
+
[$this, 'renderRepresentativeContactEmail'],
|
114 |
+
'gdpr_section_privacy_policy_representative'
|
115 |
+
);
|
116 |
+
|
117 |
+
$this->registerSettingField(
|
118 |
+
'gdpr_representative_contact_phone',
|
119 |
+
_x('Representative Contact Phone', '(Admin)', 'gdpr-framework'),
|
120 |
+
[$this, 'renderRepresentativeContactPhone'],
|
121 |
+
'gdpr_section_privacy_policy_representative'
|
122 |
+
);
|
123 |
+
|
124 |
+
$this->registerSettingSection(
|
125 |
+
'gdpr_section_privacy_policy_representative_close',
|
126 |
+
false,
|
127 |
+
[$this, 'renderRepresentativeClose']
|
128 |
+
);
|
129 |
+
|
130 |
+
/**
|
131 |
+
* DPA
|
132 |
+
*/
|
133 |
+
$this->registerSettingSection(
|
134 |
+
'gdpr_section_privacy_policy_dpa',
|
135 |
+
_x('Data Protection Authority', '(Admin)', 'gdpr-framework'),
|
136 |
+
[$this, 'renderDpaJS']
|
137 |
+
);
|
138 |
+
|
139 |
+
$this->registerSettingField(
|
140 |
+
'gdpr_dpa_website',
|
141 |
+
_x('Data Protection Authority Website', '(Admin)', 'gdpr-framework'),
|
142 |
+
[$this, 'renderDpaWebsite'],
|
143 |
+
'gdpr_section_privacy_policy_dpa'
|
144 |
+
);
|
145 |
+
|
146 |
+
$this->registerSettingField(
|
147 |
+
'gdpr_dpa_email',
|
148 |
+
_x('Data Protection Authority Email', '(Admin)', 'gdpr-framework'),
|
149 |
+
[$this, 'renderDpaEmail'],
|
150 |
+
'gdpr_section_privacy_policy_dpa'
|
151 |
+
);
|
152 |
+
|
153 |
+
$this->registerSettingField(
|
154 |
+
'gdpr_dpa_phone',
|
155 |
+
_x('Data Protection Authority Phone', '(Admin)', 'gdpr-framework'),
|
156 |
+
[$this, 'renderDpaPhone'],
|
157 |
+
'gdpr_section_privacy_policy_dpa'
|
158 |
+
);
|
159 |
+
|
160 |
+
/**
|
161 |
+
* DPO
|
162 |
+
*/
|
163 |
+
$this->registerSettingSection(
|
164 |
+
'gdpr_section_privacy_policy_dpo',
|
165 |
+
_x('Data Protection Officer', '(Admin)', 'gdpr-framework'),
|
166 |
+
function() {
|
167 |
+
echo "<a href='https://codelight.eu/wordpress-gdpr-framework/knowledge-base/do-i-need-to-appoint-data-protection-officer-dpo/' target='_blank'>";
|
168 |
+
echo _x('Knowledge base: Do I need to appoint a Data Protection Officer?', '(Admin)', 'gdpr-framework');
|
169 |
+
echo "</a>";
|
170 |
+
}
|
171 |
+
);
|
172 |
+
|
173 |
+
$this->registerSettingField(
|
174 |
+
'gdpr_has_dpo',
|
175 |
+
_x('Data Protection Officer', '(Admin)', 'gdpr-framework'),
|
176 |
+
[$this, 'renderHasDPOHtml'],
|
177 |
+
'gdpr_section_privacy_policy_dpo'
|
178 |
+
);
|
179 |
+
|
180 |
+
$this->registerSettingField(
|
181 |
+
'gdpr_dpo_name',
|
182 |
+
_x('Data Protection Officer Name', '(Admin)', 'gdpr-framework'),
|
183 |
+
[$this, 'renderDPONameHtml'],
|
184 |
+
'gdpr_section_privacy_policy_dpo',
|
185 |
+
['class' => 'gdpr-dpo hidden']
|
186 |
+
);
|
187 |
+
|
188 |
+
$this->registerSettingField(
|
189 |
+
'gdpr_dpo_email',
|
190 |
+
_x('Data Protection Officer Email', '(Admin)', 'gdpr-framework'),
|
191 |
+
[$this, 'renderDPOEmailHtml'],
|
192 |
+
'gdpr_section_privacy_policy_dpo',
|
193 |
+
['class' => 'gdpr-dpo hidden']
|
194 |
+
);
|
195 |
+
}
|
196 |
+
|
197 |
+
public function renderHeader()
|
198 |
+
{
|
199 |
+
echo gdpr('view')->render('admin/privacy-policy/header');
|
200 |
+
}
|
201 |
+
|
202 |
+
/**
|
203 |
+
* Company info
|
204 |
+
*/
|
205 |
+
|
206 |
+
public function renderCompanyNameHtml()
|
207 |
+
{
|
208 |
+
$value = gdpr('options')->get('company_name') ? esc_attr(gdpr('options')->get('company_name')) : '';
|
209 |
+
$placeholder = _x('Company Name', '(Admin)', 'gdpr-framework');
|
210 |
+
echo "<input name='gdpr_company_name' placeholder='{$placeholder}' value='{$value}'>";
|
211 |
+
}
|
212 |
+
|
213 |
+
public function renderCompanyEmailHtml()
|
214 |
+
{
|
215 |
+
$value = gdpr('options')->get('contact_email') ? esc_attr(gdpr('options')->get('contact_email')) : '';
|
216 |
+
$placeholder = _x('Contact Email', '(Admin)', 'gdpr-framework');
|
217 |
+
echo "<input type='email' name='gdpr_contact_email' placeholder='{$placeholder}' value='{$value}'>";
|
218 |
+
}
|
219 |
+
|
220 |
+
public function renderCompanyLocationHtml()
|
221 |
+
{
|
222 |
+
$country = gdpr('options')->get('company_location') ? gdpr('options')->get('company_location') : '';
|
223 |
+
$countrySelectOptions = gdpr('helpers')->getCountrySelectOptions($country);
|
224 |
+
echo gdpr('view')->render('admin/privacy-policy/company-location', compact('countrySelectOptions'));
|
225 |
+
}
|
226 |
+
|
227 |
+
/**
|
228 |
+
* Representative contact
|
229 |
+
*/
|
230 |
+
|
231 |
+
public function renderRepresentativeOpen()
|
232 |
+
{
|
233 |
+
echo "<span class='gdpr-representative hidden'>";
|
234 |
+
echo "<h3>";
|
235 |
+
echo _x('Representative Contact', '(Admin)', 'gdpr-framework');
|
236 |
+
echo "</h3>";
|
237 |
+
echo "<a href='https://codelight.eu/wordpress-gdpr-framework/knowledge-base/do-i-need-to-appoint-an-eu-based-representative/' target='_blank'>";
|
238 |
+
echo _x('Knowledge base: Do I need to appoint an EU-based representative?', '(Admin)', 'gdpr-framework');
|
239 |
+
echo "</a>";
|
240 |
+
}
|
241 |
+
|
242 |
+
public function renderRepresentativeContactName()
|
243 |
+
{
|
244 |
+
$value = gdpr('options')->get('representative_contact_name') ? esc_attr(gdpr('options')->get('representative_contact_name')) : '';
|
245 |
+
$placeholder = _x('Representative Contact Name', '(Admin)', 'gdpr-framework');
|
246 |
+
echo "<input name='gdpr_representative_contact_name' placeholder='{$placeholder}' value='{$value}'>";
|
247 |
+
}
|
248 |
+
|
249 |
+
public function renderRepresentativeContactEmail()
|
250 |
+
{
|
251 |
+
$value = gdpr('options')->get('representative_contact_email') ? esc_attr(gdpr('options')->get('representative_contact_email')) : '';
|
252 |
+
$placeholder = _x('Representative Contact Email', '(Admin)', 'gdpr-framework');
|
253 |
+
echo "<input type='email' name='gdpr_representative_contact_email' placeholder='{$placeholder}' value='{$value}'>";
|
254 |
+
}
|
255 |
+
|
256 |
+
public function renderRepresentativeContactPhone()
|
257 |
+
{
|
258 |
+
$value = gdpr('options')->get('representative_contact_phone') ? esc_attr(gdpr('options')->get('representative_contact_phone')) : '';
|
259 |
+
$placeholder = _x('Representative Contact Phone', '(Admin)', 'gdpr-framework');
|
260 |
+
echo "<input name='gdpr_representative_contact_phone' placeholder='{$placeholder}' value='{$value}'>";
|
261 |
+
}
|
262 |
+
|
263 |
+
public function renderRepresentativeClose()
|
264 |
+
{
|
265 |
+
echo "</span>";
|
266 |
+
}
|
267 |
+
|
268 |
+
/**
|
269 |
+
* Data Protection Authority
|
270 |
+
*/
|
271 |
+
public function renderDpaJS()
|
272 |
+
{
|
273 |
+
echo "<a href='https://codelight.eu/wordpress-gdpr-framework/knowledge-base/do-i-need-to-appoint-an-eu-based-representative/' target='_blank'>";
|
274 |
+
echo 'See the <a href="http://ec.europa.eu/justice/data-protection/article-29/structure/data-protection-authorities/index_en.htm" target="_blank">list of contacts here</a>';
|
275 |
+
echo "</a>";
|
276 |
+
|
277 |
+
|
278 |
+
|
279 |
+
$dpaData = json_encode(gdpr('helpers')->getDataProtectionAuthorities());
|
280 |
+
echo gdpr('view')->render('admin/privacy-policy/dpa', compact('dpaData'));
|
281 |
+
}
|
282 |
+
|
283 |
+
public function renderDpaWebsite()
|
284 |
+
{
|
285 |
+
$value = gdpr('options')->get('dpa_website') ? esc_attr(gdpr('options')->get('dpa_website')) : '';
|
286 |
+
$placeholder = _x('Data Protection Authority Website', '(Admin)', 'gdpr-framework');
|
287 |
+
echo "<input name='gdpr_dpa_website' id='gdpr_dpa_website' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
|
288 |
+
}
|
289 |
+
|
290 |
+
public function renderDpaEmail()
|
291 |
+
{
|
292 |
+
$value = gdpr('options')->get('dpa_email') ? esc_attr(gdpr('options')->get('dpa_email')) : '';
|
293 |
+
$placeholder = _x('Data Protection Authority Email', '(Admin)', 'gdpr-framework');
|
294 |
+
echo "<input type='email' name='gdpr_dpa_email' id='gdpr_dpa_email' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
|
295 |
+
}
|
296 |
+
|
297 |
+
public function renderDpaPhone()
|
298 |
+
{
|
299 |
+
$value = gdpr('options')->get('dpa_phone') ? esc_attr(gdpr('options')->get('dpa_phone')) : '';
|
300 |
+
$placeholder = _x('Data Protection Authority Phone', '(Admin)', 'gdpr-framework');
|
301 |
+
echo "<input name='gdpr_dpa_phone' id='gdpr_dpa_phone' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
|
302 |
+
}
|
303 |
+
|
304 |
+
/**
|
305 |
+
* Data Protection Officer
|
306 |
+
*/
|
307 |
+
|
308 |
+
public function renderHasDPOHtml()
|
309 |
+
{
|
310 |
+
$hasDPO = gdpr('options')->get('has_dpo');
|
311 |
+
echo gdpr('view')->render('admin/privacy-policy/has-dpo', compact('hasDPO'));
|
312 |
+
}
|
313 |
+
|
314 |
+
public function renderDPONameHtml()
|
315 |
+
{
|
316 |
+
$value = gdpr('options')->get('dpo_name') ? esc_attr(gdpr('options')->get('dpo_name')) : '';
|
317 |
+
$placeholder = _x('DPO Name', '(Admin)', 'gdpr-framework');
|
318 |
+
echo "<input name='gdpr_dpo_name' placeholder='{$placeholder}' value='{$value}'>";
|
319 |
+
}
|
320 |
+
|
321 |
+
public function renderDPOEmailHtml()
|
322 |
+
{
|
323 |
+
$value = gdpr('options')->get('dpo_email') ? esc_attr(gdpr('options')->get('dpo_email')) : '';
|
324 |
+
$placeholder = _x('DPO Name', '(Admin)', 'gdpr-framework');
|
325 |
+
echo "<input type='email' name='gdpr_dpo_email' placeholder='{$placeholder}' value='{$value}'>";
|
326 |
+
}
|
327 |
+
|
328 |
+
|
329 |
+
public function generatePolicy()
|
330 |
+
{
|
331 |
+
$policyPage = gdpr('options')->get('policy_page');
|
332 |
+
|
333 |
+
// todo: handle errors
|
334 |
+
if ( ! $policyPage) {
|
335 |
+
return;
|
336 |
+
}
|
337 |
+
|
338 |
+
$policy = gdpr('view')->render(
|
339 |
+
'policy/policy'
|
340 |
+
);
|
341 |
+
|
342 |
+
wp_update_post([
|
343 |
+
'ID' => $policyPage,
|
344 |
+
'post_content' => $policy,
|
345 |
+
]);
|
346 |
+
|
347 |
+
wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy&gdpr_notice=policy_generated'));
|
348 |
+
}
|
349 |
+
|
350 |
+
/**
|
351 |
+
* Render either the settings or the generated policy
|
352 |
+
*/
|
353 |
+
public function renderContents()
|
354 |
+
{
|
355 |
+
if (isset($_GET['generate']) && 'yes' == $_GET['generate']) {
|
356 |
+
return $this->renderPolicy();
|
357 |
+
} else {
|
358 |
+
return $this->renderSettings();
|
359 |
+
}
|
360 |
+
}
|
361 |
+
|
362 |
+
/**
|
363 |
+
* Render the contents including settings fields, sections and submit button.
|
364 |
+
* Trigger hooks for rendering content before and after the settings fields.
|
365 |
+
*
|
366 |
+
* @return string
|
367 |
+
*/
|
368 |
+
public function renderSettings()
|
369 |
+
{
|
370 |
+
ob_start();
|
371 |
+
|
372 |
+
do_action("gdpr/tabs/{$this->getSlug()}/before", $this);
|
373 |
+
$this->settingsFields($this->getOptionsGroupName());
|
374 |
+
do_settings_sections($this->getOptionsGroupName());
|
375 |
+
do_action("gdpr/tabs/{$this->getSlug()}/after", $this);
|
376 |
+
|
377 |
+
$this->renderSubmitButton();
|
378 |
+
|
379 |
+
return ob_get_clean();
|
380 |
+
}
|
381 |
+
|
382 |
+
public function renderPolicy()
|
383 |
+
{
|
384 |
+
$policyPageId = gdpr('options')->get('policy_page');
|
385 |
+
if ($policyPageId) {
|
386 |
+
$policyUrl = get_edit_post_link($policyPageId);
|
387 |
+
} else {
|
388 |
+
$policyUrl = false;
|
389 |
+
}
|
390 |
+
|
391 |
+
$editor = $this->getPolicyEditor();
|
392 |
+
$backUrl = gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy');
|
393 |
+
|
394 |
+
return gdpr('view')->render('admin/privacy-policy/generated', compact('editor', 'policyUrl', 'backUrl'));
|
395 |
+
}
|
396 |
+
|
397 |
+
protected function getPolicyEditor()
|
398 |
+
{
|
399 |
+
ob_start();
|
400 |
+
|
401 |
+
wp_editor(
|
402 |
+
wp_kses_post($this->policyGenerator->generate()),
|
403 |
+
'gdpr_policy',
|
404 |
+
[
|
405 |
+
'media_buttons' => false,
|
406 |
+
'editor_height' => 600,
|
407 |
+
'teeny' => true,
|
408 |
+
'editor_css' => '<style>#mceu_16 { display: none; }</style>'
|
409 |
+
]
|
410 |
+
);
|
411 |
+
|
412 |
+
return ob_get_clean();
|
413 |
+
}
|
414 |
+
|
415 |
+
/**
|
416 |
+
* Render WP's default submit button
|
417 |
+
*/
|
418 |
+
public function renderSubmitButton()
|
419 |
+
{
|
420 |
+
submit_button(_x('Save & Generate Policy', '(Admin)', 'gdpr-framework'));
|
421 |
+
}
|
422 |
+
|
423 |
+
/**
|
424 |
+
* In order to set up a proper redirect to the generated policy
|
425 |
+
* after saving settings, we modify the way wp_nonce_field is called and insert our own referer input.
|
426 |
+
*
|
427 |
+
* @param $optionGroup
|
428 |
+
*/
|
429 |
+
public function settingsFields($optionGroup)
|
430 |
+
{
|
431 |
+
echo "<input type='hidden' name='option_page' value='" . esc_attr($optionGroup) . "' />";
|
432 |
+
echo '<input type="hidden" name="action" value="update" />';
|
433 |
+
wp_nonce_field("$optionGroup-options", '_wpnonce', false);
|
434 |
+
echo '<input type="hidden" name="_wp_http_referer" value="'. esc_attr( wp_unslash( $_SERVER['REQUEST_URI'] ) . '&generate=yes' ) . '" />';
|
435 |
+
}
|
436 |
+
}
|
src/Components/PrivacyPolicy/PolicyGenerator.php
CHANGED
@@ -1,45 +1,45 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\PrivacyPolicy;
|
4 |
-
|
5 |
-
class PolicyGenerator
|
6 |
-
{
|
7 |
-
public function generate()
|
8 |
-
{
|
9 |
-
return gdpr('view')->render(
|
10 |
-
'policy/policy',
|
11 |
-
$this->getData()
|
12 |
-
);
|
13 |
-
}
|
14 |
-
|
15 |
-
public function getData()
|
16 |
-
{
|
17 |
-
$location = gdpr('options')->get('company_location');
|
18 |
-
$date = date(get_option('date_format'));
|
19 |
-
|
20 |
-
return [
|
21 |
-
'companyName' => gdpr('options')->get('company_name'),
|
22 |
-
'companyLocation' => $location,
|
23 |
-
'contactEmail' => gdpr('options')->get('contact_email') ?
|
24 |
-
gdpr('options')->get('contact_email') :
|
25 |
-
get_option('admin_email'),
|
26 |
-
|
27 |
-
'hasRepresentative' => gdpr('helpers')->countryNeedsRepresentative($location),
|
28 |
-
'representativeContactName' => gdpr('options')->get('representative_contact_name'),
|
29 |
-
'representativeContactEmail' => gdpr('options')->get('representative_contact_email'),
|
30 |
-
'representativeContactPhone' => gdpr('options')->get('representative_contact_phone'),
|
31 |
-
|
32 |
-
'dpaWebsite' => gdpr('options')->get('dpa_name'),
|
33 |
-
'dpaEmail' => gdpr('options')->get('dpa_email'),
|
34 |
-
'dpaPhone' => gdpr('options')->get('dpa_phone'),
|
35 |
-
|
36 |
-
'hasDpo' => gdpr('options')->get('has_dpo'),
|
37 |
-
'dpoName' => gdpr('options')->get('dpo_name'),
|
38 |
-
'dpoEmail' => gdpr('options')->get('dpo_email'),
|
39 |
-
|
40 |
-
'hasTerms' => gdpr('options')->get('terms_page'),
|
41 |
-
|
42 |
-
'date' => $date,
|
43 |
-
];
|
44 |
-
}
|
45 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\PrivacyPolicy;
|
4 |
+
|
5 |
+
class PolicyGenerator
|
6 |
+
{
|
7 |
+
public function generate()
|
8 |
+
{
|
9 |
+
return gdpr('view')->render(
|
10 |
+
'policy/policy',
|
11 |
+
$this->getData()
|
12 |
+
);
|
13 |
+
}
|
14 |
+
|
15 |
+
public function getData()
|
16 |
+
{
|
17 |
+
$location = gdpr('options')->get('company_location');
|
18 |
+
$date = date(get_option('date_format'));
|
19 |
+
|
20 |
+
return [
|
21 |
+
'companyName' => gdpr('options')->get('company_name'),
|
22 |
+
'companyLocation' => $location,
|
23 |
+
'contactEmail' => gdpr('options')->get('contact_email') ?
|
24 |
+
gdpr('options')->get('contact_email') :
|
25 |
+
get_option('admin_email'),
|
26 |
+
|
27 |
+
'hasRepresentative' => gdpr('helpers')->countryNeedsRepresentative($location),
|
28 |
+
'representativeContactName' => gdpr('options')->get('representative_contact_name'),
|
29 |
+
'representativeContactEmail' => gdpr('options')->get('representative_contact_email'),
|
30 |
+
'representativeContactPhone' => gdpr('options')->get('representative_contact_phone'),
|
31 |
+
|
32 |
+
'dpaWebsite' => gdpr('options')->get('dpa_name'),
|
33 |
+
'dpaEmail' => gdpr('options')->get('dpa_email'),
|
34 |
+
'dpaPhone' => gdpr('options')->get('dpa_phone'),
|
35 |
+
|
36 |
+
'hasDpo' => gdpr('options')->get('has_dpo'),
|
37 |
+
'dpoName' => gdpr('options')->get('dpo_name'),
|
38 |
+
'dpoEmail' => gdpr('options')->get('dpo_email'),
|
39 |
+
|
40 |
+
'hasTerms' => gdpr('options')->get('terms_page'),
|
41 |
+
|
42 |
+
'date' => $date,
|
43 |
+
];
|
44 |
+
}
|
45 |
}
|
src/Components/PrivacyPolicy/PrivacyPolicy.php
CHANGED
@@ -1,92 +1,92 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\PrivacyPolicy;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Handles putting together and rendering the privacy policy page
|
7 |
-
*
|
8 |
-
* Class PrivacyPolicy
|
9 |
-
*
|
10 |
-
* @package Codelight\GDPR\Components\PrivacyPolicy
|
11 |
-
*/
|
12 |
-
class PrivacyPolicy
|
13 |
-
{
|
14 |
-
public function __construct()
|
15 |
-
{
|
16 |
-
add_filter('gdpr/admin/tabs', [$this, 'registerAdminTab'], 35);
|
17 |
-
|
18 |
-
add_shortcode('gdpr_privacy', [$this, 'doShortcode']);
|
19 |
-
add_shortcode('gdpr_privacy_policy_url', [$this, 'renderUrlShortcode']);
|
20 |
-
add_shortcode('gdpr_privacy_policy_link', [$this, 'renderLinkShortcode']);
|
21 |
-
}
|
22 |
-
|
23 |
-
public function registerAdminTab($tabs)
|
24 |
-
{
|
25 |
-
$tabs['privacy-policy'] = gdpr()->make(AdminTabPrivacyPolicy::class);
|
26 |
-
|
27 |
-
return $tabs;
|
28 |
-
}
|
29 |
-
|
30 |
-
public function doShortcode($attributes)
|
31 |
-
{
|
32 |
-
$attributes = shortcode_atts([
|
33 |
-
'item' => null,
|
34 |
-
], $attributes);
|
35 |
-
|
36 |
-
switch ($attributes['item']) {
|
37 |
-
case 'company_name':
|
38 |
-
return esc_html(gdpr('options')->get('company_name'));
|
39 |
-
case 'company_email':
|
40 |
-
return esc_html(gdpr('options')->get('contact_email'));
|
41 |
-
case 'company_email_link':
|
42 |
-
$email = antispambot(gdpr('options')->get('contact_email'));
|
43 |
-
return "<a href='mailto:{$email}'>{$email}</a>";
|
44 |
-
case 'dpo_name':
|
45 |
-
return esc_html(gdpr('options')->get('dpo_name'));
|
46 |
-
case 'dpo_email':
|
47 |
-
return esc_html(gdpr('options')->get('dpo_email'));
|
48 |
-
case 'dpo_email_link':
|
49 |
-
$email = antispambot(gdpr('options')->get('dpo_email'));
|
50 |
-
return "<a href='mailto:{$email}'>{$email}</a>";
|
51 |
-
case 'rep_name':
|
52 |
-
return esc_html(gdpr('options')->get('representative_contact_name'));
|
53 |
-
case 'rep_email':
|
54 |
-
return esc_html(gdpr('options')->get('representative_contact_email'));
|
55 |
-
case 'rep_email_link':
|
56 |
-
$email = antispambot(gdpr('options')->get('representative_contact_email'));
|
57 |
-
return "<a href='mailto:{$email}'>{$email}</a>";
|
58 |
-
case 'authority_website':
|
59 |
-
return esc_html(gdpr('options')->get('dpa_website'));
|
60 |
-
case 'authority_email':
|
61 |
-
return esc_html(gdpr('options')->get('dpa_email'));
|
62 |
-
case 'authority_email_link':
|
63 |
-
$email = antispambot(gdpr('options')->get('dpa_email'));
|
64 |
-
return "<a href='mailto:{$email}'>{$email}</a>";
|
65 |
-
case 'authority_phone':
|
66 |
-
return esc_html(gdpr('options')->get('dpa_phone'));
|
67 |
-
case null:
|
68 |
-
return '';
|
69 |
-
}
|
70 |
-
|
71 |
-
return '';
|
72 |
-
}
|
73 |
-
|
74 |
-
public function renderUrlShortcode()
|
75 |
-
{
|
76 |
-
return gdpr('helpers')->getPrivacyPolicyPageUrl();
|
77 |
-
}
|
78 |
-
|
79 |
-
public function renderLinkShortcode($attributes)
|
80 |
-
{
|
81 |
-
$attributes = shortcode_atts([
|
82 |
-
'title' => __('Privacy Policy', 'gdpr-framework'),
|
83 |
-
], $attributes);
|
84 |
-
|
85 |
-
$url = gdpr('helpers')->getPrivacyPolicyPageUrl();
|
86 |
-
|
87 |
-
return
|
88 |
-
"<a href='{$url}'>" .
|
89 |
-
esc_html($attributes['title']) .
|
90 |
-
"</a>";
|
91 |
-
}
|
92 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\PrivacyPolicy;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Handles putting together and rendering the privacy policy page
|
7 |
+
*
|
8 |
+
* Class PrivacyPolicy
|
9 |
+
*
|
10 |
+
* @package Codelight\GDPR\Components\PrivacyPolicy
|
11 |
+
*/
|
12 |
+
class PrivacyPolicy
|
13 |
+
{
|
14 |
+
public function __construct()
|
15 |
+
{
|
16 |
+
add_filter('gdpr/admin/tabs', [$this, 'registerAdminTab'], 35);
|
17 |
+
|
18 |
+
add_shortcode('gdpr_privacy', [$this, 'doShortcode']);
|
19 |
+
add_shortcode('gdpr_privacy_policy_url', [$this, 'renderUrlShortcode']);
|
20 |
+
add_shortcode('gdpr_privacy_policy_link', [$this, 'renderLinkShortcode']);
|
21 |
+
}
|
22 |
+
|
23 |
+
public function registerAdminTab($tabs)
|
24 |
+
{
|
25 |
+
$tabs['privacy-policy'] = gdpr()->make(AdminTabPrivacyPolicy::class);
|
26 |
+
|
27 |
+
return $tabs;
|
28 |
+
}
|
29 |
+
|
30 |
+
public function doShortcode($attributes)
|
31 |
+
{
|
32 |
+
$attributes = shortcode_atts([
|
33 |
+
'item' => null,
|
34 |
+
], $attributes);
|
35 |
+
|
36 |
+
switch ($attributes['item']) {
|
37 |
+
case 'company_name':
|
38 |
+
return esc_html(gdpr('options')->get('company_name'));
|
39 |
+
case 'company_email':
|
40 |
+
return esc_html(gdpr('options')->get('contact_email'));
|
41 |
+
case 'company_email_link':
|
42 |
+
$email = antispambot(gdpr('options')->get('contact_email'));
|
43 |
+
return "<a href='mailto:{$email}'>{$email}</a>";
|
44 |
+
case 'dpo_name':
|
45 |
+
return esc_html(gdpr('options')->get('dpo_name'));
|
46 |
+
case 'dpo_email':
|
47 |
+
return esc_html(gdpr('options')->get('dpo_email'));
|
48 |
+
case 'dpo_email_link':
|
49 |
+
$email = antispambot(gdpr('options')->get('dpo_email'));
|
50 |
+
return "<a href='mailto:{$email}'>{$email}</a>";
|
51 |
+
case 'rep_name':
|
52 |
+
return esc_html(gdpr('options')->get('representative_contact_name'));
|
53 |
+
case 'rep_email':
|
54 |
+
return esc_html(gdpr('options')->get('representative_contact_email'));
|
55 |
+
case 'rep_email_link':
|
56 |
+
$email = antispambot(gdpr('options')->get('representative_contact_email'));
|
57 |
+
return "<a href='mailto:{$email}'>{$email}</a>";
|
58 |
+
case 'authority_website':
|
59 |
+
return esc_html(gdpr('options')->get('dpa_website'));
|
60 |
+
case 'authority_email':
|
61 |
+
return esc_html(gdpr('options')->get('dpa_email'));
|
62 |
+
case 'authority_email_link':
|
63 |
+
$email = antispambot(gdpr('options')->get('dpa_email'));
|
64 |
+
return "<a href='mailto:{$email}'>{$email}</a>";
|
65 |
+
case 'authority_phone':
|
66 |
+
return esc_html(gdpr('options')->get('dpa_phone'));
|
67 |
+
case null:
|
68 |
+
return '';
|
69 |
+
}
|
70 |
+
|
71 |
+
return '';
|
72 |
+
}
|
73 |
+
|
74 |
+
public function renderUrlShortcode()
|
75 |
+
{
|
76 |
+
return gdpr('helpers')->getPrivacyPolicyPageUrl();
|
77 |
+
}
|
78 |
+
|
79 |
+
public function renderLinkShortcode($attributes)
|
80 |
+
{
|
81 |
+
$attributes = shortcode_atts([
|
82 |
+
'title' => __('Privacy Policy', 'gdpr-framework'),
|
83 |
+
], $attributes);
|
84 |
+
|
85 |
+
$url = gdpr('helpers')->getPrivacyPolicyPageUrl();
|
86 |
+
|
87 |
+
return
|
88 |
+
"<a href='{$url}'>" .
|
89 |
+
esc_html($attributes['title']) .
|
90 |
+
"</a>";
|
91 |
+
}
|
92 |
+
}
|
src/Components/PrivacyToolsPage/PrivacyToolsPage.php
CHANGED
@@ -1,15 +1,15 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\PrivacyToolsPage;
|
4 |
-
|
5 |
-
class PrivacyToolsPage
|
6 |
-
{
|
7 |
-
public function __construct()
|
8 |
-
{
|
9 |
-
gdpr()->singleton(PrivacyToolsPageController::class);
|
10 |
-
gdpr()->make(PrivacyToolsPageShortcode::class);
|
11 |
-
|
12 |
-
gdpr()->singleton(PrivacyToolsPageShortcode::class);
|
13 |
-
gdpr()->make(PrivacyToolsPageShortcode::class);
|
14 |
-
}
|
15 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\PrivacyToolsPage;
|
4 |
+
|
5 |
+
class PrivacyToolsPage
|
6 |
+
{
|
7 |
+
public function __construct()
|
8 |
+
{
|
9 |
+
gdpr()->singleton(PrivacyToolsPageController::class);
|
10 |
+
gdpr()->make(PrivacyToolsPageShortcode::class);
|
11 |
+
|
12 |
+
gdpr()->singleton(PrivacyToolsPageShortcode::class);
|
13 |
+
gdpr()->make(PrivacyToolsPageShortcode::class);
|
14 |
+
}
|
15 |
}
|
src/Components/PrivacyToolsPage/PrivacyToolsPageController.php
CHANGED
@@ -1,278 +1,278 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\PrivacyToolsPage;
|
4 |
-
|
5 |
-
use Codelight\GDPR\DataSubject\DataSubject;
|
6 |
-
use Codelight\GDPR\DataSubject\DataSubjectAuthenticator;
|
7 |
-
use Codelight\GDPR\DataSubject\DataSubjectIdentificator;
|
8 |
-
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
9 |
-
use Codelight\GDPR\DataSubject\DataExporter;
|
10 |
-
|
11 |
-
/**
|
12 |
-
* Handle the data page on front-end
|
13 |
-
*
|
14 |
-
* Class DataPageController
|
15 |
-
*
|
16 |
-
* @package Codelight\GDPR\Components\DataPage
|
17 |
-
*/
|
18 |
-
class PrivacyToolsPageController
|
19 |
-
{
|
20 |
-
/* @var DataSubjectAuthenticator */
|
21 |
-
protected $dataSubjectAuthenticator;
|
22 |
-
|
23 |
-
/* @var DataSubjectIdentificator */
|
24 |
-
protected $dataSubjectIdentificator;
|
25 |
-
|
26 |
-
/* @var DataSubjectManager */
|
27 |
-
protected $dataSubjectManager;
|
28 |
-
|
29 |
-
/**
|
30 |
-
* DataPageController constructor.
|
31 |
-
*
|
32 |
-
* @param DataSubjectIdentificator $dataSubjectIdentificator
|
33 |
-
* @param DataSubjectManager $dataSubjectManager
|
34 |
-
*/
|
35 |
-
public function __construct(
|
36 |
-
DataSubjectAuthenticator $dataSubjectAuthenticator,
|
37 |
-
DataSubjectIdentificator $dataSubjectIdentificator,
|
38 |
-
DataSubjectManager $dataSubjectManager,
|
39 |
-
DataExporter $dataExporter
|
40 |
-
) {
|
41 |
-
$this->dataSubjectAuthenticator = $dataSubjectAuthenticator;
|
42 |
-
$this->dataSubjectIdentificator = $dataSubjectIdentificator;
|
43 |
-
$this->dataSubjectManager = $dataSubjectManager;
|
44 |
-
$this->dataExporter = $dataExporter;
|
45 |
-
|
46 |
-
if ( ! gdpr('options')->get('enable')) {
|
47 |
-
return;
|
48 |
-
}
|
49 |
-
|
50 |
-
$this->setup();
|
51 |
-
}
|
52 |
-
|
53 |
-
protected function setup()
|
54 |
-
{
|
55 |
-
add_action('wp_enqueue_scripts', [$this, 'enqueue']);
|
56 |
-
|
57 |
-
// Listen to 'identify' action and send an email
|
58 |
-
add_action('gdpr/frontend/action/identify', [$this, 'sendIdentificationEmail']);
|
59 |
-
|
60 |
-
add_action('gdpr/frontend/privacy-tools-page/content', [$this, 'renderConsentForm'], 10, 2);
|
61 |
-
add_action('gdpr/frontend/privacy-tools-page/content', [$this, 'renderExportForm'], 20, 2);
|
62 |
-
add_action('gdpr/frontend/privacy-tools-page/content', [$this, 'renderDeleteForm'], 30, 2);
|
63 |
-
|
64 |
-
add_action('gdpr/frontend/privacy-tools-page/action/withdraw_consent', [$this, 'withdrawConsent'], 10, 2);
|
65 |
-
add_action('gdpr/frontend/privacy-tools-page/action/export', [$this, 'export'], 10, 2);
|
66 |
-
add_action('gdpr/frontend/privacy-tools-page/action/forget', [$this, 'forget'], 10, 2);
|
67 |
-
}
|
68 |
-
|
69 |
-
public function enqueue()
|
70 |
-
{
|
71 |
-
if ( ! gdpr('options')->get('enable_stylesheet') || ! is_page(gdpr('options')->get('tools_page'))) {
|
72 |
-
return;
|
73 |
-
}
|
74 |
-
|
75 |
-
wp_enqueue_style(
|
76 |
-
'gdpr-framework-privacy-tools',
|
77 |
-
gdpr('config')->get('plugin.url') . 'assets/privacy-tools.css'
|
78 |
-
);
|
79 |
-
}
|
80 |
-
|
81 |
-
/**
|
82 |
-
* If the given email address exists as a data subject, send an authentication email to that address
|
83 |
-
*/
|
84 |
-
public function sendIdentificationEmail()
|
85 |
-
{
|
86 |
-
// Additional safety check
|
87 |
-
if ( ! is_email($_REQUEST['email'])) {
|
88 |
-
$this->redirect(['gdpr_notice' => 'invalid_email']);
|
89 |
-
}
|
90 |
-
|
91 |
-
if ($this->dataSubjectIdentificator->isDataSubject($_REQUEST['email'])) {
|
92 |
-
$this->dataSubjectIdentificator->sendIdentificationEmail($_REQUEST['email']);
|
93 |
-
} else {
|
94 |
-
$this->dataSubjectIdentificator->sendNoDataFoundEmail($_REQUEST['email']);
|
95 |
-
}
|
96 |
-
|
97 |
-
$this->redirect(['gdpr_notice' => 'email_sent']);
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Render the page contents.
|
102 |
-
* This is only called via the shortcode.
|
103 |
-
*/
|
104 |
-
public function render()
|
105 |
-
{
|
106 |
-
$dataSubject = $this->dataSubjectAuthenticator->authenticate();
|
107 |
-
$this->renderNotices();
|
108 |
-
|
109 |
-
if ($dataSubject) {
|
110 |
-
$this->renderPrivacyTools($dataSubject);
|
111 |
-
} else {
|
112 |
-
$this->renderIdentificationForm();
|
113 |
-
}
|
114 |
-
}
|
115 |
-
|
116 |
-
/**
|
117 |
-
* Display notices to the user.
|
118 |
-
* The contents of the notices are currently hardcoded inside the template.
|
119 |
-
*/
|
120 |
-
protected function renderNotices()
|
121 |
-
{
|
122 |
-
if ( ! isset($_REQUEST['gdpr_notice'])) {
|
123 |
-
return;
|
124 |
-
}
|
125 |
-
|
126 |
-
echo gdpr('view')->render('privacy-tools/notices');
|
127 |
-
}
|
128 |
-
|
129 |
-
/**
|
130 |
-
* Render the contents of the identification form
|
131 |
-
*/
|
132 |
-
protected function renderIdentificationForm()
|
133 |
-
{
|
134 |
-
$nonce = wp_create_nonce('gdpr/frontend/action/identify');
|
135 |
-
echo gdpr('view')->render('privacy-tools/form-identify', compact('nonce', 'notices'));
|
136 |
-
}
|
137 |
-
|
138 |
-
/**
|
139 |
-
* Render the contents of the Privacy Tools page
|
140 |
-
*
|
141 |
-
* @param DataSubject $dataSubject
|
142 |
-
*/
|
143 |
-
protected function renderPrivacyTools(DataSubject $dataSubject)
|
144 |
-
{
|
145 |
-
$email = $dataSubject->getEmail();
|
146 |
-
echo gdpr('view')->render('privacy-tools/privacy-tools', compact('dataSubject', 'email'));
|
147 |
-
}
|
148 |
-
|
149 |
-
/**
|
150 |
-
* Render the form that allows withdrawing consent
|
151 |
-
*
|
152 |
-
* @param DataSubject $dataSubject
|
153 |
-
*/
|
154 |
-
public function renderConsentForm(DataSubject $dataSubject)
|
155 |
-
{
|
156 |
-
$consentData = $dataSubject->getVisibleConsentData();
|
157 |
-
|
158 |
-
foreach ($consentData as &$item) {
|
159 |
-
$item['withdraw_url'] = add_query_arg([
|
160 |
-
'gdpr_action' => 'withdraw_consent',
|
161 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/frontend/privacy-tools-page/action/withdraw_consent"),
|
162 |
-
'email' => $dataSubject->getEmail(),
|
163 |
-
'consent' => $item['slug'],
|
164 |
-
]);
|
165 |
-
}
|
166 |
-
|
167 |
-
$consentInfo = apply_filters('the_content', gdpr('options')->get('consent_info'));
|
168 |
-
|
169 |
-
echo gdpr('view')->render(
|
170 |
-
"privacy-tools/form-consent",
|
171 |
-
compact('consentData', 'consentInfo')
|
172 |
-
);
|
173 |
-
}
|
174 |
-
|
175 |
-
/**
|
176 |
-
* Render the form that allows the data subject to export their data
|
177 |
-
*
|
178 |
-
* @param DataSubject $dataSubject
|
179 |
-
*/
|
180 |
-
public function renderExportForm(DataSubject $dataSubject)
|
181 |
-
{
|
182 |
-
$email = $dataSubject->getEmail();
|
183 |
-
$nonce = wp_create_nonce("gdpr/frontend/privacy-tools-page/action/export");
|
184 |
-
|
185 |
-
echo gdpr('view')->render(
|
186 |
-
"privacy-tools/form-export",
|
187 |
-
compact('email', 'nonce')
|
188 |
-
);
|
189 |
-
}
|
190 |
-
|
191 |
-
/**
|
192 |
-
* Render the form that allows the data subject to delete their data
|
193 |
-
*
|
194 |
-
* @param DataSubject $dataSubject
|
195 |
-
*/
|
196 |
-
public function renderDeleteForm(DataSubject $dataSubject)
|
197 |
-
{
|
198 |
-
// Let's not allow admins to delete themselves
|
199 |
-
if (current_user_can('manage_options')) {
|
200 |
-
echo gdpr('view')->render("privacy-tools/notice-admin-role");
|
201 |
-
|
202 |
-
return;
|
203 |
-
}
|
204 |
-
|
205 |
-
$action = 'forget';
|
206 |
-
$email = $dataSubject->getEmail();
|
207 |
-
$nonce = wp_create_nonce("gdpr/frontend/privacy-tools-page/action/forget");
|
208 |
-
|
209 |
-
echo gdpr('view')->render(
|
210 |
-
"privacy-tools/form-delete",
|
211 |
-
compact('action', 'email', 'nonce')
|
212 |
-
);
|
213 |
-
}
|
214 |
-
|
215 |
-
/**
|
216 |
-
* Withdraw the consent
|
217 |
-
*
|
218 |
-
* @param DataSubject $dataSubject
|
219 |
-
*/
|
220 |
-
public function withdrawConsent(DataSubject $dataSubject)
|
221 |
-
{
|
222 |
-
$dataSubject->withdrawConsent($_REQUEST['consent']);
|
223 |
-
$this->redirect(['gdpr_notice' => 'consent_withdrawn']);
|
224 |
-
}
|
225 |
-
|
226 |
-
/**
|
227 |
-
* Trigger the export action.
|
228 |
-
*
|
229 |
-
* @param DataSubject $dataSubject
|
230 |
-
*/
|
231 |
-
public function export(DataSubject $dataSubject)
|
232 |
-
{
|
233 |
-
$data = $dataSubject->export($_REQUEST['gdpr_format']);
|
234 |
-
|
235 |
-
if ( ! is_null($data)) {
|
236 |
-
// If there is data, download it
|
237 |
-
$this->dataExporter->export($data, $dataSubject, $_REQUEST['gdpr_format']);
|
238 |
-
} else {
|
239 |
-
// If there's no data, then show notification that your request has been sent.
|
240 |
-
$this->redirect(['gdpr_notice' => 'request_sent']);
|
241 |
-
}
|
242 |
-
}
|
243 |
-
|
244 |
-
/**
|
245 |
-
* Trigger the forget action.
|
246 |
-
*
|
247 |
-
* @param DataSubject $dataSubject
|
248 |
-
*/
|
249 |
-
public function forget(DataSubject $dataSubject)
|
250 |
-
{
|
251 |
-
$deleted = $dataSubject->forget();
|
252 |
-
|
253 |
-
if ($deleted) {
|
254 |
-
$this->dataSubjectAuthenticator->deleteSession();
|
255 |
-
$this->redirect(['gdpr_notice' => 'data_deleted']);
|
256 |
-
} else {
|
257 |
-
// If request was sent to admin, then show notification
|
258 |
-
$this->redirect(['gdpr_notice' => 'request_sent']);
|
259 |
-
}
|
260 |
-
|
261 |
-
}
|
262 |
-
|
263 |
-
/**
|
264 |
-
* Redirect the visitor to an appropriate location
|
265 |
-
*
|
266 |
-
* @param array $args
|
267 |
-
* @param null $baseUrl
|
268 |
-
*/
|
269 |
-
protected function redirect($args = [], $baseUrl = null)
|
270 |
-
{
|
271 |
-
if ( ! $baseUrl) {
|
272 |
-
$baseUrl = get_permalink(gdpr('options')->get('tools_page'));
|
273 |
-
}
|
274 |
-
|
275 |
-
wp_safe_redirect(add_query_arg($args, $baseUrl));
|
276 |
-
exit;
|
277 |
-
}
|
278 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\PrivacyToolsPage;
|
4 |
+
|
5 |
+
use Codelight\GDPR\DataSubject\DataSubject;
|
6 |
+
use Codelight\GDPR\DataSubject\DataSubjectAuthenticator;
|
7 |
+
use Codelight\GDPR\DataSubject\DataSubjectIdentificator;
|
8 |
+
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
9 |
+
use Codelight\GDPR\DataSubject\DataExporter;
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Handle the data page on front-end
|
13 |
+
*
|
14 |
+
* Class DataPageController
|
15 |
+
*
|
16 |
+
* @package Codelight\GDPR\Components\DataPage
|
17 |
+
*/
|
18 |
+
class PrivacyToolsPageController
|
19 |
+
{
|
20 |
+
/* @var DataSubjectAuthenticator */
|
21 |
+
protected $dataSubjectAuthenticator;
|
22 |
+
|
23 |
+
/* @var DataSubjectIdentificator */
|
24 |
+
protected $dataSubjectIdentificator;
|
25 |
+
|
26 |
+
/* @var DataSubjectManager */
|
27 |
+
protected $dataSubjectManager;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* DataPageController constructor.
|
31 |
+
*
|
32 |
+
* @param DataSubjectIdentificator $dataSubjectIdentificator
|
33 |
+
* @param DataSubjectManager $dataSubjectManager
|
34 |
+
*/
|
35 |
+
public function __construct(
|
36 |
+
DataSubjectAuthenticator $dataSubjectAuthenticator,
|
37 |
+
DataSubjectIdentificator $dataSubjectIdentificator,
|
38 |
+
DataSubjectManager $dataSubjectManager,
|
39 |
+
DataExporter $dataExporter
|
40 |
+
) {
|
41 |
+
$this->dataSubjectAuthenticator = $dataSubjectAuthenticator;
|
42 |
+
$this->dataSubjectIdentificator = $dataSubjectIdentificator;
|
43 |
+
$this->dataSubjectManager = $dataSubjectManager;
|
44 |
+
$this->dataExporter = $dataExporter;
|
45 |
+
|
46 |
+
if ( ! gdpr('options')->get('enable')) {
|
47 |
+
return;
|
48 |
+
}
|
49 |
+
|
50 |
+
$this->setup();
|
51 |
+
}
|
52 |
+
|
53 |
+
protected function setup()
|
54 |
+
{
|
55 |
+
add_action('wp_enqueue_scripts', [$this, 'enqueue']);
|
56 |
+
|
57 |
+
// Listen to 'identify' action and send an email
|
58 |
+
add_action('gdpr/frontend/action/identify', [$this, 'sendIdentificationEmail']);
|
59 |
+
|
60 |
+
add_action('gdpr/frontend/privacy-tools-page/content', [$this, 'renderConsentForm'], 10, 2);
|
61 |
+
add_action('gdpr/frontend/privacy-tools-page/content', [$this, 'renderExportForm'], 20, 2);
|
62 |
+
add_action('gdpr/frontend/privacy-tools-page/content', [$this, 'renderDeleteForm'], 30, 2);
|
63 |
+
|
64 |
+
add_action('gdpr/frontend/privacy-tools-page/action/withdraw_consent', [$this, 'withdrawConsent'], 10, 2);
|
65 |
+
add_action('gdpr/frontend/privacy-tools-page/action/export', [$this, 'export'], 10, 2);
|
66 |
+
add_action('gdpr/frontend/privacy-tools-page/action/forget', [$this, 'forget'], 10, 2);
|
67 |
+
}
|
68 |
+
|
69 |
+
public function enqueue()
|
70 |
+
{
|
71 |
+
if ( ! gdpr('options')->get('enable_stylesheet') || ! is_page(gdpr('options')->get('tools_page'))) {
|
72 |
+
return;
|
73 |
+
}
|
74 |
+
|
75 |
+
wp_enqueue_style(
|
76 |
+
'gdpr-framework-privacy-tools',
|
77 |
+
gdpr('config')->get('plugin.url') . 'assets/privacy-tools.css'
|
78 |
+
);
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* If the given email address exists as a data subject, send an authentication email to that address
|
83 |
+
*/
|
84 |
+
public function sendIdentificationEmail()
|
85 |
+
{
|
86 |
+
// Additional safety check
|
87 |
+
if ( ! is_email($_REQUEST['email'])) {
|
88 |
+
$this->redirect(['gdpr_notice' => 'invalid_email']);
|
89 |
+
}
|
90 |
+
|
91 |
+
if ($this->dataSubjectIdentificator->isDataSubject($_REQUEST['email'])) {
|
92 |
+
$this->dataSubjectIdentificator->sendIdentificationEmail($_REQUEST['email']);
|
93 |
+
} else {
|
94 |
+
$this->dataSubjectIdentificator->sendNoDataFoundEmail($_REQUEST['email']);
|
95 |
+
}
|
96 |
+
|
97 |
+
$this->redirect(['gdpr_notice' => 'email_sent']);
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Render the page contents.
|
102 |
+
* This is only called via the shortcode.
|
103 |
+
*/
|
104 |
+
public function render()
|
105 |
+
{
|
106 |
+
$dataSubject = $this->dataSubjectAuthenticator->authenticate();
|
107 |
+
$this->renderNotices();
|
108 |
+
|
109 |
+
if ($dataSubject) {
|
110 |
+
$this->renderPrivacyTools($dataSubject);
|
111 |
+
} else {
|
112 |
+
$this->renderIdentificationForm();
|
113 |
+
}
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Display notices to the user.
|
118 |
+
* The contents of the notices are currently hardcoded inside the template.
|
119 |
+
*/
|
120 |
+
protected function renderNotices()
|
121 |
+
{
|
122 |
+
if ( ! isset($_REQUEST['gdpr_notice'])) {
|
123 |
+
return;
|
124 |
+
}
|
125 |
+
|
126 |
+
echo gdpr('view')->render('privacy-tools/notices');
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Render the contents of the identification form
|
131 |
+
*/
|
132 |
+
protected function renderIdentificationForm()
|
133 |
+
{
|
134 |
+
$nonce = wp_create_nonce('gdpr/frontend/action/identify');
|
135 |
+
echo gdpr('view')->render('privacy-tools/form-identify', compact('nonce', 'notices'));
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Render the contents of the Privacy Tools page
|
140 |
+
*
|
141 |
+
* @param DataSubject $dataSubject
|
142 |
+
*/
|
143 |
+
protected function renderPrivacyTools(DataSubject $dataSubject)
|
144 |
+
{
|
145 |
+
$email = $dataSubject->getEmail();
|
146 |
+
echo gdpr('view')->render('privacy-tools/privacy-tools', compact('dataSubject', 'email'));
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Render the form that allows withdrawing consent
|
151 |
+
*
|
152 |
+
* @param DataSubject $dataSubject
|
153 |
+
*/
|
154 |
+
public function renderConsentForm(DataSubject $dataSubject)
|
155 |
+
{
|
156 |
+
$consentData = $dataSubject->getVisibleConsentData();
|
157 |
+
|
158 |
+
foreach ($consentData as &$item) {
|
159 |
+
$item['withdraw_url'] = add_query_arg([
|
160 |
+
'gdpr_action' => 'withdraw_consent',
|
161 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/frontend/privacy-tools-page/action/withdraw_consent"),
|
162 |
+
'email' => $dataSubject->getEmail(),
|
163 |
+
'consent' => $item['slug'],
|
164 |
+
]);
|
165 |
+
}
|
166 |
+
|
167 |
+
$consentInfo = apply_filters('the_content', gdpr('options')->get('consent_info'));
|
168 |
+
|
169 |
+
echo gdpr('view')->render(
|
170 |
+
"privacy-tools/form-consent",
|
171 |
+
compact('consentData', 'consentInfo')
|
172 |
+
);
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Render the form that allows the data subject to export their data
|
177 |
+
*
|
178 |
+
* @param DataSubject $dataSubject
|
179 |
+
*/
|
180 |
+
public function renderExportForm(DataSubject $dataSubject)
|
181 |
+
{
|
182 |
+
$email = $dataSubject->getEmail();
|
183 |
+
$nonce = wp_create_nonce("gdpr/frontend/privacy-tools-page/action/export");
|
184 |
+
|
185 |
+
echo gdpr('view')->render(
|
186 |
+
"privacy-tools/form-export",
|
187 |
+
compact('email', 'nonce')
|
188 |
+
);
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Render the form that allows the data subject to delete their data
|
193 |
+
*
|
194 |
+
* @param DataSubject $dataSubject
|
195 |
+
*/
|
196 |
+
public function renderDeleteForm(DataSubject $dataSubject)
|
197 |
+
{
|
198 |
+
// Let's not allow admins to delete themselves
|
199 |
+
if (current_user_can('manage_options')) {
|
200 |
+
echo gdpr('view')->render("privacy-tools/notice-admin-role");
|
201 |
+
|
202 |
+
return;
|
203 |
+
}
|
204 |
+
|
205 |
+
$action = 'forget';
|
206 |
+
$email = $dataSubject->getEmail();
|
207 |
+
$nonce = wp_create_nonce("gdpr/frontend/privacy-tools-page/action/forget");
|
208 |
+
|
209 |
+
echo gdpr('view')->render(
|
210 |
+
"privacy-tools/form-delete",
|
211 |
+
compact('action', 'email', 'nonce')
|
212 |
+
);
|
213 |
+
}
|
214 |
+
|
215 |
+
/**
|
216 |
+
* Withdraw the consent
|
217 |
+
*
|
218 |
+
* @param DataSubject $dataSubject
|
219 |
+
*/
|
220 |
+
public function withdrawConsent(DataSubject $dataSubject)
|
221 |
+
{
|
222 |
+
$dataSubject->withdrawConsent($_REQUEST['consent']);
|
223 |
+
$this->redirect(['gdpr_notice' => 'consent_withdrawn']);
|
224 |
+
}
|
225 |
+
|
226 |
+
/**
|
227 |
+
* Trigger the export action.
|
228 |
+
*
|
229 |
+
* @param DataSubject $dataSubject
|
230 |
+
*/
|
231 |
+
public function export(DataSubject $dataSubject)
|
232 |
+
{
|
233 |
+
$data = $dataSubject->export($_REQUEST['gdpr_format']);
|
234 |
+
|
235 |
+
if ( ! is_null($data)) {
|
236 |
+
// If there is data, download it
|
237 |
+
$this->dataExporter->export($data, $dataSubject, $_REQUEST['gdpr_format']);
|
238 |
+
} else {
|
239 |
+
// If there's no data, then show notification that your request has been sent.
|
240 |
+
$this->redirect(['gdpr_notice' => 'request_sent']);
|
241 |
+
}
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* Trigger the forget action.
|
246 |
+
*
|
247 |
+
* @param DataSubject $dataSubject
|
248 |
+
*/
|
249 |
+
public function forget(DataSubject $dataSubject)
|
250 |
+
{
|
251 |
+
$deleted = $dataSubject->forget();
|
252 |
+
|
253 |
+
if ($deleted) {
|
254 |
+
$this->dataSubjectAuthenticator->deleteSession();
|
255 |
+
$this->redirect(['gdpr_notice' => 'data_deleted']);
|
256 |
+
} else {
|
257 |
+
// If request was sent to admin, then show notification
|
258 |
+
$this->redirect(['gdpr_notice' => 'request_sent']);
|
259 |
+
}
|
260 |
+
|
261 |
+
}
|
262 |
+
|
263 |
+
/**
|
264 |
+
* Redirect the visitor to an appropriate location
|
265 |
+
*
|
266 |
+
* @param array $args
|
267 |
+
* @param null $baseUrl
|
268 |
+
*/
|
269 |
+
protected function redirect($args = [], $baseUrl = null)
|
270 |
+
{
|
271 |
+
if ( ! $baseUrl) {
|
272 |
+
$baseUrl = get_permalink(gdpr('options')->get('tools_page'));
|
273 |
+
}
|
274 |
+
|
275 |
+
wp_safe_redirect(add_query_arg($args, $baseUrl));
|
276 |
+
exit;
|
277 |
+
}
|
278 |
+
}
|
src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php
CHANGED
@@ -1,45 +1,45 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\PrivacyToolsPage;
|
4 |
-
|
5 |
-
class PrivacyToolsPageShortcode
|
6 |
-
{
|
7 |
-
public function __construct(PrivacyToolsPageController $controller)
|
8 |
-
{
|
9 |
-
$this->controller = $controller;
|
10 |
-
|
11 |
-
add_shortcode('gdpr_privacy_tools', [$this, 'renderPage']);
|
12 |
-
add_shortcode('gdpr_privacy_tools_url', [$this, 'renderUrlShortcode']);
|
13 |
-
add_shortcode('gdpr_privacy_tools_link', [$this, 'renderLinkShortcode']);
|
14 |
-
}
|
15 |
-
|
16 |
-
public function renderPage()
|
17 |
-
{
|
18 |
-
if (!gdpr('options')->get('enable')) {
|
19 |
-
return __('This page is currently disabled.', 'gdpr-framework');
|
20 |
-
}
|
21 |
-
|
22 |
-
ob_start();
|
23 |
-
$this->controller->render();
|
24 |
-
return ob_get_clean();
|
25 |
-
}
|
26 |
-
|
27 |
-
public function renderUrlShortcode()
|
28 |
-
{
|
29 |
-
return gdpr('helpers')->getPrivacyToolsPageUrl();
|
30 |
-
}
|
31 |
-
|
32 |
-
public function renderLinkShortcode($attributes)
|
33 |
-
{
|
34 |
-
$attributes = shortcode_atts([
|
35 |
-
'title' => __('Privacy Tools', 'gdpr-framework'),
|
36 |
-
], $attributes);
|
37 |
-
|
38 |
-
$url = gdpr('helpers')->getPrivacyToolsPageUrl();
|
39 |
-
|
40 |
-
return
|
41 |
-
"<a href='{$url}'>" .
|
42 |
-
esc_html($attributes['title']) .
|
43 |
-
"</a>";
|
44 |
-
}
|
45 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\PrivacyToolsPage;
|
4 |
+
|
5 |
+
class PrivacyToolsPageShortcode
|
6 |
+
{
|
7 |
+
public function __construct(PrivacyToolsPageController $controller)
|
8 |
+
{
|
9 |
+
$this->controller = $controller;
|
10 |
+
|
11 |
+
add_shortcode('gdpr_privacy_tools', [$this, 'renderPage']);
|
12 |
+
add_shortcode('gdpr_privacy_tools_url', [$this, 'renderUrlShortcode']);
|
13 |
+
add_shortcode('gdpr_privacy_tools_link', [$this, 'renderLinkShortcode']);
|
14 |
+
}
|
15 |
+
|
16 |
+
public function renderPage()
|
17 |
+
{
|
18 |
+
if (!gdpr('options')->get('enable')) {
|
19 |
+
return __('This page is currently disabled.', 'gdpr-framework');
|
20 |
+
}
|
21 |
+
|
22 |
+
ob_start();
|
23 |
+
$this->controller->render();
|
24 |
+
return ob_get_clean();
|
25 |
+
}
|
26 |
+
|
27 |
+
public function renderUrlShortcode()
|
28 |
+
{
|
29 |
+
return gdpr('helpers')->getPrivacyToolsPageUrl();
|
30 |
+
}
|
31 |
+
|
32 |
+
public function renderLinkShortcode($attributes)
|
33 |
+
{
|
34 |
+
$attributes = shortcode_atts([
|
35 |
+
'title' => __('Privacy Tools', 'gdpr-framework'),
|
36 |
+
], $attributes);
|
37 |
+
|
38 |
+
$url = gdpr('helpers')->getPrivacyToolsPageUrl();
|
39 |
+
|
40 |
+
return
|
41 |
+
"<a href='{$url}'>" .
|
42 |
+
esc_html($attributes['title']) .
|
43 |
+
"</a>";
|
44 |
+
}
|
45 |
+
}
|
src/Components/Support/AdminTabSupport.php
CHANGED
@@ -1,34 +1,34 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\Support;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Admin\AdminTab;
|
6 |
-
|
7 |
-
class AdminTabSupport extends AdminTab
|
8 |
-
{
|
9 |
-
protected $slug = 'support';
|
10 |
-
|
11 |
-
public function __construct()
|
12 |
-
{
|
13 |
-
$this->title = _x('Support', '(Admin)', 'gdpr-framework');
|
14 |
-
}
|
15 |
-
|
16 |
-
public function init()
|
17 |
-
{
|
18 |
-
$this->registerSettingSection(
|
19 |
-
'gdpr-section-support',
|
20 |
-
_x('Support', '(Admin)', 'gdpr-framework'),
|
21 |
-
[$this, 'renderTab']
|
22 |
-
);
|
23 |
-
}
|
24 |
-
|
25 |
-
public function renderTab()
|
26 |
-
{
|
27 |
-
echo gdpr('view')->render('admin/support/contents');
|
28 |
-
}
|
29 |
-
|
30 |
-
public function renderSubmitButton()
|
31 |
-
{
|
32 |
-
// Intentionally left blank
|
33 |
-
}
|
34 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\Support;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Admin\AdminTab;
|
6 |
+
|
7 |
+
class AdminTabSupport extends AdminTab
|
8 |
+
{
|
9 |
+
protected $slug = 'support';
|
10 |
+
|
11 |
+
public function __construct()
|
12 |
+
{
|
13 |
+
$this->title = _x('Support', '(Admin)', 'gdpr-framework');
|
14 |
+
}
|
15 |
+
|
16 |
+
public function init()
|
17 |
+
{
|
18 |
+
$this->registerSettingSection(
|
19 |
+
'gdpr-section-support',
|
20 |
+
_x('Support', '(Admin)', 'gdpr-framework'),
|
21 |
+
[$this, 'renderTab']
|
22 |
+
);
|
23 |
+
}
|
24 |
+
|
25 |
+
public function renderTab()
|
26 |
+
{
|
27 |
+
echo gdpr('view')->render('admin/support/contents');
|
28 |
+
}
|
29 |
+
|
30 |
+
public function renderSubmitButton()
|
31 |
+
{
|
32 |
+
// Intentionally left blank
|
33 |
+
}
|
34 |
+
}
|
src/Components/Support/Support.php
CHANGED
@@ -1,18 +1,18 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\Support;
|
4 |
-
|
5 |
-
class Support
|
6 |
-
{
|
7 |
-
public function __construct()
|
8 |
-
{
|
9 |
-
add_filter('gdpr/admin/tabs', [$this, 'registerTab'], 40);
|
10 |
-
}
|
11 |
-
|
12 |
-
public function registerTab($tabs)
|
13 |
-
{
|
14 |
-
$tabs['support'] = gdpr()->make(AdminTabSupport::class);
|
15 |
-
|
16 |
-
return $tabs;
|
17 |
-
}
|
18 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\Support;
|
4 |
+
|
5 |
+
class Support
|
6 |
+
{
|
7 |
+
public function __construct()
|
8 |
+
{
|
9 |
+
add_filter('gdpr/admin/tabs', [$this, 'registerTab'], 40);
|
10 |
+
}
|
11 |
+
|
12 |
+
public function registerTab($tabs)
|
13 |
+
{
|
14 |
+
$tabs['support'] = gdpr()->make(AdminTabSupport::class);
|
15 |
+
|
16 |
+
return $tabs;
|
17 |
+
}
|
18 |
+
}
|
src/Components/WordpressComments/WordpressComments.php
CHANGED
@@ -1,195 +1,195 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\WordpressComments;
|
4 |
-
|
5 |
-
use Codelight\GDPR\DataSubject\DataSubject;
|
6 |
-
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
7 |
-
|
8 |
-
class WordpressComments
|
9 |
-
{
|
10 |
-
/* @var DataSubjectManager */
|
11 |
-
protected $dataSubjectManager;
|
12 |
-
|
13 |
-
public function __construct(DataSubjectManager $dataSubjectManager)
|
14 |
-
{
|
15 |
-
$this->dataSubjectManager = $dataSubjectManager;
|
16 |
-
|
17 |
-
$this->setup();
|
18 |
-
}
|
19 |
-
|
20 |
-
public function setup()
|
21 |
-
{
|
22 |
-
if (gdpr('options')->get('policy_page')) {
|
23 |
-
add_action('comment_form_after_fields', [$this, 'maybeAddCommentFormCheckbox']);
|
24 |
-
add_action('comment_form_logged_in_after', [$this, 'maybeAddCommentFormCheckbox']);
|
25 |
-
|
26 |
-
add_filter('preprocess_comment', [$this, 'validate']);
|
27 |
-
}
|
28 |
-
|
29 |
-
add_filter('gdpr/data-subject/data', [$this, 'getExportData'], 1, 2);
|
30 |
-
add_action('gdpr/data-subject/delete', [$this, 'deleteComments']);
|
31 |
-
add_action('gdpr/data-subject/anonymize', [$this, 'deleteComments']);
|
32 |
-
}
|
33 |
-
|
34 |
-
/**
|
35 |
-
* Check if consent is needed
|
36 |
-
*
|
37 |
-
* @return bool
|
38 |
-
*/
|
39 |
-
public function needsConsent($email = null)
|
40 |
-
{
|
41 |
-
if ($email) {
|
42 |
-
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
43 |
-
} else {
|
44 |
-
$dataSubject = $this->dataSubjectManager->getByLoggedInUser();
|
45 |
-
}
|
46 |
-
|
47 |
-
return !($dataSubject && $dataSubject->hasConsented('privacy-policy'));
|
48 |
-
}
|
49 |
-
|
50 |
-
/**
|
51 |
-
* If consent is needed, render the checkbox
|
52 |
-
*
|
53 |
-
* @param $fields
|
54 |
-
*/
|
55 |
-
public function maybeAddCommentFormCheckbox()
|
56 |
-
{
|
57 |
-
$email = isset($_POST['email']) ? $_POST['email'] : null;
|
58 |
-
|
59 |
-
if (!$this->needsConsent($email)) {
|
60 |
-
return;
|
61 |
-
}
|
62 |
-
|
63 |
-
$privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
|
64 |
-
$termsPage = gdpr('options')->get('terms_page');
|
65 |
-
if ($termsPage) {
|
66 |
-
$termsUrl = get_permalink($termsPage);
|
67 |
-
} else {
|
68 |
-
$termsUrl = false;
|
69 |
-
}
|
70 |
-
|
71 |
-
echo gdpr('view')->render(
|
72 |
-
'modules/wordpress-comments/terms-checkbox',
|
73 |
-
compact('termsUrl', 'privacyPolicyUrl')
|
74 |
-
);
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* If consent is needed, validate it
|
79 |
-
*/
|
80 |
-
public function validate($commentData)
|
81 |
-
{
|
82 |
-
if (is_user_logged_in() && is_admin()) {
|
83 |
-
$allowedRoles = apply_filters('gdpr/roles/comments', ['administrator', 'editor', 'shop_manager']);
|
84 |
-
|
85 |
-
foreach (wp_get_current_user()->roles as $userRole) {
|
86 |
-
if (in_array($userRole, $allowedRoles)) {
|
87 |
-
return $commentData;
|
88 |
-
}
|
89 |
-
}
|
90 |
-
}
|
91 |
-
|
92 |
-
$email = isset($_POST['email']) ? $_POST['email'] : null;
|
93 |
-
|
94 |
-
if (!$this->needsConsent($email)) {
|
95 |
-
return $commentData;
|
96 |
-
}
|
97 |
-
|
98 |
-
if (!isset($_POST['gdpr_terms']) || !$_POST['gdpr_terms']) {
|
99 |
-
wp_die(
|
100 |
-
sprintf(
|
101 |
-
__('%sERROR:%s You need to accept the terms and conditions to post a comment.'),
|
102 |
-
'<strong>',
|
103 |
-
'</strong>'
|
104 |
-
)
|
105 |
-
);
|
106 |
-
} else {
|
107 |
-
if (is_user_logged_in()) {
|
108 |
-
$dataSubject = $this->dataSubjectManager->getByLoggedInUser();
|
109 |
-
} else {
|
110 |
-
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
111 |
-
}
|
112 |
-
$dataSubject->giveConsent('privacy-policy');
|
113 |
-
}
|
114 |
-
|
115 |
-
return $commentData;
|
116 |
-
}
|
117 |
-
|
118 |
-
/**
|
119 |
-
* Add comments as well as comment meta to export data
|
120 |
-
*
|
121 |
-
* @param $data
|
122 |
-
* @param $email
|
123 |
-
* @param $dataSubject
|
124 |
-
* @return mixed
|
125 |
-
*/
|
126 |
-
public function getExportData($data, $email)
|
127 |
-
{
|
128 |
-
$comments = $this->getCommentsByEmail($email);
|
129 |
-
|
130 |
-
if (count($comments)) {
|
131 |
-
|
132 |
-
foreach ($comments as $comment) {
|
133 |
-
/* @var $comment \WP_Comment */
|
134 |
-
|
135 |
-
$commentData = [
|
136 |
-
'comment_author' => $comment->comment_author,
|
137 |
-
'comment_author_email' => $comment->comment_author_email,
|
138 |
-
'comment_author_url' => $comment->comment_author_url,
|
139 |
-
'comment_author_IP' => $comment->comment_author_IP,
|
140 |
-
'comment_date' => $comment->comment_date,
|
141 |
-
'comment_date_gmt' => $comment->comment_date_gmt,
|
142 |
-
'comment_content' => $comment->comment_content,
|
143 |
-
'comment_approved' => $comment->comment_approved,
|
144 |
-
'comment_agent' => $comment->comment_agent,
|
145 |
-
];
|
146 |
-
|
147 |
-
$commentMeta = get_comment_meta($comment->comment_ID);
|
148 |
-
if (!empty($commentMeta)) {
|
149 |
-
$commentData['comment_meta'] = $commentMeta;
|
150 |
-
}
|
151 |
-
|
152 |
-
$data['comments'][] = $commentData;
|
153 |
-
}
|
154 |
-
}
|
155 |
-
|
156 |
-
return $data;
|
157 |
-
}
|
158 |
-
|
159 |
-
public function deleteComments($email)
|
160 |
-
{
|
161 |
-
$comments = $this->getCommentsByEmail($email);
|
162 |
-
|
163 |
-
if (!count($comments)) {
|
164 |
-
return;
|
165 |
-
}
|
166 |
-
|
167 |
-
foreach ($comments as $comment) {
|
168 |
-
/* @var $comment \WP_Comment */
|
169 |
-
wp_delete_comment($comment->comment_ID, true);
|
170 |
-
}
|
171 |
-
}
|
172 |
-
|
173 |
-
/**
|
174 |
-
* Todo: this currently doesn't include spam or trashed comments
|
175 |
-
*
|
176 |
-
* @param $email
|
177 |
-
* @return array|int
|
178 |
-
*/
|
179 |
-
public function getCommentsByEmail($email)
|
180 |
-
{
|
181 |
-
if (!$email || !is_email($email)) {
|
182 |
-
return [];
|
183 |
-
}
|
184 |
-
|
185 |
-
$query = new \WP_Comment_Query;
|
186 |
-
|
187 |
-
$comments = $query->query([
|
188 |
-
'author_email' => $email,
|
189 |
-
'include_unapproved' => true,
|
190 |
-
'status' => 'all',
|
191 |
-
]);
|
192 |
-
|
193 |
-
return $comments;
|
194 |
-
}
|
195 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\WordpressComments;
|
4 |
+
|
5 |
+
use Codelight\GDPR\DataSubject\DataSubject;
|
6 |
+
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
7 |
+
|
8 |
+
class WordpressComments
|
9 |
+
{
|
10 |
+
/* @var DataSubjectManager */
|
11 |
+
protected $dataSubjectManager;
|
12 |
+
|
13 |
+
public function __construct(DataSubjectManager $dataSubjectManager)
|
14 |
+
{
|
15 |
+
$this->dataSubjectManager = $dataSubjectManager;
|
16 |
+
|
17 |
+
$this->setup();
|
18 |
+
}
|
19 |
+
|
20 |
+
public function setup()
|
21 |
+
{
|
22 |
+
if (gdpr('options')->get('policy_page')) {
|
23 |
+
add_action('comment_form_after_fields', [$this, 'maybeAddCommentFormCheckbox']);
|
24 |
+
add_action('comment_form_logged_in_after', [$this, 'maybeAddCommentFormCheckbox']);
|
25 |
+
|
26 |
+
add_filter('preprocess_comment', [$this, 'validate']);
|
27 |
+
}
|
28 |
+
|
29 |
+
add_filter('gdpr/data-subject/data', [$this, 'getExportData'], 1, 2);
|
30 |
+
add_action('gdpr/data-subject/delete', [$this, 'deleteComments']);
|
31 |
+
add_action('gdpr/data-subject/anonymize', [$this, 'deleteComments']);
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Check if consent is needed
|
36 |
+
*
|
37 |
+
* @return bool
|
38 |
+
*/
|
39 |
+
public function needsConsent($email = null)
|
40 |
+
{
|
41 |
+
if ($email) {
|
42 |
+
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
43 |
+
} else {
|
44 |
+
$dataSubject = $this->dataSubjectManager->getByLoggedInUser();
|
45 |
+
}
|
46 |
+
|
47 |
+
return !($dataSubject && $dataSubject->hasConsented('privacy-policy'));
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* If consent is needed, render the checkbox
|
52 |
+
*
|
53 |
+
* @param $fields
|
54 |
+
*/
|
55 |
+
public function maybeAddCommentFormCheckbox()
|
56 |
+
{
|
57 |
+
$email = isset($_POST['email']) ? $_POST['email'] : null;
|
58 |
+
|
59 |
+
if (!$this->needsConsent($email)) {
|
60 |
+
return;
|
61 |
+
}
|
62 |
+
|
63 |
+
$privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
|
64 |
+
$termsPage = gdpr('options')->get('terms_page');
|
65 |
+
if ($termsPage) {
|
66 |
+
$termsUrl = get_permalink($termsPage);
|
67 |
+
} else {
|
68 |
+
$termsUrl = false;
|
69 |
+
}
|
70 |
+
|
71 |
+
echo gdpr('view')->render(
|
72 |
+
'modules/wordpress-comments/terms-checkbox',
|
73 |
+
compact('termsUrl', 'privacyPolicyUrl')
|
74 |
+
);
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* If consent is needed, validate it
|
79 |
+
*/
|
80 |
+
public function validate($commentData)
|
81 |
+
{
|
82 |
+
if (is_user_logged_in() && is_admin()) {
|
83 |
+
$allowedRoles = apply_filters('gdpr/roles/comments', ['administrator', 'editor', 'shop_manager']);
|
84 |
+
|
85 |
+
foreach (wp_get_current_user()->roles as $userRole) {
|
86 |
+
if (in_array($userRole, $allowedRoles)) {
|
87 |
+
return $commentData;
|
88 |
+
}
|
89 |
+
}
|
90 |
+
}
|
91 |
+
|
92 |
+
$email = isset($_POST['email']) ? $_POST['email'] : null;
|
93 |
+
|
94 |
+
if (!$this->needsConsent($email)) {
|
95 |
+
return $commentData;
|
96 |
+
}
|
97 |
+
|
98 |
+
if (!isset($_POST['gdpr_terms']) || !$_POST['gdpr_terms']) {
|
99 |
+
wp_die(
|
100 |
+
sprintf(
|
101 |
+
__('%sERROR:%s You need to accept the terms and conditions to post a comment.'),
|
102 |
+
'<strong>',
|
103 |
+
'</strong>'
|
104 |
+
)
|
105 |
+
);
|
106 |
+
} else {
|
107 |
+
if (is_user_logged_in()) {
|
108 |
+
$dataSubject = $this->dataSubjectManager->getByLoggedInUser();
|
109 |
+
} else {
|
110 |
+
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
111 |
+
}
|
112 |
+
$dataSubject->giveConsent('privacy-policy');
|
113 |
+
}
|
114 |
+
|
115 |
+
return $commentData;
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Add comments as well as comment meta to export data
|
120 |
+
*
|
121 |
+
* @param $data
|
122 |
+
* @param $email
|
123 |
+
* @param $dataSubject
|
124 |
+
* @return mixed
|
125 |
+
*/
|
126 |
+
public function getExportData($data, $email)
|
127 |
+
{
|
128 |
+
$comments = $this->getCommentsByEmail($email);
|
129 |
+
|
130 |
+
if (count($comments)) {
|
131 |
+
|
132 |
+
foreach ($comments as $comment) {
|
133 |
+
/* @var $comment \WP_Comment */
|
134 |
+
|
135 |
+
$commentData = [
|
136 |
+
'comment_author' => $comment->comment_author,
|
137 |
+
'comment_author_email' => $comment->comment_author_email,
|
138 |
+
'comment_author_url' => $comment->comment_author_url,
|
139 |
+
'comment_author_IP' => $comment->comment_author_IP,
|
140 |
+
'comment_date' => $comment->comment_date,
|
141 |
+
'comment_date_gmt' => $comment->comment_date_gmt,
|
142 |
+
'comment_content' => $comment->comment_content,
|
143 |
+
'comment_approved' => $comment->comment_approved,
|
144 |
+
'comment_agent' => $comment->comment_agent,
|
145 |
+
];
|
146 |
+
|
147 |
+
$commentMeta = get_comment_meta($comment->comment_ID);
|
148 |
+
if (!empty($commentMeta)) {
|
149 |
+
$commentData['comment_meta'] = $commentMeta;
|
150 |
+
}
|
151 |
+
|
152 |
+
$data['comments'][] = $commentData;
|
153 |
+
}
|
154 |
+
}
|
155 |
+
|
156 |
+
return $data;
|
157 |
+
}
|
158 |
+
|
159 |
+
public function deleteComments($email)
|
160 |
+
{
|
161 |
+
$comments = $this->getCommentsByEmail($email);
|
162 |
+
|
163 |
+
if (!count($comments)) {
|
164 |
+
return;
|
165 |
+
}
|
166 |
+
|
167 |
+
foreach ($comments as $comment) {
|
168 |
+
/* @var $comment \WP_Comment */
|
169 |
+
wp_delete_comment($comment->comment_ID, true);
|
170 |
+
}
|
171 |
+
}
|
172 |
+
|
173 |
+
/**
|
174 |
+
* Todo: this currently doesn't include spam or trashed comments
|
175 |
+
*
|
176 |
+
* @param $email
|
177 |
+
* @return array|int
|
178 |
+
*/
|
179 |
+
public function getCommentsByEmail($email)
|
180 |
+
{
|
181 |
+
if (!$email || !is_email($email)) {
|
182 |
+
return [];
|
183 |
+
}
|
184 |
+
|
185 |
+
$query = new \WP_Comment_Query;
|
186 |
+
|
187 |
+
$comments = $query->query([
|
188 |
+
'author_email' => $email,
|
189 |
+
'include_unapproved' => true,
|
190 |
+
'status' => 'all',
|
191 |
+
]);
|
192 |
+
|
193 |
+
return $comments;
|
194 |
+
}
|
195 |
}
|
src/Components/WordpressUser/Controllers/DashboardDataPageController.php
CHANGED
@@ -1,197 +1,197 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\WordpressUser\Controllers;
|
4 |
-
|
5 |
-
use Codelight\GDPR\DataSubject\DataExporter;
|
6 |
-
use Codelight\GDPR\DataSubject\DataSubject;
|
7 |
-
use Codelight\GDPR\DataSubject\DataSubjectAuthenticator;
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Handles Users > Privacy Tools page
|
11 |
-
*
|
12 |
-
* Class DashboardDataPageController
|
13 |
-
*
|
14 |
-
* @package Codelight\GDPR\Modules\WordpressUser\Controllers
|
15 |
-
*/
|
16 |
-
class DashboardDataPageController
|
17 |
-
{
|
18 |
-
/**
|
19 |
-
* DashboardDataPageController constructor.
|
20 |
-
*
|
21 |
-
* @param DataExporter $dataExporter
|
22 |
-
*/
|
23 |
-
public function __construct(DataExporter $dataExporter, DataSubjectAuthenticator $dataSubjectAuthenticator)
|
24 |
-
{
|
25 |
-
$this->dataExporter = $dataExporter;
|
26 |
-
$this->dataSubjectAuthenticator = $dataSubjectAuthenticator;
|
27 |
-
|
28 |
-
add_action('gdpr/dashboard/privacy-tools/content', [$this, 'renderHeader'], 10);
|
29 |
-
add_action('gdpr/dashboard/privacy-tools/content', [$this, 'renderConsentForm'], 20);
|
30 |
-
add_action('gdpr/dashboard/privacy-tools/content', [$this, 'renderExportForm'], 30);
|
31 |
-
add_action('gdpr/dashboard/privacy-tools/content', [$this, 'renderDeleteForm'], 40);
|
32 |
-
|
33 |
-
add_action('gdpr/dashboard/privacy-tools/action/withdraw_consent', [$this, 'withdrawConsent']);
|
34 |
-
add_action('gdpr/dashboard/privacy-tools/action/export', [$this, 'export']);
|
35 |
-
add_action('gdpr/dashboard/privacy-tools/action/forget', [$this, 'forget']);
|
36 |
-
|
37 |
-
add_action('admin_notices', [$this, 'renderAdminNotices']);
|
38 |
-
}
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Render success notices via admin_notice action
|
42 |
-
*/
|
43 |
-
public function renderAdminNotices()
|
44 |
-
{
|
45 |
-
if ('profile_page_gdpr-profile' !== get_current_screen()->base) {
|
46 |
-
return;
|
47 |
-
}
|
48 |
-
|
49 |
-
if (!isset($_REQUEST['gdpr_notice'])) {
|
50 |
-
return;
|
51 |
-
}
|
52 |
-
|
53 |
-
if ('request_sent' === $_REQUEST['gdpr_notice']) {
|
54 |
-
$message = __('We have received your request and will reply within 30 days.', 'gdpr-framework');
|
55 |
-
$class = 'notice notice-success';
|
56 |
-
}
|
57 |
-
|
58 |
-
if ('consent_withdrawn' === $_REQUEST['gdpr_notice']) {
|
59 |
-
$message = __('Consent withdrawn.', 'gdpr-framework');
|
60 |
-
$class = 'notice notice-success';
|
61 |
-
}
|
62 |
-
|
63 |
-
echo gdpr('view')->render('admin/notice', compact('message', 'class'));
|
64 |
-
}
|
65 |
-
|
66 |
-
/**
|
67 |
-
* Render page header
|
68 |
-
*/
|
69 |
-
public function renderHeader()
|
70 |
-
{
|
71 |
-
echo gdpr('view')->render(
|
72 |
-
"modules/wordpress-user/dashboard/data-page/header"
|
73 |
-
);
|
74 |
-
}
|
75 |
-
|
76 |
-
/**
|
77 |
-
* Render the consent form
|
78 |
-
*
|
79 |
-
* @param DataSubject $dataSubject
|
80 |
-
*/
|
81 |
-
public function renderConsentForm(DataSubject $dataSubject)
|
82 |
-
{
|
83 |
-
$consentData = $dataSubject->getVisibleConsentData();
|
84 |
-
|
85 |
-
foreach ($consentData as &$item) {
|
86 |
-
$item['withdraw_url'] = add_query_arg([
|
87 |
-
'gdpr_action' => 'withdraw_consent',
|
88 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/dashboard/privacy-tools/action/withdraw_consent"),
|
89 |
-
'email' => $dataSubject->getEmail(),
|
90 |
-
'consent' => $item['slug'],
|
91 |
-
]);
|
92 |
-
}
|
93 |
-
|
94 |
-
$consentInfo = apply_filters('the_content', gdpr('options')->get('consent_info'));
|
95 |
-
|
96 |
-
echo gdpr('view')->render(
|
97 |
-
"modules/wordpress-user/dashboard/data-page/form-consent",
|
98 |
-
compact('consentData', 'consentInfo')
|
99 |
-
);
|
100 |
-
}
|
101 |
-
|
102 |
-
/**
|
103 |
-
* Render the buttons that allow exporting data
|
104 |
-
*/
|
105 |
-
public function renderExportForm()
|
106 |
-
{
|
107 |
-
$exportHTMLUrl = add_query_arg([
|
108 |
-
'gdpr_action' => 'export',
|
109 |
-
'gdpr_format' => 'html',
|
110 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/dashboard/privacy-tools/action/export"),
|
111 |
-
]);
|
112 |
-
|
113 |
-
$exportJSONUrl = add_query_arg([
|
114 |
-
'gdpr_action' => 'export',
|
115 |
-
'gdpr_format' => 'json',
|
116 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/dashboard/privacy-tools/action/export"),
|
117 |
-
]);
|
118 |
-
|
119 |
-
echo gdpr('view')->render(
|
120 |
-
"modules/wordpress-user/dashboard/form-export",
|
121 |
-
compact('exportHTMLUrl', 'exportJSONUrl')
|
122 |
-
);
|
123 |
-
}
|
124 |
-
|
125 |
-
/**
|
126 |
-
* Render the delete data button
|
127 |
-
*/
|
128 |
-
public function renderDeleteForm()
|
129 |
-
{
|
130 |
-
$showDelete = !current_user_can('manage_options');
|
131 |
-
$url = add_query_arg([
|
132 |
-
'gdpr_action' => 'forget',
|
133 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/dashboard/privacy-tools/action/forget"),
|
134 |
-
]);
|
135 |
-
|
136 |
-
echo gdpr('view')->render(
|
137 |
-
"modules/wordpress-user/dashboard/data-page/form-delete",
|
138 |
-
compact('url', 'showDelete')
|
139 |
-
);
|
140 |
-
}
|
141 |
-
|
142 |
-
/**
|
143 |
-
* @param DataSubject $dataSubject
|
144 |
-
*/
|
145 |
-
public function withdrawConsent(DataSubject $dataSubject)
|
146 |
-
{
|
147 |
-
$dataSubject->withdrawConsent($_REQUEST['consent']);
|
148 |
-
$this->redirect(['gdpr_notice' => 'consent_withdrawn']);
|
149 |
-
}
|
150 |
-
|
151 |
-
/**
|
152 |
-
* @param DataSubject $dataSubject
|
153 |
-
*/
|
154 |
-
public function export(DataSubject $dataSubject)
|
155 |
-
{
|
156 |
-
$data = $dataSubject->export($_REQUEST['gdpr_format']);
|
157 |
-
|
158 |
-
if (!is_null($data)) {
|
159 |
-
// If there is data, download it
|
160 |
-
$this->dataExporter->export($data, $dataSubject, $_REQUEST['gdpr_format']);
|
161 |
-
} else {
|
162 |
-
// If there's no data, then show notification that your request has been sent.
|
163 |
-
$this->redirect(['gdpr_notice' => 'request_sent']);
|
164 |
-
}
|
165 |
-
}
|
166 |
-
|
167 |
-
/**
|
168 |
-
* @param DataSubject $dataSubject
|
169 |
-
*/
|
170 |
-
public function forget(DataSubject $dataSubject)
|
171 |
-
{
|
172 |
-
$status = $dataSubject->forget();
|
173 |
-
|
174 |
-
if (!$status) {
|
175 |
-
$this->redirect(['gdpr_notice' => 'request_sent']);
|
176 |
-
} else {
|
177 |
-
$this->dataSubjectAuthenticator->deleteSession();
|
178 |
-
$this->redirect([], '/');
|
179 |
-
}
|
180 |
-
}
|
181 |
-
|
182 |
-
/**
|
183 |
-
* Redirect the visitor to an appropriate location
|
184 |
-
*
|
185 |
-
* @param array $args
|
186 |
-
* @param null $baseUrl
|
187 |
-
*/
|
188 |
-
protected function redirect($args = [], $baseUrl = null)
|
189 |
-
{
|
190 |
-
if (!$baseUrl) {
|
191 |
-
$baseUrl = gdpr('helpers')->getDashboardDataPageUrl();
|
192 |
-
}
|
193 |
-
|
194 |
-
wp_safe_redirect(add_query_arg($args, $baseUrl));
|
195 |
-
exit;
|
196 |
-
}
|
197 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\WordpressUser\Controllers;
|
4 |
+
|
5 |
+
use Codelight\GDPR\DataSubject\DataExporter;
|
6 |
+
use Codelight\GDPR\DataSubject\DataSubject;
|
7 |
+
use Codelight\GDPR\DataSubject\DataSubjectAuthenticator;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Handles Users > Privacy Tools page
|
11 |
+
*
|
12 |
+
* Class DashboardDataPageController
|
13 |
+
*
|
14 |
+
* @package Codelight\GDPR\Modules\WordpressUser\Controllers
|
15 |
+
*/
|
16 |
+
class DashboardDataPageController
|
17 |
+
{
|
18 |
+
/**
|
19 |
+
* DashboardDataPageController constructor.
|
20 |
+
*
|
21 |
+
* @param DataExporter $dataExporter
|
22 |
+
*/
|
23 |
+
public function __construct(DataExporter $dataExporter, DataSubjectAuthenticator $dataSubjectAuthenticator)
|
24 |
+
{
|
25 |
+
$this->dataExporter = $dataExporter;
|
26 |
+
$this->dataSubjectAuthenticator = $dataSubjectAuthenticator;
|
27 |
+
|
28 |
+
add_action('gdpr/dashboard/privacy-tools/content', [$this, 'renderHeader'], 10);
|
29 |
+
add_action('gdpr/dashboard/privacy-tools/content', [$this, 'renderConsentForm'], 20);
|
30 |
+
add_action('gdpr/dashboard/privacy-tools/content', [$this, 'renderExportForm'], 30);
|
31 |
+
add_action('gdpr/dashboard/privacy-tools/content', [$this, 'renderDeleteForm'], 40);
|
32 |
+
|
33 |
+
add_action('gdpr/dashboard/privacy-tools/action/withdraw_consent', [$this, 'withdrawConsent']);
|
34 |
+
add_action('gdpr/dashboard/privacy-tools/action/export', [$this, 'export']);
|
35 |
+
add_action('gdpr/dashboard/privacy-tools/action/forget', [$this, 'forget']);
|
36 |
+
|
37 |
+
add_action('admin_notices', [$this, 'renderAdminNotices']);
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Render success notices via admin_notice action
|
42 |
+
*/
|
43 |
+
public function renderAdminNotices()
|
44 |
+
{
|
45 |
+
if ('profile_page_gdpr-profile' !== get_current_screen()->base) {
|
46 |
+
return;
|
47 |
+
}
|
48 |
+
|
49 |
+
if (!isset($_REQUEST['gdpr_notice'])) {
|
50 |
+
return;
|
51 |
+
}
|
52 |
+
|
53 |
+
if ('request_sent' === $_REQUEST['gdpr_notice']) {
|
54 |
+
$message = __('We have received your request and will reply within 30 days.', 'gdpr-framework');
|
55 |
+
$class = 'notice notice-success';
|
56 |
+
}
|
57 |
+
|
58 |
+
if ('consent_withdrawn' === $_REQUEST['gdpr_notice']) {
|
59 |
+
$message = __('Consent withdrawn.', 'gdpr-framework');
|
60 |
+
$class = 'notice notice-success';
|
61 |
+
}
|
62 |
+
|
63 |
+
echo gdpr('view')->render('admin/notice', compact('message', 'class'));
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Render page header
|
68 |
+
*/
|
69 |
+
public function renderHeader()
|
70 |
+
{
|
71 |
+
echo gdpr('view')->render(
|
72 |
+
"modules/wordpress-user/dashboard/data-page/header"
|
73 |
+
);
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Render the consent form
|
78 |
+
*
|
79 |
+
* @param DataSubject $dataSubject
|
80 |
+
*/
|
81 |
+
public function renderConsentForm(DataSubject $dataSubject)
|
82 |
+
{
|
83 |
+
$consentData = $dataSubject->getVisibleConsentData();
|
84 |
+
|
85 |
+
foreach ($consentData as &$item) {
|
86 |
+
$item['withdraw_url'] = add_query_arg([
|
87 |
+
'gdpr_action' => 'withdraw_consent',
|
88 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/dashboard/privacy-tools/action/withdraw_consent"),
|
89 |
+
'email' => $dataSubject->getEmail(),
|
90 |
+
'consent' => $item['slug'],
|
91 |
+
]);
|
92 |
+
}
|
93 |
+
|
94 |
+
$consentInfo = apply_filters('the_content', gdpr('options')->get('consent_info'));
|
95 |
+
|
96 |
+
echo gdpr('view')->render(
|
97 |
+
"modules/wordpress-user/dashboard/data-page/form-consent",
|
98 |
+
compact('consentData', 'consentInfo')
|
99 |
+
);
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Render the buttons that allow exporting data
|
104 |
+
*/
|
105 |
+
public function renderExportForm()
|
106 |
+
{
|
107 |
+
$exportHTMLUrl = add_query_arg([
|
108 |
+
'gdpr_action' => 'export',
|
109 |
+
'gdpr_format' => 'html',
|
110 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/dashboard/privacy-tools/action/export"),
|
111 |
+
]);
|
112 |
+
|
113 |
+
$exportJSONUrl = add_query_arg([
|
114 |
+
'gdpr_action' => 'export',
|
115 |
+
'gdpr_format' => 'json',
|
116 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/dashboard/privacy-tools/action/export"),
|
117 |
+
]);
|
118 |
+
|
119 |
+
echo gdpr('view')->render(
|
120 |
+
"modules/wordpress-user/dashboard/form-export",
|
121 |
+
compact('exportHTMLUrl', 'exportJSONUrl')
|
122 |
+
);
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Render the delete data button
|
127 |
+
*/
|
128 |
+
public function renderDeleteForm()
|
129 |
+
{
|
130 |
+
$showDelete = !current_user_can('manage_options');
|
131 |
+
$url = add_query_arg([
|
132 |
+
'gdpr_action' => 'forget',
|
133 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/dashboard/privacy-tools/action/forget"),
|
134 |
+
]);
|
135 |
+
|
136 |
+
echo gdpr('view')->render(
|
137 |
+
"modules/wordpress-user/dashboard/data-page/form-delete",
|
138 |
+
compact('url', 'showDelete')
|
139 |
+
);
|
140 |
+
}
|
141 |
+
|
142 |
+
/**
|
143 |
+
* @param DataSubject $dataSubject
|
144 |
+
*/
|
145 |
+
public function withdrawConsent(DataSubject $dataSubject)
|
146 |
+
{
|
147 |
+
$dataSubject->withdrawConsent($_REQUEST['consent']);
|
148 |
+
$this->redirect(['gdpr_notice' => 'consent_withdrawn']);
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* @param DataSubject $dataSubject
|
153 |
+
*/
|
154 |
+
public function export(DataSubject $dataSubject)
|
155 |
+
{
|
156 |
+
$data = $dataSubject->export($_REQUEST['gdpr_format']);
|
157 |
+
|
158 |
+
if (!is_null($data)) {
|
159 |
+
// If there is data, download it
|
160 |
+
$this->dataExporter->export($data, $dataSubject, $_REQUEST['gdpr_format']);
|
161 |
+
} else {
|
162 |
+
// If there's no data, then show notification that your request has been sent.
|
163 |
+
$this->redirect(['gdpr_notice' => 'request_sent']);
|
164 |
+
}
|
165 |
+
}
|
166 |
+
|
167 |
+
/**
|
168 |
+
* @param DataSubject $dataSubject
|
169 |
+
*/
|
170 |
+
public function forget(DataSubject $dataSubject)
|
171 |
+
{
|
172 |
+
$status = $dataSubject->forget();
|
173 |
+
|
174 |
+
if (!$status) {
|
175 |
+
$this->redirect(['gdpr_notice' => 'request_sent']);
|
176 |
+
} else {
|
177 |
+
$this->dataSubjectAuthenticator->deleteSession();
|
178 |
+
$this->redirect([], '/');
|
179 |
+
}
|
180 |
+
}
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Redirect the visitor to an appropriate location
|
184 |
+
*
|
185 |
+
* @param array $args
|
186 |
+
* @param null $baseUrl
|
187 |
+
*/
|
188 |
+
protected function redirect($args = [], $baseUrl = null)
|
189 |
+
{
|
190 |
+
if (!$baseUrl) {
|
191 |
+
$baseUrl = gdpr('helpers')->getDashboardDataPageUrl();
|
192 |
+
}
|
193 |
+
|
194 |
+
wp_safe_redirect(add_query_arg($args, $baseUrl));
|
195 |
+
exit;
|
196 |
+
}
|
197 |
+
}
|
src/Components/WordpressUser/Controllers/DashboardProfilePageController.php
CHANGED
@@ -1,123 +1,123 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\WordpressUser\Controllers;
|
4 |
-
|
5 |
-
use Codelight\GDPR\DataSubject\DataExporter;
|
6 |
-
use Codelight\GDPR\DataSubject\DataSubject;
|
7 |
-
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
8 |
-
|
9 |
-
class DashboardProfilePageController
|
10 |
-
{
|
11 |
-
public function __construct(DataSubjectManager $dataSubjectManager, DataExporter $dataExporter)
|
12 |
-
{
|
13 |
-
$this->dataSubjectManager = $dataSubjectManager;
|
14 |
-
$this->dataExporter = $dataExporter;
|
15 |
-
|
16 |
-
add_action('gdpr/dashboard/profile-page/content', [$this, 'renderHeader'], 10);
|
17 |
-
add_action('gdpr/dashboard/profile-page/content', [$this, 'renderConsentTable'], 20);
|
18 |
-
add_action('gdpr/dashboard/profile-page/content', [$this, 'renderExportForm'], 30);
|
19 |
-
add_action('gdpr/dashboard/profile-page/content', [$this, 'renderDeleteForm'], 40);
|
20 |
-
|
21 |
-
add_action('gdpr/admin/action/export', [$this, 'export']);
|
22 |
-
add_action('gdpr/admin/action/forget', [$this, 'forget']);
|
23 |
-
}
|
24 |
-
|
25 |
-
protected function isUserAnonymized(DataSubject $dataSubject)
|
26 |
-
{
|
27 |
-
return !$dataSubject->getEmail();
|
28 |
-
}
|
29 |
-
|
30 |
-
public function renderHeader(DataSubject $dataSubject)
|
31 |
-
{
|
32 |
-
$isAnonymized = $this->isUserAnonymized($dataSubject);
|
33 |
-
|
34 |
-
echo gdpr('view')->render(
|
35 |
-
"modules/wordpress-user/dashboard/profile-page/header",
|
36 |
-
compact('isAnonymized')
|
37 |
-
);
|
38 |
-
}
|
39 |
-
|
40 |
-
public function renderConsentTable(DataSubject $dataSubject)
|
41 |
-
{
|
42 |
-
if ($this->isUserAnonymized($dataSubject)) {
|
43 |
-
return;
|
44 |
-
}
|
45 |
-
|
46 |
-
$consentData = $dataSubject->getConsentData();
|
47 |
-
|
48 |
-
echo gdpr('view')->render(
|
49 |
-
"modules/wordpress-user/dashboard/profile-page/table-consent",
|
50 |
-
compact('consentData')
|
51 |
-
);
|
52 |
-
}
|
53 |
-
|
54 |
-
public function renderExportForm(DataSubject $dataSubject)
|
55 |
-
{
|
56 |
-
if ($this->isUserAnonymized($dataSubject)) {
|
57 |
-
return;
|
58 |
-
}
|
59 |
-
|
60 |
-
$exportHTMLUrl = add_query_arg([
|
61 |
-
'gdpr_action' => 'export',
|
62 |
-
'gdpr_format' => 'html',
|
63 |
-
'gdpr_email' => $dataSubject->getEmail(),
|
64 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
|
65 |
-
]);
|
66 |
-
|
67 |
-
$exportJSONUrl = add_query_arg([
|
68 |
-
'gdpr_action' => 'export',
|
69 |
-
'gdpr_format' => 'json',
|
70 |
-
'gdpr_email' => $dataSubject->getEmail(),
|
71 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
|
72 |
-
]);
|
73 |
-
|
74 |
-
echo gdpr('view')->render(
|
75 |
-
"modules/wordpress-user/dashboard/form-export",
|
76 |
-
compact('exportHTMLUrl', 'exportJSONUrl')
|
77 |
-
);
|
78 |
-
}
|
79 |
-
|
80 |
-
public function renderDeleteForm(DataSubject $dataSubject)
|
81 |
-
{
|
82 |
-
if ($this->isUserAnonymized($dataSubject)) {
|
83 |
-
return;
|
84 |
-
}
|
85 |
-
|
86 |
-
// Hide the delete button away from site admins on their own profile page to avoid accidents
|
87 |
-
$showDelete = !(current_user_can('manage_options') && wp_get_current_user()->ID === $dataSubject->getUserId());
|
88 |
-
|
89 |
-
$anonymizeUrl = add_query_arg([
|
90 |
-
'gdpr_email' => $dataSubject->getEmail(),
|
91 |
-
'gdpr_action' => 'forget',
|
92 |
-
'gdpr_force_action' => 'anonymize',
|
93 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
|
94 |
-
]);
|
95 |
-
|
96 |
-
$deleteUrl = add_query_arg([
|
97 |
-
'gdpr_email' => $dataSubject->getEmail(),
|
98 |
-
'gdpr_action' => 'forget',
|
99 |
-
'gdpr_force_action' => 'delete',
|
100 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
|
101 |
-
]);
|
102 |
-
|
103 |
-
echo gdpr('view')->render(
|
104 |
-
"modules/wordpress-user/dashboard/profile-page/form-delete",
|
105 |
-
compact('anonymizeUrl', 'deleteUrl', 'showDelete')
|
106 |
-
);
|
107 |
-
}
|
108 |
-
|
109 |
-
public function export()
|
110 |
-
{
|
111 |
-
$dataSubject = $this->dataSubjectManager->getByEmail($_REQUEST['gdpr_email']);
|
112 |
-
$data = $dataSubject->export($_REQUEST['gdpr_format'], true);
|
113 |
-
$this->dataExporter->export($data, $dataSubject, $_REQUEST['gdpr_format']);
|
114 |
-
}
|
115 |
-
|
116 |
-
public function forget()
|
117 |
-
{
|
118 |
-
$dataSubject = $this->dataSubjectManager->getByEmail($_REQUEST['gdpr_email']);
|
119 |
-
$dataSubject->forget($_REQUEST['gdpr_force_action']);
|
120 |
-
|
121 |
-
wp_safe_redirect(admin_url('users.php'));
|
122 |
-
}
|
123 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\WordpressUser\Controllers;
|
4 |
+
|
5 |
+
use Codelight\GDPR\DataSubject\DataExporter;
|
6 |
+
use Codelight\GDPR\DataSubject\DataSubject;
|
7 |
+
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
8 |
+
|
9 |
+
class DashboardProfilePageController
|
10 |
+
{
|
11 |
+
public function __construct(DataSubjectManager $dataSubjectManager, DataExporter $dataExporter)
|
12 |
+
{
|
13 |
+
$this->dataSubjectManager = $dataSubjectManager;
|
14 |
+
$this->dataExporter = $dataExporter;
|
15 |
+
|
16 |
+
add_action('gdpr/dashboard/profile-page/content', [$this, 'renderHeader'], 10);
|
17 |
+
add_action('gdpr/dashboard/profile-page/content', [$this, 'renderConsentTable'], 20);
|
18 |
+
add_action('gdpr/dashboard/profile-page/content', [$this, 'renderExportForm'], 30);
|
19 |
+
add_action('gdpr/dashboard/profile-page/content', [$this, 'renderDeleteForm'], 40);
|
20 |
+
|
21 |
+
add_action('gdpr/admin/action/export', [$this, 'export']);
|
22 |
+
add_action('gdpr/admin/action/forget', [$this, 'forget']);
|
23 |
+
}
|
24 |
+
|
25 |
+
protected function isUserAnonymized(DataSubject $dataSubject)
|
26 |
+
{
|
27 |
+
return !$dataSubject->getEmail();
|
28 |
+
}
|
29 |
+
|
30 |
+
public function renderHeader(DataSubject $dataSubject)
|
31 |
+
{
|
32 |
+
$isAnonymized = $this->isUserAnonymized($dataSubject);
|
33 |
+
|
34 |
+
echo gdpr('view')->render(
|
35 |
+
"modules/wordpress-user/dashboard/profile-page/header",
|
36 |
+
compact('isAnonymized')
|
37 |
+
);
|
38 |
+
}
|
39 |
+
|
40 |
+
public function renderConsentTable(DataSubject $dataSubject)
|
41 |
+
{
|
42 |
+
if ($this->isUserAnonymized($dataSubject)) {
|
43 |
+
return;
|
44 |
+
}
|
45 |
+
|
46 |
+
$consentData = $dataSubject->getConsentData();
|
47 |
+
|
48 |
+
echo gdpr('view')->render(
|
49 |
+
"modules/wordpress-user/dashboard/profile-page/table-consent",
|
50 |
+
compact('consentData')
|
51 |
+
);
|
52 |
+
}
|
53 |
+
|
54 |
+
public function renderExportForm(DataSubject $dataSubject)
|
55 |
+
{
|
56 |
+
if ($this->isUserAnonymized($dataSubject)) {
|
57 |
+
return;
|
58 |
+
}
|
59 |
+
|
60 |
+
$exportHTMLUrl = add_query_arg([
|
61 |
+
'gdpr_action' => 'export',
|
62 |
+
'gdpr_format' => 'html',
|
63 |
+
'gdpr_email' => $dataSubject->getEmail(),
|
64 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
|
65 |
+
]);
|
66 |
+
|
67 |
+
$exportJSONUrl = add_query_arg([
|
68 |
+
'gdpr_action' => 'export',
|
69 |
+
'gdpr_format' => 'json',
|
70 |
+
'gdpr_email' => $dataSubject->getEmail(),
|
71 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
|
72 |
+
]);
|
73 |
+
|
74 |
+
echo gdpr('view')->render(
|
75 |
+
"modules/wordpress-user/dashboard/form-export",
|
76 |
+
compact('exportHTMLUrl', 'exportJSONUrl')
|
77 |
+
);
|
78 |
+
}
|
79 |
+
|
80 |
+
public function renderDeleteForm(DataSubject $dataSubject)
|
81 |
+
{
|
82 |
+
if ($this->isUserAnonymized($dataSubject)) {
|
83 |
+
return;
|
84 |
+
}
|
85 |
+
|
86 |
+
// Hide the delete button away from site admins on their own profile page to avoid accidents
|
87 |
+
$showDelete = !(current_user_can('manage_options') && wp_get_current_user()->ID === $dataSubject->getUserId());
|
88 |
+
|
89 |
+
$anonymizeUrl = add_query_arg([
|
90 |
+
'gdpr_email' => $dataSubject->getEmail(),
|
91 |
+
'gdpr_action' => 'forget',
|
92 |
+
'gdpr_force_action' => 'anonymize',
|
93 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
|
94 |
+
]);
|
95 |
+
|
96 |
+
$deleteUrl = add_query_arg([
|
97 |
+
'gdpr_email' => $dataSubject->getEmail(),
|
98 |
+
'gdpr_action' => 'forget',
|
99 |
+
'gdpr_force_action' => 'delete',
|
100 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
|
101 |
+
]);
|
102 |
+
|
103 |
+
echo gdpr('view')->render(
|
104 |
+
"modules/wordpress-user/dashboard/profile-page/form-delete",
|
105 |
+
compact('anonymizeUrl', 'deleteUrl', 'showDelete')
|
106 |
+
);
|
107 |
+
}
|
108 |
+
|
109 |
+
public function export()
|
110 |
+
{
|
111 |
+
$dataSubject = $this->dataSubjectManager->getByEmail($_REQUEST['gdpr_email']);
|
112 |
+
$data = $dataSubject->export($_REQUEST['gdpr_format'], true);
|
113 |
+
$this->dataExporter->export($data, $dataSubject, $_REQUEST['gdpr_format']);
|
114 |
+
}
|
115 |
+
|
116 |
+
public function forget()
|
117 |
+
{
|
118 |
+
$dataSubject = $this->dataSubjectManager->getByEmail($_REQUEST['gdpr_email']);
|
119 |
+
$dataSubject->forget($_REQUEST['gdpr_force_action']);
|
120 |
+
|
121 |
+
wp_safe_redirect(admin_url('users.php'));
|
122 |
+
}
|
123 |
+
}
|
src/Components/WordpressUser/DataManager.php
CHANGED
@@ -1,151 +1,151 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\WordpressUser;
|
4 |
-
|
5 |
-
use Codelight\GDPR\DataSubject\DataSubject;
|
6 |
-
|
7 |
-
class DataManager
|
8 |
-
{
|
9 |
-
public function getData(DataSubject $dataSubject)
|
10 |
-
{
|
11 |
-
$user = $dataSubject->getUser();
|
12 |
-
if ($user) {
|
13 |
-
$meta = get_user_meta($user->ID);
|
14 |
-
$data['meta'] = $meta;
|
15 |
-
} else {
|
16 |
-
$data = [];
|
17 |
-
}
|
18 |
-
|
19 |
-
$whitelist = [
|
20 |
-
'nickname',
|
21 |
-
'first_name',
|
22 |
-
'last_name',
|
23 |
-
'description',
|
24 |
-
'locale',
|
25 |
-
'community-events-location',
|
26 |
-
];
|
27 |
-
|
28 |
-
if (isset($data['meta']) && count($data['meta'])) {
|
29 |
-
foreach ($data['meta'] as $key => $value) {
|
30 |
-
if (!in_array($key, $whitelist)) {
|
31 |
-
unset($data['meta'][$key]);
|
32 |
-
}
|
33 |
-
}
|
34 |
-
}
|
35 |
-
|
36 |
-
// Remove session keys. Just in case.
|
37 |
-
if (isset($meta) && isset($meta['session_tokens']) && count($meta['session_tokens'])) {
|
38 |
-
foreach ($meta['session_tokens'] as $token) {
|
39 |
-
foreach (unserialize($token) as $key => $tokenData) {
|
40 |
-
$data['meta']['session_tokens'][] = $tokenData;
|
41 |
-
}
|
42 |
-
}
|
43 |
-
}
|
44 |
-
|
45 |
-
/*
|
46 |
-
$blacklist = [
|
47 |
-
'use_ssl',
|
48 |
-
'show_admin_bar_front',
|
49 |
-
'wp_capabilities',
|
50 |
-
'wp_user_level',
|
51 |
-
'dismissed_wp_pointers',
|
52 |
-
'show_welcome_panel',
|
53 |
-
'wp_dashboard_quick_press_last_post_id',
|
54 |
-
'wp_user-settings',
|
55 |
-
'wp_user-settings-time',
|
56 |
-
'closedpostboxes_page',
|
57 |
-
'metaboxhidden_page',
|
58 |
-
'session_tokens',
|
59 |
-
'managenav-menuscolumnshidden',
|
60 |
-
'metaboxhidden_nav-menus',
|
61 |
-
'nav_menu_recently_edited',
|
62 |
-
'acf_user_settings',
|
63 |
-
];
|
64 |
-
|
65 |
-
// Blacklist some data
|
66 |
-
if (isset($data['meta']) && count($data['meta'])) {
|
67 |
-
foreach ($data['meta'] as $key => $value) {
|
68 |
-
if (in_array($key, $blacklist)) {
|
69 |
-
unset($data['meta'][$key]);
|
70 |
-
}
|
71 |
-
}
|
72 |
-
|
73 |
-
$data['meta'] = array_diff_assoc($data['meta'], $blacklist);
|
74 |
-
}
|
75 |
-
*/
|
76 |
-
|
77 |
-
return apply_filters('gdpr/wordpress-user/export/data', $data);
|
78 |
-
}
|
79 |
-
|
80 |
-
public function deleteUser(DataSubject $dataSubject, $reassign = null)
|
81 |
-
{
|
82 |
-
require_once(ABSPATH . 'wp-admin/includes/user.php');
|
83 |
-
|
84 |
-
$reassignOption = gdpr('options')->get('delete_action_reassign');
|
85 |
-
if ('reassign' === $reassignOption) {
|
86 |
-
$reassignUserId = gdpr('options')->get('delete_action_reassign_user');
|
87 |
-
} else {
|
88 |
-
$reassignUserId = false;
|
89 |
-
}
|
90 |
-
|
91 |
-
wp_delete_user($dataSubject->getUserId(), $reassignUserId);
|
92 |
-
}
|
93 |
-
|
94 |
-
public function anonymizeUser(DataSubject $dataSubject, $anonymizedId)
|
95 |
-
{
|
96 |
-
if (!$dataSubject->hasUser()) {
|
97 |
-
return;
|
98 |
-
}
|
99 |
-
|
100 |
-
if (!$anonymizedId) {
|
101 |
-
gdpr('helpers')->error();
|
102 |
-
}
|
103 |
-
|
104 |
-
// Save a unique identifier to tie anonymized data together for analytics purposes
|
105 |
-
update_user_meta($dataSubject->getUserId(), "gdpr_anonymized_id", $anonymizedId);
|
106 |
-
|
107 |
-
// Change username
|
108 |
-
global $wpdb;
|
109 |
-
|
110 |
-
$anonymizedUsername = apply_filters('gdpr/wordpress-user/anonymize/username', '[anonymous]');
|
111 |
-
$wpdb->update(
|
112 |
-
$wpdb->users,
|
113 |
-
['user_login' => $anonymizedUsername],
|
114 |
-
['ID' => $dataSubject->getUserId()]
|
115 |
-
);
|
116 |
-
|
117 |
-
// Clear all relevant user fields, reset password
|
118 |
-
wp_update_user([
|
119 |
-
'ID' => $dataSubject->getUserId(),
|
120 |
-
'user_email' => '',
|
121 |
-
'user_nicename' => '',
|
122 |
-
'user_url' => '',
|
123 |
-
'user_activation_key' => '',
|
124 |
-
'display_name' => $anonymizedUsername,
|
125 |
-
// Set a random password, just in case the functionality that disallows users from logging in should break for any reason
|
126 |
-
'user_pass' => wp_hash_password(wp_generate_password()),
|
127 |
-
]);
|
128 |
-
|
129 |
-
// Clear all relevant usermeta fields
|
130 |
-
delete_user_meta($dataSubject->getUserId(), 'first_name');
|
131 |
-
delete_user_meta($dataSubject->getUserId(), 'last_name');
|
132 |
-
delete_user_meta($dataSubject->getUserId(), 'nickname');
|
133 |
-
delete_user_meta($dataSubject->getUserId(), 'description');
|
134 |
-
delete_user_meta($dataSubject->getUserId(), 'session_tokens');
|
135 |
-
delete_user_meta($dataSubject->getUserId(), 'community-events-location');
|
136 |
-
|
137 |
-
// Remove all capabilities
|
138 |
-
$user = $dataSubject->getUser();
|
139 |
-
$user->remove_all_caps();
|
140 |
-
|
141 |
-
// Finally, assign the 'anonymous' role to user
|
142 |
-
if (apply_filters('gdpr/wordpress-user/anonymize/change_role', true) && get_role('anonymous')) {
|
143 |
-
|
144 |
-
foreach ($user->roles as $role) {
|
145 |
-
$user->remove_role($role);
|
146 |
-
}
|
147 |
-
|
148 |
-
$user->add_role('anonymous');
|
149 |
-
}
|
150 |
-
}
|
151 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\WordpressUser;
|
4 |
+
|
5 |
+
use Codelight\GDPR\DataSubject\DataSubject;
|
6 |
+
|
7 |
+
class DataManager
|
8 |
+
{
|
9 |
+
public function getData(DataSubject $dataSubject)
|
10 |
+
{
|
11 |
+
$user = $dataSubject->getUser();
|
12 |
+
if ($user) {
|
13 |
+
$meta = get_user_meta($user->ID);
|
14 |
+
$data['meta'] = $meta;
|
15 |
+
} else {
|
16 |
+
$data = [];
|
17 |
+
}
|
18 |
+
|
19 |
+
$whitelist = [
|
20 |
+
'nickname',
|
21 |
+
'first_name',
|
22 |
+
'last_name',
|
23 |
+
'description',
|
24 |
+
'locale',
|
25 |
+
'community-events-location',
|
26 |
+
];
|
27 |
+
|
28 |
+
if (isset($data['meta']) && count($data['meta'])) {
|
29 |
+
foreach ($data['meta'] as $key => $value) {
|
30 |
+
if (!in_array($key, $whitelist)) {
|
31 |
+
unset($data['meta'][$key]);
|
32 |
+
}
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
// Remove session keys. Just in case.
|
37 |
+
if (isset($meta) && isset($meta['session_tokens']) && count($meta['session_tokens'])) {
|
38 |
+
foreach ($meta['session_tokens'] as $token) {
|
39 |
+
foreach (unserialize($token) as $key => $tokenData) {
|
40 |
+
$data['meta']['session_tokens'][] = $tokenData;
|
41 |
+
}
|
42 |
+
}
|
43 |
+
}
|
44 |
+
|
45 |
+
/*
|
46 |
+
$blacklist = [
|
47 |
+
'use_ssl',
|
48 |
+
'show_admin_bar_front',
|
49 |
+
'wp_capabilities',
|
50 |
+
'wp_user_level',
|
51 |
+
'dismissed_wp_pointers',
|
52 |
+
'show_welcome_panel',
|
53 |
+
'wp_dashboard_quick_press_last_post_id',
|
54 |
+
'wp_user-settings',
|
55 |
+
'wp_user-settings-time',
|
56 |
+
'closedpostboxes_page',
|
57 |
+
'metaboxhidden_page',
|
58 |
+
'session_tokens',
|
59 |
+
'managenav-menuscolumnshidden',
|
60 |
+
'metaboxhidden_nav-menus',
|
61 |
+
'nav_menu_recently_edited',
|
62 |
+
'acf_user_settings',
|
63 |
+
];
|
64 |
+
|
65 |
+
// Blacklist some data
|
66 |
+
if (isset($data['meta']) && count($data['meta'])) {
|
67 |
+
foreach ($data['meta'] as $key => $value) {
|
68 |
+
if (in_array($key, $blacklist)) {
|
69 |
+
unset($data['meta'][$key]);
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
$data['meta'] = array_diff_assoc($data['meta'], $blacklist);
|
74 |
+
}
|
75 |
+
*/
|
76 |
+
|
77 |
+
return apply_filters('gdpr/wordpress-user/export/data', $data);
|
78 |
+
}
|
79 |
+
|
80 |
+
public function deleteUser(DataSubject $dataSubject, $reassign = null)
|
81 |
+
{
|
82 |
+
require_once(ABSPATH . 'wp-admin/includes/user.php');
|
83 |
+
|
84 |
+
$reassignOption = gdpr('options')->get('delete_action_reassign');
|
85 |
+
if ('reassign' === $reassignOption) {
|
86 |
+
$reassignUserId = gdpr('options')->get('delete_action_reassign_user');
|
87 |
+
} else {
|
88 |
+
$reassignUserId = false;
|
89 |
+
}
|
90 |
+
|
91 |
+
wp_delete_user($dataSubject->getUserId(), $reassignUserId);
|
92 |
+
}
|
93 |
+
|
94 |
+
public function anonymizeUser(DataSubject $dataSubject, $anonymizedId)
|
95 |
+
{
|
96 |
+
if (!$dataSubject->hasUser()) {
|
97 |
+
return;
|
98 |
+
}
|
99 |
+
|
100 |
+
if (!$anonymizedId) {
|
101 |
+
gdpr('helpers')->error();
|
102 |
+
}
|
103 |
+
|
104 |
+
// Save a unique identifier to tie anonymized data together for analytics purposes
|
105 |
+
update_user_meta($dataSubject->getUserId(), "gdpr_anonymized_id", $anonymizedId);
|
106 |
+
|
107 |
+
// Change username
|
108 |
+
global $wpdb;
|
109 |
+
|
110 |
+
$anonymizedUsername = apply_filters('gdpr/wordpress-user/anonymize/username', '[anonymous]');
|
111 |
+
$wpdb->update(
|
112 |
+
$wpdb->users,
|
113 |
+
['user_login' => $anonymizedUsername],
|
114 |
+
['ID' => $dataSubject->getUserId()]
|
115 |
+
);
|
116 |
+
|
117 |
+
// Clear all relevant user fields, reset password
|
118 |
+
wp_update_user([
|
119 |
+
'ID' => $dataSubject->getUserId(),
|
120 |
+
'user_email' => '',
|
121 |
+
'user_nicename' => '',
|
122 |
+
'user_url' => '',
|
123 |
+
'user_activation_key' => '',
|
124 |
+
'display_name' => $anonymizedUsername,
|
125 |
+
// Set a random password, just in case the functionality that disallows users from logging in should break for any reason
|
126 |
+
'user_pass' => wp_hash_password(wp_generate_password()),
|
127 |
+
]);
|
128 |
+
|
129 |
+
// Clear all relevant usermeta fields
|
130 |
+
delete_user_meta($dataSubject->getUserId(), 'first_name');
|
131 |
+
delete_user_meta($dataSubject->getUserId(), 'last_name');
|
132 |
+
delete_user_meta($dataSubject->getUserId(), 'nickname');
|
133 |
+
delete_user_meta($dataSubject->getUserId(), 'description');
|
134 |
+
delete_user_meta($dataSubject->getUserId(), 'session_tokens');
|
135 |
+
delete_user_meta($dataSubject->getUserId(), 'community-events-location');
|
136 |
+
|
137 |
+
// Remove all capabilities
|
138 |
+
$user = $dataSubject->getUser();
|
139 |
+
$user->remove_all_caps();
|
140 |
+
|
141 |
+
// Finally, assign the 'anonymous' role to user
|
142 |
+
if (apply_filters('gdpr/wordpress-user/anonymize/change_role', true) && get_role('anonymous')) {
|
143 |
+
|
144 |
+
foreach ($user->roles as $role) {
|
145 |
+
$user->remove_role($role);
|
146 |
+
}
|
147 |
+
|
148 |
+
$user->add_role('anonymous');
|
149 |
+
}
|
150 |
+
}
|
151 |
+
}
|
src/Components/WordpressUser/RegistrationForm.php
CHANGED
@@ -1,50 +1,50 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\WordpressUser;
|
4 |
-
|
5 |
-
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
6 |
-
|
7 |
-
class RegistrationForm
|
8 |
-
{
|
9 |
-
/* @var DataSubjectManager */
|
10 |
-
protected $dataSubjectManager;
|
11 |
-
|
12 |
-
public function __construct(DataSubjectManager $dataSubjectManager)
|
13 |
-
{
|
14 |
-
$this->dataSubjectManager = $dataSubjectManager;
|
15 |
-
|
16 |
-
if (gdpr('options')->get('policy_page')) {
|
17 |
-
add_action('register_form', [$this, 'addRegisterFormCheckbox']);
|
18 |
-
add_filter('registration_errors', [$this, 'validate'], PHP_INT_MAX);
|
19 |
-
}
|
20 |
-
}
|
21 |
-
|
22 |
-
public function addRegisterFormCheckbox()
|
23 |
-
{
|
24 |
-
$privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
|
25 |
-
$termsPage = gdpr('options')->get('terms_page');
|
26 |
-
|
27 |
-
if ($termsPage) {
|
28 |
-
$termsUrl = get_permalink($termsPage);
|
29 |
-
} else {
|
30 |
-
$termsUrl = false;
|
31 |
-
}
|
32 |
-
|
33 |
-
echo gdpr('view')->render(
|
34 |
-
'modules/wordpress-user/registration-terms-checkbox',
|
35 |
-
compact('privacyPolicyUrl', 'termsUrl')
|
36 |
-
);
|
37 |
-
}
|
38 |
-
|
39 |
-
public function validate(\WP_Error $errors)
|
40 |
-
{
|
41 |
-
if (empty($_POST['gdpr_terms']) || !$_POST['gdpr_terms']) {
|
42 |
-
$errors->add('gdpr_error', __('<strong>ERROR</strong>: You must accept the terms and conditions.', 'gdpr-framework'));
|
43 |
-
} else {
|
44 |
-
$dataSubject = $this->dataSubjectManager->getByEmail($_POST['user_email']);
|
45 |
-
$dataSubject->giveConsent('privacy-policy');
|
46 |
-
}
|
47 |
-
|
48 |
-
return $errors;
|
49 |
-
}
|
50 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\WordpressUser;
|
4 |
+
|
5 |
+
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
6 |
+
|
7 |
+
class RegistrationForm
|
8 |
+
{
|
9 |
+
/* @var DataSubjectManager */
|
10 |
+
protected $dataSubjectManager;
|
11 |
+
|
12 |
+
public function __construct(DataSubjectManager $dataSubjectManager)
|
13 |
+
{
|
14 |
+
$this->dataSubjectManager = $dataSubjectManager;
|
15 |
+
|
16 |
+
if (gdpr('options')->get('policy_page')) {
|
17 |
+
add_action('register_form', [$this, 'addRegisterFormCheckbox']);
|
18 |
+
add_filter('registration_errors', [$this, 'validate'], PHP_INT_MAX);
|
19 |
+
}
|
20 |
+
}
|
21 |
+
|
22 |
+
public function addRegisterFormCheckbox()
|
23 |
+
{
|
24 |
+
$privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
|
25 |
+
$termsPage = gdpr('options')->get('terms_page');
|
26 |
+
|
27 |
+
if ($termsPage) {
|
28 |
+
$termsUrl = get_permalink($termsPage);
|
29 |
+
} else {
|
30 |
+
$termsUrl = false;
|
31 |
+
}
|
32 |
+
|
33 |
+
echo gdpr('view')->render(
|
34 |
+
'modules/wordpress-user/registration-terms-checkbox',
|
35 |
+
compact('privacyPolicyUrl', 'termsUrl')
|
36 |
+
);
|
37 |
+
}
|
38 |
+
|
39 |
+
public function validate(\WP_Error $errors)
|
40 |
+
{
|
41 |
+
if (empty($_POST['gdpr_terms']) || !$_POST['gdpr_terms']) {
|
42 |
+
$errors->add('gdpr_error', __('<strong>ERROR</strong>: You must accept the terms and conditions.', 'gdpr-framework'));
|
43 |
+
} else {
|
44 |
+
$dataSubject = $this->dataSubjectManager->getByEmail($_POST['user_email']);
|
45 |
+
$dataSubject->giveConsent('privacy-policy');
|
46 |
+
}
|
47 |
+
|
48 |
+
return $errors;
|
49 |
+
}
|
50 |
+
}
|
src/Components/WordpressUser/WordpressUser.php
CHANGED
@@ -1,111 +1,111 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Components\WordpressUser;
|
4 |
-
|
5 |
-
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
6 |
-
use Codelight\GDPR\Components\WordpressUser\Controllers\DashboardDataPageController;
|
7 |
-
use Codelight\GDPR\Components\WordpressUser\Controllers\DashboardProfilePageController;
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Handles everything related to a WordPress user account
|
11 |
-
*
|
12 |
-
* Class WordpressUser
|
13 |
-
*
|
14 |
-
* @package Codelight\GDPR\Modules\WordpressUser
|
15 |
-
*/
|
16 |
-
class WordpressUser
|
17 |
-
{
|
18 |
-
/* @var string */
|
19 |
-
protected $name = 'wordpress-user';
|
20 |
-
|
21 |
-
/* @var DataManager */
|
22 |
-
protected $dataManager;
|
23 |
-
|
24 |
-
/* @var DataSubjectManager */
|
25 |
-
protected $dataSubjectManager;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* WordpressUser constructor.
|
29 |
-
*
|
30 |
-
* @param DataSubjectManager $dataSubjectManager
|
31 |
-
* @param DataManager $dataManager
|
32 |
-
*/
|
33 |
-
public function __construct(DataSubjectManager $dataSubjectManager, DataManager $dataManager)
|
34 |
-
{
|
35 |
-
$this->dataSubjectManager = $dataSubjectManager;
|
36 |
-
$this->dataManager = $dataManager;
|
37 |
-
|
38 |
-
gdpr()->make(DashboardProfilePageController::class);
|
39 |
-
gdpr()->make(RegistrationForm::class);
|
40 |
-
|
41 |
-
if (gdpr('options')->get('enable')) {
|
42 |
-
gdpr()->make(DashboardDataPageController::class);
|
43 |
-
|
44 |
-
// Register Privacy Tools page in admin
|
45 |
-
add_action('admin_menu', [$this, 'registerDashboardDataPage']);
|
46 |
-
}
|
47 |
-
|
48 |
-
// Register render action on Profile edit page
|
49 |
-
add_action('show_user_profile', [$this, 'triggerProfileRenderAction'], PHP_INT_MAX);
|
50 |
-
add_action('edit_user_profile', [$this, 'triggerProfileRenderAction'], PHP_INT_MAX);
|
51 |
-
|
52 |
-
add_filter('gdpr/data-subject/data', [$this, 'getExportData'], 1, 2);
|
53 |
-
add_action('gdpr/data-subject/delete', [$this, 'deleteUser'], 100);
|
54 |
-
add_action('gdpr/data-subject/anonymize', [$this, 'anonymizeUser'], 100, 2);
|
55 |
-
}
|
56 |
-
|
57 |
-
/**
|
58 |
-
* Register Privacy Tools dashboard page under Users
|
59 |
-
*/
|
60 |
-
public function registerDashboardDataPage()
|
61 |
-
{
|
62 |
-
add_users_page(
|
63 |
-
_x('Privacy Tools', '(Admin)', 'gdpr-framework'),
|
64 |
-
_x('Privacy Tools', '(Admin)', 'gdpr-framework'),
|
65 |
-
'read',
|
66 |
-
'gdpr-profile',
|
67 |
-
[$this, 'renderDashboardDataPage']
|
68 |
-
);
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Render the contents of Privacy Tools dashboard page
|
73 |
-
*/
|
74 |
-
public function renderDashboardDataPage()
|
75 |
-
{
|
76 |
-
$dataSubject = $this->dataSubjectManager->getByLoggedInUser();
|
77 |
-
|
78 |
-
if ($dataSubject) {
|
79 |
-
do_action('gdpr/dashboard/privacy-tools/content', $dataSubject);
|
80 |
-
}
|
81 |
-
}
|
82 |
-
|
83 |
-
/**
|
84 |
-
* On profile page, trigger an action with the same format as the Router provides
|
85 |
-
* so that we have consistency with the rest of the hooks.
|
86 |
-
*/
|
87 |
-
public function triggerProfileRenderAction(\WP_User $user)
|
88 |
-
{
|
89 |
-
if (current_user_can('edit_users') || current_user_can('delete_users')) {
|
90 |
-
$dataSubject = $this->dataSubjectManager->getByEmail($user->user_email);
|
91 |
-
do_action("gdpr/dashboard/profile-page/content", $dataSubject);
|
92 |
-
}
|
93 |
-
}
|
94 |
-
|
95 |
-
public function getExportData($data, $email)
|
96 |
-
{
|
97 |
-
return $data + $this->dataManager->getData($this->dataSubjectManager->getByEmail($email));
|
98 |
-
}
|
99 |
-
|
100 |
-
public function deleteUser($email)
|
101 |
-
{
|
102 |
-
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
103 |
-
$this->dataManager->deleteUser($dataSubject);
|
104 |
-
}
|
105 |
-
|
106 |
-
public function anonymizeUser($email, $anonymizedId)
|
107 |
-
{
|
108 |
-
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
109 |
-
$this->dataManager->anonymizeUser($dataSubject, $anonymizedId);
|
110 |
-
}
|
111 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Components\WordpressUser;
|
4 |
+
|
5 |
+
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
6 |
+
use Codelight\GDPR\Components\WordpressUser\Controllers\DashboardDataPageController;
|
7 |
+
use Codelight\GDPR\Components\WordpressUser\Controllers\DashboardProfilePageController;
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Handles everything related to a WordPress user account
|
11 |
+
*
|
12 |
+
* Class WordpressUser
|
13 |
+
*
|
14 |
+
* @package Codelight\GDPR\Modules\WordpressUser
|
15 |
+
*/
|
16 |
+
class WordpressUser
|
17 |
+
{
|
18 |
+
/* @var string */
|
19 |
+
protected $name = 'wordpress-user';
|
20 |
+
|
21 |
+
/* @var DataManager */
|
22 |
+
protected $dataManager;
|
23 |
+
|
24 |
+
/* @var DataSubjectManager */
|
25 |
+
protected $dataSubjectManager;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* WordpressUser constructor.
|
29 |
+
*
|
30 |
+
* @param DataSubjectManager $dataSubjectManager
|
31 |
+
* @param DataManager $dataManager
|
32 |
+
*/
|
33 |
+
public function __construct(DataSubjectManager $dataSubjectManager, DataManager $dataManager)
|
34 |
+
{
|
35 |
+
$this->dataSubjectManager = $dataSubjectManager;
|
36 |
+
$this->dataManager = $dataManager;
|
37 |
+
|
38 |
+
gdpr()->make(DashboardProfilePageController::class);
|
39 |
+
gdpr()->make(RegistrationForm::class);
|
40 |
+
|
41 |
+
if (gdpr('options')->get('enable')) {
|
42 |
+
gdpr()->make(DashboardDataPageController::class);
|
43 |
+
|
44 |
+
// Register Privacy Tools page in admin
|
45 |
+
add_action('admin_menu', [$this, 'registerDashboardDataPage']);
|
46 |
+
}
|
47 |
+
|
48 |
+
// Register render action on Profile edit page
|
49 |
+
add_action('show_user_profile', [$this, 'triggerProfileRenderAction'], PHP_INT_MAX);
|
50 |
+
add_action('edit_user_profile', [$this, 'triggerProfileRenderAction'], PHP_INT_MAX);
|
51 |
+
|
52 |
+
add_filter('gdpr/data-subject/data', [$this, 'getExportData'], 1, 2);
|
53 |
+
add_action('gdpr/data-subject/delete', [$this, 'deleteUser'], 100);
|
54 |
+
add_action('gdpr/data-subject/anonymize', [$this, 'anonymizeUser'], 100, 2);
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Register Privacy Tools dashboard page under Users
|
59 |
+
*/
|
60 |
+
public function registerDashboardDataPage()
|
61 |
+
{
|
62 |
+
add_users_page(
|
63 |
+
_x('Privacy Tools', '(Admin)', 'gdpr-framework'),
|
64 |
+
_x('Privacy Tools', '(Admin)', 'gdpr-framework'),
|
65 |
+
'read',
|
66 |
+
'gdpr-profile',
|
67 |
+
[$this, 'renderDashboardDataPage']
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Render the contents of Privacy Tools dashboard page
|
73 |
+
*/
|
74 |
+
public function renderDashboardDataPage()
|
75 |
+
{
|
76 |
+
$dataSubject = $this->dataSubjectManager->getByLoggedInUser();
|
77 |
+
|
78 |
+
if ($dataSubject) {
|
79 |
+
do_action('gdpr/dashboard/privacy-tools/content', $dataSubject);
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* On profile page, trigger an action with the same format as the Router provides
|
85 |
+
* so that we have consistency with the rest of the hooks.
|
86 |
+
*/
|
87 |
+
public function triggerProfileRenderAction(\WP_User $user)
|
88 |
+
{
|
89 |
+
if (current_user_can('edit_users') || current_user_can('delete_users')) {
|
90 |
+
$dataSubject = $this->dataSubjectManager->getByEmail($user->user_email);
|
91 |
+
do_action("gdpr/dashboard/profile-page/content", $dataSubject);
|
92 |
+
}
|
93 |
+
}
|
94 |
+
|
95 |
+
public function getExportData($data, $email)
|
96 |
+
{
|
97 |
+
return $data + $this->dataManager->getData($this->dataSubjectManager->getByEmail($email));
|
98 |
+
}
|
99 |
+
|
100 |
+
public function deleteUser($email)
|
101 |
+
{
|
102 |
+
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
103 |
+
$this->dataManager->deleteUser($dataSubject);
|
104 |
+
}
|
105 |
+
|
106 |
+
public function anonymizeUser($email, $anonymizedId)
|
107 |
+
{
|
108 |
+
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
109 |
+
$this->dataManager->anonymizeUser($dataSubject, $anonymizedId);
|
110 |
+
}
|
111 |
+
}
|
src/DataSubject/AdminTabDataSubject.php
CHANGED
@@ -1,128 +1,128 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\DataSubject;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Admin\AdminTab;
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Class AdminTabDataSubject
|
9 |
-
*
|
10 |
-
* @package Codelight\GDPR\DataSubject
|
11 |
-
*/
|
12 |
-
class AdminTabDataSubject extends AdminTab
|
13 |
-
{
|
14 |
-
/* @var string */
|
15 |
-
protected $slug = 'data-subject';
|
16 |
-
|
17 |
-
/* @var DataSubjectManager */
|
18 |
-
protected $dataSubjectManager;
|
19 |
-
|
20 |
-
/**
|
21 |
-
* AdminTabDataSubject constructor.
|
22 |
-
*
|
23 |
-
* @param DataSubjectManager $dataSubjectManager
|
24 |
-
*/
|
25 |
-
public function __construct(DataSubjectManager $dataSubjectManager)
|
26 |
-
{
|
27 |
-
$this->title = _x('Data Subjects', '(Admin)', 'gdpr-framework');
|
28 |
-
$this->dataSubjectManager = $dataSubjectManager;
|
29 |
-
|
30 |
-
// Workaround to allow this page to be submitted
|
31 |
-
$this->registerSetting('gdpr_email');
|
32 |
-
|
33 |
-
// Register handler for this action
|
34 |
-
add_action('gdpr/admin/action/search', [$this, 'searchRedirect']);
|
35 |
-
}
|
36 |
-
|
37 |
-
public function init()
|
38 |
-
{
|
39 |
-
$this->registerSettingSection(
|
40 |
-
'gdpr-section-data-subjects',
|
41 |
-
_x('Data Subjects', '(Admin)', 'gdpr-framework'),
|
42 |
-
[$this, 'renderTab']
|
43 |
-
);
|
44 |
-
}
|
45 |
-
|
46 |
-
public function renderTab()
|
47 |
-
{
|
48 |
-
if (isset($_GET['search']) && $_GET['search']) {
|
49 |
-
$results = $this->getRenderedResults($_GET['search'], $this->dataSubjectManager->getByEmail($_GET['search']));
|
50 |
-
} else {
|
51 |
-
$results = '';
|
52 |
-
}
|
53 |
-
|
54 |
-
$nonce = wp_create_nonce('gdpr/admin/action/search');
|
55 |
-
echo gdpr('view')->render(
|
56 |
-
'admin/data-subjects/search-form',
|
57 |
-
compact('nonce', 'results', 'exportUrl', 'deleteUrl')
|
58 |
-
);
|
59 |
-
}
|
60 |
-
|
61 |
-
public function getRenderedResults($email, DataSubject $dataSubject)
|
62 |
-
{
|
63 |
-
$hasData = $dataSubject->hasData();
|
64 |
-
$links = [];
|
65 |
-
|
66 |
-
if ($hasData) {
|
67 |
-
if ($dataSubject->getUserId()) {
|
68 |
-
$userName = get_userdata($dataSubject->getUserId())->user_login;
|
69 |
-
$links['profile'] = get_edit_user_link($dataSubject->getUserId());
|
70 |
-
$adminCap = user_can($dataSubject->getUserId(), 'manage_options');
|
71 |
-
|
72 |
-
} else {
|
73 |
-
$userName = false;
|
74 |
-
$adminCap = false;
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* TODO: these actions are currently triggered in DashboardProfilePageController
|
79 |
-
* Should replace this with a generic AdminController!
|
80 |
-
* Also consider namespacing gdpr_action in this case, i.e. profile/delete vs data-subject-tab/delete
|
81 |
-
*/
|
82 |
-
$links['view'] = add_query_arg([
|
83 |
-
'gdpr_action' => 'export',
|
84 |
-
'gdpr_format' => 'html',
|
85 |
-
'gdpr_email' => $_GET['search'],
|
86 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
|
87 |
-
]);
|
88 |
-
|
89 |
-
$links['export'] = add_query_arg([
|
90 |
-
'gdpr_action' => 'export',
|
91 |
-
'gdpr_format' => 'json',
|
92 |
-
'gdpr_email' => $_GET['search'],
|
93 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
|
94 |
-
]);
|
95 |
-
|
96 |
-
$links['anonymize'] = add_query_arg([
|
97 |
-
'gdpr_email' => $_GET['search'],
|
98 |
-
'gdpr_action' => 'forget',
|
99 |
-
'gdpr_force_action' => 'anonymize',
|
100 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
|
101 |
-
]);
|
102 |
-
|
103 |
-
$links['delete'] = add_query_arg([
|
104 |
-
'gdpr_email' => $_GET['search'],
|
105 |
-
'gdpr_action' => 'forget',
|
106 |
-
'gdpr_force_action' => 'delete',
|
107 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
|
108 |
-
]);
|
109 |
-
}
|
110 |
-
|
111 |
-
$consentData = $dataSubject->getConsentData();
|
112 |
-
|
113 |
-
return gdpr('view')->render('admin/data-subjects/search-results', compact('email', 'hasData', 'links', 'userName', 'adminCap', 'consentData'));
|
114 |
-
}
|
115 |
-
|
116 |
-
public function renderSubmitButton()
|
117 |
-
{
|
118 |
-
// Intentionally left blank
|
119 |
-
}
|
120 |
-
|
121 |
-
public function searchRedirect()
|
122 |
-
{
|
123 |
-
if (isset($_POST['gdpr_email']) && $_POST['gdpr_email']) {
|
124 |
-
wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $_POST['gdpr_email']));
|
125 |
-
exit;
|
126 |
-
}
|
127 |
-
}
|
128 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\DataSubject;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Admin\AdminTab;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Class AdminTabDataSubject
|
9 |
+
*
|
10 |
+
* @package Codelight\GDPR\DataSubject
|
11 |
+
*/
|
12 |
+
class AdminTabDataSubject extends AdminTab
|
13 |
+
{
|
14 |
+
/* @var string */
|
15 |
+
protected $slug = 'data-subject';
|
16 |
+
|
17 |
+
/* @var DataSubjectManager */
|
18 |
+
protected $dataSubjectManager;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* AdminTabDataSubject constructor.
|
22 |
+
*
|
23 |
+
* @param DataSubjectManager $dataSubjectManager
|
24 |
+
*/
|
25 |
+
public function __construct(DataSubjectManager $dataSubjectManager)
|
26 |
+
{
|
27 |
+
$this->title = _x('Data Subjects', '(Admin)', 'gdpr-framework');
|
28 |
+
$this->dataSubjectManager = $dataSubjectManager;
|
29 |
+
|
30 |
+
// Workaround to allow this page to be submitted
|
31 |
+
$this->registerSetting('gdpr_email');
|
32 |
+
|
33 |
+
// Register handler for this action
|
34 |
+
add_action('gdpr/admin/action/search', [$this, 'searchRedirect']);
|
35 |
+
}
|
36 |
+
|
37 |
+
public function init()
|
38 |
+
{
|
39 |
+
$this->registerSettingSection(
|
40 |
+
'gdpr-section-data-subjects',
|
41 |
+
_x('Data Subjects', '(Admin)', 'gdpr-framework'),
|
42 |
+
[$this, 'renderTab']
|
43 |
+
);
|
44 |
+
}
|
45 |
+
|
46 |
+
public function renderTab()
|
47 |
+
{
|
48 |
+
if (isset($_GET['search']) && $_GET['search']) {
|
49 |
+
$results = $this->getRenderedResults($_GET['search'], $this->dataSubjectManager->getByEmail($_GET['search']));
|
50 |
+
} else {
|
51 |
+
$results = '';
|
52 |
+
}
|
53 |
+
|
54 |
+
$nonce = wp_create_nonce('gdpr/admin/action/search');
|
55 |
+
echo gdpr('view')->render(
|
56 |
+
'admin/data-subjects/search-form',
|
57 |
+
compact('nonce', 'results', 'exportUrl', 'deleteUrl')
|
58 |
+
);
|
59 |
+
}
|
60 |
+
|
61 |
+
public function getRenderedResults($email, DataSubject $dataSubject)
|
62 |
+
{
|
63 |
+
$hasData = $dataSubject->hasData();
|
64 |
+
$links = [];
|
65 |
+
|
66 |
+
if ($hasData) {
|
67 |
+
if ($dataSubject->getUserId()) {
|
68 |
+
$userName = get_userdata($dataSubject->getUserId())->user_login;
|
69 |
+
$links['profile'] = get_edit_user_link($dataSubject->getUserId());
|
70 |
+
$adminCap = user_can($dataSubject->getUserId(), 'manage_options');
|
71 |
+
|
72 |
+
} else {
|
73 |
+
$userName = false;
|
74 |
+
$adminCap = false;
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* TODO: these actions are currently triggered in DashboardProfilePageController
|
79 |
+
* Should replace this with a generic AdminController!
|
80 |
+
* Also consider namespacing gdpr_action in this case, i.e. profile/delete vs data-subject-tab/delete
|
81 |
+
*/
|
82 |
+
$links['view'] = add_query_arg([
|
83 |
+
'gdpr_action' => 'export',
|
84 |
+
'gdpr_format' => 'html',
|
85 |
+
'gdpr_email' => $_GET['search'],
|
86 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
|
87 |
+
]);
|
88 |
+
|
89 |
+
$links['export'] = add_query_arg([
|
90 |
+
'gdpr_action' => 'export',
|
91 |
+
'gdpr_format' => 'json',
|
92 |
+
'gdpr_email' => $_GET['search'],
|
93 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
|
94 |
+
]);
|
95 |
+
|
96 |
+
$links['anonymize'] = add_query_arg([
|
97 |
+
'gdpr_email' => $_GET['search'],
|
98 |
+
'gdpr_action' => 'forget',
|
99 |
+
'gdpr_force_action' => 'anonymize',
|
100 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
|
101 |
+
]);
|
102 |
+
|
103 |
+
$links['delete'] = add_query_arg([
|
104 |
+
'gdpr_email' => $_GET['search'],
|
105 |
+
'gdpr_action' => 'forget',
|
106 |
+
'gdpr_force_action' => 'delete',
|
107 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
|
108 |
+
]);
|
109 |
+
}
|
110 |
+
|
111 |
+
$consentData = $dataSubject->getConsentData();
|
112 |
+
|
113 |
+
return gdpr('view')->render('admin/data-subjects/search-results', compact('email', 'hasData', 'links', 'userName', 'adminCap', 'consentData'));
|
114 |
+
}
|
115 |
+
|
116 |
+
public function renderSubmitButton()
|
117 |
+
{
|
118 |
+
// Intentionally left blank
|
119 |
+
}
|
120 |
+
|
121 |
+
public function searchRedirect()
|
122 |
+
{
|
123 |
+
if (isset($_POST['gdpr_email']) && $_POST['gdpr_email']) {
|
124 |
+
wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $_POST['gdpr_email']));
|
125 |
+
exit;
|
126 |
+
}
|
127 |
+
}
|
128 |
+
}
|
src/DataSubject/DataExporter.php
CHANGED
@@ -1,138 +1,138 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\DataSubject;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Handle formatting and downloading data subject's data.
|
7 |
-
*
|
8 |
-
* Class DataManager
|
9 |
-
*
|
10 |
-
* @package Codelight\GDPR\DataSubject
|
11 |
-
*/
|
12 |
-
class DataExporter
|
13 |
-
{
|
14 |
-
public function export(array $data, DataSubject $dataSubject, $format = 'html')
|
15 |
-
{
|
16 |
-
$data = $this->maybeUnserialize($data);
|
17 |
-
|
18 |
-
do_action('gdpr/export', $data, $dataSubject->getEmail(), $dataSubject, $format);
|
19 |
-
|
20 |
-
if ('html' === $format) {
|
21 |
-
$this->downloadHTML($data, $dataSubject);
|
22 |
-
} elseif ('json' === $format) {
|
23 |
-
$this->downloadJSON($data, $dataSubject);
|
24 |
-
}
|
25 |
-
}
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Download a data subject's data in human-readable format,
|
29 |
-
* formatted as a table in an HTML document unless overridden.
|
30 |
-
*
|
31 |
-
* @param array $data
|
32 |
-
* @param DataSubject $dataSubject
|
33 |
-
*/
|
34 |
-
protected function downloadHTML(array $data, DataSubject $dataSubject)
|
35 |
-
{
|
36 |
-
// Allow extensions to send a different response
|
37 |
-
do_action('gdpr/export/html', $data, $dataSubject->getEmail(), $dataSubject);
|
38 |
-
|
39 |
-
$filename = 'data_' . date("Y-m-d_H:i:s") . '.html';
|
40 |
-
|
41 |
-
// By default, send a downloadable HTML file
|
42 |
-
header("Pragma: public");
|
43 |
-
header("Expires: 0");
|
44 |
-
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
|
45 |
-
header("Cache-Control: private", false);
|
46 |
-
header("Content-Type: text/html");
|
47 |
-
header("Content-Disposition: attachment; filename=\"{$filename}\";");
|
48 |
-
header("Content-Transfer-Encoding: binary");
|
49 |
-
|
50 |
-
echo $this->getHtmlData($data);
|
51 |
-
exit;
|
52 |
-
}
|
53 |
-
|
54 |
-
/**
|
55 |
-
* Download a data subject's data in machine-readable format,
|
56 |
-
* formatted as JSON unless overridden.
|
57 |
-
*
|
58 |
-
* @param array $data
|
59 |
-
* @param DataSubject $dataSubject
|
60 |
-
*/
|
61 |
-
protected function downloadJSON(array $data, DataSubject $dataSubject)
|
62 |
-
{
|
63 |
-
// Allow extensions to send a different response
|
64 |
-
do_action('gdpr/export/json', $data, $dataSubject->getEmail(), $dataSubject);
|
65 |
-
|
66 |
-
$filename = 'data_' . date("Y-m-d_H:i:s") . '.json';
|
67 |
-
|
68 |
-
// By default, encode to JSON and send a JSON response
|
69 |
-
header("Pragma: public");
|
70 |
-
header("Expires: 0");
|
71 |
-
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
|
72 |
-
header("Cache-Control: private", false);
|
73 |
-
header("Content-Type: application/json");
|
74 |
-
header("Content-Disposition: attachment; filename=\"{$filename}\";");
|
75 |
-
header("Content-Transfer-Encoding: binary");
|
76 |
-
|
77 |
-
wp_send_json($data);
|
78 |
-
}
|
79 |
-
|
80 |
-
protected function getHtmlData($data)
|
81 |
-
{
|
82 |
-
$table = $this->formatAsTable($this->maybeUnserialize($data));
|
83 |
-
return gdpr('view')->render('global/html-data', compact('table'));
|
84 |
-
}
|
85 |
-
|
86 |
-
protected function formatAsTable(array $data, $level = 0)
|
87 |
-
{
|
88 |
-
$output = "<table class='level-{$level}'>";
|
89 |
-
foreach ($data as $key => $value) {
|
90 |
-
$output .= "<tr>";
|
91 |
-
|
92 |
-
// Output key
|
93 |
-
$output .= "<td class='key'>";
|
94 |
-
$output .= esc_html($key);
|
95 |
-
$output .= "</td>";
|
96 |
-
|
97 |
-
// Output value
|
98 |
-
$output .= "<td class='value'>";
|
99 |
-
|
100 |
-
// Account for arrays with just one item, such as usermeta
|
101 |
-
if (is_array($value) && 1 === count($value)) {
|
102 |
-
$value = $value[0];
|
103 |
-
}
|
104 |
-
|
105 |
-
// In case of arrays, recurse
|
106 |
-
if (is_array($value)) {
|
107 |
-
$output .= $this->formatAsTable($value, ($level + 1));
|
108 |
-
} else {
|
109 |
-
$output .= esc_html($value);
|
110 |
-
}
|
111 |
-
$output .= "</td>";
|
112 |
-
|
113 |
-
$output .= "</tr>";
|
114 |
-
}
|
115 |
-
|
116 |
-
$output .= "</table>";
|
117 |
-
return $output;
|
118 |
-
}
|
119 |
-
|
120 |
-
/**
|
121 |
-
* Recursively maybe unserialize data
|
122 |
-
*
|
123 |
-
* @param array $data
|
124 |
-
* @return array
|
125 |
-
*/
|
126 |
-
protected function maybeUnserialize(array $data)
|
127 |
-
{
|
128 |
-
foreach ($data as &$datum) {
|
129 |
-
if (is_array($datum)) {
|
130 |
-
$datum = $this->maybeUnserialize($datum);
|
131 |
-
} else {
|
132 |
-
$datum = maybe_unserialize($datum);
|
133 |
-
}
|
134 |
-
}
|
135 |
-
|
136 |
-
return $data;
|
137 |
-
}
|
138 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\DataSubject;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Handle formatting and downloading data subject's data.
|
7 |
+
*
|
8 |
+
* Class DataManager
|
9 |
+
*
|
10 |
+
* @package Codelight\GDPR\DataSubject
|
11 |
+
*/
|
12 |
+
class DataExporter
|
13 |
+
{
|
14 |
+
public function export(array $data, DataSubject $dataSubject, $format = 'html')
|
15 |
+
{
|
16 |
+
$data = $this->maybeUnserialize($data);
|
17 |
+
|
18 |
+
do_action('gdpr/export', $data, $dataSubject->getEmail(), $dataSubject, $format);
|
19 |
+
|
20 |
+
if ('html' === $format) {
|
21 |
+
$this->downloadHTML($data, $dataSubject);
|
22 |
+
} elseif ('json' === $format) {
|
23 |
+
$this->downloadJSON($data, $dataSubject);
|
24 |
+
}
|
25 |
+
}
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Download a data subject's data in human-readable format,
|
29 |
+
* formatted as a table in an HTML document unless overridden.
|
30 |
+
*
|
31 |
+
* @param array $data
|
32 |
+
* @param DataSubject $dataSubject
|
33 |
+
*/
|
34 |
+
protected function downloadHTML(array $data, DataSubject $dataSubject)
|
35 |
+
{
|
36 |
+
// Allow extensions to send a different response
|
37 |
+
do_action('gdpr/export/html', $data, $dataSubject->getEmail(), $dataSubject);
|
38 |
+
|
39 |
+
$filename = 'data_' . date("Y-m-d_H:i:s") . '.html';
|
40 |
+
|
41 |
+
// By default, send a downloadable HTML file
|
42 |
+
header("Pragma: public");
|
43 |
+
header("Expires: 0");
|
44 |
+
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
|
45 |
+
header("Cache-Control: private", false);
|
46 |
+
header("Content-Type: text/html");
|
47 |
+
header("Content-Disposition: attachment; filename=\"{$filename}\";");
|
48 |
+
header("Content-Transfer-Encoding: binary");
|
49 |
+
|
50 |
+
echo $this->getHtmlData($data);
|
51 |
+
exit;
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Download a data subject's data in machine-readable format,
|
56 |
+
* formatted as JSON unless overridden.
|
57 |
+
*
|
58 |
+
* @param array $data
|
59 |
+
* @param DataSubject $dataSubject
|
60 |
+
*/
|
61 |
+
protected function downloadJSON(array $data, DataSubject $dataSubject)
|
62 |
+
{
|
63 |
+
// Allow extensions to send a different response
|
64 |
+
do_action('gdpr/export/json', $data, $dataSubject->getEmail(), $dataSubject);
|
65 |
+
|
66 |
+
$filename = 'data_' . date("Y-m-d_H:i:s") . '.json';
|
67 |
+
|
68 |
+
// By default, encode to JSON and send a JSON response
|
69 |
+
header("Pragma: public");
|
70 |
+
header("Expires: 0");
|
71 |
+
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
|
72 |
+
header("Cache-Control: private", false);
|
73 |
+
header("Content-Type: application/json");
|
74 |
+
header("Content-Disposition: attachment; filename=\"{$filename}\";");
|
75 |
+
header("Content-Transfer-Encoding: binary");
|
76 |
+
|
77 |
+
wp_send_json($data);
|
78 |
+
}
|
79 |
+
|
80 |
+
protected function getHtmlData($data)
|
81 |
+
{
|
82 |
+
$table = $this->formatAsTable($this->maybeUnserialize($data));
|
83 |
+
return gdpr('view')->render('global/html-data', compact('table'));
|
84 |
+
}
|
85 |
+
|
86 |
+
protected function formatAsTable(array $data, $level = 0)
|
87 |
+
{
|
88 |
+
$output = "<table class='level-{$level}'>";
|
89 |
+
foreach ($data as $key => $value) {
|
90 |
+
$output .= "<tr>";
|
91 |
+
|
92 |
+
// Output key
|
93 |
+
$output .= "<td class='key'>";
|
94 |
+
$output .= esc_html($key);
|
95 |
+
$output .= "</td>";
|
96 |
+
|
97 |
+
// Output value
|
98 |
+
$output .= "<td class='value'>";
|
99 |
+
|
100 |
+
// Account for arrays with just one item, such as usermeta
|
101 |
+
if (is_array($value) && 1 === count($value)) {
|
102 |
+
$value = $value[0];
|
103 |
+
}
|
104 |
+
|
105 |
+
// In case of arrays, recurse
|
106 |
+
if (is_array($value)) {
|
107 |
+
$output .= $this->formatAsTable($value, ($level + 1));
|
108 |
+
} else {
|
109 |
+
$output .= esc_html($value);
|
110 |
+
}
|
111 |
+
$output .= "</td>";
|
112 |
+
|
113 |
+
$output .= "</tr>";
|
114 |
+
}
|
115 |
+
|
116 |
+
$output .= "</table>";
|
117 |
+
return $output;
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Recursively maybe unserialize data
|
122 |
+
*
|
123 |
+
* @param array $data
|
124 |
+
* @return array
|
125 |
+
*/
|
126 |
+
protected function maybeUnserialize(array $data)
|
127 |
+
{
|
128 |
+
foreach ($data as &$datum) {
|
129 |
+
if (is_array($datum)) {
|
130 |
+
$datum = $this->maybeUnserialize($datum);
|
131 |
+
} else {
|
132 |
+
$datum = maybe_unserialize($datum);
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
return $data;
|
137 |
+
}
|
138 |
+
}
|
src/DataSubject/DataRepository.php
CHANGED
@@ -1,191 +1,191 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\DataSubject;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Class DataRepository
|
7 |
-
*
|
8 |
-
* @package Codelight\GDPR\DataSubject
|
9 |
-
*/
|
10 |
-
class DataRepository
|
11 |
-
{
|
12 |
-
/**
|
13 |
-
* DataRepository constructor.
|
14 |
-
*
|
15 |
-
* @param $email
|
16 |
-
*/
|
17 |
-
public function __construct($email)
|
18 |
-
{
|
19 |
-
$this->email = $email;
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Export all stored data. Triggers 'gdpr/data-subject/data' filter.
|
24 |
-
*/
|
25 |
-
public function getData($email)
|
26 |
-
{
|
27 |
-
return apply_filters('gdpr/data-subject/data', [], $email);
|
28 |
-
}
|
29 |
-
|
30 |
-
/**
|
31 |
-
* Trigger the configured 'export' action
|
32 |
-
*
|
33 |
-
* @param $email
|
34 |
-
* @return array|null
|
35 |
-
*/
|
36 |
-
public function export($email, $format, $force = false)
|
37 |
-
{
|
38 |
-
$action = gdpr('options')->get('export_action');
|
39 |
-
$data = null;
|
40 |
-
|
41 |
-
if ($force) {
|
42 |
-
$action = 'download';
|
43 |
-
}
|
44 |
-
|
45 |
-
switch($action) {
|
46 |
-
case 'download':
|
47 |
-
$data = $this->getData($email);
|
48 |
-
break;
|
49 |
-
case 'download_and_notify':
|
50 |
-
$data = $this->getData($email);
|
51 |
-
$this->notifyExportAction($email, $format);
|
52 |
-
break;
|
53 |
-
case 'notify':
|
54 |
-
$this->notifyExportRequest($email, $format);
|
55 |
-
break;
|
56 |
-
default:
|
57 |
-
$this->notifyExportRequest($email, $format);
|
58 |
-
break;
|
59 |
-
}
|
60 |
-
|
61 |
-
return $data;
|
62 |
-
}
|
63 |
-
|
64 |
-
/**
|
65 |
-
* Trigger the configured 'forget' action
|
66 |
-
*
|
67 |
-
* @param $email
|
68 |
-
*
|
69 |
-
* @return bool
|
70 |
-
*/
|
71 |
-
public function forget($email, $forceAction = null)
|
72 |
-
{
|
73 |
-
$action = gdpr('options')->get('delete_action');
|
74 |
-
|
75 |
-
if ($forceAction) {
|
76 |
-
$action = $forceAction;
|
77 |
-
}
|
78 |
-
|
79 |
-
switch($action) {
|
80 |
-
case 'delete':
|
81 |
-
$this->delete($email);
|
82 |
-
return true;
|
83 |
-
case 'delete_and_notify':
|
84 |
-
$userId = $this->delete($email);
|
85 |
-
$this->notifyForgetAction($email, $userId);
|
86 |
-
return true;
|
87 |
-
case 'anonymize':
|
88 |
-
$this->anonymize($email);
|
89 |
-
return true;
|
90 |
-
case 'anonymize_and_notify':
|
91 |
-
$userId = $this->anonymize($email);
|
92 |
-
$this->notifyForgetAction($email, $userId);
|
93 |
-
return true;
|
94 |
-
case 'notify':
|
95 |
-
$this->notifyForgetRequest($email);
|
96 |
-
return false;
|
97 |
-
default:
|
98 |
-
$this->notifyForgetRequest($email);
|
99 |
-
return false;
|
100 |
-
}
|
101 |
-
}
|
102 |
-
|
103 |
-
/**
|
104 |
-
* @param $email
|
105 |
-
*/
|
106 |
-
protected function anonymize($email)
|
107 |
-
{
|
108 |
-
$userId = null;
|
109 |
-
|
110 |
-
if (email_exists($email)) {
|
111 |
-
$userId = get_user_by('email', $email)->ID;
|
112 |
-
}
|
113 |
-
|
114 |
-
$anonymizedId = wp_generate_password(12, false);
|
115 |
-
do_action('gdpr/data-subject/anonymize', $email, $anonymizedId, $userId);
|
116 |
-
|
117 |
-
return $userId;
|
118 |
-
}
|
119 |
-
|
120 |
-
/**
|
121 |
-
* @param $email
|
122 |
-
*/
|
123 |
-
protected function delete($email)
|
124 |
-
{
|
125 |
-
$userId = null;
|
126 |
-
|
127 |
-
if (email_exists($email)) {
|
128 |
-
$userId = get_user_by('email', $email)->ID;
|
129 |
-
}
|
130 |
-
|
131 |
-
do_action('gdpr/data-subject/delete', $email, $userId);
|
132 |
-
|
133 |
-
return $userId;
|
134 |
-
}
|
135 |
-
|
136 |
-
/**
|
137 |
-
* @param $email
|
138 |
-
*/
|
139 |
-
protected function notifyExportAction($email, $format)
|
140 |
-
{
|
141 |
-
gdpr('helpers')->mail(
|
142 |
-
gdpr('options')->get('export_action_email'),
|
143 |
-
__("Data exported", 'gdpr-framework'),
|
144 |
-
gdpr('view')->render('email/action-export', compact('email', 'format')),
|
145 |
-
['Content-Type: text/html; charset=UTF-8']
|
146 |
-
);
|
147 |
-
}
|
148 |
-
|
149 |
-
/**
|
150 |
-
* @param $email
|
151 |
-
*/
|
152 |
-
protected function notifyExportRequest($email, $format)
|
153 |
-
{
|
154 |
-
$adminTabLink = esc_url(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $email));
|
155 |
-
|
156 |
-
gdpr('helpers')->mail(
|
157 |
-
gdpr('options')->get('export_action_email'),
|
158 |
-
__("Data export request", 'gdpr-framework'),
|
159 |
-
gdpr('view')->render('email/request-export', compact('email', 'format', 'adminTabLink')),
|
160 |
-
['Content-Type: text/html; charset=UTF-8']
|
161 |
-
);
|
162 |
-
}
|
163 |
-
|
164 |
-
/**
|
165 |
-
* @param $email
|
166 |
-
*/
|
167 |
-
protected function notifyForgetAction($email, $userId = null)
|
168 |
-
{
|
169 |
-
gdpr('helpers')->mail(
|
170 |
-
gdpr('options')->get('delete_action_email'),
|
171 |
-
__("Data removed", 'gdpr-framework'),
|
172 |
-
gdpr('view')->render('email/action-forget', compact('email', 'userId')),
|
173 |
-
['Content-Type: text/html; charset=UTF-8']
|
174 |
-
);
|
175 |
-
}
|
176 |
-
|
177 |
-
/**
|
178 |
-
* @param $email
|
179 |
-
*/
|
180 |
-
protected function notifyForgetRequest($email)
|
181 |
-
{
|
182 |
-
$adminTabLink = esc_url(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $email));
|
183 |
-
|
184 |
-
gdpr('helpers')->mail(
|
185 |
-
gdpr('options')->get('delete_action_email'),
|
186 |
-
__("Data removal request", 'gdpr-framework'),
|
187 |
-
gdpr('view')->render('email/request-forget', compact('email', 'adminTabLink')),
|
188 |
-
['Content-Type: text/html; charset=UTF-8']
|
189 |
-
);
|
190 |
-
}
|
191 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\DataSubject;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Class DataRepository
|
7 |
+
*
|
8 |
+
* @package Codelight\GDPR\DataSubject
|
9 |
+
*/
|
10 |
+
class DataRepository
|
11 |
+
{
|
12 |
+
/**
|
13 |
+
* DataRepository constructor.
|
14 |
+
*
|
15 |
+
* @param $email
|
16 |
+
*/
|
17 |
+
public function __construct($email)
|
18 |
+
{
|
19 |
+
$this->email = $email;
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Export all stored data. Triggers 'gdpr/data-subject/data' filter.
|
24 |
+
*/
|
25 |
+
public function getData($email)
|
26 |
+
{
|
27 |
+
return apply_filters('gdpr/data-subject/data', [], $email);
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Trigger the configured 'export' action
|
32 |
+
*
|
33 |
+
* @param $email
|
34 |
+
* @return array|null
|
35 |
+
*/
|
36 |
+
public function export($email, $format, $force = false)
|
37 |
+
{
|
38 |
+
$action = gdpr('options')->get('export_action');
|
39 |
+
$data = null;
|
40 |
+
|
41 |
+
if ($force) {
|
42 |
+
$action = 'download';
|
43 |
+
}
|
44 |
+
|
45 |
+
switch($action) {
|
46 |
+
case 'download':
|
47 |
+
$data = $this->getData($email);
|
48 |
+
break;
|
49 |
+
case 'download_and_notify':
|
50 |
+
$data = $this->getData($email);
|
51 |
+
$this->notifyExportAction($email, $format);
|
52 |
+
break;
|
53 |
+
case 'notify':
|
54 |
+
$this->notifyExportRequest($email, $format);
|
55 |
+
break;
|
56 |
+
default:
|
57 |
+
$this->notifyExportRequest($email, $format);
|
58 |
+
break;
|
59 |
+
}
|
60 |
+
|
61 |
+
return $data;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* Trigger the configured 'forget' action
|
66 |
+
*
|
67 |
+
* @param $email
|
68 |
+
*
|
69 |
+
* @return bool
|
70 |
+
*/
|
71 |
+
public function forget($email, $forceAction = null)
|
72 |
+
{
|
73 |
+
$action = gdpr('options')->get('delete_action');
|
74 |
+
|
75 |
+
if ($forceAction) {
|
76 |
+
$action = $forceAction;
|
77 |
+
}
|
78 |
+
|
79 |
+
switch($action) {
|
80 |
+
case 'delete':
|
81 |
+
$this->delete($email);
|
82 |
+
return true;
|
83 |
+
case 'delete_and_notify':
|
84 |
+
$userId = $this->delete($email);
|
85 |
+
$this->notifyForgetAction($email, $userId);
|
86 |
+
return true;
|
87 |
+
case 'anonymize':
|
88 |
+
$this->anonymize($email);
|
89 |
+
return true;
|
90 |
+
case 'anonymize_and_notify':
|
91 |
+
$userId = $this->anonymize($email);
|
92 |
+
$this->notifyForgetAction($email, $userId);
|
93 |
+
return true;
|
94 |
+
case 'notify':
|
95 |
+
$this->notifyForgetRequest($email);
|
96 |
+
return false;
|
97 |
+
default:
|
98 |
+
$this->notifyForgetRequest($email);
|
99 |
+
return false;
|
100 |
+
}
|
101 |
+
}
|
102 |
+
|
103 |
+
/**
|
104 |
+
* @param $email
|
105 |
+
*/
|
106 |
+
protected function anonymize($email)
|
107 |
+
{
|
108 |
+
$userId = null;
|
109 |
+
|
110 |
+
if (email_exists($email)) {
|
111 |
+
$userId = get_user_by('email', $email)->ID;
|
112 |
+
}
|
113 |
+
|
114 |
+
$anonymizedId = wp_generate_password(12, false);
|
115 |
+
do_action('gdpr/data-subject/anonymize', $email, $anonymizedId, $userId);
|
116 |
+
|
117 |
+
return $userId;
|
118 |
+
}
|
119 |
+
|
120 |
+
/**
|
121 |
+
* @param $email
|
122 |
+
*/
|
123 |
+
protected function delete($email)
|
124 |
+
{
|
125 |
+
$userId = null;
|
126 |
+
|
127 |
+
if (email_exists($email)) {
|
128 |
+
$userId = get_user_by('email', $email)->ID;
|
129 |
+
}
|
130 |
+
|
131 |
+
do_action('gdpr/data-subject/delete', $email, $userId);
|
132 |
+
|
133 |
+
return $userId;
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* @param $email
|
138 |
+
*/
|
139 |
+
protected function notifyExportAction($email, $format)
|
140 |
+
{
|
141 |
+
gdpr('helpers')->mail(
|
142 |
+
gdpr('options')->get('export_action_email'),
|
143 |
+
__("Data exported", 'gdpr-framework'),
|
144 |
+
gdpr('view')->render('email/action-export', compact('email', 'format')),
|
145 |
+
['Content-Type: text/html; charset=UTF-8']
|
146 |
+
);
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* @param $email
|
151 |
+
*/
|
152 |
+
protected function notifyExportRequest($email, $format)
|
153 |
+
{
|
154 |
+
$adminTabLink = esc_url(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $email));
|
155 |
+
|
156 |
+
gdpr('helpers')->mail(
|
157 |
+
gdpr('options')->get('export_action_email'),
|
158 |
+
__("Data export request", 'gdpr-framework'),
|
159 |
+
gdpr('view')->render('email/request-export', compact('email', 'format', 'adminTabLink')),
|
160 |
+
['Content-Type: text/html; charset=UTF-8']
|
161 |
+
);
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* @param $email
|
166 |
+
*/
|
167 |
+
protected function notifyForgetAction($email, $userId = null)
|
168 |
+
{
|
169 |
+
gdpr('helpers')->mail(
|
170 |
+
gdpr('options')->get('delete_action_email'),
|
171 |
+
__("Data removed", 'gdpr-framework'),
|
172 |
+
gdpr('view')->render('email/action-forget', compact('email', 'userId')),
|
173 |
+
['Content-Type: text/html; charset=UTF-8']
|
174 |
+
);
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* @param $email
|
179 |
+
*/
|
180 |
+
protected function notifyForgetRequest($email)
|
181 |
+
{
|
182 |
+
$adminTabLink = esc_url(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $email));
|
183 |
+
|
184 |
+
gdpr('helpers')->mail(
|
185 |
+
gdpr('options')->get('delete_action_email'),
|
186 |
+
__("Data removal request", 'gdpr-framework'),
|
187 |
+
gdpr('view')->render('email/request-forget', compact('email', 'adminTabLink')),
|
188 |
+
['Content-Type: text/html; charset=UTF-8']
|
189 |
+
);
|
190 |
+
}
|
191 |
+
}
|
src/DataSubject/DataSubjectAdmin.php
CHANGED
@@ -1,18 +1,18 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\DataSubject;
|
4 |
-
|
5 |
-
class DataSubjectAdmin
|
6 |
-
{
|
7 |
-
public function __construct()
|
8 |
-
{
|
9 |
-
add_filter('gdpr/admin/tabs', [$this, 'registerTab'], 30);
|
10 |
-
}
|
11 |
-
|
12 |
-
public function registerTab($tabs)
|
13 |
-
{
|
14 |
-
$tabs['data-subject'] = gdpr()->make(AdminTabDataSubject::class);
|
15 |
-
|
16 |
-
return $tabs;
|
17 |
-
}
|
18 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\DataSubject;
|
4 |
+
|
5 |
+
class DataSubjectAdmin
|
6 |
+
{
|
7 |
+
public function __construct()
|
8 |
+
{
|
9 |
+
add_filter('gdpr/admin/tabs', [$this, 'registerTab'], 30);
|
10 |
+
}
|
11 |
+
|
12 |
+
public function registerTab($tabs)
|
13 |
+
{
|
14 |
+
$tabs['data-subject'] = gdpr()->make(AdminTabDataSubject::class);
|
15 |
+
|
16 |
+
return $tabs;
|
17 |
+
}
|
18 |
}
|
src/DataSubject/DataSubjectAuthenticator.php
CHANGED
@@ -1,130 +1,130 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\DataSubject;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Handle authenticating the data subject either by logged in user or by email/cookie
|
7 |
-
*
|
8 |
-
* Class DataSubjectAuthenticator
|
9 |
-
*
|
10 |
-
* @package Codelight\GDPR\DataSubject
|
11 |
-
*/
|
12 |
-
class DataSubjectAuthenticator
|
13 |
-
{
|
14 |
-
/**
|
15 |
-
* DataSubjectAuthenticator constructor.
|
16 |
-
*
|
17 |
-
* @param DataSubjectManager $dataSubjectManager
|
18 |
-
* @param DataSubjectIdentificator $dataSubjectIdentificator
|
19 |
-
*/
|
20 |
-
public function __construct(DataSubjectManager $dataSubjectManager, DataSubjectIdentificator $dataSubjectIdentificator)
|
21 |
-
{
|
22 |
-
$this->dataSubjectManager = $dataSubjectManager;
|
23 |
-
$this->dataSubjectIdentificator = $dataSubjectIdentificator;
|
24 |
-
}
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Attempt to authenticate the data subject
|
28 |
-
*
|
29 |
-
* @return bool|\Codelight\GDPR\DataSubject\DataSubject
|
30 |
-
*/
|
31 |
-
public function authenticate()
|
32 |
-
{
|
33 |
-
// If the user is logged in, authenticate them
|
34 |
-
if (is_user_logged_in()) {
|
35 |
-
return apply_filters('gdpr/authenticate', $this->dataSubjectManager->getByLoggedInUser());
|
36 |
-
}
|
37 |
-
|
38 |
-
// If the request contains the identification cookie, validate it and identify the
|
39 |
-
// current user
|
40 |
-
$cookieData = $this->getIdentificationCookieData();
|
41 |
-
if ($cookieData && $this->dataSubjectIdentificator->isKeyValid($cookieData[0], $cookieData[1])) {
|
42 |
-
return apply_filters('gdpr/authenticate', $this->dataSubjectManager->getByEmail($cookieData[0]));
|
43 |
-
}
|
44 |
-
|
45 |
-
// Otherwise, we are not authenticated
|
46 |
-
return apply_filters('gdpr/authenticate', false);
|
47 |
-
}
|
48 |
-
|
49 |
-
/**
|
50 |
-
* If the request contains a new identification key, validate it, then set a new key
|
51 |
-
* to make the previous link obsolete.
|
52 |
-
*/
|
53 |
-
public function identify()
|
54 |
-
{
|
55 |
-
// Do not attempt to identify logged in users
|
56 |
-
if (is_user_logged_in()) {
|
57 |
-
return;
|
58 |
-
}
|
59 |
-
|
60 |
-
if (isset($_REQUEST['gdpr_key']) && isset($_REQUEST['email'])) {
|
61 |
-
|
62 |
-
$privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
|
63 |
-
|
64 |
-
if ($this->dataSubjectIdentificator->isKeyValid($_REQUEST['email'], $_REQUEST['gdpr_key'])) {
|
65 |
-
$this->setIdentificationCookie($_REQUEST['email']);
|
66 |
-
$url = $privacyToolsPageUrl;
|
67 |
-
} else {
|
68 |
-
$url = add_query_arg([
|
69 |
-
'gdpr_notice' => 'invalid_key',
|
70 |
-
], $privacyToolsPageUrl);
|
71 |
-
}
|
72 |
-
|
73 |
-
wp_safe_redirect($url);
|
74 |
-
exit;
|
75 |
-
}
|
76 |
-
}
|
77 |
-
|
78 |
-
/**
|
79 |
-
* Set the identification cookie with the given key
|
80 |
-
*
|
81 |
-
* @param $key
|
82 |
-
*/
|
83 |
-
public function setIdentificationCookie($email)
|
84 |
-
{
|
85 |
-
$key = $this->dataSubjectIdentificator->generateKey($email);
|
86 |
-
|
87 |
-
setcookie(
|
88 |
-
'gdpr_key',
|
89 |
-
$email . '|' . $key,
|
90 |
-
time() + (15 * 60),
|
91 |
-
COOKIEPATH,
|
92 |
-
COOKIE_DOMAIN,
|
93 |
-
false,
|
94 |
-
true
|
95 |
-
);
|
96 |
-
}
|
97 |
-
|
98 |
-
/**
|
99 |
-
* @return string
|
100 |
-
*/
|
101 |
-
public function getIdentificationCookieData()
|
102 |
-
{
|
103 |
-
return isset($_COOKIE['gdpr_key']) ? explode('|', $_COOKIE['gdpr_key']) : null;
|
104 |
-
}
|
105 |
-
|
106 |
-
/**
|
107 |
-
* Remove the cookie
|
108 |
-
*/
|
109 |
-
public function deleteSession($logout = true)
|
110 |
-
{
|
111 |
-
unset($_COOKIE['gdpr_key']);
|
112 |
-
|
113 |
-
setcookie(
|
114 |
-
'gdpr_key',
|
115 |
-
'',
|
116 |
-
time() - 3600,
|
117 |
-
COOKIEPATH,
|
118 |
-
COOKIE_DOMAIN,
|
119 |
-
false,
|
120 |
-
true
|
121 |
-
);
|
122 |
-
|
123 |
-
if ($logout) {
|
124 |
-
wp_logout();
|
125 |
-
} else {
|
126 |
-
wp_destroy_current_session();
|
127 |
-
wp_clear_auth_cookie();
|
128 |
-
}
|
129 |
-
}
|
130 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\DataSubject;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Handle authenticating the data subject either by logged in user or by email/cookie
|
7 |
+
*
|
8 |
+
* Class DataSubjectAuthenticator
|
9 |
+
*
|
10 |
+
* @package Codelight\GDPR\DataSubject
|
11 |
+
*/
|
12 |
+
class DataSubjectAuthenticator
|
13 |
+
{
|
14 |
+
/**
|
15 |
+
* DataSubjectAuthenticator constructor.
|
16 |
+
*
|
17 |
+
* @param DataSubjectManager $dataSubjectManager
|
18 |
+
* @param DataSubjectIdentificator $dataSubjectIdentificator
|
19 |
+
*/
|
20 |
+
public function __construct(DataSubjectManager $dataSubjectManager, DataSubjectIdentificator $dataSubjectIdentificator)
|
21 |
+
{
|
22 |
+
$this->dataSubjectManager = $dataSubjectManager;
|
23 |
+
$this->dataSubjectIdentificator = $dataSubjectIdentificator;
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Attempt to authenticate the data subject
|
28 |
+
*
|
29 |
+
* @return bool|\Codelight\GDPR\DataSubject\DataSubject
|
30 |
+
*/
|
31 |
+
public function authenticate()
|
32 |
+
{
|
33 |
+
// If the user is logged in, authenticate them
|
34 |
+
if (is_user_logged_in()) {
|
35 |
+
return apply_filters('gdpr/authenticate', $this->dataSubjectManager->getByLoggedInUser());
|
36 |
+
}
|
37 |
+
|
38 |
+
// If the request contains the identification cookie, validate it and identify the
|
39 |
+
// current user
|
40 |
+
$cookieData = $this->getIdentificationCookieData();
|
41 |
+
if ($cookieData && $this->dataSubjectIdentificator->isKeyValid($cookieData[0], $cookieData[1])) {
|
42 |
+
return apply_filters('gdpr/authenticate', $this->dataSubjectManager->getByEmail($cookieData[0]));
|
43 |
+
}
|
44 |
+
|
45 |
+
// Otherwise, we are not authenticated
|
46 |
+
return apply_filters('gdpr/authenticate', false);
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* If the request contains a new identification key, validate it, then set a new key
|
51 |
+
* to make the previous link obsolete.
|
52 |
+
*/
|
53 |
+
public function identify()
|
54 |
+
{
|
55 |
+
// Do not attempt to identify logged in users
|
56 |
+
if (is_user_logged_in()) {
|
57 |
+
return;
|
58 |
+
}
|
59 |
+
|
60 |
+
if (isset($_REQUEST['gdpr_key']) && isset($_REQUEST['email'])) {
|
61 |
+
|
62 |
+
$privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
|
63 |
+
|
64 |
+
if ($this->dataSubjectIdentificator->isKeyValid($_REQUEST['email'], $_REQUEST['gdpr_key'])) {
|
65 |
+
$this->setIdentificationCookie($_REQUEST['email']);
|
66 |
+
$url = $privacyToolsPageUrl;
|
67 |
+
} else {
|
68 |
+
$url = add_query_arg([
|
69 |
+
'gdpr_notice' => 'invalid_key',
|
70 |
+
], $privacyToolsPageUrl);
|
71 |
+
}
|
72 |
+
|
73 |
+
wp_safe_redirect($url);
|
74 |
+
exit;
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Set the identification cookie with the given key
|
80 |
+
*
|
81 |
+
* @param $key
|
82 |
+
*/
|
83 |
+
public function setIdentificationCookie($email)
|
84 |
+
{
|
85 |
+
$key = $this->dataSubjectIdentificator->generateKey($email);
|
86 |
+
|
87 |
+
setcookie(
|
88 |
+
'gdpr_key',
|
89 |
+
$email . '|' . $key,
|
90 |
+
time() + (15 * 60),
|
91 |
+
COOKIEPATH,
|
92 |
+
COOKIE_DOMAIN,
|
93 |
+
false,
|
94 |
+
true
|
95 |
+
);
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* @return string
|
100 |
+
*/
|
101 |
+
public function getIdentificationCookieData()
|
102 |
+
{
|
103 |
+
return isset($_COOKIE['gdpr_key']) ? explode('|', $_COOKIE['gdpr_key']) : null;
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Remove the cookie
|
108 |
+
*/
|
109 |
+
public function deleteSession($logout = true)
|
110 |
+
{
|
111 |
+
unset($_COOKIE['gdpr_key']);
|
112 |
+
|
113 |
+
setcookie(
|
114 |
+
'gdpr_key',
|
115 |
+
'',
|
116 |
+
time() - 3600,
|
117 |
+
COOKIEPATH,
|
118 |
+
COOKIE_DOMAIN,
|
119 |
+
false,
|
120 |
+
true
|
121 |
+
);
|
122 |
+
|
123 |
+
if ($logout) {
|
124 |
+
wp_logout();
|
125 |
+
} else {
|
126 |
+
wp_destroy_current_session();
|
127 |
+
wp_clear_auth_cookie();
|
128 |
+
}
|
129 |
+
}
|
130 |
+
}
|
src/DataSubject/DataSubjectIdentificator.php
CHANGED
@@ -1,184 +1,184 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\DataSubject;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Options\Options;
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Identify the data subject by unique temporary key
|
9 |
-
*
|
10 |
-
* Class DataSubjectIdentificator
|
11 |
-
*
|
12 |
-
* @package Codelight\GDPR\DataSubject
|
13 |
-
*/
|
14 |
-
class DataSubjectIdentificator
|
15 |
-
{
|
16 |
-
/* @var DataSubjectManager */
|
17 |
-
protected $dataSubjectManager;
|
18 |
-
|
19 |
-
/* @var Options */
|
20 |
-
protected $options;
|
21 |
-
|
22 |
-
/**
|
23 |
-
* DataSubjectIdentificator constructor.
|
24 |
-
*
|
25 |
-
* @param DataSubjectManager $dataSubjectManager
|
26 |
-
*/
|
27 |
-
public function __construct(DataSubjectManager $dataSubjectManager, Options $options)
|
28 |
-
{
|
29 |
-
$this->dataSubjectManager = $dataSubjectManager;
|
30 |
-
$this->options = $options;
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Check if there is any data associated with the given email address
|
35 |
-
*
|
36 |
-
* @param $email
|
37 |
-
* @return bool
|
38 |
-
*/
|
39 |
-
public function isDataSubject($email)
|
40 |
-
{
|
41 |
-
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
42 |
-
|
43 |
-
return apply_filters('gdpr/data-subject/has-data', $dataSubject->hasData(), $email);
|
44 |
-
}
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Send the email with the link that allows data subject to authenticate
|
48 |
-
*
|
49 |
-
* @param $email
|
50 |
-
*/
|
51 |
-
public function sendIdentificationEmail($email)
|
52 |
-
{
|
53 |
-
$key = $this->generateKey($email);
|
54 |
-
$privacyToolsPageUrl = gdpr('helpers')->getPrivacyToolsPageUrl();
|
55 |
-
$identificationUrl = add_query_arg([
|
56 |
-
'gdpr_key' => $key,
|
57 |
-
'email' => $email,
|
58 |
-
], $privacyToolsPageUrl);
|
59 |
-
|
60 |
-
$siteName = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
|
61 |
-
|
62 |
-
// todo: handle or log email sending errors
|
63 |
-
gdpr('helpers')->mail(
|
64 |
-
$email,
|
65 |
-
__("Your personal data on", 'gdpr-framework') . ' ' . $siteName,
|
66 |
-
gdpr('view')->render('email/identify-data-subject', compact('identificationUrl', 'siteName')),
|
67 |
-
['Content-Type: text/html; charset=UTF-8']
|
68 |
-
);
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Notify the email address that we do not store any data about them
|
73 |
-
*
|
74 |
-
* @param $email
|
75 |
-
*/
|
76 |
-
public function sendNoDataFoundEmail($email)
|
77 |
-
{
|
78 |
-
$siteName = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
|
79 |
-
|
80 |
-
gdpr('helpers')->mail(
|
81 |
-
$email,
|
82 |
-
__("Your personal data on", 'gdpr-framework') . ' ' . $siteName,
|
83 |
-
gdpr('view')->render('email/no-data', compact('siteName')),
|
84 |
-
['Content-Type: text/html; charset=UTF-8']
|
85 |
-
);
|
86 |
-
}
|
87 |
-
|
88 |
-
/**
|
89 |
-
* Check if the given key is valid for the given email
|
90 |
-
*
|
91 |
-
* @param $email
|
92 |
-
* @param $key
|
93 |
-
* @return bool
|
94 |
-
*/
|
95 |
-
public function isKeyValid($email, $key)
|
96 |
-
{
|
97 |
-
$keyData = $this->options->get("key_{$email}");
|
98 |
-
|
99 |
-
if (!$keyData) {
|
100 |
-
// No key exists
|
101 |
-
return false;
|
102 |
-
}
|
103 |
-
|
104 |
-
if (!isset($keyData['hashed-key']) || empty($keyData['hashed-key'])) {
|
105 |
-
// There was an error saving the data to database
|
106 |
-
return false;
|
107 |
-
}
|
108 |
-
|
109 |
-
if (!$this->validateKey($key, $keyData['hashed-key'])) {
|
110 |
-
// Invalid key
|
111 |
-
return false;
|
112 |
-
}
|
113 |
-
|
114 |
-
if ($keyData['valid-until'] < strtotime('now')) {
|
115 |
-
// expired key
|
116 |
-
return false;
|
117 |
-
}
|
118 |
-
|
119 |
-
// Double-check everything just to make sure we leave no errors in the code
|
120 |
-
return ($this->validateKey($key, $keyData['hashed-key']) && $keyData['valid-until'] > strtotime('now'));
|
121 |
-
}
|
122 |
-
|
123 |
-
/**
|
124 |
-
* Generate a secret key using the same functionality WP itself is using for Forgot Password requests
|
125 |
-
*
|
126 |
-
* @param $email
|
127 |
-
*/
|
128 |
-
public function generateKey($email)
|
129 |
-
{
|
130 |
-
$key = wp_generate_password(20, false);
|
131 |
-
$this->saveKey($email, $key);
|
132 |
-
|
133 |
-
return $key;
|
134 |
-
}
|
135 |
-
|
136 |
-
/**
|
137 |
-
* Save key into the database along with the expiration timestamp
|
138 |
-
*
|
139 |
-
* @param $email
|
140 |
-
* @param $key
|
141 |
-
*/
|
142 |
-
protected function saveKey($email, $key)
|
143 |
-
{
|
144 |
-
$this->options->set("key_{$email}", [
|
145 |
-
'email' => $email,
|
146 |
-
'hashed-key' => $this->hashKey($key),
|
147 |
-
'valid-until' => strtotime('+15 minutes'),
|
148 |
-
]);
|
149 |
-
}
|
150 |
-
|
151 |
-
/**
|
152 |
-
* @param $submittedKey
|
153 |
-
* @param $storedKey
|
154 |
-
*/
|
155 |
-
protected function validateKey($submittedKey, $storedKey)
|
156 |
-
{
|
157 |
-
return $this->getHasher()->CheckPassword($submittedKey, $storedKey);
|
158 |
-
}
|
159 |
-
|
160 |
-
/**
|
161 |
-
* Hash the key before saving to database to keep it hidden from the prying eyes of your sysadmin
|
162 |
-
*
|
163 |
-
* @param $key
|
164 |
-
* @return bool|string
|
165 |
-
*/
|
166 |
-
protected function hashKey($key)
|
167 |
-
{
|
168 |
-
return $this->getHasher()->HashPassword($key);
|
169 |
-
}
|
170 |
-
|
171 |
-
/**
|
172 |
-
* @return \PasswordHash
|
173 |
-
*/
|
174 |
-
protected function getHasher()
|
175 |
-
{
|
176 |
-
global $wp_hasher;
|
177 |
-
if (empty($wp_hasher)) {
|
178 |
-
require_once ABSPATH . WPINC . '/class-phpass.php';
|
179 |
-
$wp_hasher = new \PasswordHash(8, true);
|
180 |
-
}
|
181 |
-
|
182 |
-
return $wp_hasher;
|
183 |
-
}
|
184 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\DataSubject;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Options\Options;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Identify the data subject by unique temporary key
|
9 |
+
*
|
10 |
+
* Class DataSubjectIdentificator
|
11 |
+
*
|
12 |
+
* @package Codelight\GDPR\DataSubject
|
13 |
+
*/
|
14 |
+
class DataSubjectIdentificator
|
15 |
+
{
|
16 |
+
/* @var DataSubjectManager */
|
17 |
+
protected $dataSubjectManager;
|
18 |
+
|
19 |
+
/* @var Options */
|
20 |
+
protected $options;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* DataSubjectIdentificator constructor.
|
24 |
+
*
|
25 |
+
* @param DataSubjectManager $dataSubjectManager
|
26 |
+
*/
|
27 |
+
public function __construct(DataSubjectManager $dataSubjectManager, Options $options)
|
28 |
+
{
|
29 |
+
$this->dataSubjectManager = $dataSubjectManager;
|
30 |
+
$this->options = $options;
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Check if there is any data associated with the given email address
|
35 |
+
*
|
36 |
+
* @param $email
|
37 |
+
* @return bool
|
38 |
+
*/
|
39 |
+
public function isDataSubject($email)
|
40 |
+
{
|
41 |
+
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
42 |
+
|
43 |
+
return apply_filters('gdpr/data-subject/has-data', $dataSubject->hasData(), $email);
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Send the email with the link that allows data subject to authenticate
|
48 |
+
*
|
49 |
+
* @param $email
|
50 |
+
*/
|
51 |
+
public function sendIdentificationEmail($email)
|
52 |
+
{
|
53 |
+
$key = $this->generateKey($email);
|
54 |
+
$privacyToolsPageUrl = gdpr('helpers')->getPrivacyToolsPageUrl();
|
55 |
+
$identificationUrl = add_query_arg([
|
56 |
+
'gdpr_key' => $key,
|
57 |
+
'email' => $email,
|
58 |
+
], $privacyToolsPageUrl);
|
59 |
+
|
60 |
+
$siteName = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
|
61 |
+
|
62 |
+
// todo: handle or log email sending errors
|
63 |
+
gdpr('helpers')->mail(
|
64 |
+
$email,
|
65 |
+
__("Your personal data on", 'gdpr-framework') . ' ' . $siteName,
|
66 |
+
gdpr('view')->render('email/identify-data-subject', compact('identificationUrl', 'siteName')),
|
67 |
+
['Content-Type: text/html; charset=UTF-8']
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Notify the email address that we do not store any data about them
|
73 |
+
*
|
74 |
+
* @param $email
|
75 |
+
*/
|
76 |
+
public function sendNoDataFoundEmail($email)
|
77 |
+
{
|
78 |
+
$siteName = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
|
79 |
+
|
80 |
+
gdpr('helpers')->mail(
|
81 |
+
$email,
|
82 |
+
__("Your personal data on", 'gdpr-framework') . ' ' . $siteName,
|
83 |
+
gdpr('view')->render('email/no-data', compact('siteName')),
|
84 |
+
['Content-Type: text/html; charset=UTF-8']
|
85 |
+
);
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Check if the given key is valid for the given email
|
90 |
+
*
|
91 |
+
* @param $email
|
92 |
+
* @param $key
|
93 |
+
* @return bool
|
94 |
+
*/
|
95 |
+
public function isKeyValid($email, $key)
|
96 |
+
{
|
97 |
+
$keyData = $this->options->get("key_{$email}");
|
98 |
+
|
99 |
+
if (!$keyData) {
|
100 |
+
// No key exists
|
101 |
+
return false;
|
102 |
+
}
|
103 |
+
|
104 |
+
if (!isset($keyData['hashed-key']) || empty($keyData['hashed-key'])) {
|
105 |
+
// There was an error saving the data to database
|
106 |
+
return false;
|
107 |
+
}
|
108 |
+
|
109 |
+
if (!$this->validateKey($key, $keyData['hashed-key'])) {
|
110 |
+
// Invalid key
|
111 |
+
return false;
|
112 |
+
}
|
113 |
+
|
114 |
+
if ($keyData['valid-until'] < strtotime('now')) {
|
115 |
+
// expired key
|
116 |
+
return false;
|
117 |
+
}
|
118 |
+
|
119 |
+
// Double-check everything just to make sure we leave no errors in the code
|
120 |
+
return ($this->validateKey($key, $keyData['hashed-key']) && $keyData['valid-until'] > strtotime('now'));
|
121 |
+
}
|
122 |
+
|
123 |
+
/**
|
124 |
+
* Generate a secret key using the same functionality WP itself is using for Forgot Password requests
|
125 |
+
*
|
126 |
+
* @param $email
|
127 |
+
*/
|
128 |
+
public function generateKey($email)
|
129 |
+
{
|
130 |
+
$key = wp_generate_password(20, false);
|
131 |
+
$this->saveKey($email, $key);
|
132 |
+
|
133 |
+
return $key;
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Save key into the database along with the expiration timestamp
|
138 |
+
*
|
139 |
+
* @param $email
|
140 |
+
* @param $key
|
141 |
+
*/
|
142 |
+
protected function saveKey($email, $key)
|
143 |
+
{
|
144 |
+
$this->options->set("key_{$email}", [
|
145 |
+
'email' => $email,
|
146 |
+
'hashed-key' => $this->hashKey($key),
|
147 |
+
'valid-until' => strtotime('+15 minutes'),
|
148 |
+
]);
|
149 |
+
}
|
150 |
+
|
151 |
+
/**
|
152 |
+
* @param $submittedKey
|
153 |
+
* @param $storedKey
|
154 |
+
*/
|
155 |
+
protected function validateKey($submittedKey, $storedKey)
|
156 |
+
{
|
157 |
+
return $this->getHasher()->CheckPassword($submittedKey, $storedKey);
|
158 |
+
}
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Hash the key before saving to database to keep it hidden from the prying eyes of your sysadmin
|
162 |
+
*
|
163 |
+
* @param $key
|
164 |
+
* @return bool|string
|
165 |
+
*/
|
166 |
+
protected function hashKey($key)
|
167 |
+
{
|
168 |
+
return $this->getHasher()->HashPassword($key);
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* @return \PasswordHash
|
173 |
+
*/
|
174 |
+
protected function getHasher()
|
175 |
+
{
|
176 |
+
global $wp_hasher;
|
177 |
+
if (empty($wp_hasher)) {
|
178 |
+
require_once ABSPATH . WPINC . '/class-phpass.php';
|
179 |
+
$wp_hasher = new \PasswordHash(8, true);
|
180 |
+
}
|
181 |
+
|
182 |
+
return $wp_hasher;
|
183 |
+
}
|
184 |
+
}
|
src/Helpers.php
CHANGED
@@ -1,170 +1,170 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* General helper functions
|
7 |
-
*
|
8 |
-
* Class Helpers
|
9 |
-
*
|
10 |
-
* @package Codelight\GDPR
|
11 |
-
*/
|
12 |
-
class Helpers
|
13 |
-
{
|
14 |
-
public function supportUrl($url = '')
|
15 |
-
{
|
16 |
-
return gdpr('config')->get('help.url') . $url;
|
17 |
-
}
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Get an associative array of EU countries
|
21 |
-
*
|
22 |
-
* @return array
|
23 |
-
*/
|
24 |
-
public function getEUCountryList()
|
25 |
-
{
|
26 |
-
return [
|
27 |
-
'AT' => _x('Austria', '(Admin)', 'gdpr-framework'),
|
28 |
-
'BE' => _x('Belgium', '(Admin)', 'gdpr-framework'),
|
29 |
-
'BG' => _x('Bulgaria', '(Admin)', 'gdpr-framework'),
|
30 |
-
'HR' => _x('Croatia','(Admin)', 'gdpr-framework'),
|
31 |
-
'CY' => _x('Cyprus', '(Admin)', 'gdpr-framework'),
|
32 |
-
'CZ' => _x('Czech Republic', '(Admin)', 'gdpr-framework'),
|
33 |
-
'DK' => _x('Denmark', '(Admin)', 'gdpr-framework'),
|
34 |
-
'EE' => _x('Estonia', '(Admin)', 'gdpr-framework'),
|
35 |
-
'FI' => _x('Finland', '(Admin)', 'gdpr-framework'),
|
36 |
-
'FR' => _x('France', '(Admin)', 'gdpr-framework'),
|
37 |
-
'DE' => _x('Germany', '(Admin)', 'gdpr-framework'),
|
38 |
-
'GR' => _x('Greece', '(Admin)', 'gdpr-framework'),
|
39 |
-
'HU' => _x('Hungary', '(Admin)', 'gdpr-framework'),
|
40 |
-
'IE' => _x('Ireland', '(Admin)', 'gdpr-framework'),
|
41 |
-
'IT' => _x('Italy', '(Admin)', 'gdpr-framework'),
|
42 |
-
'LV' => _x('Latvia', '(Admin)', 'gdpr-framework'),
|
43 |
-
'LT' => _x('Lithuania', '(Admin)', 'gdpr-framework'),
|
44 |
-
'LU' => _x('Luxembourg', '(Admin)', 'gdpr-framework'),
|
45 |
-
'MT' => _x('Malta', '(Admin)', 'gdpr-framework'),
|
46 |
-
'NL' => _x('Netherlands', '(Admin)', 'gdpr-framework'),
|
47 |
-
'PL' => _x('Poland', '(Admin)', 'gdpr-framework'),
|
48 |
-
'PT' => _x('Portugal', '(Admin)', 'gdpr-framework'),
|
49 |
-
'RO' => _x('Romania', '(Admin)', 'gdpr-framework'),
|
50 |
-
'SK' => _x('Slovakia', '(Admin)', 'gdpr-framework'),
|
51 |
-
'SI' => _x('Slovenia', '(Admin)', 'gdpr-framework'),
|
52 |
-
'ES' => _x('Spain', '(Admin)', 'gdpr-framework'),
|
53 |
-
'SE' => _x('Sweden', '(Admin)', 'gdpr-framework'),
|
54 |
-
'UK' => _x('United Kingdom', '(Admin)', 'gdpr-framework'),
|
55 |
-
];
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Get a list of <option> values for the country selector
|
60 |
-
*
|
61 |
-
* @param null $current
|
62 |
-
*
|
63 |
-
* @return mixed
|
64 |
-
*/
|
65 |
-
public function getCountrySelectOptions($current = null)
|
66 |
-
{
|
67 |
-
$eu = $this->getEUCountryList();
|
68 |
-
$outside = [
|
69 |
-
"IS" => _x('Iceland', '(Admin)', 'gdpr-framework'),
|
70 |
-
"NO" => _x('Norway', '(Admin)', 'gdpr-framework'),
|
71 |
-
"LI" => _x('Liechtenstein', '(Admin)', 'gdpr-framework'),
|
72 |
-
"CH" => _x('Switzerland', '(Admin)', 'gdpr-framework'),
|
73 |
-
"US" => _x('United States', '(Admin)', 'gdpr-framework'),
|
74 |
-
"other" => _x('Rest of the world', '(Admin)', 'gdpr-framework'),
|
75 |
-
];
|
76 |
-
|
77 |
-
return gdpr('view')->render('global/country-options', compact('eu', 'outside', 'current'));
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Check if a controller from the given country needs a representative in the EU
|
82 |
-
*
|
83 |
-
* @param $code
|
84 |
-
* @return bool
|
85 |
-
*/
|
86 |
-
public function countryNeedsRepresentative($code)
|
87 |
-
{
|
88 |
-
return in_array($code, ['US', 'other']);
|
89 |
-
}
|
90 |
-
|
91 |
-
/**
|
92 |
-
* Get the data protection authority information for a given country
|
93 |
-
*
|
94 |
-
* @param null $countryCode
|
95 |
-
* @return array
|
96 |
-
*/
|
97 |
-
public function getDataProtectionAuthorityInfo($countryCode = null)
|
98 |
-
{
|
99 |
-
if (!$countryCode) {
|
100 |
-
$countryCode = gdpr('options')->get('company_location');
|
101 |
-
}
|
102 |
-
|
103 |
-
$dpaData = require(gdpr('config')->get('plugin.path') . 'assets/data-protection-authorities.php');
|
104 |
-
|
105 |
-
if (isset($dpaData[$countryCode])) {
|
106 |
-
return $dpaData[$countryCode];
|
107 |
-
}
|
108 |
-
|
109 |
-
return [];
|
110 |
-
}
|
111 |
-
|
112 |
-
/**
|
113 |
-
* Get the info regarding all DPAs
|
114 |
-
*/
|
115 |
-
public function getDataProtectionAuthorities()
|
116 |
-
{
|
117 |
-
return require(gdpr('config')->get('plugin.path') . 'assets/data-protection-authorities.php');
|
118 |
-
}
|
119 |
-
|
120 |
-
public function getAdminUrl($suffix = '')
|
121 |
-
{
|
122 |
-
return admin_url('tools.php?page=privacy' . $suffix);
|
123 |
-
}
|
124 |
-
|
125 |
-
public function getDashboardDataPageUrl($suffix = '')
|
126 |
-
{
|
127 |
-
return admin_url('users.php?page=gdpr-profile' . $suffix);
|
128 |
-
}
|
129 |
-
|
130 |
-
public function getPrivacyToolsPageUrl()
|
131 |
-
{
|
132 |
-
$toolsPageId = gdpr('options')->get('tools_page');
|
133 |
-
return $toolsPageId ? get_permalink($toolsPageId) : '';
|
134 |
-
}
|
135 |
-
|
136 |
-
public function getPrivacyPolicyPageUrl()
|
137 |
-
{
|
138 |
-
$policyPageId = gdpr('options')->get('policy_page');
|
139 |
-
return $policyPageId ? get_permalink($policyPageId) : '';
|
140 |
-
}
|
141 |
-
|
142 |
-
public function error()
|
143 |
-
{
|
144 |
-
wp_die(
|
145 |
-
__('An error has occurred. Please contact the site administrator.', 'gdpr-framework')
|
146 |
-
);
|
147 |
-
}
|
148 |
-
|
149 |
-
public function docs($url = '')
|
150 |
-
{
|
151 |
-
return 'https://codelight.eu/wordpress-gdpr-framework/' . $url;
|
152 |
-
}
|
153 |
-
|
154 |
-
/**
|
155 |
-
* Wrapper around wp_mail() to filter the headers
|
156 |
-
* Example code for changing the sender email:
|
157 |
-
*
|
158 |
-
* add_filter('gdpr/mail/headers', function($headers) {
|
159 |
-
$headers[] = 'From: Firstname Lastname <test@example.com>';
|
160 |
-
return $headers;
|
161 |
-
});
|
162 |
-
*
|
163 |
-
*
|
164 |
-
*/
|
165 |
-
public function mail($to, $subject, $message, $headers = '', $attachments = [])
|
166 |
-
{
|
167 |
-
$headers = apply_filters('gdpr/mail/headers', $headers);
|
168 |
-
wp_mail($to, $subject, $message, $headers, $attachments);
|
169 |
-
}
|
170 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* General helper functions
|
7 |
+
*
|
8 |
+
* Class Helpers
|
9 |
+
*
|
10 |
+
* @package Codelight\GDPR
|
11 |
+
*/
|
12 |
+
class Helpers
|
13 |
+
{
|
14 |
+
public function supportUrl($url = '')
|
15 |
+
{
|
16 |
+
return gdpr('config')->get('help.url') . $url;
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Get an associative array of EU countries
|
21 |
+
*
|
22 |
+
* @return array
|
23 |
+
*/
|
24 |
+
public function getEUCountryList()
|
25 |
+
{
|
26 |
+
return [
|
27 |
+
'AT' => _x('Austria', '(Admin)', 'gdpr-framework'),
|
28 |
+
'BE' => _x('Belgium', '(Admin)', 'gdpr-framework'),
|
29 |
+
'BG' => _x('Bulgaria', '(Admin)', 'gdpr-framework'),
|
30 |
+
'HR' => _x('Croatia','(Admin)', 'gdpr-framework'),
|
31 |
+
'CY' => _x('Cyprus', '(Admin)', 'gdpr-framework'),
|
32 |
+
'CZ' => _x('Czech Republic', '(Admin)', 'gdpr-framework'),
|
33 |
+
'DK' => _x('Denmark', '(Admin)', 'gdpr-framework'),
|
34 |
+
'EE' => _x('Estonia', '(Admin)', 'gdpr-framework'),
|
35 |
+
'FI' => _x('Finland', '(Admin)', 'gdpr-framework'),
|
36 |
+
'FR' => _x('France', '(Admin)', 'gdpr-framework'),
|
37 |
+
'DE' => _x('Germany', '(Admin)', 'gdpr-framework'),
|
38 |
+
'GR' => _x('Greece', '(Admin)', 'gdpr-framework'),
|
39 |
+
'HU' => _x('Hungary', '(Admin)', 'gdpr-framework'),
|
40 |
+
'IE' => _x('Ireland', '(Admin)', 'gdpr-framework'),
|
41 |
+
'IT' => _x('Italy', '(Admin)', 'gdpr-framework'),
|
42 |
+
'LV' => _x('Latvia', '(Admin)', 'gdpr-framework'),
|
43 |
+
'LT' => _x('Lithuania', '(Admin)', 'gdpr-framework'),
|
44 |
+
'LU' => _x('Luxembourg', '(Admin)', 'gdpr-framework'),
|
45 |
+
'MT' => _x('Malta', '(Admin)', 'gdpr-framework'),
|
46 |
+
'NL' => _x('Netherlands', '(Admin)', 'gdpr-framework'),
|
47 |
+
'PL' => _x('Poland', '(Admin)', 'gdpr-framework'),
|
48 |
+
'PT' => _x('Portugal', '(Admin)', 'gdpr-framework'),
|
49 |
+
'RO' => _x('Romania', '(Admin)', 'gdpr-framework'),
|
50 |
+
'SK' => _x('Slovakia', '(Admin)', 'gdpr-framework'),
|
51 |
+
'SI' => _x('Slovenia', '(Admin)', 'gdpr-framework'),
|
52 |
+
'ES' => _x('Spain', '(Admin)', 'gdpr-framework'),
|
53 |
+
'SE' => _x('Sweden', '(Admin)', 'gdpr-framework'),
|
54 |
+
'UK' => _x('United Kingdom', '(Admin)', 'gdpr-framework'),
|
55 |
+
];
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Get a list of <option> values for the country selector
|
60 |
+
*
|
61 |
+
* @param null $current
|
62 |
+
*
|
63 |
+
* @return mixed
|
64 |
+
*/
|
65 |
+
public function getCountrySelectOptions($current = null)
|
66 |
+
{
|
67 |
+
$eu = $this->getEUCountryList();
|
68 |
+
$outside = [
|
69 |
+
"IS" => _x('Iceland', '(Admin)', 'gdpr-framework'),
|
70 |
+
"NO" => _x('Norway', '(Admin)', 'gdpr-framework'),
|
71 |
+
"LI" => _x('Liechtenstein', '(Admin)', 'gdpr-framework'),
|
72 |
+
"CH" => _x('Switzerland', '(Admin)', 'gdpr-framework'),
|
73 |
+
"US" => _x('United States', '(Admin)', 'gdpr-framework'),
|
74 |
+
"other" => _x('Rest of the world', '(Admin)', 'gdpr-framework'),
|
75 |
+
];
|
76 |
+
|
77 |
+
return gdpr('view')->render('global/country-options', compact('eu', 'outside', 'current'));
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Check if a controller from the given country needs a representative in the EU
|
82 |
+
*
|
83 |
+
* @param $code
|
84 |
+
* @return bool
|
85 |
+
*/
|
86 |
+
public function countryNeedsRepresentative($code)
|
87 |
+
{
|
88 |
+
return in_array($code, ['US', 'other']);
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Get the data protection authority information for a given country
|
93 |
+
*
|
94 |
+
* @param null $countryCode
|
95 |
+
* @return array
|
96 |
+
*/
|
97 |
+
public function getDataProtectionAuthorityInfo($countryCode = null)
|
98 |
+
{
|
99 |
+
if (!$countryCode) {
|
100 |
+
$countryCode = gdpr('options')->get('company_location');
|
101 |
+
}
|
102 |
+
|
103 |
+
$dpaData = require(gdpr('config')->get('plugin.path') . 'assets/data-protection-authorities.php');
|
104 |
+
|
105 |
+
if (isset($dpaData[$countryCode])) {
|
106 |
+
return $dpaData[$countryCode];
|
107 |
+
}
|
108 |
+
|
109 |
+
return [];
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Get the info regarding all DPAs
|
114 |
+
*/
|
115 |
+
public function getDataProtectionAuthorities()
|
116 |
+
{
|
117 |
+
return require(gdpr('config')->get('plugin.path') . 'assets/data-protection-authorities.php');
|
118 |
+
}
|
119 |
+
|
120 |
+
public function getAdminUrl($suffix = '')
|
121 |
+
{
|
122 |
+
return admin_url('tools.php?page=privacy' . $suffix);
|
123 |
+
}
|
124 |
+
|
125 |
+
public function getDashboardDataPageUrl($suffix = '')
|
126 |
+
{
|
127 |
+
return admin_url('users.php?page=gdpr-profile' . $suffix);
|
128 |
+
}
|
129 |
+
|
130 |
+
public function getPrivacyToolsPageUrl()
|
131 |
+
{
|
132 |
+
$toolsPageId = gdpr('options')->get('tools_page');
|
133 |
+
return $toolsPageId ? get_permalink($toolsPageId) : '';
|
134 |
+
}
|
135 |
+
|
136 |
+
public function getPrivacyPolicyPageUrl()
|
137 |
+
{
|
138 |
+
$policyPageId = gdpr('options')->get('policy_page');
|
139 |
+
return $policyPageId ? get_permalink($policyPageId) : '';
|
140 |
+
}
|
141 |
+
|
142 |
+
public function error()
|
143 |
+
{
|
144 |
+
wp_die(
|
145 |
+
__('An error has occurred. Please contact the site administrator.', 'gdpr-framework')
|
146 |
+
);
|
147 |
+
}
|
148 |
+
|
149 |
+
public function docs($url = '')
|
150 |
+
{
|
151 |
+
return 'https://codelight.eu/wordpress-gdpr-framework/' . $url;
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Wrapper around wp_mail() to filter the headers
|
156 |
+
* Example code for changing the sender email:
|
157 |
+
*
|
158 |
+
* add_filter('gdpr/mail/headers', function($headers) {
|
159 |
+
$headers[] = 'From: Firstname Lastname <test@example.com>';
|
160 |
+
return $headers;
|
161 |
+
});
|
162 |
+
*
|
163 |
+
*
|
164 |
+
*/
|
165 |
+
public function mail($to, $subject, $message, $headers = '', $attachments = [])
|
166 |
+
{
|
167 |
+
$headers = apply_filters('gdpr/mail/headers', $headers);
|
168 |
+
wp_mail($to, $subject, $message, $headers, $attachments);
|
169 |
+
}
|
170 |
+
}
|
src/Installer/Installer.php
CHANGED
@@ -1,305 +1,305 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Installer;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Admin\AdminTabGeneral;
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Handle all installation activities
|
9 |
-
*
|
10 |
-
* Class Installer
|
11 |
-
*
|
12 |
-
* @package Codelight\GDPR\Installer
|
13 |
-
*/
|
14 |
-
class Installer
|
15 |
-
{
|
16 |
-
/* @var array */
|
17 |
-
protected $defaultSteps = [
|
18 |
-
'Codelight\GDPR\Installer\Steps\Welcome',
|
19 |
-
'Codelight\GDPR\Installer\Steps\Disclaimer',
|
20 |
-
'Codelight\GDPR\Installer\Steps\ConfigurationPages',
|
21 |
-
'Codelight\GDPR\Installer\Steps\ConfigurationSettings',
|
22 |
-
'Codelight\GDPR\Installer\Steps\PolicySettings',
|
23 |
-
'Codelight\GDPR\Installer\Steps\PolicyContents',
|
24 |
-
'Codelight\GDPR\Installer\Steps\Consent',
|
25 |
-
'Codelight\GDPR\Installer\Steps\Integrations',
|
26 |
-
'Codelight\GDPR\Installer\Steps\Finish',
|
27 |
-
];
|
28 |
-
|
29 |
-
/* @var array */
|
30 |
-
protected $steps = [];
|
31 |
-
|
32 |
-
/* @var InstallerWizard */
|
33 |
-
protected $wizard;
|
34 |
-
|
35 |
-
/* @var InstallerRouter */
|
36 |
-
protected $router;
|
37 |
-
|
38 |
-
/**
|
39 |
-
* Check if the installer is enabled and ensure the user has correct permissions to run it
|
40 |
-
*/
|
41 |
-
public function __construct(AdminTabGeneral $adminTab)
|
42 |
-
{
|
43 |
-
if (!$this->isInstallerEnabled()) {
|
44 |
-
return;
|
45 |
-
}
|
46 |
-
|
47 |
-
if (!$this->userHasPermissions()) {
|
48 |
-
return;
|
49 |
-
}
|
50 |
-
|
51 |
-
$this->adminTab = $adminTab;
|
52 |
-
|
53 |
-
$this->maybeDisplayDisclaimer();
|
54 |
-
$this->setupHooks();
|
55 |
-
|
56 |
-
if (!$this->isInstalled()) {
|
57 |
-
$this->setupSteps();
|
58 |
-
$this->runInstaller();
|
59 |
-
}
|
60 |
-
}
|
61 |
-
|
62 |
-
/**
|
63 |
-
* Setup actions and admin tab components
|
64 |
-
*/
|
65 |
-
protected function setupHooks()
|
66 |
-
{
|
67 |
-
add_action('admin_init', [$this, 'setupAdminGeneralTabButtons'], 0);
|
68 |
-
|
69 |
-
add_action('gdpr/admin/action/accept_disclaimer', [$this, 'acceptDisclaimer']);
|
70 |
-
|
71 |
-
add_action('gdpr/admin/action/restart_wizard', [$this, 'restartWizard']);
|
72 |
-
|
73 |
-
add_action('gdpr/admin/action/auto_install', [$this, 'autoInstall']);
|
74 |
-
add_action('gdpr/admin/action/skip_install', [$this, 'skipInstall']);
|
75 |
-
}
|
76 |
-
|
77 |
-
protected function runInstaller()
|
78 |
-
{
|
79 |
-
$this->wizard = new InstallerWizard;
|
80 |
-
$this->router = new InstallerRouter($this->steps);
|
81 |
-
|
82 |
-
// If we're currently on one of the installer steps, let the router handle it
|
83 |
-
if ($this->router->isInstallerStep()) {
|
84 |
-
return;
|
85 |
-
}
|
86 |
-
|
87 |
-
if ($this->getCurrentStepSlug()) {
|
88 |
-
// If the current step is set, display continue notice
|
89 |
-
$step = $this->router->findStep($this->getCurrentStepSlug());
|
90 |
-
// If step doesn't exist, then it means the step slugs have changed. Do nothing.
|
91 |
-
if (!$step) {
|
92 |
-
return;
|
93 |
-
}
|
94 |
-
$this->displayContinueNotice($step->getUrl());
|
95 |
-
} else {
|
96 |
-
// If the current step is not set, it means the installer hasn't been started yet
|
97 |
-
$this->displayWelcomeNotice();
|
98 |
-
}
|
99 |
-
}
|
100 |
-
|
101 |
-
/**
|
102 |
-
* If the admin has not accepted the disclaimer, render it
|
103 |
-
*/
|
104 |
-
public function maybeDisplayDisclaimer()
|
105 |
-
{
|
106 |
-
if (!gdpr('options')->get('plugin_disclaimer_accepted') && (isset($_GET['page']) && 'privacy' === $_GET['page'])) {
|
107 |
-
$acceptUrl = add_query_arg([
|
108 |
-
'gdpr_action' => 'accept_disclaimer',
|
109 |
-
'gdpr_nonce' => wp_create_nonce('gdpr/admin/action/accept_disclaimer'),
|
110 |
-
]);
|
111 |
-
gdpr('admin-notice')->add('admin/notices/disclaimer', compact('acceptUrl'));
|
112 |
-
}
|
113 |
-
}
|
114 |
-
|
115 |
-
/**
|
116 |
-
* Mark the disclaimer as accepted
|
117 |
-
*/
|
118 |
-
public function acceptDisclaimer()
|
119 |
-
{
|
120 |
-
gdpr('options')->set('plugin_disclaimer_accepted', 'yes');
|
121 |
-
wp_safe_redirect(gdpr('helpers')->getAdminUrl());
|
122 |
-
exit;
|
123 |
-
}
|
124 |
-
|
125 |
-
/**
|
126 |
-
* Display installer section in admin page
|
127 |
-
*/
|
128 |
-
public function setupAdminGeneralTabButtons()
|
129 |
-
{
|
130 |
-
/**
|
131 |
-
* Display wizard buttons
|
132 |
-
*/
|
133 |
-
$this->adminTab->registerSettingSection(
|
134 |
-
'gdpr-section-wizard',
|
135 |
-
_x('Setup Wizard', '(Admin)', 'gdpr-framework'),
|
136 |
-
[$this, 'renderWizardButtons']
|
137 |
-
);
|
138 |
-
}
|
139 |
-
|
140 |
-
/**
|
141 |
-
* Render the installer section
|
142 |
-
*/
|
143 |
-
public function renderWizardButtons()
|
144 |
-
{
|
145 |
-
$restartUrl = add_query_arg([
|
146 |
-
'gdpr_action' => 'restart_wizard',
|
147 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/restart_wizard"),
|
148 |
-
]);
|
149 |
-
|
150 |
-
echo gdpr('view')->render(
|
151 |
-
'admin/wizard-buttons',
|
152 |
-
compact('restartUrl')
|
153 |
-
);
|
154 |
-
}
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Restart and redirect to first step
|
158 |
-
*/
|
159 |
-
public function restartWizard()
|
160 |
-
{
|
161 |
-
gdpr('options')->delete('installer_step');
|
162 |
-
gdpr('options')->delete('is_installed');
|
163 |
-
|
164 |
-
wp_safe_redirect(self_admin_url());
|
165 |
-
exit;
|
166 |
-
}
|
167 |
-
|
168 |
-
/**
|
169 |
-
* Allow plugins to modify the steps
|
170 |
-
*/
|
171 |
-
protected function setupSteps()
|
172 |
-
{
|
173 |
-
$steps = apply_filters('gdpr/installer/steps', $this->defaultSteps);
|
174 |
-
|
175 |
-
foreach ($steps as $index => $step) {
|
176 |
-
$this->steps[$index] = new $step;
|
177 |
-
}
|
178 |
-
}
|
179 |
-
|
180 |
-
/**
|
181 |
-
* The installer can be disabled by filter.
|
182 |
-
* Check if it's enabled
|
183 |
-
*
|
184 |
-
* @return bool
|
185 |
-
*/
|
186 |
-
protected function isInstallerEnabled()
|
187 |
-
{
|
188 |
-
return apply_filters('gdpr/installer/enabled', true);
|
189 |
-
}
|
190 |
-
|
191 |
-
/**
|
192 |
-
* Check if the current user has correct permissions to run the installer
|
193 |
-
*
|
194 |
-
* @return bool
|
195 |
-
*/
|
196 |
-
protected function userHasPermissions()
|
197 |
-
{
|
198 |
-
return current_user_can(apply_filters('gdpr/installer/permissions', 'manage_options'));
|
199 |
-
}
|
200 |
-
|
201 |
-
/**
|
202 |
-
* Check if the installer is already ran
|
203 |
-
*
|
204 |
-
* @return bool
|
205 |
-
*/
|
206 |
-
protected function isInstalled()
|
207 |
-
{
|
208 |
-
return gdpr('options')->get('is_installed');
|
209 |
-
}
|
210 |
-
|
211 |
-
/**
|
212 |
-
* @return string
|
213 |
-
*/
|
214 |
-
public function getCurrentStepSlug()
|
215 |
-
{
|
216 |
-
return gdpr('options')->get('installer_step');
|
217 |
-
}
|
218 |
-
|
219 |
-
/**
|
220 |
-
* Render an admin notice that will display the welcome message
|
221 |
-
*/
|
222 |
-
protected function displayWelcomeNotice()
|
223 |
-
{
|
224 |
-
// Make sure we display the notice only to admins
|
225 |
-
if (!current_user_can(apply_filters('gdpr/capability', 'manage_options'))) {
|
226 |
-
return;
|
227 |
-
}
|
228 |
-
|
229 |
-
$installerUrl = $this->steps[0]->getUrl();
|
230 |
-
$autoInstallUrl = add_query_arg([
|
231 |
-
'gdpr_action' => 'auto_install',
|
232 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/auto_install"),
|
233 |
-
]);
|
234 |
-
$skipUrl = add_query_arg([
|
235 |
-
'gdpr_action' => 'skip_install',
|
236 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/skip_install"),
|
237 |
-
]);
|
238 |
-
|
239 |
-
gdpr('admin-notice')->add(
|
240 |
-
'installer/welcome-notice',
|
241 |
-
compact('installerUrl', 'autoInstallUrl', 'skipUrl')
|
242 |
-
);
|
243 |
-
}
|
244 |
-
|
245 |
-
/**
|
246 |
-
* Render an admin notice that will display the continue button
|
247 |
-
*
|
248 |
-
* @param $url
|
249 |
-
*/
|
250 |
-
protected function displayContinueNotice($url)
|
251 |
-
{
|
252 |
-
// Make sure we display the notice only to admins
|
253 |
-
if (!current_user_can(apply_filters('gdpr/capability', 'manage_options'))) {
|
254 |
-
return;
|
255 |
-
}
|
256 |
-
|
257 |
-
$skipUrl = add_query_arg([
|
258 |
-
'gdpr_action' => 'skip_install',
|
259 |
-
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/skip_install"),
|
260 |
-
]);
|
261 |
-
|
262 |
-
gdpr('admin-notice')->add('installer/continue-notice', ['buttonUrl' => $url, 'skipUrl' => $skipUrl]);
|
263 |
-
}
|
264 |
-
|
265 |
-
/**
|
266 |
-
* Automatically create pages for Privacy Policy and set the corresponding options
|
267 |
-
*/
|
268 |
-
public function autoInstall()
|
269 |
-
{
|
270 |
-
$policyPageId = wp_insert_post([
|
271 |
-
'post_title' => __('Privacy Policy', 'gdpr-framework'),
|
272 |
-
'post_type' => 'page',
|
273 |
-
'post_status' => 'publish',
|
274 |
-
]);
|
275 |
-
|
276 |
-
gdpr('options')->set('policy_page', $policyPageId);
|
277 |
-
|
278 |
-
$toolsPageId = wp_insert_post([
|
279 |
-
'post_content' => '[gdpr_privacy_tools]',
|
280 |
-
'post_title' => __('Privacy Tools', 'gdpr-framework'),
|
281 |
-
'post_type' => 'page',
|
282 |
-
'post_status' => 'publish',
|
283 |
-
]);
|
284 |
-
gdpr('options')->set('tools_page', $toolsPageId);
|
285 |
-
|
286 |
-
// Woocommerce compatibility - automatically add their terms page
|
287 |
-
if (get_option('woocommerce_terms_page_id')) {
|
288 |
-
gdpr('options')->set('terms_page', get_option('woocommerce_terms_page_id'));
|
289 |
-
}
|
290 |
-
|
291 |
-
gdpr('options')->set('is_installed', 'yes');
|
292 |
-
wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy&gdpr-notice=autoinstall'));
|
293 |
-
exit;
|
294 |
-
}
|
295 |
-
|
296 |
-
/**
|
297 |
-
* Do nothing, but mark the installer as completed
|
298 |
-
*/
|
299 |
-
public function skipInstall()
|
300 |
-
{
|
301 |
-
gdpr('options')->set('is_installed', 'yes');
|
302 |
-
wp_safe_redirect(gdpr('helpers')->getAdminUrl());
|
303 |
-
exit;
|
304 |
-
}
|
305 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Installer;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Admin\AdminTabGeneral;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Handle all installation activities
|
9 |
+
*
|
10 |
+
* Class Installer
|
11 |
+
*
|
12 |
+
* @package Codelight\GDPR\Installer
|
13 |
+
*/
|
14 |
+
class Installer
|
15 |
+
{
|
16 |
+
/* @var array */
|
17 |
+
protected $defaultSteps = [
|
18 |
+
'Codelight\GDPR\Installer\Steps\Welcome',
|
19 |
+
'Codelight\GDPR\Installer\Steps\Disclaimer',
|
20 |
+
'Codelight\GDPR\Installer\Steps\ConfigurationPages',
|
21 |
+
'Codelight\GDPR\Installer\Steps\ConfigurationSettings',
|
22 |
+
'Codelight\GDPR\Installer\Steps\PolicySettings',
|
23 |
+
'Codelight\GDPR\Installer\Steps\PolicyContents',
|
24 |
+
'Codelight\GDPR\Installer\Steps\Consent',
|
25 |
+
'Codelight\GDPR\Installer\Steps\Integrations',
|
26 |
+
'Codelight\GDPR\Installer\Steps\Finish',
|
27 |
+
];
|
28 |
+
|
29 |
+
/* @var array */
|
30 |
+
protected $steps = [];
|
31 |
+
|
32 |
+
/* @var InstallerWizard */
|
33 |
+
protected $wizard;
|
34 |
+
|
35 |
+
/* @var InstallerRouter */
|
36 |
+
protected $router;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Check if the installer is enabled and ensure the user has correct permissions to run it
|
40 |
+
*/
|
41 |
+
public function __construct(AdminTabGeneral $adminTab)
|
42 |
+
{
|
43 |
+
if (!$this->isInstallerEnabled()) {
|
44 |
+
return;
|
45 |
+
}
|
46 |
+
|
47 |
+
if (!$this->userHasPermissions()) {
|
48 |
+
return;
|
49 |
+
}
|
50 |
+
|
51 |
+
$this->adminTab = $adminTab;
|
52 |
+
|
53 |
+
$this->maybeDisplayDisclaimer();
|
54 |
+
$this->setupHooks();
|
55 |
+
|
56 |
+
if (!$this->isInstalled()) {
|
57 |
+
$this->setupSteps();
|
58 |
+
$this->runInstaller();
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Setup actions and admin tab components
|
64 |
+
*/
|
65 |
+
protected function setupHooks()
|
66 |
+
{
|
67 |
+
add_action('admin_init', [$this, 'setupAdminGeneralTabButtons'], 0);
|
68 |
+
|
69 |
+
add_action('gdpr/admin/action/accept_disclaimer', [$this, 'acceptDisclaimer']);
|
70 |
+
|
71 |
+
add_action('gdpr/admin/action/restart_wizard', [$this, 'restartWizard']);
|
72 |
+
|
73 |
+
add_action('gdpr/admin/action/auto_install', [$this, 'autoInstall']);
|
74 |
+
add_action('gdpr/admin/action/skip_install', [$this, 'skipInstall']);
|
75 |
+
}
|
76 |
+
|
77 |
+
protected function runInstaller()
|
78 |
+
{
|
79 |
+
$this->wizard = new InstallerWizard;
|
80 |
+
$this->router = new InstallerRouter($this->steps);
|
81 |
+
|
82 |
+
// If we're currently on one of the installer steps, let the router handle it
|
83 |
+
if ($this->router->isInstallerStep()) {
|
84 |
+
return;
|
85 |
+
}
|
86 |
+
|
87 |
+
if ($this->getCurrentStepSlug()) {
|
88 |
+
// If the current step is set, display continue notice
|
89 |
+
$step = $this->router->findStep($this->getCurrentStepSlug());
|
90 |
+
// If step doesn't exist, then it means the step slugs have changed. Do nothing.
|
91 |
+
if (!$step) {
|
92 |
+
return;
|
93 |
+
}
|
94 |
+
$this->displayContinueNotice($step->getUrl());
|
95 |
+
} else {
|
96 |
+
// If the current step is not set, it means the installer hasn't been started yet
|
97 |
+
$this->displayWelcomeNotice();
|
98 |
+
}
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* If the admin has not accepted the disclaimer, render it
|
103 |
+
*/
|
104 |
+
public function maybeDisplayDisclaimer()
|
105 |
+
{
|
106 |
+
if (!gdpr('options')->get('plugin_disclaimer_accepted') && (isset($_GET['page']) && 'privacy' === $_GET['page'])) {
|
107 |
+
$acceptUrl = add_query_arg([
|
108 |
+
'gdpr_action' => 'accept_disclaimer',
|
109 |
+
'gdpr_nonce' => wp_create_nonce('gdpr/admin/action/accept_disclaimer'),
|
110 |
+
]);
|
111 |
+
gdpr('admin-notice')->add('admin/notices/disclaimer', compact('acceptUrl'));
|
112 |
+
}
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Mark the disclaimer as accepted
|
117 |
+
*/
|
118 |
+
public function acceptDisclaimer()
|
119 |
+
{
|
120 |
+
gdpr('options')->set('plugin_disclaimer_accepted', 'yes');
|
121 |
+
wp_safe_redirect(gdpr('helpers')->getAdminUrl());
|
122 |
+
exit;
|
123 |
+
}
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Display installer section in admin page
|
127 |
+
*/
|
128 |
+
public function setupAdminGeneralTabButtons()
|
129 |
+
{
|
130 |
+
/**
|
131 |
+
* Display wizard buttons
|
132 |
+
*/
|
133 |
+
$this->adminTab->registerSettingSection(
|
134 |
+
'gdpr-section-wizard',
|
135 |
+
_x('Setup Wizard', '(Admin)', 'gdpr-framework'),
|
136 |
+
[$this, 'renderWizardButtons']
|
137 |
+
);
|
138 |
+
}
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Render the installer section
|
142 |
+
*/
|
143 |
+
public function renderWizardButtons()
|
144 |
+
{
|
145 |
+
$restartUrl = add_query_arg([
|
146 |
+
'gdpr_action' => 'restart_wizard',
|
147 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/restart_wizard"),
|
148 |
+
]);
|
149 |
+
|
150 |
+
echo gdpr('view')->render(
|
151 |
+
'admin/wizard-buttons',
|
152 |
+
compact('restartUrl')
|
153 |
+
);
|
154 |
+
}
|
155 |
+
|
156 |
+
/**
|
157 |
+
* Restart and redirect to first step
|
158 |
+
*/
|
159 |
+
public function restartWizard()
|
160 |
+
{
|
161 |
+
gdpr('options')->delete('installer_step');
|
162 |
+
gdpr('options')->delete('is_installed');
|
163 |
+
|
164 |
+
wp_safe_redirect(self_admin_url());
|
165 |
+
exit;
|
166 |
+
}
|
167 |
+
|
168 |
+
/**
|
169 |
+
* Allow plugins to modify the steps
|
170 |
+
*/
|
171 |
+
protected function setupSteps()
|
172 |
+
{
|
173 |
+
$steps = apply_filters('gdpr/installer/steps', $this->defaultSteps);
|
174 |
+
|
175 |
+
foreach ($steps as $index => $step) {
|
176 |
+
$this->steps[$index] = new $step;
|
177 |
+
}
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* The installer can be disabled by filter.
|
182 |
+
* Check if it's enabled
|
183 |
+
*
|
184 |
+
* @return bool
|
185 |
+
*/
|
186 |
+
protected function isInstallerEnabled()
|
187 |
+
{
|
188 |
+
return apply_filters('gdpr/installer/enabled', true);
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Check if the current user has correct permissions to run the installer
|
193 |
+
*
|
194 |
+
* @return bool
|
195 |
+
*/
|
196 |
+
protected function userHasPermissions()
|
197 |
+
{
|
198 |
+
return current_user_can(apply_filters('gdpr/installer/permissions', 'manage_options'));
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Check if the installer is already ran
|
203 |
+
*
|
204 |
+
* @return bool
|
205 |
+
*/
|
206 |
+
protected function isInstalled()
|
207 |
+
{
|
208 |
+
return gdpr('options')->get('is_installed');
|
209 |
+
}
|
210 |
+
|
211 |
+
/**
|
212 |
+
* @return string
|
213 |
+
*/
|
214 |
+
public function getCurrentStepSlug()
|
215 |
+
{
|
216 |
+
return gdpr('options')->get('installer_step');
|
217 |
+
}
|
218 |
+
|
219 |
+
/**
|
220 |
+
* Render an admin notice that will display the welcome message
|
221 |
+
*/
|
222 |
+
protected function displayWelcomeNotice()
|
223 |
+
{
|
224 |
+
// Make sure we display the notice only to admins
|
225 |
+
if (!current_user_can(apply_filters('gdpr/capability', 'manage_options'))) {
|
226 |
+
return;
|
227 |
+
}
|
228 |
+
|
229 |
+
$installerUrl = $this->steps[0]->getUrl();
|
230 |
+
$autoInstallUrl = add_query_arg([
|
231 |
+
'gdpr_action' => 'auto_install',
|
232 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/auto_install"),
|
233 |
+
]);
|
234 |
+
$skipUrl = add_query_arg([
|
235 |
+
'gdpr_action' => 'skip_install',
|
236 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/skip_install"),
|
237 |
+
]);
|
238 |
+
|
239 |
+
gdpr('admin-notice')->add(
|
240 |
+
'installer/welcome-notice',
|
241 |
+
compact('installerUrl', 'autoInstallUrl', 'skipUrl')
|
242 |
+
);
|
243 |
+
}
|
244 |
+
|
245 |
+
/**
|
246 |
+
* Render an admin notice that will display the continue button
|
247 |
+
*
|
248 |
+
* @param $url
|
249 |
+
*/
|
250 |
+
protected function displayContinueNotice($url)
|
251 |
+
{
|
252 |
+
// Make sure we display the notice only to admins
|
253 |
+
if (!current_user_can(apply_filters('gdpr/capability', 'manage_options'))) {
|
254 |
+
return;
|
255 |
+
}
|
256 |
+
|
257 |
+
$skipUrl = add_query_arg([
|
258 |
+
'gdpr_action' => 'skip_install',
|
259 |
+
'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/skip_install"),
|
260 |
+
]);
|
261 |
+
|
262 |
+
gdpr('admin-notice')->add('installer/continue-notice', ['buttonUrl' => $url, 'skipUrl' => $skipUrl]);
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Automatically create pages for Privacy Policy and set the corresponding options
|
267 |
+
*/
|
268 |
+
public function autoInstall()
|
269 |
+
{
|
270 |
+
$policyPageId = wp_insert_post([
|
271 |
+
'post_title' => __('Privacy Policy', 'gdpr-framework'),
|
272 |
+
'post_type' => 'page',
|
273 |
+
'post_status' => 'publish',
|
274 |
+
]);
|
275 |
+
|
276 |
+
gdpr('options')->set('policy_page', $policyPageId);
|
277 |
+
|
278 |
+
$toolsPageId = wp_insert_post([
|
279 |
+
'post_content' => '[gdpr_privacy_tools]',
|
280 |
+
'post_title' => __('Privacy Tools', 'gdpr-framework'),
|
281 |
+
'post_type' => 'page',
|
282 |
+
'post_status' => 'publish',
|
283 |
+
]);
|
284 |
+
gdpr('options')->set('tools_page', $toolsPageId);
|
285 |
+
|
286 |
+
// Woocommerce compatibility - automatically add their terms page
|
287 |
+
if (get_option('woocommerce_terms_page_id')) {
|
288 |
+
gdpr('options')->set('terms_page', get_option('woocommerce_terms_page_id'));
|
289 |
+
}
|
290 |
+
|
291 |
+
gdpr('options')->set('is_installed', 'yes');
|
292 |
+
wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy&gdpr-notice=autoinstall'));
|
293 |
+
exit;
|
294 |
+
}
|
295 |
+
|
296 |
+
/**
|
297 |
+
* Do nothing, but mark the installer as completed
|
298 |
+
*/
|
299 |
+
public function skipInstall()
|
300 |
+
{
|
301 |
+
gdpr('options')->set('is_installed', 'yes');
|
302 |
+
wp_safe_redirect(gdpr('helpers')->getAdminUrl());
|
303 |
+
exit;
|
304 |
+
}
|
305 |
+
}
|
src/Installer/InstallerStep.php
CHANGED
@@ -1,200 +1,200 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Installer;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Handle the plumbing of an installer step
|
7 |
-
*
|
8 |
-
* Class InstallerStep
|
9 |
-
*
|
10 |
-
* @package Codelight\GDPR\Installer
|
11 |
-
*/
|
12 |
-
abstract class InstallerStep
|
13 |
-
{
|
14 |
-
/* @var string */
|
15 |
-
protected $stepType;
|
16 |
-
|
17 |
-
/* @var string */
|
18 |
-
protected $slug;
|
19 |
-
|
20 |
-
/* @var string */
|
21 |
-
protected $type;
|
22 |
-
|
23 |
-
/* @var string */
|
24 |
-
protected $template;
|
25 |
-
|
26 |
-
/* @var int */
|
27 |
-
protected $activeSteps;
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Render a step for viewing
|
31 |
-
*/
|
32 |
-
public function run()
|
33 |
-
{
|
34 |
-
$this->enqueue();
|
35 |
-
$this->renderHeader();
|
36 |
-
$this->renderContent();
|
37 |
-
$this->renderNonce();
|
38 |
-
$this->renderFooter();
|
39 |
-
}
|
40 |
-
|
41 |
-
/**
|
42 |
-
* Validate the form submission
|
43 |
-
*
|
44 |
-
* @return bool
|
45 |
-
*/
|
46 |
-
public function validate()
|
47 |
-
{
|
48 |
-
return true;
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Validate the nonce
|
53 |
-
*
|
54 |
-
* @return bool
|
55 |
-
*/
|
56 |
-
public function validateNonce()
|
57 |
-
{
|
58 |
-
return isset($_POST['gdpr_nonce']) && wp_verify_nonce($_POST['gdpr_nonce'], $this->slug);
|
59 |
-
}
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Process the form submission
|
63 |
-
*/
|
64 |
-
public function submit()
|
65 |
-
{
|
66 |
-
|
67 |
-
}
|
68 |
-
|
69 |
-
|
70 |
-
/**
|
71 |
-
* Display error notice or something
|
72 |
-
*/
|
73 |
-
public function getErrors()
|
74 |
-
{
|
75 |
-
return $this->errors;
|
76 |
-
}
|
77 |
-
|
78 |
-
/**
|
79 |
-
* Register WP's default assets and plugin installer assets
|
80 |
-
*/
|
81 |
-
protected function enqueue()
|
82 |
-
{
|
83 |
-
wp_enqueue_style('common');
|
84 |
-
wp_enqueue_style('buttons');
|
85 |
-
|
86 |
-
/**
|
87 |
-
* GDPR installer custom styles
|
88 |
-
*/
|
89 |
-
wp_enqueue_style(
|
90 |
-
'gdpr-installer',
|
91 |
-
gdpr('config')->get('plugin.url') . 'assets/gdpr-installer.css'
|
92 |
-
);
|
93 |
-
|
94 |
-
wp_enqueue_style(
|
95 |
-
'select2css',
|
96 |
-
'//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css'
|
97 |
-
);
|
98 |
-
|
99 |
-
wp_enqueue_script('jquery');
|
100 |
-
wp_enqueue_script('jquery-ui-core');
|
101 |
-
wp_enqueue_script('jquery-ui-widget');
|
102 |
-
wp_enqueue_script('jquery-ui-mouse');
|
103 |
-
wp_enqueue_script('jquery-ui-sortable');
|
104 |
-
wp_enqueue_script('jquery-ui-tabs');
|
105 |
-
wp_enqueue_script(
|
106 |
-
'select2',
|
107 |
-
'//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js',
|
108 |
-
['jquery']
|
109 |
-
);
|
110 |
-
wp_enqueue_script(
|
111 |
-
'conditional-show',
|
112 |
-
gdpr('config')->get('plugin.url') . 'assets/conditional-show.js',
|
113 |
-
['jquery']
|
114 |
-
);
|
115 |
-
|
116 |
-
//global $wp_scripts;
|
117 |
-
//$ui = $wp_scripts->query('jquery-ui-core');
|
118 |
-
//wp_enqueue_style('jquery-ui-smoothness', "//ajax.googleapis.com/ajax/libs/jqueryui/{$ui->ver}/themes/smoothness/jquery-ui.min.css", false, null);
|
119 |
-
|
120 |
-
wp_enqueue_script(
|
121 |
-
'jquery-repeater',
|
122 |
-
gdpr('config')->get('plugin.url') . 'assets/jquery.repeater.min.js',
|
123 |
-
['jquery']
|
124 |
-
);
|
125 |
-
|
126 |
-
/**
|
127 |
-
* Installer javascript
|
128 |
-
*/
|
129 |
-
wp_enqueue_script(
|
130 |
-
'gdpr-installer',
|
131 |
-
gdpr('config')->get('plugin.url') . 'assets/gdpr-installer.js',
|
132 |
-
['jquery', 'select2']
|
133 |
-
);
|
134 |
-
}
|
135 |
-
|
136 |
-
/**
|
137 |
-
* Render the installer page header - html head, form, logo
|
138 |
-
*/
|
139 |
-
protected function renderHeader()
|
140 |
-
{
|
141 |
-
echo gdpr('view')->render('installer/header', ['activeSteps' => $this->activeSteps]);
|
142 |
-
}
|
143 |
-
|
144 |
-
/**
|
145 |
-
* Render the installer page content - should be overridden by child class
|
146 |
-
*/
|
147 |
-
protected function renderContent()
|
148 |
-
{
|
149 |
-
echo gdpr('view')->render($this->template);
|
150 |
-
}
|
151 |
-
|
152 |
-
/**
|
153 |
-
* Create and render the nonce based on the name of the current step
|
154 |
-
*/
|
155 |
-
protected function renderNonce()
|
156 |
-
{
|
157 |
-
$nonce = wp_create_nonce($this->slug);
|
158 |
-
echo gdpr('view')->render('installer/nonce', compact('nonce'));
|
159 |
-
}
|
160 |
-
|
161 |
-
/**
|
162 |
-
* Render the footer - nav buttons and closing tags
|
163 |
-
*/
|
164 |
-
protected function renderFooter()
|
165 |
-
{
|
166 |
-
echo gdpr('view')->render('installer/footer');
|
167 |
-
}
|
168 |
-
|
169 |
-
/**
|
170 |
-
* @return string
|
171 |
-
*/
|
172 |
-
public function getUrl()
|
173 |
-
{
|
174 |
-
return gdpr('config')->get('installer.wizardUrl') . $this->slug;
|
175 |
-
}
|
176 |
-
|
177 |
-
/**
|
178 |
-
* @return string
|
179 |
-
*/
|
180 |
-
public function getSlug()
|
181 |
-
{
|
182 |
-
if (is_null($this->slug)) {
|
183 |
-
trigger_error("GDPR: Slug not defined for step!", E_USER_ERROR);
|
184 |
-
}
|
185 |
-
|
186 |
-
return $this->slug;
|
187 |
-
}
|
188 |
-
|
189 |
-
/**
|
190 |
-
* @return string
|
191 |
-
*/
|
192 |
-
public function getType()
|
193 |
-
{
|
194 |
-
if (is_null($this->type)) {
|
195 |
-
trigger_error("GDPR: Type not defined for step {$this->slug}", E_USER_ERROR);
|
196 |
-
}
|
197 |
-
|
198 |
-
return $this->type;
|
199 |
-
}
|
200 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Installer;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Handle the plumbing of an installer step
|
7 |
+
*
|
8 |
+
* Class InstallerStep
|
9 |
+
*
|
10 |
+
* @package Codelight\GDPR\Installer
|
11 |
+
*/
|
12 |
+
abstract class InstallerStep
|
13 |
+
{
|
14 |
+
/* @var string */
|
15 |
+
protected $stepType;
|
16 |
+
|
17 |
+
/* @var string */
|
18 |
+
protected $slug;
|
19 |
+
|
20 |
+
/* @var string */
|
21 |
+
protected $type;
|
22 |
+
|
23 |
+
/* @var string */
|
24 |
+
protected $template;
|
25 |
+
|
26 |
+
/* @var int */
|
27 |
+
protected $activeSteps;
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Render a step for viewing
|
31 |
+
*/
|
32 |
+
public function run()
|
33 |
+
{
|
34 |
+
$this->enqueue();
|
35 |
+
$this->renderHeader();
|
36 |
+
$this->renderContent();
|
37 |
+
$this->renderNonce();
|
38 |
+
$this->renderFooter();
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Validate the form submission
|
43 |
+
*
|
44 |
+
* @return bool
|
45 |
+
*/
|
46 |
+
public function validate()
|
47 |
+
{
|
48 |
+
return true;
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Validate the nonce
|
53 |
+
*
|
54 |
+
* @return bool
|
55 |
+
*/
|
56 |
+
public function validateNonce()
|
57 |
+
{
|
58 |
+
return isset($_POST['gdpr_nonce']) && wp_verify_nonce($_POST['gdpr_nonce'], $this->slug);
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Process the form submission
|
63 |
+
*/
|
64 |
+
public function submit()
|
65 |
+
{
|
66 |
+
|
67 |
+
}
|
68 |
+
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Display error notice or something
|
72 |
+
*/
|
73 |
+
public function getErrors()
|
74 |
+
{
|
75 |
+
return $this->errors;
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* Register WP's default assets and plugin installer assets
|
80 |
+
*/
|
81 |
+
protected function enqueue()
|
82 |
+
{
|
83 |
+
wp_enqueue_style('common');
|
84 |
+
wp_enqueue_style('buttons');
|
85 |
+
|
86 |
+
/**
|
87 |
+
* GDPR installer custom styles
|
88 |
+
*/
|
89 |
+
wp_enqueue_style(
|
90 |
+
'gdpr-installer',
|
91 |
+
gdpr('config')->get('plugin.url') . 'assets/gdpr-installer.css'
|
92 |
+
);
|
93 |
+
|
94 |
+
wp_enqueue_style(
|
95 |
+
'select2css',
|
96 |
+
'//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css'
|
97 |
+
);
|
98 |
+
|
99 |
+
wp_enqueue_script('jquery');
|
100 |
+
wp_enqueue_script('jquery-ui-core');
|
101 |
+
wp_enqueue_script('jquery-ui-widget');
|
102 |
+
wp_enqueue_script('jquery-ui-mouse');
|
103 |
+
wp_enqueue_script('jquery-ui-sortable');
|
104 |
+
wp_enqueue_script('jquery-ui-tabs');
|
105 |
+
wp_enqueue_script(
|
106 |
+
'select2',
|
107 |
+
'//cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js',
|
108 |
+
['jquery']
|
109 |
+
);
|
110 |
+
wp_enqueue_script(
|
111 |
+
'conditional-show',
|
112 |
+
gdpr('config')->get('plugin.url') . 'assets/conditional-show.js',
|
113 |
+
['jquery']
|
114 |
+
);
|
115 |
+
|
116 |
+
//global $wp_scripts;
|
117 |
+
//$ui = $wp_scripts->query('jquery-ui-core');
|
118 |
+
//wp_enqueue_style('jquery-ui-smoothness', "//ajax.googleapis.com/ajax/libs/jqueryui/{$ui->ver}/themes/smoothness/jquery-ui.min.css", false, null);
|
119 |
+
|
120 |
+
wp_enqueue_script(
|
121 |
+
'jquery-repeater',
|
122 |
+
gdpr('config')->get('plugin.url') . 'assets/jquery.repeater.min.js',
|
123 |
+
['jquery']
|
124 |
+
);
|
125 |
+
|
126 |
+
/**
|
127 |
+
* Installer javascript
|
128 |
+
*/
|
129 |
+
wp_enqueue_script(
|
130 |
+
'gdpr-installer',
|
131 |
+
gdpr('config')->get('plugin.url') . 'assets/gdpr-installer.js',
|
132 |
+
['jquery', 'select2']
|
133 |
+
);
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* Render the installer page header - html head, form, logo
|
138 |
+
*/
|
139 |
+
protected function renderHeader()
|
140 |
+
{
|
141 |
+
echo gdpr('view')->render('installer/header', ['activeSteps' => $this->activeSteps]);
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Render the installer page content - should be overridden by child class
|
146 |
+
*/
|
147 |
+
protected function renderContent()
|
148 |
+
{
|
149 |
+
echo gdpr('view')->render($this->template);
|
150 |
+
}
|
151 |
+
|
152 |
+
/**
|
153 |
+
* Create and render the nonce based on the name of the current step
|
154 |
+
*/
|
155 |
+
protected function renderNonce()
|
156 |
+
{
|
157 |
+
$nonce = wp_create_nonce($this->slug);
|
158 |
+
echo gdpr('view')->render('installer/nonce', compact('nonce'));
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Render the footer - nav buttons and closing tags
|
163 |
+
*/
|
164 |
+
protected function renderFooter()
|
165 |
+
{
|
166 |
+
echo gdpr('view')->render('installer/footer');
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* @return string
|
171 |
+
*/
|
172 |
+
public function getUrl()
|
173 |
+
{
|
174 |
+
return gdpr('config')->get('installer.wizardUrl') . $this->slug;
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* @return string
|
179 |
+
*/
|
180 |
+
public function getSlug()
|
181 |
+
{
|
182 |
+
if (is_null($this->slug)) {
|
183 |
+
trigger_error("GDPR: Slug not defined for step!", E_USER_ERROR);
|
184 |
+
}
|
185 |
+
|
186 |
+
return $this->slug;
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* @return string
|
191 |
+
*/
|
192 |
+
public function getType()
|
193 |
+
{
|
194 |
+
if (is_null($this->type)) {
|
195 |
+
trigger_error("GDPR: Type not defined for step {$this->slug}", E_USER_ERROR);
|
196 |
+
}
|
197 |
+
|
198 |
+
return $this->type;
|
199 |
+
}
|
200 |
+
}
|
src/Installer/Steps/ConfigurationPages.php
CHANGED
@@ -1,61 +1,61 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Installer\Steps;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Installer\InstallerStep;
|
6 |
-
use Codelight\GDPR\Installer\InstallerStepInterface;
|
7 |
-
|
8 |
-
class ConfigurationPages extends InstallerStep implements InstallerStepInterface
|
9 |
-
{
|
10 |
-
protected $slug = 'configuration-pages';
|
11 |
-
|
12 |
-
protected $type = 'wizard';
|
13 |
-
|
14 |
-
protected $template = 'installer/steps/configuration-pages';
|
15 |
-
|
16 |
-
protected $activeSteps = 1;
|
17 |
-
|
18 |
-
protected function renderContent()
|
19 |
-
{
|
20 |
-
$privacyToolsPage = gdpr('options')->get('tools_page');
|
21 |
-
$privacyToolsPageSelector = wp_dropdown_pages([
|
22 |
-
'name' => 'gdpr_tools_page',
|
23 |
-
'show_option_none' => _x('— Create a new page —', '(Admin)', 'gdpr-framework'),
|
24 |
-
'option_none_value' => 'new',
|
25 |
-
'selected' => $privacyToolsPage ? $privacyToolsPage : 'new',
|
26 |
-
'echo' => false,
|
27 |
-
'class' => 'gdpr-select js-gdpr-select2',
|
28 |
-
]);
|
29 |
-
|
30 |
-
echo gdpr('view')->render(
|
31 |
-
$this->template,
|
32 |
-
compact(
|
33 |
-
'policyPage',
|
34 |
-
'policyPageSelector',
|
35 |
-
'privacyToolsPage',
|
36 |
-
'privacyToolsPageSelector'
|
37 |
-
)
|
38 |
-
);
|
39 |
-
}
|
40 |
-
|
41 |
-
public function submit()
|
42 |
-
{
|
43 |
-
if (isset($_POST['gdpr_create_tools_page']) && 'yes' === $_POST['gdpr_create_tools_page']) {
|
44 |
-
$id = $this->createPrivacyToolsPage();
|
45 |
-
gdpr('options')->set('tools_page', $id);
|
46 |
-
} else {
|
47 |
-
gdpr('options')->set('tools_page', $_POST['gdpr_tools_page']);
|
48 |
-
}
|
49 |
-
}
|
50 |
-
|
51 |
-
protected function createPrivacyToolsPage()
|
52 |
-
{
|
53 |
-
$id = wp_insert_post([
|
54 |
-
'post_content' => '[gdpr_privacy_tools]',
|
55 |
-
'post_title' => __('Privacy Tools', 'gdpr-framework'),
|
56 |
-
'post_type' => 'page',
|
57 |
-
]);
|
58 |
-
|
59 |
-
return $id;
|
60 |
-
}
|
61 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Installer\Steps;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Installer\InstallerStep;
|
6 |
+
use Codelight\GDPR\Installer\InstallerStepInterface;
|
7 |
+
|
8 |
+
class ConfigurationPages extends InstallerStep implements InstallerStepInterface
|
9 |
+
{
|
10 |
+
protected $slug = 'configuration-pages';
|
11 |
+
|
12 |
+
protected $type = 'wizard';
|
13 |
+
|
14 |
+
protected $template = 'installer/steps/configuration-pages';
|
15 |
+
|
16 |
+
protected $activeSteps = 1;
|
17 |
+
|
18 |
+
protected function renderContent()
|
19 |
+
{
|
20 |
+
$privacyToolsPage = gdpr('options')->get('tools_page');
|
21 |
+
$privacyToolsPageSelector = wp_dropdown_pages([
|
22 |
+
'name' => 'gdpr_tools_page',
|
23 |
+
'show_option_none' => _x('— Create a new page —', '(Admin)', 'gdpr-framework'),
|
24 |
+
'option_none_value' => 'new',
|
25 |
+
'selected' => $privacyToolsPage ? $privacyToolsPage : 'new',
|
26 |
+
'echo' => false,
|
27 |
+
'class' => 'gdpr-select js-gdpr-select2',
|
28 |
+
]);
|
29 |
+
|
30 |
+
echo gdpr('view')->render(
|
31 |
+
$this->template,
|
32 |
+
compact(
|
33 |
+
'policyPage',
|
34 |
+
'policyPageSelector',
|
35 |
+
'privacyToolsPage',
|
36 |
+
'privacyToolsPageSelector'
|
37 |
+
)
|
38 |
+
);
|
39 |
+
}
|
40 |
+
|
41 |
+
public function submit()
|
42 |
+
{
|
43 |
+
if (isset($_POST['gdpr_create_tools_page']) && 'yes' === $_POST['gdpr_create_tools_page']) {
|
44 |
+
$id = $this->createPrivacyToolsPage();
|
45 |
+
gdpr('options')->set('tools_page', $id);
|
46 |
+
} else {
|
47 |
+
gdpr('options')->set('tools_page', $_POST['gdpr_tools_page']);
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
protected function createPrivacyToolsPage()
|
52 |
+
{
|
53 |
+
$id = wp_insert_post([
|
54 |
+
'post_content' => '[gdpr_privacy_tools]',
|
55 |
+
'post_title' => __('Privacy Tools', 'gdpr-framework'),
|
56 |
+
'post_type' => 'page',
|
57 |
+
]);
|
58 |
+
|
59 |
+
return $id;
|
60 |
+
}
|
61 |
+
}
|
src/Installer/Steps/ConfigurationSettings.php
CHANGED
@@ -1,71 +1,71 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Installer\Steps;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Installer\InstallerStep;
|
6 |
-
use Codelight\GDPR\Installer\InstallerStepInterface;
|
7 |
-
|
8 |
-
class ConfigurationSettings extends InstallerStep implements InstallerStepInterface
|
9 |
-
{
|
10 |
-
protected $slug = 'configuration-settings';
|
11 |
-
|
12 |
-
protected $type = 'wizard';
|
13 |
-
|
14 |
-
protected $template = 'installer/steps/configuration-settings';
|
15 |
-
|
16 |
-
protected $activeSteps = 1;
|
17 |
-
|
18 |
-
protected function renderContent()
|
19 |
-
{
|
20 |
-
$privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
|
21 |
-
|
22 |
-
$deleteAction = gdpr('options')->get('delete_action');
|
23 |
-
$deleteActionEmail = gdpr('options')->get('delete_action_email');
|
24 |
-
|
25 |
-
$exportAction = gdpr('options')->get('export_action');
|
26 |
-
$exportActionEmail = gdpr('options')->get('export_action_email');
|
27 |
-
|
28 |
-
$reassign = gdpr('options')->get('delete_action_reassign');
|
29 |
-
$reassignUser = gdpr('options')->get('delete_action_reassign_user');
|
30 |
-
|
31 |
-
echo gdpr('view')->render(
|
32 |
-
$this->template,
|
33 |
-
compact(
|
34 |
-
'deleteAction',
|
35 |
-
'deleteActionEmail',
|
36 |
-
'exportAction',
|
37 |
-
'exportActionEmail',
|
38 |
-
'privacyToolsPageUrl',
|
39 |
-
'reassign',
|
40 |
-
'reassignUser'
|
41 |
-
)
|
42 |
-
);
|
43 |
-
}
|
44 |
-
|
45 |
-
public function submit()
|
46 |
-
{
|
47 |
-
if (isset($_POST['gdpr_export_action'])) {
|
48 |
-
gdpr('options')->set('export_action', $_POST['gdpr_export_action']);
|
49 |
-
}
|
50 |
-
|
51 |
-
if (isset($_POST['gdpr_export_action_email'])) {
|
52 |
-
gdpr('options')->set('export_action_email', $_POST['gdpr_export_action_email']);
|
53 |
-
}
|
54 |
-
|
55 |
-
if (isset($_POST['gdpr_delete_action'])) {
|
56 |
-
gdpr('options')->set('delete_action', $_POST['gdpr_delete_action']);
|
57 |
-
}
|
58 |
-
|
59 |
-
if (isset($_POST['gdpr_delete_action_email'])) {
|
60 |
-
gdpr('options')->set('delete_action_email', $_POST['gdpr_delete_action_email']);
|
61 |
-
}
|
62 |
-
|
63 |
-
if (isset($_POST['gdpr_delete_action_reassign'])) {
|
64 |
-
gdpr('options')->set('delete_action_reassign', $_POST['gdpr_delete_action_reassign']);
|
65 |
-
}
|
66 |
-
|
67 |
-
if (isset($_POST['gdpr_delete_action_reassign_user'])) {
|
68 |
-
gdpr('options')->set('delete_action_reassign_user', $_POST['gdpr_delete_action_reassign_user']);
|
69 |
-
}
|
70 |
-
}
|
71 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Installer\Steps;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Installer\InstallerStep;
|
6 |
+
use Codelight\GDPR\Installer\InstallerStepInterface;
|
7 |
+
|
8 |
+
class ConfigurationSettings extends InstallerStep implements InstallerStepInterface
|
9 |
+
{
|
10 |
+
protected $slug = 'configuration-settings';
|
11 |
+
|
12 |
+
protected $type = 'wizard';
|
13 |
+
|
14 |
+
protected $template = 'installer/steps/configuration-settings';
|
15 |
+
|
16 |
+
protected $activeSteps = 1;
|
17 |
+
|
18 |
+
protected function renderContent()
|
19 |
+
{
|
20 |
+
$privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
|
21 |
+
|
22 |
+
$deleteAction = gdpr('options')->get('delete_action');
|
23 |
+
$deleteActionEmail = gdpr('options')->get('delete_action_email');
|
24 |
+
|
25 |
+
$exportAction = gdpr('options')->get('export_action');
|
26 |
+
$exportActionEmail = gdpr('options')->get('export_action_email');
|
27 |
+
|
28 |
+
$reassign = gdpr('options')->get('delete_action_reassign');
|
29 |
+
$reassignUser = gdpr('options')->get('delete_action_reassign_user');
|
30 |
+
|
31 |
+
echo gdpr('view')->render(
|
32 |
+
$this->template,
|
33 |
+
compact(
|
34 |
+
'deleteAction',
|
35 |
+
'deleteActionEmail',
|
36 |
+
'exportAction',
|
37 |
+
'exportActionEmail',
|
38 |
+
'privacyToolsPageUrl',
|
39 |
+
'reassign',
|
40 |
+
'reassignUser'
|
41 |
+
)
|
42 |
+
);
|
43 |
+
}
|
44 |
+
|
45 |
+
public function submit()
|
46 |
+
{
|
47 |
+
if (isset($_POST['gdpr_export_action'])) {
|
48 |
+
gdpr('options')->set('export_action', $_POST['gdpr_export_action']);
|
49 |
+
}
|
50 |
+
|
51 |
+
if (isset($_POST['gdpr_export_action_email'])) {
|
52 |
+
gdpr('options')->set('export_action_email', $_POST['gdpr_export_action_email']);
|
53 |
+
}
|
54 |
+
|
55 |
+
if (isset($_POST['gdpr_delete_action'])) {
|
56 |
+
gdpr('options')->set('delete_action', $_POST['gdpr_delete_action']);
|
57 |
+
}
|
58 |
+
|
59 |
+
if (isset($_POST['gdpr_delete_action_email'])) {
|
60 |
+
gdpr('options')->set('delete_action_email', $_POST['gdpr_delete_action_email']);
|
61 |
+
}
|
62 |
+
|
63 |
+
if (isset($_POST['gdpr_delete_action_reassign'])) {
|
64 |
+
gdpr('options')->set('delete_action_reassign', $_POST['gdpr_delete_action_reassign']);
|
65 |
+
}
|
66 |
+
|
67 |
+
if (isset($_POST['gdpr_delete_action_reassign_user'])) {
|
68 |
+
gdpr('options')->set('delete_action_reassign_user', $_POST['gdpr_delete_action_reassign_user']);
|
69 |
+
}
|
70 |
+
}
|
71 |
+
}
|
src/Installer/Steps/Consent.php
CHANGED
@@ -1,31 +1,31 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Installer\Steps;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Installer\InstallerStep;
|
6 |
-
use Codelight\GDPR\Installer\InstallerStepInterface;
|
7 |
-
|
8 |
-
class Consent extends InstallerStep implements InstallerStepInterface
|
9 |
-
{
|
10 |
-
protected $slug = 'consent';
|
11 |
-
|
12 |
-
protected $type = 'wizard';
|
13 |
-
|
14 |
-
protected $template = 'installer/steps/consent';
|
15 |
-
|
16 |
-
protected $activeSteps = 3;
|
17 |
-
|
18 |
-
protected function renderContent()
|
19 |
-
{
|
20 |
-
$isRegistrationOpen = get_option('users_can_register');
|
21 |
-
$isCommentsEnabled = class_exists('Disable_Comments') ? false : true;
|
22 |
-
$privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
|
23 |
-
$hasGravityForms = class_exists('\GFForms');
|
24 |
-
$hasCF7 = class_exists('\WPCF7');
|
25 |
-
|
26 |
-
echo gdpr('view')->render(
|
27 |
-
$this->template,
|
28 |
-
compact('isRegistrationOpen', 'isCommentsEnabled', 'privacyToolsPageUrl', 'hasGravityForms', 'hasCF7')
|
29 |
-
);
|
30 |
-
}
|
31 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Installer\Steps;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Installer\InstallerStep;
|
6 |
+
use Codelight\GDPR\Installer\InstallerStepInterface;
|
7 |
+
|
8 |
+
class Consent extends InstallerStep implements InstallerStepInterface
|
9 |
+
{
|
10 |
+
protected $slug = 'consent';
|
11 |
+
|
12 |
+
protected $type = 'wizard';
|
13 |
+
|
14 |
+
protected $template = 'installer/steps/consent';
|
15 |
+
|
16 |
+
protected $activeSteps = 3;
|
17 |
+
|
18 |
+
protected function renderContent()
|
19 |
+
{
|
20 |
+
$isRegistrationOpen = get_option('users_can_register');
|
21 |
+
$isCommentsEnabled = class_exists('Disable_Comments') ? false : true;
|
22 |
+
$privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
|
23 |
+
$hasGravityForms = class_exists('\GFForms');
|
24 |
+
$hasCF7 = class_exists('\WPCF7');
|
25 |
+
|
26 |
+
echo gdpr('view')->render(
|
27 |
+
$this->template,
|
28 |
+
compact('isRegistrationOpen', 'isCommentsEnabled', 'privacyToolsPageUrl', 'hasGravityForms', 'hasCF7')
|
29 |
+
);
|
30 |
+
}
|
31 |
+
}
|
src/Installer/Steps/Integrations.php
CHANGED
@@ -1,49 +1,49 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Installer\Steps;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Installer\InstallerStep;
|
6 |
-
use Codelight\GDPR\Installer\InstallerStepInterface;
|
7 |
-
|
8 |
-
class Integrations extends InstallerStep implements InstallerStepInterface
|
9 |
-
{
|
10 |
-
protected $slug = 'integrations';
|
11 |
-
|
12 |
-
protected $type = 'wizard';
|
13 |
-
|
14 |
-
protected $template = 'installer/steps/integrations';
|
15 |
-
|
16 |
-
protected $activeSteps = 4;
|
17 |
-
|
18 |
-
protected function renderContent()
|
19 |
-
{
|
20 |
-
$enableThemeCompatibility = gdpr('options')->get('enable_theme_compatibility');
|
21 |
-
$currentTheme = gdpr('themes')->getCurrentThemeName();
|
22 |
-
$isThemeSupported = gdpr('themes')->isCurrentThemeSupported();
|
23 |
-
|
24 |
-
$hasWooCommerce = false;
|
25 |
-
$hasEDD = false;
|
26 |
-
$hasSendGrid = class_exists('\Sendgrid_Tools');
|
27 |
-
|
28 |
-
echo gdpr('view')->render(
|
29 |
-
$this->template,
|
30 |
-
compact(
|
31 |
-
'enableThemeCompatibility',
|
32 |
-
'hasEDD',
|
33 |
-
'hasWooCommerce',
|
34 |
-
'currentTheme',
|
35 |
-
'isThemeSupported',
|
36 |
-
'hasSendGrid'
|
37 |
-
)
|
38 |
-
);
|
39 |
-
}
|
40 |
-
|
41 |
-
public function submit()
|
42 |
-
{
|
43 |
-
if (isset($_POST['gdpr_enable_theme_compatibility']) && 'yes' === $_POST['gdpr_enable_theme_compatibility']) {
|
44 |
-
gdpr('options')->set('enable_theme_compatibility', true);
|
45 |
-
} else {
|
46 |
-
gdpr('options')->set('enable_theme_compatibility', false);
|
47 |
-
}
|
48 |
-
}
|
49 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Installer\Steps;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Installer\InstallerStep;
|
6 |
+
use Codelight\GDPR\Installer\InstallerStepInterface;
|
7 |
+
|
8 |
+
class Integrations extends InstallerStep implements InstallerStepInterface
|
9 |
+
{
|
10 |
+
protected $slug = 'integrations';
|
11 |
+
|
12 |
+
protected $type = 'wizard';
|
13 |
+
|
14 |
+
protected $template = 'installer/steps/integrations';
|
15 |
+
|
16 |
+
protected $activeSteps = 4;
|
17 |
+
|
18 |
+
protected function renderContent()
|
19 |
+
{
|
20 |
+
$enableThemeCompatibility = gdpr('options')->get('enable_theme_compatibility');
|
21 |
+
$currentTheme = gdpr('themes')->getCurrentThemeName();
|
22 |
+
$isThemeSupported = gdpr('themes')->isCurrentThemeSupported();
|
23 |
+
|
24 |
+
$hasWooCommerce = false;
|
25 |
+
$hasEDD = false;
|
26 |
+
$hasSendGrid = class_exists('\Sendgrid_Tools');
|
27 |
+
|
28 |
+
echo gdpr('view')->render(
|
29 |
+
$this->template,
|
30 |
+
compact(
|
31 |
+
'enableThemeCompatibility',
|
32 |
+
'hasEDD',
|
33 |
+
'hasWooCommerce',
|
34 |
+
'currentTheme',
|
35 |
+
'isThemeSupported',
|
36 |
+
'hasSendGrid'
|
37 |
+
)
|
38 |
+
);
|
39 |
+
}
|
40 |
+
|
41 |
+
public function submit()
|
42 |
+
{
|
43 |
+
if (isset($_POST['gdpr_enable_theme_compatibility']) && 'yes' === $_POST['gdpr_enable_theme_compatibility']) {
|
44 |
+
gdpr('options')->set('enable_theme_compatibility', true);
|
45 |
+
} else {
|
46 |
+
gdpr('options')->set('enable_theme_compatibility', false);
|
47 |
+
}
|
48 |
+
}
|
49 |
+
}
|
src/Installer/Steps/PolicyContents.php
CHANGED
@@ -1,31 +1,31 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
namespace Codelight\GDPR\Installer\Steps;
|
5 |
-
|
6 |
-
|
7 |
-
use Codelight\GDPR\Installer\InstallerStep;
|
8 |
-
use Codelight\GDPR\Installer\InstallerStepInterface;
|
9 |
-
|
10 |
-
class PolicyContents extends InstallerStep implements InstallerStepInterface
|
11 |
-
{
|
12 |
-
protected $slug = 'policy-contents';
|
13 |
-
|
14 |
-
protected $type = 'wizard';
|
15 |
-
|
16 |
-
protected $template = 'installer/steps/policy-contents';
|
17 |
-
|
18 |
-
protected $activeSteps = 2;
|
19 |
-
|
20 |
-
protected function renderContent()
|
21 |
-
{
|
22 |
-
$policyUrl = get_permalink(gdpr('options')->get('policy_page'));
|
23 |
-
$editPolicyUrl = get_edit_post_link(gdpr('options')->get('policy_page'));
|
24 |
-
$policyGenerated = gdpr('options')->get('policy_generated');
|
25 |
-
|
26 |
-
echo gdpr('view')->render(
|
27 |
-
$this->template,
|
28 |
-
compact('policyUrl', 'editPolicyUrl', 'policyGenerated')
|
29 |
-
);
|
30 |
-
}
|
31 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
|
4 |
+
namespace Codelight\GDPR\Installer\Steps;
|
5 |
+
|
6 |
+
|
7 |
+
use Codelight\GDPR\Installer\InstallerStep;
|
8 |
+
use Codelight\GDPR\Installer\InstallerStepInterface;
|
9 |
+
|
10 |
+
class PolicyContents extends InstallerStep implements InstallerStepInterface
|
11 |
+
{
|
12 |
+
protected $slug = 'policy-contents';
|
13 |
+
|
14 |
+
protected $type = 'wizard';
|
15 |
+
|
16 |
+
protected $template = 'installer/steps/policy-contents';
|
17 |
+
|
18 |
+
protected $activeSteps = 2;
|
19 |
+
|
20 |
+
protected function renderContent()
|
21 |
+
{
|
22 |
+
$policyUrl = get_permalink(gdpr('options')->get('policy_page'));
|
23 |
+
$editPolicyUrl = get_edit_post_link(gdpr('options')->get('policy_page'));
|
24 |
+
$policyGenerated = gdpr('options')->get('policy_generated');
|
25 |
+
|
26 |
+
echo gdpr('view')->render(
|
27 |
+
$this->template,
|
28 |
+
compact('policyUrl', 'editPolicyUrl', 'policyGenerated')
|
29 |
+
);
|
30 |
+
}
|
31 |
+
}
|
src/Installer/Steps/PolicySettings.php
CHANGED
@@ -1,215 +1,215 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Installer\Steps;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Installer\InstallerStep;
|
6 |
-
use Codelight\GDPR\Installer\InstallerStepInterface;
|
7 |
-
|
8 |
-
class PolicySettings extends InstallerStep implements InstallerStepInterface
|
9 |
-
{
|
10 |
-
protected $slug = 'policy-settings';
|
11 |
-
|
12 |
-
protected $type = 'wizard';
|
13 |
-
|
14 |
-
protected $template = 'installer/steps/policy-settings';
|
15 |
-
|
16 |
-
protected $activeSteps = 2;
|
17 |
-
|
18 |
-
protected function renderContent()
|
19 |
-
{
|
20 |
-
$policyPage = gdpr('options')->get('policy_page');
|
21 |
-
$policyPageSelector = wp_dropdown_pages([
|
22 |
-
'name' => 'gdpr_policy_page',
|
23 |
-
'show_option_none' => _x('— Create a new page —', '(Admin)', 'gdpr-framework'),
|
24 |
-
'option_none_value' => 'new',
|
25 |
-
'selected' => $policyPage ? $policyPage : 'new',
|
26 |
-
'echo' => false,
|
27 |
-
'class' => 'gdpr-select js-gdpr-select2',
|
28 |
-
]);
|
29 |
-
|
30 |
-
$hasTermsPage = gdpr('options')->get('has_terms_page');
|
31 |
-
$termsPage = gdpr('options')->get('terms_page');
|
32 |
-
|
33 |
-
// Woo compatibility
|
34 |
-
if (!$termsPage && get_option('woocommerce_terms_page_id')) {
|
35 |
-
$hasTermsPage = 'yes';
|
36 |
-
$termsPage = get_option('woocommerce_terms_page_id');
|
37 |
-
$termsPageNote = _x(
|
38 |
-
'We have automatically selected your WooCommerce Terms & Conditions page.',
|
39 |
-
'(Admin)',
|
40 |
-
'gdpr-framework'
|
41 |
-
);
|
42 |
-
} else {
|
43 |
-
$termsPageNote = false;
|
44 |
-
}
|
45 |
-
|
46 |
-
$termsPageSelector = wp_dropdown_pages([
|
47 |
-
'name' => 'gdpr_terms_page',
|
48 |
-
'show_option_none' => _x('— Create a new page —', '(Admin)', 'gdpr-framework'),
|
49 |
-
'option_none_value' => 'new',
|
50 |
-
'selected' => $termsPage ? $termsPage : 'new',
|
51 |
-
'echo' => false,
|
52 |
-
'class' => 'gdpr-select js-gdpr-select2',
|
53 |
-
]);
|
54 |
-
|
55 |
-
$companyName = gdpr('options')->get('company_name');
|
56 |
-
$companyLocation = gdpr('options')->get('company_location');
|
57 |
-
$countryOptions = gdpr('helpers')->getCountrySelectOptions($companyLocation);
|
58 |
-
$contactEmail = gdpr('options')->get('contact_email') ?
|
59 |
-
gdpr('options')->get('contact_email') :
|
60 |
-
get_option('admin_email');
|
61 |
-
|
62 |
-
$representativeContactName = gdpr('options')->get('representative_contact_name');
|
63 |
-
$representativeContactEmail = gdpr('options')->get('representative_contact_email');
|
64 |
-
$representativeContactPhone = gdpr('options')->get('representative_contact_phone');
|
65 |
-
|
66 |
-
$dpaWebsite = gdpr('options')->get('dpa_name');
|
67 |
-
$dpaEmail = gdpr('options')->get('dpa_email');
|
68 |
-
$dpaPhone = gdpr('options')->get('dpa_phone');
|
69 |
-
$dpaData = json_encode(gdpr('helpers')->getDataProtectionAuthorities());
|
70 |
-
|
71 |
-
$hasDPO = gdpr('options')->get('has_dpo');
|
72 |
-
$dpoName = gdpr('options')->get('dpo_name');
|
73 |
-
$dpoEmail = gdpr('options')->get('dpo_email');
|
74 |
-
|
75 |
-
echo gdpr('view')->render(
|
76 |
-
$this->template,
|
77 |
-
compact(
|
78 |
-
'policyPage',
|
79 |
-
'policyPageSelector',
|
80 |
-
'companyName',
|
81 |
-
'companyLocation',
|
82 |
-
'contactEmail',
|
83 |
-
'countryOptions',
|
84 |
-
'hasDPO',
|
85 |
-
'dpoEmail',
|
86 |
-
'dpoName',
|
87 |
-
'representativeContactName',
|
88 |
-
'representativeContactEmail',
|
89 |
-
'representativeContactPhone',
|
90 |
-
'dpaWebsite',
|
91 |
-
'dpaEmail',
|
92 |
-
'dpaPhone',
|
93 |
-
'dpaData',
|
94 |
-
'hasTermsPage',
|
95 |
-
'termsPage',
|
96 |
-
'termsPageSelector',
|
97 |
-
'termsPageNote'
|
98 |
-
)
|
99 |
-
);
|
100 |
-
}
|
101 |
-
|
102 |
-
/*
|
103 |
-
public function validate()
|
104 |
-
{
|
105 |
-
if (!is_email($_POST['gdpr_contact_email'])) {
|
106 |
-
$this->errors = 'Company email is not a valid email!';
|
107 |
-
return false;
|
108 |
-
}
|
109 |
-
|
110 |
-
return true;
|
111 |
-
|
112 |
-
//filter_var($url, FILTER_VALIDATE_URL) === FALSE
|
113 |
-
}
|
114 |
-
*/
|
115 |
-
|
116 |
-
public function submit()
|
117 |
-
{
|
118 |
-
/**
|
119 |
-
* Policy page
|
120 |
-
*/
|
121 |
-
if (isset($_POST['gdpr_create_policy_page']) && 'yes' === $_POST['gdpr_create_policy_page']) {
|
122 |
-
$id = $this->createPolicyPage();
|
123 |
-
gdpr('options')->set('policy_page', $id);
|
124 |
-
} else {
|
125 |
-
gdpr('options')->set('policy_page', $_POST['gdpr_policy_page']);
|
126 |
-
}
|
127 |
-
|
128 |
-
/**
|
129 |
-
* 'Generate policy' checkbox
|
130 |
-
*/
|
131 |
-
if (isset($_POST['gdpr_generate_policy']) && 'yes' === $_POST['gdpr_generate_policy']) {
|
132 |
-
$this->generatePolicy();
|
133 |
-
gdpr('options')->set('policy_generated', true);
|
134 |
-
} else {
|
135 |
-
gdpr('options')->set('policy_generated', false);
|
136 |
-
}
|
137 |
-
|
138 |
-
/**
|
139 |
-
* Company information
|
140 |
-
*/
|
141 |
-
gdpr('options')->set('company_name', $_POST['gdpr_company_name']);
|
142 |
-
gdpr('options')->set('company_location', $_POST['gdpr_company_location']);
|
143 |
-
|
144 |
-
if (is_email($_POST['gdpr_contact_email'])) {
|
145 |
-
gdpr('options')->set('contact_email', $_POST['gdpr_contact_email']);
|
146 |
-
}
|
147 |
-
|
148 |
-
/**
|
149 |
-
* Data Protection Officer
|
150 |
-
*/
|
151 |
-
if (isset($_POST['gdpr_has_dpo'])) {
|
152 |
-
gdpr('options')->set('has_dpo', $_POST['gdpr_has_dpo']);
|
153 |
-
}
|
154 |
-
|
155 |
-
gdpr('options')->set('dpo_name', $_POST['gdpr_dpo_name']);
|
156 |
-
|
157 |
-
if (is_email($_POST['gdpr_dpo_email'])) {
|
158 |
-
gdpr('options')->set('dpo_email', $_POST['gdpr_dpo_email']);
|
159 |
-
}
|
160 |
-
|
161 |
-
/**
|
162 |
-
* Representative contact
|
163 |
-
*/
|
164 |
-
gdpr('options')->set('representative_contact_name', $_POST['gdpr_representative_contact_name']);
|
165 |
-
gdpr('options')->set('representative_contact_phone', $_POST['gdpr_representative_contact_phone']);
|
166 |
-
|
167 |
-
if (is_email($_POST['gdpr_representative_contact_email'])) {
|
168 |
-
gdpr('options')->set('representative_contact_email', $_POST['gdpr_representative_contact_email']);
|
169 |
-
}
|
170 |
-
|
171 |
-
/**
|
172 |
-
* Data protection authority
|
173 |
-
*/
|
174 |
-
gdpr('options')->set('dpa_website', $_POST['gdpr_dpa_website']);
|
175 |
-
gdpr('options')->set('dpa_phone', $_POST['gdpr_dpa_phone']);
|
176 |
-
|
177 |
-
if (is_email($_POST['gdpr_dpa_email'])) {
|
178 |
-
gdpr('options')->set('dpa_email', $_POST['gdpr_dpa_email']);
|
179 |
-
}
|
180 |
-
|
181 |
-
|
182 |
-
/**
|
183 |
-
* Terms page
|
184 |
-
*/
|
185 |
-
if (isset($_POST['gdpr_has_terms_page'])) {
|
186 |
-
gdpr('options')->set('has_terms_page', $_POST['gdpr_has_terms_page']);
|
187 |
-
}
|
188 |
-
|
189 |
-
if (isset($_POST['gdpr_has_terms_page']) && 'yes' === $_POST['gdpr_has_terms_page'] && isset($_POST['gdpr_terms_page'])) {
|
190 |
-
gdpr('options')->set('terms_page', $_POST['gdpr_terms_page']);
|
191 |
-
} else {
|
192 |
-
gdpr('options')->delete('terms_page');
|
193 |
-
}
|
194 |
-
}
|
195 |
-
|
196 |
-
protected function createPolicyPage()
|
197 |
-
{
|
198 |
-
$id = wp_insert_post([
|
199 |
-
'post_title' => __('Privacy Policy', 'gdpr-framework'),
|
200 |
-
'post_type' => 'page',
|
201 |
-
]);
|
202 |
-
|
203 |
-
return $id;
|
204 |
-
}
|
205 |
-
|
206 |
-
protected function generatePolicy()
|
207 |
-
{
|
208 |
-
wp_update_post([
|
209 |
-
'ID' => gdpr('options')->get('policy_page'),
|
210 |
-
'post_content' => gdpr('view')->render(
|
211 |
-
'policy/policy'
|
212 |
-
),
|
213 |
-
]);
|
214 |
-
}
|
215 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Installer\Steps;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Installer\InstallerStep;
|
6 |
+
use Codelight\GDPR\Installer\InstallerStepInterface;
|
7 |
+
|
8 |
+
class PolicySettings extends InstallerStep implements InstallerStepInterface
|
9 |
+
{
|
10 |
+
protected $slug = 'policy-settings';
|
11 |
+
|
12 |
+
protected $type = 'wizard';
|
13 |
+
|
14 |
+
protected $template = 'installer/steps/policy-settings';
|
15 |
+
|
16 |
+
protected $activeSteps = 2;
|
17 |
+
|
18 |
+
protected function renderContent()
|
19 |
+
{
|
20 |
+
$policyPage = gdpr('options')->get('policy_page');
|
21 |
+
$policyPageSelector = wp_dropdown_pages([
|
22 |
+
'name' => 'gdpr_policy_page',
|
23 |
+
'show_option_none' => _x('— Create a new page —', '(Admin)', 'gdpr-framework'),
|
24 |
+
'option_none_value' => 'new',
|
25 |
+
'selected' => $policyPage ? $policyPage : 'new',
|
26 |
+
'echo' => false,
|
27 |
+
'class' => 'gdpr-select js-gdpr-select2',
|
28 |
+
]);
|
29 |
+
|
30 |
+
$hasTermsPage = gdpr('options')->get('has_terms_page');
|
31 |
+
$termsPage = gdpr('options')->get('terms_page');
|
32 |
+
|
33 |
+
// Woo compatibility
|
34 |
+
if (!$termsPage && get_option('woocommerce_terms_page_id')) {
|
35 |
+
$hasTermsPage = 'yes';
|
36 |
+
$termsPage = get_option('woocommerce_terms_page_id');
|
37 |
+
$termsPageNote = _x(
|
38 |
+
'We have automatically selected your WooCommerce Terms & Conditions page.',
|
39 |
+
'(Admin)',
|
40 |
+
'gdpr-framework'
|
41 |
+
);
|
42 |
+
} else {
|
43 |
+
$termsPageNote = false;
|
44 |
+
}
|
45 |
+
|
46 |
+
$termsPageSelector = wp_dropdown_pages([
|
47 |
+
'name' => 'gdpr_terms_page',
|
48 |
+
'show_option_none' => _x('— Create a new page —', '(Admin)', 'gdpr-framework'),
|
49 |
+
'option_none_value' => 'new',
|
50 |
+
'selected' => $termsPage ? $termsPage : 'new',
|
51 |
+
'echo' => false,
|
52 |
+
'class' => 'gdpr-select js-gdpr-select2',
|
53 |
+
]);
|
54 |
+
|
55 |
+
$companyName = gdpr('options')->get('company_name');
|
56 |
+
$companyLocation = gdpr('options')->get('company_location');
|
57 |
+
$countryOptions = gdpr('helpers')->getCountrySelectOptions($companyLocation);
|
58 |
+
$contactEmail = gdpr('options')->get('contact_email') ?
|
59 |
+
gdpr('options')->get('contact_email') :
|
60 |
+
get_option('admin_email');
|
61 |
+
|
62 |
+
$representativeContactName = gdpr('options')->get('representative_contact_name');
|
63 |
+
$representativeContactEmail = gdpr('options')->get('representative_contact_email');
|
64 |
+
$representativeContactPhone = gdpr('options')->get('representative_contact_phone');
|
65 |
+
|
66 |
+
$dpaWebsite = gdpr('options')->get('dpa_name');
|
67 |
+
$dpaEmail = gdpr('options')->get('dpa_email');
|
68 |
+
$dpaPhone = gdpr('options')->get('dpa_phone');
|
69 |
+
$dpaData = json_encode(gdpr('helpers')->getDataProtectionAuthorities());
|
70 |
+
|
71 |
+
$hasDPO = gdpr('options')->get('has_dpo');
|
72 |
+
$dpoName = gdpr('options')->get('dpo_name');
|
73 |
+
$dpoEmail = gdpr('options')->get('dpo_email');
|
74 |
+
|
75 |
+
echo gdpr('view')->render(
|
76 |
+
$this->template,
|
77 |
+
compact(
|
78 |
+
'policyPage',
|
79 |
+
'policyPageSelector',
|
80 |
+
'companyName',
|
81 |
+
'companyLocation',
|
82 |
+
'contactEmail',
|
83 |
+
'countryOptions',
|
84 |
+
'hasDPO',
|
85 |
+
'dpoEmail',
|
86 |
+
'dpoName',
|
87 |
+
'representativeContactName',
|
88 |
+
'representativeContactEmail',
|
89 |
+
'representativeContactPhone',
|
90 |
+
'dpaWebsite',
|
91 |
+
'dpaEmail',
|
92 |
+
'dpaPhone',
|
93 |
+
'dpaData',
|
94 |
+
'hasTermsPage',
|
95 |
+
'termsPage',
|
96 |
+
'termsPageSelector',
|
97 |
+
'termsPageNote'
|
98 |
+
)
|
99 |
+
);
|
100 |
+
}
|
101 |
+
|
102 |
+
/*
|
103 |
+
public function validate()
|
104 |
+
{
|
105 |
+
if (!is_email($_POST['gdpr_contact_email'])) {
|
106 |
+
$this->errors = 'Company email is not a valid email!';
|
107 |
+
return false;
|
108 |
+
}
|
109 |
+
|
110 |
+
return true;
|
111 |
+
|
112 |
+
//filter_var($url, FILTER_VALIDATE_URL) === FALSE
|
113 |
+
}
|
114 |
+
*/
|
115 |
+
|
116 |
+
public function submit()
|
117 |
+
{
|
118 |
+
/**
|
119 |
+
* Policy page
|
120 |
+
*/
|
121 |
+
if (isset($_POST['gdpr_create_policy_page']) && 'yes' === $_POST['gdpr_create_policy_page']) {
|
122 |
+
$id = $this->createPolicyPage();
|
123 |
+
gdpr('options')->set('policy_page', $id);
|
124 |
+
} else {
|
125 |
+
gdpr('options')->set('policy_page', $_POST['gdpr_policy_page']);
|
126 |
+
}
|
127 |
+
|
128 |
+
/**
|
129 |
+
* 'Generate policy' checkbox
|
130 |
+
*/
|
131 |
+
if (isset($_POST['gdpr_generate_policy']) && 'yes' === $_POST['gdpr_generate_policy']) {
|
132 |
+
$this->generatePolicy();
|
133 |
+
gdpr('options')->set('policy_generated', true);
|
134 |
+
} else {
|
135 |
+
gdpr('options')->set('policy_generated', false);
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* Company information
|
140 |
+
*/
|
141 |
+
gdpr('options')->set('company_name', $_POST['gdpr_company_name']);
|
142 |
+
gdpr('options')->set('company_location', $_POST['gdpr_company_location']);
|
143 |
+
|
144 |
+
if (is_email($_POST['gdpr_contact_email'])) {
|
145 |
+
gdpr('options')->set('contact_email', $_POST['gdpr_contact_email']);
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Data Protection Officer
|
150 |
+
*/
|
151 |
+
if (isset($_POST['gdpr_has_dpo'])) {
|
152 |
+
gdpr('options')->set('has_dpo', $_POST['gdpr_has_dpo']);
|
153 |
+
}
|
154 |
+
|
155 |
+
gdpr('options')->set('dpo_name', $_POST['gdpr_dpo_name']);
|
156 |
+
|
157 |
+
if (is_email($_POST['gdpr_dpo_email'])) {
|
158 |
+
gdpr('options')->set('dpo_email', $_POST['gdpr_dpo_email']);
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Representative contact
|
163 |
+
*/
|
164 |
+
gdpr('options')->set('representative_contact_name', $_POST['gdpr_representative_contact_name']);
|
165 |
+
gdpr('options')->set('representative_contact_phone', $_POST['gdpr_representative_contact_phone']);
|
166 |
+
|
167 |
+
if (is_email($_POST['gdpr_representative_contact_email'])) {
|
168 |
+
gdpr('options')->set('representative_contact_email', $_POST['gdpr_representative_contact_email']);
|
169 |
+
}
|
170 |
+
|
171 |
+
/**
|
172 |
+
* Data protection authority
|
173 |
+
*/
|
174 |
+
gdpr('options')->set('dpa_website', $_POST['gdpr_dpa_website']);
|
175 |
+
gdpr('options')->set('dpa_phone', $_POST['gdpr_dpa_phone']);
|
176 |
+
|
177 |
+
if (is_email($_POST['gdpr_dpa_email'])) {
|
178 |
+
gdpr('options')->set('dpa_email', $_POST['gdpr_dpa_email']);
|
179 |
+
}
|
180 |
+
|
181 |
+
|
182 |
+
/**
|
183 |
+
* Terms page
|
184 |
+
*/
|
185 |
+
if (isset($_POST['gdpr_has_terms_page'])) {
|
186 |
+
gdpr('options')->set('has_terms_page', $_POST['gdpr_has_terms_page']);
|
187 |
+
}
|
188 |
+
|
189 |
+
if (isset($_POST['gdpr_has_terms_page']) && 'yes' === $_POST['gdpr_has_terms_page'] && isset($_POST['gdpr_terms_page'])) {
|
190 |
+
gdpr('options')->set('terms_page', $_POST['gdpr_terms_page']);
|
191 |
+
} else {
|
192 |
+
gdpr('options')->delete('terms_page');
|
193 |
+
}
|
194 |
+
}
|
195 |
+
|
196 |
+
protected function createPolicyPage()
|
197 |
+
{
|
198 |
+
$id = wp_insert_post([
|
199 |
+
'post_title' => __('Privacy Policy', 'gdpr-framework'),
|
200 |
+
'post_type' => 'page',
|
201 |
+
]);
|
202 |
+
|
203 |
+
return $id;
|
204 |
+
}
|
205 |
+
|
206 |
+
protected function generatePolicy()
|
207 |
+
{
|
208 |
+
wp_update_post([
|
209 |
+
'ID' => gdpr('options')->get('policy_page'),
|
210 |
+
'post_content' => gdpr('view')->render(
|
211 |
+
'policy/policy'
|
212 |
+
),
|
213 |
+
]);
|
214 |
+
}
|
215 |
+
}
|
src/Modules/ContactForm7/ContactForm7.php
CHANGED
@@ -1,108 +1,108 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Modules\ContactForm7;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Components\Consent\ConsentManager;
|
6 |
-
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
7 |
-
|
8 |
-
class ContactForm7
|
9 |
-
{
|
10 |
-
public function __construct(DataSubjectManager $dataSubjectManager, ConsentManager $consentManager)
|
11 |
-
{
|
12 |
-
$this->dataSubjectManager = $dataSubjectManager;
|
13 |
-
$this->consentManager = $consentManager;
|
14 |
-
|
15 |
-
//add_action('wpcf7_init', [$this, 'addFormTags'], 10, 3);
|
16 |
-
//add_action('wpcf7_admin_init', [$this, 'addFormTagGenerators'], 9999, 3);
|
17 |
-
|
18 |
-
add_action('wpcf7_before_send_mail', [$this, 'processFormSubmission'], 10, 3);
|
19 |
-
}
|
20 |
-
|
21 |
-
public function addFormTags()
|
22 |
-
{
|
23 |
-
wpcf7_add_form_tag(
|
24 |
-
['gdpr_consent_text'],
|
25 |
-
[$this, 'renderPrivacyTag']
|
26 |
-
);
|
27 |
-
}
|
28 |
-
|
29 |
-
public function addFormTagGenerators()
|
30 |
-
{
|
31 |
-
$generator = \WPCF7_TagGenerator::get_instance();
|
32 |
-
|
33 |
-
$generator->add(
|
34 |
-
'gdpr_privacy',
|
35 |
-
_x('gdpr terms txt', '(Admin)', 'gdpr-framework'),
|
36 |
-
[$this, 'generatePrivacyTag']
|
37 |
-
);
|
38 |
-
}
|
39 |
-
|
40 |
-
public function generatePrivacyTag($contactForm, $args)
|
41 |
-
{
|
42 |
-
//$args = wp_parse_args( $args, array() );
|
43 |
-
//$description = _x( "Generate the default text for your Privacy Policy acceptance checkbox. For more details, see %s.", '(Admin)', 'gdpr-framework' );
|
44 |
-
//$descLink = wpcf7_link( _x( 'https://TODO', '(Admin)', 'gdpr-framework' ), _x( 'GDPR Terms', '(Admin)', 'gdpr-framework' ) );
|
45 |
-
//$content = $this->renderPrivacyTag();
|
46 |
-
|
47 |
-
echo gdpr('view')->render(
|
48 |
-
'modules/contact-form-7/generator-privacy',
|
49 |
-
compact('description', 'descLink', 'args', 'content')
|
50 |
-
);
|
51 |
-
}
|
52 |
-
|
53 |
-
public function renderPrivacyTag()
|
54 |
-
{
|
55 |
-
$privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
|
56 |
-
|
57 |
-
return gdpr('view')->render(
|
58 |
-
'modules/contact-form-7/content-privacy',
|
59 |
-
compact('privacyPolicyUrl')
|
60 |
-
);
|
61 |
-
}
|
62 |
-
|
63 |
-
public function processFormSubmission(\WPCF7_ContactForm $form, $abort, \WPCF7_Submission $submission)
|
64 |
-
{
|
65 |
-
$consents = $this->findConsents($form, $submission);
|
66 |
-
|
67 |
-
if (!count($consents)) {
|
68 |
-
return;
|
69 |
-
}
|
70 |
-
|
71 |
-
$email = $this->findEmail($submission);
|
72 |
-
|
73 |
-
if (!$email) {
|
74 |
-
return;
|
75 |
-
}
|
76 |
-
|
77 |
-
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
78 |
-
|
79 |
-
foreach ($consents as $consent) {
|
80 |
-
$dataSubject->giveConsent($consent);
|
81 |
-
}
|
82 |
-
}
|
83 |
-
|
84 |
-
public function findConsents(\WPCF7_ContactForm $form, \WPCF7_Submission $submission)
|
85 |
-
{
|
86 |
-
$consents = [];
|
87 |
-
|
88 |
-
foreach ($form->scan_form_tags() as $tag) {
|
89 |
-
/* @var $tag \WPCF7_FormTag */
|
90 |
-
if ('acceptance' === $tag->type && $submission->get_posted_data()[$tag->name] && $this->consentManager->isRegisteredConsent($tag->name)) {
|
91 |
-
$consents[] = $tag->name;
|
92 |
-
}
|
93 |
-
}
|
94 |
-
|
95 |
-
return $consents;
|
96 |
-
}
|
97 |
-
|
98 |
-
public function findEmail(\WPCF7_Submission $submission)
|
99 |
-
{
|
100 |
-
if (isset($submission->get_posted_data()['your-email'])) {
|
101 |
-
return $submission->get_posted_data()['your-email'];
|
102 |
-
}
|
103 |
-
|
104 |
-
if (isset($submission->get_posted_data()['email'])) {
|
105 |
-
return $submission->get_posted_data()['email'];
|
106 |
-
}
|
107 |
-
}
|
108 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Modules\ContactForm7;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Components\Consent\ConsentManager;
|
6 |
+
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
7 |
+
|
8 |
+
class ContactForm7
|
9 |
+
{
|
10 |
+
public function __construct(DataSubjectManager $dataSubjectManager, ConsentManager $consentManager)
|
11 |
+
{
|
12 |
+
$this->dataSubjectManager = $dataSubjectManager;
|
13 |
+
$this->consentManager = $consentManager;
|
14 |
+
|
15 |
+
//add_action('wpcf7_init', [$this, 'addFormTags'], 10, 3);
|
16 |
+
//add_action('wpcf7_admin_init', [$this, 'addFormTagGenerators'], 9999, 3);
|
17 |
+
|
18 |
+
add_action('wpcf7_before_send_mail', [$this, 'processFormSubmission'], 10, 3);
|
19 |
+
}
|
20 |
+
|
21 |
+
public function addFormTags()
|
22 |
+
{
|
23 |
+
wpcf7_add_form_tag(
|
24 |
+
['gdpr_consent_text'],
|
25 |
+
[$this, 'renderPrivacyTag']
|
26 |
+
);
|
27 |
+
}
|
28 |
+
|
29 |
+
public function addFormTagGenerators()
|
30 |
+
{
|
31 |
+
$generator = \WPCF7_TagGenerator::get_instance();
|
32 |
+
|
33 |
+
$generator->add(
|
34 |
+
'gdpr_privacy',
|
35 |
+
_x('gdpr terms txt', '(Admin)', 'gdpr-framework'),
|
36 |
+
[$this, 'generatePrivacyTag']
|
37 |
+
);
|
38 |
+
}
|
39 |
+
|
40 |
+
public function generatePrivacyTag($contactForm, $args)
|
41 |
+
{
|
42 |
+
//$args = wp_parse_args( $args, array() );
|
43 |
+
//$description = _x( "Generate the default text for your Privacy Policy acceptance checkbox. For more details, see %s.", '(Admin)', 'gdpr-framework' );
|
44 |
+
//$descLink = wpcf7_link( _x( 'https://TODO', '(Admin)', 'gdpr-framework' ), _x( 'GDPR Terms', '(Admin)', 'gdpr-framework' ) );
|
45 |
+
//$content = $this->renderPrivacyTag();
|
46 |
+
|
47 |
+
echo gdpr('view')->render(
|
48 |
+
'modules/contact-form-7/generator-privacy',
|
49 |
+
compact('description', 'descLink', 'args', 'content')
|
50 |
+
);
|
51 |
+
}
|
52 |
+
|
53 |
+
public function renderPrivacyTag()
|
54 |
+
{
|
55 |
+
$privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
|
56 |
+
|
57 |
+
return gdpr('view')->render(
|
58 |
+
'modules/contact-form-7/content-privacy',
|
59 |
+
compact('privacyPolicyUrl')
|
60 |
+
);
|
61 |
+
}
|
62 |
+
|
63 |
+
public function processFormSubmission(\WPCF7_ContactForm $form, $abort, \WPCF7_Submission $submission)
|
64 |
+
{
|
65 |
+
$consents = $this->findConsents($form, $submission);
|
66 |
+
|
67 |
+
if (!count($consents)) {
|
68 |
+
return;
|
69 |
+
}
|
70 |
+
|
71 |
+
$email = $this->findEmail($submission);
|
72 |
+
|
73 |
+
if (!$email) {
|
74 |
+
return;
|
75 |
+
}
|
76 |
+
|
77 |
+
$dataSubject = $this->dataSubjectManager->getByEmail($email);
|
78 |
+
|
79 |
+
foreach ($consents as $consent) {
|
80 |
+
$dataSubject->giveConsent($consent);
|
81 |
+
}
|
82 |
+
}
|
83 |
+
|
84 |
+
public function findConsents(\WPCF7_ContactForm $form, \WPCF7_Submission $submission)
|
85 |
+
{
|
86 |
+
$consents = [];
|
87 |
+
|
88 |
+
foreach ($form->scan_form_tags() as $tag) {
|
89 |
+
/* @var $tag \WPCF7_FormTag */
|
90 |
+
if ('acceptance' === $tag->type && $submission->get_posted_data()[$tag->name] && $this->consentManager->isRegisteredConsent($tag->name)) {
|
91 |
+
$consents[] = $tag->name;
|
92 |
+
}
|
93 |
+
}
|
94 |
+
|
95 |
+
return $consents;
|
96 |
+
}
|
97 |
+
|
98 |
+
public function findEmail(\WPCF7_Submission $submission)
|
99 |
+
{
|
100 |
+
if (isset($submission->get_posted_data()['your-email'])) {
|
101 |
+
return $submission->get_posted_data()['your-email'];
|
102 |
+
}
|
103 |
+
|
104 |
+
if (isset($submission->get_posted_data()['email'])) {
|
105 |
+
return $submission->get_posted_data()['email'];
|
106 |
+
}
|
107 |
+
}
|
108 |
+
}
|
src/Modules/WPML/WPML.php
CHANGED
@@ -1,153 +1,153 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR\Modules\WPML;
|
4 |
-
|
5 |
-
class WPML
|
6 |
-
{
|
7 |
-
protected $prefix = 'gdpr_';
|
8 |
-
|
9 |
-
protected $translatableOptions = [
|
10 |
-
'tools_page',
|
11 |
-
'policy_page',
|
12 |
-
'terms_page',
|
13 |
-
'consent_info',
|
14 |
-
];
|
15 |
-
|
16 |
-
public function __construct()
|
17 |
-
{
|
18 |
-
if (!class_exists('Sitepress')) {
|
19 |
-
return;
|
20 |
-
}
|
21 |
-
|
22 |
-
$this->setupOptionFilters();
|
23 |
-
}
|
24 |
-
|
25 |
-
protected function setupOptionFilters()
|
26 |
-
{
|
27 |
-
foreach ($this->translatableOptions as $option) {
|
28 |
-
add_filter("gdpr/options/get/{$option}", [$this, 'getTranslatedOption']);
|
29 |
-
|
30 |
-
$option = $this->prefix($option);
|
31 |
-
add_filter("pre_update_option_{$option}", [$this, 'setTranslatedOption'], 10, 2);
|
32 |
-
}
|
33 |
-
|
34 |
-
add_filter('gdpr/options/get/consent_types', [$this, 'getConsentTypes']);
|
35 |
-
add_filter('gdpr/options/set/consent_types', [$this, 'saveConsentTypes']);
|
36 |
-
}
|
37 |
-
|
38 |
-
public function getTranslatedOption($option)
|
39 |
-
{
|
40 |
-
if (!defined('ICL_LANGUAGE_CODE')) {
|
41 |
-
if (is_array($option)) {
|
42 |
-
return '';
|
43 |
-
} else {
|
44 |
-
return $option;
|
45 |
-
}
|
46 |
-
}
|
47 |
-
|
48 |
-
if (isset($option[(string)ICL_LANGUAGE_CODE])) {
|
49 |
-
return $option[(string)ICL_LANGUAGE_CODE];
|
50 |
-
} else {
|
51 |
-
return '';
|
52 |
-
}
|
53 |
-
}
|
54 |
-
|
55 |
-
public function setTranslatedOption($newValue, $oldValue)
|
56 |
-
{
|
57 |
-
if (!defined('ICL_LANGUAGE_CODE')) {
|
58 |
-
return $newValue;
|
59 |
-
}
|
60 |
-
|
61 |
-
if (is_array($oldValue)) {
|
62 |
-
$value = $oldValue;
|
63 |
-
} else {
|
64 |
-
$value = [];
|
65 |
-
}
|
66 |
-
|
67 |
-
$value[(string)ICL_LANGUAGE_CODE] = $newValue;
|
68 |
-
|
69 |
-
return $value;
|
70 |
-
}
|
71 |
-
|
72 |
-
public function getConsentTypes($consentTypes)
|
73 |
-
{
|
74 |
-
if (!defined('ICL_LANGUAGE_CODE')) {
|
75 |
-
return $consentTypes;
|
76 |
-
}
|
77 |
-
|
78 |
-
$code = (string)ICL_LANGUAGE_CODE;
|
79 |
-
$filteredConsentTypes = [];
|
80 |
-
|
81 |
-
if (count($consentTypes)) {
|
82 |
-
foreach ($consentTypes as $consentType) {
|
83 |
-
|
84 |
-
if (isset($consentType['slug']) && ('privacy-policy' === $consentType['slug'] or 'terms-condition' === $consentType['slug'])) {
|
85 |
-
$filteredConsentTypes[] = [
|
86 |
-
'slug' => isset($consentType['slug']) ? $consentType['slug'] : '',
|
87 |
-
'visible' => isset($consentType['visible']) ? $consentType['visible'] : 0,
|
88 |
-
'title' => isset($consentType["title"]) ? $consentType["title"] : '',
|
89 |
-
'description' => isset($consentType["description"]) ? $consentType["description"] : '',
|
90 |
-
];
|
91 |
-
} else {
|
92 |
-
$filteredConsentTypes[] = [
|
93 |
-
'slug' => isset($consentType['slug']) ? $consentType['slug'] : '',
|
94 |
-
'visible' => isset($consentType['visible']) ? $consentType['visible'] : 0,
|
95 |
-
'title' => isset($consentType["{$code}_title"]) ? $consentType["{$code}_title"] : '',
|
96 |
-
'description' => isset($consentType["{$code}_description"]) ? $consentType["{$code}_description"] : '',
|
97 |
-
];
|
98 |
-
}
|
99 |
-
}
|
100 |
-
}
|
101 |
-
|
102 |
-
return $filteredConsentTypes;
|
103 |
-
}
|
104 |
-
|
105 |
-
public function saveConsentTypes($newConsentTypes)
|
106 |
-
{
|
107 |
-
if (!defined('ICL_LANGUAGE_CODE')) {
|
108 |
-
return $newConsentTypes;
|
109 |
-
}
|
110 |
-
|
111 |
-
$code = (string)ICL_LANGUAGE_CODE;
|
112 |
-
$translatedConsentTypes = [];
|
113 |
-
$currentConsentTypes = gdpr('options')->get('consent_types', null, false);
|
114 |
-
|
115 |
-
if (count($newConsentTypes)) {
|
116 |
-
foreach ($newConsentTypes as &$newConsentType) {
|
117 |
-
|
118 |
-
// Match an existing consent type with the new one
|
119 |
-
$slug = $newConsentType['slug'];
|
120 |
-
$existingConsentType = current(array_filter($currentConsentTypes, function($value) use ($slug) {
|
121 |
-
return $value['slug'] === $slug;
|
122 |
-
}));
|
123 |
-
|
124 |
-
if ($existingConsentType) {
|
125 |
-
// We have a matching existing consent - update translations, keep the rest
|
126 |
-
$existingConsentType["{$code}_title"] = $newConsentType['title'];
|
127 |
-
$existingConsentType["{$code}_description"] = $newConsentType['description'];
|
128 |
-
|
129 |
-
$translatedConsentTypes[] = $existingConsentType;
|
130 |
-
} else {
|
131 |
-
// We do not have a matching existin consent - just adjust the keys for language
|
132 |
-
$newConsentType["{$code}_title"] = $newConsentType['title'];
|
133 |
-
$newConsentType["{$code}_description"] = $newConsentType['description'];
|
134 |
-
unset($newConsentType['title']);
|
135 |
-
unset($newConsentType['description']);
|
136 |
-
|
137 |
-
$translatedConsentTypes[] = $newConsentType;
|
138 |
-
}
|
139 |
-
}
|
140 |
-
}
|
141 |
-
|
142 |
-
return $translatedConsentTypes;
|
143 |
-
}
|
144 |
-
|
145 |
-
public function prefix($name)
|
146 |
-
{
|
147 |
-
if (0 === strpos($name, $this->prefix)) {
|
148 |
-
return $name;
|
149 |
-
}
|
150 |
-
|
151 |
-
return $this->prefix . $name;
|
152 |
-
}
|
153 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR\Modules\WPML;
|
4 |
+
|
5 |
+
class WPML
|
6 |
+
{
|
7 |
+
protected $prefix = 'gdpr_';
|
8 |
+
|
9 |
+
protected $translatableOptions = [
|
10 |
+
'tools_page',
|
11 |
+
'policy_page',
|
12 |
+
'terms_page',
|
13 |
+
'consent_info',
|
14 |
+
];
|
15 |
+
|
16 |
+
public function __construct()
|
17 |
+
{
|
18 |
+
if (!class_exists('Sitepress')) {
|
19 |
+
return;
|
20 |
+
}
|
21 |
+
|
22 |
+
$this->setupOptionFilters();
|
23 |
+
}
|
24 |
+
|
25 |
+
protected function setupOptionFilters()
|
26 |
+
{
|
27 |
+
foreach ($this->translatableOptions as $option) {
|
28 |
+
add_filter("gdpr/options/get/{$option}", [$this, 'getTranslatedOption']);
|
29 |
+
|
30 |
+
$option = $this->prefix($option);
|
31 |
+
add_filter("pre_update_option_{$option}", [$this, 'setTranslatedOption'], 10, 2);
|
32 |
+
}
|
33 |
+
|
34 |
+
add_filter('gdpr/options/get/consent_types', [$this, 'getConsentTypes']);
|
35 |
+
add_filter('gdpr/options/set/consent_types', [$this, 'saveConsentTypes']);
|
36 |
+
}
|
37 |
+
|
38 |
+
public function getTranslatedOption($option)
|
39 |
+
{
|
40 |
+
if (!defined('ICL_LANGUAGE_CODE')) {
|
41 |
+
if (is_array($option)) {
|
42 |
+
return '';
|
43 |
+
} else {
|
44 |
+
return $option;
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
if (isset($option[(string)ICL_LANGUAGE_CODE])) {
|
49 |
+
return $option[(string)ICL_LANGUAGE_CODE];
|
50 |
+
} else {
|
51 |
+
return '';
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
public function setTranslatedOption($newValue, $oldValue)
|
56 |
+
{
|
57 |
+
if (!defined('ICL_LANGUAGE_CODE')) {
|
58 |
+
return $newValue;
|
59 |
+
}
|
60 |
+
|
61 |
+
if (is_array($oldValue)) {
|
62 |
+
$value = $oldValue;
|
63 |
+
} else {
|
64 |
+
$value = [];
|
65 |
+
}
|
66 |
+
|
67 |
+
$value[(string)ICL_LANGUAGE_CODE] = $newValue;
|
68 |
+
|
69 |
+
return $value;
|
70 |
+
}
|
71 |
+
|
72 |
+
public function getConsentTypes($consentTypes)
|
73 |
+
{
|
74 |
+
if (!defined('ICL_LANGUAGE_CODE')) {
|
75 |
+
return $consentTypes;
|
76 |
+
}
|
77 |
+
|
78 |
+
$code = (string)ICL_LANGUAGE_CODE;
|
79 |
+
$filteredConsentTypes = [];
|
80 |
+
|
81 |
+
if (count($consentTypes)) {
|
82 |
+
foreach ($consentTypes as $consentType) {
|
83 |
+
|
84 |
+
if (isset($consentType['slug']) && ('privacy-policy' === $consentType['slug'] or 'terms-condition' === $consentType['slug'])) {
|
85 |
+
$filteredConsentTypes[] = [
|
86 |
+
'slug' => isset($consentType['slug']) ? $consentType['slug'] : '',
|
87 |
+
'visible' => isset($consentType['visible']) ? $consentType['visible'] : 0,
|
88 |
+
'title' => isset($consentType["title"]) ? $consentType["title"] : '',
|
89 |
+
'description' => isset($consentType["description"]) ? $consentType["description"] : '',
|
90 |
+
];
|
91 |
+
} else {
|
92 |
+
$filteredConsentTypes[] = [
|
93 |
+
'slug' => isset($consentType['slug']) ? $consentType['slug'] : '',
|
94 |
+
'visible' => isset($consentType['visible']) ? $consentType['visible'] : 0,
|
95 |
+
'title' => isset($consentType["{$code}_title"]) ? $consentType["{$code}_title"] : '',
|
96 |
+
'description' => isset($consentType["{$code}_description"]) ? $consentType["{$code}_description"] : '',
|
97 |
+
];
|
98 |
+
}
|
99 |
+
}
|
100 |
+
}
|
101 |
+
|
102 |
+
return $filteredConsentTypes;
|
103 |
+
}
|
104 |
+
|
105 |
+
public function saveConsentTypes($newConsentTypes)
|
106 |
+
{
|
107 |
+
if (!defined('ICL_LANGUAGE_CODE')) {
|
108 |
+
return $newConsentTypes;
|
109 |
+
}
|
110 |
+
|
111 |
+
$code = (string)ICL_LANGUAGE_CODE;
|
112 |
+
$translatedConsentTypes = [];
|
113 |
+
$currentConsentTypes = gdpr('options')->get('consent_types', null, false);
|
114 |
+
|
115 |
+
if (count($newConsentTypes)) {
|
116 |
+
foreach ($newConsentTypes as &$newConsentType) {
|
117 |
+
|
118 |
+
// Match an existing consent type with the new one
|
119 |
+
$slug = $newConsentType['slug'];
|
120 |
+
$existingConsentType = current(array_filter($currentConsentTypes, function($value) use ($slug) {
|
121 |
+
return $value['slug'] === $slug;
|
122 |
+
}));
|
123 |
+
|
124 |
+
if ($existingConsentType) {
|
125 |
+
// We have a matching existing consent - update translations, keep the rest
|
126 |
+
$existingConsentType["{$code}_title"] = $newConsentType['title'];
|
127 |
+
$existingConsentType["{$code}_description"] = $newConsentType['description'];
|
128 |
+
|
129 |
+
$translatedConsentTypes[] = $existingConsentType;
|
130 |
+
} else {
|
131 |
+
// We do not have a matching existin consent - just adjust the keys for language
|
132 |
+
$newConsentType["{$code}_title"] = $newConsentType['title'];
|
133 |
+
$newConsentType["{$code}_description"] = $newConsentType['description'];
|
134 |
+
unset($newConsentType['title']);
|
135 |
+
unset($newConsentType['description']);
|
136 |
+
|
137 |
+
$translatedConsentTypes[] = $newConsentType;
|
138 |
+
}
|
139 |
+
}
|
140 |
+
}
|
141 |
+
|
142 |
+
return $translatedConsentTypes;
|
143 |
+
}
|
144 |
+
|
145 |
+
public function prefix($name)
|
146 |
+
{
|
147 |
+
if (0 === strpos($name, $this->prefix)) {
|
148 |
+
return $name;
|
149 |
+
}
|
150 |
+
|
151 |
+
return $this->prefix . $name;
|
152 |
+
}
|
153 |
+
}
|
src/Router.php
CHANGED
@@ -1,166 +1,166 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR;
|
4 |
-
|
5 |
-
use Codelight\GDPR\DataSubject\DataSubjectAuthenticator;
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Handles automatically identifying context and triggering actions based on $_REQUEST['gdpr_action']
|
9 |
-
*
|
10 |
-
* Class Router
|
11 |
-
*
|
12 |
-
* @package Codelight\GDPR
|
13 |
-
*/
|
14 |
-
class Router
|
15 |
-
{
|
16 |
-
/* @var DataSubjectAuthenticator $authenticator */
|
17 |
-
protected $authenticator;
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Router constructor.
|
21 |
-
*
|
22 |
-
* @param DataSubjectAuthenticator $authenticator
|
23 |
-
*/
|
24 |
-
public function __construct(DataSubjectAuthenticator $authenticator)
|
25 |
-
{
|
26 |
-
$this->authenticator = $authenticator;
|
27 |
-
|
28 |
-
// Routing happens at priority 20 to allow other 'init' actions to complete before
|
29 |
-
add_action('init', [$this, 'routeFrontendRequest'], 20);
|
30 |
-
add_action('admin_init', [$this, 'routeAdminRequest'], 20);
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Get and sanitize the action parameter
|
35 |
-
*
|
36 |
-
* @return bool|mixed
|
37 |
-
*/
|
38 |
-
protected function getAction()
|
39 |
-
{
|
40 |
-
if (!isset($_REQUEST['gdpr_action'])) {
|
41 |
-
return false;
|
42 |
-
}
|
43 |
-
|
44 |
-
// Simple sanitization: allowed chars are alphanumeric, dash, underscore and forward slash.
|
45 |
-
return preg_replace("/[^a-zA-Z0-9_\-\/]/", "", $_REQUEST['gdpr_action']);
|
46 |
-
}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Detect and trigger proper action in front-end
|
50 |
-
*
|
51 |
-
* @param $action
|
52 |
-
*/
|
53 |
-
public function routeFrontendRequest()
|
54 |
-
{
|
55 |
-
// Since the 'init' hooks runs in both admin and non-admin requests, double-check where we are
|
56 |
-
if (is_admin()) {
|
57 |
-
return;
|
58 |
-
}
|
59 |
-
|
60 |
-
// Handle identification by email
|
61 |
-
$this->authenticator->identify();
|
62 |
-
|
63 |
-
$action = $this->getAction();
|
64 |
-
$nonce = isset($_REQUEST['gdpr_nonce']) ? $_REQUEST['gdpr_nonce'] : null;
|
65 |
-
|
66 |
-
if (!$action) {
|
67 |
-
return;
|
68 |
-
}
|
69 |
-
|
70 |
-
$dataSubject = $this->authenticator->authenticate();
|
71 |
-
|
72 |
-
if ($dataSubject) {
|
73 |
-
$tag = "gdpr/frontend/privacy-tools-page/action/{$action}";
|
74 |
-
if (wp_verify_nonce($nonce, $tag)) {
|
75 |
-
$key = isset($_REQUEST['gdpr_key']) ? $_REQUEST['gdpr_key'] : null;
|
76 |
-
do_action($tag, $dataSubject, $key);
|
77 |
-
} else {
|
78 |
-
wp_die(
|
79 |
-
sprintf(
|
80 |
-
__('Nonce error for action "%s". Please go back and try again!', 'gdpr-framework'),
|
81 |
-
esc_html($action)
|
82 |
-
)
|
83 |
-
);
|
84 |
-
}
|
85 |
-
} else {
|
86 |
-
$tag = "gdpr/frontend/action/{$action}";
|
87 |
-
if (wp_verify_nonce($nonce, $tag)) {
|
88 |
-
do_action($tag);
|
89 |
-
} else {
|
90 |
-
wp_die(
|
91 |
-
sprintf(
|
92 |
-
__('Nonce error for action "%s". Please go back and try again!', 'gdpr-framework'),
|
93 |
-
esc_html($action)
|
94 |
-
)
|
95 |
-
);
|
96 |
-
}
|
97 |
-
}
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Detect and trigger proper action in admin
|
102 |
-
*
|
103 |
-
* @param $action
|
104 |
-
*/
|
105 |
-
public function routeAdminRequest()
|
106 |
-
{
|
107 |
-
$action = $this->getAction();
|
108 |
-
$nonce = isset($_REQUEST['gdpr_nonce']) ? $_REQUEST['gdpr_nonce'] : null;
|
109 |
-
|
110 |
-
if (!$action) {
|
111 |
-
return;
|
112 |
-
}
|
113 |
-
|
114 |
-
if (isset($_GET['page']) && 'gdpr-profile' === $_GET['page']) {
|
115 |
-
|
116 |
-
$dataSubject = $this->authenticator->authenticate();
|
117 |
-
if ($dataSubject) {
|
118 |
-
$tag = "gdpr/dashboard/privacy-tools/action/{$action}";
|
119 |
-
|
120 |
-
if (wp_verify_nonce($nonce, $tag)) {
|
121 |
-
do_action($tag, $dataSubject);
|
122 |
-
} else {
|
123 |
-
wp_die(
|
124 |
-
sprintf(
|
125 |
-
__('Nonce error for action "%s". Please go back and try again!', 'gdpr-framework'),
|
126 |
-
esc_html($action)
|
127 |
-
)
|
128 |
-
);
|
129 |
-
}
|
130 |
-
}
|
131 |
-
} else {
|
132 |
-
if ($this->checkAdminPermissions()) {
|
133 |
-
|
134 |
-
$tag = "gdpr/admin/action/{$action}";
|
135 |
-
|
136 |
-
if (wp_verify_nonce($nonce, $tag)) {
|
137 |
-
do_action($tag);
|
138 |
-
} else {
|
139 |
-
wp_die(
|
140 |
-
sprintf(
|
141 |
-
__('Nonce error for action "%s". Please go back and try again!', 'gdpr-framework'),
|
142 |
-
esc_html($action)
|
143 |
-
)
|
144 |
-
);
|
145 |
-
}
|
146 |
-
} else {
|
147 |
-
wp_die(
|
148 |
-
sprintf(
|
149 |
-
_x('You do not have the required permissions to perform this action!', '(Admin)', 'gdpr-framework'),
|
150 |
-
esc_html($action)
|
151 |
-
)
|
152 |
-
);
|
153 |
-
}
|
154 |
-
}
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Check if the current user has the correct capability to perform an admin action
|
159 |
-
*
|
160 |
-
* @return bool
|
161 |
-
*/
|
162 |
-
protected function checkAdminPermissions()
|
163 |
-
{
|
164 |
-
return current_user_can(apply_filters('gdpr/capability', 'manage_options'));
|
165 |
-
}
|
166 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR;
|
4 |
+
|
5 |
+
use Codelight\GDPR\DataSubject\DataSubjectAuthenticator;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Handles automatically identifying context and triggering actions based on $_REQUEST['gdpr_action']
|
9 |
+
*
|
10 |
+
* Class Router
|
11 |
+
*
|
12 |
+
* @package Codelight\GDPR
|
13 |
+
*/
|
14 |
+
class Router
|
15 |
+
{
|
16 |
+
/* @var DataSubjectAuthenticator $authenticator */
|
17 |
+
protected $authenticator;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Router constructor.
|
21 |
+
*
|
22 |
+
* @param DataSubjectAuthenticator $authenticator
|
23 |
+
*/
|
24 |
+
public function __construct(DataSubjectAuthenticator $authenticator)
|
25 |
+
{
|
26 |
+
$this->authenticator = $authenticator;
|
27 |
+
|
28 |
+
// Routing happens at priority 20 to allow other 'init' actions to complete before
|
29 |
+
add_action('init', [$this, 'routeFrontendRequest'], 20);
|
30 |
+
add_action('admin_init', [$this, 'routeAdminRequest'], 20);
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Get and sanitize the action parameter
|
35 |
+
*
|
36 |
+
* @return bool|mixed
|
37 |
+
*/
|
38 |
+
protected function getAction()
|
39 |
+
{
|
40 |
+
if (!isset($_REQUEST['gdpr_action'])) {
|
41 |
+
return false;
|
42 |
+
}
|
43 |
+
|
44 |
+
// Simple sanitization: allowed chars are alphanumeric, dash, underscore and forward slash.
|
45 |
+
return preg_replace("/[^a-zA-Z0-9_\-\/]/", "", $_REQUEST['gdpr_action']);
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Detect and trigger proper action in front-end
|
50 |
+
*
|
51 |
+
* @param $action
|
52 |
+
*/
|
53 |
+
public function routeFrontendRequest()
|
54 |
+
{
|
55 |
+
// Since the 'init' hooks runs in both admin and non-admin requests, double-check where we are
|
56 |
+
if (is_admin()) {
|
57 |
+
return;
|
58 |
+
}
|
59 |
+
|
60 |
+
// Handle identification by email
|
61 |
+
$this->authenticator->identify();
|
62 |
+
|
63 |
+
$action = $this->getAction();
|
64 |
+
$nonce = isset($_REQUEST['gdpr_nonce']) ? $_REQUEST['gdpr_nonce'] : null;
|
65 |
+
|
66 |
+
if (!$action) {
|
67 |
+
return;
|
68 |
+
}
|
69 |
+
|
70 |
+
$dataSubject = $this->authenticator->authenticate();
|
71 |
+
|
72 |
+
if ($dataSubject) {
|
73 |
+
$tag = "gdpr/frontend/privacy-tools-page/action/{$action}";
|
74 |
+
if (wp_verify_nonce($nonce, $tag)) {
|
75 |
+
$key = isset($_REQUEST['gdpr_key']) ? $_REQUEST['gdpr_key'] : null;
|
76 |
+
do_action($tag, $dataSubject, $key);
|
77 |
+
} else {
|
78 |
+
wp_die(
|
79 |
+
sprintf(
|
80 |
+
__('Nonce error for action "%s". Please go back and try again!', 'gdpr-framework'),
|
81 |
+
esc_html($action)
|
82 |
+
)
|
83 |
+
);
|
84 |
+
}
|
85 |
+
} else {
|
86 |
+
$tag = "gdpr/frontend/action/{$action}";
|
87 |
+
if (wp_verify_nonce($nonce, $tag)) {
|
88 |
+
do_action($tag);
|
89 |
+
} else {
|
90 |
+
wp_die(
|
91 |
+
sprintf(
|
92 |
+
__('Nonce error for action "%s". Please go back and try again!', 'gdpr-framework'),
|
93 |
+
esc_html($action)
|
94 |
+
)
|
95 |
+
);
|
96 |
+
}
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* Detect and trigger proper action in admin
|
102 |
+
*
|
103 |
+
* @param $action
|
104 |
+
*/
|
105 |
+
public function routeAdminRequest()
|
106 |
+
{
|
107 |
+
$action = $this->getAction();
|
108 |
+
$nonce = isset($_REQUEST['gdpr_nonce']) ? $_REQUEST['gdpr_nonce'] : null;
|
109 |
+
|
110 |
+
if (!$action) {
|
111 |
+
return;
|
112 |
+
}
|
113 |
+
|
114 |
+
if (isset($_GET['page']) && 'gdpr-profile' === $_GET['page']) {
|
115 |
+
|
116 |
+
$dataSubject = $this->authenticator->authenticate();
|
117 |
+
if ($dataSubject) {
|
118 |
+
$tag = "gdpr/dashboard/privacy-tools/action/{$action}";
|
119 |
+
|
120 |
+
if (wp_verify_nonce($nonce, $tag)) {
|
121 |
+
do_action($tag, $dataSubject);
|
122 |
+
} else {
|
123 |
+
wp_die(
|
124 |
+
sprintf(
|
125 |
+
__('Nonce error for action "%s". Please go back and try again!', 'gdpr-framework'),
|
126 |
+
esc_html($action)
|
127 |
+
)
|
128 |
+
);
|
129 |
+
}
|
130 |
+
}
|
131 |
+
} else {
|
132 |
+
if ($this->checkAdminPermissions()) {
|
133 |
+
|
134 |
+
$tag = "gdpr/admin/action/{$action}";
|
135 |
+
|
136 |
+
if (wp_verify_nonce($nonce, $tag)) {
|
137 |
+
do_action($tag);
|
138 |
+
} else {
|
139 |
+
wp_die(
|
140 |
+
sprintf(
|
141 |
+
__('Nonce error for action "%s". Please go back and try again!', 'gdpr-framework'),
|
142 |
+
esc_html($action)
|
143 |
+
)
|
144 |
+
);
|
145 |
+
}
|
146 |
+
} else {
|
147 |
+
wp_die(
|
148 |
+
sprintf(
|
149 |
+
_x('You do not have the required permissions to perform this action!', '(Admin)', 'gdpr-framework'),
|
150 |
+
esc_html($action)
|
151 |
+
)
|
152 |
+
);
|
153 |
+
}
|
154 |
+
}
|
155 |
+
}
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Check if the current user has the correct capability to perform an admin action
|
159 |
+
*
|
160 |
+
* @return bool
|
161 |
+
*/
|
162 |
+
protected function checkAdminPermissions()
|
163 |
+
{
|
164 |
+
return current_user_can(apply_filters('gdpr/capability', 'manage_options'));
|
165 |
+
}
|
166 |
+
}
|
src/Setup.php
CHANGED
@@ -1,94 +1,94 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Admin\AdminTab;
|
6 |
-
use Codelight\GDPR\Components\Consent\ConsentManager;
|
7 |
-
use Codelight\GDPR\Components\PrivacyToolsPage\PrivacyToolsPage;
|
8 |
-
use Codelight\GDPR\Components\PrivacyPolicy\PrivacyPolicy;
|
9 |
-
use Codelight\GDPR\Components\Support\Support;
|
10 |
-
use Codelight\GDPR\Components\WordpressComments\WordpressComments;
|
11 |
-
use Codelight\GDPR\DataSubject\DataExporter;
|
12 |
-
use Codelight\GDPR\DataSubject\DataSubjectAdmin;
|
13 |
-
use Codelight\GDPR\DataSubject\DataSubjectIdentificator;
|
14 |
-
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
15 |
-
use Codelight\GDPR\Modules\ContactForm7\ContactForm7;
|
16 |
-
use Codelight\GDPR\Components\Themes\Themes;
|
17 |
-
use Codelight\GDPR\Components\WordpressUser\WordpressUser;
|
18 |
-
use Codelight\GDPR\Modules\WPML\WPML;
|
19 |
-
use Codelight\GDPR\Options\Options;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Instantiate components
|
23 |
-
*
|
24 |
-
* Class Setup
|
25 |
-
* @package Codelight\GDPR
|
26 |
-
*/
|
27 |
-
class Setup
|
28 |
-
{
|
29 |
-
/**
|
30 |
-
* Setup constructor.
|
31 |
-
*/
|
32 |
-
public function __construct()
|
33 |
-
{
|
34 |
-
$this->registerComponents();
|
35 |
-
$this->runComponents();
|
36 |
-
|
37 |
-
add_action('init', function() {
|
38 |
-
|
39 |
-
if (!is_admin()) {
|
40 |
-
return;
|
41 |
-
}
|
42 |
-
|
43 |
-
gdpr()->singleton(SetupAdmin::class);
|
44 |
-
gdpr(SetupAdmin::class);
|
45 |
-
}, 0);
|
46 |
-
}
|
47 |
-
|
48 |
-
/**
|
49 |
-
* Register required components in the container
|
50 |
-
*/
|
51 |
-
protected function registerComponents()
|
52 |
-
{
|
53 |
-
gdpr()->bind(Router::class);
|
54 |
-
gdpr()->bind(DataExporter::class);
|
55 |
-
|
56 |
-
gdpr()->singleton(PrivacyToolsPage::class);
|
57 |
-
|
58 |
-
gdpr()->singleton(AdminTab::class);
|
59 |
-
gdpr()->singleton(DataSubjectManager::class);
|
60 |
-
gdpr()->singleton(DataSubjectIdentificator::class);
|
61 |
-
gdpr()->singleton(View::class);
|
62 |
-
gdpr()->singleton(Options::class);
|
63 |
-
gdpr()->singleton(ConsentManager::class);
|
64 |
-
gdpr()->singleton(Helpers::class);
|
65 |
-
gdpr()->singleton(Themes::class);
|
66 |
-
|
67 |
-
gdpr()->alias(View::class, 'view');
|
68 |
-
gdpr()->alias(Options::class, 'options');
|
69 |
-
gdpr()->alias(ConsentManager::class, 'consent');
|
70 |
-
gdpr()->alias(Helpers::class, 'helpers');
|
71 |
-
gdpr()->alias(Themes::class, 'themes');
|
72 |
-
gdpr()->alias(DataSubjectManager::class, 'data-subject');
|
73 |
-
}
|
74 |
-
|
75 |
-
/**
|
76 |
-
* Check which components should be ran and run them
|
77 |
-
*/
|
78 |
-
protected function runComponents()
|
79 |
-
{
|
80 |
-
gdpr()->make(WPML::class);
|
81 |
-
gdpr()->make(Router::class);
|
82 |
-
gdpr()->make(DataSubjectIdentificator::class);
|
83 |
-
gdpr()->make(DataSubjectAdmin::class);
|
84 |
-
gdpr()->make(PrivacyToolsPage::class);
|
85 |
-
gdpr()->make(PrivacyPolicy::class);
|
86 |
-
gdpr()->make(WordpressComments::class);
|
87 |
-
gdpr()->make(WordpressUser::class);
|
88 |
-
gdpr()->make(Support::class);
|
89 |
-
|
90 |
-
// Integrations
|
91 |
-
gdpr()->make(Themes::class);
|
92 |
-
gdpr()->make(ContactForm7::class);
|
93 |
-
}
|
94 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Admin\AdminTab;
|
6 |
+
use Codelight\GDPR\Components\Consent\ConsentManager;
|
7 |
+
use Codelight\GDPR\Components\PrivacyToolsPage\PrivacyToolsPage;
|
8 |
+
use Codelight\GDPR\Components\PrivacyPolicy\PrivacyPolicy;
|
9 |
+
use Codelight\GDPR\Components\Support\Support;
|
10 |
+
use Codelight\GDPR\Components\WordpressComments\WordpressComments;
|
11 |
+
use Codelight\GDPR\DataSubject\DataExporter;
|
12 |
+
use Codelight\GDPR\DataSubject\DataSubjectAdmin;
|
13 |
+
use Codelight\GDPR\DataSubject\DataSubjectIdentificator;
|
14 |
+
use Codelight\GDPR\DataSubject\DataSubjectManager;
|
15 |
+
use Codelight\GDPR\Modules\ContactForm7\ContactForm7;
|
16 |
+
use Codelight\GDPR\Components\Themes\Themes;
|
17 |
+
use Codelight\GDPR\Components\WordpressUser\WordpressUser;
|
18 |
+
use Codelight\GDPR\Modules\WPML\WPML;
|
19 |
+
use Codelight\GDPR\Options\Options;
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Instantiate components
|
23 |
+
*
|
24 |
+
* Class Setup
|
25 |
+
* @package Codelight\GDPR
|
26 |
+
*/
|
27 |
+
class Setup
|
28 |
+
{
|
29 |
+
/**
|
30 |
+
* Setup constructor.
|
31 |
+
*/
|
32 |
+
public function __construct()
|
33 |
+
{
|
34 |
+
$this->registerComponents();
|
35 |
+
$this->runComponents();
|
36 |
+
|
37 |
+
add_action('init', function() {
|
38 |
+
|
39 |
+
if (!is_admin()) {
|
40 |
+
return;
|
41 |
+
}
|
42 |
+
|
43 |
+
gdpr()->singleton(SetupAdmin::class);
|
44 |
+
gdpr(SetupAdmin::class);
|
45 |
+
}, 0);
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Register required components in the container
|
50 |
+
*/
|
51 |
+
protected function registerComponents()
|
52 |
+
{
|
53 |
+
gdpr()->bind(Router::class);
|
54 |
+
gdpr()->bind(DataExporter::class);
|
55 |
+
|
56 |
+
gdpr()->singleton(PrivacyToolsPage::class);
|
57 |
+
|
58 |
+
gdpr()->singleton(AdminTab::class);
|
59 |
+
gdpr()->singleton(DataSubjectManager::class);
|
60 |
+
gdpr()->singleton(DataSubjectIdentificator::class);
|
61 |
+
gdpr()->singleton(View::class);
|
62 |
+
gdpr()->singleton(Options::class);
|
63 |
+
gdpr()->singleton(ConsentManager::class);
|
64 |
+
gdpr()->singleton(Helpers::class);
|
65 |
+
gdpr()->singleton(Themes::class);
|
66 |
+
|
67 |
+
gdpr()->alias(View::class, 'view');
|
68 |
+
gdpr()->alias(Options::class, 'options');
|
69 |
+
gdpr()->alias(ConsentManager::class, 'consent');
|
70 |
+
gdpr()->alias(Helpers::class, 'helpers');
|
71 |
+
gdpr()->alias(Themes::class, 'themes');
|
72 |
+
gdpr()->alias(DataSubjectManager::class, 'data-subject');
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Check which components should be ran and run them
|
77 |
+
*/
|
78 |
+
protected function runComponents()
|
79 |
+
{
|
80 |
+
gdpr()->make(WPML::class);
|
81 |
+
gdpr()->make(Router::class);
|
82 |
+
gdpr()->make(DataSubjectIdentificator::class);
|
83 |
+
gdpr()->make(DataSubjectAdmin::class);
|
84 |
+
gdpr()->make(PrivacyToolsPage::class);
|
85 |
+
gdpr()->make(PrivacyPolicy::class);
|
86 |
+
gdpr()->make(WordpressComments::class);
|
87 |
+
gdpr()->make(WordpressUser::class);
|
88 |
+
gdpr()->make(Support::class);
|
89 |
+
|
90 |
+
// Integrations
|
91 |
+
gdpr()->make(Themes::class);
|
92 |
+
gdpr()->make(ContactForm7::class);
|
93 |
+
}
|
94 |
+
}
|
src/SetupAdmin.php
CHANGED
@@ -1,62 +1,62 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR;
|
4 |
-
|
5 |
-
use Codelight\GDPR\Admin\AdminError;
|
6 |
-
use Codelight\GDPR\Admin\AdminNotice;
|
7 |
-
use Codelight\GDPR\Admin\Modal;
|
8 |
-
use Codelight\GDPR\Admin\WordpressAdmin;
|
9 |
-
use Codelight\GDPR\Admin\WordpressAdminPage;
|
10 |
-
use Codelight\GDPR\Components\Consent\ConsentAdmin;
|
11 |
-
use Codelight\GDPR\Installer\Installer;
|
12 |
-
use Codelight\GDPR\Installer\AdminInstallerNotice;
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Register and set up admin components.
|
16 |
-
* This class is instantiated at admin_init priority 0
|
17 |
-
*
|
18 |
-
* Class SetupAdmin
|
19 |
-
*
|
20 |
-
* @package Codelight\GDPR
|
21 |
-
*/
|
22 |
-
class SetupAdmin
|
23 |
-
{
|
24 |
-
/**
|
25 |
-
* SetupAdmin constructor.
|
26 |
-
*/
|
27 |
-
public function __construct()
|
28 |
-
{
|
29 |
-
$this->registerComponents();
|
30 |
-
$this->runComponents();
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Register components in the container
|
35 |
-
*/
|
36 |
-
protected function registerComponents()
|
37 |
-
{
|
38 |
-
gdpr()->singleton(WordpressAdmin::class);
|
39 |
-
gdpr()->singleton(WordpressAdminPage::class);
|
40 |
-
gdpr()->singleton(Installer::class);
|
41 |
-
|
42 |
-
// Not a singleton.
|
43 |
-
gdpr()->alias(AdminNotice::class, 'admin-notice');
|
44 |
-
gdpr()->alias(AdminError::class, 'admin-error');
|
45 |
-
gdpr()->alias(AdminInstallerNotice::class, 'installer-notice');
|
46 |
-
gdpr()->alias(Modal::class, 'admin-modal');
|
47 |
-
gdpr()->alias(WordpressAdminPage::class, 'admin-page');
|
48 |
-
|
49 |
-
gdpr()->bind(ConsentAdmin::class);
|
50 |
-
}
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Run components
|
54 |
-
*/
|
55 |
-
protected function runComponents()
|
56 |
-
{
|
57 |
-
gdpr(WordpressAdmin::class);
|
58 |
-
gdpr(WordpressAdminPage::class);
|
59 |
-
gdpr(Installer::class);
|
60 |
-
gdpr(ConsentAdmin::class);
|
61 |
-
}
|
62 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR;
|
4 |
+
|
5 |
+
use Codelight\GDPR\Admin\AdminError;
|
6 |
+
use Codelight\GDPR\Admin\AdminNotice;
|
7 |
+
use Codelight\GDPR\Admin\Modal;
|
8 |
+
use Codelight\GDPR\Admin\WordpressAdmin;
|
9 |
+
use Codelight\GDPR\Admin\WordpressAdminPage;
|
10 |
+
use Codelight\GDPR\Components\Consent\ConsentAdmin;
|
11 |
+
use Codelight\GDPR\Installer\Installer;
|
12 |
+
use Codelight\GDPR\Installer\AdminInstallerNotice;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Register and set up admin components.
|
16 |
+
* This class is instantiated at admin_init priority 0
|
17 |
+
*
|
18 |
+
* Class SetupAdmin
|
19 |
+
*
|
20 |
+
* @package Codelight\GDPR
|
21 |
+
*/
|
22 |
+
class SetupAdmin
|
23 |
+
{
|
24 |
+
/**
|
25 |
+
* SetupAdmin constructor.
|
26 |
+
*/
|
27 |
+
public function __construct()
|
28 |
+
{
|
29 |
+
$this->registerComponents();
|
30 |
+
$this->runComponents();
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Register components in the container
|
35 |
+
*/
|
36 |
+
protected function registerComponents()
|
37 |
+
{
|
38 |
+
gdpr()->singleton(WordpressAdmin::class);
|
39 |
+
gdpr()->singleton(WordpressAdminPage::class);
|
40 |
+
gdpr()->singleton(Installer::class);
|
41 |
+
|
42 |
+
// Not a singleton.
|
43 |
+
gdpr()->alias(AdminNotice::class, 'admin-notice');
|
44 |
+
gdpr()->alias(AdminError::class, 'admin-error');
|
45 |
+
gdpr()->alias(AdminInstallerNotice::class, 'installer-notice');
|
46 |
+
gdpr()->alias(Modal::class, 'admin-modal');
|
47 |
+
gdpr()->alias(WordpressAdminPage::class, 'admin-page');
|
48 |
+
|
49 |
+
gdpr()->bind(ConsentAdmin::class);
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Run components
|
54 |
+
*/
|
55 |
+
protected function runComponents()
|
56 |
+
{
|
57 |
+
gdpr(WordpressAdmin::class);
|
58 |
+
gdpr(WordpressAdminPage::class);
|
59 |
+
gdpr(Installer::class);
|
60 |
+
gdpr(ConsentAdmin::class);
|
61 |
+
}
|
62 |
+
}
|
src/View.php
CHANGED
@@ -1,64 +1,64 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
namespace Codelight\GDPR;
|
4 |
-
|
5 |
-
/**
|
6 |
-
* Handles locating templates from either the theme or plugin,
|
7 |
-
* injecting and extracting data and rendering them.
|
8 |
-
*
|
9 |
-
* Class View
|
10 |
-
* @package Codelight\GDPR
|
11 |
-
*/
|
12 |
-
class View
|
13 |
-
{
|
14 |
-
/**
|
15 |
-
* View constructor.
|
16 |
-
*/
|
17 |
-
public function __construct()
|
18 |
-
{
|
19 |
-
$this->dirs = $this->getTemplateDirectories();
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Render a given template.
|
24 |
-
*
|
25 |
-
* @param $template
|
26 |
-
* @param array $data
|
27 |
-
* @param null $templateDir
|
28 |
-
*
|
29 |
-
* @return string
|
30 |
-
*/
|
31 |
-
public function render($template, $data = [], $templateDir = null)
|
32 |
-
{
|
33 |
-
if (is_null($templateDir)) {
|
34 |
-
foreach ($this->dirs as $dir) {
|
35 |
-
if (file_exists($dir . $template . '.php')) {
|
36 |
-
$templateDir = $dir;
|
37 |
-
break;
|
38 |
-
}
|
39 |
-
}
|
40 |
-
}
|
41 |
-
|
42 |
-
extract($data);
|
43 |
-
ob_start();
|
44 |
-
require $templateDir . $template . '.php';
|
45 |
-
|
46 |
-
return ob_get_clean();
|
47 |
-
}
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Get valid template directories and pass them through a filter
|
51 |
-
*
|
52 |
-
* @return array
|
53 |
-
*/
|
54 |
-
protected function getTemplateDirectories()
|
55 |
-
{
|
56 |
-
$directories = array_filter([
|
57 |
-
get_stylesheet_directory() . '/gdpr-framework/',
|
58 |
-
get_template_directory() . '/gdpr-framework/',
|
59 |
-
gdpr('config')->get('plugin.template_path'),
|
60 |
-
], 'is_dir');
|
61 |
-
|
62 |
-
return array_unique(apply_filters('gdpr/views', $directories));
|
63 |
-
}
|
64 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace Codelight\GDPR;
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Handles locating templates from either the theme or plugin,
|
7 |
+
* injecting and extracting data and rendering them.
|
8 |
+
*
|
9 |
+
* Class View
|
10 |
+
* @package Codelight\GDPR
|
11 |
+
*/
|
12 |
+
class View
|
13 |
+
{
|
14 |
+
/**
|
15 |
+
* View constructor.
|
16 |
+
*/
|
17 |
+
public function __construct()
|
18 |
+
{
|
19 |
+
$this->dirs = $this->getTemplateDirectories();
|
20 |
+
}
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Render a given template.
|
24 |
+
*
|
25 |
+
* @param $template
|
26 |
+
* @param array $data
|
27 |
+
* @param null $templateDir
|
28 |
+
*
|
29 |
+
* @return string
|
30 |
+
*/
|
31 |
+
public function render($template, $data = [], $templateDir = null)
|
32 |
+
{
|
33 |
+
if (is_null($templateDir)) {
|
34 |
+
foreach ($this->dirs as $dir) {
|
35 |
+
if (file_exists($dir . $template . '.php')) {
|
36 |
+
$templateDir = $dir;
|
37 |
+
break;
|
38 |
+
}
|
39 |
+
}
|
40 |
+
}
|
41 |
+
|
42 |
+
extract($data);
|
43 |
+
ob_start();
|
44 |
+
require $templateDir . $template . '.php';
|
45 |
+
|
46 |
+
return ob_get_clean();
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Get valid template directories and pass them through a filter
|
51 |
+
*
|
52 |
+
* @return array
|
53 |
+
*/
|
54 |
+
protected function getTemplateDirectories()
|
55 |
+
{
|
56 |
+
$directories = array_filter([
|
57 |
+
get_stylesheet_directory() . '/gdpr-framework/',
|
58 |
+
get_template_directory() . '/gdpr-framework/',
|
59 |
+
gdpr('config')->get('plugin.template_path'),
|
60 |
+
], 'is_dir');
|
61 |
+
|
62 |
+
return array_unique(apply_filters('gdpr/views', $directories));
|
63 |
+
}
|
64 |
+
}
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInit5f4ac86ae1a983fd118be68a8ad29c43::getLoader();
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit9f3572d4c44534633256010eb339e06e
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
-
call_user_func(\Composer\Autoload\
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
@@ -48,19 +48,19 @@ class ComposerAutoloaderInit9f3572d4c44534633256010eb339e06e
|
|
48 |
$loader->register(true);
|
49 |
|
50 |
if ($useStaticLoader) {
|
51 |
-
$includeFiles = Composer\Autoload\
|
52 |
} else {
|
53 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
}
|
55 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
-
|
57 |
}
|
58 |
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
-
function
|
64 |
{
|
65 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
require $file;
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit5f4ac86ae1a983fd118be68a8ad29c43
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit5f4ac86ae1a983fd118be68a8ad29c43', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit5f4ac86ae1a983fd118be68a8ad29c43', 'loadClassLoader'));
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit5f4ac86ae1a983fd118be68a8ad29c43::getInitializer($loader));
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
48 |
$loader->register(true);
|
49 |
|
50 |
if ($useStaticLoader) {
|
51 |
+
$includeFiles = Composer\Autoload\ComposerStaticInit5f4ac86ae1a983fd118be68a8ad29c43::$files;
|
52 |
} else {
|
53 |
$includeFiles = require __DIR__ . '/autoload_files.php';
|
54 |
}
|
55 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
56 |
+
composerRequire5f4ac86ae1a983fd118be68a8ad29c43($fileIdentifier, $file);
|
57 |
}
|
58 |
|
59 |
return $loader;
|
60 |
}
|
61 |
}
|
62 |
|
63 |
+
function composerRequire5f4ac86ae1a983fd118be68a8ad29c43($fileIdentifier, $file)
|
64 |
{
|
65 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
66 |
require $file;
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
|
@@ -72,8 +72,8 @@ class ComposerStaticInit9f3572d4c44534633256010eb339e06e
|
|
72 |
public static function getInitializer(ClassLoader $loader)
|
73 |
{
|
74 |
return \Closure::bind(function () use ($loader) {
|
75 |
-
$loader->prefixLengthsPsr4 =
|
76 |
-
$loader->prefixDirsPsr4 =
|
77 |
|
78 |
}, null, ClassLoader::class);
|
79 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInit5f4ac86ae1a983fd118be68a8ad29c43
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
|
72 |
public static function getInitializer(ClassLoader $loader)
|
73 |
{
|
74 |
return \Closure::bind(function () use ($loader) {
|
75 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit5f4ac86ae1a983fd118be68a8ad29c43::$prefixLengthsPsr4;
|
76 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit5f4ac86ae1a983fd118be68a8ad29c43::$prefixDirsPsr4;
|
77 |
|
78 |
}, null, ClassLoader::class);
|
79 |
}
|
views/admin/consent.php
CHANGED
@@ -1,105 +1,105 @@
|
|
1 |
-
<hr>
|
2 |
-
|
3 |
-
<h3><?= _x('Default consent types', '(Admin)', 'gdpr-framework'); ?></h3>
|
4 |
-
<p><?= _x('These are the consent types that have been automatically registered by the framework or a plugin.', '(Admin)', 'gdpr-framework'); ?></p>
|
5 |
-
<?php if (count($defaultConsentTypes)): ?>
|
6 |
-
<table class="gdpr-consent">
|
7 |
-
<th><?= _x('Slug', '(Admin)', 'gdpr-framework'); ?></th>
|
8 |
-
<th><?= _x('Title', '(Admin)', 'gdpr-framework'); ?></th>
|
9 |
-
<th><?= _x('Description', '(Admin)', 'gdpr-framework'); ?></th>
|
10 |
-
<th><?= _x('Visibility', '(Admin)', 'gdpr-framework'); ?></th>
|
11 |
-
<?php foreach ($defaultConsentTypes as $consentType): ?>
|
12 |
-
<tr>
|
13 |
-
<td class="gdpr-consent-table-input"><?= $consentType['slug']; ?></td>
|
14 |
-
<td class="gdpr-consent-table-input"><?= $consentType['title']; ?></td>
|
15 |
-
<td class="gdpr-consent-table-desc"><?= $consentType['description']; ?></td>
|
16 |
-
<td>
|
17 |
-
<?php if ($consentType['visible']): ?>
|
18 |
-
<?= _x('Visible', '(Admin)', 'gdpr-framework'); ?>
|
19 |
-
<?php else: ?>
|
20 |
-
<?= _x('Hidden', '(Admin)', 'gdpr-framework'); ?>
|
21 |
-
<?php endif; ?>
|
22 |
-
</td>
|
23 |
-
</tr>
|
24 |
-
<?php endforeach; ?>
|
25 |
-
</table>
|
26 |
-
<?php endif; ?>
|
27 |
-
<br>
|
28 |
-
<hr>
|
29 |
-
<h3><?= _x('Custom consent types', '(Admin)', 'gdpr-framework'); ?></h3>
|
30 |
-
<p><?= _x('Here you can add custom consent types to track. They will not be used anywhere by default - you will need to build an integration for each of them.', '(Admin)', 'gdpr-framework'); ?></p>
|
31 |
-
<div class="js-gdpr-repeater" data-name="gdpr_consent_types">
|
32 |
-
<table class="gdpr-consent-admin" data-repeater-list="gdpr_consent_types">
|
33 |
-
<thead>
|
34 |
-
<th>
|
35 |
-
<?= _x('Machine-readable slug', '(Admin)', 'gdpr-framework'); ?>*
|
36 |
-
</th>
|
37 |
-
<th>
|
38 |
-
<?= _x('Title', '(Admin)', 'gdpr-framework'); ?>*
|
39 |
-
</th>
|
40 |
-
<th>
|
41 |
-
<?= _x('Description', '(Admin)', 'gdpr-framework'); ?>
|
42 |
-
</th>
|
43 |
-
<th>
|
44 |
-
<?= _x('Visible?', '(Admin)', 'gdpr-framework'); ?>
|
45 |
-
</th>
|
46 |
-
</thead>
|
47 |
-
<tr data-repeater-item>
|
48 |
-
<td class="gdpr-consent-table-input">
|
49 |
-
<input
|
50 |
-
type="text"
|
51 |
-
name="slug"
|
52 |
-
placeholder="<?= _x('Slug', '(Admin)', 'gdpr-framework'); ?>"
|
53 |
-
pattern="^[A-Za-z0-9_-]+$"
|
54 |
-
oninvalid="setCustomValidity('Please fill in this field using alphanumeric characters, dashes and underscores.')"
|
55 |
-
oninput="setCustomValidity('')"
|
56 |
-
required
|
57 |
-
/>
|
58 |
-
</td>
|
59 |
-
<td class="gdpr-consent-table-input">
|
60 |
-
<input type="text" name="title" placeholder="<?= _x('Title', '(Admin)', 'gdpr-framework'); ?>" required />
|
61 |
-
</td>
|
62 |
-
<td class="gdpr-consent-table-desc">
|
63 |
-
<textarea type="text" name="description" placeholder="<?= _x('Description', '(Admin)', 'gdpr-framework'); ?>"></textarea>
|
64 |
-
</td>
|
65 |
-
<td>
|
66 |
-
<label>
|
67 |
-
<input type="checkbox" name="visible" value="1"/>
|
68 |
-
<?= _x('Visible?', '(Admin)', 'gdpr-framework'); ?>
|
69 |
-
</label>
|
70 |
-
</td>
|
71 |
-
<td>
|
72 |
-
<input data-repeater-delete class="button button-primary" type="button" value="<?= _x('Remove', '(Admin)', 'gdpr-framework'); ?>"/>
|
73 |
-
</td>
|
74 |
-
</tr>
|
75 |
-
|
76 |
-
</table>
|
77 |
-
<div class="gdpr-consent-add-button">
|
78 |
-
<input data-repeater-create class="button button-primary" type="button" value="Add consent type"/>
|
79 |
-
</div>
|
80 |
-
<input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
|
81 |
-
<input type="hidden" name="gdpr_action" value="update_consent_data" />
|
82 |
-
</div>
|
83 |
-
|
84 |
-
<?php if (count($customConsentTypes)): ?>
|
85 |
-
<script>
|
86 |
-
window.repeaterData = [];
|
87 |
-
window.repeaterData['gdpr_consent_types'] = <?= json_encode($customConsentTypes); ?>;
|
88 |
-
</script>
|
89 |
-
<?php endif; ?>
|
90 |
-
|
91 |
-
<br>
|
92 |
-
<hr>
|
93 |
-
<h3><?= _x('Additional info', '(Admin)', 'gdpr-framework'); ?></h3>
|
94 |
-
<p>
|
95 |
-
<?= _x('This text will be displayed to your data subjects on the Privacy Tools page.', '(Admin)', 'gdpr-framework'); ?>
|
96 |
-
</p>
|
97 |
-
<?php wp_editor(
|
98 |
-
wp_kses_post($consentInfo),
|
99 |
-
'gdpr_consent_info',
|
100 |
-
[
|
101 |
-
'textarea_rows' => 4,
|
102 |
-
]
|
103 |
-
);
|
104 |
-
?>
|
105 |
-
|
1 |
+
<hr>
|
2 |
+
|
3 |
+
<h3><?= _x('Default consent types', '(Admin)', 'gdpr-framework'); ?></h3>
|
4 |
+
<p><?= _x('These are the consent types that have been automatically registered by the framework or a plugin.', '(Admin)', 'gdpr-framework'); ?></p>
|
5 |
+
<?php if (count($defaultConsentTypes)): ?>
|
6 |
+
<table class="gdpr-consent">
|
7 |
+
<th><?= _x('Slug', '(Admin)', 'gdpr-framework'); ?></th>
|
8 |
+
<th><?= _x('Title', '(Admin)', 'gdpr-framework'); ?></th>
|
9 |
+
<th><?= _x('Description', '(Admin)', 'gdpr-framework'); ?></th>
|
10 |
+
<th><?= _x('Visibility', '(Admin)', 'gdpr-framework'); ?></th>
|
11 |
+
<?php foreach ($defaultConsentTypes as $consentType): ?>
|
12 |
+
<tr>
|
13 |
+
<td class="gdpr-consent-table-input"><?= $consentType['slug']; ?></td>
|
14 |
+
<td class="gdpr-consent-table-input"><?= $consentType['title']; ?></td>
|
15 |
+
<td class="gdpr-consent-table-desc"><?= $consentType['description']; ?></td>
|
16 |
+
<td>
|
17 |
+
<?php if ($consentType['visible']): ?>
|
18 |
+
<?= _x('Visible', '(Admin)', 'gdpr-framework'); ?>
|
19 |
+
<?php else: ?>
|
20 |
+
<?= _x('Hidden', '(Admin)', 'gdpr-framework'); ?>
|
21 |
+
<?php endif; ?>
|
22 |
+
</td>
|
23 |
+
</tr>
|
24 |
+
<?php endforeach; ?>
|
25 |
+
</table>
|
26 |
+
<?php endif; ?>
|
27 |
+
<br>
|
28 |
+
<hr>
|
29 |
+
<h3><?= _x('Custom consent types', '(Admin)', 'gdpr-framework'); ?></h3>
|
30 |
+
<p><?= _x('Here you can add custom consent types to track. They will not be used anywhere by default - you will need to build an integration for each of them.', '(Admin)', 'gdpr-framework'); ?></p>
|
31 |
+
<div class="js-gdpr-repeater" data-name="gdpr_consent_types">
|
32 |
+
<table class="gdpr-consent-admin" data-repeater-list="gdpr_consent_types">
|
33 |
+
<thead>
|
34 |
+
<th>
|
35 |
+
<?= _x('Machine-readable slug', '(Admin)', 'gdpr-framework'); ?>*
|
36 |
+
</th>
|
37 |
+
<th>
|
38 |
+
<?= _x('Title', '(Admin)', 'gdpr-framework'); ?>*
|
39 |
+
</th>
|
40 |
+
<th>
|
41 |
+
<?= _x('Description', '(Admin)', 'gdpr-framework'); ?>
|
42 |
+
</th>
|
43 |
+
<th>
|
44 |
+
<?= _x('Visible?', '(Admin)', 'gdpr-framework'); ?>
|
45 |
+
</th>
|
46 |
+
</thead>
|
47 |
+
<tr data-repeater-item>
|
48 |
+
<td class="gdpr-consent-table-input">
|
49 |
+
<input
|
50 |
+
type="text"
|
51 |
+
name="slug"
|
52 |
+
placeholder="<?= _x('Slug', '(Admin)', 'gdpr-framework'); ?>"
|
53 |
+
pattern="^[A-Za-z0-9_-]+$"
|
54 |
+
oninvalid="setCustomValidity('Please fill in this field using alphanumeric characters, dashes and underscores.')"
|
55 |
+
oninput="setCustomValidity('')"
|
56 |
+
required
|
57 |
+
/>
|
58 |
+
</td>
|
59 |
+
<td class="gdpr-consent-table-input">
|
60 |
+
<input type="text" name="title" placeholder="<?= _x('Title', '(Admin)', 'gdpr-framework'); ?>" required />
|
61 |
+
</td>
|
62 |
+
<td class="gdpr-consent-table-desc">
|
63 |
+
<textarea type="text" name="description" placeholder="<?= _x('Description', '(Admin)', 'gdpr-framework'); ?>"></textarea>
|
64 |
+
</td>
|
65 |
+
<td>
|
66 |
+
<label>
|
67 |
+
<input type="checkbox" name="visible" value="1"/>
|
68 |
+
<?= _x('Visible?', '(Admin)', 'gdpr-framework'); ?>
|
69 |
+
</label>
|
70 |
+
</td>
|
71 |
+
<td>
|
72 |
+
<input data-repeater-delete class="button button-primary" type="button" value="<?= _x('Remove', '(Admin)', 'gdpr-framework'); ?>"/>
|
73 |
+
</td>
|
74 |
+
</tr>
|
75 |
+
|
76 |
+
</table>
|
77 |
+
<div class="gdpr-consent-add-button">
|
78 |
+
<input data-repeater-create class="button button-primary" type="button" value="Add consent type"/>
|
79 |
+
</div>
|
80 |
+
<input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
|
81 |
+
<input type="hidden" name="gdpr_action" value="update_consent_data" />
|
82 |
+
</div>
|
83 |
+
|
84 |
+
<?php if (count($customConsentTypes)): ?>
|
85 |
+
<script>
|
86 |
+
window.repeaterData = [];
|
87 |
+
window.repeaterData['gdpr_consent_types'] = <?= json_encode($customConsentTypes); ?>;
|
88 |
+
</script>
|
89 |
+
<?php endif; ?>
|
90 |
+
|
91 |
+
<br>
|
92 |
+
<hr>
|
93 |
+
<h3><?= _x('Additional info', '(Admin)', 'gdpr-framework'); ?></h3>
|
94 |
+
<p>
|
95 |
+
<?= _x('This text will be displayed to your data subjects on the Privacy Tools page.', '(Admin)', 'gdpr-framework'); ?>
|
96 |
+
</p>
|
97 |
+
<?php wp_editor(
|
98 |
+
wp_kses_post($consentInfo),
|
99 |
+
'gdpr_consent_info',
|
100 |
+
[
|
101 |
+
'textarea_rows' => 4,
|
102 |
+
]
|
103 |
+
);
|
104 |
+
?>
|
105 |
+
|
views/admin/data-subjects/search-form.php
CHANGED
@@ -1,18 +1,18 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x('On this page, you can find which data subjects personal data you are storing and download, export or delete it.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</p>
|
4 |
-
|
5 |
-
<hr>
|
6 |
-
|
7 |
-
<?= $results; ?>
|
8 |
-
|
9 |
-
<label>
|
10 |
-
<h3><?= _x('Find data subject by email', '(Admin)', 'gdpr-framework'); ?></h3>
|
11 |
-
<input type="email" name="gdpr_email" placeholder="<?= _x('Email address', '(Admin)', 'gdpr-framework'); ?>" />
|
12 |
-
</label>
|
13 |
-
|
14 |
-
<input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
|
15 |
-
<input type="hidden" name="gdpr_action" value="search" />
|
16 |
-
<input class="button button-primary" type="submit" value="<?= _x('Search', '(Admin)', 'gdpr-framework'); ?>" />
|
17 |
-
|
18 |
-
<br><br>
|
1 |
+
<p>
|
2 |
+
<?= _x('On this page, you can find which data subjects personal data you are storing and download, export or delete it.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</p>
|
4 |
+
|
5 |
+
<hr>
|
6 |
+
|
7 |
+
<?= $results; ?>
|
8 |
+
|
9 |
+
<label>
|
10 |
+
<h3><?= _x('Find data subject by email', '(Admin)', 'gdpr-framework'); ?></h3>
|
11 |
+
<input type="email" name="gdpr_email" placeholder="<?= _x('Email address', '(Admin)', 'gdpr-framework'); ?>" />
|
12 |
+
</label>
|
13 |
+
|
14 |
+
<input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
|
15 |
+
<input type="hidden" name="gdpr_action" value="search" />
|
16 |
+
<input class="button button-primary" type="submit" value="<?= _x('Search', '(Admin)', 'gdpr-framework'); ?>" />
|
17 |
+
|
18 |
+
<br><br>
|
views/admin/data-subjects/search-results.php
CHANGED
@@ -1,59 +1,59 @@
|
|
1 |
-
<div>
|
2 |
-
<h3>Results for: <?= esc_html($email); ?></h3>
|
3 |
-
<?php if ($hasData): ?>
|
4 |
-
|
5 |
-
<?php if (isset($links['profile'])): ?>
|
6 |
-
<p>
|
7 |
-
<strong><?= _x('Username', '(Admin)', 'gdpr-framework'); ?>:</strong>
|
8 |
-
<a href="<?= $links['profile']; ?>"><?= esc_html($userName); ?></a>
|
9 |
-
</p>
|
10 |
-
<?php else: ?>
|
11 |
-
<p>
|
12 |
-
<em>
|
13 |
-
<?= _x('Data found.', '(Admin)', 'gdpr-framework'); ?>
|
14 |
-
<strong><?= esc_html($email); ?></strong> <?= _x('is not a registered user.', '(Admin)', 'gdpr-framework'); ?>
|
15 |
-
</em>
|
16 |
-
</p>
|
17 |
-
<?php endif; ?>
|
18 |
-
|
19 |
-
<hr>
|
20 |
-
|
21 |
-
<a class="button button-primary" href="<?= esc_url($links['view']); ?>"><?= _x('Download data (html)', '(Admin)', 'gdpr-framework'); ?></a>
|
22 |
-
<a class="button button-primary" href="<?= esc_url($links['export']); ?>"><?= _x('Export data (json)', '(Admin)', 'gdpr-framework'); ?></a>
|
23 |
-
|
24 |
-
<?php if ($adminCap): ?>
|
25 |
-
<p>
|
26 |
-
<strong><?= _x('This user has admin capabilities. Deleting data via this interface is disabled.', '(Admin)', 'gdpr-framework'); ?></strong>
|
27 |
-
</p>
|
28 |
-
<?php else: ?>
|
29 |
-
<a class="button button-primary" href="<?= esc_url($links['anonymize']); ?>"><?= _x('Anonymize data', '(Admin)', 'gdpr-framework'); ?></a>
|
30 |
-
<a class="button button-primary" href="<?= esc_url($links['delete']); ?>"><?= _x('Delete data', '(Admin)', 'gdpr-framework'); ?></a>
|
31 |
-
<?php endif; ?>
|
32 |
-
|
33 |
-
<?php else: ?>
|
34 |
-
<p><?= _x('No data found!', '(Admin)', 'gdpr-framework'); ?></p>
|
35 |
-
<?php endif; ?>
|
36 |
-
|
37 |
-
<hr>
|
38 |
-
|
39 |
-
<?php if (count($consentData)): ?>
|
40 |
-
<table class="gdpr-consent">
|
41 |
-
<th colspan="2"><?= _x('Consents given', '(Admin)', 'gdpr-framework'); ?></th>
|
42 |
-
<?php foreach ($consentData as $item): ?>
|
43 |
-
<tr>
|
44 |
-
<td>
|
45 |
-
✔
|
46 |
-
</td>
|
47 |
-
<td>
|
48 |
-
<?= $item['title']; ?>
|
49 |
-
</td>
|
50 |
-
</tr>
|
51 |
-
<?php endforeach; ?>
|
52 |
-
</table>
|
53 |
-
<?php else: ?>
|
54 |
-
<p><?= _x('No consents given!', '(Admin)', 'gdpr-framework'); ?>.</p>
|
55 |
-
<?php endif; ?>
|
56 |
-
|
57 |
-
</div>
|
58 |
-
<br>
|
59 |
-
<hr>
|
1 |
+
<div>
|
2 |
+
<h3>Results for: <?= esc_html($email); ?></h3>
|
3 |
+
<?php if ($hasData): ?>
|
4 |
+
|
5 |
+
<?php if (isset($links['profile'])): ?>
|
6 |
+
<p>
|
7 |
+
<strong><?= _x('Username', '(Admin)', 'gdpr-framework'); ?>:</strong>
|
8 |
+
<a href="<?= $links['profile']; ?>"><?= esc_html($userName); ?></a>
|
9 |
+
</p>
|
10 |
+
<?php else: ?>
|
11 |
+
<p>
|
12 |
+
<em>
|
13 |
+
<?= _x('Data found.', '(Admin)', 'gdpr-framework'); ?>
|
14 |
+
<strong><?= esc_html($email); ?></strong> <?= _x('is not a registered user.', '(Admin)', 'gdpr-framework'); ?>
|
15 |
+
</em>
|
16 |
+
</p>
|
17 |
+
<?php endif; ?>
|
18 |
+
|
19 |
+
<hr>
|
20 |
+
|
21 |
+
<a class="button button-primary" href="<?= esc_url($links['view']); ?>"><?= _x('Download data (html)', '(Admin)', 'gdpr-framework'); ?></a>
|
22 |
+
<a class="button button-primary" href="<?= esc_url($links['export']); ?>"><?= _x('Export data (json)', '(Admin)', 'gdpr-framework'); ?></a>
|
23 |
+
|
24 |
+
<?php if ($adminCap): ?>
|
25 |
+
<p>
|
26 |
+
<strong><?= _x('This user has admin capabilities. Deleting data via this interface is disabled.', '(Admin)', 'gdpr-framework'); ?></strong>
|
27 |
+
</p>
|
28 |
+
<?php else: ?>
|
29 |
+
<a class="button button-primary" href="<?= esc_url($links['anonymize']); ?>"><?= _x('Anonymize data', '(Admin)', 'gdpr-framework'); ?></a>
|
30 |
+
<a class="button button-primary" href="<?= esc_url($links['delete']); ?>"><?= _x('Delete data', '(Admin)', 'gdpr-framework'); ?></a>
|
31 |
+
<?php endif; ?>
|
32 |
+
|
33 |
+
<?php else: ?>
|
34 |
+
<p><?= _x('No data found!', '(Admin)', 'gdpr-framework'); ?></p>
|
35 |
+
<?php endif; ?>
|
36 |
+
|
37 |
+
<hr>
|
38 |
+
|
39 |
+
<?php if (count($consentData)): ?>
|
40 |
+
<table class="gdpr-consent">
|
41 |
+
<th colspan="2"><?= _x('Consents given', '(Admin)', 'gdpr-framework'); ?></th>
|
42 |
+
<?php foreach ($consentData as $item): ?>
|
43 |
+
<tr>
|
44 |
+
<td>
|
45 |
+
✔
|
46 |
+
</td>
|
47 |
+
<td>
|
48 |
+
<?= $item['title']; ?>
|
49 |
+
</td>
|
50 |
+
</tr>
|
51 |
+
<?php endforeach; ?>
|
52 |
+
</table>
|
53 |
+
<?php else: ?>
|
54 |
+
<p><?= _x('No consents given!', '(Admin)', 'gdpr-framework'); ?>.</p>
|
55 |
+
<?php endif; ?>
|
56 |
+
|
57 |
+
</div>
|
58 |
+
<br>
|
59 |
+
<hr>
|
views/admin/general/delete-action-email.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
-
<input
|
2 |
-
type="email"
|
3 |
-
id="gdpr_delete_action_email"
|
4 |
-
name="gdpr_delete_action_email"
|
5 |
-
placeholder="<?= __('Email address', 'gdpr-framework'); ?>"
|
6 |
-
value="<?= esc_attr($deleteActionEmail); ?>"
|
7 |
-
/>
|
1 |
+
<input
|
2 |
+
type="email"
|
3 |
+
id="gdpr_delete_action_email"
|
4 |
+
name="gdpr_delete_action_email"
|
5 |
+
placeholder="<?= __('Email address', 'gdpr-framework'); ?>"
|
6 |
+
value="<?= esc_attr($deleteActionEmail); ?>"
|
7 |
+
/>
|
views/admin/general/delete-action-reassign.php
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
<select id="gdpr_delete_action_reassign" name="gdpr_delete_action_reassign" class="gdpr-select js-gdpr-conditional">
|
2 |
-
<option value="delete" <?= selected($reassign, 'delete'); ?>>
|
3 |
-
<?= _x('Delete content', '(Admin)', 'gdpr-framework'); ?>
|
4 |
-
</option>
|
5 |
-
<option value="reassign" <?= selected($reassign, 'reassign'); ?> data-show=".js-gdpr-delete-action-reassign-user">
|
6 |
-
<?= _x('Reassign content to a user', '(Admin)', 'gdpr-framework'); ?>
|
7 |
-
</option>
|
8 |
-
</select>
|
9 |
-
<p class="description">
|
10 |
-
<?= _x('If the user has submitted any content on your site, should it be deleted or reassigned to another user?', '(Admin)', 'gdpr-framework'); ?>
|
11 |
-
</p>
|
1 |
+
<select id="gdpr_delete_action_reassign" name="gdpr_delete_action_reassign" class="gdpr-select js-gdpr-conditional">
|
2 |
+
<option value="delete" <?= selected($reassign, 'delete'); ?>>
|
3 |
+
<?= _x('Delete content', '(Admin)', 'gdpr-framework'); ?>
|
4 |
+
</option>
|
5 |
+
<option value="reassign" <?= selected($reassign, 'reassign'); ?> data-show=".js-gdpr-delete-action-reassign-user">
|
6 |
+
<?= _x('Reassign content to a user', '(Admin)', 'gdpr-framework'); ?>
|
7 |
+
</option>
|
8 |
+
</select>
|
9 |
+
<p class="description">
|
10 |
+
<?= _x('If the user has submitted any content on your site, should it be deleted or reassigned to another user?', '(Admin)', 'gdpr-framework'); ?>
|
11 |
+
</p>
|
views/admin/general/delete-action.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<select class="gdpr-select js-gdpr-conditional" name="gdpr_delete_action">
|
2 |
-
<?= gdpr('view')->render('global/delete-action', compact('deleteAction')); ?>
|
3 |
</select>
|
1 |
+
<select class="gdpr-select js-gdpr-conditional" name="gdpr_delete_action">
|
2 |
+
<?= gdpr('view')->render('global/delete-action', compact('deleteAction')); ?>
|
3 |
</select>
|
views/admin/general/description-data-page.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<p class="description">
|
2 |
-
<?= _x('Select the page where users can go to control their data. This page must contain the [gdpr_privacy_tools] shortcode.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</p>
|
1 |
+
<p class="description">
|
2 |
+
<?= _x('Select the page where users can go to control their data. This page must contain the [gdpr_privacy_tools] shortcode.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</p>
|
views/admin/general/description-delete-action.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<p class="description">
|
2 |
-
<?php _ex('What should happen if a data subject requests deleting their data.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</p>
|
1 |
+
<p class="description">
|
2 |
+
<?php _ex('What should happen if a data subject requests deleting their data.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</p>
|
views/admin/general/description-export-action.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<p class="description">
|
2 |
-
<?php _ex('What should happen if a data subject requests viewing or exporting their data.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</p>
|
1 |
+
<p class="description">
|
2 |
+
<?php _ex('What should happen if a data subject requests viewing or exporting their data.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</p>
|
views/admin/general/description-terms-page.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<p class="description">
|
2 |
-
<?php _ex('Optional. Select the page which contains your Terms & Conditions', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</p>
|
1 |
+
<p class="description">
|
2 |
+
<?php _ex('Optional. Select the page which contains your Terms & Conditions', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</p>
|
views/admin/general/enable.php
CHANGED
@@ -1,13 +1,13 @@
|
|
1 |
-
<input
|
2 |
-
type="checkbox"
|
3 |
-
id="gdpr_enable"
|
4 |
-
name="gdpr_enable"
|
5 |
-
value="1"
|
6 |
-
<?= checked($enabled, true); ?>
|
7 |
-
/>
|
8 |
-
<label for="gdpr_enable">
|
9 |
-
<?= _x('Enable the view, export and forget functionality for users and visitors', '(Admin)', 'gdpr-framework'); ?>
|
10 |
-
</label>
|
11 |
-
<p class="description">
|
12 |
-
<?= _x('Enable the Privacy Tools page on front-end and dashboard. This allows visitors to request viewing and deleting their personal data and withdraw consents.', '(Admin)', 'gdpr-framework'); ?>
|
13 |
-
</p>
|
1 |
+
<input
|
2 |
+
type="checkbox"
|
3 |
+
id="gdpr_enable"
|
4 |
+
name="gdpr_enable"
|
5 |
+
value="1"
|
6 |
+
<?= checked($enabled, true); ?>
|
7 |
+
/>
|
8 |
+
<label for="gdpr_enable">
|
9 |
+
<?= _x('Enable the view, export and forget functionality for users and visitors', '(Admin)', 'gdpr-framework'); ?>
|
10 |
+
</label>
|
11 |
+
<p class="description">
|
12 |
+
<?= _x('Enable the Privacy Tools page on front-end and dashboard. This allows visitors to request viewing and deleting their personal data and withdraw consents.', '(Admin)', 'gdpr-framework'); ?>
|
13 |
+
</p>
|
views/admin/general/export-action-email.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
-
<input
|
2 |
-
type="email"
|
3 |
-
id="gdpr_export_action_email"
|
4 |
-
name="gdpr_export_action_email"
|
5 |
-
placeholder="<?= __('Email address', 'gdpr-framework'); ?>"
|
6 |
-
value="<?= esc_attr($exportActionEmail); ?>"
|
7 |
-
/>
|
1 |
+
<input
|
2 |
+
type="email"
|
3 |
+
id="gdpr_export_action_email"
|
4 |
+
name="gdpr_export_action_email"
|
5 |
+
placeholder="<?= __('Email address', 'gdpr-framework'); ?>"
|
6 |
+
value="<?= esc_attr($exportActionEmail); ?>"
|
7 |
+
/>
|
views/admin/general/stylesheet.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<input
|
2 |
-
type="checkbox"
|
3 |
-
id="gdpr_enable_stylesheet"
|
4 |
-
name="gdpr_enable_stylesheet"
|
5 |
-
value="1"
|
6 |
-
<?php echo checked($enabled, true); ?>
|
7 |
-
/>
|
8 |
-
<label for="gdpr_enable_stylesheet">
|
9 |
-
<?php _ex('Enable basic styling for Privacy Tools page.', '(Admin)', 'gdpr-framework'); ?>
|
10 |
-
</label>
|
1 |
+
<input
|
2 |
+
type="checkbox"
|
3 |
+
id="gdpr_enable_stylesheet"
|
4 |
+
name="gdpr_enable_stylesheet"
|
5 |
+
value="1"
|
6 |
+
<?php echo checked($enabled, true); ?>
|
7 |
+
/>
|
8 |
+
<label for="gdpr_enable_stylesheet">
|
9 |
+
<?php _ex('Enable basic styling for Privacy Tools page.', '(Admin)', 'gdpr-framework'); ?>
|
10 |
+
</label>
|
views/admin/general/theme-compatibility.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<input
|
2 |
-
type="checkbox"
|
3 |
-
id="gdpr_enable_theme_compatibility"
|
4 |
-
name="gdpr_enable_theme_compatibility"
|
5 |
-
value="1"
|
6 |
-
<?= checked($enabled, true); ?>
|
7 |
-
/>
|
8 |
-
<label for="gdpr_enable_theme_compatibility">
|
9 |
-
<?= _x('Automatically add Privacy Policy and Privacy Tools links to your site footer.', '(Admin)', 'gdpr-framework'); ?>
|
10 |
-
</label>
|
1 |
+
<input
|
2 |
+
type="checkbox"
|
3 |
+
id="gdpr_enable_theme_compatibility"
|
4 |
+
name="gdpr_enable_theme_compatibility"
|
5 |
+
value="1"
|
6 |
+
<?= checked($enabled, true); ?>
|
7 |
+
/>
|
8 |
+
<label for="gdpr_enable_theme_compatibility">
|
9 |
+
<?= _x('Automatically add Privacy Policy and Privacy Tools links to your site footer.', '(Admin)', 'gdpr-framework'); ?>
|
10 |
+
</label>
|
views/admin/modals/footer.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
-
<div class="gdpr-modal-footer">
|
2 |
-
<a href="#" class="gdpr-close-modal">Close</a>
|
3 |
-
|
|
4 |
-
<a href="#">Get help</a>
|
5 |
-
</div>
|
6 |
-
</div>
|
1 |
+
<div class="gdpr-modal-footer">
|
2 |
+
<a href="#" class="gdpr-close-modal">Close</a>
|
3 |
+
|
|
4 |
+
<a href="#">Get help</a>
|
5 |
+
</div>
|
6 |
+
</div>
|
views/admin/modals/header.php
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
-
<div
|
2 |
-
id="<?= $data['id']; ?>"
|
3 |
-
class="hidden gdpr-modal"
|
4 |
-
data-gdpr-title="<?= isset($data['title']) ? $data['title'] : ''; ?>"
|
5 |
-
>
|
1 |
+
<div
|
2 |
+
id="<?= $data['id']; ?>"
|
3 |
+
class="hidden gdpr-modal"
|
4 |
+
data-gdpr-title="<?= isset($data['title']) ? $data['title'] : ''; ?>"
|
5 |
+
>
|
views/admin/modals/test.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
<h2>Test modal</h2>
|
2 |
-
<p>This is a test modal. It can have any sort of content, for example a bullet list.</p>
|
3 |
-
<ul>
|
4 |
-
<li>Item 1</li>
|
5 |
-
<li>Another item</li>
|
6 |
-
<li>Last item</li>
|
7 |
-
</ul>
|
8 |
-
<p>It should be used for displaying super helpful instructions.</p>
|
1 |
+
<h2>Test modal</h2>
|
2 |
+
<p>This is a test modal. It can have any sort of content, for example a bullet list.</p>
|
3 |
+
<ul>
|
4 |
+
<li>Item 1</li>
|
5 |
+
<li>Another item</li>
|
6 |
+
<li>Last item</li>
|
7 |
+
</ul>
|
8 |
+
<p>It should be used for displaying super helpful instructions.</p>
|
views/admin/notices/disclaimer.php
CHANGED
@@ -1,16 +1,16 @@
|
|
1 |
-
<p>
|
2 |
-
<strong>Disclaimer</strong><br>
|
3 |
-
Using The GDPR Framework does NOT guarantee compliance to GDPR.
|
4 |
-
By using this plugin, you agree to this disclaimer.
|
5 |
-
These templates and guides provided to you are drafted by legal professionals in order for you to understand your obligations better,
|
6 |
-
but they are NOT meant to constitute client-attorney relationship or personalized legal advice.
|
7 |
-
Codelight is not eligible for any claim or action based on any information or functionality provided by this plugin.
|
8 |
-
We expressly disclaim all liability in respect of usage of this plugin.
|
9 |
-
This plugin gives you general information and tools, but is NOT meant to serve as complete compliance package.
|
10 |
-
For compliance audit or further help <a href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>">contact legal professionals</a>.
|
11 |
-
As each business and situation is unique, you might need to modify, add or delete information in these templates.
|
12 |
-
In addition to this, you will need audit all your processing activities for achieving compliance to GDPR.
|
13 |
-
Compliance to GDPR is risk based ongoing process.
|
14 |
-
We are here to get you started.
|
15 |
-
</p>
|
16 |
-
<a class="button button-primary" href="<?= esc_url($acceptUrl); ?>">I accept</a>
|
1 |
+
<p>
|
2 |
+
<strong>Disclaimer</strong><br>
|
3 |
+
Using The GDPR Framework does NOT guarantee compliance to GDPR.
|
4 |
+
By using this plugin, you agree to this disclaimer.
|
5 |
+
These templates and guides provided to you are drafted by legal professionals in order for you to understand your obligations better,
|
6 |
+
but they are NOT meant to constitute client-attorney relationship or personalized legal advice.
|
7 |
+
Codelight is not eligible for any claim or action based on any information or functionality provided by this plugin.
|
8 |
+
We expressly disclaim all liability in respect of usage of this plugin.
|
9 |
+
This plugin gives you general information and tools, but is NOT meant to serve as complete compliance package.
|
10 |
+
For compliance audit or further help <a href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>">contact legal professionals</a>.
|
11 |
+
As each business and situation is unique, you might need to modify, add or delete information in these templates.
|
12 |
+
In addition to this, you will need audit all your processing activities for achieving compliance to GDPR.
|
13 |
+
Compliance to GDPR is risk based ongoing process.
|
14 |
+
We are here to get you started.
|
15 |
+
</p>
|
16 |
+
<a class="button button-primary" href="<?= esc_url($acceptUrl); ?>">I accept</a>
|
views/admin/notices/error.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<div class="notice notice-error">
|
2 |
-
<p><?= $message; ?></p>
|
3 |
-
</div>
|
1 |
+
<div class="notice notice-error">
|
2 |
+
<p><?= $message; ?></p>
|
3 |
+
</div>
|
views/admin/notices/header.php
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<div class="notice notice-gdpr">
|
2 |
-
<img class="gdpr-badge" src="<?= gdpr('config')->get('plugin.url'); ?>assets/gdpr-rhino.svg" />
|
3 |
-
<div class="gdpr-content">
|
4 |
-
<h2><?= _x('The GDPR Framework', '(Admin)', 'gdpr-framework'); ?></h2>
|
1 |
+
<div class="notice notice-gdpr">
|
2 |
+
<img class="gdpr-badge" src="<?= gdpr('config')->get('plugin.url'); ?>assets/gdpr-rhino.svg" />
|
3 |
+
<div class="gdpr-content">
|
4 |
+
<h2><?= _x('The GDPR Framework', '(Admin)', 'gdpr-framework'); ?></h2>
|
views/admin/notices/help.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<p>
|
2 |
-
Need help? Take a look at our <a href="<?= gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/'); ?>" target="_blank">documentation</a>.
|
3 |
-
</p>
|
1 |
+
<p>
|
2 |
+
Need help? Take a look at our <a href="<?= gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/'); ?>" target="_blank">documentation</a>.
|
3 |
+
</p>
|
views/admin/notices/helper-autoinstall.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x('A Privacy Policy page has been created, but it is empty. You can generate a policy template on this page.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</p>
|
4 |
-
<p>
|
5 |
-
<?= _x(
|
6 |
-
sprintf('Read more %shere%s', "<a href='{$helpUrl}'>", "</a>"),
|
7 |
-
'(Admin)',
|
8 |
-
'gdpr-framework'
|
9 |
-
); ?>
|
10 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= _x('A Privacy Policy page has been created, but it is empty. You can generate a policy template on this page.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</p>
|
4 |
+
<p>
|
5 |
+
<?= _x(
|
6 |
+
sprintf('Read more %shere%s', "<a href='{$helpUrl}'>", "</a>"),
|
7 |
+
'(Admin)',
|
8 |
+
'gdpr-framework'
|
9 |
+
); ?>
|
10 |
+
</p>
|
views/admin/notices/helper-policy.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x('Heads up - your Privacy Policy still requires some attention. Find the places marked with [TODO] and replace them with real content!', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</p>
|
4 |
-
<p>
|
5 |
-
<?= _x(
|
6 |
-
sprintf('Read more about editing your Privacy Policy %shere%s', "<a href='{$helpUrl}'>", "</a>"),
|
7 |
-
'(Admin)','gdpr-framework'
|
8 |
-
); ?>
|
9 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= _x('Heads up - your Privacy Policy still requires some attention. Find the places marked with [TODO] and replace them with real content!', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</p>
|
4 |
+
<p>
|
5 |
+
<?= _x(
|
6 |
+
sprintf('Read more about editing your Privacy Policy %shere%s', "<a href='{$helpUrl}'>", "</a>"),
|
7 |
+
'(Admin)','gdpr-framework'
|
8 |
+
); ?>
|
9 |
+
</p>
|
views/admin/notices/helper-settings.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x('Heads up! The GDPR Framework is not properly configured, so it will not work just yet.', '(Admin)', 'gdpr-framework'); ?> <br>
|
3 |
-
<?= sprintf(
|
4 |
-
_x('Go to %sTools > Privacy%s and make sure all fields are filled in.', '(Admin)', 'gdpr-framework'),
|
5 |
-
"<a href='" . gdpr('helpers')->getAdminUrl() . "'>",
|
6 |
-
'</a>'
|
7 |
-
); ?>
|
8 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= _x('Heads up! The GDPR Framework is not properly configured, so it will not work just yet.', '(Admin)', 'gdpr-framework'); ?> <br>
|
3 |
+
<?= sprintf(
|
4 |
+
_x('Go to %sTools > Privacy%s and make sure all fields are filled in.', '(Admin)', 'gdpr-framework'),
|
5 |
+
"<a href='" . gdpr('helpers')->getAdminUrl() . "'>",
|
6 |
+
'</a>'
|
7 |
+
); ?>
|
8 |
+
</p>
|
views/admin/notices/helper-tools.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x('The contents of this page should contain the [gdpr_tools] shortcode.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</p>
|
4 |
-
<p>
|
5 |
-
<?= _x(
|
6 |
-
sprintf('Read more %shere%s', "<a href='{$helpUrl}'>", "</a>"),
|
7 |
-
'(Admin)',
|
8 |
-
'gdpr-framework'
|
9 |
-
); ?>
|
10 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= _x('The contents of this page should contain the [gdpr_tools] shortcode.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</p>
|
4 |
+
<p>
|
5 |
+
<?= _x(
|
6 |
+
sprintf('Read more %shere%s', "<a href='{$helpUrl}'>", "</a>"),
|
7 |
+
'(Admin)',
|
8 |
+
'gdpr-framework'
|
9 |
+
); ?>
|
10 |
+
</p>
|
views/admin/privacy-policy/description-policy-page.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<p class="description">
|
2 |
-
<?= _x('Select the page which will contain your Privacy Policy', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</p>
|
1 |
+
<p class="description">
|
2 |
+
<?= _x('Select the page which will contain your Privacy Policy', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</p>
|
views/admin/privacy-policy/dpa.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<script>
|
2 |
-
window.gdprDpaData = <?= $dpaData; ?>;
|
3 |
</script>
|
1 |
+
<script>
|
2 |
+
window.gdprDpaData = <?= $dpaData; ?>;
|
3 |
</script>
|
views/admin/privacy-policy/generated.php
CHANGED
@@ -1,21 +1,21 @@
|
|
1 |
-
<h3><?= _x('Privacy Policy', '(Admin)', 'gdpr-framework'); ?></h3>
|
2 |
-
<p>
|
3 |
-
<?= _x('Your Privacy Policy has been generated.', '(Admin)', 'gdpr-framework'); ?>
|
4 |
-
<?php if ($policyUrl): ?>
|
5 |
-
<?= __(
|
6 |
-
sprintf(
|
7 |
-
'You can copy and paste it to your %sPrivacy Policy page%s.',
|
8 |
-
"<a href='{$policyUrl}' target='_blank'>",
|
9 |
-
"</a>"
|
10 |
-
),
|
11 |
-
'(Admin)',
|
12 |
-
'gdpr-framework'
|
13 |
-
); ?>
|
14 |
-
<?php endif; ?>
|
15 |
-
</p>
|
16 |
-
|
17 |
-
<?= $editor; ?>
|
18 |
-
|
19 |
-
<br>
|
20 |
-
<a href="<?= $backUrl; ?>" class="button button-secondary"><?= _x('« Back', '(Admin)', 'gdpr-framework'); ?></a>
|
21 |
-
<br><br>
|
1 |
+
<h3><?= _x('Privacy Policy', '(Admin)', 'gdpr-framework'); ?></h3>
|
2 |
+
<p>
|
3 |
+
<?= _x('Your Privacy Policy has been generated.', '(Admin)', 'gdpr-framework'); ?>
|
4 |
+
<?php if ($policyUrl): ?>
|
5 |
+
<?= __(
|
6 |
+
sprintf(
|
7 |
+
'You can copy and paste it to your %sPrivacy Policy page%s.',
|
8 |
+
"<a href='{$policyUrl}' target='_blank'>",
|
9 |
+
"</a>"
|
10 |
+
),
|
11 |
+
'(Admin)',
|
12 |
+
'gdpr-framework'
|
13 |
+
); ?>
|
14 |
+
<?php endif; ?>
|
15 |
+
</p>
|
16 |
+
|
17 |
+
<?= $editor; ?>
|
18 |
+
|
19 |
+
<br>
|
20 |
+
<a href="<?= $backUrl; ?>" class="button button-secondary"><?= _x('« Back', '(Admin)', 'gdpr-framework'); ?></a>
|
21 |
+
<br><br>
|
views/admin/privacy-policy/header.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x('This page allows you to generate a Privacy Policy based on the information you entered below.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= _x('This page allows you to generate a Privacy Policy based on the information you entered below.', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</p>
|
views/admin/settings-page.php
CHANGED
@@ -1,46 +1,48 @@
|
|
1 |
-
<div class="wrap gdpr-framework-wrap">
|
2 |
-
<h2>
|
3 |
-
<?= _x('The GDPR Framework', '(Admin)', 'gdpr-framework'); ?>
|
4 |
-
</h2>
|
5 |
-
|
6 |
-
<?php if (!empty($_GET['updated'])) : ?>
|
7 |
-
<div id="setting-error-settings_updated" class="updated settings-error notice is-dismissible">
|
8 |
-
<p><strong><?php _ex('GDPR settings saved!', '(Admin)', 'gdpr-framework') ?></strong></p>
|
9 |
-
</div>
|
10 |
-
<?php endif; ?>
|
11 |
-
|
12 |
-
<?php if (count($tabs)): ?>
|
13 |
-
<nav class="nav-tab-wrapper">
|
14 |
-
<?php foreach ($tabs as $slug => $tab): ?>
|
15 |
-
<a href="<?= $tab['url']; ?>" class="nav-tab <?= $tab['active'] ? 'nav-tab-active' : ''; ?>">
|
16 |
-
<?= $tab['title'] ?>
|
17 |
-
</a>
|
18 |
-
<?php endforeach; ?>
|
19 |
-
</nav>
|
20 |
-
<?php endif; ?>
|
21 |
-
|
22 |
-
<form action="options.php" method="POST">
|
23 |
-
<?= $currentTabContents; ?>
|
24 |
-
</form>
|
25 |
-
|
26 |
-
<?php if ($signature): ?>
|
27 |
-
<hr>
|
28 |
-
<p>
|
29 |
-
<em>
|
30 |
-
<?= sprintf(
|
31 |
-
_x('The GDPR Framework. Built with ♥ by %sCodelight%s.', '(Admin)', 'gdpr-framework'),
|
32 |
-
'<a href="https://codelight.eu/" target="_blank">',
|
33 |
-
'</a>'
|
34 |
-
); ?>
|
35 |
-
|
36 |
-
|
|
37 |
-
|
38 |
-
<?= sprintf(
|
39 |
-
_x("Support our development efforts
|
40 |
-
'<a href="https://
|
41 |
-
'</a>'
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
</
|
|
|
|
1 |
+
<div class="wrap gdpr-framework-wrap">
|
2 |
+
<h2>
|
3 |
+
<?= _x('The GDPR Framework', '(Admin)', 'gdpr-framework'); ?>
|
4 |
+
</h2>
|
5 |
+
|
6 |
+
<?php if (!empty($_GET['updated'])) : ?>
|
7 |
+
<div id="setting-error-settings_updated" class="updated settings-error notice is-dismissible">
|
8 |
+
<p><strong><?php _ex('GDPR settings saved!', '(Admin)', 'gdpr-framework') ?></strong></p>
|
9 |
+
</div>
|
10 |
+
<?php endif; ?>
|
11 |
+
|
12 |
+
<?php if (count($tabs)): ?>
|
13 |
+
<nav class="nav-tab-wrapper">
|
14 |
+
<?php foreach ($tabs as $slug => $tab): ?>
|
15 |
+
<a href="<?= $tab['url']; ?>" class="nav-tab <?= $tab['active'] ? 'nav-tab-active' : ''; ?>">
|
16 |
+
<?= $tab['title'] ?>
|
17 |
+
</a>
|
18 |
+
<?php endforeach; ?>
|
19 |
+
</nav>
|
20 |
+
<?php endif; ?>
|
21 |
+
|
22 |
+
<form action="options.php" method="POST">
|
23 |
+
<?= $currentTabContents; ?>
|
24 |
+
</form>
|
25 |
+
|
26 |
+
<?php if ($signature): ?>
|
27 |
+
<hr>
|
28 |
+
<p>
|
29 |
+
<em>
|
30 |
+
<?= sprintf(
|
31 |
+
_x('The GDPR Framework. Built with ♥ by %sCodelight%s.', '(Admin)', 'gdpr-framework'),
|
32 |
+
'<a href="https://codelight.eu/" target="_blank">',
|
33 |
+
'</a>'
|
34 |
+
); ?>
|
35 |
+
|
36 |
+
|
|
37 |
+
|
38 |
+
<?= sprintf(
|
39 |
+
_x("Support our development efforts! %sDonate%s or leave a %s5-star rating%s.", '(Admin)', 'gdpr-framework'),
|
40 |
+
'<a href="https://paypal.me/gdprframework" target="_blank">',
|
41 |
+
'</a>',
|
42 |
+
'<a href="https://wordpress.org/plugins/gdpr-framework/#reviews" target="_blank">',
|
43 |
+
'</a>'
|
44 |
+
); ?>
|
45 |
+
</em>
|
46 |
+
</p>
|
47 |
+
<?php endif; ?>
|
48 |
+
</div>
|
views/admin/support/contents.php
CHANGED
@@ -1,62 +1,62 @@
|
|
1 |
-
<hr>
|
2 |
-
|
3 |
-
<section class="section">
|
4 |
-
<h3 class="align-center">
|
5 |
-
<?= _x('Need more info?', '(Admin)', 'gdpr-framework'); ?>
|
6 |
-
</h3>
|
7 |
-
<div class="row">
|
8 |
-
<div class="col">
|
9 |
-
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/1.png');"></div>
|
10 |
-
<a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/'); ?>" target="_blank">
|
11 |
-
<?= _x('Site Owner\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
|
12 |
-
</a>
|
13 |
-
<p>
|
14 |
-
<?= _x('Read the full guide on GDPR compliance.', '(Admin)', 'gdpr-framework'); ?>
|
15 |
-
</p>
|
16 |
-
</div>
|
17 |
-
<div class="col">
|
18 |
-
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/2.png');"></div>
|
19 |
-
<a class="button button-primary" href="<?= gdpr('helpers')->docs('knowledge-base'); ?>" target="_blank">
|
20 |
-
<?= _x('Knowledge base', '(Admin)', 'gdpr-framework'); ?>
|
21 |
-
</a>
|
22 |
-
<p>
|
23 |
-
<?= _x('Check out the knowledge base for common questions and answers.', '(Admin)', 'gdpr-framework'); ?>
|
24 |
-
</p>
|
25 |
-
</div>
|
26 |
-
<div class="col">
|
27 |
-
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/3.png');"></div>
|
28 |
-
<a class="button button-primary" href="<?= gdpr('helpers')->docs('developer-docs'); ?>" target="_blank">
|
29 |
-
<?= _x('Developer\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
|
30 |
-
</a>
|
31 |
-
<p>
|
32 |
-
<?= _x('We have a thorough guide to help making custom sites compliant.', '(Admin)', 'gdpr-framework'); ?>
|
33 |
-
</p>
|
34 |
-
</div>
|
35 |
-
</div>
|
36 |
-
</section>
|
37 |
-
|
38 |
-
<section class="section">
|
39 |
-
<h3 class="align-center">
|
40 |
-
<?= _x('Need help?', '(Admin)', 'gdpr-framework'); ?>
|
41 |
-
</h3>
|
42 |
-
<div class="row">
|
43 |
-
<div class="col">
|
44 |
-
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/4.png');"></div>
|
45 |
-
<a class="button button-primary" href="https://wordpress.org/support/plugin/gdpr-framework" target="_blank">
|
46 |
-
<?= _x('Submit a support request', '(Admin)', 'gdpr-framework'); ?>
|
47 |
-
</a>
|
48 |
-
<p>
|
49 |
-
<?= _x('Found a bug or problem with the plugin? Post in the wordpress.org support forum.', '(Admin)', 'gdpr-framework'); ?>
|
50 |
-
</p>
|
51 |
-
</div>
|
52 |
-
<div class="col">
|
53 |
-
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/5.png');"></div>
|
54 |
-
<a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" target="_blank">
|
55 |
-
<?= _x('Request a consultation', '(Admin)', 'gdpr-framework'); ?>
|
56 |
-
</a>
|
57 |
-
<p>
|
58 |
-
<?= _x('Need development or legal assistance in making your site compliant? We can help!', '(Admin)', 'gdpr-framework'); ?>
|
59 |
-
</p>
|
60 |
-
</div>
|
61 |
-
</div>
|
62 |
-
</section>
|
1 |
+
<hr>
|
2 |
+
|
3 |
+
<section class="section">
|
4 |
+
<h3 class="align-center">
|
5 |
+
<?= _x('Need more info?', '(Admin)', 'gdpr-framework'); ?>
|
6 |
+
</h3>
|
7 |
+
<div class="row">
|
8 |
+
<div class="col">
|
9 |
+
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/1.png');"></div>
|
10 |
+
<a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/'); ?>" target="_blank">
|
11 |
+
<?= _x('Site Owner\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
|
12 |
+
</a>
|
13 |
+
<p>
|
14 |
+
<?= _x('Read the full guide on GDPR compliance.', '(Admin)', 'gdpr-framework'); ?>
|
15 |
+
</p>
|
16 |
+
</div>
|
17 |
+
<div class="col">
|
18 |
+
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/2.png');"></div>
|
19 |
+
<a class="button button-primary" href="<?= gdpr('helpers')->docs('knowledge-base'); ?>" target="_blank">
|
20 |
+
<?= _x('Knowledge base', '(Admin)', 'gdpr-framework'); ?>
|
21 |
+
</a>
|
22 |
+
<p>
|
23 |
+
<?= _x('Check out the knowledge base for common questions and answers.', '(Admin)', 'gdpr-framework'); ?>
|
24 |
+
</p>
|
25 |
+
</div>
|
26 |
+
<div class="col">
|
27 |
+
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/3.png');"></div>
|
28 |
+
<a class="button button-primary" href="<?= gdpr('helpers')->docs('developer-docs'); ?>" target="_blank">
|
29 |
+
<?= _x('Developer\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
|
30 |
+
</a>
|
31 |
+
<p>
|
32 |
+
<?= _x('We have a thorough guide to help making custom sites compliant.', '(Admin)', 'gdpr-framework'); ?>
|
33 |
+
</p>
|
34 |
+
</div>
|
35 |
+
</div>
|
36 |
+
</section>
|
37 |
+
|
38 |
+
<section class="section">
|
39 |
+
<h3 class="align-center">
|
40 |
+
<?= _x('Need help?', '(Admin)', 'gdpr-framework'); ?>
|
41 |
+
</h3>
|
42 |
+
<div class="row">
|
43 |
+
<div class="col">
|
44 |
+
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/4.png');"></div>
|
45 |
+
<a class="button button-primary" href="https://wordpress.org/support/plugin/gdpr-framework" target="_blank">
|
46 |
+
<?= _x('Submit a support request', '(Admin)', 'gdpr-framework'); ?>
|
47 |
+
</a>
|
48 |
+
<p>
|
49 |
+
<?= _x('Found a bug or problem with the plugin? Post in the wordpress.org support forum.', '(Admin)', 'gdpr-framework'); ?>
|
50 |
+
</p>
|
51 |
+
</div>
|
52 |
+
<div class="col">
|
53 |
+
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/5.png');"></div>
|
54 |
+
<a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" target="_blank">
|
55 |
+
<?= _x('Request a consultation', '(Admin)', 'gdpr-framework'); ?>
|
56 |
+
</a>
|
57 |
+
<p>
|
58 |
+
<?= _x('Need development or legal assistance in making your site compliant? We can help!', '(Admin)', 'gdpr-framework'); ?>
|
59 |
+
</p>
|
60 |
+
</div>
|
61 |
+
</div>
|
62 |
+
</section>
|
views/admin/wizard-buttons.php
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
-
<a class="button button-primary" href="<?= esc_url($restartUrl); ?>">
|
2 |
-
<?= _x('Restart setup wizard', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</a>
|
4 |
-
<br><br>
|
5 |
-
<hr>
|
1 |
+
<a class="button button-primary" href="<?= esc_url($restartUrl); ?>">
|
2 |
+
<?= _x('Restart setup wizard', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</a>
|
4 |
+
<br><br>
|
5 |
+
<hr>
|
views/email/action-export.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x(
|
3 |
-
sprintf('A data subject (%s) has just downloaded their data in %s format.', esc_html($email), esc_html($format)),
|
4 |
-
'(Admin)', 'gdpr-framework'
|
5 |
-
); ?>
|
6 |
-
</p>
|
7 |
-
<p>
|
8 |
-
<?= _x('This email is just for your information. You don\'t need to take any action', '(Admin)', 'gdpr-framework'); ?>
|
9 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= _x(
|
3 |
+
sprintf('A data subject (%s) has just downloaded their data in %s format.', esc_html($email), esc_html($format)),
|
4 |
+
'(Admin)', 'gdpr-framework'
|
5 |
+
); ?>
|
6 |
+
</p>
|
7 |
+
<p>
|
8 |
+
<?= _x('This email is just for your information. You don\'t need to take any action', '(Admin)', 'gdpr-framework'); ?>
|
9 |
+
</p>
|
views/email/action-forget.php
CHANGED
@@ -1,13 +1,13 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x(
|
3 |
-
sprintf('A data subject (%s) has just removed all their data from your website.', esc_html($email)),
|
4 |
-
'(Admin)', 'gdpr-framework'
|
5 |
-
); ?> <br><br>
|
6 |
-
|
7 |
-
<?php if ($userId): ?>
|
8 |
-
<?= _x('The data subject had a user account on your website.', '(Admin)', 'gdpr-framework'); ?> (ID: <?= $userId; ?>).
|
9 |
-
<?php endif; ?>
|
10 |
-
</p>
|
11 |
-
<p>
|
12 |
-
<?= _x('This email is just for your information. You don\'t need to take any action', '(Admin)', 'gdpr-framework'); ?>
|
13 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= _x(
|
3 |
+
sprintf('A data subject (%s) has just removed all their data from your website.', esc_html($email)),
|
4 |
+
'(Admin)', 'gdpr-framework'
|
5 |
+
); ?> <br><br>
|
6 |
+
|
7 |
+
<?php if ($userId): ?>
|
8 |
+
<?= _x('The data subject had a user account on your website.', '(Admin)', 'gdpr-framework'); ?> (ID: <?= $userId; ?>).
|
9 |
+
<?php endif; ?>
|
10 |
+
</p>
|
11 |
+
<p>
|
12 |
+
<?= _x('This email is just for your information. You don\'t need to take any action', '(Admin)', 'gdpr-framework'); ?>
|
13 |
+
</p>
|
views/email/identify-data-subject.php
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
<p>
|
2 |
-
<?= __('Someone has requested access to your data on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
|
3 |
-
<?= __('If this was a mistake, just ignore this email and nothing will happen.', 'gdpr-framework'); ?> <br/>
|
4 |
-
<?= __('To manage your data, visit the following address:', 'gdpr-framework'); ?> <br/>
|
5 |
-
<a href="<?= esc_url($identificationUrl); ?>">
|
6 |
-
<?= esc_url($identificationUrl); ?>
|
7 |
-
</a>
|
8 |
-
</p>
|
9 |
-
<p>
|
10 |
-
<?= __('This link is valid for 15 minutes.', 'gdpr-framework'); ?>
|
11 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= __('Someone has requested access to your data on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
|
3 |
+
<?= __('If this was a mistake, just ignore this email and nothing will happen.', 'gdpr-framework'); ?> <br/>
|
4 |
+
<?= __('To manage your data, visit the following address:', 'gdpr-framework'); ?> <br/>
|
5 |
+
<a href="<?= esc_url($identificationUrl); ?>">
|
6 |
+
<?= esc_url($identificationUrl); ?>
|
7 |
+
</a>
|
8 |
+
</p>
|
9 |
+
<p>
|
10 |
+
<?= __('This link is valid for 15 minutes.', 'gdpr-framework'); ?>
|
11 |
+
</p>
|
views/email/no-data.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
-
<p>
|
2 |
-
<?= __('Someone has requested information about your personal data on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
|
3 |
-
<?= __('None of your personal data is stored on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
|
4 |
-
<br/>
|
5 |
-
<?= __('If this was a mistake or you did not request this email, just ignore it and nothing will happen.', 'gdpr-framework'); ?> <br/>
|
6 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= __('Someone has requested information about your personal data on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
|
3 |
+
<?= __('None of your personal data is stored on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
|
4 |
+
<br/>
|
5 |
+
<?= __('If this was a mistake or you did not request this email, just ignore it and nothing will happen.', 'gdpr-framework'); ?> <br/>
|
6 |
+
</p>
|
views/email/request-export.php
CHANGED
@@ -1,14 +1,14 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x(
|
3 |
-
sprintf('A data subject (%s) has requested to download their data in %s format.', esc_html($email), esc_html($format)),
|
4 |
-
'(Admin)', 'gdpr-framework'
|
5 |
-
); ?>
|
6 |
-
<br>
|
7 |
-
<?= _x(
|
8 |
-
sprintf('To access the data subject\'s data, %sclick here%s', "<a href='{$adminTabLink}'>", '</a>'),
|
9 |
-
'(Admin)', 'gdpr-framework'
|
10 |
-
); ?>
|
11 |
-
</p>
|
12 |
-
<p>
|
13 |
-
<?= _x('As a reminder: according to GDPR, you have 30 days to comply.', '(Admin)', 'gdpr-framework'); ?>
|
14 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= _x(
|
3 |
+
sprintf('A data subject (%s) has requested to download their data in %s format.', esc_html($email), esc_html($format)),
|
4 |
+
'(Admin)', 'gdpr-framework'
|
5 |
+
); ?>
|
6 |
+
<br>
|
7 |
+
<?= _x(
|
8 |
+
sprintf('To access the data subject\'s data, %sclick here%s', "<a href='{$adminTabLink}'>", '</a>'),
|
9 |
+
'(Admin)', 'gdpr-framework'
|
10 |
+
); ?>
|
11 |
+
</p>
|
12 |
+
<p>
|
13 |
+
<?= _x('As a reminder: according to GDPR, you have 30 days to comply.', '(Admin)', 'gdpr-framework'); ?>
|
14 |
+
</p>
|
views/email/request-forget.php
CHANGED
@@ -1,14 +1,14 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x(
|
3 |
-
sprintf('A data subject (%s) has requested to remove their data.', esc_html($email)),
|
4 |
-
'(Admin)', 'gdpr-framework'
|
5 |
-
); ?>
|
6 |
-
<br>
|
7 |
-
<?= _x(
|
8 |
-
sprintf('To access the data subject\'s data, %sclick here%s', "<a href='{$adminTabLink}'>", '</a>'),
|
9 |
-
'(Admin)', 'gdpr-framework'
|
10 |
-
); ?>
|
11 |
-
</p>
|
12 |
-
<p>
|
13 |
-
<?= _x('As a reminder: according to GDPR, you have 30 days to comply.', '(Admin)', 'gdpr-framework'); ?>
|
14 |
-
</p>
|
1 |
+
<p>
|
2 |
+
<?= _x(
|
3 |
+
sprintf('A data subject (%s) has requested to remove their data.', esc_html($email)),
|
4 |
+
'(Admin)', 'gdpr-framework'
|
5 |
+
); ?>
|
6 |
+
<br>
|
7 |
+
<?= _x(
|
8 |
+
sprintf('To access the data subject\'s data, %sclick here%s', "<a href='{$adminTabLink}'>", '</a>'),
|
9 |
+
'(Admin)', 'gdpr-framework'
|
10 |
+
); ?>
|
11 |
+
</p>
|
12 |
+
<p>
|
13 |
+
<?= _x('As a reminder: according to GDPR, you have 30 days to comply.', '(Admin)', 'gdpr-framework'); ?>
|
14 |
+
</p>
|
views/global/country-options.php
CHANGED
@@ -1,23 +1,23 @@
|
|
1 |
-
<option disabled>-- Choose --</option>
|
2 |
-
|
3 |
-
<optgroup label="Outside EU">
|
4 |
-
<?php foreach ($outside as $code => $name): ?>
|
5 |
-
<option
|
6 |
-
value="<?= esc_attr($code); ?>"
|
7 |
-
<?= selected($code, $current); ?>
|
8 |
-
<?php if (in_array($code, ['UK', 'US', 'other'])): ?>
|
9 |
-
data-show=".gdpr-representative"
|
10 |
-
<?php endif; ?>
|
11 |
-
>
|
12 |
-
<?= esc_html($name); ?>
|
13 |
-
</option>
|
14 |
-
<?php endforeach; ?>
|
15 |
-
</optgroup>
|
16 |
-
|
17 |
-
<optgroup label="European Union">
|
18 |
-
<?php foreach ($eu as $code => $name): ?>
|
19 |
-
<option value="<?= esc_attr($code); ?>" <?= selected($code, $current); ?>>
|
20 |
-
<?= esc_html($name); ?>
|
21 |
-
</option>
|
22 |
-
<?php endforeach; ?>
|
23 |
-
</optgroup>
|
1 |
+
<option disabled>-- Choose --</option>
|
2 |
+
|
3 |
+
<optgroup label="Outside EU">
|
4 |
+
<?php foreach ($outside as $code => $name): ?>
|
5 |
+
<option
|
6 |
+
value="<?= esc_attr($code); ?>"
|
7 |
+
<?= selected($code, $current); ?>
|
8 |
+
<?php if (in_array($code, ['UK', 'US', 'other'])): ?>
|
9 |
+
data-show=".gdpr-representative"
|
10 |
+
<?php endif; ?>
|
11 |
+
>
|
12 |
+
<?= esc_html($name); ?>
|
13 |
+
</option>
|
14 |
+
<?php endforeach; ?>
|
15 |
+
</optgroup>
|
16 |
+
|
17 |
+
<optgroup label="European Union">
|
18 |
+
<?php foreach ($eu as $code => $name): ?>
|
19 |
+
<option value="<?= esc_attr($code); ?>" <?= selected($code, $current); ?>>
|
20 |
+
<?= esc_html($name); ?>
|
21 |
+
</option>
|
22 |
+
<?php endforeach; ?>
|
23 |
+
</optgroup>
|
views/global/delete-action.php
CHANGED
@@ -1,20 +1,20 @@
|
|
1 |
-
<option value="anonymize" <?= selected($deleteAction, 'anonymize'); ?>>
|
2 |
-
<?= _x('Automatically anonymize data', '(Admin)', 'gdpr-framework') ?>
|
3 |
-
</option>
|
4 |
-
<option value="delete" <?= selected($deleteAction, 'delete'); ?> data-show=".js-gdpr-delete-action-reassign">
|
5 |
-
<?= _x('Automatically delete data', '(Admin)', 'gdpr-framework') ?>
|
6 |
-
</option>
|
7 |
-
<option value="anonymize_and_notify" <?= selected($deleteAction, 'anonymize_and_notify'); ?>
|
8 |
-
data-show=".js-gdpr-delete-action-email">
|
9 |
-
<?= _x('Automatically anonymize data and notify me via email', '(Admin)', 'gdpr-framework') ?>
|
10 |
-
</option>
|
11 |
-
<option value="delete_and_notify" <?= selected($deleteAction, 'delete_and_notify'); ?>
|
12 |
-
data-show=".js-gdpr-delete-action-email, .js-gdpr-delete-action-reassign">
|
13 |
-
<?= _x('Automatically delete data and notify me via email', '(Admin)', 'gdpr-framework') ?>
|
14 |
-
</option>
|
15 |
-
<option value="notify" <?= selected($deleteAction, 'notify'); ?> data-show=".js-gdpr-delete-action-email">
|
16 |
-
<?= _x('Only notify me via email', '(Admin)', 'gdpr-framework') ?>
|
17 |
-
</option>
|
18 |
-
|
19 |
-
|
20 |
-
|
1 |
+
<option value="anonymize" <?= selected($deleteAction, 'anonymize'); ?>>
|
2 |
+
<?= _x('Automatically anonymize data', '(Admin)', 'gdpr-framework') ?>
|
3 |
+
</option>
|
4 |
+
<option value="delete" <?= selected($deleteAction, 'delete'); ?> data-show=".js-gdpr-delete-action-reassign">
|
5 |
+
<?= _x('Automatically delete data', '(Admin)', 'gdpr-framework') ?>
|
6 |
+
</option>
|
7 |
+
<option value="anonymize_and_notify" <?= selected($deleteAction, 'anonymize_and_notify'); ?>
|
8 |
+
data-show=".js-gdpr-delete-action-email">
|
9 |
+
<?= _x('Automatically anonymize data and notify me via email', '(Admin)', 'gdpr-framework') ?>
|
10 |
+
</option>
|
11 |
+
<option value="delete_and_notify" <?= selected($deleteAction, 'delete_and_notify'); ?>
|
12 |
+
data-show=".js-gdpr-delete-action-email, .js-gdpr-delete-action-reassign">
|
13 |
+
<?= _x('Automatically delete data and notify me via email', '(Admin)', 'gdpr-framework') ?>
|
14 |
+
</option>
|
15 |
+
<option value="notify" <?= selected($deleteAction, 'notify'); ?> data-show=".js-gdpr-delete-action-email">
|
16 |
+
<?= _x('Only notify me via email', '(Admin)', 'gdpr-framework') ?>
|
17 |
+
</option>
|
18 |
+
|
19 |
+
|
20 |
+
|
views/global/export-action.php
CHANGED
@@ -1,14 +1,14 @@
|
|
1 |
-
<option value="download" <?= selected($exportAction, 'download'); ?>>
|
2 |
-
<?= _x('Automatically download data', '(Admin)', 'gdpr-framework') ?>
|
3 |
-
</option>
|
4 |
-
<option value="download_and_notify" <?= selected($exportAction, 'download_and_notify'); ?>
|
5 |
-
data-show=".js-gdpr-export-action-email">
|
6 |
-
<?= _x('Automatically download data and notify me via email', '(Admin)', 'gdpr-framework') ?>
|
7 |
-
</option>
|
8 |
-
<option value="notify" <?= selected($exportAction, 'notify'); ?>
|
9 |
-
data-show=".js-gdpr-export-action-email">
|
10 |
-
<?= _x('Only notify me via email', '(Admin)', 'gdpr-framework') ?>
|
11 |
-
</option>
|
12 |
-
|
13 |
-
|
14 |
-
|
1 |
+
<option value="download" <?= selected($exportAction, 'download'); ?>>
|
2 |
+
<?= _x('Automatically download data', '(Admin)', 'gdpr-framework') ?>
|
3 |
+
</option>
|
4 |
+
<option value="download_and_notify" <?= selected($exportAction, 'download_and_notify'); ?>
|
5 |
+
data-show=".js-gdpr-export-action-email">
|
6 |
+
<?= _x('Automatically download data and notify me via email', '(Admin)', 'gdpr-framework') ?>
|
7 |
+
</option>
|
8 |
+
<option value="notify" <?= selected($exportAction, 'notify'); ?>
|
9 |
+
data-show=".js-gdpr-export-action-email">
|
10 |
+
<?= _x('Only notify me via email', '(Admin)', 'gdpr-framework') ?>
|
11 |
+
</option>
|
12 |
+
|
13 |
+
|
14 |
+
|
views/global/html-data.php
CHANGED
@@ -1,39 +1,39 @@
|
|
1 |
-
<!doctype html>
|
2 |
-
<html lang="en-US">
|
3 |
-
<head>
|
4 |
-
<meta charset="UTF-8">
|
5 |
-
<title>Your data</title>
|
6 |
-
|
7 |
-
<style type="text/css">
|
8 |
-
table {
|
9 |
-
font-family: verdana,arial,sans-serif;
|
10 |
-
font-size:11px;
|
11 |
-
color:#333333;
|
12 |
-
border-width: 1px;
|
13 |
-
border-color: #3A3A3A;
|
14 |
-
border-collapse: collapse;
|
15 |
-
}
|
16 |
-
table th {
|
17 |
-
border-width: 1px;
|
18 |
-
padding: 8px;
|
19 |
-
border-style: solid;
|
20 |
-
border-color: #3A3A3A;
|
21 |
-
background-color: #B3B3B3;
|
22 |
-
}
|
23 |
-
table td {
|
24 |
-
border-width: 1px;
|
25 |
-
padding: 8px;
|
26 |
-
border-style: solid;
|
27 |
-
border-color: #3A3A3A;
|
28 |
-
background-color: #ffffff;
|
29 |
-
}
|
30 |
-
|
31 |
-
td.key {
|
32 |
-
font-weight: bold;
|
33 |
-
}
|
34 |
-
</style>
|
35 |
-
</head>
|
36 |
-
<body>
|
37 |
-
<?= $table; ?>
|
38 |
-
</body>
|
39 |
</html>
|
1 |
+
<!doctype html>
|
2 |
+
<html lang="en-US">
|
3 |
+
<head>
|
4 |
+
<meta charset="UTF-8">
|
5 |
+
<title>Your data</title>
|
6 |
+
|
7 |
+
<style type="text/css">
|
8 |
+
table {
|
9 |
+
font-family: verdana,arial,sans-serif;
|
10 |
+
font-size:11px;
|
11 |
+
color:#333333;
|
12 |
+
border-width: 1px;
|
13 |
+
border-color: #3A3A3A;
|
14 |
+
border-collapse: collapse;
|
15 |
+
}
|
16 |
+
table th {
|
17 |
+
border-width: 1px;
|
18 |
+
padding: 8px;
|
19 |
+
border-style: solid;
|
20 |
+
border-color: #3A3A3A;
|
21 |
+
background-color: #B3B3B3;
|
22 |
+
}
|
23 |
+
table td {
|
24 |
+
border-width: 1px;
|
25 |
+
padding: 8px;
|
26 |
+
border-style: solid;
|
27 |
+
border-color: #3A3A3A;
|
28 |
+
background-color: #ffffff;
|
29 |
+
}
|
30 |
+
|
31 |
+
td.key {
|
32 |
+
font-weight: bold;
|
33 |
+
}
|
34 |
+
</style>
|
35 |
+
</head>
|
36 |
+
<body>
|
37 |
+
<?= $table; ?>
|
38 |
+
</body>
|
39 |
</html>
|
views/installer/continue-notice.php
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
<p>
|
2 |
-
<?= _x('The The GDPR Framework setup has not been finalized yet.', '(Admin)', 'gdpr-framework'); ?> <br>
|
3 |
-
<?= _x('You can continue the setup at any time.', '(Admin)', 'gdpr-framework'); ?>
|
4 |
-
</p>
|
5 |
-
<a class="button button-primary" href="<?= $buttonUrl; ?>">
|
6 |
-
<?= _x('Continue the setup wizard', '(Admin)', 'gdpr-framework'); ?>
|
7 |
-
</a>
|
8 |
-
<a class="button button-secondary" href="<?= $skipUrl; ?>">
|
9 |
-
<?= _x('Hide this message', '(Admin)', 'gdpr-framework'); ?>
|
10 |
-
</a>
|
1 |
+
<p>
|
2 |
+
<?= _x('The The GDPR Framework setup has not been finalized yet.', '(Admin)', 'gdpr-framework'); ?> <br>
|
3 |
+
<?= _x('You can continue the setup at any time.', '(Admin)', 'gdpr-framework'); ?>
|
4 |
+
</p>
|
5 |
+
<a class="button button-primary" href="<?= $buttonUrl; ?>">
|
6 |
+
<?= _x('Continue the setup wizard', '(Admin)', 'gdpr-framework'); ?>
|
7 |
+
</a>
|
8 |
+
<a class="button button-secondary" href="<?= $skipUrl; ?>">
|
9 |
+
<?= _x('Hide this message', '(Admin)', 'gdpr-framework'); ?>
|
10 |
+
</a>
|
views/installer/footer.php
CHANGED
@@ -1,41 +1,41 @@
|
|
1 |
-
<!-- Close the installer form -->
|
2 |
-
</form>
|
3 |
-
|
4 |
-
<?php if (!isset($disableBackButton) or !$disableBackButton): ?>
|
5 |
-
<form method="POST">
|
6 |
-
<input type="hidden" name="gdpr-installer" value="previous" />
|
7 |
-
<input type="submit" class="button button-secondary gdpr-step-button gdpr-step-button-prev" value="« <?= __('Back'); ?>">
|
8 |
-
</form>
|
9 |
-
<?php endif; ?>
|
10 |
-
|
11 |
-
</div> <!-- .gdpr-content -->
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
<!--
|
16 |
-
<div class="gdpr-sticky">
|
17 |
-
<hr>
|
18 |
-
<a class="button button-primary" href="#">I need help</a>
|
19 |
-
</div>
|
20 |
-
-->
|
21 |
-
|
22 |
-
</div> <!-- .container -->
|
23 |
-
|
24 |
-
<div class="gdpr-footer-links">
|
25 |
-
<p>
|
26 |
-
You can always leave and continue the setup later from where you left off
|
27 |
-
</p>
|
28 |
-
<a class="button button-secondary" href="<?= admin_url(); ?>">
|
29 |
-
Go to Dashboard
|
30 |
-
</a>
|
31 |
-
</div>
|
32 |
-
|
33 |
-
<?php wp_print_scripts([
|
34 |
-
'gdpr-installer',
|
35 |
-
'jquery-repeater',
|
36 |
-
'select2',
|
37 |
-
'conditional-show'
|
38 |
-
]); ?>
|
39 |
-
<?php do_action('admin_print_footer_scripts'); ?>
|
40 |
-
</body>
|
41 |
-
</html>
|
1 |
+
<!-- Close the installer form -->
|
2 |
+
</form>
|
3 |
+
|
4 |
+
<?php if (!isset($disableBackButton) or !$disableBackButton): ?>
|
5 |
+
<form method="POST">
|
6 |
+
<input type="hidden" name="gdpr-installer" value="previous" />
|
7 |
+
<input type="submit" class="button button-secondary gdpr-step-button gdpr-step-button-prev" value="« <?= __('Back'); ?>">
|
8 |
+
</form>
|
9 |
+
<?php endif; ?>
|
10 |
+
|
11 |
+
</div> <!-- .gdpr-content -->
|
12 |
+
|
13 |
+
|
14 |
+
|
15 |
+
<!--
|
16 |
+
<div class="gdpr-sticky">
|
17 |
+
<hr>
|
18 |
+
<a class="button button-primary" href="#">I need help</a>
|
19 |
+
</div>
|
20 |
+
-->
|
21 |
+
|
22 |
+
</div> <!-- .container -->
|
23 |
+
|
24 |
+
<div class="gdpr-footer-links">
|
25 |
+
<p>
|
26 |
+
You can always leave and continue the setup later from where you left off
|
27 |
+
</p>
|
28 |
+
<a class="button button-secondary" href="<?= admin_url(); ?>">
|
29 |
+
Go to Dashboard
|
30 |
+
</a>
|
31 |
+
</div>
|
32 |
+
|
33 |
+
<?php wp_print_scripts([
|
34 |
+
'gdpr-installer',
|
35 |
+
'jquery-repeater',
|
36 |
+
'select2',
|
37 |
+
'conditional-show'
|
38 |
+
]); ?>
|
39 |
+
<?php do_action('admin_print_footer_scripts'); ?>
|
40 |
+
</body>
|
41 |
+
</html>
|
views/installer/header.php
CHANGED
@@ -1,64 +1,64 @@
|
|
1 |
-
<!DOCTYPE html>
|
2 |
-
<html <?php language_attributes(); ?>>
|
3 |
-
<head>
|
4 |
-
<meta name="viewport" content="width=device-width" />
|
5 |
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
6 |
-
<title>
|
7 |
-
<?php echo esc_html_x( 'WordPress GDPR › Setup Wizard', '(Admin)', 'gdpr-framework' ); ?>
|
8 |
-
</title>
|
9 |
-
<?php wp_print_scripts(['jquery']); ?>
|
10 |
-
<?php do_action('admin_print_styles'); ?>
|
11 |
-
<?php do_action('admin_head'); ?>
|
12 |
-
</head>
|
13 |
-
|
14 |
-
<body class="gdpr-installer wp-core-ui">
|
15 |
-
|
16 |
-
<div class="container gdpr-installer-container">
|
17 |
-
<div class="gdpr-header">
|
18 |
-
<div class="gdpr-header_left">
|
19 |
-
<img class="gdpr-logo" src="<?= gdpr('config')->get('plugin.url'); ?>/assets/gdpr-rhino.svg" />
|
20 |
-
</div>
|
21 |
-
<div class="gdpr-header_right">
|
22 |
-
<h1>
|
23 |
-
<?= _x('The GDPR Framework', '(Admin)', 'gdpr-framework'); ?>
|
24 |
-
</h1>
|
25 |
-
<a href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" class="button button-secondary button-side" target="_blank">
|
26 |
-
<?= _x('I need help', '(Admin)', 'gdpr-framework'); ?>
|
27 |
-
</a>
|
28 |
-
<a href="<?= gdpr('helpers')->docs('developer-docs'); ?>" class="button button-secondary button-side" target="_blank">
|
29 |
-
<?= _x('Developer Docs', '(Admin)', 'gdpr-framework'); ?>
|
30 |
-
</a>
|
31 |
-
</div>
|
32 |
-
</div>
|
33 |
-
<div class="gdpr-breadcrumbs">
|
34 |
-
<div class="gdpr-breadcrumbs_unit <?= $activeSteps > 0 ? 'active' : ''; ?>">
|
35 |
-
<div class="gdpr-breadcrumbs_item">
|
36 |
-
<?= _x('Configuration', '(Admin)', 'gdpr-framework'); ?>
|
37 |
-
</div>
|
38 |
-
</div>
|
39 |
-
<div class="gdpr-breadcrumbs_unit <?= $activeSteps > 1 ? 'active' : ''; ?>">
|
40 |
-
<div class="gdpr-breadcrumbs_item">
|
41 |
-
<?= _x('Privacy Policy', '(Admin)', 'gdpr-framework'); ?>
|
42 |
-
</div>
|
43 |
-
</div>
|
44 |
-
<div class="gdpr-breadcrumbs_unit <?= $activeSteps > 2 ? 'active' : ''; ?>">
|
45 |
-
<div class="gdpr-breadcrumbs_item">
|
46 |
-
<?= _x('Forms & Consent', '(Admin)', 'gdpr-framework'); ?>
|
47 |
-
</div>
|
48 |
-
</div>
|
49 |
-
<div class="gdpr-breadcrumbs_unit <?= $activeSteps > 3 ? 'active' : ''; ?>">
|
50 |
-
<div class="gdpr-breadcrumbs_item">
|
51 |
-
<?= _x('Integrations', '(Admin)', 'gdpr-framework'); ?>
|
52 |
-
</div>
|
53 |
-
</div>
|
54 |
-
</div>
|
55 |
-
|
56 |
-
<div class="gdpr-content">
|
57 |
-
|
58 |
-
<?php if (isset($_GET['gdpr-error'])): ?>
|
59 |
-
<p class="error">Failed to validate nonce! Please reload page and try again.</p>
|
60 |
-
<?php endif; ?>
|
61 |
-
|
62 |
-
<!-- Open the installer form -->
|
63 |
-
<form method="POST">
|
64 |
-
<input type="hidden" name="gdpr-installer" value="next" />
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html <?php language_attributes(); ?>>
|
3 |
+
<head>
|
4 |
+
<meta name="viewport" content="width=device-width" />
|
5 |
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
6 |
+
<title>
|
7 |
+
<?php echo esc_html_x( 'WordPress GDPR › Setup Wizard', '(Admin)', 'gdpr-framework' ); ?>
|
8 |
+
</title>
|
9 |
+
<?php wp_print_scripts(['jquery']); ?>
|
10 |
+
<?php do_action('admin_print_styles'); ?>
|
11 |
+
<?php do_action('admin_head'); ?>
|
12 |
+
</head>
|
13 |
+
|
14 |
+
<body class="gdpr-installer wp-core-ui">
|
15 |
+
|
16 |
+
<div class="container gdpr-installer-container">
|
17 |
+
<div class="gdpr-header">
|
18 |
+
<div class="gdpr-header_left">
|
19 |
+
<img class="gdpr-logo" src="<?= gdpr('config')->get('plugin.url'); ?>/assets/gdpr-rhino.svg" />
|
20 |
+
</div>
|
21 |
+
<div class="gdpr-header_right">
|
22 |
+
<h1>
|
23 |
+
<?= _x('The GDPR Framework', '(Admin)', 'gdpr-framework'); ?>
|
24 |
+
</h1>
|
25 |
+
<a href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" class="button button-secondary button-side" target="_blank">
|
26 |
+
<?= _x('I need help', '(Admin)', 'gdpr-framework'); ?>
|
27 |
+
</a>
|
28 |
+
<a href="<?= gdpr('helpers')->docs('developer-docs'); ?>" class="button button-secondary button-side" target="_blank">
|
29 |
+
<?= _x('Developer Docs', '(Admin)', 'gdpr-framework'); ?>
|
30 |
+
</a>
|
31 |
+
</div>
|
32 |
+
</div>
|
33 |
+
<div class="gdpr-breadcrumbs">
|
34 |
+
<div class="gdpr-breadcrumbs_unit <?= $activeSteps > 0 ? 'active' : ''; ?>">
|
35 |
+
<div class="gdpr-breadcrumbs_item">
|
36 |
+
<?= _x('Configuration', '(Admin)', 'gdpr-framework'); ?>
|
37 |
+
</div>
|
38 |
+
</div>
|
39 |
+
<div class="gdpr-breadcrumbs_unit <?= $activeSteps > 1 ? 'active' : ''; ?>">
|
40 |
+
<div class="gdpr-breadcrumbs_item">
|
41 |
+
<?= _x('Privacy Policy', '(Admin)', 'gdpr-framework'); ?>
|
42 |
+
</div>
|
43 |
+
</div>
|
44 |
+
<div class="gdpr-breadcrumbs_unit <?= $activeSteps > 2 ? 'active' : ''; ?>">
|
45 |
+
<div class="gdpr-breadcrumbs_item">
|
46 |
+
<?= _x('Forms & Consent', '(Admin)', 'gdpr-framework'); ?>
|
47 |
+
</div>
|
48 |
+
</div>
|
49 |
+
<div class="gdpr-breadcrumbs_unit <?= $activeSteps > 3 ? 'active' : ''; ?>">
|
50 |
+
<div class="gdpr-breadcrumbs_item">
|
51 |
+
<?= _x('Integrations', '(Admin)', 'gdpr-framework'); ?>
|
52 |
+
</div>
|
53 |
+
</div>
|
54 |
+
</div>
|
55 |
+
|
56 |
+
<div class="gdpr-content">
|
57 |
+
|
58 |
+
<?php if (isset($_GET['gdpr-error'])): ?>
|
59 |
+
<p class="error">Failed to validate nonce! Please reload page and try again.</p>
|
60 |
+
<?php endif; ?>
|
61 |
+
|
62 |
+
<!-- Open the installer form -->
|
63 |
+
<form method="POST">
|
64 |
+
<input type="hidden" name="gdpr-installer" value="next" />
|
views/installer/steps/configuration-pages.php
CHANGED
@@ -1,44 +1,44 @@
|
|
1 |
-
<h1>
|
2 |
-
Configuration (1/2)
|
3 |
-
</h1>
|
4 |
-
|
5 |
-
<h2>Plugin settings</h2>
|
6 |
-
<p>In WordPress admin, there is now a new page under the Tools menu item called "Privacy." Once you've finished the wizard, you can modify the plugin settings there.</p>
|
7 |
-
<div>
|
8 |
-
<img src="<?= gdpr('config')->get('plugin.url') . 'assets/menu.jpg'; ?>" />
|
9 |
-
</div>
|
10 |
-
|
11 |
-
|
12 |
-
<h2>Privacy Tools page</h2>
|
13 |
-
<p>
|
14 |
-
The first major requirement of GDPR is that your customers need to be in control of their data. They have the
|
15 |
-
right to view, edit and request deleting their <a href="<?= gdpr('helpers')->docs('guide/wordpress-gdpr-definitions-you-need-to-know/#personal-data'); ?>" target="_blank">personal data</a>. Note that this also
|
16 |
-
applies to visitors who do not have accounts on your website.
|
17 |
-
</p>
|
18 |
-
<p>
|
19 |
-
For this, we will designate a page where customers will be able to authenticate via login or email and automatically do all of the above.
|
20 |
-
<a href="<?= gdpr('helpers')->docs('guide/privacy-tools-page-accessing-exporting-and-deleting-personal-data/'); ?>" target="_blank">Read more about the Privacy Tools page</a>
|
21 |
-
</p>
|
22 |
-
<hr>
|
23 |
-
|
24 |
-
<h4>Set up the Privacy Tools page</h4>
|
25 |
-
<fieldset>
|
26 |
-
<label>
|
27 |
-
<input type="radio" name="gdpr_create_tools_page" value="yes" class="js-gdpr-conditional" <?= !$privacyToolsPage ? 'checked': ''; ?>>
|
28 |
-
Automatically create a new page for Privacy Tools
|
29 |
-
</label>
|
30 |
-
|
31 |
-
<label>
|
32 |
-
<input type="radio" name="gdpr_create_tools_page" value="no" class="js-gdpr-conditional" data-show=".gdpr-select-privacy-tools-page" <?= $privacyToolsPage ? 'checked': ''; ?>> Select an existing page
|
33 |
-
</label>
|
34 |
-
</fieldset>
|
35 |
-
|
36 |
-
<p class="gdpr-select-privacy-tools-page hidden">
|
37 |
-
<label for="gdpr_tools_page">Select the page for Privacy Tools</label>
|
38 |
-
<?= $privacyToolsPageSelector; ?>
|
39 |
-
<strong>Important:</strong> Make sure that the page contains the <strong>[gdpr_privacy_tools]</strong> shortcode.
|
40 |
-
</p>
|
41 |
-
|
42 |
-
<hr>
|
43 |
-
<br>
|
44 |
-
<input type="submit" class="button button-gdpr button-right" value="Save »"/>
|
1 |
+
<h1>
|
2 |
+
Configuration (1/2)
|
3 |
+
</h1>
|
4 |
+
|
5 |
+
<h2>Plugin settings</h2>
|
6 |
+
<p>In WordPress admin, there is now a new page under the Tools menu item called "Privacy." Once you've finished the wizard, you can modify the plugin settings there.</p>
|
7 |
+
<div>
|
8 |
+
<img src="<?= gdpr('config')->get('plugin.url') . 'assets/menu.jpg'; ?>" />
|
9 |
+
</div>
|
10 |
+
|
11 |
+
|
12 |
+
<h2>Privacy Tools page</h2>
|
13 |
+
<p>
|
14 |
+
The first major requirement of GDPR is that your customers need to be in control of their data. They have the
|
15 |
+
right to view, edit and request deleting their <a href="<?= gdpr('helpers')->docs('guide/wordpress-gdpr-definitions-you-need-to-know/#personal-data'); ?>" target="_blank">personal data</a>. Note that this also
|
16 |
+
applies to visitors who do not have accounts on your website.
|
17 |
+
</p>
|
18 |
+
<p>
|
19 |
+
For this, we will designate a page where customers will be able to authenticate via login or email and automatically do all of the above.
|
20 |
+
<a href="<?= gdpr('helpers')->docs('guide/privacy-tools-page-accessing-exporting-and-deleting-personal-data/'); ?>" target="_blank">Read more about the Privacy Tools page</a>
|
21 |
+
</p>
|
22 |
+
<hr>
|
23 |
+
|
24 |
+
<h4>Set up the Privacy Tools page</h4>
|
25 |
+
<fieldset>
|
26 |
+
<label>
|
27 |
+
<input type="radio" name="gdpr_create_tools_page" value="yes" class="js-gdpr-conditional" <?= !$privacyToolsPage ? 'checked': ''; ?>>
|
28 |
+
Automatically create a new page for Privacy Tools
|
29 |
+
</label>
|
30 |
+
|
31 |
+
<label>
|
32 |
+
<input type="radio" name="gdpr_create_tools_page" value="no" class="js-gdpr-conditional" data-show=".gdpr-select-privacy-tools-page" <?= $privacyToolsPage ? 'checked': ''; ?>> Select an existing page
|
33 |
+
</label>
|
34 |
+
</fieldset>
|
35 |
+
|
36 |
+
<p class="gdpr-select-privacy-tools-page hidden">
|
37 |
+
<label for="gdpr_tools_page">Select the page for Privacy Tools</label>
|
38 |
+
<?= $privacyToolsPageSelector; ?>
|
39 |
+
<strong>Important:</strong> Make sure that the page contains the <strong>[gdpr_privacy_tools]</strong> shortcode.
|
40 |
+
</p>
|
41 |
+
|
42 |
+
<hr>
|
43 |
+
<br>
|
44 |
+
<input type="submit" class="button button-gdpr button-right" value="Save »"/>
|
views/installer/steps/configuration-settings.php
CHANGED
@@ -1,87 +1,87 @@
|
|
1 |
-
<h1>
|
2 |
-
Configuration (2/2)
|
3 |
-
</h1>
|
4 |
-
<h2>✔ Privacy Tools page configured!</h2>
|
5 |
-
<p>
|
6 |
-
You can take a look at the Privacy Tools page <a href="<?= $privacyToolsPageUrl; ?>" target="_blank">here</a>. <br>
|
7 |
-
<br>
|
8 |
-
<a href="<?= gdpr('helpers')->docs('guide/privacy-tools-page-accessing-exporting-and-deleting-personal-data/'); ?>" target="_blank">Read more about the Privacy Tools page</a>
|
9 |
-
</p>
|
10 |
-
<hr>
|
11 |
-
|
12 |
-
<h2>Right to view & export data</h2>
|
13 |
-
<p>
|
14 |
-
Your customers have the right to review and export their personal data.
|
15 |
-
|
16 |
-
<label for="gdpr_export_action">Select what happens if a customer wishes to view or export their personal data</label>
|
17 |
-
|
18 |
-
<select class="gdpr-select js-gdpr-conditional" name="gdpr_export_action">
|
19 |
-
<?= gdpr('view')->render('global/export-action', compact('exportAction')); ?>
|
20 |
-
</select>
|
21 |
-
<span class="hidden js-gdpr-export-action-email">
|
22 |
-
<label for="export_action_email">
|
23 |
-
<?= _x('Enter the email address to notify', '(Admin)', 'gdpr-framework'); ?>
|
24 |
-
</label>
|
25 |
-
<input
|
26 |
-
type="email"
|
27 |
-
id="gdpr_export_action_email"
|
28 |
-
name="gdpr_export_action_email"
|
29 |
-
placeholder="<?= __('Email address', 'gdpr-framework'); ?>"
|
30 |
-
value="<?= esc_attr($exportActionEmail); ?>"
|
31 |
-
/>
|
32 |
-
</span>
|
33 |
-
</p>
|
34 |
-
<hr>
|
35 |
-
|
36 |
-
<h2>Right to be forgotten</h2>
|
37 |
-
<p>
|
38 |
-
Your customers have the right to request deleting their personal data.
|
39 |
-
|
40 |
-
<label for="gdpr_delete_action">Select what happens if a customer wishes to delete their personal data</label>
|
41 |
-
|
42 |
-
<select class="gdpr-select js-gdpr-conditional" name="gdpr_delete_action">
|
43 |
-
<?= gdpr('view')->render('global/delete-action', compact('deleteAction')); ?>
|
44 |
-
</select>
|
45 |
-
|
46 |
-
<span class="hidden js-gdpr-delete-action-reassign">
|
47 |
-
<label for="gdpr_delete_action_reassign">If the user has created any content (posts or pages), should it be deleted or reassigned?</label>
|
48 |
-
<select id="gdpr_delete_action_reassign" name="gdpr_delete_action_reassign" class="gdpr-select js-gdpr-conditional">
|
49 |
-
<option value="delete" <?= selected($reassign, 'delete'); ?>>
|
50 |
-
<?= _x('Delete content', '(Admin)', 'gdpr-framework'); ?>
|
51 |
-
</option>
|
52 |
-
<option value="reassign" <?= selected($reassign, 'reassign'); ?> data-show=".js-gdpr-delete-action-reassign-user">
|
53 |
-
<?= _x('Reassign content to a user', '(Admin)', 'gdpr-framework'); ?>
|
54 |
-
</option>
|
55 |
-
</select>
|
56 |
-
</span>
|
57 |
-
|
58 |
-
<span class="hidden js-gdpr-delete-action-reassign-user">
|
59 |
-
<label for="gdpr_delete_action_reassign_user">Select the user to reassign content to</label>
|
60 |
-
<?php wp_dropdown_users([
|
61 |
-
'name' => 'gdpr_delete_action_reassign_user',
|
62 |
-
'show_option_none' => _x('— Select —', '(Admin)', 'gdpr-framework'),
|
63 |
-
'option_none_value' => '0',
|
64 |
-
'selected' => $reassignUser,
|
65 |
-
'class' => 'js-gdpr-select2 gdpr-select',
|
66 |
-
'id' => 'gdpr_delete_action_reassign_user',
|
67 |
-
'role__in' => apply_filters('gdpr/options/reassign/roles', ['administrator', 'editor']),
|
68 |
-
]); ?>
|
69 |
-
</span>
|
70 |
-
|
71 |
-
<span class="hidden js-gdpr-delete-action-email">
|
72 |
-
<label for="delete_action_email">
|
73 |
-
<?= _x('Enter the email address to notify', '(Admin)', 'gdpr-framework'); ?>
|
74 |
-
</label>
|
75 |
-
<input
|
76 |
-
type="email"
|
77 |
-
id="gdpr_delete_action_email"
|
78 |
-
name="gdpr_delete_action_email"
|
79 |
-
placeholder="<?= __('Email address', 'gdpr-framework'); ?>"
|
80 |
-
value="<?= esc_attr($deleteActionEmail); ?>"
|
81 |
-
/>
|
82 |
-
</span>
|
83 |
-
</p>
|
84 |
-
|
85 |
-
<hr>
|
86 |
-
<br>
|
87 |
-
<input type="submit" class="button button-gdpr button-right" value="Save »"/>
|
1 |
+
<h1>
|
2 |
+
Configuration (2/2)
|
3 |
+
</h1>
|
4 |
+
<h2>✔ Privacy Tools page configured!</h2>
|
5 |
+
<p>
|
6 |
+
You can take a look at the Privacy Tools page <a href="<?= $privacyToolsPageUrl; ?>" target="_blank">here</a>. <br>
|
7 |
+
<br>
|
8 |
+
<a href="<?= gdpr('helpers')->docs('guide/privacy-tools-page-accessing-exporting-and-deleting-personal-data/'); ?>" target="_blank">Read more about the Privacy Tools page</a>
|
9 |
+
</p>
|
10 |
+
<hr>
|
11 |
+
|
12 |
+
<h2>Right to view & export data</h2>
|
13 |
+
<p>
|
14 |
+
Your customers have the right to review and export their personal data.
|
15 |
+
|
16 |
+
<label for="gdpr_export_action">Select what happens if a customer wishes to view or export their personal data</label>
|
17 |
+
|
18 |
+
<select class="gdpr-select js-gdpr-conditional" name="gdpr_export_action">
|
19 |
+
<?= gdpr('view')->render('global/export-action', compact('exportAction')); ?>
|
20 |
+
</select>
|
21 |
+
<span class="hidden js-gdpr-export-action-email">
|
22 |
+
<label for="export_action_email">
|
23 |
+
<?= _x('Enter the email address to notify', '(Admin)', 'gdpr-framework'); ?>
|
24 |
+
</label>
|
25 |
+
<input
|
26 |
+
type="email"
|
27 |
+
id="gdpr_export_action_email"
|
28 |
+
name="gdpr_export_action_email"
|
29 |
+
placeholder="<?= __('Email address', 'gdpr-framework'); ?>"
|
30 |
+
value="<?= esc_attr($exportActionEmail); ?>"
|
31 |
+
/>
|
32 |
+
</span>
|
33 |
+
</p>
|
34 |
+
<hr>
|
35 |
+
|
36 |
+
<h2>Right to be forgotten</h2>
|
37 |
+
<p>
|
38 |
+
Your customers have the right to request deleting their personal data.
|
39 |
+
|
40 |
+
<label for="gdpr_delete_action">Select what happens if a customer wishes to delete their personal data</label>
|
41 |
+
|
42 |
+
<select class="gdpr-select js-gdpr-conditional" name="gdpr_delete_action">
|
43 |
+
<?= gdpr('view')->render('global/delete-action', compact('deleteAction')); ?>
|
44 |
+
</select>
|
45 |
+
|
46 |
+
<span class="hidden js-gdpr-delete-action-reassign">
|
47 |
+
<label for="gdpr_delete_action_reassign">If the user has created any content (posts or pages), should it be deleted or reassigned?</label>
|
48 |
+
<select id="gdpr_delete_action_reassign" name="gdpr_delete_action_reassign" class="gdpr-select js-gdpr-conditional">
|
49 |
+
<option value="delete" <?= selected($reassign, 'delete'); ?>>
|
50 |
+
<?= _x('Delete content', '(Admin)', 'gdpr-framework'); ?>
|
51 |
+
</option>
|
52 |
+
<option value="reassign" <?= selected($reassign, 'reassign'); ?> data-show=".js-gdpr-delete-action-reassign-user">
|
53 |
+
<?= _x('Reassign content to a user', '(Admin)', 'gdpr-framework'); ?>
|
54 |
+
</option>
|
55 |
+
</select>
|
56 |
+
</span>
|
57 |
+
|
58 |
+
<span class="hidden js-gdpr-delete-action-reassign-user">
|
59 |
+
<label for="gdpr_delete_action_reassign_user">Select the user to reassign content to</label>
|
60 |
+
<?php wp_dropdown_users([
|
61 |
+
'name' => 'gdpr_delete_action_reassign_user',
|
62 |
+
'show_option_none' => _x('— Select —', '(Admin)', 'gdpr-framework'),
|
63 |
+
'option_none_value' => '0',
|
64 |
+
'selected' => $reassignUser,
|
65 |
+
'class' => 'js-gdpr-select2 gdpr-select',
|
66 |
+
'id' => 'gdpr_delete_action_reassign_user',
|
67 |
+
'role__in' => apply_filters('gdpr/options/reassign/roles', ['administrator', 'editor']),
|
68 |
+
]); ?>
|
69 |
+
</span>
|
70 |
+
|
71 |
+
<span class="hidden js-gdpr-delete-action-email">
|
72 |
+
<label for="delete_action_email">
|
73 |
+
<?= _x('Enter the email address to notify', '(Admin)', 'gdpr-framework'); ?>
|
74 |
+
</label>
|
75 |
+
<input
|
76 |
+
type="email"
|
77 |
+
id="gdpr_delete_action_email"
|
78 |
+
name="gdpr_delete_action_email"
|
79 |
+
placeholder="<?= __('Email address', 'gdpr-framework'); ?>"
|
80 |
+
value="<?= esc_attr($deleteActionEmail); ?>"
|
81 |
+
/>
|
82 |
+
</span>
|
83 |
+
</p>
|
84 |
+
|
85 |
+
<hr>
|
86 |
+
<br>
|
87 |
+
<input type="submit" class="button button-gdpr button-right" value="Save »"/>
|
views/installer/steps/consent.php
CHANGED
@@ -1,88 +1,88 @@
|
|
1 |
-
<h1>
|
2 |
-
Forms and Consent
|
3 |
-
</h1>
|
4 |
-
|
5 |
-
<h2>Introduction</h2>
|
6 |
-
|
7 |
-
<p>
|
8 |
-
GDPR brings very strict rules for gathering and processing personal data. The most important thing to remember is that
|
9 |
-
you need to have <strong>legal grounds</strong> for each and every type of data you gather and process. If you are not
|
10 |
-
familiar with what this means, we strongly recommend you read this post from the guide: <br>
|
11 |
-
<a href="<?= gdpr('helpers')->docs('guide/legal-grounds-for-processing-data/'); ?>" target="_blank">Consent and other legal grounds for processing data</a>
|
12 |
-
</p>
|
13 |
-
|
14 |
-
<p>
|
15 |
-
Under GDPR, <strong>all forms</strong> require special attention. You'll need to explain why you gather the data and
|
16 |
-
what you do with it. And if there are no other legal grounds, you'll need to ask for consent.
|
17 |
-
Note that your customers must also be able to <strong>withdraw</strong> each consent they have given.
|
18 |
-
</p>
|
19 |
-
|
20 |
-
<h2>WordPress forms</h2>
|
21 |
-
|
22 |
-
<p>
|
23 |
-
For <strong>posting comments</strong> and <strong>registering accounts</strong>,
|
24 |
-
you will need to ask your customers consent to the Privacy Policy. If your site allows comments or registration,
|
25 |
-
the GDPR Framework will automatically add consent checkboxes to the respective forms.
|
26 |
-
</p>
|
27 |
-
|
28 |
-
<h2>Withdrawing consent</h2>
|
29 |
-
|
30 |
-
<p>
|
31 |
-
Your customers can withdraw their given consents on the <a href="<?= $privacyToolsPageUrl; ?>" target="blank">Privacy Tools Page</a>.
|
32 |
-
</p>
|
33 |
-
<br>
|
34 |
-
<hr>
|
35 |
-
|
36 |
-
<?php if ($hasGravityForms): ?>
|
37 |
-
<h2>✔ Gravity Forms</h2>
|
38 |
-
<p>
|
39 |
-
We have detected that Gravity Forms is enabled on your site.
|
40 |
-
We're releasing Gravity Forms compatibility to the GDPR Framework shortly.
|
41 |
-
<!--
|
42 |
-
<a href="<?= gdpr('helpers')->docs('guide/making-your-forms-compliant/'); ?>" target="_blank">Read about making your Gravity forms GDPR compliant.</a>
|
43 |
-
-->
|
44 |
-
</p>
|
45 |
-
<hr>
|
46 |
-
<?php endif; ?>
|
47 |
-
|
48 |
-
<?php if ($hasCF7): ?>
|
49 |
-
<h2>✔ Contact Form 7</h2>
|
50 |
-
<p>
|
51 |
-
We have detected that Contact Form 7 is enabled on your site. The GDPR Framework is
|
52 |
-
compatible with Contact Form 7.
|
53 |
-
</p>
|
54 |
-
<p>
|
55 |
-
Each of the forms requires either a <strong>disclaimer</strong> or a <strong>consent checkbox</strong>.
|
56 |
-
We have created some tools to help you out!
|
57 |
-
</p>
|
58 |
-
<p>
|
59 |
-
<a href="<?= gdpr('helpers')->docs('guide/making-your-forms-compliant/'); ?>" target="_blank">Read about making your Contact Form 7 forms GDPR compliant.</a>
|
60 |
-
</p>
|
61 |
-
<hr>
|
62 |
-
<?php endif; ?>
|
63 |
-
|
64 |
-
<h2>Custom forms</h2>
|
65 |
-
<p>
|
66 |
-
<label for="gdpr_has_contact_forms">
|
67 |
-
<input
|
68 |
-
type="checkbox"
|
69 |
-
name="gdpr_has_contact_forms"
|
70 |
-
id="gdpr_has_contact_forms"
|
71 |
-
class="js-gdpr-conditional"
|
72 |
-
data-show=".gdpr-contact-custom"
|
73 |
-
value="yes"
|
74 |
-
>
|
75 |
-
I have custom forms on my website (e.g. contact forms, newsletter signups, lottery signups)
|
76 |
-
</label>
|
77 |
-
</p>
|
78 |
-
<p class="gdpr-contact-custom hidden">
|
79 |
-
Each of the forms on your site requires either a <strong>disclaimer</strong> or a <strong>consent checkbox</strong>. <br>
|
80 |
-
We cannot do this automatically - you need to do it yourself or request help from a developer. However, we have created some
|
81 |
-
tools to help you out!
|
82 |
-
<br>
|
83 |
-
<a href="<?= gdpr('helpers')->docs('guide/making-your-forms-compliant/'); ?>" target="_blank">Read about integrating custom forms</a>
|
84 |
-
</p>
|
85 |
-
|
86 |
-
<hr>
|
87 |
-
<br>
|
88 |
-
<input type="submit" class="button button-gdpr button-right" value="Continue »" />
|
1 |
+
<h1>
|
2 |
+
Forms and Consent
|
3 |
+
</h1>
|
4 |
+
|
5 |
+
<h2>Introduction</h2>
|
6 |
+
|
7 |
+
<p>
|
8 |
+
GDPR brings very strict rules for gathering and processing personal data. The most important thing to remember is that
|
9 |
+
you need to have <strong>legal grounds</strong> for each and every type of data you gather and process. If you are not
|
10 |
+
familiar with what this means, we strongly recommend you read this post from the guide: <br>
|
11 |
+
<a href="<?= gdpr('helpers')->docs('guide/legal-grounds-for-processing-data/'); ?>" target="_blank">Consent and other legal grounds for processing data</a>
|
12 |
+
</p>
|
13 |
+
|
14 |
+
<p>
|
15 |
+
Under GDPR, <strong>all forms</strong> require special attention. You'll need to explain why you gather the data and
|
16 |
+
what you do with it. And if there are no other legal grounds, you'll need to ask for consent.
|
17 |
+
Note that your customers must also be able to <strong>withdraw</strong> each consent they have given.
|
18 |
+
</p>
|
19 |
+
|
20 |
+
<h2>WordPress forms</h2>
|
21 |
+
|
22 |
+
<p>
|
23 |
+
For <strong>posting comments</strong> and <strong>registering accounts</strong>,
|
24 |
+
you will need to ask your customers consent to the Privacy Policy. If your site allows comments or registration,
|
25 |
+
the GDPR Framework will automatically add consent checkboxes to the respective forms.
|
26 |
+
</p>
|
27 |
+
|
28 |
+
<h2>Withdrawing consent</h2>
|
29 |
+
|
30 |
+
<p>
|
31 |
+
Your customers can withdraw their given consents on the <a href="<?= $privacyToolsPageUrl; ?>" target="blank">Privacy Tools Page</a>.
|
32 |
+
</p>
|
33 |
+
<br>
|
34 |
+
<hr>
|
35 |
+
|
36 |
+
<?php if ($hasGravityForms): ?>
|
37 |
+
<h2>✔ Gravity Forms</h2>
|
38 |
+
<p>
|
39 |
+
We have detected that Gravity Forms is enabled on your site.
|
40 |
+
We're releasing Gravity Forms compatibility to the GDPR Framework shortly.
|
41 |
+
<!--
|
42 |
+
<a href="<?= gdpr('helpers')->docs('guide/making-your-forms-compliant/'); ?>" target="_blank">Read about making your Gravity forms GDPR compliant.</a>
|
43 |
+
-->
|
44 |
+
</p>
|
45 |
+
<hr>
|
46 |
+
<?php endif; ?>
|
47 |
+
|
48 |
+
<?php if ($hasCF7): ?>
|
49 |
+
<h2>✔ Contact Form 7</h2>
|
50 |
+
<p>
|
51 |
+
We have detected that Contact Form 7 is enabled on your site. The GDPR Framework is
|
52 |
+
compatible with Contact Form 7.
|
53 |
+
</p>
|
54 |
+
<p>
|
55 |
+
Each of the forms requires either a <strong>disclaimer</strong> or a <strong>consent checkbox</strong>.
|
56 |
+
We have created some tools to help you out!
|
57 |
+
</p>
|
58 |
+
<p>
|
59 |
+
<a href="<?= gdpr('helpers')->docs('guide/making-your-forms-compliant/'); ?>" target="_blank">Read about making your Contact Form 7 forms GDPR compliant.</a>
|
60 |
+
</p>
|
61 |
+
<hr>
|
62 |
+
<?php endif; ?>
|
63 |
+
|
64 |
+
<h2>Custom forms</h2>
|
65 |
+
<p>
|
66 |
+
<label for="gdpr_has_contact_forms">
|
67 |
+
<input
|
68 |
+
type="checkbox"
|
69 |
+
name="gdpr_has_contact_forms"
|
70 |
+
id="gdpr_has_contact_forms"
|
71 |
+
class="js-gdpr-conditional"
|
72 |
+
data-show=".gdpr-contact-custom"
|
73 |
+
value="yes"
|
74 |
+
>
|
75 |
+
I have custom forms on my website (e.g. contact forms, newsletter signups, lottery signups)
|
76 |
+
</label>
|
77 |
+
</p>
|
78 |
+
<p class="gdpr-contact-custom hidden">
|
79 |
+
Each of the forms on your site requires either a <strong>disclaimer</strong> or a <strong>consent checkbox</strong>. <br>
|
80 |
+
We cannot do this automatically - you need to do it yourself or request help from a developer. However, we have created some
|
81 |
+
tools to help you out!
|
82 |
+
<br>
|
83 |
+
<a href="<?= gdpr('helpers')->docs('guide/making-your-forms-compliant/'); ?>" target="_blank">Read about integrating custom forms</a>
|
84 |
+
</p>
|
85 |
+
|
86 |
+
<hr>
|
87 |
+
<br>
|
88 |
+
<input type="submit" class="button button-gdpr button-right" value="Continue »" />
|
views/installer/steps/disclaimer.php
CHANGED
@@ -1,21 +1,21 @@
|
|
1 |
-
<h2>
|
2 |
-
Very Important Legal Stuff!
|
3 |
-
</h2>
|
4 |
-
<hr>
|
5 |
-
<p class="gdpr-disclaimer">
|
6 |
-
<strong>Disclaimer</strong><br>
|
7 |
-
Using The GDPR Framework does NOT guarantee compliance to GDPR.
|
8 |
-
By using this plugin, you agree to this disclaimer.
|
9 |
-
These templates and guides provided to you are drafted by legal professionals in order for you to understand your obligations better,
|
10 |
-
but they are NOT meant to constitute client-attorney relationship or personalized legal advice.
|
11 |
-
Codelight is not eligible for any claim or action based on any information or functionality provided by this plugin.
|
12 |
-
We expressly disclaim all liability in respect of usage of this plugin.
|
13 |
-
This plugin gives you general information and tools, but is NOT meant to serve as complete compliance package.
|
14 |
-
For compliance audit or further help <a href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" target="_blank">contact legal professionals</a>.
|
15 |
-
As each business and situation is unique, you might need to modify, add or delete information in these templates.
|
16 |
-
In addition to this, you will need audit all your processing activities for achieving compliance to GDPR.
|
17 |
-
Compliance to GDPR is risk based ongoing process.
|
18 |
-
We are here to get you started.
|
19 |
-
</p>
|
20 |
-
<hr>
|
21 |
-
<input type="submit" class="button button-gdpr button-large button-gdpr-large button-center" value="<?= _x('I accept', '(Admin)', 'gdpr-framework'); ?>" />
|
1 |
+
<h2>
|
2 |
+
Very Important Legal Stuff!
|
3 |
+
</h2>
|
4 |
+
<hr>
|
5 |
+
<p class="gdpr-disclaimer">
|
6 |
+
<strong>Disclaimer</strong><br>
|
7 |
+
Using The GDPR Framework does NOT guarantee compliance to GDPR.
|
8 |
+
By using this plugin, you agree to this disclaimer.
|
9 |
+
These templates and guides provided to you are drafted by legal professionals in order for you to understand your obligations better,
|
10 |
+
but they are NOT meant to constitute client-attorney relationship or personalized legal advice.
|
11 |
+
Codelight is not eligible for any claim or action based on any information or functionality provided by this plugin.
|
12 |
+
We expressly disclaim all liability in respect of usage of this plugin.
|
13 |
+
This plugin gives you general information and tools, but is NOT meant to serve as complete compliance package.
|
14 |
+
For compliance audit or further help <a href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" target="_blank">contact legal professionals</a>.
|
15 |
+
As each business and situation is unique, you might need to modify, add or delete information in these templates.
|
16 |
+
In addition to this, you will need audit all your processing activities for achieving compliance to GDPR.
|
17 |
+
Compliance to GDPR is risk based ongoing process.
|
18 |
+
We are here to get you started.
|
19 |
+
</p>
|
20 |
+
<hr>
|
21 |
+
<input type="submit" class="button button-gdpr button-large button-gdpr-large button-center" value="<?= _x('I accept', '(Admin)', 'gdpr-framework'); ?>" />
|
views/installer/steps/finish.php
CHANGED
@@ -1,69 +1,69 @@
|
|
1 |
-
<h2 class="align-center">
|
2 |
-
All done!
|
3 |
-
</h2>
|
4 |
-
<p class="align-center">
|
5 |
-
Congrats! You've just taken a huge step towards GDPR compliance!
|
6 |
-
</p>
|
7 |
-
|
8 |
-
<section class="section">
|
9 |
-
<h3 class="align-center">
|
10 |
-
<?= _x('Need more info?', '(Admin)', 'gdpr-framework'); ?>
|
11 |
-
</h3>
|
12 |
-
<div class="row">
|
13 |
-
<div class="col">
|
14 |
-
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/1.png');"></div>
|
15 |
-
<a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/'); ?>" target="_blank">
|
16 |
-
<?= _x('Site Owner\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
|
17 |
-
</a>
|
18 |
-
<p>
|
19 |
-
<?= _x('Read the full guide on GDPR compliance.', '(Admin)', 'gdpr-framework'); ?>
|
20 |
-
</p>
|
21 |
-
</div>
|
22 |
-
<div class="col">
|
23 |
-
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/2.png');"></div>
|
24 |
-
<a class="button button-primary" href="<?= gdpr('helpers')->docs('knowledge-base'); ?>" target="_blank">
|
25 |
-
<?= _x('Knowledge base', '(Admin)', 'gdpr-framework'); ?>
|
26 |
-
</a>
|
27 |
-
<p>
|
28 |
-
<?= _x('Check out the knowledge base for common questions and answers.', '(Admin)', 'gdpr-framework'); ?>
|
29 |
-
</p>
|
30 |
-
</div>
|
31 |
-
<div class="col">
|
32 |
-
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/3.png');"></div>
|
33 |
-
<a class="button button-primary" href="<?= gdpr('helpers')->docs('developer-docs'); ?>" target="_blank">
|
34 |
-
<?= _x('Developer\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
|
35 |
-
</a>
|
36 |
-
<p>
|
37 |
-
<?= _x('We have a thorough guide to help making custom sites compliant.', '(Admin)', 'gdpr-framework'); ?>
|
38 |
-
</p>
|
39 |
-
</div>
|
40 |
-
</div>
|
41 |
-
</section>
|
42 |
-
|
43 |
-
<section class="section">
|
44 |
-
<h3 class="align-center">
|
45 |
-
<?= _x('Need help?', '(Admin)', 'gdpr-framework'); ?>
|
46 |
-
</h3>
|
47 |
-
<div class="row">
|
48 |
-
<div class="col">
|
49 |
-
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/4.png');"></div>
|
50 |
-
<a class="button button-primary" href="https://wordpress.org/support/plugin/gdpr-framework" target="_blank">
|
51 |
-
<?= _x('Submit a support request', '(Admin)', 'gdpr-framework'); ?>
|
52 |
-
</a>
|
53 |
-
<p>
|
54 |
-
<?= _x('Found a bug or problem with the plugin? Post in the wordpress.org support forum.', '(Admin)', 'gdpr-framework'); ?>
|
55 |
-
</p>
|
56 |
-
</div>
|
57 |
-
<div class="col">
|
58 |
-
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/5.png');"></div>
|
59 |
-
<a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" target="_blank">
|
60 |
-
<?= _x('Request a consultation', '(Admin)', 'gdpr-framework'); ?>
|
61 |
-
</a>
|
62 |
-
<p>
|
63 |
-
<?= _x('Need development or legal assistance in making your site compliant? We can help!', '(Admin)', 'gdpr-framework'); ?>
|
64 |
-
</p>
|
65 |
-
</div>
|
66 |
-
</div>
|
67 |
-
</section>
|
68 |
-
|
69 |
-
<input type="submit" class="button button-gdpr button-large button-gdpr-large button-center" value="Back to dashboard"" />
|
1 |
+
<h2 class="align-center">
|
2 |
+
All done!
|
3 |
+
</h2>
|
4 |
+
<p class="align-center">
|
5 |
+
Congrats! You've just taken a huge step towards GDPR compliance!
|
6 |
+
</p>
|
7 |
+
|
8 |
+
<section class="section">
|
9 |
+
<h3 class="align-center">
|
10 |
+
<?= _x('Need more info?', '(Admin)', 'gdpr-framework'); ?>
|
11 |
+
</h3>
|
12 |
+
<div class="row">
|
13 |
+
<div class="col">
|
14 |
+
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/1.png');"></div>
|
15 |
+
<a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/'); ?>" target="_blank">
|
16 |
+
<?= _x('Site Owner\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
|
17 |
+
</a>
|
18 |
+
<p>
|
19 |
+
<?= _x('Read the full guide on GDPR compliance.', '(Admin)', 'gdpr-framework'); ?>
|
20 |
+
</p>
|
21 |
+
</div>
|
22 |
+
<div class="col">
|
23 |
+
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/2.png');"></div>
|
24 |
+
<a class="button button-primary" href="<?= gdpr('helpers')->docs('knowledge-base'); ?>" target="_blank">
|
25 |
+
<?= _x('Knowledge base', '(Admin)', 'gdpr-framework'); ?>
|
26 |
+
</a>
|
27 |
+
<p>
|
28 |
+
<?= _x('Check out the knowledge base for common questions and answers.', '(Admin)', 'gdpr-framework'); ?>
|
29 |
+
</p>
|
30 |
+
</div>
|
31 |
+
<div class="col">
|
32 |
+
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/3.png');"></div>
|
33 |
+
<a class="button button-primary" href="<?= gdpr('helpers')->docs('developer-docs'); ?>" target="_blank">
|
34 |
+
<?= _x('Developer\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
|
35 |
+
</a>
|
36 |
+
<p>
|
37 |
+
<?= _x('We have a thorough guide to help making custom sites compliant.', '(Admin)', 'gdpr-framework'); ?>
|
38 |
+
</p>
|
39 |
+
</div>
|
40 |
+
</div>
|
41 |
+
</section>
|
42 |
+
|
43 |
+
<section class="section">
|
44 |
+
<h3 class="align-center">
|
45 |
+
<?= _x('Need help?', '(Admin)', 'gdpr-framework'); ?>
|
46 |
+
</h3>
|
47 |
+
<div class="row">
|
48 |
+
<div class="col">
|
49 |
+
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/4.png');"></div>
|
50 |
+
<a class="button button-primary" href="https://wordpress.org/support/plugin/gdpr-framework" target="_blank">
|
51 |
+
<?= _x('Submit a support request', '(Admin)', 'gdpr-framework'); ?>
|
52 |
+
</a>
|
53 |
+
<p>
|
54 |
+
<?= _x('Found a bug or problem with the plugin? Post in the wordpress.org support forum.', '(Admin)', 'gdpr-framework'); ?>
|
55 |
+
</p>
|
56 |
+
</div>
|
57 |
+
<div class="col">
|
58 |
+
<div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/5.png');"></div>
|
59 |
+
<a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" target="_blank">
|
60 |
+
<?= _x('Request a consultation', '(Admin)', 'gdpr-framework'); ?>
|
61 |
+
</a>
|
62 |
+
<p>
|
63 |
+
<?= _x('Need development or legal assistance in making your site compliant? We can help!', '(Admin)', 'gdpr-framework'); ?>
|
64 |
+
</p>
|
65 |
+
</div>
|
66 |
+
</div>
|
67 |
+
</section>
|
68 |
+
|
69 |
+
<input type="submit" class="button button-gdpr button-large button-gdpr-large button-center" value="Back to dashboard"" />
|
views/installer/steps/integrations.php
CHANGED
@@ -1,60 +1,60 @@
|
|
1 |
-
<h1>
|
2 |
-
Integrations
|
3 |
-
</h1>
|
4 |
-
|
5 |
-
<h2>Theme compatibility</h2>
|
6 |
-
<p>
|
7 |
-
The links to Privacy Policy and Privacy Tools should be visible somewhere on your site.
|
8 |
-
A good place would be your site's footer.
|
9 |
-
</p>
|
10 |
-
<?php if ($isThemeSupported): ?>
|
11 |
-
<p>
|
12 |
-
We have detected that you are running <strong><?= esc_html(ucfirst($currentTheme)); ?> theme</strong>. We can automatically add the links to your site's footer if you'd like.
|
13 |
-
<label for="gdpr_enable_theme_compatibility">
|
14 |
-
<input
|
15 |
-
type="checkbox"
|
16 |
-
id="gdpr_enable_theme_compatibility"
|
17 |
-
name="gdpr_enable_theme_compatibility"
|
18 |
-
value="yes"
|
19 |
-
<?= checked($enableThemeCompatibility, true); ?>
|
20 |
-
/>
|
21 |
-
<?= _x('Automatically add Privacy Policy and Privacy Tools links to your site footer.', '(Admin)', 'gdpr-framework'); ?>
|
22 |
-
</label>
|
23 |
-
</p>
|
24 |
-
<?php endif; ?>
|
25 |
-
<hr>
|
26 |
-
|
27 |
-
<?php if ($hasSendgrid): ?>
|
28 |
-
<h2>IMPORTANT: Sendgrid compatibility</h2>
|
29 |
-
<p>
|
30 |
-
It looks like you are using Sendgrid to send emails. Note that the links in identification emails will not work properly unless you have click tracking turned off in Sendgrid.
|
31 |
-
</p>
|
32 |
-
<hr>
|
33 |
-
<?php endif; ?>
|
34 |
-
|
35 |
-
<?php if ($hasWooCommerce): ?>
|
36 |
-
<h2>WooCommerce compatibility</h2>
|
37 |
-
<p>
|
38 |
-
TBD
|
39 |
-
</p>
|
40 |
-
<hr>
|
41 |
-
<?php endif; ?>
|
42 |
-
|
43 |
-
<?php if ($hasEDD): ?>
|
44 |
-
<h2>Easy Digital Downloads compatibility</h2>
|
45 |
-
<p>
|
46 |
-
TBD
|
47 |
-
</p>
|
48 |
-
<hr>
|
49 |
-
<?php endif; ?>
|
50 |
-
|
51 |
-
<h2>Custom development</h2>
|
52 |
-
<p>
|
53 |
-
If you've had a developer build any custom features for your site, you should also make sure that everything is properly GDPR-compliant.
|
54 |
-
<br>
|
55 |
-
<a href="<?= gdpr('helpers')->docs('developer-docs/'); ?>" target="_blank">Read about making custom-built sites and features GDPR-compliant.</a>
|
56 |
-
</p>
|
57 |
-
|
58 |
-
<hr>
|
59 |
-
<br>
|
60 |
-
<input type="submit" class="button button-gdpr button-right" value="Continue »" />
|
1 |
+
<h1>
|
2 |
+
Integrations
|
3 |
+
</h1>
|
4 |
+
|
5 |
+
<h2>Theme compatibility</h2>
|
6 |
+
<p>
|
7 |
+
The links to Privacy Policy and Privacy Tools should be visible somewhere on your site.
|
8 |
+
A good place would be your site's footer.
|
9 |
+
</p>
|
10 |
+
<?php if ($isThemeSupported): ?>
|
11 |
+
<p>
|
12 |
+
We have detected that you are running <strong><?= esc_html(ucfirst($currentTheme)); ?> theme</strong>. We can automatically add the links to your site's footer if you'd like.
|
13 |
+
<label for="gdpr_enable_theme_compatibility">
|
14 |
+
<input
|
15 |
+
type="checkbox"
|
16 |
+
id="gdpr_enable_theme_compatibility"
|
17 |
+
name="gdpr_enable_theme_compatibility"
|
18 |
+
value="yes"
|
19 |
+
<?= checked($enableThemeCompatibility, true); ?>
|
20 |
+
/>
|
21 |
+
<?= _x('Automatically add Privacy Policy and Privacy Tools links to your site footer.', '(Admin)', 'gdpr-framework'); ?>
|
22 |
+
</label>
|
23 |
+
</p>
|
24 |
+
<?php endif; ?>
|
25 |
+
<hr>
|
26 |
+
|
27 |
+
<?php if ($hasSendgrid): ?>
|
28 |
+
<h2>IMPORTANT: Sendgrid compatibility</h2>
|
29 |
+
<p>
|
30 |
+
It looks like you are using Sendgrid to send emails. Note that the links in identification emails will not work properly unless you have click tracking turned off in Sendgrid.
|
31 |
+
</p>
|
32 |
+
<hr>
|
33 |
+
<?php endif; ?>
|
34 |
+
|
35 |
+
<?php if ($hasWooCommerce): ?>
|
36 |
+
<h2>WooCommerce compatibility</h2>
|
37 |
+
<p>
|
38 |
+
TBD
|
39 |
+
</p>
|
40 |
+
<hr>
|
41 |
+
<?php endif; ?>
|
42 |
+
|
43 |
+
<?php if ($hasEDD): ?>
|
44 |
+
<h2>Easy Digital Downloads compatibility</h2>
|
45 |
+
<p>
|
46 |
+
TBD
|
47 |
+
</p>
|
48 |
+
<hr>
|
49 |
+
<?php endif; ?>
|
50 |
+
|
51 |
+
<h2>Custom development</h2>
|
52 |
+
<p>
|
53 |
+
If you've had a developer build any custom features for your site, you should also make sure that everything is properly GDPR-compliant.
|
54 |
+
<br>
|
55 |
+
<a href="<?= gdpr('helpers')->docs('developer-docs/'); ?>" target="_blank">Read about making custom-built sites and features GDPR-compliant.</a>
|
56 |
+
</p>
|
57 |
+
|
58 |
+
<hr>
|
59 |
+
<br>
|
60 |
+
<input type="submit" class="button button-gdpr button-right" value="Continue »" />
|
views/installer/steps/policy-contents.php
CHANGED
@@ -1,25 +1,25 @@
|
|
1 |
-
<h1>
|
2 |
-
Privacy Policy (2/2)
|
3 |
-
</h1>
|
4 |
-
|
5 |
-
<h2>✔ Privacy Policy configured!</h2>
|
6 |
-
<?php if ($policyGenerated): ?>
|
7 |
-
<p>
|
8 |
-
Take a look at your new Privacy Policy page <a href="<?= $policyUrl; ?>" target="_blank">here</a>! <br>
|
9 |
-
Make sure you read it - you will need to know all this anyway. <br><br>
|
10 |
-
<strong>Important!</strong><br> The contents of your Privacy Policy depend on what your website (and
|
11 |
-
business) does exactly. Note that this is just a template. <strong>You will need to modify it to suit your needs</strong>. To do that,
|
12 |
-
go to the <a href="<?= $editPolicyUrl; ?>" target="_blank">admin Privacy Policy page</a> and just edit the contents of your policy.
|
13 |
-
</p>
|
14 |
-
<?php else: ?>
|
15 |
-
<p>
|
16 |
-
It looks like you selected an already existing Privacy Policy. <br>
|
17 |
-
Note that GDPR puts some new requirements on what you need to have in your Privacy Policy. <br>
|
18 |
-
<a href="<?= gdpr('helpers')->docs('guide/setting-up-the-privacy-policy/'); ?>" target="_blank">Read more about the requirements to your Privacy Policy</a>
|
19 |
-
</p>
|
20 |
-
<?php endif; ?>
|
21 |
-
|
22 |
-
<hr>
|
23 |
-
<br>
|
24 |
-
|
25 |
-
<input type="submit" class="button button-gdpr button-right" value="Save »" />
|
1 |
+
<h1>
|
2 |
+
Privacy Policy (2/2)
|
3 |
+
</h1>
|
4 |
+
|
5 |
+
<h2>✔ Privacy Policy configured!</h2>
|
6 |
+
<?php if ($policyGenerated): ?>
|
7 |
+
<p>
|
8 |
+
Take a look at your new Privacy Policy page <a href="<?= $policyUrl; ?>" target="_blank">here</a>! <br>
|
9 |
+
Make sure you read it - you will need to know all this anyway. <br><br>
|
10 |
+
<strong>Important!</strong><br> The contents of your Privacy Policy depend on what your website (and
|
11 |
+
business) does exactly. Note that this is just a template. <strong>You will need to modify it to suit your needs</strong>. To do that,
|
12 |
+
go to the <a href="<?= $editPolicyUrl; ?>" target="_blank">admin Privacy Policy page</a> and just edit the contents of your policy.
|
13 |
+
</p>
|
14 |
+
<?php else: ?>
|
15 |
+
<p>
|
16 |
+
It looks like you selected an already existing Privacy Policy. <br>
|
17 |
+
Note that GDPR puts some new requirements on what you need to have in your Privacy Policy. <br>
|
18 |
+
<a href="<?= gdpr('helpers')->docs('guide/setting-up-the-privacy-policy/'); ?>" target="_blank">Read more about the requirements to your Privacy Policy</a>
|
19 |
+
</p>
|
20 |
+
<?php endif; ?>
|
21 |
+
|
22 |
+
<hr>
|
23 |
+
<br>
|
24 |
+
|
25 |
+
<input type="submit" class="button button-gdpr button-right" value="Save »" />
|
views/installer/steps/policy-settings.php
CHANGED
@@ -1,185 +1,185 @@
|
|
1 |
-
<h1>
|
2 |
-
Privacy Policy (1/2)
|
3 |
-
</h1>
|
4 |
-
|
5 |
-
<h2>Privacy Policy page</h2>
|
6 |
-
<p>
|
7 |
-
The second major requirement of GDPR is a thorough Privacy Policy that explains all of the rights your customers
|
8 |
-
have and describes how exactly their data is used. We've put together a GDPR-compliant privacy policy template for you.
|
9 |
-
Fill in the fields below and a privacy policy will be generated automatically. Note that you will need to modify it later to suit your website and business. <br>
|
10 |
-
<a href="<?= gdpr('helpers')->docs('guide/setting-up-the-privacy-policy/'); ?>" target="_blank">Read more about the Privacy Policy</a><br><br>
|
11 |
-
If you already have a GDPR-compliant Privacy Policy, simply select the page where it is displayed and skip the rest.
|
12 |
-
<br>
|
13 |
-
</p>
|
14 |
-
|
15 |
-
<fieldset>
|
16 |
-
<label>
|
17 |
-
<input type="radio" name="gdpr_create_policy_page" value="yes" class="js-gdpr-conditional" <?php echo !$policyPage ? 'checked': ''; ?>>
|
18 |
-
Automatically create a new page for Privacy Policy
|
19 |
-
</label>
|
20 |
-
|
21 |
-
<label>
|
22 |
-
<input type="radio" name="gdpr_create_policy_page" value="no" class="js-gdpr-conditional" data-show=".gdpr-select-policy-page" <?php echo $policyPage ? 'checked': ''; ?>> I want to use an existing page
|
23 |
-
</label>
|
24 |
-
</fieldset>
|
25 |
-
|
26 |
-
<p class="gdpr-select-policy-page hidden">
|
27 |
-
<label for="gdpr_policy_page">Select the page where your Privacy Policy will be displayed</label>
|
28 |
-
<?= $policyPageSelector; ?>
|
29 |
-
</p>
|
30 |
-
|
31 |
-
<p>
|
32 |
-
We can generate a somewhat personalized Privacy Policy template for you based on some information you can fill in below.
|
33 |
-
Note that if you're using an existing page, this will overwrite the page contents.
|
34 |
-
|
35 |
-
<label for="gdpr_generate_policy">
|
36 |
-
<input
|
37 |
-
type="checkbox"
|
38 |
-
name="gdpr_generate_policy"
|
39 |
-
id="gdpr_generate_policy"
|
40 |
-
class="js-gdpr-conditional"
|
41 |
-
data-show=".gdpr-generator-fields"
|
42 |
-
value="yes"
|
43 |
-
>
|
44 |
-
Generate Privacy Policy
|
45 |
-
</label>
|
46 |
-
<em>Heads up - this will take some time to configure!</em>
|
47 |
-
</p>
|
48 |
-
|
49 |
-
<hr>
|
50 |
-
|
51 |
-
<div class="gdpr-generator-fields hidden">
|
52 |
-
|
53 |
-
<h2>Company information</h2>
|
54 |
-
<label for="gdpr_company_name">Company legal name</label>
|
55 |
-
<input type="text" id="gdpr_company_name" name="gdpr_company_name" value="<?= esc_attr($companyName); ?>"/>
|
56 |
-
<em>Enter the name of your company. If you are not registered as a company, enter your full name.</em>
|
57 |
-
|
58 |
-
<label for="gdpr_contact_email">Contact email</label>
|
59 |
-
<input type="email" id="gdpr_contact_email" name="gdpr_contact_email" value="<?= esc_attr($contactEmail); ?>"/>
|
60 |
-
<em>
|
61 |
-
Enter the contact email which should be used for GDPR and personal data related inquiries.<br>
|
62 |
-
This email will be displayed in the Privacy Policy.
|
63 |
-
</em>
|
64 |
-
|
65 |
-
<hr>
|
66 |
-
|
67 |
-
<h2>Company location</h2>
|
68 |
-
<label for="gdpr_company_location">Company location</label>
|
69 |
-
<select id="gdpr_company_location" name="gdpr_company_location" class="js-gdpr-select2 gdpr-select js-gdpr-conditional js-gdpr-country-selector">
|
70 |
-
<?= $countryOptions; ?>
|
71 |
-
</select>
|
72 |
-
<em>
|
73 |
-
Select the country where your company is registered. <br>
|
74 |
-
If you are not registered as a company, enter your country of residence.
|
75 |
-
</em>
|
76 |
-
<div class="gdpr-representative hidden">
|
77 |
-
<p>
|
78 |
-
|
79 |
-
If your company is located outside of the EU and the EFTA zone and you do not have a branch inside the EU,
|
80 |
-
GDPR requires you to appoint a representative contact which has to be a person or company located in the EU.
|
81 |
-
<a href="<?= gdpr('helpers')->docs('knowledge-base/do-i-need-to-appoint-an-eu-based-representative/'); ?>" target="_blank">Read more about appointing a representative and your options here</a>.
|
82 |
-
</p>
|
83 |
-
<p>
|
84 |
-
If you have a representative contact, enter the contact details below.
|
85 |
-
|
86 |
-
<label for="gdpr_representative_contact_name">Representative contact name</label>
|
87 |
-
<input type="text" value="<?= esc_attr($representativeContactName); ?>" id="gdpr_representative_contact_name" name="gdpr_representative_contact_name" data />
|
88 |
-
|
89 |
-
<label for="gdpr_representative_contact_email">Representative contact email</label>
|
90 |
-
<input type="email" value="<?= esc_attr($representativeContactEmail); ?>" id="gdpr_representative_contact_email" name="gdpr_representative_contact_email" />
|
91 |
-
|
92 |
-
<label for="gdpr_representative_contact_phone">Representative contact phone</label>
|
93 |
-
<input type="text" value="<?= esc_attr($representativeContactPhone); ?>" id="gdpr_representative_contact_phone" name="gdpr_representative_contact_phone" />
|
94 |
-
|
95 |
-
</p>
|
96 |
-
</div>
|
97 |
-
<br>
|
98 |
-
<hr>
|
99 |
-
|
100 |
-
<h2>Data Protection Authority</h2>
|
101 |
-
<p>
|
102 |
-
You are also obliged to provide the contact of your local supervisory authority.
|
103 |
-
|
104 |
-
<span class="gdpr-representative hidden">
|
105 |
-
<br><br>
|
106 |
-
You are located outside of the EU. This means that you must designate an EU country's data protection authority to be your supervisory authority.
|
107 |
-
Choose the Data Protection Authority of the country where most of your target audience resides. See the <a href="http://ec.europa.eu/justice/data-protection/article-29/structure/data-protection-authorities/index_en.htm" target="_blank">list of contacts here</a>.
|
108 |
-
</span>
|
109 |
-
|
110 |
-
<label for="gdpr_dpa_website">Data Protection Authority website</label>
|
111 |
-
<input type="text" value="<?= esc_attr($dpaWebsite); ?>" id="gdpr_dpa_website" name="gdpr_dpa_website" data-set="<?= esc_attr($dpaWebsite); ?>" />
|
112 |
-
|
113 |
-
<label for="gdpr_dpa_email">Data Protection Authority email</label>
|
114 |
-
<input type="email" value="<?= esc_attr($dpaEmail); ?>" id="gdpr_dpa_email" name="gdpr_dpa_email" data-set="<?= esc_attr($dpaEmail); ?>" />
|
115 |
-
|
116 |
-
<label for="gdpr_dpa_phone">Data Protection Authority phone</label>
|
117 |
-
<input type="text" value="<?= esc_attr($dpaPhone); ?>" id="gdpr_dpa_phone" name="gdpr_dpa_phone" data-set="<?= esc_attr($dpaPhone); ?>" />
|
118 |
-
</p>
|
119 |
-
<script>
|
120 |
-
window.gdprDpaData = <?= $dpaData; ?>;
|
121 |
-
</script>
|
122 |
-
|
123 |
-
<h2>Data Protection Officer</h2>
|
124 |
-
<p>
|
125 |
-
Under some circumstances, GDPR requires you to appoint a Data Protection Officer and display the contacts
|
126 |
-
in your Privacy Policy. If you don't know whether or not you need a DPO, read this article: <a href="<?= gdpr('helpers')->docs('knowledge-base/do-i-need-to-appoint-data-protection-officer-dpo/'); ?>" target="_blank">Do I need a Data Protection Officer?</a>
|
127 |
-
|
128 |
-
<label for="gdpr_has_dpo">
|
129 |
-
<input
|
130 |
-
type="checkbox"
|
131 |
-
name="gdpr_has_dpo"
|
132 |
-
id="gdpr_has_dpo"
|
133 |
-
class="js-gdpr-conditional"
|
134 |
-
data-show=".gdpr-dpo"
|
135 |
-
value="yes"
|
136 |
-
<?= checked($hasDPO, 'yes'); ?>
|
137 |
-
>
|
138 |
-
I have appointed a Data Protection Officer (DPO)
|
139 |
-
</label>
|
140 |
-
</p>
|
141 |
-
<p class="gdpr-dpo hidden">
|
142 |
-
<label for="gdpr_dpo_name">Data Protection Officer name</label>
|
143 |
-
<input type="text" id="gdpr_dpo_name" name="gdpr_dpo_name" value="<?= esc_attr($dpoName); ?>"/>
|
144 |
-
<em>This will be displayed in the Privacy Policy.</em>
|
145 |
-
|
146 |
-
<label for="gdpr_dpo_email">Data Protection Officer email</label>
|
147 |
-
<input type="email" id="gdpr_dpo_email" name="gdpr_dpo_email" value="<?= esc_attr($dpoEmail); ?>"/>
|
148 |
-
<em>This will be displayed in the Privacy Policy.</em>
|
149 |
-
</p>
|
150 |
-
<hr>
|
151 |
-
</div>
|
152 |
-
|
153 |
-
<h2>Terms & Conditions page</h2>
|
154 |
-
<p>
|
155 |
-
If you have a Terms & Conditions page, we will need to know where it is located. If you don't have a Terms & Conditions page, you can safely skip this step.<br>
|
156 |
-
If you are unsure if you need a T&C page, read this article:
|
157 |
-
<a href="<?= gdpr('helpers')->supportUrl('knowledge-base/do-i-need-a-terms-conditions-page/') ?>" target="_blank">Do I need a Terms & Conditions page?</a>
|
158 |
-
|
159 |
-
<label for="gdpr_has_terms_page">
|
160 |
-
<input
|
161 |
-
type="checkbox"
|
162 |
-
name="gdpr_has_terms_page"
|
163 |
-
id="gdpr_has_terms_page"
|
164 |
-
class="js-gdpr-conditional"
|
165 |
-
data-show=".gdpr-terms-page"
|
166 |
-
value="yes"
|
167 |
-
<?= checked($hasTermsPage, 'yes'); ?>
|
168 |
-
>
|
169 |
-
I have a Terms & Conditions page
|
170 |
-
</label>
|
171 |
-
</p>
|
172 |
-
<p>
|
173 |
-
<span class="gdpr-terms-page hidden">
|
174 |
-
<label for="gdpr_terms_page">Select the page where your Terms & Conditions are displayed</label>
|
175 |
-
<?php if ($termsPageNote): ?>
|
176 |
-
<em><?= esc_html($termsPageNote); ?></em>
|
177 |
-
<?php endif; ?>
|
178 |
-
<?= $termsPageSelector; ?>
|
179 |
-
<br>
|
180 |
-
</span>
|
181 |
-
</p>
|
182 |
-
|
183 |
-
<hr>
|
184 |
-
<br>
|
185 |
-
<input type="submit" class="button button-gdpr button-right" value="Save »" />
|
1 |
+
<h1>
|
2 |
+
Privacy Policy (1/2)
|
3 |
+
</h1>
|
4 |
+
|
5 |
+
<h2>Privacy Policy page</h2>
|
6 |
+
<p>
|
7 |
+
The second major requirement of GDPR is a thorough Privacy Policy that explains all of the rights your customers
|
8 |
+
have and describes how exactly their data is used. We've put together a GDPR-compliant privacy policy template for you.
|
9 |
+
Fill in the fields below and a privacy policy will be generated automatically. Note that you will need to modify it later to suit your website and business. <br>
|
10 |
+
<a href="<?= gdpr('helpers')->docs('guide/setting-up-the-privacy-policy/'); ?>" target="_blank">Read more about the Privacy Policy</a><br><br>
|
11 |
+
If you already have a GDPR-compliant Privacy Policy, simply select the page where it is displayed and skip the rest.
|
12 |
+
<br>
|
13 |
+
</p>
|
14 |
+
|
15 |
+
<fieldset>
|
16 |
+
<label>
|
17 |
+
<input type="radio" name="gdpr_create_policy_page" value="yes" class="js-gdpr-conditional" <?php echo !$policyPage ? 'checked': ''; ?>>
|
18 |
+
Automatically create a new page for Privacy Policy
|
19 |
+
</label>
|
20 |
+
|
21 |
+
<label>
|
22 |
+
<input type="radio" name="gdpr_create_policy_page" value="no" class="js-gdpr-conditional" data-show=".gdpr-select-policy-page" <?php echo $policyPage ? 'checked': ''; ?>> I want to use an existing page
|
23 |
+
</label>
|
24 |
+
</fieldset>
|
25 |
+
|
26 |
+
<p class="gdpr-select-policy-page hidden">
|
27 |
+
<label for="gdpr_policy_page">Select the page where your Privacy Policy will be displayed</label>
|
28 |
+
<?= $policyPageSelector; ?>
|
29 |
+
</p>
|
30 |
+
|
31 |
+
<p>
|
32 |
+
We can generate a somewhat personalized Privacy Policy template for you based on some information you can fill in below.
|
33 |
+
Note that if you're using an existing page, this will overwrite the page contents.
|
34 |
+
|
35 |
+
<label for="gdpr_generate_policy">
|
36 |
+
<input
|
37 |
+
type="checkbox"
|
38 |
+
name="gdpr_generate_policy"
|
39 |
+
id="gdpr_generate_policy"
|
40 |
+
class="js-gdpr-conditional"
|
41 |
+
data-show=".gdpr-generator-fields"
|
42 |
+
value="yes"
|
43 |
+
>
|
44 |
+
Generate Privacy Policy
|
45 |
+
</label>
|
46 |
+
<em>Heads up - this will take some time to configure!</em>
|
47 |
+
</p>
|
48 |
+
|
49 |
+
<hr>
|
50 |
+
|
51 |
+
<div class="gdpr-generator-fields hidden">
|
52 |
+
|
53 |
+
<h2>Company information</h2>
|
54 |
+
<label for="gdpr_company_name">Company legal name</label>
|
55 |
+
<input type="text" id="gdpr_company_name" name="gdpr_company_name" value="<?= esc_attr($companyName); ?>"/>
|
56 |
+
<em>Enter the name of your company. If you are not registered as a company, enter your full name.</em>
|
57 |
+
|
58 |
+
<label for="gdpr_contact_email">Contact email</label>
|
59 |
+
<input type="email" id="gdpr_contact_email" name="gdpr_contact_email" value="<?= esc_attr($contactEmail); ?>"/>
|
60 |
+
<em>
|
61 |
+
Enter the contact email which should be used for GDPR and personal data related inquiries.<br>
|
62 |
+
This email will be displayed in the Privacy Policy.
|
63 |
+
</em>
|
64 |
+
|
65 |
+
<hr>
|
66 |
+
|
67 |
+
<h2>Company location</h2>
|
68 |
+
<label for="gdpr_company_location">Company location</label>
|
69 |
+
<select id="gdpr_company_location" name="gdpr_company_location" class="js-gdpr-select2 gdpr-select js-gdpr-conditional js-gdpr-country-selector">
|
70 |
+
<?= $countryOptions; ?>
|
71 |
+
</select>
|
72 |
+
<em>
|
73 |
+
Select the country where your company is registered. <br>
|
74 |
+
If you are not registered as a company, enter your country of residence.
|
75 |
+
</em>
|
76 |
+
<div class="gdpr-representative hidden">
|
77 |
+
<p>
|
78 |
+
|
79 |
+
If your company is located outside of the EU and the EFTA zone and you do not have a branch inside the EU,
|
80 |
+
GDPR requires you to appoint a representative contact which has to be a person or company located in the EU.
|
81 |
+
<a href="<?= gdpr('helpers')->docs('knowledge-base/do-i-need-to-appoint-an-eu-based-representative/'); ?>" target="_blank">Read more about appointing a representative and your options here</a>.
|
82 |
+
</p>
|
83 |
+
<p>
|
84 |
+
If you have a representative contact, enter the contact details below.
|
85 |
+
|
86 |
+
<label for="gdpr_representative_contact_name">Representative contact name</label>
|
87 |
+
<input type="text" value="<?= esc_attr($representativeContactName); ?>" id="gdpr_representative_contact_name" name="gdpr_representative_contact_name" data />
|
88 |
+
|
89 |
+
<label for="gdpr_representative_contact_email">Representative contact email</label>
|
90 |
+
<input type="email" value="<?= esc_attr($representativeContactEmail); ?>" id="gdpr_representative_contact_email" name="gdpr_representative_contact_email" />
|
91 |
+
|
92 |
+
<label for="gdpr_representative_contact_phone">Representative contact phone</label>
|
93 |
+
<input type="text" value="<?= esc_attr($representativeContactPhone); ?>" id="gdpr_representative_contact_phone" name="gdpr_representative_contact_phone" />
|
94 |
+
|
95 |
+
</p>
|
96 |
+
</div>
|
97 |
+
<br>
|
98 |
+
<hr>
|
99 |
+
|
100 |
+
<h2>Data Protection Authority</h2>
|
101 |
+
<p>
|
102 |
+
You are also obliged to provide the contact of your local supervisory authority.
|
103 |
+
|
104 |
+
<span class="gdpr-representative hidden">
|
105 |
+
<br><br>
|
106 |
+
You are located outside of the EU. This means that you must designate an EU country's data protection authority to be your supervisory authority.
|
107 |
+
Choose the Data Protection Authority of the country where most of your target audience resides. See the <a href="http://ec.europa.eu/justice/data-protection/article-29/structure/data-protection-authorities/index_en.htm" target="_blank">list of contacts here</a>.
|
108 |
+
</span>
|
109 |
+
|
110 |
+
<label for="gdpr_dpa_website">Data Protection Authority website</label>
|
111 |
+
<input type="text" value="<?= esc_attr($dpaWebsite); ?>" id="gdpr_dpa_website" name="gdpr_dpa_website" data-set="<?= esc_attr($dpaWebsite); ?>" />
|
112 |
+
|
113 |
+
<label for="gdpr_dpa_email">Data Protection Authority email</label>
|
114 |
+
<input type="email" value="<?= esc_attr($dpaEmail); ?>" id="gdpr_dpa_email" name="gdpr_dpa_email" data-set="<?= esc_attr($dpaEmail); ?>" />
|
115 |
+
|
116 |
+
<label for="gdpr_dpa_phone">Data Protection Authority phone</label>
|
117 |
+
<input type="text" value="<?= esc_attr($dpaPhone); ?>" id="gdpr_dpa_phone" name="gdpr_dpa_phone" data-set="<?= esc_attr($dpaPhone); ?>" />
|
118 |
+
</p>
|
119 |
+
<script>
|
120 |
+
window.gdprDpaData = <?= $dpaData; ?>;
|
121 |
+
</script>
|
122 |
+
|
123 |
+
<h2>Data Protection Officer</h2>
|
124 |
+
<p>
|
125 |
+
Under some circumstances, GDPR requires you to appoint a Data Protection Officer and display the contacts
|
126 |
+
in your Privacy Policy. If you don't know whether or not you need a DPO, read this article: <a href="<?= gdpr('helpers')->docs('knowledge-base/do-i-need-to-appoint-data-protection-officer-dpo/'); ?>" target="_blank">Do I need a Data Protection Officer?</a>
|
127 |
+
|
128 |
+
<label for="gdpr_has_dpo">
|
129 |
+
<input
|
130 |
+
type="checkbox"
|
131 |
+
name="gdpr_has_dpo"
|
132 |
+
id="gdpr_has_dpo"
|
133 |
+
class="js-gdpr-conditional"
|
134 |
+
data-show=".gdpr-dpo"
|
135 |
+
value="yes"
|
136 |
+
<?= checked($hasDPO, 'yes'); ?>
|
137 |
+
>
|
138 |
+
I have appointed a Data Protection Officer (DPO)
|
139 |
+
</label>
|
140 |
+
</p>
|
141 |
+
<p class="gdpr-dpo hidden">
|
142 |
+
<label for="gdpr_dpo_name">Data Protection Officer name</label>
|
143 |
+
<input type="text" id="gdpr_dpo_name" name="gdpr_dpo_name" value="<?= esc_attr($dpoName); ?>"/>
|
144 |
+
<em>This will be displayed in the Privacy Policy.</em>
|
145 |
+
|
146 |
+
<label for="gdpr_dpo_email">Data Protection Officer email</label>
|
147 |
+
<input type="email" id="gdpr_dpo_email" name="gdpr_dpo_email" value="<?= esc_attr($dpoEmail); ?>"/>
|
148 |
+
<em>This will be displayed in the Privacy Policy.</em>
|
149 |
+
</p>
|
150 |
+
<hr>
|
151 |
+
</div>
|
152 |
+
|
153 |
+
<h2>Terms & Conditions page</h2>
|
154 |
+
<p>
|
155 |
+
If you have a Terms & Conditions page, we will need to know where it is located. If you don't have a Terms & Conditions page, you can safely skip this step.<br>
|
156 |
+
If you are unsure if you need a T&C page, read this article:
|
157 |
+
<a href="<?= gdpr('helpers')->supportUrl('knowledge-base/do-i-need-a-terms-conditions-page/') ?>" target="_blank">Do I need a Terms & Conditions page?</a>
|
158 |
+
|
159 |
+
<label for="gdpr_has_terms_page">
|
160 |
+
<input
|
161 |
+
type="checkbox"
|
162 |
+
name="gdpr_has_terms_page"
|
163 |
+
id="gdpr_has_terms_page"
|
164 |
+
class="js-gdpr-conditional"
|
165 |
+
data-show=".gdpr-terms-page"
|
166 |
+
value="yes"
|
167 |
+
<?= checked($hasTermsPage, 'yes'); ?>
|
168 |
+
>
|
169 |
+
I have a Terms & Conditions page
|
170 |
+
</label>
|
171 |
+
</p>
|
172 |
+
<p>
|
173 |
+
<span class="gdpr-terms-page hidden">
|
174 |
+
<label for="gdpr_terms_page">Select the page where your Terms & Conditions are displayed</label>
|
175 |
+
<?php if ($termsPageNote): ?>
|
176 |
+
<em><?= esc_html($termsPageNote); ?></em>
|
177 |
+
<?php endif; ?>
|
178 |
+
<?= $termsPageSelector; ?>
|
179 |
+
<br>
|
180 |
+
</span>
|
181 |
+
</p>
|
182 |
+
|
183 |
+
<hr>
|
184 |
+
<br>
|
185 |
+
<input type="submit" class="button button-gdpr button-right" value="Save »" />
|
views/installer/steps/welcome.php
CHANGED
@@ -1,18 +1,18 @@
|
|
1 |
-
<h2>
|
2 |
-
Welcome!
|
3 |
-
</h2>
|
4 |
-
<p>
|
5 |
-
<strong>The GDPR setup wizard will guide you through the legal and technical requirements for your site.</strong><br>
|
6 |
-
<br>
|
7 |
-
We have made this process as easy, fast and painless as possible for you. <br>
|
8 |
-
However, you should take some time to read and understand everything. Making your website (and business) properly compliant
|
9 |
-
requires understanding GDPR and how your website works. <br>
|
10 |
-
If you don't have the time to do that, you can always <a href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" target="_blank">request a consultation</a>.
|
11 |
-
</p>
|
12 |
-
<p>
|
13 |
-
The <a href="<?= gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/'); ?>" target="_blank">WordPress Site Owner's Guide to GDPR</a> will help you with any questions you might have during the
|
14 |
-
setup process.
|
15 |
-
</p>
|
16 |
-
<hr>
|
17 |
-
<p>Ready? Let's get this done!</p>
|
18 |
-
<input type="submit" class="button button-gdpr button-large button-gdpr-large button-center" value="Get started" />
|
1 |
+
<h2>
|
2 |
+
Welcome!
|
3 |
+
</h2>
|
4 |
+
<p>
|
5 |
+
<strong>The GDPR setup wizard will guide you through the legal and technical requirements for your site.</strong><br>
|
6 |
+
<br>
|
7 |
+
We have made this process as easy, fast and painless as possible for you. <br>
|
8 |
+
However, you should take some time to read and understand everything. Making your website (and business) properly compliant
|
9 |
+
requires understanding GDPR and how your website works. <br>
|
10 |
+
If you don't have the time to do that, you can always <a href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" target="_blank">request a consultation</a>.
|
11 |
+
</p>
|
12 |
+
<p>
|
13 |
+
The <a href="<?= gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/'); ?>" target="_blank">WordPress Site Owner's Guide to GDPR</a> will help you with any questions you might have during the
|
14 |
+
setup process.
|
15 |
+
</p>
|
16 |
+
<hr>
|
17 |
+
<p>Ready? Let's get this done!</p>
|
18 |
+
<input type="submit" class="button button-gdpr button-large button-gdpr-large button-center" value="Get started" />
|
views/installer/welcome-notice.php
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
-
<p>
|
2 |
-
The GDPR Framework has not been set up yet. Would you like to do that? <br>
|
3 |
-
Our setup wizard will guide you through the process. <br>
|
4 |
-
You can also configure the plugin manually by going to <a href="<?= gdpr('helpers')->getAdminUrl(); ?>">Tools > Privacy</a>.
|
5 |
-
</p>
|
6 |
-
|
7 |
-
<a class="button button-primary" href="<?= $installerUrl; ?>">
|
8 |
-
<?= _x('Run the setup wizard', '(Admin)', 'gdpr-framework'); ?>
|
9 |
-
</a>
|
10 |
-
|
11 |
-
<a class="button button-secondary" href="<?= $autoInstallUrl; ?>">
|
12 |
-
<?= _x('Auto-install pages', '(Admin)', 'gdpr-framework'); ?>
|
13 |
-
</a>
|
14 |
-
|
15 |
-
<a class="button button-secondary" href="<?= $skipUrl; ?>">
|
16 |
-
<?= _x('Skip and install manually', '(Admin)', 'gdpr-framework'); ?>
|
17 |
-
</a>
|
1 |
+
<p>
|
2 |
+
The GDPR Framework has not been set up yet. Would you like to do that? <br>
|
3 |
+
Our setup wizard will guide you through the process. <br>
|
4 |
+
You can also configure the plugin manually by going to <a href="<?= gdpr('helpers')->getAdminUrl(); ?>">Tools > Privacy</a>.
|
5 |
+
</p>
|
6 |
+
|
7 |
+
<a class="button button-primary" href="<?= $installerUrl; ?>">
|
8 |
+
<?= _x('Run the setup wizard', '(Admin)', 'gdpr-framework'); ?>
|
9 |
+
</a>
|
10 |
+
|
11 |
+
<a class="button button-secondary" href="<?= $autoInstallUrl; ?>">
|
12 |
+
<?= _x('Auto-install pages', '(Admin)', 'gdpr-framework'); ?>
|
13 |
+
</a>
|
14 |
+
|
15 |
+
<a class="button button-secondary" href="<?= $skipUrl; ?>">
|
16 |
+
<?= _x('Skip and install manually', '(Admin)', 'gdpr-framework'); ?>
|
17 |
+
</a>
|
views/modules/contact-form-7/content-privacy.php
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
-
<?= sprintf(
|
2 |
-
__('I accept the %sPrivacy Policy%s', 'gdpr-framework'),
|
3 |
-
"<a href='{$privacyPolicyUrl}' target='_blank'>",
|
4 |
-
'</a>'
|
5 |
-
); ?>
|
1 |
+
<?= sprintf(
|
2 |
+
__('I accept the %sPrivacy Policy%s', 'gdpr-framework'),
|
3 |
+
"<a href='{$privacyPolicyUrl}' target='_blank'>",
|
4 |
+
'</a>'
|
5 |
+
); ?>
|
views/modules/contact-form-7/generator-privacy.php
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
-
<div class="control-box">
|
2 |
-
<fieldset>
|
3 |
-
<legend><?php echo sprintf(esc_html($description), $descLink); ?></legend>
|
4 |
-
</fieldset>
|
5 |
-
<p>
|
6 |
-
<?= _x('This tag generates the default text for Terms & Conditions and/or Privacy Policy checkbox.', '(Admin)', 'gdpr-framework'); ?> <br/>
|
7 |
-
</p>
|
8 |
-
</div>
|
9 |
-
|
10 |
-
<div class="insert-box">
|
11 |
-
<input type="text" name="asdf" class="tag code" readonly="readonly" onfocus="this.select()"/>
|
12 |
-
|
13 |
-
<div class="submitbox">
|
14 |
-
<input type="button" class="button button-primary insert-tag"
|
15 |
-
value="<?php echo esc_attr(__('Insert', 'contact-form-7')); ?>"/>
|
16 |
-
</div>
|
17 |
-
</div>
|
1 |
+
<div class="control-box">
|
2 |
+
<fieldset>
|
3 |
+
<legend><?php echo sprintf(esc_html($description), $descLink); ?></legend>
|
4 |
+
</fieldset>
|
5 |
+
<p>
|
6 |
+
<?= _x('This tag generates the default text for Terms & Conditions and/or Privacy Policy checkbox.', '(Admin)', 'gdpr-framework'); ?> <br/>
|
7 |
+
</p>
|
8 |
+
</div>
|
9 |
+
|
10 |
+
<div class="insert-box">
|
11 |
+
<input type="text" name="asdf" class="tag code" readonly="readonly" onfocus="this.select()"/>
|
12 |
+
|
13 |
+
<div class="submitbox">
|
14 |
+
<input type="button" class="button button-primary insert-tag"
|
15 |
+
value="<?php echo esc_attr(__('Insert', 'contact-form-7')); ?>"/>
|
16 |
+
</div>
|
17 |
+
</div>
|
views/modules/wordpress-comments/terms-checkbox.php
CHANGED
@@ -1,20 +1,20 @@
|
|
1 |
-
<p class="gdpr-terms-container">
|
2 |
-
<label>
|
3 |
-
<input type="checkbox" required name="gdpr_terms" id="gdpr_terms" value="1" />
|
4 |
-
<?php if ($termsUrl): ?>
|
5 |
-
<?= sprintf(
|
6 |
-
__('I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s', 'gdpr-framework'),
|
7 |
-
"<a href='{$termsUrl}' target='_blank'>",
|
8 |
-
'</a>',
|
9 |
-
"<a href='{$privacyPolicyUrl}' target='_blank'>",
|
10 |
-
'</a>'
|
11 |
-
); ?>
|
12 |
-
<?php else: ?>
|
13 |
-
<?= sprintf(
|
14 |
-
__('I accept the %sPrivacy Policy%s', 'gdpr-framework'),
|
15 |
-
"<a href='{$privacyPolicyUrl}' target='_blank'>",
|
16 |
-
'</a>'
|
17 |
-
); ?>
|
18 |
-
<?php endif; ?>*
|
19 |
-
</label>
|
20 |
-
</p>
|
1 |
+
<p class="gdpr-terms-container">
|
2 |
+
<label>
|
3 |
+
<input type="checkbox" required name="gdpr_terms" id="gdpr_terms" value="1" />
|
4 |
+
<?php if ($termsUrl): ?>
|
5 |
+
<?= sprintf(
|
6 |
+
__('I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s', 'gdpr-framework'),
|
7 |
+
"<a href='{$termsUrl}' target='_blank'>",
|
8 |
+
'</a>',
|
9 |
+
"<a href='{$privacyPolicyUrl}' target='_blank'>",
|
10 |
+
'</a>'
|
11 |
+
); ?>
|
12 |
+
<?php else: ?>
|
13 |
+
<?= sprintf(
|
14 |
+
__('I accept the %sPrivacy Policy%s', 'gdpr-framework'),
|
15 |
+
"<a href='{$privacyPolicyUrl}' target='_blank'>",
|
16 |
+
'</a>'
|
17 |
+
); ?>
|
18 |
+
<?php endif; ?>*
|
19 |
+
</label>
|
20 |
+
</p>
|
views/modules/wordpress-user/dashboard/data-page/form-consent.php
CHANGED
@@ -1,39 +1,39 @@
|
|
1 |
-
<?php if (count($consentData) or $consentInfo): ?>
|
2 |
-
<hr>
|
3 |
-
<h2><?= __('Consent', 'gdpr-framework'); ?></h2>
|
4 |
-
<?php if (count($consentData)): ?>
|
5 |
-
<form method="post">
|
6 |
-
<p><?= __('Here you can withdraw any consents you have given.', 'gdpr-framework'); ?></p>
|
7 |
-
<table class="gdpr-consent gdpr-consent-user">
|
8 |
-
<th colspan="3"><?= __('Consents', 'gdpr-framework'); ?></th>
|
9 |
-
<?php foreach ($consentData as $item): ?>
|
10 |
-
<tr>
|
11 |
-
<td>
|
12 |
-
✔
|
13 |
-
</td>
|
14 |
-
<td class="gdpr-consent-user-title">
|
15 |
-
<?= $item['title']; ?>
|
16 |
-
</td>
|
17 |
-
<td class="gdpr-consent-user-desc">
|
18 |
-
<?= $item['description']; ?>
|
19 |
-
</td>
|
20 |
-
<td>
|
21 |
-
<?php if ('privacy-policy' !== $item['slug']): ?>
|
22 |
-
<a href="<?= esc_url($item['withdraw_url']); ?>" class="button button-primary">
|
23 |
-
<?= __('Withdraw', 'gdpr-framework'); ?>
|
24 |
-
</a>
|
25 |
-
<?php endif; ?>
|
26 |
-
</td>
|
27 |
-
</tr>
|
28 |
-
<?php endforeach; ?>
|
29 |
-
</table>
|
30 |
-
</form>
|
31 |
-
<?php endif; ?>
|
32 |
-
|
33 |
-
<?php if ($consentInfo): ?>
|
34 |
-
<p class="gdpr-consent-disclaimer">
|
35 |
-
<em><?= $consentInfo; ?></em>
|
36 |
-
</p>
|
37 |
-
<?php endif; ?>
|
38 |
-
|
39 |
-
<?php endif; ?>
|
1 |
+
<?php if (count($consentData) or $consentInfo): ?>
|
2 |
+
<hr>
|
3 |
+
<h2><?= __('Consent', 'gdpr-framework'); ?></h2>
|
4 |
+
<?php if (count($consentData)): ?>
|
5 |
+
<form method="post">
|
6 |
+
<p><?= __('Here you can withdraw any consents you have given.', 'gdpr-framework'); ?></p>
|
7 |
+
<table class="gdpr-consent gdpr-consent-user">
|
8 |
+
<th colspan="3"><?= __('Consents', 'gdpr-framework'); ?></th>
|
9 |
+
<?php foreach ($consentData as $item): ?>
|
10 |
+
<tr>
|
11 |
+
<td>
|
12 |
+
✔
|
13 |
+
</td>
|
14 |
+
<td class="gdpr-consent-user-title">
|
15 |
+
<?= $item['title']; ?>
|
16 |
+
</td>
|
17 |
+
<td class="gdpr-consent-user-desc">
|
18 |
+
<?= $item['description']; ?>
|
19 |
+
</td>
|
20 |
+
<td>
|
21 |
+
<?php if ('privacy-policy' !== $item['slug']): ?>
|
22 |
+
<a href="<?= esc_url($item['withdraw_url']); ?>" class="button button-primary">
|
23 |
+
<?= __('Withdraw', 'gdpr-framework'); ?>
|
24 |
+
</a>
|
25 |
+
<?php endif; ?>
|
26 |
+
</td>
|
27 |
+
</tr>
|
28 |
+
<?php endforeach; ?>
|
29 |
+
</table>
|
30 |
+
</form>
|
31 |
+
<?php endif; ?>
|
32 |
+
|
33 |
+
<?php if ($consentInfo): ?>
|
34 |
+
<p class="gdpr-consent-disclaimer">
|
35 |
+
<em><?= $consentInfo; ?></em>
|
36 |
+
</p>
|
37 |
+
<?php endif; ?>
|
38 |
+
|
39 |
+
<?php endif; ?>
|
views/modules/wordpress-user/dashboard/data-page/form-delete.php
CHANGED
@@ -1,30 +1,30 @@
|
|
1 |
-
<table class="form-table">
|
2 |
-
<tr>
|
3 |
-
<th>
|
4 |
-
<label>
|
5 |
-
<?= _x('Delete this user and all data', '(Admin)', 'gdpr-framework') ?>
|
6 |
-
</label>
|
7 |
-
</th>
|
8 |
-
<td>
|
9 |
-
<?php if ($showDelete): ?>
|
10 |
-
<a class="button" href="<?= esc_url($url); ?>">
|
11 |
-
<?= _x('Delete my data', '(Admin)', 'gdpr-framework') ?>
|
12 |
-
</a>
|
13 |
-
<br/>
|
14 |
-
<p class="description">
|
15 |
-
<?= __('Delete all data we have gathered about you.', 'gdpr-framework') ?> <br/>
|
16 |
-
<?= __('If you have a user account on our site, it will also be deleted.', 'gdpr-framework') ?> <br/>
|
17 |
-
<?= __('Be careful - this action is permanent and CANNOT be undone.', 'gdpr-framework') ?>
|
18 |
-
</p>
|
19 |
-
<?php else: ?>
|
20 |
-
<p>
|
21 |
-
<em>
|
22 |
-
<?= _x('You seem to have an administrator or equivalent role, so deleting/anonymizing via this page is disabled.', '(Admin)', 'gdpr-framework'); ?>
|
23 |
-
</em>
|
24 |
-
</p>
|
25 |
-
<?php endif; ?>
|
26 |
-
</td>
|
27 |
-
</tr>
|
28 |
-
</table>
|
29 |
-
|
30 |
-
|
1 |
+
<table class="form-table">
|
2 |
+
<tr>
|
3 |
+
<th>
|
4 |
+
<label>
|
5 |
+
<?= _x('Delete this user and all data', '(Admin)', 'gdpr-framework') ?>
|
6 |
+
</label>
|
7 |
+
</th>
|
8 |
+
<td>
|
9 |
+
<?php if ($showDelete): ?>
|
10 |
+
<a class="button" href="<?= esc_url($url); ?>">
|
11 |
+
<?= _x('Delete my data', '(Admin)', 'gdpr-framework') ?>
|
12 |
+
</a>
|
13 |
+
<br/>
|
14 |
+
<p class="description">
|
15 |
+
<?= __('Delete all data we have gathered about you.', 'gdpr-framework') ?> <br/>
|
16 |
+
<?= __('If you have a user account on our site, it will also be deleted.', 'gdpr-framework') ?> <br/>
|
17 |
+
<?= __('Be careful - this action is permanent and CANNOT be undone.', 'gdpr-framework') ?>
|
18 |
+
</p>
|
19 |
+
<?php else: ?>
|
20 |
+
<p>
|
21 |
+
<em>
|
22 |
+
<?= _x('You seem to have an administrator or equivalent role, so deleting/anonymizing via this page is disabled.', '(Admin)', 'gdpr-framework'); ?>
|
23 |
+
</em>
|
24 |
+
</p>
|
25 |
+
<?php endif; ?>
|
26 |
+
</td>
|
27 |
+
</tr>
|
28 |
+
</table>
|
29 |
+
|
30 |
+
|
views/modules/wordpress-user/dashboard/data-page/header.php
CHANGED
@@ -1,3 +1,3 @@
|
|
1 |
-
<h2>
|
2 |
-
<?= _x('Privacy Tools', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</h2>
|
1 |
+
<h2>
|
2 |
+
<?= _x('Privacy Tools', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</h2>
|
views/modules/wordpress-user/dashboard/form-export.php
CHANGED
@@ -1,24 +1,24 @@
|
|
1 |
-
<hr>
|
2 |
-
|
3 |
-
<table class="form-table">
|
4 |
-
<tr>
|
5 |
-
<th>
|
6 |
-
<label>
|
7 |
-
<?= __('Download your data', 'gdpr-framework') ?>
|
8 |
-
</label>
|
9 |
-
</th>
|
10 |
-
<td>
|
11 |
-
<a class="button button-primary" href="<?= esc_url($exportHTMLUrl); ?>">
|
12 |
-
<?= __('Download as table', 'gdpr-framework') ?>
|
13 |
-
</a>
|
14 |
-
<a class="button button-primary" href="<?= esc_url($exportJSONUrl); ?>">
|
15 |
-
<?= __('Export as JSON', 'gdpr-framework') ?>
|
16 |
-
</a>
|
17 |
-
<br />
|
18 |
-
<p class="description">
|
19 |
-
<?= __('You can download all your data formatted as a table for viewing.', 'gdpr-framework') ?> <br>
|
20 |
-
<?= __('Alternatively, you can export it in machine-readable JSON format.', 'gdpr-framework') ?>
|
21 |
-
</p>
|
22 |
-
</td>
|
23 |
-
</tr>
|
24 |
-
</table>
|
1 |
+
<hr>
|
2 |
+
|
3 |
+
<table class="form-table">
|
4 |
+
<tr>
|
5 |
+
<th>
|
6 |
+
<label>
|
7 |
+
<?= __('Download your data', 'gdpr-framework') ?>
|
8 |
+
</label>
|
9 |
+
</th>
|
10 |
+
<td>
|
11 |
+
<a class="button button-primary" href="<?= esc_url($exportHTMLUrl); ?>">
|
12 |
+
<?= __('Download as table', 'gdpr-framework') ?>
|
13 |
+
</a>
|
14 |
+
<a class="button button-primary" href="<?= esc_url($exportJSONUrl); ?>">
|
15 |
+
<?= __('Export as JSON', 'gdpr-framework') ?>
|
16 |
+
</a>
|
17 |
+
<br />
|
18 |
+
<p class="description">
|
19 |
+
<?= __('You can download all your data formatted as a table for viewing.', 'gdpr-framework') ?> <br>
|
20 |
+
<?= __('Alternatively, you can export it in machine-readable JSON format.', 'gdpr-framework') ?>
|
21 |
+
</p>
|
22 |
+
</td>
|
23 |
+
</tr>
|
24 |
+
</table>
|
views/modules/wordpress-user/dashboard/profile-page/form-delete.php
CHANGED
@@ -1,29 +1,29 @@
|
|
1 |
-
<table class="form-table">
|
2 |
-
<tr>
|
3 |
-
<th>
|
4 |
-
<label>
|
5 |
-
<?= _x('Delete this user and all data', '(Admin)', 'gdpr-framework') ?>
|
6 |
-
</label>
|
7 |
-
</th>
|
8 |
-
<td>
|
9 |
-
<?php if ($showDelete): ?>
|
10 |
-
<a class="button" href="<?= esc_url($deleteUrl); ?>">
|
11 |
-
<?= _x('Delete user and all data', '(Admin)', 'gdpr-framework') ?>
|
12 |
-
</a>
|
13 |
-
<a class="button" href="<?= esc_url($anonymizeUrl); ?>">
|
14 |
-
<?= _x('Anonymize user and all data', '(Admin)', 'gdpr-framework') ?>
|
15 |
-
</a>
|
16 |
-
<br/>
|
17 |
-
<p class="description">
|
18 |
-
<?= _x('Be careful - this action is permanent and CANNOT be undone.', 'gdpr-framework') ?>
|
19 |
-
</p>
|
20 |
-
<?php else: ?>
|
21 |
-
<p>
|
22 |
-
<em>
|
23 |
-
<?= _x('You seem to have an administrator or equivalent role, so deleting/anonymizing via this page is disabled.', '(Admin)', 'gdpr-framework'); ?>
|
24 |
-
</em>
|
25 |
-
</p>
|
26 |
-
<?php endif; ?>
|
27 |
-
</td>
|
28 |
-
</tr>
|
29 |
-
</table>
|
1 |
+
<table class="form-table">
|
2 |
+
<tr>
|
3 |
+
<th>
|
4 |
+
<label>
|
5 |
+
<?= _x('Delete this user and all data', '(Admin)', 'gdpr-framework') ?>
|
6 |
+
</label>
|
7 |
+
</th>
|
8 |
+
<td>
|
9 |
+
<?php if ($showDelete): ?>
|
10 |
+
<a class="button" href="<?= esc_url($deleteUrl); ?>">
|
11 |
+
<?= _x('Delete user and all data', '(Admin)', 'gdpr-framework') ?>
|
12 |
+
</a>
|
13 |
+
<a class="button" href="<?= esc_url($anonymizeUrl); ?>">
|
14 |
+
<?= _x('Anonymize user and all data', '(Admin)', 'gdpr-framework') ?>
|
15 |
+
</a>
|
16 |
+
<br/>
|
17 |
+
<p class="description">
|
18 |
+
<?= _x('Be careful - this action is permanent and CANNOT be undone.', 'gdpr-framework') ?>
|
19 |
+
</p>
|
20 |
+
<?php else: ?>
|
21 |
+
<p>
|
22 |
+
<em>
|
23 |
+
<?= _x('You seem to have an administrator or equivalent role, so deleting/anonymizing via this page is disabled.', '(Admin)', 'gdpr-framework'); ?>
|
24 |
+
</em>
|
25 |
+
</p>
|
26 |
+
<?php endif; ?>
|
27 |
+
</td>
|
28 |
+
</tr>
|
29 |
+
</table>
|
views/modules/wordpress-user/dashboard/profile-page/header.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
<h2>
|
2 |
-
<?= _x('GDPR Data', '(Admin)', 'gdpr-framework'); ?>
|
3 |
-
</h2>
|
4 |
-
<?php if ($isAnonymized): ?>
|
5 |
-
<p>
|
6 |
-
<em><?= _x('This user has been anonymized.', '(Admin)', 'gdpr-framework'); ?></em>
|
7 |
-
</p>
|
8 |
-
<?php endif; ?>
|
1 |
+
<h2>
|
2 |
+
<?= _x('GDPR Data', '(Admin)', 'gdpr-framework'); ?>
|
3 |
+
</h2>
|
4 |
+
<?php if ($isAnonymized): ?>
|
5 |
+
<p>
|
6 |
+
<em><?= _x('This user has been anonymized.', '(Admin)', 'gdpr-framework'); ?></em>
|
7 |
+
</p>
|
8 |
+
<?php endif; ?>
|
views/modules/wordpress-user/dashboard/profile-page/table-consent.php
CHANGED
@@ -1,18 +1,18 @@
|
|
1 |
-
<hr>
|
2 |
-
<?php if (count($consentData)): ?>
|
3 |
-
<table class="gdpr-consent">
|
4 |
-
<th colspan="2"><?= _x('Consents given', '(Admin)', 'gdpr-framework'); ?></th>
|
5 |
-
<?php foreach ($consentData as $item): ?>
|
6 |
-
<tr>
|
7 |
-
<td>
|
8 |
-
✔
|
9 |
-
</td>
|
10 |
-
<td>
|
11 |
-
<?= $item['title']; ?>
|
12 |
-
</td>
|
13 |
-
</tr>
|
14 |
-
<?php endforeach; ?>
|
15 |
-
</table>
|
16 |
-
<?php else: ?>
|
17 |
-
<p><?= _x('No consents given', '(Admin)', 'gdpr-framework'); ?>.</p>
|
18 |
-
<?php endif; ?>
|
1 |
+
<hr>
|
2 |
+
<?php if (count($consentData)): ?>
|
3 |
+
<table class="gdpr-consent">
|
4 |
+
<th colspan="2"><?= _x('Consents given', '(Admin)', 'gdpr-framework'); ?></th>
|
5 |
+
<?php foreach ($consentData as $item): ?>
|
6 |
+
<tr>
|
7 |
+
<td>
|
8 |
+
✔
|
9 |
+
</td>
|
10 |
+
<td>
|
11 |
+
<?= $item['title']; ?>
|
12 |
+
</td>
|
13 |
+
</tr>
|
14 |
+
<?php endforeach; ?>
|
15 |
+
</table>
|
16 |
+
<?php else: ?>
|
17 |
+
<p><?= _x('No consents given', '(Admin)', 'gdpr-framework'); ?>.</p>
|
18 |
+
<?php endif; ?>
|
views/modules/wordpress-user/registration-terms-checkbox.php
CHANGED
@@ -1,21 +1,21 @@
|
|
1 |
-
<p class="gdpr-terms-container" style="margin-bottom: 10px">
|
2 |
-
<label>
|
3 |
-
<input type="checkbox" required name="gdpr_terms" id="gdpr_terms" value="1" />
|
4 |
-
|
5 |
-
<?php if ($termsUrl): ?>
|
6 |
-
<?= sprintf(
|
7 |
-
__('I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s', 'gdpr-framework'),
|
8 |
-
"<a href='{$termsUrl}' target='_blank'>",
|
9 |
-
'</a>',
|
10 |
-
"<a href='{$privacyPolicyUrl}' target='_blank'>",
|
11 |
-
'</a>'
|
12 |
-
); ?>
|
13 |
-
<?php else: ?>
|
14 |
-
<?= sprintf(
|
15 |
-
__('I accept the %sPrivacy Policy%s', 'gdpr-framework'),
|
16 |
-
"<a href='{$privacyPolicyUrl}' target='_blank'>",
|
17 |
-
'</a>'
|
18 |
-
); ?>
|
19 |
-
<?php endif; ?>*
|
20 |
-
</label>
|
21 |
-
</p>
|
1 |
+
<p class="gdpr-terms-container" style="margin-bottom: 10px">
|
2 |
+
<label>
|
3 |
+
<input type="checkbox" required name="gdpr_terms" id="gdpr_terms" value="1" />
|
4 |
+
|
5 |
+
<?php if ($termsUrl): ?>
|
6 |
+
<?= sprintf(
|
7 |
+
__('I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s', 'gdpr-framework'),
|
8 |
+
"<a href='{$termsUrl}' target='_blank'>",
|
9 |
+
'</a>',
|
10 |
+
"<a href='{$privacyPolicyUrl}' target='_blank'>",
|
11 |
+
'</a>'
|
12 |
+
); ?>
|
13 |
+
<?php else: ?>
|
14 |
+
<?= sprintf(
|
15 |
+
__('I accept the %sPrivacy Policy%s', 'gdpr-framework'),
|
16 |
+
"<a href='{$privacyPolicyUrl}' target='_blank'>",
|
17 |
+
'</a>'
|
18 |
+
); ?>
|
19 |
+
<?php endif; ?>*
|
20 |
+
</label>
|
21 |
+
</p>
|
views/policy/policy.php
CHANGED
@@ -1,283 +1,283 @@
|
|
1 |
-
<h2>Privacy Policy</h2>
|
2 |
-
<p>
|
3 |
-
<?= esc_html($companyName); ?> is committed to safeguarding your privacy. Contact us at <a href="mailto:<?= esc_attr($contactEmail); ?>"><?= esc_html($contactEmail); ?></a> if you have any questions or problems regarding the use of your Personal Data and we will gladly assist you.
|
4 |
-
</p>
|
5 |
-
<p>
|
6 |
-
By using this site or/and our services, you consent to the Processing of your Personal Data as described in this Privacy Policy.
|
7 |
-
<?php if ($hasTerms): ?>
|
8 |
-
This Privacy Policy is a part of our Terms and Conditions; by agreeing to Terms and Conditions you also agree to this Policy. In the event of collision of terms used in Terms and Conditions and Privacy Policy, the latter shall prevail.
|
9 |
-
<?php endif; ?>
|
10 |
-
</p>
|
11 |
-
|
12 |
-
|
13 |
-
<h3>Table of Contents</h3>
|
14 |
-
<ol>
|
15 |
-
<li><a href="#gdpr-definitions">Definitions used in this Policy</a></li>
|
16 |
-
<li><a href="#gdpr-principles">Data protection principles we follow</a></li>
|
17 |
-
<li><a href="#gdpr-rights">What rights do you have regarding your Personal Data</a></li>
|
18 |
-
<li><a href="#gdpr-information">What Personal Data we gather about you</a></li>
|
19 |
-
<li><a href="#gdpr-processing">How we use your Personal Data</a></li>
|
20 |
-
<li><a href="#gdpr-sharing">Who else has access to your Personal Data</a></li>
|
21 |
-
<li><a href="#gdpr-security">How we secure your data</a></li>
|
22 |
-
<li><a href="#gdpr-cookies">Information about cookies</a></li>
|
23 |
-
<li><a href="#gdpr-contact">Contact information</a></li>
|
24 |
-
</ol>
|
25 |
-
|
26 |
-
|
27 |
-
<h3 id="gdpr-definitions">Definitions</h3>
|
28 |
-
<p>
|
29 |
-
<strong>Personal Data</strong> – any information relating to an identified or identifiable natural person.
|
30 |
-
<strong>Processing</strong> – any operation or set of operations which is performed on Personal Data or on sets of Personal Data.
|
31 |
-
<strong>Data subject</strong> - a natural person whose Personal Data is being Processed.
|
32 |
-
<strong>Child</strong> - a natural person under 16 years of age.
|
33 |
-
<strong>We/us</strong> (either capitalized or not) – <?= esc_html($companyName); ?>
|
34 |
-
</p>
|
35 |
-
|
36 |
-
|
37 |
-
<h3 id="gdpr-principles">Data Protection Principles</h3>
|
38 |
-
<p>
|
39 |
-
We promise to follow the following data protection principles:
|
40 |
-
</p>
|
41 |
-
<ul>
|
42 |
-
<li>
|
43 |
-
Processing is lawful, fair, transparent. Our Processing activities have lawful grounds. We always consider your rights before Processing Personal Data. We will provide you information regarding Processing upon request.
|
44 |
-
<li>
|
45 |
-
Processing is limited to the purpose. Our Processing activities fit the purpose for which Personal Data was gathered.
|
46 |
-
</li>
|
47 |
-
<li>
|
48 |
-
Processing is done with minimal data. We only gather and Process the minimal amount of Personal Data required for any purpose.
|
49 |
-
</li>
|
50 |
-
<li>
|
51 |
-
Processing is limited with a time period. We will not store your personal data for longer than needed.
|
52 |
-
</li>
|
53 |
-
<li>
|
54 |
-
We will do our best to ensure the accuracy of data.
|
55 |
-
</li>
|
56 |
-
<li>
|
57 |
-
We will do our best to ensure the integrity and confidentiality of data.
|
58 |
-
</li>
|
59 |
-
</ul>
|
60 |
-
|
61 |
-
|
62 |
-
<h3 id="gdpr-rights">Data Subject's rights</h3>
|
63 |
-
<p>
|
64 |
-
The Data Subject has the following rights:
|
65 |
-
</p>
|
66 |
-
<ol>
|
67 |
-
<li>Right to information – meaning you have to right to know whether your Personal Data is being processed; what data is gathered, from where it is obtained and why and by whom it is processed.</li>
|
68 |
-
<li>Right to access – meaning you have the right to access the data collected from/about you. This includes your right to request and obtain a copy of your Personal Data gathered.</li>
|
69 |
-
<li>Right to rectification – meaning you have the right to request rectification or erasure of your Personal Data that is inaccurate or incomplete.</li>
|
70 |
-
<li>Right to erasure – meaning in certain circumstances you can request for your Personal Data to be erased from our records.</li>
|
71 |
-
<li>Right to restrict processing – meaning where certain conditions apply, you have the right to restrict the Processing of your Personal Data.</li>
|
72 |
-
<li>Right to object to processing – meaning in certain cases you have the right to object to Processing of your Personal Data, for example in the case of direct marketing.</li>
|
73 |
-
<li>Right to object to automated Processing – meaning you have the right to object to automated Processing, including profiling; and not to be subject to a decision based solely on automated Processing. This right you can exercise whenever there is an outcome of the profiling that produces legal effects concerning or significantly affecting you.</li>
|
74 |
-
<li>Right to data portability – you have the right to obtain your Personal Data in a machine-readable format or if it is feasible, as a direct transfer from one Processor to another.</li>
|
75 |
-
<li>Right to lodge a complaint – in the event that we refuse your request under the Rights of Access, we will provide you with a reason as to why. If you are not satisfied with the way your request has been handled please contact us.</li>
|
76 |
-
<li>Right for the help of <a href="#gdpr-contact">supervisory authority</a> – meaning you have the right for the help of a supervisory authority and the right for other legal remedies such as claiming damages.</li>
|
77 |
-
<li>Right to withdraw consent – you have the right withdraw any given consent for Processing of your Personal Data.</li>
|
78 |
-
</ol>
|
79 |
-
|
80 |
-
|
81 |
-
<h3 id="gdpr-information">Data we gather</h3>
|
82 |
-
<p>
|
83 |
-
<strong>[TODO] - Information you have provided us with</strong><br>
|
84 |
-
This might be your e-mail address, name, billing address, home address etc – mainly information that is necessary for delivering you a product/service or to enhance your customer experience with us. We save the information you provide us with in order for you to comment or perform other activities on the website. This information includes, for example, your name and e-mail address.
|
85 |
-
</p>
|
86 |
-
<p>
|
87 |
-
<strong>[TODO] - Information automatically collected about you</strong><br>
|
88 |
-
This includes information that is automatically stored by cookies and other session tools. For example, your shopping cart information, your IP address, your shopping history (if there is any) etc. This information is used to improve your customer experience. When you use our services or look at the contents of our website, your activities may be logged.
|
89 |
-
</p>
|
90 |
-
|
91 |
-
<p>
|
92 |
-
<strong>[TODO] - Information from our partners</strong><br>
|
93 |
-
We gather information from our trusted partners with confirmation that they have legal grounds to share that information with us. This is either information you have provided them directly with or that they have gathered about you on other legal grounds. See the list of our partners <a href="#gdpr-sharing">here</a>.
|
94 |
-
</p>
|
95 |
-
|
96 |
-
<p>
|
97 |
-
<strong>Publicly available information</strong><br>
|
98 |
-
We might gather information about you that is publicly available.
|
99 |
-
</p>
|
100 |
-
|
101 |
-
|
102 |
-
<h3 id="gdpr-processing">How we use your Personal Data</h3>
|
103 |
-
|
104 |
-
<p>
|
105 |
-
We use your Personal Data in order to:
|
106 |
-
</p>
|
107 |
-
<ul>
|
108 |
-
<li>provide our service to you. This includes for example registering your account; providing you with other products and services that you have requested; providing you with promotional items at your request and communicating with you in relation to those products and services; communicating and interacting with you; and notifying you of changes to any services.</li>
|
109 |
-
<li>enhance your customer experience;</li>
|
110 |
-
<li>fulfil an obligation under law or contract;</li>
|
111 |
-
<li><strong>[TODO]</strong></li>
|
112 |
-
</ul>
|
113 |
-
|
114 |
-
<p>
|
115 |
-
We use your Personal Data on legitimate grounds and/or with your Consent.
|
116 |
-
</p>
|
117 |
-
|
118 |
-
<p>
|
119 |
-
On the grounds of entering into a contract or fulfilling contractual obligations, we Process your Personal Data for the following purposes:
|
120 |
-
</p>
|
121 |
-
<ul>
|
122 |
-
<li>to identify you;</li>
|
123 |
-
<li>to provide you a service or to send/offer you a product;</li>
|
124 |
-
<li>to communicate either for sales or invoicing;</li>
|
125 |
-
<li><strong>[TODO]</strong></li>
|
126 |
-
</ul>
|
127 |
-
|
128 |
-
<p>
|
129 |
-
On the ground of legitimate interest, we Process your Personal Data for the following purposes:
|
130 |
-
</p>
|
131 |
-
<ul>
|
132 |
-
<li>to send you personalized offers* (from us and/or our carefully selected partners);</li>
|
133 |
-
<li>to administer and analyse our client base (purchasing behaviour and history) in order to improve the quality, variety, and availability of products/ services offered/provided;</li>
|
134 |
-
<li>to conduct questionnaires concerning client satisfaction;</li>
|
135 |
-
<li><strong>[TODO]</strong></li>
|
136 |
-
</ul>
|
137 |
-
<p>
|
138 |
-
As long as you have not informed us otherwise, we consider offering you products/services that are similar or same to your purchasing history/browsing behaviour to be our legitimate interest.
|
139 |
-
</p>
|
140 |
-
|
141 |
-
<p>
|
142 |
-
With your consent we Process your Personal Data for the following purposes:
|
143 |
-
</p>
|
144 |
-
<ul>
|
145 |
-
<li>to send you newsletters and campaign offers (from us and/or our carefully selected partners);</li>
|
146 |
-
<li>for other purposes we have asked your consent for;</li>
|
147 |
-
<li><strong>[TODO]</strong></li>
|
148 |
-
</ul>
|
149 |
-
|
150 |
-
<p>
|
151 |
-
We Process your Personal Data in order to fulfil obligation rising from law and/or use your Personal Data for options provided by law. We
|
152 |
-
</p>
|
153 |
-
|
154 |
-
<p>
|
155 |
-
We might process your Personal Data for additional purposes that are not mentioned here, but are compatible with the original purpose for which the data was gathered. To do this, we will ensure that:
|
156 |
-
</p>
|
157 |
-
<ul>
|
158 |
-
<li>the link between purposes, context and nature of Personal Data is suitable for further Processing;</li>
|
159 |
-
<li>the further Processing would not harm your interests and</li>
|
160 |
-
<li>there would be appropriate safeguard for Processing.</li>
|
161 |
-
</ul>
|
162 |
-
<p>
|
163 |
-
We will inform you of any further Processing and purposes.
|
164 |
-
</p>
|
165 |
-
|
166 |
-
|
167 |
-
<h3 id="gdpr-sharing">Who else can access your Personal Data</h3>
|
168 |
-
<p>
|
169 |
-
We do not share your Personal Data with strangers. Personal Data about you is in some cases provided to our trusted partners in order to either make providing the service to you possible or to enhance your customer experience. We share your data with:
|
170 |
-
</p>
|
171 |
-
<p>
|
172 |
-
<strong>Our processing partners:</strong>
|
173 |
-
</p>
|
174 |
-
<ul>
|
175 |
-
<li><strong>[TODO]</strong></li>
|
176 |
-
</ul>
|
177 |
-
|
178 |
-
<p>
|
179 |
-
<strong>Our business partners:</strong>
|
180 |
-
</p>
|
181 |
-
<ul>
|
182 |
-
<li><strong>[TODO]</strong></li>
|
183 |
-
</ul>
|
184 |
-
|
185 |
-
<p>
|
186 |
-
<strong>Connected third parties:</strong>
|
187 |
-
</p>
|
188 |
-
<ul>
|
189 |
-
<li><strong>[TODO]</strong></li>
|
190 |
-
</ul>
|
191 |
-
|
192 |
-
<p>
|
193 |
-
We only work with Processing partners who are able to ensure adequate level of protection to your Personal Data. We disclose your Personal Data to third parties or public officials when we are legally obliged to do so. We might disclose your Personal Data to third parties if you have consented to it or if there are other legal grounds for it.
|
194 |
-
</p>
|
195 |
-
|
196 |
-
|
197 |
-
<h3 id="gdpr-security">How we secure your data</h3>
|
198 |
-
|
199 |
-
<p>
|
200 |
-
We do our best to keep your Personal Data safe. We use safe protocols for communication and transferring data (such as HTTPS). We use anonymising and pseudonymising where suitable. We monitor our systems for possible vulnerabilities and attacks.<strong>[TODO]</strong> - describe additional security measures.
|
201 |
-
</p>
|
202 |
-
<p>
|
203 |
-
Even though we try our best we can not guarantee the security of information. However, we promise to notify suitable authorities of data breaches. We will also notify you if there is a threat to your rights or interests. We will do everything we reasonably can to prevent security breaches and to assist authorities should any breaches occur.
|
204 |
-
</p>
|
205 |
-
<p>
|
206 |
-
If you have an account with us, note that you have to keep your username and password secret.
|
207 |
-
</p>
|
208 |
-
|
209 |
-
<h3>Children</h3>
|
210 |
-
<p>
|
211 |
-
We do not intend to collect or knowingly collect information from children. We do not target children with our services.
|
212 |
-
</p>
|
213 |
-
|
214 |
-
<h3 id="gdpr-cookies">Cookies and other technologies we use</h3>
|
215 |
-
<p>
|
216 |
-
We use cookies and/or similar technologies to analyse customer behaviour, administer the website, track users' movements, and to collect information about users. This is done in order to personalise and enhance your experience with us.
|
217 |
-
</p>
|
218 |
-
|
219 |
-
<p>
|
220 |
-
A cookie is a tiny text file stored on your computer. Cookies store information that is used to help make sites work. Only we can access the cookies created by our website. You can control your cookies at the browser level. Choosing to disable cookies may hinder your use of certain functions.
|
221 |
-
</p>
|
222 |
-
|
223 |
-
<p>
|
224 |
-
<strong>We use cookies for the following purposes:</strong>
|
225 |
-
</p>
|
226 |
-
<ul>
|
227 |
-
<li>Necessary cookies – these cookies are required for you to be able to use some important features on our website, such as logging in. These cookies don't collect any personal information.</li>
|
228 |
-
<li>Functionality cookies – these cookies provide functionality that makes using our service more convenient and makes providing more personalised features possible. For example, they might remember your name and e-mail in comment forms so you don't have to re-enter this information next time when commenting.</li>
|
229 |
-
<li>Analytics cookies - these cookies are used to track the use and performance of our website and services</li>
|
230 |
-
<li>Advertising cookies - these cookies are used to deliver advertisements that are relevant to you and to your interests. In addition, they are used to limit the number of times you see an advertisement. They are usually placed to the website by advertising networks with the website operator’s permission. These cookies remember that you have visited a website and this information is shared with other organisations such as advertisers. Often targeting or advertising cookies will be linked to site functionality provided by the other organisation.</li>
|
231 |
-
</ul>
|
232 |
-
|
233 |
-
<p>
|
234 |
-
You can remove cookies stored in your computer via your browser settings. Alternatively, you can control some 3rd party cookies by using a privacy enhancement platform such as <a href="http://optout.aboutads.info/#!/" target="_blank">optout.aboutads.info</a> or <a href="http://www.youronlinechoices.com/" target="_blank">youronlinechoices.com</a>. For more information about cookies, visit <a href="http://www.allaboutcookies.org" target="_blank">allaboutcookies.org</a>.
|
235 |
-
</p>
|
236 |
-
|
237 |
-
<p>
|
238 |
-
We use Google Analytics to measure traffic on our website. Google has their own Privacy Policy which you can review <a href="https://support.google.com/analytics/answer/6004245" target="_blank">here</a>. If you'd like to opt out of tracking by Google Analytics, visit the <a href="https://tools.google.com/dlpage/gaoptout" target="_blank">Google Analytics opt-out page</a>.
|
239 |
-
</p>
|
240 |
-
|
241 |
-
|
242 |
-
<h3 id="gdpr-contact">Contact Information</h3>
|
243 |
-
<?php if ($hasDpo): ?>
|
244 |
-
<p>
|
245 |
-
<strong id="gdpr-dpo">Data Protection Officer</strong><br>
|
246 |
-
If you have any questions regarding Processing your Personal Data, your rights regarding your Personal Data or this Privacy Policy, contact our Data Protection Officer<?= esc_html($dpoName); ?> at <a href="mailto:<?= esc_attr($dpoEmail); ?>"><?= esc_html($dpoEmail); ?></a>
|
247 |
-
</p>
|
248 |
-
<?php endif; ?>
|
249 |
-
|
250 |
-
<?php if ($hasRepresentative): ?>
|
251 |
-
<p>
|
252 |
-
<strong id="gdpr-representative">Representative Contact in the EU</strong>
|
253 |
-
<?php if ($representativeContactName): ?>
|
254 |
-
Name: <?= esc_html($representativeContactName); ?>
|
255 |
-
<?php endif; ?>
|
256 |
-
<?php if ($representativeContactEmail): ?>
|
257 |
-
Email: <a href="mailto:<?= esc_attr($representativeContactEmail); ?>"><?= esc_html($representativeContactEmail); ?></a><br>
|
258 |
-
<?php endif; ?>
|
259 |
-
<?php if ($representativeContactPhone): ?>
|
260 |
-
Phone: <?= esc_html($representativeContactPhone); ?>
|
261 |
-
<?php endif; ?>
|
262 |
-
</p>
|
263 |
-
<?php endif; ?>
|
264 |
-
|
265 |
-
<p>
|
266 |
-
<strong id="gdpr-dpa">Supervisory Authority</strong><br>
|
267 |
-
<?php if ($dpaWebsite): ?>
|
268 |
-
Website: <a href="<?= esc_attr($dpaWebsite); ?>" target="_blank"><?= esc_html($dpaWebsite); ?></a> <br>
|
269 |
-
<?php endif; ?>
|
270 |
-
<?php if ($dpaEmail): ?>
|
271 |
-
Email: <a href="mailto:<?= esc_attr($dpaEmail); ?>"><?= esc_html($dpaEmail); ?></a><br>
|
272 |
-
<?php endif; ?>
|
273 |
-
<?php if ($dpaPhone): ?>
|
274 |
-
Phone: <?= esc_html($dpaPhone); ?>
|
275 |
-
<?php endif; ?>
|
276 |
-
</p>
|
277 |
-
|
278 |
-
|
279 |
-
<h3 id="gdpr-changes">Changes to this Privacy Policy</h3>
|
280 |
-
<p>
|
281 |
-
We reserve the right to make change to this Privacy Policy.
|
282 |
-
Last modification was made <?= $date; ?>.
|
283 |
-
</p>
|
1 |
+
<h2>Privacy Policy</h2>
|
2 |
+
<p>
|
3 |
+
<?= esc_html($companyName); ?> is committed to safeguarding your privacy. Contact us at <a href="mailto:<?= esc_attr($contactEmail); ?>"><?= esc_html($contactEmail); ?></a> if you have any questions or problems regarding the use of your Personal Data and we will gladly assist you.
|
4 |
+
</p>
|
5 |
+
<p>
|
6 |
+
By using this site or/and our services, you consent to the Processing of your Personal Data as described in this Privacy Policy.
|
7 |
+
<?php if ($hasTerms): ?>
|
8 |
+
This Privacy Policy is a part of our Terms and Conditions; by agreeing to Terms and Conditions you also agree to this Policy. In the event of collision of terms used in Terms and Conditions and Privacy Policy, the latter shall prevail.
|
9 |
+
<?php endif; ?>
|
10 |
+
</p>
|
11 |
+
|
12 |
+
|
13 |
+
<h3>Table of Contents</h3>
|
14 |
+
<ol>
|
15 |
+
<li><a href="#gdpr-definitions">Definitions used in this Policy</a></li>
|
16 |
+
<li><a href="#gdpr-principles">Data protection principles we follow</a></li>
|
17 |
+
<li><a href="#gdpr-rights">What rights do you have regarding your Personal Data</a></li>
|
18 |
+
<li><a href="#gdpr-information">What Personal Data we gather about you</a></li>
|
19 |
+
<li><a href="#gdpr-processing">How we use your Personal Data</a></li>
|
20 |
+
<li><a href="#gdpr-sharing">Who else has access to your Personal Data</a></li>
|
21 |
+
<li><a href="#gdpr-security">How we secure your data</a></li>
|
22 |
+
<li><a href="#gdpr-cookies">Information about cookies</a></li>
|
23 |
+
<li><a href="#gdpr-contact">Contact information</a></li>
|
24 |
+
</ol>
|
25 |
+
|
26 |
+
|
27 |
+
<h3 id="gdpr-definitions">Definitions</h3>
|
28 |
+
<p>
|
29 |
+
<strong>Personal Data</strong> – any information relating to an identified or identifiable natural person.
|
30 |
+
<strong>Processing</strong> – any operation or set of operations which is performed on Personal Data or on sets of Personal Data.
|
31 |
+
<strong>Data subject</strong> - a natural person whose Personal Data is being Processed.
|
32 |
+
<strong>Child</strong> - a natural person under 16 years of age.
|
33 |
+
<strong>We/us</strong> (either capitalized or not) – <?= esc_html($companyName); ?>
|
34 |
+
</p>
|
35 |
+
|
36 |
+
|
37 |
+
<h3 id="gdpr-principles">Data Protection Principles</h3>
|
38 |
+
<p>
|
39 |
+
We promise to follow the following data protection principles:
|
40 |
+
</p>
|
41 |
+
<ul>
|
42 |
+
<li>
|
43 |
+
Processing is lawful, fair, transparent. Our Processing activities have lawful grounds. We always consider your rights before Processing Personal Data. We will provide you information regarding Processing upon request.
|
44 |
+
<li>
|
45 |
+
Processing is limited to the purpose. Our Processing activities fit the purpose for which Personal Data was gathered.
|
46 |
+
</li>
|
47 |
+
<li>
|
48 |
+
Processing is done with minimal data. We only gather and Process the minimal amount of Personal Data required for any purpose.
|
49 |
+
</li>
|
50 |
+
<li>
|
51 |
+
Processing is limited with a time period. We will not store your personal data for longer than needed.
|
52 |
+
</li>
|
53 |
+
<li>
|
54 |
+
We will do our best to ensure the accuracy of data.
|
55 |
+
</li>
|
56 |
+
<li>
|
57 |
+
We will do our best to ensure the integrity and confidentiality of data.
|
58 |
+
</li>
|
59 |
+
</ul>
|
60 |
+
|
61 |
+
|
62 |
+
<h3 id="gdpr-rights">Data Subject's rights</h3>
|
63 |
+
<p>
|
64 |
+
The Data Subject has the following rights:
|
65 |
+
</p>
|
66 |
+
<ol>
|
67 |
+
<li>Right to information – meaning you have to right to know whether your Personal Data is being processed; what data is gathered, from where it is obtained and why and by whom it is processed.</li>
|
68 |
+
<li>Right to access – meaning you have the right to access the data collected from/about you. This includes your right to request and obtain a copy of your Personal Data gathered.</li>
|
69 |
+
<li>Right to rectification – meaning you have the right to request rectification or erasure of your Personal Data that is inaccurate or incomplete.</li>
|
70 |
+
<li>Right to erasure – meaning in certain circumstances you can request for your Personal Data to be erased from our records.</li>
|
71 |
+
<li>Right to restrict processing – meaning where certain conditions apply, you have the right to restrict the Processing of your Personal Data.</li>
|
72 |
+
<li>Right to object to processing – meaning in certain cases you have the right to object to Processing of your Personal Data, for example in the case of direct marketing.</li>
|
73 |
+
<li>Right to object to automated Processing – meaning you have the right to object to automated Processing, including profiling; and not to be subject to a decision based solely on automated Processing. This right you can exercise whenever there is an outcome of the profiling that produces legal effects concerning or significantly affecting you.</li>
|
74 |
+
<li>Right to data portability – you have the right to obtain your Personal Data in a machine-readable format or if it is feasible, as a direct transfer from one Processor to another.</li>
|
75 |
+
<li>Right to lodge a complaint – in the event that we refuse your request under the Rights of Access, we will provide you with a reason as to why. If you are not satisfied with the way your request has been handled please contact us.</li>
|
76 |
+
<li>Right for the help of <a href="#gdpr-contact">supervisory authority</a> – meaning you have the right for the help of a supervisory authority and the right for other legal remedies such as claiming damages.</li>
|
77 |
+
<li>Right to withdraw consent – you have the right withdraw any given consent for Processing of your Personal Data.</li>
|
78 |
+
</ol>
|
79 |
+
|
80 |
+
|
81 |
+
<h3 id="gdpr-information">Data we gather</h3>
|
82 |
+
<p>
|
83 |
+
<strong>[TODO] - Information you have provided us with</strong><br>
|
84 |
+
This might be your e-mail address, name, billing address, home address etc – mainly information that is necessary for delivering you a product/service or to enhance your customer experience with us. We save the information you provide us with in order for you to comment or perform other activities on the website. This information includes, for example, your name and e-mail address.
|
85 |
+
</p>
|
86 |
+
<p>
|
87 |
+
<strong>[TODO] - Information automatically collected about you</strong><br>
|
88 |
+
This includes information that is automatically stored by cookies and other session tools. For example, your shopping cart information, your IP address, your shopping history (if there is any) etc. This information is used to improve your customer experience. When you use our services or look at the contents of our website, your activities may be logged.
|
89 |
+
</p>
|
90 |
+
|
91 |
+
<p>
|
92 |
+
<strong>[TODO] - Information from our partners</strong><br>
|
93 |
+
We gather information from our trusted partners with confirmation that they have legal grounds to share that information with us. This is either information you have provided them directly with or that they have gathered about you on other legal grounds. See the list of our partners <a href="#gdpr-sharing">here</a>.
|
94 |
+
</p>
|
95 |
+
|
96 |
+
<p>
|
97 |
+
<strong>Publicly available information</strong><br>
|
98 |
+
We might gather information about you that is publicly available.
|
99 |
+
</p>
|
100 |
+
|
101 |
+
|
102 |
+
<h3 id="gdpr-processing">How we use your Personal Data</h3>
|
103 |
+
|
104 |
+
<p>
|
105 |
+
We use your Personal Data in order to:
|
106 |
+
</p>
|
107 |
+
<ul>
|
108 |
+
<li>provide our service to you. This includes for example registering your account; providing you with other products and services that you have requested; providing you with promotional items at your request and communicating with you in relation to those products and services; communicating and interacting with you; and notifying you of changes to any services.</li>
|
109 |
+
<li>enhance your customer experience;</li>
|
110 |
+
<li>fulfil an obligation under law or contract;</li>
|
111 |
+
<li><strong>[TODO]</strong></li>
|
112 |
+
</ul>
|
113 |
+
|
114 |
+
<p>
|
115 |
+
We use your Personal Data on legitimate grounds and/or with your Consent.
|
116 |
+
</p>
|
117 |
+
|
118 |
+
<p>
|
119 |
+
On the grounds of entering into a contract or fulfilling contractual obligations, we Process your Personal Data for the following purposes:
|
120 |
+
</p>
|
121 |
+
<ul>
|
122 |
+
<li>to identify you;</li>
|
123 |
+
<li>to provide you a service or to send/offer you a product;</li>
|
124 |
+
<li>to communicate either for sales or invoicing;</li>
|
125 |
+
<li><strong>[TODO]</strong></li>
|
126 |
+
</ul>
|
127 |
+
|
128 |
+
<p>
|
129 |
+
On the ground of legitimate interest, we Process your Personal Data for the following purposes:
|
130 |
+
</p>
|
131 |
+
<ul>
|
132 |
+
<li>to send you personalized offers* (from us and/or our carefully selected partners);</li>
|
133 |
+
<li>to administer and analyse our client base (purchasing behaviour and history) in order to improve the quality, variety, and availability of products/ services offered/provided;</li>
|
134 |
+
<li>to conduct questionnaires concerning client satisfaction;</li>
|
135 |
+
<li><strong>[TODO]</strong></li>
|
136 |
+
</ul>
|
137 |
+
<p>
|
138 |
+
As long as you have not informed us otherwise, we consider offering you products/services that are similar or same to your purchasing history/browsing behaviour to be our legitimate interest.
|
139 |
+
</p>
|
140 |
+
|
141 |
+
<p>
|
142 |
+
With your consent we Process your Personal Data for the following purposes:
|
143 |
+
</p>
|
144 |
+
<ul>
|
145 |
+
<li>to send you newsletters and campaign offers (from us and/or our carefully selected partners);</li>
|
146 |
+
<li>for other purposes we have asked your consent for;</li>
|
147 |
+
<li><strong>[TODO]</strong></li>
|
148 |
+
</ul>
|
149 |
+
|
150 |
+
<p>
|
151 |
+
We Process your Personal Data in order to fulfil obligation rising from law and/or use your Personal Data for options provided by law. We reserv
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|