The GDPR Framework By Data443 - Version 1.0.6

Version Description

  • Fix administrative roles not being able to comment via admin interface
  • Fix trashed or spam comments not being deleted
  • Minor usability tweaks everywhere
  • Fix PHP5.6 not properly saving custom consent (Thanks @paulnewson!)
  • Fix CF7 always showing as enabled in wizard
  • In Tools > Privacy > Data Subjects, add the display of given consents
  • Add warning about Sendgrid compatibility in the installer
  • Fix issue with installer wizard not properly saving export action
  • Add notice in case the settings are not properly configured
  • Added Bulgarian translation (thanks Zankov Group!)
  • Added partial Italian translation (thanks Matteo Bruno!)
Download this release

Release Info

Developer indrek_k
Plugin Icon 128x128 The GDPR Framework By Data443
Version 1.0.6
Comparing to
See all releases

Code changes from version 1.0.5 to 1.0.6

Files changed (146) hide show
  1. assets/conditional-show.js +102 -102
  2. assets/gdpr-admin.css +362 -362
  3. assets/gdpr-admin.js +102 -102
  4. assets/gdpr-installer.css +550 -550
  5. assets/gdpr-installer.js +58 -58
  6. assets/gdpr-rhino.svg +42 -42
  7. assets/menu.jpg +0 -0
  8. assets/privacy-tools.css +30 -30
  9. bootstrap.php +53 -53
  10. gdpr-framework.php +94 -95
  11. languages/gdpr-framework-bg_BG.mo +0 -0
  12. languages/gdpr-framework-bg_BG.po +1334 -0
  13. languages/gdpr-framework-de_DE.mo +0 -0
  14. languages/gdpr-framework-de_DE.po +1333 -1306
  15. languages/gdpr-framework-it_IT.mo +0 -0
  16. languages/gdpr-framework-it_IT.po +1294 -0
  17. languages/gdpr-framework.pot +1284 -1284
  18. license.txt +198 -198
  19. readme.txt +129 -91
  20. src/Admin/AdminError.php +16 -16
  21. src/Admin/AdminHelper.php +84 -57
  22. src/Admin/AdminNotice.php +41 -41
  23. src/Admin/AdminTab.php +157 -157
  24. src/Admin/AdminTabGeneral.php +277 -277
  25. src/Admin/Modal.php +41 -41
  26. src/Admin/WordpressAdmin.php +156 -156
  27. src/Admin/WordpressAdminPage.php +147 -147
  28. src/Components/Consent/AdminTabConsent.php +181 -181
  29. src/Components/Consent/ConsentManager.php +317 -317
  30. src/Components/Consent/UserConsentModel.php +14 -4
  31. src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php +436 -436
  32. src/Components/PrivacyPolicy/PolicyGenerator.php +44 -44
  33. src/Components/PrivacyPolicy/PrivacyPolicy.php +92 -92
  34. src/Components/PrivacyToolsPage/PrivacyToolsPage.php +14 -14
  35. src/Components/PrivacyToolsPage/PrivacyToolsPageController.php +278 -278
  36. src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php +45 -45
  37. src/Components/Support/AdminTabSupport.php +34 -34
  38. src/Components/Support/Support.php +18 -18
  39. src/Components/WordpressComments/WordpressComments.php +194 -172
  40. src/Components/WordpressUser/Controllers/DashboardDataPageController.php +197 -197
  41. src/Components/WordpressUser/Controllers/DashboardProfilePageController.php +123 -123
  42. src/Components/WordpressUser/DataManager.php +151 -151
  43. src/Components/WordpressUser/RegistrationForm.php +50 -50
  44. src/Components/WordpressUser/WordpressUser.php +111 -111
  45. src/DataSubject/AdminTabDataSubject.php +128 -126
  46. src/DataSubject/DataExporter.php +138 -138
  47. src/DataSubject/DataRepository.php +191 -191
  48. src/DataSubject/DataSubjectAdmin.php +17 -17
  49. src/DataSubject/DataSubjectAuthenticator.php +130 -130
  50. src/DataSubject/DataSubjectIdentificator.php +184 -184
  51. src/Helpers.php +170 -170
  52. src/Installer/Installer.php +305 -303
  53. src/Installer/InstallerStep.php +200 -200
  54. src/Installer/Steps/ConfigurationPages.php +61 -61
  55. src/Installer/Steps/ConfigurationSettings.php +71 -71
  56. src/Installer/Steps/Consent.php +31 -30
  57. src/Installer/Steps/Integrations.php +49 -47
  58. src/Installer/Steps/PolicyContents.php +31 -31
  59. src/Installer/Steps/PolicySettings.php +215 -215
  60. src/Modules/ContactForm7/ContactForm7.php +108 -108
  61. src/Modules/WPML/WPML.php +153 -153
  62. src/Router.php +166 -166
  63. src/Setup.php +94 -94
  64. src/SetupAdmin.php +62 -62
  65. src/Updater/Updater.php +46 -46
  66. src/View.php +64 -64
  67. vendor/autoload.php +1 -1
  68. vendor/composer/autoload_real.php +7 -7
  69. vendor/composer/autoload_static.php +3 -3
  70. views/admin/consent.php +105 -105
  71. views/admin/data-subjects/search-form.php +18 -18
  72. views/admin/data-subjects/search-results.php +59 -33
  73. views/admin/general/delete-action-email.php +7 -7
  74. views/admin/general/delete-action-reassign.php +11 -11
  75. views/admin/general/delete-action.php +2 -2
  76. views/admin/general/description-data-page.php +3 -3
  77. views/admin/general/description-delete-action.php +3 -3
  78. views/admin/general/description-export-action.php +3 -3
  79. views/admin/general/description-terms-page.php +3 -3
  80. views/admin/general/enable.php +13 -13
  81. views/admin/general/export-action-email.php +7 -7
  82. views/admin/general/stylesheet.php +10 -10
  83. views/admin/general/theme-compatibility.php +10 -10
  84. views/admin/modals/footer.php +6 -6
  85. views/admin/modals/header.php +5 -5
  86. views/admin/modals/test.php +8 -8
  87. views/admin/notices/disclaimer.php +16 -16
  88. views/admin/notices/error.php +3 -3
  89. views/admin/notices/header.php +4 -4
  90. views/admin/notices/help.php +3 -3
  91. views/admin/notices/helper-autoinstall.php +10 -10
  92. views/admin/notices/helper-policy.php +9 -9
  93. views/admin/notices/helper-settings.php +8 -0
  94. views/admin/notices/helper-tools.php +10 -10
  95. views/admin/privacy-policy/description-policy-page.php +3 -3
  96. views/admin/privacy-policy/dpa.php +2 -2
  97. views/admin/privacy-policy/generated.php +21 -21
  98. views/admin/privacy-policy/header.php +3 -3
  99. views/admin/settings-page.php +46 -46
  100. views/admin/support/contents.php +62 -62
  101. views/admin/wizard-buttons.php +5 -5
  102. views/email/action-export.php +9 -9
  103. views/email/action-forget.php +13 -13
  104. views/email/identify-data-subject.php +11 -11
  105. views/email/no-data.php +6 -6
  106. views/email/request-export.php +14 -14
  107. views/email/request-forget.php +14 -14
  108. views/global/country-options.php +23 -23
  109. views/global/delete-action.php +20 -20
  110. views/global/export-action.php +14 -14
  111. views/global/html-data.php +38 -38
  112. views/installer/continue-notice.php +10 -10
  113. views/installer/footer.php +41 -41
  114. views/installer/header.php +64 -64
  115. views/installer/steps/configuration-pages.php +44 -37
  116. views/installer/steps/configuration-settings.php +87 -87
  117. views/installer/steps/consent.php +88 -87
  118. views/installer/steps/disclaimer.php +21 -21
  119. views/installer/steps/finish.php +69 -69
  120. views/installer/steps/integrations.php +60 -52
  121. views/installer/steps/policy-contents.php +25 -25
  122. views/installer/steps/policy-settings.php +185 -185
  123. views/installer/steps/welcome.php +18 -18
  124. views/installer/welcome-notice.php +17 -16
  125. views/modules/contact-form-7/content-privacy.php +5 -5
  126. views/modules/contact-form-7/generator-privacy.php +17 -17
  127. views/modules/wordpress-comments/terms-checkbox.php +20 -20
  128. views/modules/wordpress-user/dashboard/data-page/form-consent.php +39 -39
  129. views/modules/wordpress-user/dashboard/data-page/form-delete.php +30 -30
  130. views/modules/wordpress-user/dashboard/data-page/header.php +3 -3
  131. views/modules/wordpress-user/dashboard/form-export.php +24 -24
  132. views/modules/wordpress-user/dashboard/profile-page/form-delete.php +29 -29
  133. views/modules/wordpress-user/dashboard/profile-page/header.php +8 -8
  134. views/modules/wordpress-user/dashboard/profile-page/table-consent.php +18 -18
  135. views/modules/wordpress-user/registration-terms-checkbox.php +21 -21
  136. views/policy/policy.php +283 -283
  137. views/privacy-tools/form-consent.php +39 -39
  138. views/privacy-tools/form-delete.php +18 -18
  139. views/privacy-tools/form-export.php +26 -26
  140. views/privacy-tools/form-identify.php +30 -30
  141. views/privacy-tools/notice-admin-role.php +6 -6
  142. views/privacy-tools/notices.php +25 -25
  143. views/privacy-tools/privacy-tools.php +13 -13
  144. views/themes/storefront/footer.php +8 -8
  145. views/themes/twentyseventeen/footer.php +9 -9
  146. views/themes/twentysixteen/footer.php +12 -12
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/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/menu.jpg ADDED
Binary file
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,95 +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.5
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.5');
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 &rsaquo; 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
- /**
76
- * Install the database table and custom role
77
- */
78
- register_activation_hook(__FILE__, function () {
79
- $model = new \Codelight\GDPR\Components\Consent\UserConsentModel();
80
- $model->createTable();
81
-
82
- if (apply_filters('gdpr/data-subject/anonymize/change_role', true) && ! get_role('anonymous')) {
83
-
84
- add_role(
85
- 'anonymous',
86
- _x('Anonymous', '(Admin)', 'gdpr-framework'),
87
- array()
88
- );
89
- }
90
-
91
- update_option('gdpr_enable_stylesheet', true);
92
- update_option('gdpr_enable', true);
93
- });
94
-
95
- 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.6
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.6');
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 &rsaquo; 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.mo ADDED
Binary file
languages/gdpr-framework-bg_BG.po ADDED
@@ -0,0 +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 &rsaquo; 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 "&mdash; Select &mdash;"
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 "&mdash; Create a new page &mdash;"
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 "&laquo; Back"
895
+ msgstr "&laquo; Назад"
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 &#9829; 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.mo CHANGED
Binary file
languages/gdpr-framework-de_DE.po CHANGED
@@ -1,1306 +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-04-21 17:26+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.6\n"
17
- "Last-Translator: Torsten Meyer <contact@knodderdachs.de>\n"
18
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
- "Language: de_DE\n"
20
-
21
- #: gdpr-framework.php:26
22
- msgctxt "(Admin)"
23
- msgid "WordPress GDPR &rsaquo; 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 ""
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
- msgctxt "(Admin)"
167
- msgid "&mdash; Select &mdash;"
168
- msgstr ""
169
-
170
- #: src/Admin/WordpressAdmin.php:65
171
- msgctxt "(Admin)"
172
- msgid "Privacy & GDPR Settings"
173
- msgstr ""
174
-
175
- #: src/Admin/WordpressAdmin.php:66
176
- msgctxt "(Admin)"
177
- msgid "Privacy"
178
- msgstr ""
179
-
180
- #: src/Components/Consent/AdminTabConsent.php:30
181
- #: src/Components/Consent/AdminTabConsent.php:49
182
- msgctxt "(Admin)"
183
- msgid "Consent"
184
- msgstr ""
185
-
186
- #: src/Components/Consent/AdminTabConsent.php:157
187
- msgctxt "(Admin)"
188
- msgid "Consent slug is a required field!"
189
- msgstr ""
190
-
191
- #: src/Components/Consent/AdminTabConsent.php:162
192
- msgctxt "(Admin)"
193
- msgid ""
194
- "You may only use alphanumeric characters, dash and underscore in the consent "
195
- "slug field."
196
- msgstr ""
197
-
198
- #: src/Components/Consent/AdminTabConsent.php:167
199
- 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
206
- #: views/modules/wordpress-user/registration-terms-checkbox.php:15
207
- #, php-format
208
- msgid "I accept the %sPrivacy Policy%s"
209
- msgstr "Ich stimme der %sDatenschutzerklärung%s zu"
210
-
211
- #: src/Components/Consent/ConsentManager.php:50
212
- #: src/Components/Consent/ConsentManager.php:69
213
- msgctxt "(Admin)"
214
- msgid ""
215
- "This consent is not visible by default. If someone wishes to withdraw it, "
216
- "they should simply request to delete all their data."
217
- msgstr ""
218
-
219
- #: src/Components/Consent/ConsentManager.php:65
220
- #, php-format
221
- msgid "I accept the %sTerms & Conditions%s"
222
- msgstr "Ich akzeptiere die %sAllgemeinen Geschäftsbestimmungen%s"
223
-
224
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
225
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
226
- #: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
227
- msgctxt "(Admin)"
228
- msgid "Privacy Policy"
229
- msgstr ""
230
-
231
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
232
- msgctxt "(Admin)"
233
- msgid "Company information"
234
- msgstr ""
235
-
236
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
237
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
238
- msgctxt "(Admin)"
239
- msgid "Company Name"
240
- msgstr ""
241
-
242
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
243
- msgctxt "(Admin)"
244
- msgid "Company Email"
245
- msgstr ""
246
-
247
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
248
- msgctxt "(Admin)"
249
- msgid "Company Location"
250
- msgstr ""
251
-
252
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
253
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
254
- msgctxt "(Admin)"
255
- msgid "Representative Contact Name"
256
- msgstr ""
257
-
258
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
259
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
260
- msgctxt "(Admin)"
261
- msgid "Representative Contact Email"
262
- msgstr ""
263
-
264
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
265
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
266
- msgctxt "(Admin)"
267
- msgid "Representative Contact Phone"
268
- msgstr ""
269
-
270
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
271
- msgctxt "(Admin)"
272
- msgid "Data Protection Authority"
273
- msgstr ""
274
-
275
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
276
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
277
- msgctxt "(Admin)"
278
- msgid "Data Protection Authority Website"
279
- msgstr ""
280
-
281
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
282
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
283
- msgctxt "(Admin)"
284
- msgid "Data Protection Authority Email"
285
- msgstr ""
286
-
287
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
288
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
289
- msgctxt "(Admin)"
290
- msgid "Data Protection Authority Phone"
291
- msgstr ""
292
-
293
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
294
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
295
- msgctxt "(Admin)"
296
- msgid "Data Protection Officer"
297
- msgstr ""
298
-
299
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
300
- msgctxt "(Admin)"
301
- msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
302
- msgstr ""
303
-
304
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
305
- msgctxt "(Admin)"
306
- msgid "Data Protection Officer Name"
307
- msgstr ""
308
-
309
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
310
- msgctxt "(Admin)"
311
- msgid "Data Protection Officer Email"
312
- msgstr ""
313
-
314
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
315
- msgctxt "(Admin)"
316
- msgid "Contact Email"
317
- msgstr ""
318
-
319
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
320
- msgctxt "(Admin)"
321
- msgid "Representative Contact"
322
- msgstr ""
323
-
324
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
325
- msgctxt "(Admin)"
326
- msgid "Knowledge base: Do I need to appoint an EU-based representative?"
327
- msgstr ""
328
-
329
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
330
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
331
- msgctxt "(Admin)"
332
- msgid "DPO Name"
333
- msgstr ""
334
-
335
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
336
- msgctxt "(Admin)"
337
- msgid "Save & Generate Policy"
338
- msgstr ""
339
-
340
- #: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
341
- #: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
342
- #: views/themes/storefront/footer.php:3
343
- #: views/themes/twentyseventeen/footer.php:3
344
- #: views/themes/twentysixteen/footer.php:4
345
- msgid "Privacy Policy"
346
- msgstr "Datenschutzerklärung"
347
-
348
- #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
349
- msgid "This page is currently disabled."
350
- msgstr "Diese Seite ist zur Zeit deaktiviert."
351
-
352
- #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
353
- #: src/Installer/Installer.php:279
354
- #: src/Installer/Steps/ConfigurationPages.php:55
355
- #: views/themes/storefront/footer.php:7
356
- #: views/themes/twentyseventeen/footer.php:7
357
- #: views/themes/twentysixteen/footer.php:9
358
- msgid "Privacy Tools"
359
- msgstr "Privatsphäre Tools"
360
-
361
- #: src/Components/Support/AdminTabSupport.php:13
362
- #: src/Components/Support/AdminTabSupport.php:20
363
- msgctxt "(Admin)"
364
- msgid "Support"
365
- msgstr ""
366
-
367
- #: src/Components/WordpressComments/WordpressComments.php:90
368
- #, php-format
369
- msgid ""
370
- "%sERROR:%s You need to accept the terms and conditions to post a comment."
371
- msgstr ""
372
- "%sFEHLER:%s Du musst die AGB akzeptieren, um einen Kommentar schreiben zu "
373
- "dürfen."
374
-
375
- #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
376
- #: views/privacy-tools/notices.php:19
377
- msgid "We have received your request and will reply within 30 days."
378
- msgstr ""
379
- "Wir haben Ihre Anfrage erhalten und werden innerhalb von 30 Tagen antworten."
380
-
381
- #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
382
- #: views/privacy-tools/notices.php:15
383
- msgid "Consent withdrawn."
384
- msgstr "Zustimmung widerrufen."
385
-
386
- #: src/Components/WordpressUser/RegistrationForm.php:42
387
- msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
388
- msgstr "<strong>FEHLER</strong>: Du musst die AGB akzeptieren."
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 "Daten exportiert"
406
-
407
- #: src/DataSubject/DataRepository.php:158
408
- msgid "Data export request"
409
- msgstr "Datenexport angefragt"
410
-
411
- #: src/DataSubject/DataRepository.php:171
412
- msgid "Data removed"
413
- msgstr "Daten entfernt"
414
-
415
- #: src/DataSubject/DataRepository.php:186
416
- msgid "Data removal request"
417
- msgstr "Datenlöschung angefragt"
418
-
419
- #: src/DataSubject/DataSubjectIdentificator.php:65
420
- #: src/DataSubject/DataSubjectIdentificator.php:82
421
- msgid "Your personal data on"
422
- msgstr "Ihre persönlichen Daten auf"
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
- "Es ist ein Fehler aufgetreten. Bitte setzen Sie sich mit dem Website "
598
- "Administrator in Verbindung."
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 "&mdash; Create a new page &mdash;"
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
- "Nonce Fehler für Aktion \"%s\". Bitte gehen Sie zurück und versuchen Sie es "
628
- "erneut!"
629
-
630
- #: src/Router.php:149
631
- msgctxt "(Admin)"
632
- msgid "You do not have the required permissions to perform this action!"
633
- msgstr ""
634
-
635
- #: views/admin/consent.php:3
636
- msgctxt "(Admin)"
637
- msgid "Default consent types"
638
- msgstr ""
639
-
640
- #: views/admin/consent.php:4
641
- msgctxt "(Admin)"
642
- msgid ""
643
- "These are the consent types that have been automatically registered by the "
644
- "framework or a plugin."
645
- msgstr ""
646
-
647
- #: views/admin/consent.php:7 views/admin/consent.php:52
648
- msgctxt "(Admin)"
649
- msgid "Slug"
650
- msgstr ""
651
-
652
- #: views/admin/consent.php:8 views/admin/consent.php:38
653
- #: views/admin/consent.php:60
654
- msgctxt "(Admin)"
655
- msgid "Title"
656
- msgstr ""
657
-
658
- #: views/admin/consent.php:9 views/admin/consent.php:41
659
- #: views/admin/consent.php:63
660
- msgctxt "(Admin)"
661
- msgid "Description"
662
- msgstr ""
663
-
664
- #: views/admin/consent.php:10
665
- msgctxt "(Admin)"
666
- msgid "Visibility"
667
- msgstr ""
668
-
669
- #: views/admin/consent.php:18
670
- msgctxt "(Admin)"
671
- msgid "Visible"
672
- msgstr ""
673
-
674
- #: views/admin/consent.php:20
675
- msgctxt "(Admin)"
676
- msgid "Hidden"
677
- msgstr ""
678
-
679
- #: views/admin/consent.php:29
680
- msgctxt "(Admin)"
681
- msgid "Custom consent types"
682
- msgstr ""
683
-
684
- #: views/admin/consent.php:30
685
- msgctxt "(Admin)"
686
- msgid ""
687
- "Here you can add custom consent types to track. They will not be used "
688
- "anywhere by default - you will need to build an integration for each of them."
689
- msgstr ""
690
-
691
- #: views/admin/consent.php:35
692
- msgctxt "(Admin)"
693
- msgid "Machine-readable slug"
694
- msgstr ""
695
-
696
- #: views/admin/consent.php:44 views/admin/consent.php:68
697
- msgctxt "(Admin)"
698
- msgid "Visible?"
699
- msgstr ""
700
-
701
- #: views/admin/consent.php:72
702
- msgctxt "(Admin)"
703
- msgid "Remove"
704
- msgstr ""
705
-
706
- #: views/admin/consent.php:93
707
- msgctxt "(Admin)"
708
- msgid "Additional info"
709
- msgstr ""
710
-
711
- #: views/admin/consent.php:95
712
- msgctxt "(Admin)"
713
- msgid ""
714
- "This text will be displayed to your data subjects on the Privacy Tools page."
715
- msgstr ""
716
-
717
- #: views/admin/data-subjects/search-form.php:2
718
- msgctxt "(Admin)"
719
- msgid ""
720
- "On this page, you can find which data subjects personal data you are storing "
721
- "and download, export or delete it."
722
- msgstr ""
723
-
724
- #: views/admin/data-subjects/search-form.php:10
725
- msgctxt "(Admin)"
726
- msgid "Find data subject by email"
727
- msgstr ""
728
-
729
- #: views/admin/data-subjects/search-form.php:11
730
- msgctxt "(Admin)"
731
- msgid "Email address"
732
- msgstr ""
733
-
734
- #: views/admin/data-subjects/search-form.php:16
735
- msgctxt "(Admin)"
736
- msgid "Search"
737
- msgstr ""
738
-
739
- #: views/admin/data-subjects/search-results.php:7
740
- msgctxt "(Admin)"
741
- msgid "Username"
742
- msgstr ""
743
-
744
- #: views/admin/data-subjects/search-results.php:12
745
- msgctxt "(Admin)"
746
- msgid "is not a registered user."
747
- msgstr ""
748
-
749
- #: views/admin/data-subjects/search-results.php:16
750
- msgctxt "(Admin)"
751
- msgid "Download data (html)"
752
- msgstr ""
753
-
754
- #: views/admin/data-subjects/search-results.php:17
755
- msgctxt "(Admin)"
756
- msgid "Export data (json)"
757
- msgstr ""
758
-
759
- #: views/admin/data-subjects/search-results.php:21
760
- msgctxt "(Admin)"
761
- msgid ""
762
- "This user has admin capabilities. Deleting data via this interface is "
763
- "disabled."
764
- msgstr ""
765
-
766
- #: views/admin/data-subjects/search-results.php:24
767
- msgctxt "(Admin)"
768
- msgid "Anonymize data"
769
- msgstr ""
770
-
771
- #: views/admin/data-subjects/search-results.php:25
772
- msgctxt "(Admin)"
773
- msgid "Delete data"
774
- msgstr ""
775
-
776
- #: views/admin/data-subjects/search-results.php:29
777
- msgctxt "(Admin)"
778
- msgid "No data found!"
779
- msgstr ""
780
-
781
- #: views/admin/general/delete-action-email.php:5
782
- #: views/admin/general/export-action-email.php:5
783
- #: views/installer/steps/configuration-settings.php:29
784
- #: views/installer/steps/configuration-settings.php:79
785
- msgid "Email address"
786
- msgstr "E-Mail Adresse"
787
-
788
- #: views/admin/general/delete-action-reassign.php:3
789
- #: views/installer/steps/configuration-settings.php:50
790
- msgctxt "(Admin)"
791
- msgid "Delete content"
792
- msgstr ""
793
-
794
- #: views/admin/general/delete-action-reassign.php:6
795
- #: views/installer/steps/configuration-settings.php:53
796
- msgctxt "(Admin)"
797
- msgid "Reassign content to a user"
798
- msgstr ""
799
-
800
- #: views/admin/general/delete-action-reassign.php:10
801
- msgctxt "(Admin)"
802
- msgid ""
803
- "If the user has submitted any content on your site, should it be deleted or "
804
- "reassigned to another user?"
805
- msgstr ""
806
-
807
- #: views/admin/general/description-data-page.php:2
808
- msgctxt "(Admin)"
809
- msgid ""
810
- "Select the page where users can go to control their data. This page must "
811
- "contain the [gdpr_privacy_tools] shortcode."
812
- msgstr ""
813
-
814
- #: views/admin/general/enable.php:9
815
- msgctxt "(Admin)"
816
- msgid "Enable the view, export and forget functionality for users and visitors"
817
- msgstr ""
818
-
819
- #: views/admin/general/enable.php:12
820
- msgctxt "(Admin)"
821
- msgid ""
822
- "Enable the Privacy Tools page on front-end and dashboard. This allows "
823
- "visitors to request viewing and deleting their personal data and withdraw "
824
- "consents."
825
- msgstr ""
826
-
827
- #: views/admin/general/theme-compatibility.php:9
828
- #: views/installer/steps/integrations.php:21
829
- msgctxt "(Admin)"
830
- msgid ""
831
- "Automatically add Privacy Policy and Privacy Tools links to your site footer."
832
- msgstr ""
833
-
834
- #: views/admin/notices/header.php:4 views/admin/settings-page.php:3
835
- #: views/installer/header.php:23
836
- msgctxt "(Admin)"
837
- msgid "The GDPR Framework"
838
- msgstr ""
839
-
840
- #: views/admin/notices/helper-autoinstall.php:2
841
- msgctxt "(Admin)"
842
- msgid ""
843
- "A Privacy Policy page has been created, but it is empty. You can generate a "
844
- "policy template on this page."
845
- msgstr ""
846
-
847
- #: views/admin/notices/helper-policy.php:2
848
- msgctxt "(Admin)"
849
- msgid ""
850
- "Heads up - your Privacy Policy still requires some attention. Find the "
851
- "places marked with [TODO] and replace them with real content!"
852
- msgstr ""
853
-
854
- #: views/admin/notices/helper-tools.php:2
855
- msgctxt "(Admin)"
856
- msgid "The contents of this page should contain the [gdpr_tools] shortcode."
857
- msgstr ""
858
-
859
- #: views/admin/privacy-policy/description-policy-page.php:2
860
- msgctxt "(Admin)"
861
- msgid "Select the page which will contain your Privacy Policy"
862
- msgstr ""
863
-
864
- #: views/admin/privacy-policy/generated.php:3
865
- msgctxt "(Admin)"
866
- msgid "Your Privacy Policy has been generated."
867
- msgstr ""
868
-
869
- #: views/admin/privacy-policy/generated.php:20
870
- msgctxt "(Admin)"
871
- msgid "&laquo; Back"
872
- msgstr ""
873
-
874
- #: views/admin/privacy-policy/header.php:2
875
- msgctxt "(Admin)"
876
- msgid ""
877
- "This page allows you to generate a Privacy Policy based on the information "
878
- "you entered below."
879
- msgstr ""
880
-
881
- #: views/admin/settings-page.php:31
882
- #, php-format
883
- msgctxt "(Admin)"
884
- msgid "The GDPR Framework. Built with &#9829; by %sCodelight%s."
885
- msgstr ""
886
-
887
- #: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
888
- msgctxt "(Admin)"
889
- msgid "Need more info?"
890
- msgstr ""
891
-
892
- #: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
893
- msgctxt "(Admin)"
894
- msgid "Site Owner's guide to GDPR"
895
- msgstr ""
896
-
897
- #: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
898
- msgctxt "(Admin)"
899
- msgid "Read the full guide on GDPR compliance."
900
- msgstr ""
901
-
902
- #: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
903
- msgctxt "(Admin)"
904
- msgid "Knowledge base"
905
- msgstr ""
906
-
907
- #: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
908
- msgctxt "(Admin)"
909
- msgid "Check out the knowledge base for common questions and answers."
910
- msgstr ""
911
-
912
- #: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
913
- msgctxt "(Admin)"
914
- msgid "Developer's guide to GDPR"
915
- msgstr ""
916
-
917
- #: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
918
- msgctxt "(Admin)"
919
- msgid "We have a thorough guide to help making custom sites compliant."
920
- msgstr ""
921
-
922
- #: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
923
- msgctxt "(Admin)"
924
- msgid "Need help?"
925
- msgstr ""
926
-
927
- #: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
928
- msgctxt "(Admin)"
929
- msgid "Submit a support request"
930
- msgstr ""
931
-
932
- #: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
933
- msgctxt "(Admin)"
934
- msgid ""
935
- "Found a bug or problem with the plugin? Post in the wordpress.org support "
936
- "forum."
937
- msgstr ""
938
-
939
- #: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
940
- msgctxt "(Admin)"
941
- msgid "Request a consultation"
942
- msgstr ""
943
-
944
- #: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
945
- msgctxt "(Admin)"
946
- msgid ""
947
- "Need development or legal assistance in making your site compliant? We can "
948
- "help!"
949
- msgstr ""
950
-
951
- #: views/admin/wizard-buttons.php:2
952
- msgctxt "(Admin)"
953
- msgid "Restart setup wizard"
954
- msgstr ""
955
-
956
- #: views/email/action-export.php:8 views/email/action-forget.php:12
957
- msgctxt "(Admin)"
958
- msgid ""
959
- "This email is just for your information. You don't need to take any action"
960
- msgstr ""
961
-
962
- #: views/email/action-forget.php:8
963
- msgctxt "(Admin)"
964
- msgid "The data subject had a user account on your website."
965
- msgstr ""
966
-
967
- #: views/email/identify-data-subject.php:2
968
- msgid "Someone has requested access to your data on"
969
- msgstr "Jemand hat Zugriff auf Ihre Daten angefordert auf "
970
-
971
- #: views/email/identify-data-subject.php:3
972
- msgid "If this was a mistake, just ignore this email and nothing will happen."
973
- msgstr ""
974
- "Falls dies ein Fehler war, ignorieren Sie diese E-Mail und es wird nichts "
975
- "passieren."
976
-
977
- #: views/email/identify-data-subject.php:4
978
- msgid "To manage your data, visit the following address:"
979
- msgstr "Um Ihre Daten zu verwalten, besuchen Sie diese Adresse:"
980
-
981
- #: views/email/identify-data-subject.php:10
982
- msgid "This link is valid for 15 minutes."
983
- msgstr "Der Link ist 15 Minuten lang gültig."
984
-
985
- #: views/email/no-data.php:2
986
- msgid "Someone has requested information about your personal data on"
987
- msgstr "Jemand hat Zugriff auf Ihre persönlichen Daten angefordert auf"
988
-
989
- #: views/email/no-data.php:3
990
- msgid "None of your personal data is stored on"
991
- msgstr "Es sind keinerlei persönliche Daten von Ihnen gespeichert auf"
992
-
993
- #: views/email/no-data.php:5
994
- msgid ""
995
- "If this was a mistake or you did not request this email, just ignore it and "
996
- "nothing will happen."
997
- msgstr ""
998
- "Falls dies ein Fehler war oder Sie diese E-Mail nicht anfordert haben, "
999
- "ignorieren Sie sie und es wird nichts passieren."
1000
-
1001
- #: views/email/request-export.php:13 views/email/request-forget.php:13
1002
- msgctxt "(Admin)"
1003
- msgid "As a reminder: according to GDPR, you have 30 days to comply."
1004
- msgstr ""
1005
-
1006
- #: views/global/delete-action.php:2
1007
- msgctxt "(Admin)"
1008
- msgid "Automatically anonymize data"
1009
- msgstr ""
1010
-
1011
- #: views/global/delete-action.php:5
1012
- msgctxt "(Admin)"
1013
- msgid "Automatically delete data"
1014
- msgstr ""
1015
-
1016
- #: views/global/delete-action.php:9
1017
- msgctxt "(Admin)"
1018
- msgid "Automatically anonymize data and notify me via email"
1019
- msgstr ""
1020
-
1021
- #: views/global/delete-action.php:13
1022
- msgctxt "(Admin)"
1023
- msgid "Automatically delete data and notify me via email"
1024
- msgstr ""
1025
-
1026
- #: views/global/delete-action.php:16 views/global/export-action.php:10
1027
- msgctxt "(Admin)"
1028
- msgid "Only notify me via email"
1029
- msgstr ""
1030
-
1031
- #: views/global/export-action.php:2
1032
- msgctxt "(Admin)"
1033
- msgid "Automatically download data"
1034
- msgstr ""
1035
-
1036
- #: views/global/export-action.php:6
1037
- msgctxt "(Admin)"
1038
- msgid "Automatically download data and notify me via email"
1039
- msgstr ""
1040
-
1041
- #: views/installer/continue-notice.php:2
1042
- msgctxt "(Admin)"
1043
- msgid "The The GDPR Framework setup has not been finalized yet."
1044
- msgstr ""
1045
-
1046
- #: views/installer/continue-notice.php:3
1047
- msgctxt "(Admin)"
1048
- msgid "You can continue the setup at any time."
1049
- msgstr ""
1050
-
1051
- #: views/installer/continue-notice.php:6
1052
- msgctxt "(Admin)"
1053
- msgid "Continue the setup wizard"
1054
- msgstr ""
1055
-
1056
- #: views/installer/continue-notice.php:9
1057
- msgctxt "(Admin)"
1058
- msgid "Hide this message"
1059
- msgstr ""
1060
-
1061
- #: views/installer/footer.php:7
1062
- msgid "Back"
1063
- msgstr "Zurück"
1064
-
1065
- #: views/installer/header.php:26
1066
- msgctxt "(Admin)"
1067
- msgid "I need help"
1068
- msgstr ""
1069
-
1070
- #: views/installer/header.php:29
1071
- msgctxt "(Admin)"
1072
- msgid "Developer Docs"
1073
- msgstr ""
1074
-
1075
- #: views/installer/header.php:36
1076
- msgctxt "(Admin)"
1077
- msgid "Configuration"
1078
- msgstr ""
1079
-
1080
- #: views/installer/header.php:46
1081
- msgctxt "(Admin)"
1082
- msgid "Forms & Consent"
1083
- msgstr ""
1084
-
1085
- #: views/installer/header.php:51
1086
- msgctxt "(Admin)"
1087
- msgid "Integrations"
1088
- msgstr ""
1089
-
1090
- #: views/installer/steps/configuration-settings.php:23
1091
- #: views/installer/steps/configuration-settings.php:73
1092
- msgctxt "(Admin)"
1093
- msgid "Enter the email address to notify"
1094
- msgstr ""
1095
-
1096
- #: views/installer/steps/disclaimer.php:21
1097
- msgctxt "(Admin)"
1098
- msgid "I accept"
1099
- msgstr ""
1100
-
1101
- #: views/installer/welcome-notice.php:7
1102
- msgctxt "(Admin)"
1103
- msgid "Run the setup wizard"
1104
- msgstr ""
1105
-
1106
- #: views/installer/welcome-notice.php:11
1107
- msgctxt "(Admin)"
1108
- msgid "Auto-install pages"
1109
- msgstr ""
1110
-
1111
- #: views/installer/welcome-notice.php:15
1112
- msgctxt "(Admin)"
1113
- msgid "Skip and install manually"
1114
- msgstr ""
1115
-
1116
- #: views/modules/contact-form-7/generator-privacy.php:6
1117
- msgctxt "(Admin)"
1118
- msgid ""
1119
- "This tag generates the default text for Terms & Conditions and/or Privacy "
1120
- "Policy checkbox."
1121
- msgstr ""
1122
-
1123
- #: views/modules/contact-form-7/generator-privacy.php:15
1124
- msgid "Insert"
1125
- msgstr "Einfügen"
1126
-
1127
- #: views/modules/wordpress-comments/terms-checkbox.php:6
1128
- #: views/modules/wordpress-user/registration-terms-checkbox.php:7
1129
- #, php-format
1130
- msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1131
- msgstr "Ich akzeptiere die %sAGB%s und die %sDatenschutzerklärung%s"
1132
-
1133
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
1134
- msgid "Manage consents"
1135
- msgstr "Zustimmungen verwalten"
1136
-
1137
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
1138
- #: views/privacy-tools/form-consent.php:6
1139
- msgid "Here you can withdraw any consents you have given."
1140
- msgstr "Hier können Sie Ihre Zustimmungen, die Sie gegeben haben, verwalten."
1141
-
1142
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
1143
- #: views/privacy-tools/form-consent.php:9
1144
- msgid "Consent types"
1145
- msgstr "Zustimmungsarten"
1146
-
1147
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
1148
- #: views/privacy-tools/form-consent.php:24
1149
- msgid "Withdraw"
1150
- msgstr "Widerrufen"
1151
-
1152
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
1153
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
1154
- msgctxt "(Admin)"
1155
- msgid "Delete this user and all data"
1156
- msgstr ""
1157
-
1158
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
1159
- msgctxt "(Admin)"
1160
- msgid "Delete my data"
1161
- msgstr ""
1162
-
1163
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
1164
- #: views/privacy-tools/form-delete.php:13
1165
- msgid "Delete all data we have gathered about you."
1166
- msgstr "Alle Daten, die wir über Sie gesammelt haben, widerrufen."
1167
-
1168
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
1169
- #: views/privacy-tools/form-delete.php:14
1170
- msgid "If you have a user account on our site, it will also be deleted."
1171
- msgstr ""
1172
- "Sollten Sie einen Benutzerkonto auf unserer Website haben, wird dieser "
1173
- "ebenfalls gelöscht."
1174
-
1175
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
1176
- #: views/privacy-tools/form-delete.php:15
1177
- msgid "Be careful - this action is permanent and CANNOT be undone."
1178
- msgstr ""
1179
- "Seien Sie vorsichtig - diese Aktion ist dauerhaft und KANN NICHT rückgängig "
1180
- "gemacht werden."
1181
-
1182
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
1183
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
1184
- msgctxt "(Admin)"
1185
- msgid ""
1186
- "You seem to have an administrator or equivalent role, so deleting/"
1187
- "anonymizing via this page is disabled."
1188
- msgstr ""
1189
-
1190
- #: views/modules/wordpress-user/dashboard/form-export.php:7
1191
- #: views/privacy-tools/form-export.php:1
1192
- msgid "Download your data"
1193
- msgstr "Ihre Daten herunterladen"
1194
-
1195
- #: views/modules/wordpress-user/dashboard/form-export.php:12
1196
- #: views/privacy-tools/form-export.php:13
1197
- msgid "Download as table"
1198
- msgstr "Download als Tabelle"
1199
-
1200
- #: views/modules/wordpress-user/dashboard/form-export.php:15
1201
- #: views/privacy-tools/form-export.php:22
1202
- msgid "Export as JSON"
1203
- msgstr "Export als JSON"
1204
-
1205
- #: views/modules/wordpress-user/dashboard/form-export.php:19
1206
- #: views/privacy-tools/form-export.php:4
1207
- msgid "You can download all your data formatted as a table for viewing."
1208
- msgstr ""
1209
- "Sie können alle Ihre Daten als eine Tabelle formatiert zur Ansicht "
1210
- "herunterladen."
1211
-
1212
- #: views/modules/wordpress-user/dashboard/form-export.php:20
1213
- #: views/privacy-tools/form-export.php:5
1214
- msgid "Alternatively, you can export it in machine-readable JSON format."
1215
- msgstr "Alternativ können Sie sie im maschinenlesbaren JSON-Format exportieren"
1216
-
1217
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
1218
- msgctxt "(Admin)"
1219
- msgid "Delete user and all data"
1220
- msgstr ""
1221
-
1222
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
1223
- msgctxt "(Admin)"
1224
- msgid "Anonymize user and all data"
1225
- msgstr ""
1226
-
1227
- #: views/modules/wordpress-user/dashboard/profile-page/header.php:2
1228
- msgctxt "(Admin)"
1229
- msgid "GDPR Data"
1230
- msgstr ""
1231
-
1232
- #: views/modules/wordpress-user/dashboard/profile-page/header.php:6
1233
- msgctxt "(Admin)"
1234
- msgid "This user has been anonymized."
1235
- msgstr ""
1236
-
1237
- #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
1238
- msgctxt "(Admin)"
1239
- msgid "Consents given"
1240
- msgstr ""
1241
-
1242
- #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
1243
- msgctxt "(Admin)"
1244
- msgid "No consents given"
1245
- msgstr ""
1246
-
1247
- #: views/privacy-tools/form-consent.php:2
1248
- msgid "Consent"
1249
- msgstr "Zustimmung"
1250
-
1251
- #: views/privacy-tools/form-delete.php:1
1252
- #: views/privacy-tools/notice-admin-role.php:1
1253
- msgid "Delete my user and data"
1254
- msgstr "Meinen Benutzer und Daten löschen"
1255
-
1256
- #: views/privacy-tools/form-delete.php:7
1257
- msgid "Delete my data"
1258
- msgstr "Meine Daten löschen"
1259
-
1260
- #: views/privacy-tools/form-identify.php:8
1261
- msgid "Back to Privacy Tools"
1262
- msgstr "Zurück zu Privatsphäre Tools"
1263
-
1264
- #: views/privacy-tools/form-identify.php:14
1265
- msgid "Identify yourself!"
1266
- msgstr "Bitte identifizieren Sie sich."
1267
-
1268
- #: views/privacy-tools/form-identify.php:17
1269
- #: views/privacy-tools/form-identify.php:20
1270
- msgid "Enter your email address"
1271
- msgstr "Geben Sie Ihre E-Mail Adresse ein"
1272
-
1273
- #: views/privacy-tools/form-identify.php:23
1274
- msgid "Send email"
1275
- msgstr "E-Mail senden"
1276
-
1277
- #: views/privacy-tools/notice-admin-role.php:4
1278
- msgctxt "(Admin)"
1279
- msgid "Data deletion is disabled for administrative accounts."
1280
- msgstr ""
1281
-
1282
- #: views/privacy-tools/notices.php:3
1283
- msgid ""
1284
- "We will send you an email with the link to access your data. Please check "
1285
- "your spam folder as well!"
1286
- msgstr ""
1287
- "Wir senden Ihnen eine E-Mail mit einem Link, um an Ihre Daten zu gelangen. "
1288
- "Bitte überprüfen Sie auch Ihren Spam-Ordner."
1289
-
1290
- #: views/privacy-tools/notices.php:7
1291
- msgid "The email you entered does not appear to be a valid email."
1292
- msgstr ""
1293
- "Die angegebene E-Mail Adresse scheint keine richtige E-Mail Adresse zu sein."
1294
-
1295
- #: views/privacy-tools/notices.php:11
1296
- msgid "Sorry - the link seems to have expired. Please try again!"
1297
- msgstr ""
1298
- "Sorry - der Link scheint abgelaufen zu sein. Bitte versuchen Sie es erneut."
1299
-
1300
- #: views/privacy-tools/notices.php:23
1301
- msgid "Your personal data has been removed!"
1302
- msgstr "Ihre persönlichen Daten wurden entfernt."
1303
-
1304
- #: views/privacy-tools/privacy-tools.php:5
1305
- msgid "You are identified as"
1306
- msgstr "Du wurdest identifiziert 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 &rsaquo; Error"
24
+ msgstr "WordPress GDPR &rsaquo; 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 "&mdash; Select &mdash;"
170
+ msgstr "&mdash; Auswählen &mdash;"
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&ouml;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 "&mdash; Create a new page &mdash;"
610
+ msgstr "&mdash; Neue Seite erstellen &mdash;"
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 "&laquo; Back"
893
+ msgstr "&laquo; 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 &#9829; by %sCodelight%s."
908
+ msgstr "The GDPR Framework. Built with &#9829; 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-it_IT.mo ADDED
Binary file
languages/gdpr-framework-it_IT.po ADDED
@@ -0,0 +1,1294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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-06 12:35+0200\n"
12
+ "Language: it_IT\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=UTF-8\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+ "Last-Translator: \n"
17
+ "Language-Team: \n"
18
+ "X-Generator: Poedit 2.0.7\n"
19
+
20
+ #: gdpr-framework.php:26
21
+ msgctxt "(Admin)"
22
+ msgid "WordPress GDPR &rsaquo; Error"
23
+ msgstr ""
24
+
25
+ #: gdpr-framework.php:35
26
+ msgctxt "(Admin)"
27
+ msgid "Invalid PHP version"
28
+ msgstr ""
29
+
30
+ #: gdpr-framework.php:35
31
+ msgctxt "(Admin)"
32
+ msgid "You must be using PHP 5.6.33 or greater."
33
+ msgstr ""
34
+
35
+ #: gdpr-framework.php:42
36
+ msgctxt "(Admin)"
37
+ msgid "Invalid WordPress version"
38
+ msgstr ""
39
+
40
+ #: gdpr-framework.php:42
41
+ msgctxt "(Admin)"
42
+ msgid "You must be using WordPress 4.3.0 or greater."
43
+ msgstr ""
44
+
45
+ #: gdpr-framework.php:52
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
53
+ msgctxt "(Admin)"
54
+ msgid "Autoloader not found."
55
+ msgstr ""
56
+
57
+ #: gdpr-framework.php:115
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 "&mdash; Select &mdash;"
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/ConsentManager.php:46
203
+ #: views/modules/contact-form-7/content-privacy.php:2
204
+ #: views/modules/wordpress-comments/terms-checkbox.php:14
205
+ #: views/modules/wordpress-user/registration-terms-checkbox.php:15
206
+ #, php-format
207
+ msgid "I accept the %sPrivacy Policy%s"
208
+ msgstr "Accetto la %sPrivacy Policy%s"
209
+
210
+ #: src/Components/Consent/ConsentManager.php:50
211
+ #: src/Components/Consent/ConsentManager.php:69
212
+ msgctxt "(Admin)"
213
+ msgid ""
214
+ "This consent is not visible by default. If someone wishes to withdraw it, "
215
+ "they should simply request to delete all their data."
216
+ msgstr ""
217
+
218
+ #: src/Components/Consent/ConsentManager.php:65
219
+ #, php-format
220
+ msgid "I accept the %sTerms & Conditions%s"
221
+ msgstr "Accetto i %sTermini & Condizioni%s"
222
+
223
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
224
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
225
+ #: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
226
+ msgctxt "(Admin)"
227
+ msgid "Privacy Policy"
228
+ msgstr ""
229
+
230
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
231
+ msgctxt "(Admin)"
232
+ msgid "Company information"
233
+ msgstr ""
234
+
235
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
236
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
237
+ msgctxt "(Admin)"
238
+ msgid "Company Name"
239
+ msgstr ""
240
+
241
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
242
+ msgctxt "(Admin)"
243
+ msgid "Company Email"
244
+ msgstr ""
245
+
246
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
247
+ msgctxt "(Admin)"
248
+ msgid "Company Location"
249
+ msgstr ""
250
+
251
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
252
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
253
+ msgctxt "(Admin)"
254
+ msgid "Representative Contact Name"
255
+ msgstr ""
256
+
257
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
258
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
259
+ msgctxt "(Admin)"
260
+ msgid "Representative Contact Email"
261
+ msgstr ""
262
+
263
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
264
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
265
+ msgctxt "(Admin)"
266
+ msgid "Representative Contact Phone"
267
+ msgstr ""
268
+
269
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
270
+ msgctxt "(Admin)"
271
+ msgid "Data Protection Authority"
272
+ msgstr ""
273
+
274
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
275
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
276
+ msgctxt "(Admin)"
277
+ msgid "Data Protection Authority Website"
278
+ msgstr ""
279
+
280
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
281
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
282
+ msgctxt "(Admin)"
283
+ msgid "Data Protection Authority Email"
284
+ msgstr ""
285
+
286
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
287
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
288
+ msgctxt "(Admin)"
289
+ msgid "Data Protection Authority Phone"
290
+ msgstr ""
291
+
292
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
293
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
294
+ msgctxt "(Admin)"
295
+ msgid "Data Protection Officer"
296
+ msgstr ""
297
+
298
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
299
+ msgctxt "(Admin)"
300
+ msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
301
+ msgstr ""
302
+
303
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
304
+ msgctxt "(Admin)"
305
+ msgid "Data Protection Officer Name"
306
+ msgstr ""
307
+
308
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
309
+ msgctxt "(Admin)"
310
+ msgid "Data Protection Officer Email"
311
+ msgstr ""
312
+
313
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
314
+ msgctxt "(Admin)"
315
+ msgid "Contact Email"
316
+ msgstr ""
317
+
318
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
319
+ msgctxt "(Admin)"
320
+ msgid "Representative Contact"
321
+ msgstr ""
322
+
323
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
324
+ msgctxt "(Admin)"
325
+ msgid "Knowledge base: Do I need to appoint an EU-based representative?"
326
+ msgstr ""
327
+
328
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
329
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
330
+ msgctxt "(Admin)"
331
+ msgid "DPO Name"
332
+ msgstr ""
333
+
334
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
335
+ msgctxt "(Admin)"
336
+ msgid "Save & Generate Policy"
337
+ msgstr ""
338
+
339
+ #: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
340
+ #: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
341
+ #: views/themes/storefront/footer.php:3
342
+ #: views/themes/twentyseventeen/footer.php:3
343
+ #: views/themes/twentysixteen/footer.php:4
344
+ msgid "Privacy Policy"
345
+ msgstr "Privacy Policy"
346
+
347
+ #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
348
+ msgid "This page is currently disabled."
349
+ msgstr "Questa pagina è disabilitata."
350
+
351
+ #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
352
+ #: src/Installer/Installer.php:279
353
+ #: src/Installer/Steps/ConfigurationPages.php:55
354
+ #: views/themes/storefront/footer.php:7
355
+ #: views/themes/twentyseventeen/footer.php:7
356
+ #: views/themes/twentysixteen/footer.php:9
357
+ msgid "Privacy Tools"
358
+ msgstr "Strumenti Privacy"
359
+
360
+ #: src/Components/Support/AdminTabSupport.php:13
361
+ #: src/Components/Support/AdminTabSupport.php:20
362
+ msgctxt "(Admin)"
363
+ msgid "Support"
364
+ msgstr ""
365
+
366
+ #: src/Components/WordpressComments/WordpressComments.php:90
367
+ #, php-format
368
+ msgid ""
369
+ "%sERROR:%s You need to accept the terms and conditions to post a comment."
370
+ msgstr ""
371
+ "%sERRORE:%s Devi accettare i termini e condizioni per postare un commento."
372
+
373
+ #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
374
+ #: views/privacy-tools/notices.php:19
375
+ msgid "We have received your request and will reply within 30 days."
376
+ msgstr "Abbiamo ricevuto la tua richiesta, risponderemo entro 30 giorni."
377
+
378
+ #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
379
+ #: views/privacy-tools/notices.php:15
380
+ msgid "Consent withdrawn."
381
+ msgstr "Consenso ritirato."
382
+
383
+ #: src/Components/WordpressUser/RegistrationForm.php:42
384
+ msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
385
+ msgstr "<strong>ERRORE</strong>: Devi accettare i termini e condizioni."
386
+
387
+ #: src/Components/WordpressUser/WordpressUser.php:63
388
+ #: src/Components/WordpressUser/WordpressUser.php:64
389
+ #: views/modules/wordpress-user/dashboard/data-page/header.php:2
390
+ msgctxt "(Admin)"
391
+ msgid "Privacy Tools"
392
+ msgstr ""
393
+
394
+ #: src/DataSubject/AdminTabDataSubject.php:27
395
+ #: src/DataSubject/AdminTabDataSubject.php:41
396
+ msgctxt "(Admin)"
397
+ msgid "Data Subjects"
398
+ msgstr ""
399
+
400
+ #: src/DataSubject/DataRepository.php:143
401
+ msgid "Data exported"
402
+ msgstr "Dati esportati"
403
+
404
+ #: src/DataSubject/DataRepository.php:158
405
+ msgid "Data export request"
406
+ msgstr "Richiesta di esportazione dei dati"
407
+
408
+ #: src/DataSubject/DataRepository.php:171
409
+ msgid "Data removed"
410
+ msgstr "Dati rimossi"
411
+
412
+ #: src/DataSubject/DataRepository.php:186
413
+ msgid "Data removal request"
414
+ msgstr "Richiesta di cancellazione dei dati"
415
+
416
+ #: src/DataSubject/DataSubjectIdentificator.php:65
417
+ #: src/DataSubject/DataSubjectIdentificator.php:82
418
+ msgid "Your personal data on"
419
+ msgstr "I tuoi dati personali su"
420
+
421
+ #: src/Helpers.php:27
422
+ msgctxt "(Admin)"
423
+ msgid "Austria"
424
+ msgstr ""
425
+
426
+ #: src/Helpers.php:28
427
+ msgctxt "(Admin)"
428
+ msgid "Belgium"
429
+ msgstr ""
430
+
431
+ #: src/Helpers.php:29
432
+ msgctxt "(Admin)"
433
+ msgid "Bulgaria"
434
+ msgstr ""
435
+
436
+ #: src/Helpers.php:30
437
+ msgctxt "(Admin)"
438
+ msgid "Croatia"
439
+ msgstr ""
440
+
441
+ #: src/Helpers.php:31
442
+ msgctxt "(Admin)"
443
+ msgid "Cyprus"
444
+ msgstr ""
445
+
446
+ #: src/Helpers.php:32
447
+ msgctxt "(Admin)"
448
+ msgid "Czech Republic"
449
+ msgstr ""
450
+
451
+ #: src/Helpers.php:33
452
+ msgctxt "(Admin)"
453
+ msgid "Denmark"
454
+ msgstr ""
455
+
456
+ #: src/Helpers.php:34
457
+ msgctxt "(Admin)"
458
+ msgid "Estonia"
459
+ msgstr ""
460
+
461
+ #: src/Helpers.php:35
462
+ msgctxt "(Admin)"
463
+ msgid "Finland"
464
+ msgstr ""
465
+
466
+ #: src/Helpers.php:36
467
+ msgctxt "(Admin)"
468
+ msgid "France"
469
+ msgstr ""
470
+
471
+ #: src/Helpers.php:37
472
+ msgctxt "(Admin)"
473
+ msgid "Germany"
474
+ msgstr ""
475
+
476
+ #: src/Helpers.php:38
477
+ msgctxt "(Admin)"
478
+ msgid "Greece"
479
+ msgstr ""
480
+
481
+ #: src/Helpers.php:39
482
+ msgctxt "(Admin)"
483
+ msgid "Hungary"
484
+ msgstr ""
485
+
486
+ #: src/Helpers.php:40
487
+ msgctxt "(Admin)"
488
+ msgid "Ireland"
489
+ msgstr ""
490
+
491
+ #: src/Helpers.php:41
492
+ msgctxt "(Admin)"
493
+ msgid "Italy"
494
+ msgstr ""
495
+
496
+ #: src/Helpers.php:42
497
+ msgctxt "(Admin)"
498
+ msgid "Latvia"
499
+ msgstr ""
500
+
501
+ #: src/Helpers.php:43
502
+ msgctxt "(Admin)"
503
+ msgid "Lithuania"
504
+ msgstr ""
505
+
506
+ #: src/Helpers.php:44
507
+ msgctxt "(Admin)"
508
+ msgid "Luxembourg"
509
+ msgstr ""
510
+
511
+ #: src/Helpers.php:45
512
+ msgctxt "(Admin)"
513
+ msgid "Malta"
514
+ msgstr ""
515
+
516
+ #: src/Helpers.php:46
517
+ msgctxt "(Admin)"
518
+ msgid "Netherlands"
519
+ msgstr ""
520
+
521
+ #: src/Helpers.php:47
522
+ msgctxt "(Admin)"
523
+ msgid "Poland"
524
+ msgstr ""
525
+
526
+ #: src/Helpers.php:48
527
+ msgctxt "(Admin)"
528
+ msgid "Portugal"
529
+ msgstr ""
530
+
531
+ #: src/Helpers.php:49
532
+ msgctxt "(Admin)"
533
+ msgid "Romania"
534
+ msgstr ""
535
+
536
+ #: src/Helpers.php:50
537
+ msgctxt "(Admin)"
538
+ msgid "Slovakia"
539
+ msgstr ""
540
+
541
+ #: src/Helpers.php:51
542
+ msgctxt "(Admin)"
543
+ msgid "Slovenia"
544
+ msgstr ""
545
+
546
+ #: src/Helpers.php:52
547
+ msgctxt "(Admin)"
548
+ msgid "Spain"
549
+ msgstr ""
550
+
551
+ #: src/Helpers.php:53
552
+ msgctxt "(Admin)"
553
+ msgid "Sweden"
554
+ msgstr ""
555
+
556
+ #: src/Helpers.php:54
557
+ msgctxt "(Admin)"
558
+ msgid "United Kingdom"
559
+ msgstr ""
560
+
561
+ #: src/Helpers.php:69
562
+ msgctxt "(Admin)"
563
+ msgid "Iceland"
564
+ msgstr ""
565
+
566
+ #: src/Helpers.php:70
567
+ msgctxt "(Admin)"
568
+ msgid "Norway"
569
+ msgstr ""
570
+
571
+ #: src/Helpers.php:71
572
+ msgctxt "(Admin)"
573
+ msgid "Liechtenstein"
574
+ msgstr ""
575
+
576
+ #: src/Helpers.php:72
577
+ msgctxt "(Admin)"
578
+ msgid "Switzerland"
579
+ msgstr ""
580
+
581
+ #: src/Helpers.php:73
582
+ msgctxt "(Admin)"
583
+ msgid "United States"
584
+ msgstr ""
585
+
586
+ #: src/Helpers.php:74
587
+ msgctxt "(Admin)"
588
+ msgid "Rest of the world"
589
+ msgstr ""
590
+
591
+ #: src/Helpers.php:145
592
+ msgid "An error has occurred. Please contact the site administrator."
593
+ msgstr "E’ avvenuto un errore. Contatta l’amministratore del sito web."
594
+
595
+ #: src/Installer/Installer.php:135
596
+ msgctxt "(Admin)"
597
+ msgid "Setup Wizard"
598
+ msgstr ""
599
+
600
+ #: src/Installer/Steps/ConfigurationPages.php:23
601
+ #: src/Installer/Steps/PolicySettings.php:23
602
+ #: src/Installer/Steps/PolicySettings.php:48
603
+ msgctxt "(Admin)"
604
+ msgid "&mdash; Create a new page &mdash;"
605
+ msgstr ""
606
+
607
+ #: src/Installer/Steps/PolicySettings.php:38
608
+ msgctxt "(Admin)"
609
+ msgid ""
610
+ "We have automatically selected your WooCommerce Terms & Conditions page."
611
+ msgstr ""
612
+
613
+ #: src/Modules/ContactForm7/ContactForm7.php:35
614
+ msgctxt "(Admin)"
615
+ msgid "gdpr terms txt"
616
+ msgstr ""
617
+
618
+ #: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
619
+ #, php-format
620
+ msgid "Nonce error for action \"%s\". Please go back and try again!"
621
+ msgstr "Errore per l’azione “%s”. Torna indietro e riprova!"
622
+
623
+ #: src/Router.php:149
624
+ msgctxt "(Admin)"
625
+ msgid "You do not have the required permissions to perform this action!"
626
+ msgstr ""
627
+
628
+ #: views/admin/consent.php:3
629
+ msgctxt "(Admin)"
630
+ msgid "Default consent types"
631
+ msgstr ""
632
+
633
+ #: views/admin/consent.php:4
634
+ msgctxt "(Admin)"
635
+ msgid ""
636
+ "These are the consent types that have been automatically registered by the "
637
+ "framework or a plugin."
638
+ msgstr ""
639
+
640
+ #: views/admin/consent.php:7 views/admin/consent.php:52
641
+ msgctxt "(Admin)"
642
+ msgid "Slug"
643
+ msgstr ""
644
+
645
+ #: views/admin/consent.php:8 views/admin/consent.php:38
646
+ #: views/admin/consent.php:60
647
+ msgctxt "(Admin)"
648
+ msgid "Title"
649
+ msgstr ""
650
+
651
+ #: views/admin/consent.php:9 views/admin/consent.php:41
652
+ #: views/admin/consent.php:63
653
+ msgctxt "(Admin)"
654
+ msgid "Description"
655
+ msgstr ""
656
+
657
+ #: views/admin/consent.php:10
658
+ msgctxt "(Admin)"
659
+ msgid "Visibility"
660
+ msgstr ""
661
+
662
+ #: views/admin/consent.php:18
663
+ msgctxt "(Admin)"
664
+ msgid "Visible"
665
+ msgstr ""
666
+
667
+ #: views/admin/consent.php:20
668
+ msgctxt "(Admin)"
669
+ msgid "Hidden"
670
+ msgstr ""
671
+
672
+ #: views/admin/consent.php:29
673
+ msgctxt "(Admin)"
674
+ msgid "Custom consent types"
675
+ msgstr ""
676
+
677
+ #: views/admin/consent.php:30
678
+ msgctxt "(Admin)"
679
+ msgid ""
680
+ "Here you can add custom consent types to track. They will not be used "
681
+ "anywhere by default - you will need to build an integration for each of them."
682
+ msgstr ""
683
+
684
+ #: views/admin/consent.php:35
685
+ msgctxt "(Admin)"
686
+ msgid "Machine-readable slug"
687
+ msgstr ""
688
+
689
+ #: views/admin/consent.php:44 views/admin/consent.php:68
690
+ msgctxt "(Admin)"
691
+ msgid "Visible?"
692
+ msgstr ""
693
+
694
+ #: views/admin/consent.php:72
695
+ msgctxt "(Admin)"
696
+ msgid "Remove"
697
+ msgstr ""
698
+
699
+ #: views/admin/consent.php:93
700
+ msgctxt "(Admin)"
701
+ msgid "Additional info"
702
+ msgstr ""
703
+
704
+ #: views/admin/consent.php:95
705
+ msgctxt "(Admin)"
706
+ msgid ""
707
+ "This text will be displayed to your data subjects on the Privacy Tools page."
708
+ msgstr ""
709
+
710
+ #: views/admin/data-subjects/search-form.php:2
711
+ msgctxt "(Admin)"
712
+ msgid ""
713
+ "On this page, you can find which data subjects personal data you are storing "
714
+ "and download, export or delete it."
715
+ msgstr ""
716
+
717
+ #: views/admin/data-subjects/search-form.php:10
718
+ msgctxt "(Admin)"
719
+ msgid "Find data subject by email"
720
+ msgstr ""
721
+
722
+ #: views/admin/data-subjects/search-form.php:11
723
+ msgctxt "(Admin)"
724
+ msgid "Email address"
725
+ msgstr ""
726
+
727
+ #: views/admin/data-subjects/search-form.php:16
728
+ msgctxt "(Admin)"
729
+ msgid "Search"
730
+ msgstr ""
731
+
732
+ #: views/admin/data-subjects/search-results.php:7
733
+ msgctxt "(Admin)"
734
+ msgid "Username"
735
+ msgstr ""
736
+
737
+ #: views/admin/data-subjects/search-results.php:12
738
+ msgctxt "(Admin)"
739
+ msgid "is not a registered user."
740
+ msgstr ""
741
+
742
+ #: views/admin/data-subjects/search-results.php:16
743
+ msgctxt "(Admin)"
744
+ msgid "Download data (html)"
745
+ msgstr ""
746
+
747
+ #: views/admin/data-subjects/search-results.php:17
748
+ msgctxt "(Admin)"
749
+ msgid "Export data (json)"
750
+ msgstr ""
751
+
752
+ #: views/admin/data-subjects/search-results.php:21
753
+ msgctxt "(Admin)"
754
+ msgid ""
755
+ "This user has admin capabilities. Deleting data via this interface is "
756
+ "disabled."
757
+ msgstr ""
758
+
759
+ #: views/admin/data-subjects/search-results.php:24
760
+ msgctxt "(Admin)"
761
+ msgid "Anonymize data"
762
+ msgstr ""
763
+
764
+ #: views/admin/data-subjects/search-results.php:25
765
+ msgctxt "(Admin)"
766
+ msgid "Delete data"
767
+ msgstr ""
768
+
769
+ #: views/admin/data-subjects/search-results.php:29
770
+ msgctxt "(Admin)"
771
+ msgid "No data found!"
772
+ msgstr ""
773
+
774
+ #: views/admin/general/delete-action-email.php:5
775
+ #: views/admin/general/export-action-email.php:5
776
+ #: views/installer/steps/configuration-settings.php:29
777
+ #: views/installer/steps/configuration-settings.php:79
778
+ msgid "Email address"
779
+ msgstr "Indirizzo Email"
780
+
781
+ #: views/admin/general/delete-action-reassign.php:3
782
+ #: views/installer/steps/configuration-settings.php:50
783
+ msgctxt "(Admin)"
784
+ msgid "Delete content"
785
+ msgstr ""
786
+
787
+ #: views/admin/general/delete-action-reassign.php:6
788
+ #: views/installer/steps/configuration-settings.php:53
789
+ msgctxt "(Admin)"
790
+ msgid "Reassign content to a user"
791
+ msgstr ""
792
+
793
+ #: views/admin/general/delete-action-reassign.php:10
794
+ msgctxt "(Admin)"
795
+ msgid ""
796
+ "If the user has submitted any content on your site, should it be deleted or "
797
+ "reassigned to another user?"
798
+ msgstr ""
799
+
800
+ #: views/admin/general/description-data-page.php:2
801
+ msgctxt "(Admin)"
802
+ msgid ""
803
+ "Select the page where users can go to control their data. This page must "
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"
810
+ msgstr ""
811
+
812
+ #: views/admin/general/enable.php:12
813
+ msgctxt "(Admin)"
814
+ msgid ""
815
+ "Enable the Privacy Tools page on front-end and dashboard. This allows "
816
+ "visitors to request viewing and deleting their personal data and withdraw "
817
+ "consents."
818
+ msgstr ""
819
+
820
+ #: views/admin/general/theme-compatibility.php:9
821
+ #: views/installer/steps/integrations.php:21
822
+ msgctxt "(Admin)"
823
+ msgid ""
824
+ "Automatically add Privacy Policy and Privacy Tools links to your site footer."
825
+ msgstr ""
826
+
827
+ #: views/admin/notices/header.php:4 views/admin/settings-page.php:3
828
+ #: views/installer/header.php:23
829
+ msgctxt "(Admin)"
830
+ msgid "The GDPR Framework"
831
+ msgstr ""
832
+
833
+ #: views/admin/notices/helper-autoinstall.php:2
834
+ msgctxt "(Admin)"
835
+ msgid ""
836
+ "A Privacy Policy page has been created, but it is empty. You can generate a "
837
+ "policy template on this page."
838
+ msgstr ""
839
+
840
+ #: views/admin/notices/helper-policy.php:2
841
+ msgctxt "(Admin)"
842
+ msgid ""
843
+ "Heads up - your Privacy Policy still requires some attention. Find the "
844
+ "places marked with [TODO] and replace them with real content!"
845
+ msgstr ""
846
+
847
+ #: views/admin/notices/helper-tools.php:2
848
+ msgctxt "(Admin)"
849
+ msgid "The contents of this page should contain the [gdpr_tools] shortcode."
850
+ msgstr ""
851
+
852
+ #: views/admin/privacy-policy/description-policy-page.php:2
853
+ msgctxt "(Admin)"
854
+ msgid "Select the page which will contain your Privacy Policy"
855
+ msgstr ""
856
+
857
+ #: views/admin/privacy-policy/generated.php:3
858
+ msgctxt "(Admin)"
859
+ msgid "Your Privacy Policy has been generated."
860
+ msgstr ""
861
+
862
+ #: views/admin/privacy-policy/generated.php:20
863
+ msgctxt "(Admin)"
864
+ msgid "&laquo; Back"
865
+ msgstr ""
866
+
867
+ #: views/admin/privacy-policy/header.php:2
868
+ msgctxt "(Admin)"
869
+ msgid ""
870
+ "This page allows you to generate a Privacy Policy based on the information "
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 &#9829; 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?"
883
+ msgstr ""
884
+
885
+ #: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
886
+ msgctxt "(Admin)"
887
+ msgid "Site Owner's guide to GDPR"
888
+ msgstr ""
889
+
890
+ #: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
891
+ msgctxt "(Admin)"
892
+ msgid "Read the full guide on GDPR compliance."
893
+ msgstr ""
894
+
895
+ #: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
896
+ msgctxt "(Admin)"
897
+ msgid "Knowledge base"
898
+ msgstr ""
899
+
900
+ #: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
901
+ msgctxt "(Admin)"
902
+ msgid "Check out the knowledge base for common questions and answers."
903
+ msgstr ""
904
+
905
+ #: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
906
+ msgctxt "(Admin)"
907
+ msgid "Developer's guide to GDPR"
908
+ msgstr ""
909
+
910
+ #: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
911
+ msgctxt "(Admin)"
912
+ msgid "We have a thorough guide to help making custom sites compliant."
913
+ msgstr ""
914
+
915
+ #: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
916
+ msgctxt "(Admin)"
917
+ msgid "Need help?"
918
+ msgstr ""
919
+
920
+ #: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
921
+ msgctxt "(Admin)"
922
+ msgid "Submit a support request"
923
+ msgstr ""
924
+
925
+ #: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
926
+ msgctxt "(Admin)"
927
+ msgid ""
928
+ "Found a bug or problem with the plugin? Post in the wordpress.org support "
929
+ "forum."
930
+ msgstr ""
931
+
932
+ #: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
933
+ msgctxt "(Admin)"
934
+ msgid "Request a consultation"
935
+ msgstr ""
936
+
937
+ #: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
938
+ msgctxt "(Admin)"
939
+ msgid ""
940
+ "Need development or legal assistance in making your site compliant? We can "
941
+ "help!"
942
+ msgstr ""
943
+
944
+ #: views/admin/wizard-buttons.php:2
945
+ msgctxt "(Admin)"
946
+ msgid "Restart setup wizard"
947
+ msgstr ""
948
+
949
+ #: views/email/action-export.php:8 views/email/action-forget.php:12
950
+ msgctxt "(Admin)"
951
+ msgid ""
952
+ "This email is just for your information. You don't need to take any action"
953
+ msgstr ""
954
+
955
+ #: views/email/action-forget.php:8
956
+ msgctxt "(Admin)"
957
+ msgid "The data subject had a user account on your website."
958
+ msgstr ""
959
+
960
+ #: views/email/identify-data-subject.php:2
961
+ msgid "Someone has requested access to your data on"
962
+ msgstr "Qualcuno ha richiesto l’accesso dei tuoi dati su"
963
+
964
+ #: views/email/identify-data-subject.php:3
965
+ msgid "If this was a mistake, just ignore this email and nothing will happen."
966
+ msgstr ""
967
+ "Se questo è stato uno sbaglio, ignora questa mail e non succederà nulla."
968
+
969
+ #: views/email/identify-data-subject.php:4
970
+ msgid "To manage your data, visit the following address:"
971
+ msgstr "Per gestire i tuoi dati, visita il seguente indirizzo:"
972
+
973
+ #: views/email/identify-data-subject.php:10
974
+ msgid "This link is valid for 15 minutes."
975
+ msgstr "Questo link è valido per 15 minuti."
976
+
977
+ #: views/email/no-data.php:2
978
+ msgid "Someone has requested information about your personal data on"
979
+ msgstr "Qualcuno ha richiesto le informazioni dei tuoi dati personali su "
980
+
981
+ #: views/email/no-data.php:3
982
+ msgid "None of your personal data is stored on"
983
+ msgstr "Nessun tuo dato personale è presente su"
984
+
985
+ #: views/email/no-data.php:5
986
+ msgid ""
987
+ "If this was a mistake or you did not request this email, just ignore it and "
988
+ "nothing will happen."
989
+ msgstr ""
990
+ "Se questo è non voluto o un errore o non hai richiesto questa email, ignora "
991
+ "semplicemente questa email e nulla succederà."
992
+
993
+ #: views/email/request-export.php:13 views/email/request-forget.php:13
994
+ msgctxt "(Admin)"
995
+ msgid "As a reminder: according to GDPR, you have 30 days to comply."
996
+ msgstr ""
997
+
998
+ #: views/global/delete-action.php:2
999
+ msgctxt "(Admin)"
1000
+ msgid "Automatically anonymize data"
1001
+ msgstr ""
1002
+
1003
+ #: views/global/delete-action.php:5
1004
+ msgctxt "(Admin)"
1005
+ msgid "Automatically delete data"
1006
+ msgstr ""
1007
+
1008
+ #: views/global/delete-action.php:9
1009
+ msgctxt "(Admin)"
1010
+ msgid "Automatically anonymize data and notify me via email"
1011
+ msgstr ""
1012
+
1013
+ #: views/global/delete-action.php:13
1014
+ msgctxt "(Admin)"
1015
+ msgid "Automatically delete data and notify me via email"
1016
+ msgstr ""
1017
+
1018
+ #: views/global/delete-action.php:16 views/global/export-action.php:10
1019
+ msgctxt "(Admin)"
1020
+ msgid "Only notify me via email"
1021
+ msgstr ""
1022
+
1023
+ #: views/global/export-action.php:2
1024
+ msgctxt "(Admin)"
1025
+ msgid "Automatically download data"
1026
+ msgstr ""
1027
+
1028
+ #: views/global/export-action.php:6
1029
+ msgctxt "(Admin)"
1030
+ msgid "Automatically download data and notify me via email"
1031
+ msgstr ""
1032
+
1033
+ #: views/installer/continue-notice.php:2
1034
+ msgctxt "(Admin)"
1035
+ msgid "The The GDPR Framework setup has not been finalized yet."
1036
+ msgstr ""
1037
+
1038
+ #: views/installer/continue-notice.php:3
1039
+ msgctxt "(Admin)"
1040
+ msgid "You can continue the setup at any time."
1041
+ msgstr ""
1042
+
1043
+ #: views/installer/continue-notice.php:6
1044
+ msgctxt "(Admin)"
1045
+ msgid "Continue the setup wizard"
1046
+ msgstr ""
1047
+
1048
+ #: views/installer/continue-notice.php:9
1049
+ msgctxt "(Admin)"
1050
+ msgid "Hide this message"
1051
+ msgstr ""
1052
+
1053
+ #: views/installer/footer.php:7
1054
+ msgid "Back"
1055
+ msgstr "Indietro"
1056
+
1057
+ #: views/installer/header.php:26
1058
+ msgctxt "(Admin)"
1059
+ msgid "I need help"
1060
+ msgstr ""
1061
+
1062
+ #: views/installer/header.php:29
1063
+ msgctxt "(Admin)"
1064
+ msgid "Developer Docs"
1065
+ msgstr ""
1066
+
1067
+ #: views/installer/header.php:36
1068
+ msgctxt "(Admin)"
1069
+ msgid "Configuration"
1070
+ msgstr ""
1071
+
1072
+ #: views/installer/header.php:46
1073
+ msgctxt "(Admin)"
1074
+ msgid "Forms & Consent"
1075
+ msgstr ""
1076
+
1077
+ #: views/installer/header.php:51
1078
+ msgctxt "(Admin)"
1079
+ msgid "Integrations"
1080
+ msgstr ""
1081
+
1082
+ #: views/installer/steps/configuration-settings.php:23
1083
+ #: views/installer/steps/configuration-settings.php:73
1084
+ msgctxt "(Admin)"
1085
+ msgid "Enter the email address to notify"
1086
+ msgstr ""
1087
+
1088
+ #: views/installer/steps/disclaimer.php:21
1089
+ msgctxt "(Admin)"
1090
+ msgid "I accept"
1091
+ msgstr ""
1092
+
1093
+ #: views/installer/welcome-notice.php:7
1094
+ msgctxt "(Admin)"
1095
+ msgid "Run the setup wizard"
1096
+ msgstr ""
1097
+
1098
+ #: views/installer/welcome-notice.php:11
1099
+ msgctxt "(Admin)"
1100
+ msgid "Auto-install pages"
1101
+ msgstr ""
1102
+
1103
+ #: views/installer/welcome-notice.php:15
1104
+ msgctxt "(Admin)"
1105
+ msgid "Skip and install manually"
1106
+ msgstr ""
1107
+
1108
+ #: views/modules/contact-form-7/generator-privacy.php:6
1109
+ msgctxt "(Admin)"
1110
+ msgid ""
1111
+ "This tag generates the default text for Terms & Conditions and/or Privacy "
1112
+ "Policy checkbox."
1113
+ msgstr ""
1114
+
1115
+ #: views/modules/contact-form-7/generator-privacy.php:15
1116
+ msgid "Insert"
1117
+ msgstr "Inserisci"
1118
+
1119
+ #: views/modules/wordpress-comments/terms-checkbox.php:6
1120
+ #: views/modules/wordpress-user/registration-terms-checkbox.php:7
1121
+ #, php-format
1122
+ msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1123
+ msgstr "Accetto i %sTermini e Condizioni%s e la %sPrivacy Policy%s"
1124
+
1125
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
1126
+ msgid "Manage consents"
1127
+ msgstr "Gestisci consenso"
1128
+
1129
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
1130
+ #: views/privacy-tools/form-consent.php:6
1131
+ msgid "Here you can withdraw any consents you have given."
1132
+ msgstr "Qui puoi rimuovere qualsiasi consenso che hai dato."
1133
+
1134
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
1135
+ #: views/privacy-tools/form-consent.php:9
1136
+ msgid "Consent types"
1137
+ msgstr "Tipi di consenso"
1138
+
1139
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
1140
+ #: views/privacy-tools/form-consent.php:24
1141
+ msgid "Withdraw"
1142
+ msgstr "Rimuovi"
1143
+
1144
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
1145
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
1146
+ msgctxt "(Admin)"
1147
+ msgid "Delete this user and all data"
1148
+ msgstr ""
1149
+
1150
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
1151
+ msgctxt "(Admin)"
1152
+ msgid "Delete my data"
1153
+ msgstr ""
1154
+
1155
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
1156
+ #: views/privacy-tools/form-delete.php:13
1157
+ msgid "Delete all data we have gathered about you."
1158
+ msgstr "Cancella tutti i dati che abbiamo su di te."
1159
+
1160
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
1161
+ #: views/privacy-tools/form-delete.php:14
1162
+ msgid "If you have a user account on our site, it will also be deleted."
1163
+ msgstr "Se hai un account su questo sito web, sarà cancellato."
1164
+
1165
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
1166
+ #: views/privacy-tools/form-delete.php:15
1167
+ msgid "Be careful - this action is permanent and CANNOT be undone."
1168
+ msgstr ""
1169
+ "Stai attento - questa azione è permanente e non può essere annullata o "
1170
+ "ripristinata."
1171
+
1172
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
1173
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
1174
+ msgctxt "(Admin)"
1175
+ msgid ""
1176
+ "You seem to have an administrator or equivalent role, so deleting/"
1177
+ "anonymizing via this page is disabled."
1178
+ msgstr ""
1179
+
1180
+ #: views/modules/wordpress-user/dashboard/form-export.php:7
1181
+ #: views/privacy-tools/form-export.php:1
1182
+ msgid "Download your data"
1183
+ msgstr "Scarica i tuoi dati"
1184
+
1185
+ #: views/modules/wordpress-user/dashboard/form-export.php:12
1186
+ #: views/privacy-tools/form-export.php:13
1187
+ msgid "Download as table"
1188
+ msgstr "Scarica in tabella"
1189
+
1190
+ #: views/modules/wordpress-user/dashboard/form-export.php:15
1191
+ #: views/privacy-tools/form-export.php:22
1192
+ msgid "Export as JSON"
1193
+ msgstr "Esporta come file JSON"
1194
+
1195
+ #: views/modules/wordpress-user/dashboard/form-export.php:19
1196
+ #: views/privacy-tools/form-export.php:4
1197
+ msgid "You can download all your data formatted as a table for viewing."
1198
+ msgstr ""
1199
+ "Puoi scaricare tutti i tuoi dati formattati come tabella per una migliore "
1200
+ "lettura."
1201
+
1202
+ #: views/modules/wordpress-user/dashboard/form-export.php:20
1203
+ #: views/privacy-tools/form-export.php:5
1204
+ msgid "Alternatively, you can export it in machine-readable JSON format."
1205
+ msgstr "Oppure, puoi esportare i dati in formato JSON."
1206
+
1207
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
1208
+ msgctxt "(Admin)"
1209
+ msgid "Delete user and all data"
1210
+ msgstr ""
1211
+
1212
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
1213
+ msgctxt "(Admin)"
1214
+ msgid "Anonymize user and all data"
1215
+ msgstr ""
1216
+
1217
+ #: views/modules/wordpress-user/dashboard/profile-page/header.php:2
1218
+ msgctxt "(Admin)"
1219
+ msgid "GDPR Data"
1220
+ msgstr ""
1221
+
1222
+ #: views/modules/wordpress-user/dashboard/profile-page/header.php:6
1223
+ msgctxt "(Admin)"
1224
+ msgid "This user has been anonymized."
1225
+ msgstr ""
1226
+
1227
+ #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
1228
+ msgctxt "(Admin)"
1229
+ msgid "Consents given"
1230
+ msgstr ""
1231
+
1232
+ #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
1233
+ msgctxt "(Admin)"
1234
+ msgid "No consents given"
1235
+ msgstr ""
1236
+
1237
+ #: views/privacy-tools/form-consent.php:2
1238
+ msgid "Consent"
1239
+ msgstr "Consenso"
1240
+
1241
+ #: views/privacy-tools/form-delete.php:1
1242
+ #: views/privacy-tools/notice-admin-role.php:1
1243
+ msgid "Delete my user and data"
1244
+ msgstr "Cancella il mio utente ed i dati"
1245
+
1246
+ #: views/privacy-tools/form-delete.php:7
1247
+ msgid "Delete my data"
1248
+ msgstr "Cancella i miei dati"
1249
+
1250
+ #: views/privacy-tools/form-identify.php:8
1251
+ msgid "Back to Privacy Tools"
1252
+ msgstr "Torna agli strumenti Privacy"
1253
+
1254
+ #: views/privacy-tools/form-identify.php:14
1255
+ msgid "Identify yourself!"
1256
+ msgstr "Identificati!"
1257
+
1258
+ #: views/privacy-tools/form-identify.php:17
1259
+ #: views/privacy-tools/form-identify.php:20
1260
+ msgid "Enter your email address"
1261
+ msgstr "Inserisci il tuo indirizzo mail"
1262
+
1263
+ #: views/privacy-tools/form-identify.php:23
1264
+ msgid "Send email"
1265
+ msgstr "Invia la email"
1266
+
1267
+ #: views/privacy-tools/notice-admin-role.php:4
1268
+ msgctxt "(Admin)"
1269
+ msgid "Data deletion is disabled for administrative accounts."
1270
+ msgstr ""
1271
+
1272
+ #: views/privacy-tools/notices.php:3
1273
+ msgid ""
1274
+ "We will send you an email with the link to access your data. Please check "
1275
+ "your spam folder as well!"
1276
+ msgstr ""
1277
+ "Invieremo una mail col link per accedere ai tuoi dati. Se non la vedi "
1278
+ "arrivare, controlla anche la cartella Spam della tua email."
1279
+
1280
+ #: views/privacy-tools/notices.php:7
1281
+ msgid "The email you entered does not appear to be a valid email."
1282
+ msgstr "La mail che hai inserito non sembra essere valida."
1283
+
1284
+ #: views/privacy-tools/notices.php:11
1285
+ msgid "Sorry - the link seems to have expired. Please try again!"
1286
+ msgstr "Scusa - sembra che il link sia scaduto. Riprova!"
1287
+
1288
+ #: views/privacy-tools/notices.php:23
1289
+ msgid "Your personal data has been removed!"
1290
+ msgstr "I tuoi dati personali sono stati rimossi!"
1291
+
1292
+ #: views/privacy-tools/privacy-tools.php:5
1293
+ msgid "You are identified as"
1294
+ msgstr "Sei stato identificato come"
languages/gdpr-framework.pot CHANGED
@@ -1,1284 +1,1284 @@
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-04-16 10:50+0000\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:26
21
- msgctxt "(Admin)"
22
- msgid "WordPress GDPR &rsaquo; Error"
23
- msgstr ""
24
-
25
- #: gdpr-framework.php:35
26
- msgctxt "(Admin)"
27
- msgid "Invalid PHP version"
28
- msgstr ""
29
-
30
- #: gdpr-framework.php:35
31
- msgctxt "(Admin)"
32
- msgid "You must be using PHP 5.6.33 or greater."
33
- msgstr ""
34
-
35
- #: gdpr-framework.php:42
36
- msgctxt "(Admin)"
37
- msgid "Invalid WordPress version"
38
- msgstr ""
39
-
40
- #: gdpr-framework.php:42
41
- msgctxt "(Admin)"
42
- msgid "You must be using WordPress 4.3.0 or greater."
43
- msgstr ""
44
-
45
- #: gdpr-framework.php:52
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
53
- msgctxt "(Admin)"
54
- msgid "Autoloader not found."
55
- msgstr ""
56
-
57
- #: gdpr-framework.php:115
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 "&mdash; Select &mdash;"
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/ConsentManager.php:46
203
- #: views/modules/contact-form-7/content-privacy.php:2
204
- #: views/modules/wordpress-comments/terms-checkbox.php:14
205
- #: views/modules/wordpress-user/registration-terms-checkbox.php:15
206
- #, php-format
207
- msgid "I accept the %sPrivacy Policy%s"
208
- msgstr ""
209
-
210
- #: src/Components/Consent/ConsentManager.php:50
211
- #: src/Components/Consent/ConsentManager.php:69
212
- msgctxt "(Admin)"
213
- msgid ""
214
- "This consent is not visible by default. If someone wishes to withdraw it, "
215
- "they should simply request to delete all their data."
216
- msgstr ""
217
-
218
- #: src/Components/Consent/ConsentManager.php:65
219
- #, php-format
220
- msgid "I accept the %sTerms & Conditions%s"
221
- msgstr ""
222
-
223
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
224
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
225
- #: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
226
- msgctxt "(Admin)"
227
- msgid "Privacy Policy"
228
- msgstr ""
229
-
230
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
231
- msgctxt "(Admin)"
232
- msgid "Company information"
233
- msgstr ""
234
-
235
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
236
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
237
- msgctxt "(Admin)"
238
- msgid "Company Name"
239
- msgstr ""
240
-
241
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
242
- msgctxt "(Admin)"
243
- msgid "Company Email"
244
- msgstr ""
245
-
246
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
247
- msgctxt "(Admin)"
248
- msgid "Company Location"
249
- msgstr ""
250
-
251
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
252
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
253
- msgctxt "(Admin)"
254
- msgid "Representative Contact Name"
255
- msgstr ""
256
-
257
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
258
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
259
- msgctxt "(Admin)"
260
- msgid "Representative Contact Email"
261
- msgstr ""
262
-
263
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
264
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
265
- msgctxt "(Admin)"
266
- msgid "Representative Contact Phone"
267
- msgstr ""
268
-
269
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
270
- msgctxt "(Admin)"
271
- msgid "Data Protection Authority"
272
- msgstr ""
273
-
274
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
275
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
276
- msgctxt "(Admin)"
277
- msgid "Data Protection Authority Website"
278
- msgstr ""
279
-
280
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
281
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
282
- msgctxt "(Admin)"
283
- msgid "Data Protection Authority Email"
284
- msgstr ""
285
-
286
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
287
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
288
- msgctxt "(Admin)"
289
- msgid "Data Protection Authority Phone"
290
- msgstr ""
291
-
292
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
293
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
294
- msgctxt "(Admin)"
295
- msgid "Data Protection Officer"
296
- msgstr ""
297
-
298
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
299
- msgctxt "(Admin)"
300
- msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
301
- msgstr ""
302
-
303
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
304
- msgctxt "(Admin)"
305
- msgid "Data Protection Officer Name"
306
- msgstr ""
307
-
308
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
309
- msgctxt "(Admin)"
310
- msgid "Data Protection Officer Email"
311
- msgstr ""
312
-
313
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
314
- msgctxt "(Admin)"
315
- msgid "Contact Email"
316
- msgstr ""
317
-
318
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
319
- msgctxt "(Admin)"
320
- msgid "Representative Contact"
321
- msgstr ""
322
-
323
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
324
- msgctxt "(Admin)"
325
- msgid "Knowledge base: Do I need to appoint an EU-based representative?"
326
- msgstr ""
327
-
328
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
329
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
330
- msgctxt "(Admin)"
331
- msgid "DPO Name"
332
- msgstr ""
333
-
334
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
335
- msgctxt "(Admin)"
336
- msgid "Save & Generate Policy"
337
- msgstr ""
338
-
339
- #: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
340
- #: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
341
- #: views/themes/storefront/footer.php:3
342
- #: views/themes/twentyseventeen/footer.php:3
343
- #: views/themes/twentysixteen/footer.php:4
344
- msgid "Privacy Policy"
345
- msgstr ""
346
-
347
- #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
348
- msgid "This page is currently disabled."
349
- msgstr ""
350
-
351
- #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
352
- #: src/Installer/Installer.php:279
353
- #: src/Installer/Steps/ConfigurationPages.php:55
354
- #: views/themes/storefront/footer.php:7
355
- #: views/themes/twentyseventeen/footer.php:7
356
- #: views/themes/twentysixteen/footer.php:9
357
- msgid "Privacy Tools"
358
- msgstr ""
359
-
360
- #: src/Components/Support/AdminTabSupport.php:13
361
- #: src/Components/Support/AdminTabSupport.php:20
362
- msgctxt "(Admin)"
363
- msgid "Support"
364
- msgstr ""
365
-
366
- #: src/Components/WordpressComments/WordpressComments.php:90
367
- #, php-format
368
- msgid ""
369
- "%sERROR:%s You need to accept the terms and conditions to post a comment."
370
- msgstr ""
371
-
372
- #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
373
- #: views/privacy-tools/notices.php:19
374
- msgid "We have received your request and will reply within 30 days."
375
- msgstr ""
376
-
377
- #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
378
- #: views/privacy-tools/notices.php:15
379
- msgid "Consent withdrawn."
380
- msgstr ""
381
-
382
- #: src/Components/WordpressUser/RegistrationForm.php:42
383
- msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
384
- msgstr ""
385
-
386
- #: src/Components/WordpressUser/WordpressUser.php:63
387
- #: src/Components/WordpressUser/WordpressUser.php:64
388
- #: views/modules/wordpress-user/dashboard/data-page/header.php:2
389
- msgctxt "(Admin)"
390
- msgid "Privacy Tools"
391
- msgstr ""
392
-
393
- #: src/DataSubject/AdminTabDataSubject.php:27
394
- #: src/DataSubject/AdminTabDataSubject.php:41
395
- msgctxt "(Admin)"
396
- msgid "Data Subjects"
397
- msgstr ""
398
-
399
- #: src/DataSubject/DataRepository.php:143
400
- msgid "Data exported"
401
- msgstr ""
402
-
403
- #: src/DataSubject/DataRepository.php:158
404
- msgid "Data export request"
405
- msgstr ""
406
-
407
- #: src/DataSubject/DataRepository.php:171
408
- msgid "Data removed"
409
- msgstr ""
410
-
411
- #: src/DataSubject/DataRepository.php:186
412
- msgid "Data removal request"
413
- msgstr ""
414
-
415
- #: src/DataSubject/DataSubjectIdentificator.php:65
416
- #: src/DataSubject/DataSubjectIdentificator.php:82
417
- msgid "Your personal data on"
418
- msgstr ""
419
-
420
- #: src/Helpers.php:27
421
- msgctxt "(Admin)"
422
- msgid "Austria"
423
- msgstr ""
424
-
425
- #: src/Helpers.php:28
426
- msgctxt "(Admin)"
427
- msgid "Belgium"
428
- msgstr ""
429
-
430
- #: src/Helpers.php:29
431
- msgctxt "(Admin)"
432
- msgid "Bulgaria"
433
- msgstr ""
434
-
435
- #: src/Helpers.php:30
436
- msgctxt "(Admin)"
437
- msgid "Croatia"
438
- msgstr ""
439
-
440
- #: src/Helpers.php:31
441
- msgctxt "(Admin)"
442
- msgid "Cyprus"
443
- msgstr ""
444
-
445
- #: src/Helpers.php:32
446
- msgctxt "(Admin)"
447
- msgid "Czech Republic"
448
- msgstr ""
449
-
450
- #: src/Helpers.php:33
451
- msgctxt "(Admin)"
452
- msgid "Denmark"
453
- msgstr ""
454
-
455
- #: src/Helpers.php:34
456
- msgctxt "(Admin)"
457
- msgid "Estonia"
458
- msgstr ""
459
-
460
- #: src/Helpers.php:35
461
- msgctxt "(Admin)"
462
- msgid "Finland"
463
- msgstr ""
464
-
465
- #: src/Helpers.php:36
466
- msgctxt "(Admin)"
467
- msgid "France"
468
- msgstr ""
469
-
470
- #: src/Helpers.php:37
471
- msgctxt "(Admin)"
472
- msgid "Germany"
473
- msgstr ""
474
-
475
- #: src/Helpers.php:38
476
- msgctxt "(Admin)"
477
- msgid "Greece"
478
- msgstr ""
479
-
480
- #: src/Helpers.php:39
481
- msgctxt "(Admin)"
482
- msgid "Hungary"
483
- msgstr ""
484
-
485
- #: src/Helpers.php:40
486
- msgctxt "(Admin)"
487
- msgid "Ireland"
488
- msgstr ""
489
-
490
- #: src/Helpers.php:41
491
- msgctxt "(Admin)"
492
- msgid "Italy"
493
- msgstr ""
494
-
495
- #: src/Helpers.php:42
496
- msgctxt "(Admin)"
497
- msgid "Latvia"
498
- msgstr ""
499
-
500
- #: src/Helpers.php:43
501
- msgctxt "(Admin)"
502
- msgid "Lithuania"
503
- msgstr ""
504
-
505
- #: src/Helpers.php:44
506
- msgctxt "(Admin)"
507
- msgid "Luxembourg"
508
- msgstr ""
509
-
510
- #: src/Helpers.php:45
511
- msgctxt "(Admin)"
512
- msgid "Malta"
513
- msgstr ""
514
-
515
- #: src/Helpers.php:46
516
- msgctxt "(Admin)"
517
- msgid "Netherlands"
518
- msgstr ""
519
-
520
- #: src/Helpers.php:47
521
- msgctxt "(Admin)"
522
- msgid "Poland"
523
- msgstr ""
524
-
525
- #: src/Helpers.php:48
526
- msgctxt "(Admin)"
527
- msgid "Portugal"
528
- msgstr ""
529
-
530
- #: src/Helpers.php:49
531
- msgctxt "(Admin)"
532
- msgid "Romania"
533
- msgstr ""
534
-
535
- #: src/Helpers.php:50
536
- msgctxt "(Admin)"
537
- msgid "Slovakia"
538
- msgstr ""
539
-
540
- #: src/Helpers.php:51
541
- msgctxt "(Admin)"
542
- msgid "Slovenia"
543
- msgstr ""
544
-
545
- #: src/Helpers.php:52
546
- msgctxt "(Admin)"
547
- msgid "Spain"
548
- msgstr ""
549
-
550
- #: src/Helpers.php:53
551
- msgctxt "(Admin)"
552
- msgid "Sweden"
553
- msgstr ""
554
-
555
- #: src/Helpers.php:54
556
- msgctxt "(Admin)"
557
- msgid "United Kingdom"
558
- msgstr ""
559
-
560
- #: src/Helpers.php:69
561
- msgctxt "(Admin)"
562
- msgid "Iceland"
563
- msgstr ""
564
-
565
- #: src/Helpers.php:70
566
- msgctxt "(Admin)"
567
- msgid "Norway"
568
- msgstr ""
569
-
570
- #: src/Helpers.php:71
571
- msgctxt "(Admin)"
572
- msgid "Liechtenstein"
573
- msgstr ""
574
-
575
- #: src/Helpers.php:72
576
- msgctxt "(Admin)"
577
- msgid "Switzerland"
578
- msgstr ""
579
-
580
- #: src/Helpers.php:73
581
- msgctxt "(Admin)"
582
- msgid "United States"
583
- msgstr ""
584
-
585
- #: src/Helpers.php:74
586
- msgctxt "(Admin)"
587
- msgid "Rest of the world"
588
- msgstr ""
589
-
590
- #: src/Helpers.php:145
591
- msgid "An error has occurred. Please contact the site administrator."
592
- msgstr ""
593
-
594
- #: src/Installer/Installer.php:135
595
- msgctxt "(Admin)"
596
- msgid "Setup Wizard"
597
- msgstr ""
598
-
599
- #: src/Installer/Steps/ConfigurationPages.php:23
600
- #: src/Installer/Steps/PolicySettings.php:23
601
- #: src/Installer/Steps/PolicySettings.php:48
602
- msgctxt "(Admin)"
603
- msgid "&mdash; Create a new page &mdash;"
604
- msgstr ""
605
-
606
- #: src/Installer/Steps/PolicySettings.php:38
607
- msgctxt "(Admin)"
608
- msgid ""
609
- "We have automatically selected your WooCommerce Terms & Conditions page."
610
- msgstr ""
611
-
612
- #: src/Modules/ContactForm7/ContactForm7.php:35
613
- msgctxt "(Admin)"
614
- msgid "gdpr terms txt"
615
- msgstr ""
616
-
617
- #: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
618
- #, php-format
619
- msgid "Nonce error for action \"%s\". Please go back and try again!"
620
- msgstr ""
621
-
622
- #: src/Router.php:149
623
- msgctxt "(Admin)"
624
- msgid "You do not have the required permissions to perform this action!"
625
- msgstr ""
626
-
627
- #: views/admin/consent.php:3
628
- msgctxt "(Admin)"
629
- msgid "Default consent types"
630
- msgstr ""
631
-
632
- #: views/admin/consent.php:4
633
- msgctxt "(Admin)"
634
- msgid ""
635
- "These are the consent types that have been automatically registered by the "
636
- "framework or a plugin."
637
- msgstr ""
638
-
639
- #: views/admin/consent.php:7 views/admin/consent.php:52
640
- msgctxt "(Admin)"
641
- msgid "Slug"
642
- msgstr ""
643
-
644
- #: views/admin/consent.php:8 views/admin/consent.php:38
645
- #: views/admin/consent.php:60
646
- msgctxt "(Admin)"
647
- msgid "Title"
648
- msgstr ""
649
-
650
- #: views/admin/consent.php:9 views/admin/consent.php:41
651
- #: views/admin/consent.php:63
652
- msgctxt "(Admin)"
653
- msgid "Description"
654
- msgstr ""
655
-
656
- #: views/admin/consent.php:10
657
- msgctxt "(Admin)"
658
- msgid "Visibility"
659
- msgstr ""
660
-
661
- #: views/admin/consent.php:18
662
- msgctxt "(Admin)"
663
- msgid "Visible"
664
- msgstr ""
665
-
666
- #: views/admin/consent.php:20
667
- msgctxt "(Admin)"
668
- msgid "Hidden"
669
- msgstr ""
670
-
671
- #: views/admin/consent.php:29
672
- msgctxt "(Admin)"
673
- msgid "Custom consent types"
674
- msgstr ""
675
-
676
- #: views/admin/consent.php:30
677
- msgctxt "(Admin)"
678
- msgid ""
679
- "Here you can add custom consent types to track. They will not be used "
680
- "anywhere by default - you will need to build an integration for each of them."
681
- msgstr ""
682
-
683
- #: views/admin/consent.php:35
684
- msgctxt "(Admin)"
685
- msgid "Machine-readable slug"
686
- msgstr ""
687
-
688
- #: views/admin/consent.php:44 views/admin/consent.php:68
689
- msgctxt "(Admin)"
690
- msgid "Visible?"
691
- msgstr ""
692
-
693
- #: views/admin/consent.php:72
694
- msgctxt "(Admin)"
695
- msgid "Remove"
696
- msgstr ""
697
-
698
- #: views/admin/consent.php:93
699
- msgctxt "(Admin)"
700
- msgid "Additional info"
701
- msgstr ""
702
-
703
- #: views/admin/consent.php:95
704
- msgctxt "(Admin)"
705
- msgid ""
706
- "This text will be displayed to your data subjects on the Privacy Tools page."
707
- msgstr ""
708
-
709
- #: views/admin/data-subjects/search-form.php:2
710
- msgctxt "(Admin)"
711
- msgid ""
712
- "On this page, you can find which data subjects personal data you are storing "
713
- "and download, export or delete it."
714
- msgstr ""
715
-
716
- #: views/admin/data-subjects/search-form.php:10
717
- msgctxt "(Admin)"
718
- msgid "Find data subject by email"
719
- msgstr ""
720
-
721
- #: views/admin/data-subjects/search-form.php:11
722
- msgctxt "(Admin)"
723
- msgid "Email address"
724
- msgstr ""
725
-
726
- #: views/admin/data-subjects/search-form.php:16
727
- msgctxt "(Admin)"
728
- msgid "Search"
729
- msgstr ""
730
-
731
- #: views/admin/data-subjects/search-results.php:7
732
- msgctxt "(Admin)"
733
- msgid "Username"
734
- msgstr ""
735
-
736
- #: views/admin/data-subjects/search-results.php:12
737
- msgctxt "(Admin)"
738
- msgid "is not a registered user."
739
- msgstr ""
740
-
741
- #: views/admin/data-subjects/search-results.php:16
742
- msgctxt "(Admin)"
743
- msgid "Download data (html)"
744
- msgstr ""
745
-
746
- #: views/admin/data-subjects/search-results.php:17
747
- msgctxt "(Admin)"
748
- msgid "Export data (json)"
749
- msgstr ""
750
-
751
- #: views/admin/data-subjects/search-results.php:21
752
- msgctxt "(Admin)"
753
- msgid ""
754
- "This user has admin capabilities. Deleting data via this interface is "
755
- "disabled."
756
- msgstr ""
757
-
758
- #: views/admin/data-subjects/search-results.php:24
759
- msgctxt "(Admin)"
760
- msgid "Anonymize data"
761
- msgstr ""
762
-
763
- #: views/admin/data-subjects/search-results.php:25
764
- msgctxt "(Admin)"
765
- msgid "Delete data"
766
- msgstr ""
767
-
768
- #: views/admin/data-subjects/search-results.php:29
769
- msgctxt "(Admin)"
770
- msgid "No data found!"
771
- msgstr ""
772
-
773
- #: views/admin/general/delete-action-email.php:5
774
- #: views/admin/general/export-action-email.php:5
775
- #: views/installer/steps/configuration-settings.php:29
776
- #: views/installer/steps/configuration-settings.php:79
777
- msgid "Email address"
778
- msgstr ""
779
-
780
- #: views/admin/general/delete-action-reassign.php:3
781
- #: views/installer/steps/configuration-settings.php:50
782
- msgctxt "(Admin)"
783
- msgid "Delete content"
784
- msgstr ""
785
-
786
- #: views/admin/general/delete-action-reassign.php:6
787
- #: views/installer/steps/configuration-settings.php:53
788
- msgctxt "(Admin)"
789
- msgid "Reassign content to a user"
790
- msgstr ""
791
-
792
- #: views/admin/general/delete-action-reassign.php:10
793
- msgctxt "(Admin)"
794
- msgid ""
795
- "If the user has submitted any content on your site, should it be deleted or "
796
- "reassigned to another user?"
797
- msgstr ""
798
-
799
- #: views/admin/general/description-data-page.php:2
800
- msgctxt "(Admin)"
801
- msgid ""
802
- "Select the page where users can go to control their data. This page must "
803
- "contain the [gdpr_privacy_tools] shortcode."
804
- msgstr ""
805
-
806
- #: views/admin/general/enable.php:9
807
- msgctxt "(Admin)"
808
- msgid "Enable the view, export and forget functionality for users and visitors"
809
- msgstr ""
810
-
811
- #: views/admin/general/enable.php:12
812
- msgctxt "(Admin)"
813
- msgid ""
814
- "Enable the Privacy Tools page on front-end and dashboard. This allows "
815
- "visitors to request viewing and deleting their personal data and withdraw "
816
- "consents."
817
- msgstr ""
818
-
819
- #: views/admin/general/theme-compatibility.php:9
820
- #: views/installer/steps/integrations.php:21
821
- msgctxt "(Admin)"
822
- msgid ""
823
- "Automatically add Privacy Policy and Privacy Tools links to your site footer."
824
- msgstr ""
825
-
826
- #: views/admin/notices/header.php:4 views/admin/settings-page.php:3
827
- #: views/installer/header.php:23
828
- msgctxt "(Admin)"
829
- msgid "The GDPR Framework"
830
- msgstr ""
831
-
832
- #: views/admin/notices/helper-autoinstall.php:2
833
- msgctxt "(Admin)"
834
- msgid ""
835
- "A Privacy Policy page has been created, but it is empty. You can generate a "
836
- "policy template on this page."
837
- msgstr ""
838
-
839
- #: views/admin/notices/helper-policy.php:2
840
- msgctxt "(Admin)"
841
- msgid ""
842
- "Heads up - your Privacy Policy still requires some attention. Find the "
843
- "places marked with [TODO] and replace them with real content!"
844
- msgstr ""
845
-
846
- #: views/admin/notices/helper-tools.php:2
847
- msgctxt "(Admin)"
848
- msgid "The contents of this page should contain the [gdpr_tools] shortcode."
849
- msgstr ""
850
-
851
- #: views/admin/privacy-policy/description-policy-page.php:2
852
- msgctxt "(Admin)"
853
- msgid "Select the page which will contain your Privacy Policy"
854
- msgstr ""
855
-
856
- #: views/admin/privacy-policy/generated.php:3
857
- msgctxt "(Admin)"
858
- msgid "Your Privacy Policy has been generated."
859
- msgstr ""
860
-
861
- #: views/admin/privacy-policy/generated.php:20
862
- msgctxt "(Admin)"
863
- msgid "&laquo; Back"
864
- msgstr ""
865
-
866
- #: views/admin/privacy-policy/header.php:2
867
- msgctxt "(Admin)"
868
- msgid ""
869
- "This page allows you to generate a Privacy Policy based on the information "
870
- "you entered below."
871
- msgstr ""
872
-
873
- #: views/admin/settings-page.php:31
874
- #, php-format
875
- msgctxt "(Admin)"
876
- msgid "The GDPR Framework. Built with &#9829; by %sCodelight%s."
877
- msgstr ""
878
-
879
- #: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
880
- msgctxt "(Admin)"
881
- msgid "Need more info?"
882
- msgstr ""
883
-
884
- #: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
885
- msgctxt "(Admin)"
886
- msgid "Site Owner's guide to GDPR"
887
- msgstr ""
888
-
889
- #: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
890
- msgctxt "(Admin)"
891
- msgid "Read the full guide on GDPR compliance."
892
- msgstr ""
893
-
894
- #: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
895
- msgctxt "(Admin)"
896
- msgid "Knowledge base"
897
- msgstr ""
898
-
899
- #: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
900
- msgctxt "(Admin)"
901
- msgid "Check out the knowledge base for common questions and answers."
902
- msgstr ""
903
-
904
- #: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
905
- msgctxt "(Admin)"
906
- msgid "Developer's guide to GDPR"
907
- msgstr ""
908
-
909
- #: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
910
- msgctxt "(Admin)"
911
- msgid "We have a thorough guide to help making custom sites compliant."
912
- msgstr ""
913
-
914
- #: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
915
- msgctxt "(Admin)"
916
- msgid "Need help?"
917
- msgstr ""
918
-
919
- #: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
920
- msgctxt "(Admin)"
921
- msgid "Submit a support request"
922
- msgstr ""
923
-
924
- #: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
925
- msgctxt "(Admin)"
926
- msgid ""
927
- "Found a bug or problem with the plugin? Post in the wordpress.org support "
928
- "forum."
929
- msgstr ""
930
-
931
- #: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
932
- msgctxt "(Admin)"
933
- msgid "Request a consultation"
934
- msgstr ""
935
-
936
- #: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
937
- msgctxt "(Admin)"
938
- msgid ""
939
- "Need development or legal assistance in making your site compliant? We can "
940
- "help!"
941
- msgstr ""
942
-
943
- #: views/admin/wizard-buttons.php:2
944
- msgctxt "(Admin)"
945
- msgid "Restart setup wizard"
946
- msgstr ""
947
-
948
- #: views/email/action-export.php:8 views/email/action-forget.php:12
949
- msgctxt "(Admin)"
950
- msgid ""
951
- "This email is just for your information. You don't need to take any action"
952
- msgstr ""
953
-
954
- #: views/email/action-forget.php:8
955
- msgctxt "(Admin)"
956
- msgid "The data subject had a user account on your website."
957
- msgstr ""
958
-
959
- #: views/email/identify-data-subject.php:2
960
- msgid "Someone has requested access to your data on"
961
- msgstr ""
962
-
963
- #: views/email/identify-data-subject.php:3
964
- msgid "If this was a mistake, just ignore this email and nothing will happen."
965
- msgstr ""
966
-
967
- #: views/email/identify-data-subject.php:4
968
- msgid "To manage your data, visit the following address:"
969
- msgstr ""
970
-
971
- #: views/email/identify-data-subject.php:10
972
- msgid "This link is valid for 15 minutes."
973
- msgstr ""
974
-
975
- #: views/email/no-data.php:2
976
- msgid "Someone has requested information about your personal data on"
977
- msgstr ""
978
-
979
- #: views/email/no-data.php:3
980
- msgid "None of your personal data is stored on"
981
- msgstr ""
982
-
983
- #: views/email/no-data.php:5
984
- msgid ""
985
- "If this was a mistake or you did not request this email, just ignore it and "
986
- "nothing will happen."
987
- msgstr ""
988
-
989
- #: views/email/request-export.php:13 views/email/request-forget.php:13
990
- msgctxt "(Admin)"
991
- msgid "As a reminder: according to GDPR, you have 30 days to comply."
992
- msgstr ""
993
-
994
- #: views/global/delete-action.php:2
995
- msgctxt "(Admin)"
996
- msgid "Automatically anonymize data"
997
- msgstr ""
998
-
999
- #: views/global/delete-action.php:5
1000
- msgctxt "(Admin)"
1001
- msgid "Automatically delete data"
1002
- msgstr ""
1003
-
1004
- #: views/global/delete-action.php:9
1005
- msgctxt "(Admin)"
1006
- msgid "Automatically anonymize data and notify me via email"
1007
- msgstr ""
1008
-
1009
- #: views/global/delete-action.php:13
1010
- msgctxt "(Admin)"
1011
- msgid "Automatically delete data and notify me via email"
1012
- msgstr ""
1013
-
1014
- #: views/global/delete-action.php:16 views/global/export-action.php:10
1015
- msgctxt "(Admin)"
1016
- msgid "Only notify me via email"
1017
- msgstr ""
1018
-
1019
- #: views/global/export-action.php:2
1020
- msgctxt "(Admin)"
1021
- msgid "Automatically download data"
1022
- msgstr ""
1023
-
1024
- #: views/global/export-action.php:6
1025
- msgctxt "(Admin)"
1026
- msgid "Automatically download data and notify me via email"
1027
- msgstr ""
1028
-
1029
- #: views/installer/continue-notice.php:2
1030
- msgctxt "(Admin)"
1031
- msgid "The The GDPR Framework setup has not been finalized yet."
1032
- msgstr ""
1033
-
1034
- #: views/installer/continue-notice.php:3
1035
- msgctxt "(Admin)"
1036
- msgid "You can continue the setup at any time."
1037
- msgstr ""
1038
-
1039
- #: views/installer/continue-notice.php:6
1040
- msgctxt "(Admin)"
1041
- msgid "Continue the setup wizard"
1042
- msgstr ""
1043
-
1044
- #: views/installer/continue-notice.php:9
1045
- msgctxt "(Admin)"
1046
- msgid "Hide this message"
1047
- msgstr ""
1048
-
1049
- #: views/installer/footer.php:7
1050
- msgid "Back"
1051
- msgstr ""
1052
-
1053
- #: views/installer/header.php:26
1054
- msgctxt "(Admin)"
1055
- msgid "I need help"
1056
- msgstr ""
1057
-
1058
- #: views/installer/header.php:29
1059
- msgctxt "(Admin)"
1060
- msgid "Developer Docs"
1061
- msgstr ""
1062
-
1063
- #: views/installer/header.php:36
1064
- msgctxt "(Admin)"
1065
- msgid "Configuration"
1066
- msgstr ""
1067
-
1068
- #: views/installer/header.php:46
1069
- msgctxt "(Admin)"
1070
- msgid "Forms & Consent"
1071
- msgstr ""
1072
-
1073
- #: views/installer/header.php:51
1074
- msgctxt "(Admin)"
1075
- msgid "Integrations"
1076
- msgstr ""
1077
-
1078
- #: views/installer/steps/configuration-settings.php:23
1079
- #: views/installer/steps/configuration-settings.php:73
1080
- msgctxt "(Admin)"
1081
- msgid "Enter the email address to notify"
1082
- msgstr ""
1083
-
1084
- #: views/installer/steps/disclaimer.php:21
1085
- msgctxt "(Admin)"
1086
- msgid "I accept"
1087
- msgstr ""
1088
-
1089
- #: views/installer/welcome-notice.php:7
1090
- msgctxt "(Admin)"
1091
- msgid "Run the setup wizard"
1092
- msgstr ""
1093
-
1094
- #: views/installer/welcome-notice.php:11
1095
- msgctxt "(Admin)"
1096
- msgid "Auto-install pages"
1097
- msgstr ""
1098
-
1099
- #: views/installer/welcome-notice.php:15
1100
- msgctxt "(Admin)"
1101
- msgid "Skip and install manually"
1102
- msgstr ""
1103
-
1104
- #: views/modules/contact-form-7/generator-privacy.php:6
1105
- msgctxt "(Admin)"
1106
- msgid ""
1107
- "This tag generates the default text for Terms & Conditions and/or Privacy "
1108
- "Policy checkbox."
1109
- msgstr ""
1110
-
1111
- #: views/modules/contact-form-7/generator-privacy.php:15
1112
- msgid "Insert"
1113
- msgstr ""
1114
-
1115
- #: views/modules/wordpress-comments/terms-checkbox.php:6
1116
- #: views/modules/wordpress-user/registration-terms-checkbox.php:7
1117
- #, php-format
1118
- msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1119
- msgstr ""
1120
-
1121
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
1122
- msgid "Manage consents"
1123
- msgstr ""
1124
-
1125
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
1126
- #: views/privacy-tools/form-consent.php:6
1127
- msgid "Here you can withdraw any consents you have given."
1128
- msgstr ""
1129
-
1130
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
1131
- #: views/privacy-tools/form-consent.php:9
1132
- msgid "Consent types"
1133
- msgstr ""
1134
-
1135
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
1136
- #: views/privacy-tools/form-consent.php:24
1137
- msgid "Withdraw"
1138
- msgstr ""
1139
-
1140
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
1141
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
1142
- msgctxt "(Admin)"
1143
- msgid "Delete this user and all data"
1144
- msgstr ""
1145
-
1146
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
1147
- msgctxt "(Admin)"
1148
- msgid "Delete my data"
1149
- msgstr ""
1150
-
1151
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
1152
- #: views/privacy-tools/form-delete.php:13
1153
- msgid "Delete all data we have gathered about you."
1154
- msgstr ""
1155
-
1156
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
1157
- #: views/privacy-tools/form-delete.php:14
1158
- msgid "If you have a user account on our site, it will also be deleted."
1159
- msgstr ""
1160
-
1161
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
1162
- #: views/privacy-tools/form-delete.php:15
1163
- msgid "Be careful - this action is permanent and CANNOT be undone."
1164
- msgstr ""
1165
-
1166
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
1167
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
1168
- msgctxt "(Admin)"
1169
- msgid ""
1170
- "You seem to have an administrator or equivalent role, so deleting/"
1171
- "anonymizing via this page is disabled."
1172
- msgstr ""
1173
-
1174
- #: views/modules/wordpress-user/dashboard/form-export.php:7
1175
- #: views/privacy-tools/form-export.php:1
1176
- msgid "Download your data"
1177
- msgstr ""
1178
-
1179
- #: views/modules/wordpress-user/dashboard/form-export.php:12
1180
- #: views/privacy-tools/form-export.php:13
1181
- msgid "Download as table"
1182
- msgstr ""
1183
-
1184
- #: views/modules/wordpress-user/dashboard/form-export.php:15
1185
- #: views/privacy-tools/form-export.php:22
1186
- msgid "Export as JSON"
1187
- msgstr ""
1188
-
1189
- #: views/modules/wordpress-user/dashboard/form-export.php:19
1190
- #: views/privacy-tools/form-export.php:4
1191
- msgid "You can download all your data formatted as a table for viewing."
1192
- msgstr ""
1193
-
1194
- #: views/modules/wordpress-user/dashboard/form-export.php:20
1195
- #: views/privacy-tools/form-export.php:5
1196
- msgid "Alternatively, you can export it in machine-readable JSON format."
1197
- msgstr ""
1198
-
1199
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
1200
- msgctxt "(Admin)"
1201
- msgid "Delete user and all data"
1202
- msgstr ""
1203
-
1204
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
1205
- msgctxt "(Admin)"
1206
- msgid "Anonymize user and all data"
1207
- msgstr ""
1208
-
1209
- #: views/modules/wordpress-user/dashboard/profile-page/header.php:2
1210
- msgctxt "(Admin)"
1211
- msgid "GDPR Data"
1212
- msgstr ""
1213
-
1214
- #: views/modules/wordpress-user/dashboard/profile-page/header.php:6
1215
- msgctxt "(Admin)"
1216
- msgid "This user has been anonymized."
1217
- msgstr ""
1218
-
1219
- #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
1220
- msgctxt "(Admin)"
1221
- msgid "Consents given"
1222
- msgstr ""
1223
-
1224
- #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
1225
- msgctxt "(Admin)"
1226
- msgid "No consents given"
1227
- msgstr ""
1228
-
1229
- #: views/privacy-tools/form-consent.php:2
1230
- msgid "Consent"
1231
- msgstr ""
1232
-
1233
- #: views/privacy-tools/form-delete.php:1
1234
- #: views/privacy-tools/notice-admin-role.php:1
1235
- msgid "Delete my user and data"
1236
- msgstr ""
1237
-
1238
- #: views/privacy-tools/form-delete.php:7
1239
- msgid "Delete my data"
1240
- msgstr ""
1241
-
1242
- #: views/privacy-tools/form-identify.php:8
1243
- msgid "Back to Privacy Tools"
1244
- msgstr ""
1245
-
1246
- #: views/privacy-tools/form-identify.php:14
1247
- msgid "Identify yourself!"
1248
- msgstr ""
1249
-
1250
- #: views/privacy-tools/form-identify.php:17
1251
- #: views/privacy-tools/form-identify.php:20
1252
- msgid "Enter your email address"
1253
- msgstr ""
1254
-
1255
- #: views/privacy-tools/form-identify.php:23
1256
- msgid "Send email"
1257
- msgstr ""
1258
-
1259
- #: views/privacy-tools/notice-admin-role.php:4
1260
- msgctxt "(Admin)"
1261
- msgid "Data deletion is disabled for administrative accounts."
1262
- msgstr ""
1263
-
1264
- #: views/privacy-tools/notices.php:3
1265
- msgid ""
1266
- "We will send you an email with the link to access your data. Please check "
1267
- "your spam folder as well!"
1268
- msgstr ""
1269
-
1270
- #: views/privacy-tools/notices.php:7
1271
- msgid "The email you entered does not appear to be a valid email."
1272
- msgstr ""
1273
-
1274
- #: views/privacy-tools/notices.php:11
1275
- msgid "Sorry - the link seems to have expired. Please try again!"
1276
- msgstr ""
1277
-
1278
- #: views/privacy-tools/notices.php:23
1279
- msgid "Your personal data has been removed!"
1280
- msgstr ""
1281
-
1282
- #: views/privacy-tools/privacy-tools.php:5
1283
- msgid "You are identified as"
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-04-16 10:50+0000\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:26
21
+ msgctxt "(Admin)"
22
+ msgid "WordPress GDPR &rsaquo; Error"
23
+ msgstr ""
24
+
25
+ #: gdpr-framework.php:35
26
+ msgctxt "(Admin)"
27
+ msgid "Invalid PHP version"
28
+ msgstr ""
29
+
30
+ #: gdpr-framework.php:35
31
+ msgctxt "(Admin)"
32
+ msgid "You must be using PHP 5.6.33 or greater."
33
+ msgstr ""
34
+
35
+ #: gdpr-framework.php:42
36
+ msgctxt "(Admin)"
37
+ msgid "Invalid WordPress version"
38
+ msgstr ""
39
+
40
+ #: gdpr-framework.php:42
41
+ msgctxt "(Admin)"
42
+ msgid "You must be using WordPress 4.3.0 or greater."
43
+ msgstr ""
44
+
45
+ #: gdpr-framework.php:52
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
53
+ msgctxt "(Admin)"
54
+ msgid "Autoloader not found."
55
+ msgstr ""
56
+
57
+ #: gdpr-framework.php:115
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 "&mdash; Select &mdash;"
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/ConsentManager.php:46
203
+ #: views/modules/contact-form-7/content-privacy.php:2
204
+ #: views/modules/wordpress-comments/terms-checkbox.php:14
205
+ #: views/modules/wordpress-user/registration-terms-checkbox.php:15
206
+ #, php-format
207
+ msgid "I accept the %sPrivacy Policy%s"
208
+ msgstr ""
209
+
210
+ #: src/Components/Consent/ConsentManager.php:50
211
+ #: src/Components/Consent/ConsentManager.php:69
212
+ msgctxt "(Admin)"
213
+ msgid ""
214
+ "This consent is not visible by default. If someone wishes to withdraw it, "
215
+ "they should simply request to delete all their data."
216
+ msgstr ""
217
+
218
+ #: src/Components/Consent/ConsentManager.php:65
219
+ #, php-format
220
+ msgid "I accept the %sTerms & Conditions%s"
221
+ msgstr ""
222
+
223
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
224
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
225
+ #: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
226
+ msgctxt "(Admin)"
227
+ msgid "Privacy Policy"
228
+ msgstr ""
229
+
230
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
231
+ msgctxt "(Admin)"
232
+ msgid "Company information"
233
+ msgstr ""
234
+
235
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
236
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
237
+ msgctxt "(Admin)"
238
+ msgid "Company Name"
239
+ msgstr ""
240
+
241
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
242
+ msgctxt "(Admin)"
243
+ msgid "Company Email"
244
+ msgstr ""
245
+
246
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
247
+ msgctxt "(Admin)"
248
+ msgid "Company Location"
249
+ msgstr ""
250
+
251
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
252
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
253
+ msgctxt "(Admin)"
254
+ msgid "Representative Contact Name"
255
+ msgstr ""
256
+
257
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
258
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
259
+ msgctxt "(Admin)"
260
+ msgid "Representative Contact Email"
261
+ msgstr ""
262
+
263
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
264
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
265
+ msgctxt "(Admin)"
266
+ msgid "Representative Contact Phone"
267
+ msgstr ""
268
+
269
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
270
+ msgctxt "(Admin)"
271
+ msgid "Data Protection Authority"
272
+ msgstr ""
273
+
274
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
275
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
276
+ msgctxt "(Admin)"
277
+ msgid "Data Protection Authority Website"
278
+ msgstr ""
279
+
280
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
281
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
282
+ msgctxt "(Admin)"
283
+ msgid "Data Protection Authority Email"
284
+ msgstr ""
285
+
286
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
287
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
288
+ msgctxt "(Admin)"
289
+ msgid "Data Protection Authority Phone"
290
+ msgstr ""
291
+
292
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
293
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
294
+ msgctxt "(Admin)"
295
+ msgid "Data Protection Officer"
296
+ msgstr ""
297
+
298
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
299
+ msgctxt "(Admin)"
300
+ msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
301
+ msgstr ""
302
+
303
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
304
+ msgctxt "(Admin)"
305
+ msgid "Data Protection Officer Name"
306
+ msgstr ""
307
+
308
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
309
+ msgctxt "(Admin)"
310
+ msgid "Data Protection Officer Email"
311
+ msgstr ""
312
+
313
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
314
+ msgctxt "(Admin)"
315
+ msgid "Contact Email"
316
+ msgstr ""
317
+
318
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
319
+ msgctxt "(Admin)"
320
+ msgid "Representative Contact"
321
+ msgstr ""
322
+
323
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
324
+ msgctxt "(Admin)"
325
+ msgid "Knowledge base: Do I need to appoint an EU-based representative?"
326
+ msgstr ""
327
+
328
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
329
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
330
+ msgctxt "(Admin)"
331
+ msgid "DPO Name"
332
+ msgstr ""
333
+
334
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
335
+ msgctxt "(Admin)"
336
+ msgid "Save & Generate Policy"
337
+ msgstr ""
338
+
339
+ #: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
340
+ #: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
341
+ #: views/themes/storefront/footer.php:3
342
+ #: views/themes/twentyseventeen/footer.php:3
343
+ #: views/themes/twentysixteen/footer.php:4
344
+ msgid "Privacy Policy"
345
+ msgstr ""
346
+
347
+ #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
348
+ msgid "This page is currently disabled."
349
+ msgstr ""
350
+
351
+ #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
352
+ #: src/Installer/Installer.php:279
353
+ #: src/Installer/Steps/ConfigurationPages.php:55
354
+ #: views/themes/storefront/footer.php:7
355
+ #: views/themes/twentyseventeen/footer.php:7
356
+ #: views/themes/twentysixteen/footer.php:9
357
+ msgid "Privacy Tools"
358
+ msgstr ""
359
+
360
+ #: src/Components/Support/AdminTabSupport.php:13
361
+ #: src/Components/Support/AdminTabSupport.php:20
362
+ msgctxt "(Admin)"
363
+ msgid "Support"
364
+ msgstr ""
365
+
366
+ #: src/Components/WordpressComments/WordpressComments.php:90
367
+ #, php-format
368
+ msgid ""
369
+ "%sERROR:%s You need to accept the terms and conditions to post a comment."
370
+ msgstr ""
371
+
372
+ #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
373
+ #: views/privacy-tools/notices.php:19
374
+ msgid "We have received your request and will reply within 30 days."
375
+ msgstr ""
376
+
377
+ #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
378
+ #: views/privacy-tools/notices.php:15
379
+ msgid "Consent withdrawn."
380
+ msgstr ""
381
+
382
+ #: src/Components/WordpressUser/RegistrationForm.php:42
383
+ msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
384
+ msgstr ""
385
+
386
+ #: src/Components/WordpressUser/WordpressUser.php:63
387
+ #: src/Components/WordpressUser/WordpressUser.php:64
388
+ #: views/modules/wordpress-user/dashboard/data-page/header.php:2
389
+ msgctxt "(Admin)"
390
+ msgid "Privacy Tools"
391
+ msgstr ""
392
+
393
+ #: src/DataSubject/AdminTabDataSubject.php:27
394
+ #: src/DataSubject/AdminTabDataSubject.php:41
395
+ msgctxt "(Admin)"
396
+ msgid "Data Subjects"
397
+ msgstr ""
398
+
399
+ #: src/DataSubject/DataRepository.php:143
400
+ msgid "Data exported"
401
+ msgstr ""
402
+
403
+ #: src/DataSubject/DataRepository.php:158
404
+ msgid "Data export request"
405
+ msgstr ""
406
+
407
+ #: src/DataSubject/DataRepository.php:171
408
+ msgid "Data removed"
409
+ msgstr ""
410
+
411
+ #: src/DataSubject/DataRepository.php:186
412
+ msgid "Data removal request"
413
+ msgstr ""
414
+
415
+ #: src/DataSubject/DataSubjectIdentificator.php:65
416
+ #: src/DataSubject/DataSubjectIdentificator.php:82
417
+ msgid "Your personal data on"
418
+ msgstr ""
419
+
420
+ #: src/Helpers.php:27
421
+ msgctxt "(Admin)"
422
+ msgid "Austria"
423
+ msgstr ""
424
+
425
+ #: src/Helpers.php:28
426
+ msgctxt "(Admin)"
427
+ msgid "Belgium"
428
+ msgstr ""
429
+
430
+ #: src/Helpers.php:29
431
+ msgctxt "(Admin)"
432
+ msgid "Bulgaria"
433
+ msgstr ""
434
+
435
+ #: src/Helpers.php:30
436
+ msgctxt "(Admin)"
437
+ msgid "Croatia"
438
+ msgstr ""
439
+
440
+ #: src/Helpers.php:31
441
+ msgctxt "(Admin)"
442
+ msgid "Cyprus"
443
+ msgstr ""
444
+
445
+ #: src/Helpers.php:32
446
+ msgctxt "(Admin)"
447
+ msgid "Czech Republic"
448
+ msgstr ""
449
+
450
+ #: src/Helpers.php:33
451
+ msgctxt "(Admin)"
452
+ msgid "Denmark"
453
+ msgstr ""
454
+
455
+ #: src/Helpers.php:34
456
+ msgctxt "(Admin)"
457
+ msgid "Estonia"
458
+ msgstr ""
459
+
460
+ #: src/Helpers.php:35
461
+ msgctxt "(Admin)"
462
+ msgid "Finland"
463
+ msgstr ""
464
+
465
+ #: src/Helpers.php:36
466
+ msgctxt "(Admin)"
467
+ msgid "France"
468
+ msgstr ""
469
+
470
+ #: src/Helpers.php:37
471
+ msgctxt "(Admin)"
472
+ msgid "Germany"
473
+ msgstr ""
474
+
475
+ #: src/Helpers.php:38
476
+ msgctxt "(Admin)"
477
+ msgid "Greece"
478
+ msgstr ""
479
+
480
+ #: src/Helpers.php:39
481
+ msgctxt "(Admin)"
482
+ msgid "Hungary"
483
+ msgstr ""
484
+
485
+ #: src/Helpers.php:40
486
+ msgctxt "(Admin)"
487
+ msgid "Ireland"
488
+ msgstr ""
489
+
490
+ #: src/Helpers.php:41
491
+ msgctxt "(Admin)"
492
+ msgid "Italy"
493
+ msgstr ""
494
+
495
+ #: src/Helpers.php:42
496
+ msgctxt "(Admin)"
497
+ msgid "Latvia"
498
+ msgstr ""
499
+
500
+ #: src/Helpers.php:43
501
+ msgctxt "(Admin)"
502
+ msgid "Lithuania"
503
+ msgstr ""
504
+
505
+ #: src/Helpers.php:44
506
+ msgctxt "(Admin)"
507
+ msgid "Luxembourg"
508
+ msgstr ""
509
+
510
+ #: src/Helpers.php:45
511
+ msgctxt "(Admin)"
512
+ msgid "Malta"
513
+ msgstr ""
514
+
515
+ #: src/Helpers.php:46
516
+ msgctxt "(Admin)"
517
+ msgid "Netherlands"
518
+ msgstr ""
519
+
520
+ #: src/Helpers.php:47
521
+ msgctxt "(Admin)"
522
+ msgid "Poland"
523
+ msgstr ""
524
+
525
+ #: src/Helpers.php:48
526
+ msgctxt "(Admin)"
527
+ msgid "Portugal"
528
+ msgstr ""
529
+
530
+ #: src/Helpers.php:49
531
+ msgctxt "(Admin)"
532
+ msgid "Romania"
533
+ msgstr ""
534
+
535
+ #: src/Helpers.php:50
536
+ msgctxt "(Admin)"
537
+ msgid "Slovakia"
538
+ msgstr ""
539
+
540
+ #: src/Helpers.php:51
541
+ msgctxt "(Admin)"
542
+ msgid "Slovenia"
543
+ msgstr ""
544
+
545
+ #: src/Helpers.php:52
546
+ msgctxt "(Admin)"
547
+ msgid "Spain"
548
+ msgstr ""
549
+
550
+ #: src/Helpers.php:53
551
+ msgctxt "(Admin)"
552
+ msgid "Sweden"
553
+ msgstr ""
554
+
555
+ #: src/Helpers.php:54
556
+ msgctxt "(Admin)"
557
+ msgid "United Kingdom"
558
+ msgstr ""
559
+
560
+ #: src/Helpers.php:69
561
+ msgctxt "(Admin)"
562
+ msgid "Iceland"
563
+ msgstr ""
564
+
565
+ #: src/Helpers.php:70
566
+ msgctxt "(Admin)"
567
+ msgid "Norway"
568
+ msgstr ""
569
+
570
+ #: src/Helpers.php:71
571
+ msgctxt "(Admin)"
572
+ msgid "Liechtenstein"
573
+ msgstr ""
574
+
575
+ #: src/Helpers.php:72
576
+ msgctxt "(Admin)"
577
+ msgid "Switzerland"
578
+ msgstr ""
579
+
580
+ #: src/Helpers.php:73
581
+ msgctxt "(Admin)"
582
+ msgid "United States"
583
+ msgstr ""
584
+
585
+ #: src/Helpers.php:74
586
+ msgctxt "(Admin)"
587
+ msgid "Rest of the world"
588
+ msgstr ""
589
+
590
+ #: src/Helpers.php:145
591
+ msgid "An error has occurred. Please contact the site administrator."
592
+ msgstr ""
593
+
594
+ #: src/Installer/Installer.php:135
595
+ msgctxt "(Admin)"
596
+ msgid "Setup Wizard"
597
+ msgstr ""
598
+
599
+ #: src/Installer/Steps/ConfigurationPages.php:23
600
+ #: src/Installer/Steps/PolicySettings.php:23
601
+ #: src/Installer/Steps/PolicySettings.php:48
602
+ msgctxt "(Admin)"
603
+ msgid "&mdash; Create a new page &mdash;"
604
+ msgstr ""
605
+
606
+ #: src/Installer/Steps/PolicySettings.php:38
607
+ msgctxt "(Admin)"
608
+ msgid ""
609
+ "We have automatically selected your WooCommerce Terms & Conditions page."
610
+ msgstr ""
611
+
612
+ #: src/Modules/ContactForm7/ContactForm7.php:35
613
+ msgctxt "(Admin)"
614
+ msgid "gdpr terms txt"
615
+ msgstr ""
616
+
617
+ #: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
618
+ #, php-format
619
+ msgid "Nonce error for action \"%s\". Please go back and try again!"
620
+ msgstr ""
621
+
622
+ #: src/Router.php:149
623
+ msgctxt "(Admin)"
624
+ msgid "You do not have the required permissions to perform this action!"
625
+ msgstr ""
626
+
627
+ #: views/admin/consent.php:3
628
+ msgctxt "(Admin)"
629
+ msgid "Default consent types"
630
+ msgstr ""
631
+
632
+ #: views/admin/consent.php:4
633
+ msgctxt "(Admin)"
634
+ msgid ""
635
+ "These are the consent types that have been automatically registered by the "
636
+ "framework or a plugin."
637
+ msgstr ""
638
+
639
+ #: views/admin/consent.php:7 views/admin/consent.php:52
640
+ msgctxt "(Admin)"
641
+ msgid "Slug"
642
+ msgstr ""
643
+
644
+ #: views/admin/consent.php:8 views/admin/consent.php:38
645
+ #: views/admin/consent.php:60
646
+ msgctxt "(Admin)"
647
+ msgid "Title"
648
+ msgstr ""
649
+
650
+ #: views/admin/consent.php:9 views/admin/consent.php:41
651
+ #: views/admin/consent.php:63
652
+ msgctxt "(Admin)"
653
+ msgid "Description"
654
+ msgstr ""
655
+
656
+ #: views/admin/consent.php:10
657
+ msgctxt "(Admin)"
658
+ msgid "Visibility"
659
+ msgstr ""
660
+
661
+ #: views/admin/consent.php:18
662
+ msgctxt "(Admin)"
663
+ msgid "Visible"
664
+ msgstr ""
665
+
666
+ #: views/admin/consent.php:20
667
+ msgctxt "(Admin)"
668
+ msgid "Hidden"
669
+ msgstr ""
670
+
671
+ #: views/admin/consent.php:29
672
+ msgctxt "(Admin)"
673
+ msgid "Custom consent types"
674
+ msgstr ""
675
+
676
+ #: views/admin/consent.php:30
677
+ msgctxt "(Admin)"
678
+ msgid ""
679
+ "Here you can add custom consent types to track. They will not be used "
680
+ "anywhere by default - you will need to build an integration for each of them."
681
+ msgstr ""
682
+
683
+ #: views/admin/consent.php:35
684
+ msgctxt "(Admin)"
685
+ msgid "Machine-readable slug"
686
+ msgstr ""
687
+
688
+ #: views/admin/consent.php:44 views/admin/consent.php:68
689
+ msgctxt "(Admin)"
690
+ msgid "Visible?"
691
+ msgstr ""
692
+
693
+ #: views/admin/consent.php:72
694
+ msgctxt "(Admin)"
695
+ msgid "Remove"
696
+ msgstr ""
697
+
698
+ #: views/admin/consent.php:93
699
+ msgctxt "(Admin)"
700
+ msgid "Additional info"
701
+ msgstr ""
702
+
703
+ #: views/admin/consent.php:95
704
+ msgctxt "(Admin)"
705
+ msgid ""
706
+ "This text will be displayed to your data subjects on the Privacy Tools page."
707
+ msgstr ""
708
+
709
+ #: views/admin/data-subjects/search-form.php:2
710
+ msgctxt "(Admin)"
711
+ msgid ""
712
+ "On this page, you can find which data subjects personal data you are storing "
713
+ "and download, export or delete it."
714
+ msgstr ""
715
+
716
+ #: views/admin/data-subjects/search-form.php:10
717
+ msgctxt "(Admin)"
718
+ msgid "Find data subject by email"
719
+ msgstr ""
720
+
721
+ #: views/admin/data-subjects/search-form.php:11
722
+ msgctxt "(Admin)"
723
+ msgid "Email address"
724
+ msgstr ""
725
+
726
+ #: views/admin/data-subjects/search-form.php:16
727
+ msgctxt "(Admin)"
728
+ msgid "Search"
729
+ msgstr ""
730
+
731
+ #: views/admin/data-subjects/search-results.php:7
732
+ msgctxt "(Admin)"
733
+ msgid "Username"
734
+ msgstr ""
735
+
736
+ #: views/admin/data-subjects/search-results.php:12
737
+ msgctxt "(Admin)"
738
+ msgid "is not a registered user."
739
+ msgstr ""
740
+
741
+ #: views/admin/data-subjects/search-results.php:16
742
+ msgctxt "(Admin)"
743
+ msgid "Download data (html)"
744
+ msgstr ""
745
+
746
+ #: views/admin/data-subjects/search-results.php:17
747
+ msgctxt "(Admin)"
748
+ msgid "Export data (json)"
749
+ msgstr ""
750
+
751
+ #: views/admin/data-subjects/search-results.php:21
752
+ msgctxt "(Admin)"
753
+ msgid ""
754
+ "This user has admin capabilities. Deleting data via this interface is "
755
+ "disabled."
756
+ msgstr ""
757
+
758
+ #: views/admin/data-subjects/search-results.php:24
759
+ msgctxt "(Admin)"
760
+ msgid "Anonymize data"
761
+ msgstr ""
762
+
763
+ #: views/admin/data-subjects/search-results.php:25
764
+ msgctxt "(Admin)"
765
+ msgid "Delete data"
766
+ msgstr ""
767
+
768
+ #: views/admin/data-subjects/search-results.php:29
769
+ msgctxt "(Admin)"
770
+ msgid "No data found!"
771
+ msgstr ""
772
+
773
+ #: views/admin/general/delete-action-email.php:5
774
+ #: views/admin/general/export-action-email.php:5
775
+ #: views/installer/steps/configuration-settings.php:29
776
+ #: views/installer/steps/configuration-settings.php:79
777
+ msgid "Email address"
778
+ msgstr ""
779
+
780
+ #: views/admin/general/delete-action-reassign.php:3
781
+ #: views/installer/steps/configuration-settings.php:50
782
+ msgctxt "(Admin)"
783
+ msgid "Delete content"
784
+ msgstr ""
785
+
786
+ #: views/admin/general/delete-action-reassign.php:6
787
+ #: views/installer/steps/configuration-settings.php:53
788
+ msgctxt "(Admin)"
789
+ msgid "Reassign content to a user"
790
+ msgstr ""
791
+
792
+ #: views/admin/general/delete-action-reassign.php:10
793
+ msgctxt "(Admin)"
794
+ msgid ""
795
+ "If the user has submitted any content on your site, should it be deleted or "
796
+ "reassigned to another user?"
797
+ msgstr ""
798
+
799
+ #: views/admin/general/description-data-page.php:2
800
+ msgctxt "(Admin)"
801
+ msgid ""
802
+ "Select the page where users can go to control their data. This page must "
803
+ "contain the [gdpr_privacy_tools] shortcode."
804
+ msgstr ""
805
+
806
+ #: views/admin/general/enable.php:9
807
+ msgctxt "(Admin)"
808
+ msgid "Enable the view, export and forget functionality for users and visitors"
809
+ msgstr ""
810
+
811
+ #: views/admin/general/enable.php:12
812
+ msgctxt "(Admin)"
813
+ msgid ""
814
+ "Enable the Privacy Tools page on front-end and dashboard. This allows "
815
+ "visitors to request viewing and deleting their personal data and withdraw "
816
+ "consents."
817
+ msgstr ""
818
+
819
+ #: views/admin/general/theme-compatibility.php:9
820
+ #: views/installer/steps/integrations.php:21
821
+ msgctxt "(Admin)"
822
+ msgid ""
823
+ "Automatically add Privacy Policy and Privacy Tools links to your site footer."
824
+ msgstr ""
825
+
826
+ #: views/admin/notices/header.php:4 views/admin/settings-page.php:3
827
+ #: views/installer/header.php:23
828
+ msgctxt "(Admin)"
829
+ msgid "The GDPR Framework"
830
+ msgstr ""
831
+
832
+ #: views/admin/notices/helper-autoinstall.php:2
833
+ msgctxt "(Admin)"
834
+ msgid ""
835
+ "A Privacy Policy page has been created, but it is empty. You can generate a "
836
+ "policy template on this page."
837
+ msgstr ""
838
+
839
+ #: views/admin/notices/helper-policy.php:2
840
+ msgctxt "(Admin)"
841
+ msgid ""
842
+ "Heads up - your Privacy Policy still requires some attention. Find the "
843
+ "places marked with [TODO] and replace them with real content!"
844
+ msgstr ""
845
+
846
+ #: views/admin/notices/helper-tools.php:2
847
+ msgctxt "(Admin)"
848
+ msgid "The contents of this page should contain the [gdpr_tools] shortcode."
849
+ msgstr ""
850
+
851
+ #: views/admin/privacy-policy/description-policy-page.php:2
852
+ msgctxt "(Admin)"
853
+ msgid "Select the page which will contain your Privacy Policy"
854
+ msgstr ""
855
+
856
+ #: views/admin/privacy-policy/generated.php:3
857
+ msgctxt "(Admin)"
858
+ msgid "Your Privacy Policy has been generated."
859
+ msgstr ""
860
+
861
+ #: views/admin/privacy-policy/generated.php:20
862
+ msgctxt "(Admin)"
863
+ msgid "&laquo; Back"
864
+ msgstr ""
865
+
866
+ #: views/admin/privacy-policy/header.php:2
867
+ msgctxt "(Admin)"
868
+ msgid ""
869
+ "This page allows you to generate a Privacy Policy based on the information "
870
+ "you entered below."
871
+ msgstr ""
872
+
873
+ #: views/admin/settings-page.php:31
874
+ #, php-format
875
+ msgctxt "(Admin)"
876
+ msgid "The GDPR Framework. Built with &#9829; by %sCodelight%s."
877
+ msgstr ""
878
+
879
+ #: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
880
+ msgctxt "(Admin)"
881
+ msgid "Need more info?"
882
+ msgstr ""
883
+
884
+ #: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
885
+ msgctxt "(Admin)"
886
+ msgid "Site Owner's guide to GDPR"
887
+ msgstr ""
888
+
889
+ #: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
890
+ msgctxt "(Admin)"
891
+ msgid "Read the full guide on GDPR compliance."
892
+ msgstr ""
893
+
894
+ #: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
895
+ msgctxt "(Admin)"
896
+ msgid "Knowledge base"
897
+ msgstr ""
898
+
899
+ #: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
900
+ msgctxt "(Admin)"
901
+ msgid "Check out the knowledge base for common questions and answers."
902
+ msgstr ""
903
+
904
+ #: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
905
+ msgctxt "(Admin)"
906
+ msgid "Developer's guide to GDPR"
907
+ msgstr ""
908
+
909
+ #: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
910
+ msgctxt "(Admin)"
911
+ msgid "We have a thorough guide to help making custom sites compliant."
912
+ msgstr ""
913
+
914
+ #: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
915
+ msgctxt "(Admin)"
916
+ msgid "Need help?"
917
+ msgstr ""
918
+
919
+ #: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
920
+ msgctxt "(Admin)"
921
+ msgid "Submit a support request"
922
+ msgstr ""
923
+
924
+ #: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
925
+ msgctxt "(Admin)"
926
+ msgid ""
927
+ "Found a bug or problem with the plugin? Post in the wordpress.org support "
928
+ "forum."
929
+ msgstr ""
930
+
931
+ #: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
932
+ msgctxt "(Admin)"
933
+ msgid "Request a consultation"
934
+ msgstr ""
935
+
936
+ #: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
937
+ msgctxt "(Admin)"
938
+ msgid ""
939
+ "Need development or legal assistance in making your site compliant? We can "
940
+ "help!"
941
+ msgstr ""
942
+
943
+ #: views/admin/wizard-buttons.php:2
944
+ msgctxt "(Admin)"
945
+ msgid "Restart setup wizard"
946
+ msgstr ""
947
+
948
+ #: views/email/action-export.php:8 views/email/action-forget.php:12
949
+ msgctxt "(Admin)"
950
+ msgid ""
951
+ "This email is just for your information. You don't need to take any action"
952
+ msgstr ""
953
+
954
+ #: views/email/action-forget.php:8
955
+ msgctxt "(Admin)"
956
+ msgid "The data subject had a user account on your website."
957
+ msgstr ""
958
+
959
+ #: views/email/identify-data-subject.php:2
960
+ msgid "Someone has requested access to your data on"
961
+ msgstr ""
962
+
963
+ #: views/email/identify-data-subject.php:3
964
+ msgid "If this was a mistake, just ignore this email and nothing will happen."
965
+ msgstr ""
966
+
967
+ #: views/email/identify-data-subject.php:4
968
+ msgid "To manage your data, visit the following address:"
969
+ msgstr ""
970
+
971
+ #: views/email/identify-data-subject.php:10
972
+ msgid "This link is valid for 15 minutes."
973
+ msgstr ""
974
+
975
+ #: views/email/no-data.php:2
976
+ msgid "Someone has requested information about your personal data on"
977
+ msgstr ""
978
+
979
+ #: views/email/no-data.php:3
980
+ msgid "None of your personal data is stored on"
981
+ msgstr ""
982
+
983
+ #: views/email/no-data.php:5
984
+ msgid ""
985
+ "If this was a mistake or you did not request this email, just ignore it and "
986
+ "nothing will happen."
987
+ msgstr ""
988
+
989
+ #: views/email/request-export.php:13 views/email/request-forget.php:13
990
+ msgctxt "(Admin)"
991
+ msgid "As a reminder: according to GDPR, you have 30 days to comply."
992
+ msgstr ""
993
+
994
+ #: views/global/delete-action.php:2
995
+ msgctxt "(Admin)"
996
+ msgid "Automatically anonymize data"
997
+ msgstr ""
998
+
999
+ #: views/global/delete-action.php:5
1000
+ msgctxt "(Admin)"
1001
+ msgid "Automatically delete data"
1002
+ msgstr ""
1003
+
1004
+ #: views/global/delete-action.php:9
1005
+ msgctxt "(Admin)"
1006
+ msgid "Automatically anonymize data and notify me via email"
1007
+ msgstr ""
1008
+
1009
+ #: views/global/delete-action.php:13
1010
+ msgctxt "(Admin)"
1011
+ msgid "Automatically delete data and notify me via email"
1012
+ msgstr ""
1013
+
1014
+ #: views/global/delete-action.php:16 views/global/export-action.php:10
1015
+ msgctxt "(Admin)"
1016
+ msgid "Only notify me via email"
1017
+ msgstr ""
1018
+
1019
+ #: views/global/export-action.php:2
1020
+ msgctxt "(Admin)"
1021
+ msgid "Automatically download data"
1022
+ msgstr ""
1023
+
1024
+ #: views/global/export-action.php:6
1025
+ msgctxt "(Admin)"
1026
+ msgid "Automatically download data and notify me via email"
1027
+ msgstr ""
1028
+
1029
+ #: views/installer/continue-notice.php:2
1030
+ msgctxt "(Admin)"
1031
+ msgid "The The GDPR Framework setup has not been finalized yet."
1032
+ msgstr ""
1033
+
1034
+ #: views/installer/continue-notice.php:3
1035
+ msgctxt "(Admin)"
1036
+ msgid "You can continue the setup at any time."
1037
+ msgstr ""
1038
+
1039
+ #: views/installer/continue-notice.php:6
1040
+ msgctxt "(Admin)"
1041
+ msgid "Continue the setup wizard"
1042
+ msgstr ""
1043
+
1044
+ #: views/installer/continue-notice.php:9
1045
+ msgctxt "(Admin)"
1046
+ msgid "Hide this message"
1047
+ msgstr ""
1048
+
1049
+ #: views/installer/footer.php:7
1050
+ msgid "Back"
1051
+ msgstr ""
1052
+
1053
+ #: views/installer/header.php:26
1054
+ msgctxt "(Admin)"
1055
+ msgid "I need help"
1056
+ msgstr ""
1057
+
1058
+ #: views/installer/header.php:29
1059
+ msgctxt "(Admin)"
1060
+ msgid "Developer Docs"
1061
+ msgstr ""
1062
+
1063
+ #: views/installer/header.php:36
1064
+ msgctxt "(Admin)"
1065
+ msgid "Configuration"
1066
+ msgstr ""
1067
+
1068
+ #: views/installer/header.php:46
1069
+ msgctxt "(Admin)"
1070
+ msgid "Forms & Consent"
1071
+ msgstr ""
1072
+
1073
+ #: views/installer/header.php:51
1074
+ msgctxt "(Admin)"
1075
+ msgid "Integrations"
1076
+ msgstr ""
1077
+
1078
+ #: views/installer/steps/configuration-settings.php:23
1079
+ #: views/installer/steps/configuration-settings.php:73
1080
+ msgctxt "(Admin)"
1081
+ msgid "Enter the email address to notify"
1082
+ msgstr ""
1083
+
1084
+ #: views/installer/steps/disclaimer.php:21
1085
+ msgctxt "(Admin)"
1086
+ msgid "I accept"
1087
+ msgstr ""
1088
+
1089
+ #: views/installer/welcome-notice.php:7
1090
+ msgctxt "(Admin)"
1091
+ msgid "Run the setup wizard"
1092
+ msgstr ""
1093
+
1094
+ #: views/installer/welcome-notice.php:11
1095
+ msgctxt "(Admin)"
1096
+ msgid "Auto-install pages"
1097
+ msgstr ""
1098
+
1099
+ #: views/installer/welcome-notice.php:15
1100
+ msgctxt "(Admin)"
1101
+ msgid "Skip and install manually"
1102
+ msgstr ""
1103
+
1104
+ #: views/modules/contact-form-7/generator-privacy.php:6
1105
+ msgctxt "(Admin)"
1106
+ msgid ""
1107
+ "This tag generates the default text for Terms & Conditions and/or Privacy "
1108
+ "Policy checkbox."
1109
+ msgstr ""
1110
+
1111
+ #: views/modules/contact-form-7/generator-privacy.php:15
1112
+ msgid "Insert"
1113
+ msgstr ""
1114
+
1115
+ #: views/modules/wordpress-comments/terms-checkbox.php:6
1116
+ #: views/modules/wordpress-user/registration-terms-checkbox.php:7
1117
+ #, php-format
1118
+ msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1119
+ msgstr ""
1120
+
1121
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
1122
+ msgid "Manage consents"
1123
+ msgstr ""
1124
+
1125
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
1126
+ #: views/privacy-tools/form-consent.php:6
1127
+ msgid "Here you can withdraw any consents you have given."
1128
+ msgstr ""
1129
+
1130
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
1131
+ #: views/privacy-tools/form-consent.php:9
1132
+ msgid "Consent types"
1133
+ msgstr ""
1134
+
1135
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
1136
+ #: views/privacy-tools/form-consent.php:24
1137
+ msgid "Withdraw"
1138
+ msgstr ""
1139
+
1140
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
1141
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
1142
+ msgctxt "(Admin)"
1143
+ msgid "Delete this user and all data"
1144
+ msgstr ""
1145
+
1146
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
1147
+ msgctxt "(Admin)"
1148
+ msgid "Delete my data"
1149
+ msgstr ""
1150
+
1151
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
1152
+ #: views/privacy-tools/form-delete.php:13
1153
+ msgid "Delete all data we have gathered about you."
1154
+ msgstr ""
1155
+
1156
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
1157
+ #: views/privacy-tools/form-delete.php:14
1158
+ msgid "If you have a user account on our site, it will also be deleted."
1159
+ msgstr ""
1160
+
1161
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
1162
+ #: views/privacy-tools/form-delete.php:15
1163
+ msgid "Be careful - this action is permanent and CANNOT be undone."
1164
+ msgstr ""
1165
+
1166
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
1167
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
1168
+ msgctxt "(Admin)"
1169
+ msgid ""
1170
+ "You seem to have an administrator or equivalent role, so deleting/"
1171
+ "anonymizing via this page is disabled."
1172
+ msgstr ""
1173
+
1174
+ #: views/modules/wordpress-user/dashboard/form-export.php:7
1175
+ #: views/privacy-tools/form-export.php:1
1176
+ msgid "Download your data"
1177
+ msgstr ""
1178
+
1179
+ #: views/modules/wordpress-user/dashboard/form-export.php:12
1180
+ #: views/privacy-tools/form-export.php:13
1181
+ msgid "Download as table"
1182
+ msgstr ""
1183
+
1184
+ #: views/modules/wordpress-user/dashboard/form-export.php:15
1185
+ #: views/privacy-tools/form-export.php:22
1186
+ msgid "Export as JSON"
1187
+ msgstr ""
1188
+
1189
+ #: views/modules/wordpress-user/dashboard/form-export.php:19
1190
+ #: views/privacy-tools/form-export.php:4
1191
+ msgid "You can download all your data formatted as a table for viewing."
1192
+ msgstr ""
1193
+
1194
+ #: views/modules/wordpress-user/dashboard/form-export.php:20
1195
+ #: views/privacy-tools/form-export.php:5
1196
+ msgid "Alternatively, you can export it in machine-readable JSON format."
1197
+ msgstr ""
1198
+
1199
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
1200
+ msgctxt "(Admin)"
1201
+ msgid "Delete user and all data"
1202
+ msgstr ""
1203
+
1204
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
1205
+ msgctxt "(Admin)"
1206
+ msgid "Anonymize user and all data"
1207
+ msgstr ""
1208
+
1209
+ #: views/modules/wordpress-user/dashboard/profile-page/header.php:2
1210
+ msgctxt "(Admin)"
1211
+ msgid "GDPR Data"
1212
+ msgstr ""
1213
+
1214
+ #: views/modules/wordpress-user/dashboard/profile-page/header.php:6
1215
+ msgctxt "(Admin)"
1216
+ msgid "This user has been anonymized."
1217
+ msgstr ""
1218
+
1219
+ #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
1220
+ msgctxt "(Admin)"
1221
+ msgid "Consents given"
1222
+ msgstr ""
1223
+
1224
+ #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
1225
+ msgctxt "(Admin)"
1226
+ msgid "No consents given"
1227
+ msgstr ""
1228
+
1229
+ #: views/privacy-tools/form-consent.php:2
1230
+ msgid "Consent"
1231
+ msgstr ""
1232
+
1233
+ #: views/privacy-tools/form-delete.php:1
1234
+ #: views/privacy-tools/notice-admin-role.php:1
1235
+ msgid "Delete my user and data"
1236
+ msgstr ""
1237
+
1238
+ #: views/privacy-tools/form-delete.php:7
1239
+ msgid "Delete my data"
1240
+ msgstr ""
1241
+
1242
+ #: views/privacy-tools/form-identify.php:8
1243
+ msgid "Back to Privacy Tools"
1244
+ msgstr ""
1245
+
1246
+ #: views/privacy-tools/form-identify.php:14
1247
+ msgid "Identify yourself!"
1248
+ msgstr ""
1249
+
1250
+ #: views/privacy-tools/form-identify.php:17
1251
+ #: views/privacy-tools/form-identify.php:20
1252
+ msgid "Enter your email address"
1253
+ msgstr ""
1254
+
1255
+ #: views/privacy-tools/form-identify.php:23
1256
+ msgid "Send email"
1257
+ msgstr ""
1258
+
1259
+ #: views/privacy-tools/notice-admin-role.php:4
1260
+ msgctxt "(Admin)"
1261
+ msgid "Data deletion is disabled for administrative accounts."
1262
+ msgstr ""
1263
+
1264
+ #: views/privacy-tools/notices.php:3
1265
+ msgid ""
1266
+ "We will send you an email with the link to access your data. Please check "
1267
+ "your spam folder as well!"
1268
+ msgstr ""
1269
+
1270
+ #: views/privacy-tools/notices.php:7
1271
+ msgid "The email you entered does not appear to be a valid email."
1272
+ msgstr ""
1273
+
1274
+ #: views/privacy-tools/notices.php:11
1275
+ msgid "Sorry - the link seems to have expired. Please try again!"
1276
+ msgstr ""
1277
+
1278
+ #: views/privacy-tools/notices.php:23
1279
+ msgid "Your personal data has been removed!"
1280
+ msgstr ""
1281
+
1282
+ #: views/privacy-tools/privacy-tools.php:5
1283
+ msgid "You are identified as"
1284
+ 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,91 +1,129 @@
1
-
2
- === The GDPR Framework ===
3
- Contributors: codelight
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.5
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
- ## Disclaimer
23
- 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.
24
-
25
- ### Documentation
26
- Full documentation: [The WordPress Site Owner's Guide to GDPR](https://codelight.eu/wordpress-gdpr-framework/wordpress-site-owners-guide-to-gdpr/)
27
- For developers: [Developer Docs](https://codelight.eu/wordpress-gdpr-framework/developer-docs/)
28
-
29
- ### Features
30
- &#9745; Allow both users and visitors without an account to view, export and delete their personal data;
31
- &#9745; Configure the plugin to delete or anonymize personal data automatically or send a notification and allow admins to do it manually;
32
- &#9745; Track, manage and withdraw consent;
33
- &#9745; Generate a GDPR-compatible Privacy Policy template for your site;
34
- &#9745; Comes with a helpful installation wizard to get you started quickly;
35
- &#9745; Fully documented;
36
- &#9745; Developer-friendly. Everything can be extended, every feature and template can be overridden.
37
-
38
- We're just getting started. There's lots more to come!
39
-
40
- ### Plugin support:
41
- The GDPR Framework currently works with the following plugins
42
- &#9745; Contact Form 7
43
- &#9745; Gravity Forms - [Download the GDPR add-on](https://wordpress.org/plugins/gdpr-for-gravity-forms/)
44
- &#9745; Formidable Forms - [Download the GDPR add-on](https://wordpress.org/plugins/gdpr-for-formidable-forms/)
45
- &#9745; WPML
46
-
47
- Coming in April 2018:
48
- &#9744; Ninja Forms
49
- &#9744; Contact Form 7 Flamingo
50
-
51
- Still free and open-source.
52
-
53
- Other integrations coming soon:
54
- &#9744; WP Migrate DB
55
- &#9744; WooCommerce (postponed until the launch of their own compliance toolkit)
56
- &#9744; Easy Digital Downloads
57
-
58
- We're happy to add support for other major plugins as well. If you have a request, get in touch!
59
-
60
- == Changelog ==
61
-
62
- = 1.0.5 =
63
- * Add Spanish support (Thanks @elarequi!)
64
- * Lower required PHP version to 5.6.0
65
- * Re-add container alias for DataSubjectManager
66
- * Fix for installer giving the option to add links to footer for unsupported themes
67
- * Fix PHP notice in WPML module
68
-
69
- = 1.0.4 =
70
- * Fix translations, for real this time
71
- * Add French translations (Thanks @datagitateur!)
72
- * Fix PHP warning if WPML is activated
73
- * Add filter around $headers array for all outgoing emails sent via this plugin
74
-
75
- = 1.0.3 =
76
- * Change text domain to 'gdpr-framework' to avoid conflict with other plugins
77
- * Add Portuguese translation (Thanks @kativiti!)
78
- * Add partial Estonian translation
79
-
80
- = 1.0.2 =
81
- * Fix T&C and Privacy Policy URLs on registration and comments forms
82
- * Add basic styling and separate stylesheet for Privacy Tools page
83
- * Allow disabling styles for Privacy Tools page via admin
84
- * Add confirmation notice on deleting data via front-end Privacy Tools
85
- * Change strings with 'gdpr-admin' domain back to 'gdpr'. Add context to all admin strings.
86
-
87
- = 1.0.1 =
88
- * Fix PHP notice on Privacy Tools frontend page if logged in as admin
89
-
90
- = 1.0.0 =
91
- * Initial release
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === The GDPR Framework ===
2
+ Contributors: codelight
3
+ Tags: gdpr
4
+ Requires at least: 4.7
5
+ Tested up to: 4.9.5
6
+ Requires PHP: 5.6.33
7
+ Stable tag: 1.0.6
8
+ License: GPLv3
9
+ License URI: https://www.gnu.org/licenses/gpl-3.0.en.html
10
+
11
+ Easy to use tools to help make your website GDPR-compliant. Fully documented, extendable and developer-friendly.
12
+
13
+ == Description ==
14
+
15
+ Easy to use tools to help make your website GDPR-compliant.
16
+
17
+ 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.
18
+
19
+ You don't need to drown your customers in pointless acceptance checkboxes if you know what you're doing!
20
+
21
+ ## IMPORTANT
22
+ 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.)
23
+
24
+ ## Disclaimer
25
+ 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.
26
+
27
+ ### Documentation
28
+ Full documentation: [The WordPress Site Owner's Guide to GDPR](https://codelight.eu/wordpress-gdpr-framework/wordpress-site-owners-guide-to-gdpr/)
29
+ For developers: [Developer Docs](https://codelight.eu/wordpress-gdpr-framework/developer-docs/)
30
+
31
+ ### Features
32
+ &#9745; Allow both users and visitors without an account to automatically view, export and delete their personal data;
33
+ &#9745; Configure the plugin to delete or anonymize personal data automatically or send a notification and allow admins to do it manually;
34
+ &#9745; Track, manage and withdraw consent;
35
+ &#9745; Generate a GDPR-compatible Privacy Policy template for your site;
36
+ &#9745; Comes with a helpful installation wizard to get you started quickly;
37
+ &#9745; Fully documented;
38
+ &#9745; Developer-friendly. Everything can be extended, every feature and template can be overridden.
39
+
40
+ GDPR is here to stay and we are just getting started. There's lots more to come!
41
+
42
+ ### Plugin support:
43
+ The GDPR Framework currently works with the following plugins
44
+ &#9745; Contact Form 7
45
+ &#9745; Gravity Forms - [Download the GDPR add-on](https://wordpress.org/plugins/gdpr-for-gravity-forms/)
46
+ &#9745; Formidable Forms - [Download the GDPR add-on](https://wordpress.org/plugins/gdpr-for-formidable-forms/)
47
+ &#9745; WPML
48
+
49
+ Coming soon:
50
+ &#9744; Ninja Forms
51
+ &#9744; Contact Form 7 Flamingo
52
+
53
+ Still free and open-source.
54
+
55
+ Other integrations coming up:
56
+ &#9744; WP Migrate DB
57
+ &#9744; WooCommerce (postponed until the launch of their own compliance toolkit)
58
+ &#9744; Easy Digital Downloads
59
+
60
+ We're happy to add support for other major plugins as well. If you have a request, get in touch!
61
+
62
+ == Frequently Asked Questions ==
63
+ = Help, the identification emails are not sent! =
64
+ 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.
65
+ If you get the forgot password email but not the identification email, please make a post in the support forums.
66
+
67
+ = Help, the link in the identification email doesn't work! =
68
+ Are you using SendGrid or another email delivery service? This might corrupt the link in the email.
69
+ In case you're using Sendgrid, make sure to turn off "click tracking". Otherwise, please post in the support forum!
70
+
71
+ = Help, the Privacy Tools page acts weirdly or always displays the "link expired" message! =
72
+ Check if you're using any caching plugins. If yes, then make sure the Privacy Tools page is excluded.
73
+ Also check if a server side cache is enabled by your web host.
74
+
75
+ = How is this plugin different from the tools in WordPress v4.9.6? =
76
+ 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.
77
+ In addition to that, we provide tools to manage and track custom consent types and also a privacy policy generator.
78
+ We are also planning to add other important privacy-related features missing from WordPress core over time.
79
+
80
+ = What about cookies? =
81
+ 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.
82
+
83
+ == Changelog ==
84
+
85
+ = 1.0.6 =
86
+ * Fix administrative roles not being able to comment via admin interface
87
+ * Fix trashed or spam comments not being deleted
88
+ * Minor usability tweaks everywhere
89
+ * Fix PHP5.6 not properly saving custom consent (Thanks @paulnewson!)
90
+ * Fix CF7 always showing as enabled in wizard
91
+ * In Tools > Privacy > Data Subjects, add the display of given consents
92
+ * Add warning about Sendgrid compatibility in the installer
93
+ * Fix issue with installer wizard not properly saving export action
94
+ * Add notice in case the settings are not properly configured
95
+ * Added Bulgarian translation (thanks Zankov Group!)
96
+ * Added partial Italian translation (thanks Matteo Bruno!)
97
+
98
+ = 1.0.5 =
99
+ * Fix installing consent tables and roles properly
100
+ * Add Spanish translations (Thanks @elarequi!)
101
+ * Add partial German translations (Thanks @knodderdachs!)
102
+ * Lower required PHP version to 5.6.0
103
+ * Re-add container alias for DataSubjectManager
104
+ * Fix for installer giving the option to add links to footer for unsupported themes
105
+ * Fix PHP notice in WPML module
106
+
107
+ = 1.0.4 =
108
+ * Fix translations, for real this time
109
+ * Add French translations (Thanks @datagitateur!)
110
+ * Fix PHP warning if WPML is activated
111
+ * Add filter around $headers array for all outgoing emails sent via this plugin
112
+
113
+ = 1.0.3 =
114
+ * Change text domain to 'gdpr-framework' to avoid conflict with other plugins
115
+ * Add Portuguese translation (Thanks @kativiti!)
116
+ * Add partial Estonian translation
117
+
118
+ = 1.0.2 =
119
+ * Fix T&C and Privacy Policy URLs on registration and comments forms
120
+ * Add basic styling and separate stylesheet for Privacy Tools page
121
+ * Allow disabling styles for Privacy Tools page via admin
122
+ * Add confirmation notice on deleting data via front-end Privacy Tools
123
+ * Change strings with 'gdpr-admin' domain back to 'gdpr'. Add context to all admin strings.
124
+
125
+ = 1.0.1 =
126
+ * Fix PHP notice on Privacy Tools frontend page if logged in as admin
127
+
128
+ = 1.0.0 =
129
+ * 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,57 +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
- }
13
-
14
- protected function toolsHelper()
15
- {
16
- $toolsPage = gdpr('options')->get('tools_page');
17
-
18
- // Display the notice only on Tools page
19
- if (!$toolsPage || !isset($_GET['post']) || $_GET['post'] !== $toolsPage) {
20
- return;
21
- }
22
-
23
- $post = get_post($toolsPage);
24
- $helpUrl = gdpr('helpers')->docs();
25
-
26
- if (!stristr($post->post_content, '[gdpr_privacy_tools]')) {
27
- gdpr('admin-notice')->add('admin/notices/helper-tools', compact('helpUrl'));
28
- }
29
- }
30
-
31
- protected function autoinstallHelper()
32
- {
33
- if (!isset($_GET['gdpr-notice']) || empty($_GET['gdpr-notice']) || 'autoinstall' !== $_GET['gdpr-notice']) {
34
- return;
35
- }
36
-
37
- $helpUrl = gdpr('helpers')->docs();
38
- gdpr('admin-notice')->add('admin/notices/helper-autoinstall', compact('helpUrl'));
39
- }
40
-
41
- protected function policyHelper()
42
- {
43
- $policyPage = gdpr('options')->get('policy_page');
44
-
45
- // Display the notice only on Policy page
46
- if (!$policyPage || !isset($_GET['post']) || $_GET['post'] !== $policyPage) {
47
- return;
48
- }
49
-
50
- $post = get_post($policyPage);
51
- $helpUrl = gdpr('helpers')->docs();
52
-
53
- if (stristr($post->post_content, '[TODO]')) {
54
- gdpr('admin-notice')->add('admin/notices/helper-policy', compact('helpUrl'));
55
- }
56
- }
57
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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('&mdash; Select &mdash;', '(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('&mdash; Select &mdash;', '(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('&mdash; Select &mdash;', '(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('&mdash; Select &mdash;', '(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('&mdash; Select &mdash;', '(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('&mdash; Select &mdash;', '(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('&mdash; Select &mdash;', '(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('&mdash; Select &mdash;', '(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/Consent/UserConsentModel.php CHANGED
@@ -170,10 +170,20 @@ class UserConsentModel
170
  {
171
  global $wpdb;
172
 
173
- return array_column($wpdb->get_results($wpdb->prepare(
174
- "SELECT * FROM {$this->tableName} WHERE email = %s and status = 1;",
175
- $email
176
- )), 'consent');
 
 
 
 
 
 
 
 
 
 
177
  }
178
 
179
  /**
170
  {
171
  global $wpdb;
172
 
173
+ /**
174
+ * Workaround to an issue with array_column in PHP5.6 - thanks @paulnewson
175
+ */
176
+ if (version_compare(PHP_VERSION, '7') >= 0) {
177
+ return array_column($wpdb->get_results($wpdb->prepare(
178
+ "SELECT * FROM {$this->tableName} WHERE email = %s and status = 1;",
179
+ $email
180
+ )), 'consent');
181
+ } else {
182
+ return array_column(json_decode(json_encode($wpdb->get_results($wpdb->prepare(
183
+ "SELECT * FROM {$this->tableName} WHERE email = %s and status = 1;",
184
+ $email
185
+ ))), true), 'consent');
186
+ }
187
  }
188
 
189
  /**
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,173 +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
- return !($dataSubject && $dataSubject->hasConsented('privacy-policy'));
47
- }
48
-
49
- /**
50
- * If consent is needed, render the checkbox
51
- *
52
- * @param $fields
53
- */
54
- public function maybeAddCommentFormCheckbox()
55
- {
56
- $email = isset($_POST['email']) ? $_POST['email'] : null;
57
-
58
- if (!$this->needsConsent($email)) {
59
- return;
60
- }
61
-
62
- $privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
63
- $termsPage = gdpr('options')->get('terms_page');
64
- if ($termsPage) {
65
- $termsUrl = get_permalink($termsPage);
66
- } else {
67
- $termsUrl = false;
68
- }
69
-
70
- echo gdpr('view')->render(
71
- 'modules/wordpress-comments/terms-checkbox',
72
- compact('termsUrl', 'privacyPolicyUrl')
73
- );
74
- }
75
-
76
- /**
77
- * If consent is needed, validate it
78
- */
79
- public function validate($commentData)
80
- {
81
- $email = isset($_POST['email']) ? $_POST['email'] : null;
82
-
83
- if (!$this->needsConsent($email)) {
84
- return $commentData;
85
- }
86
-
87
- if (!isset($_POST['gdpr_terms']) || !$_POST['gdpr_terms']) {
88
- wp_die(
89
- sprintf(
90
- __('%sERROR:%s You need to accept the terms and conditions to post a comment.'),
91
- '<strong>',
92
- '</strong>'
93
- )
94
- );
95
- } else {
96
- if (is_user_logged_in()) {
97
- $dataSubject = $this->dataSubjectManager->getByLoggedInUser();
98
- } else {
99
- $dataSubject = $this->dataSubjectManager->getByEmail($email);
100
- }
101
- $dataSubject->giveConsent('privacy-policy');
102
- }
103
-
104
- return $commentData;
105
- }
106
-
107
- /**
108
- * Add comments as well as comment meta to export data
109
- *
110
- * @param $data
111
- * @param $email
112
- * @param $dataSubject
113
- * @return mixed
114
- */
115
- public function getExportData($data, $email)
116
- {
117
- $comments = $this->getCommentsByEmail($email);
118
-
119
- if (count($comments)) {
120
-
121
- foreach ($comments as $comment) {
122
- /* @var $comment \WP_Comment */
123
-
124
- $commentData = [
125
- 'comment_author' => $comment->comment_author,
126
- 'comment_author_email' => $comment->comment_author_email,
127
- 'comment_author_url' => $comment->comment_author_url,
128
- 'comment_author_IP' => $comment->comment_author_IP,
129
- 'comment_date' => $comment->comment_date,
130
- 'comment_date_gmt' => $comment->comment_date_gmt,
131
- 'comment_content' => $comment->comment_content,
132
- 'comment_approved' => $comment->comment_approved,
133
- 'comment_agent' => $comment->comment_agent,
134
- ];
135
-
136
- $commentMeta = get_comment_meta($comment->comment_ID);
137
- if (!empty($commentMeta)) {
138
- $commentData['comment_meta'] = $commentMeta;
139
- }
140
-
141
- $data['comments'][] = $commentData;
142
- }
143
- }
144
-
145
- return $data;
146
- }
147
-
148
- public function deleteComments($email)
149
- {
150
- $comments = $this->getCommentsByEmail($email);
151
-
152
- if (!count($comments)) {
153
- return;
154
- }
155
-
156
- foreach ($comments as $comment) {
157
- /* @var $comment \WP_Comment */
158
- wp_delete_comment($comment->comment_ID, true);
159
- }
160
- }
161
-
162
- public function getCommentsByEmail($email)
163
- {
164
- if (!$email || !is_email($email)) {
165
- return [];
166
- }
167
-
168
- $query = new \WP_Comment_Query;
169
- return $query->query([
170
- 'author_email' => $email,
171
- ]);
172
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  }
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,126 +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
- return gdpr('view')->render('admin/data-subjects/search-results', compact('email', 'hasData', 'links', 'userName', 'adminCap'));
112
- }
113
-
114
- public function renderSubmitButton()
115
- {
116
- // Intentionally left blank
117
- }
118
-
119
- public function searchRedirect()
120
- {
121
- if (isset($_POST['gdpr_email']) && $_POST['gdpr_email']) {
122
- wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $_POST['gdpr_email']));
123
- exit;
124
- }
125
- }
126
- }
 
 
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,303 +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
- ]);
274
-
275
- gdpr('options')->set('policy_page', $policyPageId);
276
-
277
- $toolsPageId = wp_insert_post([
278
- 'post_content' => '[gdpr_privacy_tools]',
279
- 'post_title' => __('Privacy Tools', 'gdpr-framework'),
280
- 'post_type' => 'page',
281
- ]);
282
- gdpr('options')->set('tools_page', $toolsPageId);
283
-
284
- // Woocommerce compatibility - automatically add their terms page
285
- if (get_option('woocommerce_terms_page_id')) {
286
- gdpr('options')->set('terms_page', get_option('woocommerce_terms_page_id'));
287
- }
288
-
289
- gdpr('options')->set('is_installed', 'yes');
290
- wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy&gdpr-notice=autoinstall'));
291
- exit;
292
- }
293
-
294
- /**
295
- * Do nothing, but mark the installer as completed
296
- */
297
- public function skipInstall()
298
- {
299
- gdpr('options')->set('is_installed', 'yes');
300
- wp_safe_redirect(gdpr('helpers')->getAdminUrl());
301
- exit;
302
- }
303
- }
 
 
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('&mdash; Create a new page &mdash;', '(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('&mdash; Create a new page &mdash;', '(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('delete_action', $_POST['gdpr_export_action']);
49
- }
50
-
51
- if (isset($_POST['gdpr_export_action_email'])) {
52
- gdpr('options')->set('delete_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,30 +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
-
25
- echo gdpr('view')->render(
26
- $this->template,
27
- compact('isRegistrationOpen', 'isCommentsEnabled', 'privacyToolsPageUrl', 'hasGravityForms')
28
- );
29
- }
30
- }
 
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,47 +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
-
27
- echo gdpr('view')->render(
28
- $this->template,
29
- compact(
30
- 'enableThemeCompatibility',
31
- 'hasEDD',
32
- 'hasWooCommerce',
33
- 'currentTheme',
34
- 'isThemeSupported'
35
- )
36
- );
37
- }
38
-
39
- public function submit()
40
- {
41
- if (isset($_POST['gdpr_enable_theme_compatibility']) && 'yes' === $_POST['gdpr_enable_theme_compatibility']) {
42
- gdpr('options')->set('enable_theme_compatibility', true);
43
- } else {
44
- gdpr('options')->set('enable_theme_compatibility', false);
45
- }
46
- }
47
- }
 
 
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('&mdash; Create a new page &mdash;', '(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('&mdash; Create a new page &mdash;', '(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('&mdash; Create a new page &mdash;', '(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('&mdash; Create a new page &mdash;', '(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[ICL_LANGUAGE_CODE])) {
49
- return $option[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[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 = 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 = 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/Updater/Updater.php CHANGED
@@ -1,47 +1,47 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Updater;
4
-
5
- class Updater
6
- {
7
- public function __construct()
8
- {
9
- $currentVersion = $this->getVersion();
10
-
11
- if ($currentVersion === GDPR_FRAMEWORK_VERSION) {
12
- return;
13
- }
14
-
15
- if (version_compare($currentVersion, '1.0.5', '<')) {
16
- $this->update_1_0_5();
17
- }
18
- }
19
-
20
- /**
21
- * @return string
22
- */
23
- public function getVersion()
24
- {
25
- return get_option('gdpr_plugin_version', '1.0.0');
26
- }
27
-
28
- /**
29
- * Retroactively fix bug in v1.0.3 where the activation code didn't run properly
30
- */
31
- public function update_1_0_5()
32
- {
33
- $model = new \Codelight\GDPR\Components\Consent\UserConsentModel();
34
- $model->createTable();
35
-
36
- if (apply_filters('gdpr/data-subject/anonymize/change_role', true) && ! get_role('anonymous')) {
37
-
38
- add_role(
39
- 'anonymous',
40
- _x('Anonymous', '(Admin)', 'gdpr-framework'),
41
- []
42
- );
43
- }
44
-
45
- update_option('gdpr_plugin_version', '1.0.5');
46
- }
47
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Updater;
4
+
5
+ class Updater
6
+ {
7
+ public function __construct()
8
+ {
9
+ $currentVersion = $this->getVersion();
10
+
11
+ if ($currentVersion === GDPR_FRAMEWORK_VERSION) {
12
+ return;
13
+ }
14
+
15
+ if (version_compare($currentVersion, '1.0.5', '<')) {
16
+ $this->update_1_0_5();
17
+ }
18
+ }
19
+
20
+ /**
21
+ * @return string
22
+ */
23
+ public function getVersion()
24
+ {
25
+ return get_option('gdpr_plugin_version', '1.0.0');
26
+ }
27
+
28
+ /**
29
+ * Retroactively fix bug in v1.0.3 where the activation code didn't run properly
30
+ */
31
+ public function update_1_0_5()
32
+ {
33
+ $model = new \Codelight\GDPR\Components\Consent\UserConsentModel();
34
+ $model->createTable();
35
+
36
+ if (apply_filters('gdpr/data-subject/anonymize/change_role', true) && ! get_role('anonymous')) {
37
+
38
+ add_role(
39
+ 'anonymous',
40
+ _x('Anonymous', '(Admin)', 'gdpr-framework'),
41
+ []
42
+ );
43
+ }
44
+
45
+ update_option('gdpr_plugin_version', '1.0.5');
46
+ }
47
  }
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 ComposerAutoloaderInit5f4ac86ae1a983fd118be68a8ad29c43::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit9f3572d4c44534633256010eb339e06e::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit5f4ac86ae1a983fd118be68a8ad29c43
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit5f4ac86ae1a983fd118be68a8ad29c43
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,19 +48,19 @@ class ComposerAutoloaderInit5f4ac86ae1a983fd118be68a8ad29c43
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;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit9f3572d4c44534633256010eb339e06e
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit9f3572d4c44534633256010eb339e06e', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit9f3572d4c44534633256010eb339e06e', '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\ComposerStaticInit9f3572d4c44534633256010eb339e06e::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\ComposerStaticInit9f3572d4c44534633256010eb339e06e::$files;
52
  } else {
53
  $includeFiles = require __DIR__ . '/autoload_files.php';
54
  }
55
  foreach ($includeFiles as $fileIdentifier => $file) {
56
+ composerRequire9f3572d4c44534633256010eb339e06e($fileIdentifier, $file);
57
  }
58
 
59
  return $loader;
60
  }
61
  }
62
 
63
+ function composerRequire9f3572d4c44534633256010eb339e06e($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 ComposerStaticInit5f4ac86ae1a983fd118be68a8ad29c43
8
  {
9
  public static $files = array (
10
  '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
@@ -72,8 +72,8 @@ class ComposerStaticInit5f4ac86ae1a983fd118be68a8ad29c43
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
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit9f3572d4c44534633256010eb339e06e
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 = ComposerStaticInit9f3572d4c44534633256010eb339e06e::$prefixLengthsPsr4;
76
+ $loader->prefixDirsPsr4 = ComposerStaticInit9f3572d4c44534633256010eb339e06e::$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,33 +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><?= esc_html($email); ?> <?= _x('is not a registered user.', '(Admin)', 'gdpr-framework'); ?></em>
13
- </p>
14
- <?php endif; ?>
15
-
16
- <a class="button button-primary" href="<?= esc_url($links['view']); ?>"><?= _x('Download data (html)', '(Admin)', 'gdpr-framework'); ?></a>
17
- <a class="button button-primary" href="<?= esc_url($links['export']); ?>"><?= _x('Export data (json)', '(Admin)', 'gdpr-framework'); ?></a>
18
-
19
- <?php if ($adminCap): ?>
20
- <p>
21
- <strong><?= _x('This user has admin capabilities. Deleting data via this interface is disabled.', '(Admin)', 'gdpr-framework'); ?></strong>
22
- </p>
23
- <?php else: ?>
24
- <a class="button button-primary" href="<?= esc_url($links['anonymize']); ?>"><?= _x('Anonymize data', '(Admin)', 'gdpr-framework'); ?></a>
25
- <a class="button button-primary" href="<?= esc_url($links['delete']); ?>"><?= _x('Delete data', '(Admin)', 'gdpr-framework'); ?></a>
26
- <?php endif; ?>
27
-
28
- <?php else: ?>
29
- <p><?= _x('No data found!', '(Admin)', 'gdpr-framework'); ?></p>
30
- <?php endif; ?>
31
- </div>
32
- <br>
33
- <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
+ &#10004;
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 ADDED
@@ -0,0 +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>
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('&laquo; 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('&laquo; 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,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 &#9829; by %sCodelight%s.', '(Admin)', 'gdpr-framework'),
32
- '<a href="https://codelight.eu/" target="_blank">',
33
- '</a>'
34
- ); ?>
35
- &nbsp;
36
- |
37
- &nbsp;
38
- <?= sprintf(
39
- _x("Support our development efforts with a %s5-star rating%s.", '(Admin)', 'gdpr-framework'),
40
- '<a href="https://wordpress.org/plugins/gdpr-framework/#reviews" target="_blank">',
41
- '</a>'
42
- ); ?>
43
- </em>
44
- </p>
45
- <?php endif; ?>
46
- </div>
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 &#9829; by %sCodelight%s.', '(Admin)', 'gdpr-framework'),
32
+ '<a href="https://codelight.eu/" target="_blank">',
33
+ '</a>'
34
+ ); ?>
35
+ &nbsp;
36
+ |
37
+ &nbsp;
38
+ <?= sprintf(
39
+ _x("Support our development efforts with a %s5-star rating%s.", '(Admin)', 'gdpr-framework'),
40
+ '<a href="https://wordpress.org/plugins/gdpr-framework/#reviews" target="_blank">',
41
+ '</a>'
42
+ ); ?>
43
+ </em>
44
+ </p>
45
+ <?php endif; ?>
46
+ </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="&laquo; <?= __('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="&laquo; <?= __('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 &rsaquo; 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 &rsaquo; 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,37 +1,44 @@
1
- <h1>
2
- Configuration (1/2)
3
- </h1>
4
-
5
- <h2>Privacy Tools page</h2>
6
- <p>
7
- The first major requirement of GDPR is that your customers need to be in control of their data. They have the
8
- 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
9
- applies to visitors who do not have accounts on your website.
10
- </p>
11
- <p>
12
- 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.
13
- <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>
14
- </p>
15
- <hr>
16
-
17
- <h4>Set up the Privacy Tools page</h4>
18
- <fieldset>
19
- <label>
20
- <input type="radio" name="gdpr_create_tools_page" value="yes" class="js-gdpr-conditional" <?= !$privacyToolsPage ? 'checked': ''; ?>>
21
- Automatically create a new page for Privacy Tools
22
- </label>
23
-
24
- <label>
25
- <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
26
- </label>
27
- </fieldset>
28
-
29
- <p class="gdpr-select-privacy-tools-page hidden">
30
- <label for="gdpr_tools_page">Select the page for Privacy Tools</label>
31
- <?= $privacyToolsPageSelector; ?>
32
- <strong>Important:</strong> Make sure that the page contains the <strong>[gdpr_privacy_tools]</strong> shortcode.
33
- </p>
34
-
35
- <hr>
36
- <br>
37
- <input type="submit" class="button button-gdpr button-right" value="Save &raquo;"/>
 
 
 
 
 
 
 
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 &raquo;"/>
views/installer/steps/configuration-settings.php CHANGED
@@ -1,87 +1,87 @@
1
- <h1>
2
- Configuration (2/2)
3
- </h1>
4
- <h2>&#10004; 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('&mdash; Select &mdash;', '(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 &raquo;"/>
1
+ <h1>
2
+ Configuration (2/2)
3
+ </h1>
4
+ <h2>&#10004; 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('&mdash; Select &mdash;', '(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 &raquo;"/>
views/installer/steps/consent.php CHANGED
@@ -1,87 +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>&#10004; 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
- <h2>&#10004; Contact Form 7</h2>
49
- <p>
50
- We have detected that Contact Form 7 is enabled on your site. The GDPR Framework is
51
- compatible with Contact Form 7.
52
- </p>
53
- <p>
54
- Each of the forms requires either a <strong>disclaimer</strong> or a <strong>consent checkbox</strong>.
55
- We have created some tools to help you out!
56
- </p>
57
- <p>
58
- <a href="<?= gdpr('helpers')->docs('guide/making-your-forms-compliant/'); ?>" target="_blank">Read about making your Contact Form 7 forms GDPR compliant.</a>
59
- </p>
60
-
61
- <hr>
62
-
63
- <h2>Custom forms</h2>
64
- <p>
65
- <label for="gdpr_has_contact_forms">
66
- <input
67
- type="checkbox"
68
- name="gdpr_has_contact_forms"
69
- id="gdpr_has_contact_forms"
70
- class="js-gdpr-conditional"
71
- data-show=".gdpr-contact-custom"
72
- value="yes"
73
- >
74
- I have custom forms on my website (e.g. contact forms, newsletter signups, lottery signups)
75
- </label>
76
- </p>
77
- <p class="gdpr-contact-custom hidden">
78
- Each of the forms on your site requires either a <strong>disclaimer</strong> or a <strong>consent checkbox</strong>. <br>
79
- We cannot do this automatically - you need to do it yourself or request help from a developer. However, we have created some
80
- tools to help you out!
81
- <br>
82
- <a href="<?= gdpr('helpers')->docs('guide/making-your-forms-compliant/'); ?>" target="_blank">Read about integrating custom forms</a>
83
- </p>
84
-
85
- <hr>
86
- <br>
87
- <input type="submit" class="button button-gdpr button-right" value="Continue &raquo;" />
 
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>&#10004; 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>&#10004; 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 &raquo;" />
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,52 +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 ($hasWooCommerce): ?>
28
- <h2>WooCommerce compatibility</h2>
29
- <p>
30
- TBD
31
- </p>
32
- <hr>
33
- <?php endif; ?>
34
-
35
- <?php if ($hasEDD): ?>
36
- <h2>Easy Digital Downloads compatibility</h2>
37
- <p>
38
- TBD
39
- </p>
40
- <hr>
41
- <?php endif; ?>
42
-
43
- <h2>Custom development</h2>
44
- <p>
45
- If you've had a developer build any custom features for your site, you should also make sure that everything is properly GDPR-compliant.
46
- <br>
47
- <a href="<?= gdpr('helpers')->docs('developer-docs/'); ?>" target="_blank">Read about making custom-built sites and features GDPR-compliant.</a>
48
- </p>
49
-
50
- <hr>
51
- <br>
52
- <input type="submit" class="button button-gdpr button-right" value="Continue &raquo;" />
 
 
 
 
 
 
 
 
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 &raquo;" />
views/installer/steps/policy-contents.php CHANGED
@@ -1,25 +1,25 @@
1
- <h1>
2
- Privacy Policy (2/2)
3
- </h1>
4
-
5
- <h2>&#10004; 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 &raquo;" />
1
+ <h1>
2
+ Privacy Policy (2/2)
3
+ </h1>
4
+
5
+ <h2>&#10004; 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 &raquo;" />
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 &raquo;" />
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 &raquo;" />
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,16 +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.
4
- </p>
5
-
6
- <a class="button button-primary" href="<?= $installerUrl; ?>">
7
- <?= _x('Run the setup wizard', '(Admin)', 'gdpr-framework'); ?>
8
- </a>
9
-
10
- <a class="button button-secondary" href="<?= $autoInstallUrl; ?>">
11
- <?= _x('Auto-install pages', '(Admin)', 'gdpr-framework'); ?>
12
- </a>
13
-
14
- <a class="button button-secondary" href="<?= $skipUrl; ?>">
15
- <?= _x('Skip and install manually', '(Admin)', 'gdpr-framework'); ?>
16
- </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" name="gdpr_terms" id="gdpr_terms" value="1" required/>
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
- &#10004;
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
+ &#10004;
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
- &#10004;
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
+ &#10004;
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" 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 reserve the right to anonymise Personal Data gathered and to use any such data. We will use data outside the scope of this Policy only when it is anonymised. We save your billing information and other information gathered about you for as long as needed for accounting purposes or other obligations deriving from law, but not longer than <strong>[TODO]</strong>
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 reserve the right to anonymise Personal Data gathered and to use any such data. We will use data outside the scope of this Policy only when it is anonymised. We save your billing information and other information gathered about you for as long as needed for accounting purposes or other obligations deriving from law, but not longer than <strong>[TODO]</strong>
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>
views/privacy-tools/form-consent.php CHANGED
@@ -1,39 +1,39 @@
1
- <?php if (count($consentData) or $consentInfo): ?>
2
- <h2><?= __('Consent', 'gdpr-framework'); ?></h2>
3
-
4
- <?php if (count($consentData)): ?>
5
- <p>
6
- <?= __('Here you can withdraw any consents you have given.', 'gdpr-framework'); ?>
7
- </p>
8
- <table class="gdpr-consent">
9
- <th colspan="4"><?= __('Consent types', 'gdpr-framework'); ?></th>
10
- <?php foreach ($consentData as $item): ?>
11
- <tr>
12
- <td>
13
- &#10004;
14
- </td>
15
- <td>
16
- <?= $item['title']; ?>
17
- </td>
18
- <td>
19
- <em><?= $item['description']; ?></em>
20
- </td>
21
- <td>
22
- <?php if ('privacy-policy' !== $item['slug']): ?>
23
- <a href="<?= esc_url($item['withdraw_url']); ?>" class="button button-primary">
24
- <?= __('Withdraw', 'gdpr-framework'); ?>
25
- </a>
26
- <?php endif; ?>
27
- </td>
28
- </tr>
29
- <?php endforeach; ?>
30
- </table>
31
- <?php endif; ?>
32
-
33
- <?php if ($consentInfo): ?>
34
- <div class="gdpr-consent-disclaimer">
35
- <?= $consentInfo; ?>
36
- </div>
37
- <?php endif; ?>
38
- <hr>
39
- <?php endif; ?>
1
+ <?php if (count($consentData) or $consentInfo): ?>
2
+ <h2><?= __('Consent', 'gdpr-framework'); ?></h2>
3
+
4
+ <?php if (count($consentData)): ?>
5
+ <p>
6
+ <?= __('Here you can withdraw any consents you have given.', 'gdpr-framework'); ?>
7
+ </p>
8
+ <table class="gdpr-consent">
9
+ <th colspan="4"><?= __('Consent types', 'gdpr-framework'); ?></th>
10
+ <?php foreach ($consentData as $item): ?>
11
+ <tr>
12
+ <td>
13
+ &#10004;
14
+ </td>
15
+ <td>
16
+ <?= $item['title']; ?>
17
+ </td>
18
+ <td>
19
+ <em><?= $item['description']; ?></em>
20
+ </td>
21
+ <td>
22
+ <?php if ('privacy-policy' !== $item['slug']): ?>
23
+ <a href="<?= esc_url($item['withdraw_url']); ?>" class="button button-primary">
24
+ <?= __('Withdraw', 'gdpr-framework'); ?>
25
+ </a>
26
+ <?php endif; ?>
27
+ </td>
28
+ </tr>
29
+ <?php endforeach; ?>
30
+ </table>
31
+ <?php endif; ?>
32
+
33
+ <?php if ($consentInfo): ?>
34
+ <div class="gdpr-consent-disclaimer">
35
+ <?= $consentInfo; ?>
36
+ </div>
37
+ <?php endif; ?>
38
+ <hr>
39
+ <?php endif; ?>
views/privacy-tools/form-delete.php CHANGED
@@ -1,18 +1,18 @@
1
- <h2><?= __('Delete my user and data', 'gdpr-framework') ?></h2>
2
-
3
- <div class="gdpr-delete-button">
4
- <form method="GET">
5
- <input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>"/>
6
- <input type="hidden" name="gdpr_action" value="<?= $action; ?>"/>
7
- <input type="submit" class="button button-primary" value="<?= __('Delete my data', 'gdpr-framework') ?>"/>
8
- </form>
9
- </div>
10
-
11
- <br/>
12
- <p class="description">
13
- <?= __('Delete all data we have gathered about you.', 'gdpr-framework') ?> <br/>
14
- <?= __('If you have a user account on our site, it will also be deleted.', 'gdpr-framework') ?> <br/>
15
- <?= __('Be careful - this action is permanent and CANNOT be undone.', 'gdpr-framework') ?>
16
- </p>
17
-
18
- <hr>
1
+ <h2><?= __('Delete my user and data', 'gdpr-framework') ?></h2>
2
+
3
+ <div class="gdpr-delete-button">
4
+ <form method="GET">
5
+ <input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>"/>
6
+ <input type="hidden" name="gdpr_action" value="<?= $action; ?>"/>
7
+ <input type="submit" class="button button-primary" value="<?= __('Delete my data', 'gdpr-framework') ?>"/>
8
+ </form>
9
+ </div>
10
+
11
+ <br/>
12
+ <p class="description">
13
+ <?= __('Delete all data we have gathered about you.', 'gdpr-framework') ?> <br/>
14
+ <?= __('If you have a user account on our site, it will also be deleted.', 'gdpr-framework') ?> <br/>
15
+ <?= __('Be careful - this action is permanent and CANNOT be undone.', 'gdpr-framework') ?>
16
+ </p>
17
+
18
+ <hr>
views/privacy-tools/form-export.php CHANGED
@@ -1,26 +1,26 @@
1
- <h2><?= __('Download your data', 'gdpr-framework') ?></h2>
2
-
3
- <p class="description">
4
- <?= __('You can download all your data formatted as a table for viewing.', 'gdpr-framework') ?> <br>
5
- <?= __('Alternatively, you can export it in machine-readable JSON format.', 'gdpr-framework') ?>
6
- </p>
7
-
8
- <div class="gdpr-download-button">
9
- <form method="POST">
10
- <input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
11
- <input type="hidden" name="gdpr_action" value="export" />
12
- <input type="hidden" name="gdpr_format" value="html" />
13
- <input type="submit" class="button button-primary" value="<?= __('Download as table', 'gdpr-framework') ?>" />
14
- </form>
15
- </div>
16
-
17
- <div class="gdpr-export-button">
18
- <form method="POST">
19
- <input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
20
- <input type="hidden" name="gdpr_action" value="export" />
21
- <input type="hidden" name="gdpr_format" value="json" />
22
- <input type="submit" class="button button-primary" value="<?= __('Export as JSON', 'gdpr-framework') ?>" />
23
- </form>
24
- </div>
25
-
26
- <hr>
1
+ <h2><?= __('Download your data', 'gdpr-framework') ?></h2>
2
+
3
+ <p class="description">
4
+ <?= __('You can download all your data formatted as a table for viewing.', 'gdpr-framework') ?> <br>
5
+ <?= __('Alternatively, you can export it in machine-readable JSON format.', 'gdpr-framework') ?>
6
+ </p>
7
+
8
+ <div class="gdpr-download-button">
9
+ <form method="POST">
10
+ <input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
11
+ <input type="hidden" name="gdpr_action" value="export" />
12
+ <input type="hidden" name="gdpr_format" value="html" />
13
+ <input type="submit" class="button button-primary" value="<?= __('Download as table', 'gdpr-framework') ?>" />
14
+ </form>
15
+ </div>
16
+
17
+ <div class="gdpr-export-button">
18
+ <form method="POST">
19
+ <input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
20
+ <input type="hidden" name="gdpr_action" value="export" />
21
+ <input type="hidden" name="gdpr_format" value="json" />
22
+ <input type="submit" class="button button-primary" value="<?= __('Export as JSON', 'gdpr-framework') ?>" />
23
+ </form>
24
+ </div>
25
+
26
+ <hr>
views/privacy-tools/form-identify.php CHANGED
@@ -1,30 +1,30 @@
1
- <?php do_action('gdpr/privacy-tools-page/identify/before'); ?>
2
-
3
- <?php if (isset($_REQUEST['gdpr_notice']) && in_array($_REQUEST['gdpr_notice'], ['data_deleted', 'request_sent'])): ?>
4
- <p>
5
- <br>
6
-
7
- <a href="<?= get_home_url() ?>">
8
- <?= __('Back to front page', 'gdpr-framework'); ?>
9
- </a>
10
- </p>
11
- <?php else: ?>
12
-
13
- <h3>
14
- <?=
15
- __('Please identify yourself via e-mail', 'gdpr-framework');
16
- ?>
17
- </h3>
18
- <form>
19
- <label for="gdpr_email"><?= __('Enter your email address', 'gdpr-framework') ?></label>
20
- <input type="hidden" name="gdpr_action" value="identify" />
21
- <input type="hidden" name="gdpr_nonce" value="<?= $nonce ?>" />
22
- <input type="email" id="gdpr_email" name="email" placeholder="<?= __('Enter your email address', 'gdpr-framework') ?>" />
23
- <?php do_action('gdpr/privacy-tools-page/identify'); ?>
24
-
25
- <input type="submit" value="<?= __('Send email', 'gdpr-framework') ?>" />
26
- </form>
27
-
28
- <?php endif; ?>
29
-
30
- <?php do_action('gdpr/privacy-tools-page/identify/after'); ?>
1
+ <?php do_action('gdpr/privacy-tools-page/identify/before'); ?>
2
+
3
+ <?php if (isset($_REQUEST['gdpr_notice']) && in_array($_REQUEST['gdpr_notice'], ['data_deleted', 'request_sent'])): ?>
4
+ <p>
5
+ <br>
6
+
7
+ <a href="<?= get_home_url() ?>">
8
+ <?= __('Back to front page', 'gdpr-framework'); ?>
9
+ </a>
10
+ </p>
11
+ <?php else: ?>
12
+
13
+ <h3>
14
+ <?=
15
+ __('Please identify yourself via e-mail', 'gdpr-framework');
16
+ ?>
17
+ </h3>
18
+ <form>
19
+ <label for="gdpr_email"><?= __('Enter your email address', 'gdpr-framework') ?></label>
20
+ <input type="hidden" name="gdpr_action" value="identify" />
21
+ <input type="hidden" name="gdpr_nonce" value="<?= $nonce ?>" />
22
+ <input type="email" id="gdpr_email" name="email" placeholder="<?= __('Enter your email address', 'gdpr-framework') ?>" />
23
+ <?php do_action('gdpr/privacy-tools-page/identify'); ?>
24
+
25
+ <input type="submit" value="<?= __('Send email', 'gdpr-framework') ?>" />
26
+ </form>
27
+
28
+ <?php endif; ?>
29
+
30
+ <?php do_action('gdpr/privacy-tools-page/identify/after'); ?>
views/privacy-tools/notice-admin-role.php CHANGED
@@ -1,6 +1,6 @@
1
- <h2><?= __('Delete my user and data', 'gdpr-framework') ?></h2>
2
- <p class="description">
3
- <em>
4
- <?= _x('Data deletion is disabled for administrative accounts.', '(Admin)', 'gdpr-framework'); ?>
5
- </em>
6
- </p>
1
+ <h2><?= __('Delete my user and data', 'gdpr-framework') ?></h2>
2
+ <p class="description">
3
+ <em>
4
+ <?= _x('Data deletion is disabled for administrative accounts.', '(Admin)', 'gdpr-framework'); ?>
5
+ </em>
6
+ </p>
views/privacy-tools/notices.php CHANGED
@@ -1,25 +1,25 @@
1
- <div class="gdpr-notice">
2
- <?php if ('email_sent' === $_REQUEST['gdpr_notice']): ?>
3
- <?= __('We will send you an email with the link to access your data. Please check your spam folder as well!', 'gdpr-framework'); ?>
4
- <?php endif; ?>
5
-
6
- <?php if ('invalid_email' === $_REQUEST['gdpr_notice']): ?>
7
- <?= __('The email you entered does not appear to be a valid email.', 'gdpr-framework'); ?>
8
- <?php endif; ?>
9
-
10
- <?php if ('invalid_key' === $_REQUEST['gdpr_notice']): ?>
11
- <?= __('Sorry - the link seems to have expired. Please try again!', 'gdpr-framework'); ?>
12
- <?php endif; ?>
13
-
14
- <?php if ('consent_withdrawn' === $_REQUEST['gdpr_notice']): ?>
15
- <?= __('Consent withdrawn.', 'gdpr-framework'); ?>
16
- <?php endif; ?>
17
-
18
- <?php if ('request_sent' === $_REQUEST['gdpr_notice']): ?>
19
- <?= __('We have received your request and will reply within 30 days.', 'gdpr-framework'); ?>
20
- <?php endif; ?>
21
-
22
- <?php if ('data_deleted' === $_REQUEST['gdpr_notice']): ?>
23
- <?= __('Your personal data has been removed!', 'gdpr-framework'); ?>
24
- <?php endif; ?>
25
- </div>
1
+ <div class="gdpr-notice">
2
+ <?php if ('email_sent' === $_REQUEST['gdpr_notice']): ?>
3
+ <?= __('We will send you an email with the link to access your data. Please check your spam folder as well!', 'gdpr-framework'); ?>
4
+ <?php endif; ?>
5
+
6
+ <?php if ('invalid_email' === $_REQUEST['gdpr_notice']): ?>
7
+ <?= __('The email you entered does not appear to be a valid email.', 'gdpr-framework'); ?>
8
+ <?php endif; ?>
9
+
10
+ <?php if ('invalid_key' === $_REQUEST['gdpr_notice']): ?>
11
+ <?= __('Sorry - the link seems to have expired. Please try again!', 'gdpr-framework'); ?>
12
+ <?php endif; ?>
13
+
14
+ <?php if ('consent_withdrawn' === $_REQUEST['gdpr_notice']): ?>
15
+ <?= __('Consent withdrawn.', 'gdpr-framework'); ?>
16
+ <?php endif; ?>
17
+
18
+ <?php if ('request_sent' === $_REQUEST['gdpr_notice']): ?>
19
+ <?= __('We have received your request and will reply within 30 days.', 'gdpr-framework'); ?>
20
+ <?php endif; ?>
21
+
22
+ <?php if ('data_deleted' === $_REQUEST['gdpr_notice']): ?>
23
+ <?= __('Your personal data has been removed!', 'gdpr-framework'); ?>
24
+ <?php endif; ?>
25
+ </div>
views/privacy-tools/privacy-tools.php CHANGED
@@ -1,13 +1,13 @@
1
- <div class="gdpr-framework-privacy-tools">
2
- <?php do_action('gdpr/frontend/privacy-tools-page/content/before', $dataSubject); ?>
3
-
4
- <p>
5
- <?= __('You are identified as', 'gdpr-framework'); ?> <strong><?= esc_html($email); ?></strong>
6
- </p>
7
-
8
- <hr>
9
-
10
- <?php do_action('gdpr/frontend/privacy-tools-page/content', $dataSubject); ?>
11
-
12
- <?php do_action('gdpr/frontend/privacy-tools-page/content/after', $dataSubject); ?>
13
- </div>
1
+ <div class="gdpr-framework-privacy-tools">
2
+ <?php do_action('gdpr/frontend/privacy-tools-page/content/before', $dataSubject); ?>
3
+
4
+ <p>
5
+ <?= __('You are identified as', 'gdpr-framework'); ?> <strong><?= esc_html($email); ?></strong>
6
+ </p>
7
+
8
+ <hr>
9
+
10
+ <?php do_action('gdpr/frontend/privacy-tools-page/content', $dataSubject); ?>
11
+
12
+ <?php do_action('gdpr/frontend/privacy-tools-page/content/after', $dataSubject); ?>
13
+ </div>
views/themes/storefront/footer.php CHANGED
@@ -1,8 +1,8 @@
1
- &nbsp;|&nbsp;
2
- <a href="<?= esc_url($privacyPolicyUrl); ?>" style="color: #6d6d6d">
3
- <?= __('Privacy Policy', 'gdpr-framework'); ?>
4
- </a>
5
- &nbsp;|&nbsp;
6
- <a href="<?= esc_url($privacyToolsPageUrl); ?>" style="color: #6d6d6d">
7
- <?= __('Privacy Tools', 'gdpr-framework'); ?>
8
- </a>
1
+ &nbsp;|&nbsp;
2
+ <a href="<?= esc_url($privacyPolicyUrl); ?>" style="color: #6d6d6d">
3
+ <?= __('Privacy Policy', 'gdpr-framework'); ?>
4
+ </a>
5
+ &nbsp;|&nbsp;
6
+ <a href="<?= esc_url($privacyToolsPageUrl); ?>" style="color: #6d6d6d">
7
+ <?= __('Privacy Tools', 'gdpr-framework'); ?>
8
+ </a>
views/themes/twentyseventeen/footer.php CHANGED
@@ -1,9 +1,9 @@
1
- <div>
2
- <a href="<?= esc_url($privacyPolicyUrl); ?>">
3
- <?= __('Privacy Policy', 'gdpr-framework'); ?>
4
- </a>
5
- &nbsp;|&nbsp;
6
- <a href="<?= esc_url($privacyToolsPageUrl); ?>">
7
- <?= __('Privacy Tools', 'gdpr-framework'); ?>
8
- </a>
9
- </div>
1
+ <div>
2
+ <a href="<?= esc_url($privacyPolicyUrl); ?>">
3
+ <?= __('Privacy Policy', 'gdpr-framework'); ?>
4
+ </a>
5
+ &nbsp;|&nbsp;
6
+ <a href="<?= esc_url($privacyToolsPageUrl); ?>">
7
+ <?= __('Privacy Tools', 'gdpr-framework'); ?>
8
+ </a>
9
+ </div>
views/themes/twentysixteen/footer.php CHANGED
@@ -1,12 +1,12 @@
1
- <div style="margin-bottom: 10px">
2
- <span class="site-title">
3
- <a href="<?= esc_url($privacyPolicyUrl); ?>">
4
- <?= __('Privacy Policy', 'gdpr-framework'); ?>
5
- </a>
6
- </span>
7
- <span>
8
- <a href="<?= esc_url($privacyToolsPageUrl); ?>">
9
- <?= __('Privacy Tools', 'gdpr-framework'); ?>
10
- </a>
11
- </span>
12
- </div>
1
+ <div style="margin-bottom: 10px">
2
+ <span class="site-title">
3
+ <a href="<?= esc_url($privacyPolicyUrl); ?>">
4
+ <?= __('Privacy Policy', 'gdpr-framework'); ?>
5
+ </a>
6
+ </span>
7
+ <span>
8
+ <a href="<?= esc_url($privacyToolsPageUrl); ?>">
9
+ <?= __('Privacy Tools', 'gdpr-framework'); ?>
10
+ </a>
11
+ </span>
12
+ </div>