The GDPR Framework By Data443 - Version 1.0.11

Version Description

Numerous backlog bug fixes including: * comments checkbox reported to disappear with WPML active * Cant save on Consent tab * Treat upper- and lowercase chars in visitor email addresses equally * Captcha on privacy tools page * Privacy Tools Delete text change * Add locations outside of US and EU * Ensure + symbol works in email addresses * Privacy Policy: replace "[TODO]" with something that's not a shortcode format * confirm "delete my data" when button is pushed * can't leave any comments with GDPR activated * add Polylang compatibility * Validate functionality with most current WP version

Download this release

Release Info

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

Code changes from version 1.0.10 to 1.0.11

Files changed (121) hide show
  1. bootstrap.php +61 -53
  2. gdpr-framework.php +94 -94
  3. languages/gdpr-framework-bg_BG.po +1334 -1334
  4. languages/gdpr-framework-de_DE.po +1333 -1333
  5. languages/gdpr-framework-el.po +1351 -1351
  6. languages/gdpr-framework-et.po +1345 -1345
  7. languages/gdpr-framework.pot +1328 -1328
  8. license.txt +198 -198
  9. readme.txt +168 -161
  10. src/Admin/AdminError.php +16 -16
  11. src/Admin/AdminHelper.php +87 -87
  12. src/Admin/AdminNotice.php +41 -41
  13. src/Admin/AdminTab.php +157 -157
  14. src/Admin/AdminTabGeneral.php +277 -277
  15. src/Admin/AdminTabInterface.php +39 -39
  16. src/Admin/Modal.php +41 -41
  17. src/Admin/WordpressAdmin.php +153 -153
  18. src/Admin/WordpressAdminPage.php +147 -147
  19. src/Components/Consent/AdminTabConsent.php +181 -181
  20. src/Components/Consent/ConsentAdmin.php +19 -19
  21. src/Components/Consent/ConsentManager.php +317 -317
  22. src/Components/Consent/UserConsentModel.php +291 -291
  23. src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php +458 -438
  24. src/Components/PrivacyPolicy/PolicyGenerator.php +44 -44
  25. src/Components/PrivacyPolicy/PrivacyPolicy.php +92 -92
  26. src/Components/PrivacyToolsPage/PrivacyToolsPage.php +14 -14
  27. src/Components/PrivacyToolsPage/PrivacyToolsPageController.php +280 -280
  28. src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php +49 -49
  29. src/Components/Support/AdminTabSupport.php +34 -34
  30. src/Components/Support/Support.php +18 -18
  31. src/Components/Themes/Themes.php +98 -98
  32. src/Components/WordpressComments/WordpressComments.php +201 -194
  33. src/Components/WordpressUser/Controllers/DashboardDataPageController.php +197 -197
  34. src/Components/WordpressUser/Controllers/DashboardProfilePageController.php +123 -123
  35. src/Components/WordpressUser/DataManager.php +151 -151
  36. src/Components/WordpressUser/RegistrationForm.php +50 -50
  37. src/Components/WordpressUser/WordpressUser.php +111 -111
  38. src/Config.php +7 -7
  39. src/Container.php +7 -7
  40. src/DataSubject/AdminTabDataSubject.php +128 -128
  41. src/DataSubject/DataExporter.php +138 -138
  42. src/DataSubject/DataRepository.php +191 -191
  43. src/DataSubject/DataSubject.php +174 -174
  44. src/DataSubject/DataSubjectAdmin.php +17 -17
  45. src/DataSubject/DataSubjectAuthenticator.php +130 -130
  46. src/DataSubject/DataSubjectIdentificator.php +184 -184
  47. src/DataSubject/DataSubjectManager.php +79 -79
  48. src/Database/WordpressDatabase.php +265 -265
  49. src/Helpers.php +388 -170
  50. src/Installer/AdminInstallerNotice.php +18 -18
  51. src/Installer/Installer.php +305 -305
  52. src/Installer/InstallerRouter.php +183 -183
  53. src/Installer/InstallerStep.php +200 -200
  54. src/Installer/InstallerStepInterface.php +21 -21
  55. src/Installer/InstallerWizard.php +48 -48
  56. src/Installer/Steps/ConfigurationPages.php +61 -61
  57. src/Installer/Steps/ConfigurationSettings.php +71 -71
  58. src/Installer/Steps/Consent.php +31 -31
  59. src/Installer/Steps/Disclaimer.php +23 -23
  60. src/Installer/Steps/Finish.php +26 -26
  61. src/Installer/Steps/Integrations.php +49 -49
  62. src/Installer/Steps/PolicyContents.php +31 -31
  63. src/Installer/Steps/PolicySettings.php +215 -215
  64. src/Installer/Steps/Welcome.php +28 -28
  65. src/Modules/ContactForm7/ContactForm7.php +108 -108
  66. src/Modules/ContactForm7/Flamingo.php +150 -150
  67. src/Modules/WPML/WPML.php +153 -153
  68. src/Options/Options.php +65 -65
  69. src/Options/OptionsBase.php +70 -70
  70. src/Router.php +166 -166
  71. src/Setup.php +102 -102
  72. src/SetupAdmin.php +62 -62
  73. src/View.php +64 -64
  74. views/admin/consent.php +108 -105
  75. views/admin/data-subjects/search-form.php +18 -18
  76. views/admin/data-subjects/search-results.php +59 -59
  77. views/admin/general/delete-action-email.php +7 -7
  78. views/admin/general/delete-action-reassign.php +11 -11
  79. views/admin/general/delete-action.php +2 -2
  80. views/admin/general/description-data-page.php +3 -3
  81. views/admin/general/description-delete-action.php +3 -3
  82. views/admin/general/description-export-action.php +3 -3
  83. views/admin/general/description-terms-page.php +3 -3
  84. views/admin/general/enable.php +13 -13
  85. views/admin/general/export-action-email.php +7 -7
  86. views/admin/general/export-action.php +2 -2
  87. views/admin/general/stylesheet.php +10 -10
  88. views/admin/general/theme-compatibility.php +10 -10
  89. views/admin/modals/footer.php +6 -6
  90. views/admin/modals/header.php +5 -5
  91. views/admin/modals/test.php +8 -8
  92. views/admin/notice.php +2 -2
  93. views/admin/notices/disclaimer.php +16 -16
  94. views/admin/notices/error.php +3 -3
  95. views/admin/notices/footer-step.php +2 -2
  96. views/admin/notices/footer.php +1 -1
  97. views/admin/notices/header-step.php +4 -4
  98. views/admin/notices/header.php +4 -4
  99. views/admin/notices/help.php +7 -7
  100. views/admin/notices/helper-autoinstall.php +10 -10
  101. views/admin/notices/helper-policy.php +9 -9
  102. views/admin/notices/helper-settings.php +8 -8
  103. views/admin/notices/helper-tools.php +10 -10
  104. views/admin/privacy-policy/company-location.php +2 -2
  105. views/admin/privacy-policy/description-policy-page.php +3 -3
  106. views/admin/privacy-policy/dpa.php +2 -2
  107. views/admin/privacy-policy/generated.php +21 -21
  108. views/admin/privacy-policy/has-dpo.php +11 -11
  109. views/admin/privacy-policy/header.php +3 -3
  110. views/admin/settings-page.php +48 -48
  111. views/admin/support/contents.php +62 -62
  112. views/admin/wizard-buttons.php +5 -5
  113. views/email/action-export.php +9 -9
  114. views/email/action-forget.php +13 -13
  115. views/email/identify-data-subject.php +11 -11
  116. views/email/no-data.php +6 -6
  117. views/email/request-export.php +14 -14
  118. views/email/request-forget.php +14 -14
  119. views/global/country-options.php +23 -23
  120. views/global/delete-action.php +20 -20
  121. views/global/export-action.php +0 -4
bootstrap.php CHANGED
@@ -1,53 +1,61 @@
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
+ $locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
50
+
51
+ $locale = apply_filters( 'plugin_locale', $locale, 'gdpr-framework' );
52
+
53
+ unload_textdomain( 'gdpr-framework' );
54
+
55
+ load_textdomain( 'gdpr-framework', get_stylesheet_directory().'/gdpr-framework/languages/'.'gdpr-framework'.'-'.$locale.'.mo' );
56
+
57
+ new \Codelight\GDPR\Updater\Updater();
58
+
59
+ new \Codelight\GDPR\Setup();
60
+
61
+ }, 0);
gdpr-framework.php CHANGED
@@ -1,94 +1,94 @@
1
- <?php
2
-
3
- /**
4
- * Plugin Name: The GDPR Framework
5
- * Plugin URI: https://codelight.eu/wordpress-gdpr-framework/
6
- * Description: Tools to help make your website GDPR-compliant. Fully documented, extendable and developer-friendly.
7
- * Version: 1.0.10
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.10');
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');
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.11
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.11');
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.po CHANGED
@@ -1,1334 +1,1334 @@
1
- # SOME DESCRIPTIVE TITLE.
2
- # Copyright (C) YEAR Codelight
3
- # This file is distributed under the same license as the The GDPR Framework package.
4
- # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
- #
6
- msgid ""
7
- msgstr ""
8
- "Project-Id-Version: The GDPR Framework 1.0\n"
9
- "Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
10
- "POT-Creation-Date: 2018-04-16 10:50+0000\n"
11
- "PO-Revision-Date: 2018-05-05 18:20+0300\n"
12
- "Language-Team: \n"
13
- "MIME-Version: 1.0\n"
14
- "Content-Type: text/plain; charset=UTF-8\n"
15
- "Content-Transfer-Encoding: 8bit\n"
16
- "X-Generator: Poedit 2.0.7\n"
17
- "Last-Translator: Zankov Group LTD. <office@zankov-group.com>\n"
18
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
- "Language: bg_BG\n"
20
-
21
- #: gdpr-framework.php:26
22
- msgctxt "(Admin)"
23
- msgid "WordPress GDPR &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 "Вие сте идентифицирани като"
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.po CHANGED
@@ -1,1333 +1,1333 @@
1
- # SOME DESCRIPTIVE TITLE.
2
- # Copyright (C) YEAR Codelight
3
- # This file is distributed under the same license as the The GDPR Framework package.
4
- # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
- #
6
- msgid ""
7
- msgstr ""
8
- "Project-Id-Version: The GDPR Framework 1.0\n"
9
- "Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
10
- "POT-Creation-Date: 2018-04-16 10:50+0000\n"
11
- "PO-Revision-Date: 2018-05-18 07:39+0200\n"
12
- "Last-Translator: \n"
13
- "MIME-Version: 1.0\n"
14
- "Content-Type: text/plain; charset=UTF-8\n"
15
- "Content-Transfer-Encoding: 8bit\n"
16
- "X-Generator: Poedit 2.0.5\n"
17
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
- "Language: de_DE\n"
19
- "Language-Team: Michael Hartl, michael@digitalfellow.eu\n"
20
-
21
- #: gdpr-framework.php:26
22
- msgctxt "(Admin)"
23
- msgid "WordPress GDPR &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"
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-el.po CHANGED
@@ -1,1351 +1,1351 @@
1
- # SOME DESCRIPTIVE TITLE.
2
- # Copyright (C) YEAR Codelight
3
- # This file is distributed under the same license as the The GDPR Framework package.
4
- # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
- #
6
- msgid ""
7
- msgstr ""
8
- "Project-Id-Version: The GDPR Framework 1.0\n"
9
- "Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
10
- "POT-Creation-Date: 2018-04-16 10:50+0000\n"
11
- "PO-Revision-Date: 2018-05-18 21:23+0300\n"
12
- "Last-Translator: john maniatopoulos <webace.wp@gmail.com>\n"
13
- "Language-Team: Greek\n"
14
- "Language: el\n"
15
- "MIME-Version: 1.0\n"
16
- "Content-Type: text/plain; charset=UTF-8\n"
17
- "Content-Transfer-Encoding: 8bit\n"
18
- "Plural-Forms: nplurals=2; plural=n != 1;\n"
19
- "X-Generator: Poedit 1.8.6\n"
20
-
21
- #: gdpr-framework.php:26
22
- msgctxt "(Admin)"
23
- msgid "WordPress GDPR &rsaquo; Error"
24
- msgstr ""
25
-
26
- #: gdpr-framework.php:35
27
- msgctxt "(Admin)"
28
- msgid "Invalid PHP version"
29
- msgstr "Μη έγκυρη έκδοση PHP"
30
-
31
- #: gdpr-framework.php:35
32
- msgctxt "(Admin)"
33
- msgid "You must be using PHP 5.6.33 or greater."
34
- msgstr "Πρέπει να χρησιμοποιείτε την PHP 5.6.33 ή μεγαλύτερη."
35
-
36
- #: gdpr-framework.php:42
37
- msgctxt "(Admin)"
38
- msgid "Invalid WordPress version"
39
- msgstr "Μη έγκυρη έκδοση WordPress"
40
-
41
- #: gdpr-framework.php:42
42
- msgctxt "(Admin)"
43
- msgid "You must be using WordPress 4.3.0 or greater."
44
- msgstr "Πρέπει να χρησιμοποιείτε WordPress 4.3.0 ή μεγαλύτερη."
45
-
46
- #: gdpr-framework.php:52
47
- msgctxt "(Admin)"
48
- msgid ""
49
- "You appear to be running a development version of GDPR. You must run "
50
- "<code>composer install</code> from the plugin directory."
51
- msgstr ""
52
- "Σας φαίνεται να λειτουργεί μια έκδοση ανάπτυξης του GDPR πρέπει να "
53
- "εκτελέσετε το <code>composer install</code> από τον κατάλογο του plugin."
54
-
55
- #: gdpr-framework.php:53
56
- msgctxt "(Admin)"
57
- msgid "Autoloader not found."
58
- msgstr "Autoloader δεν βρέθηκε."
59
-
60
- #: gdpr-framework.php:115
61
- msgctxt "(Admin)"
62
- msgid "Anonymous"
63
- msgstr "Ανώνυμος"
64
-
65
- #: src/Admin/AdminTab.php:115
66
- msgctxt "(Admin)"
67
- msgid "Save"
68
- msgstr "Αποθήκευση"
69
-
70
- #: src/Admin/AdminTab.php:151
71
- msgctxt "(Admin)"
72
- msgid "Policy generated!"
73
- msgstr "Πολιτική που δημιουργήθηκε!"
74
-
75
- #: src/Admin/AdminTabGeneral.php:11
76
- msgctxt "(Admin)"
77
- msgid "General"
78
- msgstr "Γενικά"
79
-
80
- #: src/Admin/AdminTabGeneral.php:38
81
- msgctxt "(Admin)"
82
- msgid "General Settings"
83
- msgstr "Γενικές Ρυθμίσεις"
84
-
85
- #: src/Admin/AdminTabGeneral.php:43
86
- msgctxt "(Admin)"
87
- msgid "Enable Privacy Tools"
88
- msgstr "Ενεργοποίηση εργαλείων προστασίας προσωπικών δεδομένων"
89
-
90
- #: src/Admin/AdminTabGeneral.php:53
91
- msgctxt "(Admin)"
92
- msgid "Pages"
93
- msgstr "Σελίδες"
94
-
95
- #: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
96
- msgctxt "(Admin)"
97
- msgid "Privacy Tools Page"
98
- msgstr "Εργαλεία σελίδας απορρήτου"
99
-
100
- #: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
101
- msgctxt "(Admin)"
102
- msgid "Privacy Policy Page"
103
- msgstr "Σελίδα Πολιτικής Απορρήτου"
104
-
105
- #: src/Admin/AdminTabGeneral.php:72
106
- msgctxt "(Admin)"
107
- msgid "Terms & Conditions Page"
108
- msgstr "Σελίδα Όρων & Προϋποθέσεων"
109
-
110
- #: src/Admin/AdminTabGeneral.php:82
111
- msgctxt "(Admin)"
112
- msgid "View & Export Data"
113
- msgstr "Προβολή & εξαγωγή δεδομένων"
114
-
115
- #: src/Admin/AdminTabGeneral.php:87
116
- msgctxt "(Admin)"
117
- msgid "Export action"
118
- msgstr "Εξαγωγή"
119
-
120
- #: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
121
- msgctxt "(Admin)"
122
- msgid "Email to notify"
123
- msgstr "Διεύθυνση ηλεκτρονικού ταχυδρομείου για κοινοποίηση"
124
-
125
- #: src/Admin/AdminTabGeneral.php:105
126
- msgctxt "(Admin)"
127
- msgid "Delete & Anonymize Data"
128
- msgstr "Διαγραφή του & ανωνυμία δεδομένων"
129
-
130
- #: src/Admin/AdminTabGeneral.php:110
131
- msgctxt "(Admin)"
132
- msgid "Delete action"
133
- msgstr "Διαγραφή ενέργειας"
134
-
135
- #: src/Admin/AdminTabGeneral.php:117
136
- msgctxt "(Admin)"
137
- msgid "Delete or reassign content?"
138
- msgstr "Διαγράψετε ή να εκχωρήσετε εκ νέου περιεχομένου;"
139
-
140
- #: src/Admin/AdminTabGeneral.php:125
141
- msgctxt "(Admin)"
142
- msgid "Reassign content to"
143
- msgstr "Επανατοποθετήστε περιεχόμενο σε"
144
-
145
- #: src/Admin/AdminTabGeneral.php:145
146
- msgctxt "(Admin)"
147
- msgid "Styling"
148
- msgstr "Μορφοποίηση"
149
-
150
- #: src/Admin/AdminTabGeneral.php:150
151
- msgctxt "(Admin)"
152
- msgid "Enable basic styling on Privacy Tools page"
153
- msgstr "Ενεργοποίηση βασικού στυλ στη σελίδα εργαλεία απορρήτου"
154
-
155
- #: src/Admin/AdminTabGeneral.php:162
156
- msgctxt "(Admin)"
157
- msgid "Compatibility"
158
- msgstr "Συμβατότητα"
159
-
160
- #: src/Admin/AdminTabGeneral.php:167
161
- msgctxt "(Admin)"
162
- msgid "Enable automatic theme compatibility"
163
- msgstr "Ενεργοποίηση αυτόματης συμβατότητας θέματος"
164
-
165
- #: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
166
- #: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
167
- #: views/installer/steps/configuration-settings.php:62
168
- msgctxt "(Admin)"
169
- msgid "&mdash; Select &mdash;"
170
- msgstr ""
171
-
172
- #: src/Admin/WordpressAdmin.php:65
173
- msgctxt "(Admin)"
174
- msgid "Privacy & GDPR Settings"
175
- msgstr "Απορρήτου & GDPR ρυθμίσεις"
176
-
177
- #: src/Admin/WordpressAdmin.php:66
178
- msgctxt "(Admin)"
179
- msgid "Privacy"
180
- msgstr "Προστασία Απορρήτου"
181
-
182
- #: src/Components/Consent/AdminTabConsent.php:30
183
- #: src/Components/Consent/AdminTabConsent.php:49
184
- msgctxt "(Admin)"
185
- msgid "Consent"
186
- msgstr "Συγκατάθεση"
187
-
188
- #: src/Components/Consent/AdminTabConsent.php:157
189
- msgctxt "(Admin)"
190
- msgid "Consent slug is a required field!"
191
- msgstr "Συγκατάθεση slug είναι ένα απαιτούμενο πεδίο!"
192
-
193
- #: src/Components/Consent/AdminTabConsent.php:162
194
- msgctxt "(Admin)"
195
- msgid ""
196
- "You may only use alphanumeric characters, dash and underscore in the consent "
197
- "slug field."
198
- msgstr ""
199
-
200
- #: src/Components/Consent/AdminTabConsent.php:167
201
- msgctxt "(Admin)"
202
- msgid "Consent title is a required field!"
203
- msgstr "Συγκατάθεση τίτλος το πεδίο είναι υποχρεωτικό!"
204
-
205
- #: src/Components/Consent/ConsentManager.php:46
206
- #: views/modules/contact-form-7/content-privacy.php:2
207
- #: views/modules/wordpress-comments/terms-checkbox.php:14
208
- #: views/modules/wordpress-user/registration-terms-checkbox.php:15
209
- #, php-format
210
- msgid "I accept the %sPrivacy Policy%s"
211
- msgstr "Αποδέχομαι την %sΠολιτική Προστασίας Προσωπικών Δεδομένων%s"
212
-
213
- #: src/Components/Consent/ConsentManager.php:50
214
- #: src/Components/Consent/ConsentManager.php:69
215
- msgctxt "(Admin)"
216
- msgid ""
217
- "This consent is not visible by default. If someone wishes to withdraw it, "
218
- "they should simply request to delete all their data."
219
- msgstr ""
220
- "Αυτή η συγκατάθεση δεν είναι ορατή από προεπιλογή. Αν κάποιος επιθυμεί να "
221
- "την αποσύρει, θα πρέπει απλώς να ζητήσει τη διαγραφή όλων των δεδομένων."
222
-
223
- #: src/Components/Consent/ConsentManager.php:65
224
- #, php-format
225
- msgid "I accept the %sTerms & Conditions%s"
226
- msgstr "Αποδέχομαι τους %sΌρους & Προϋποθέσεις%s"
227
-
228
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
229
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
230
- #: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
231
- msgctxt "(Admin)"
232
- msgid "Privacy Policy"
233
- msgstr "Πολιτική Απορρήτου"
234
-
235
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
236
- msgctxt "(Admin)"
237
- msgid "Company information"
238
- msgstr "ΠΛΗΡΟΦΟΡΙΕΣ ΓΙΑ ΤΗΝ ΕΤΑΙΡΙΑ"
239
-
240
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
241
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
242
- msgctxt "(Admin)"
243
- msgid "Company Name"
244
- msgstr "Όνομα Εταιρίας"
245
-
246
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
247
- msgctxt "(Admin)"
248
- msgid "Company Email"
249
- msgstr "Εταιρικό email"
250
-
251
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
252
- msgctxt "(Admin)"
253
- msgid "Company Location"
254
- msgstr "Τοποθεσία της εταιρείας"
255
-
256
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
257
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
258
- msgctxt "(Admin)"
259
- msgid "Representative Contact Name"
260
- msgstr "Αντιπροσωπευτικό όνομα επαφής"
261
-
262
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
263
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
264
- msgctxt "(Admin)"
265
- msgid "Representative Contact Email"
266
- msgstr "Εκπρόσωπος επικοινωνίας Email"
267
-
268
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
269
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
270
- msgctxt "(Admin)"
271
- msgid "Representative Contact Phone"
272
- msgstr "Τηλέφωνο επικοινωνίας του εκπροσώπου"
273
-
274
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
275
- msgctxt "(Admin)"
276
- msgid "Data Protection Authority"
277
- msgstr "Αρχή προστασίας δεδομένων"
278
-
279
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
280
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
281
- msgctxt "(Admin)"
282
- msgid "Data Protection Authority Website"
283
- msgstr "Δικτυακός τόπος της αρχής προστασίας δεδομένων"
284
-
285
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
286
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
287
- msgctxt "(Admin)"
288
- msgid "Data Protection Authority Email"
289
- msgstr "Ηλεκτρονικό ταχυδρομείο αρχής προστασίας δεδομένων"
290
-
291
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
292
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
293
- msgctxt "(Admin)"
294
- msgid "Data Protection Authority Phone"
295
- msgstr "Τηλέφωνο αρχής προστασίας δεδομένων"
296
-
297
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
298
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
299
- msgctxt "(Admin)"
300
- msgid "Data Protection Officer"
301
- msgstr "Υπεύθυνος προστασίας δεδομένων"
302
-
303
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
304
- msgctxt "(Admin)"
305
- msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
306
- msgstr ""
307
- "Γνωσιακή βάση: χρειάζεται να διορίσει έναν υπεύθυνο προστασίας δεδομένων;"
308
-
309
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
310
- msgctxt "(Admin)"
311
- msgid "Data Protection Officer Name"
312
- msgstr "Όνομα υπευθύνου προστασίας δεδομένων"
313
-
314
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
315
- msgctxt "(Admin)"
316
- msgid "Data Protection Officer Email"
317
- msgstr "Ηλεκτρονικό ταχυδρομείο υπευθύνου προστασίας δεδομένων"
318
-
319
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
320
- msgctxt "(Admin)"
321
- msgid "Contact Email"
322
- msgstr "Email επικοινωνίας"
323
-
324
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
325
- msgctxt "(Admin)"
326
- msgid "Representative Contact"
327
- msgstr "Εκπρόσωπος επικοινωνίας"
328
-
329
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
330
- msgctxt "(Admin)"
331
- msgid "Knowledge base: Do I need to appoint an EU-based representative?"
332
- msgstr "Γνωσιακή Βάση : πρέπει να διορίζει έναν εκπρόσωπο που εδρεύει στην ΕΕ;"
333
-
334
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
335
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
336
- msgctxt "(Admin)"
337
- msgid "DPO Name"
338
- msgstr ""
339
-
340
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
341
- msgctxt "(Admin)"
342
- msgid "Save & Generate Policy"
343
- msgstr ""
344
-
345
- #: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
346
- #: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
347
- #: views/themes/storefront/footer.php:3
348
- #: views/themes/twentyseventeen/footer.php:3
349
- #: views/themes/twentysixteen/footer.php:4
350
- msgid "Privacy Policy"
351
- msgstr "Προσωπικά δεδομένα"
352
-
353
- #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
354
- msgid "This page is currently disabled."
355
- msgstr "Αυτήν τη στιγμή αυτή η σελίδα είναι απενεργοποιημένη."
356
-
357
- #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
358
- #: src/Installer/Installer.php:279
359
- #: src/Installer/Steps/ConfigurationPages.php:55
360
- #: views/themes/storefront/footer.php:7
361
- #: views/themes/twentyseventeen/footer.php:7
362
- #: views/themes/twentysixteen/footer.php:9
363
- msgid "Privacy Tools"
364
- msgstr "Επεξεργασία προσωπικών δεδομένων"
365
-
366
- #: src/Components/Support/AdminTabSupport.php:13
367
- #: src/Components/Support/AdminTabSupport.php:20
368
- msgctxt "(Admin)"
369
- msgid "Support"
370
- msgstr "Υποστήριξη"
371
-
372
- #: src/Components/WordpressComments/WordpressComments.php:90
373
- #, php-format
374
- msgid ""
375
- "%sERROR:%s You need to accept the terms and conditions to post a comment."
376
- msgstr ""
377
- "%sERROR:%s Πρέπει να αποδεχτείτε τους όρους και τις προϋποθέσεις για να "
378
- "δημοσιεύσετε ένα σχόλιο."
379
-
380
- #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
381
- #: views/privacy-tools/notices.php:19
382
- msgid "We have received your request and will reply within 30 days."
383
- msgstr "Λάβαμε το αίτημά σας και θα απαντήσουμε εντός 30 ημερών."
384
-
385
- #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
386
- #: views/privacy-tools/notices.php:15
387
- msgid "Consent withdrawn."
388
- msgstr "Η συγκατάθεση αποσύρεται."
389
-
390
- #: src/Components/WordpressUser/RegistrationForm.php:42
391
- msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
392
- msgstr ""
393
- "<strong>ΣΦΑΛΜΑ</ strong>: Πρέπει να αποδεχτείτε τους όρους και τις "
394
- "προϋποθέσεις."
395
-
396
- #: src/Components/WordpressUser/WordpressUser.php:63
397
- #: src/Components/WordpressUser/WordpressUser.php:64
398
- #: views/modules/wordpress-user/dashboard/data-page/header.php:2
399
- msgctxt "(Admin)"
400
- msgid "Privacy Tools"
401
- msgstr "Εργαλεία απορρήτου"
402
-
403
- #: src/DataSubject/AdminTabDataSubject.php:27
404
- #: src/DataSubject/AdminTabDataSubject.php:41
405
- msgctxt "(Admin)"
406
- msgid "Data Subjects"
407
- msgstr "Υποκείμενα των δεδομένων"
408
-
409
- #: src/DataSubject/DataRepository.php:143
410
- msgid "Data exported"
411
- msgstr "Εξαγόμενα δεδομένα"
412
-
413
- #: src/DataSubject/DataRepository.php:158
414
- msgid "Data export request"
415
- msgstr "Αίτημα εξαγωγής δεδομένων"
416
-
417
- #: src/DataSubject/DataRepository.php:171
418
- msgid "Data removed"
419
- msgstr "Τα δεδομένα καταργήθηκαν"
420
-
421
- #: src/DataSubject/DataRepository.php:186
422
- msgid "Data removal request"
423
- msgstr "Αίτημα κατάργησης δεδομένων"
424
-
425
- #: src/DataSubject/DataSubjectIdentificator.php:65
426
- #: src/DataSubject/DataSubjectIdentificator.php:82
427
- msgid "Your personal data on"
428
- msgstr "Τα προσωπικά σας δεδομένα στο"
429
-
430
- #: src/Helpers.php:27
431
- msgctxt "(Admin)"
432
- msgid "Austria"
433
- msgstr "Αυστρία"
434
-
435
- #: src/Helpers.php:28
436
- msgctxt "(Admin)"
437
- msgid "Belgium"
438
- msgstr "Βέλγιο"
439
-
440
- #: src/Helpers.php:29
441
- msgctxt "(Admin)"
442
- msgid "Bulgaria"
443
- msgstr "Βουλγαρία"
444
-
445
- #: src/Helpers.php:30
446
- msgctxt "(Admin)"
447
- msgid "Croatia"
448
- msgstr "Κροατία"
449
-
450
- #: src/Helpers.php:31
451
- msgctxt "(Admin)"
452
- msgid "Cyprus"
453
- msgstr "Κύπρος"
454
-
455
- #: src/Helpers.php:32
456
- msgctxt "(Admin)"
457
- msgid "Czech Republic"
458
- msgstr "Τσεχική Δημοκρατία"
459
-
460
- #: src/Helpers.php:33
461
- msgctxt "(Admin)"
462
- msgid "Denmark"
463
- msgstr "Δανία"
464
-
465
- #: src/Helpers.php:34
466
- msgctxt "(Admin)"
467
- msgid "Estonia"
468
- msgstr "Εσθονία"
469
-
470
- #: src/Helpers.php:35
471
- msgctxt "(Admin)"
472
- msgid "Finland"
473
- msgstr "Φινλανδία"
474
-
475
- #: src/Helpers.php:36
476
- msgctxt "(Admin)"
477
- msgid "France"
478
- msgstr "Γαλλία"
479
-
480
- #: src/Helpers.php:37
481
- msgctxt "(Admin)"
482
- msgid "Germany"
483
- msgstr "Γερμανία"
484
-
485
- #: src/Helpers.php:38
486
- msgctxt "(Admin)"
487
- msgid "Greece"
488
- msgstr "Ελλάδα"
489
-
490
- #: src/Helpers.php:39
491
- msgctxt "(Admin)"
492
- msgid "Hungary"
493
- msgstr "Ουγγαρία"
494
-
495
- #: src/Helpers.php:40
496
- msgctxt "(Admin)"
497
- msgid "Ireland"
498
- msgstr "Ιρλανδία"
499
-
500
- #: src/Helpers.php:41
501
- msgctxt "(Admin)"
502
- msgid "Italy"
503
- msgstr "Ιταλία"
504
-
505
- #: src/Helpers.php:42
506
- msgctxt "(Admin)"
507
- msgid "Latvia"
508
- msgstr "Λετονία"
509
-
510
- #: src/Helpers.php:43
511
- msgctxt "(Admin)"
512
- msgid "Lithuania"
513
- msgstr "Λιθουανία"
514
-
515
- #: src/Helpers.php:44
516
- msgctxt "(Admin)"
517
- msgid "Luxembourg"
518
- msgstr "Λουξεμβούργο"
519
-
520
- #: src/Helpers.php:45
521
- msgctxt "(Admin)"
522
- msgid "Malta"
523
- msgstr "Μάλτα"
524
-
525
- #: src/Helpers.php:46
526
- msgctxt "(Admin)"
527
- msgid "Netherlands"
528
- msgstr "Ολλανδία"
529
-
530
- #: src/Helpers.php:47
531
- msgctxt "(Admin)"
532
- msgid "Poland"
533
- msgstr "Πολωνία"
534
-
535
- #: src/Helpers.php:48
536
- msgctxt "(Admin)"
537
- msgid "Portugal"
538
- msgstr "Πορτογαλία"
539
-
540
- #: src/Helpers.php:49
541
- msgctxt "(Admin)"
542
- msgid "Romania"
543
- msgstr "Ρουμανία"
544
-
545
- #: src/Helpers.php:50
546
- msgctxt "(Admin)"
547
- msgid "Slovakia"
548
- msgstr "Σλοβακία"
549
-
550
- #: src/Helpers.php:51
551
- msgctxt "(Admin)"
552
- msgid "Slovenia"
553
- msgstr "Σλοβενία"
554
-
555
- #: src/Helpers.php:52
556
- msgctxt "(Admin)"
557
- msgid "Spain"
558
- msgstr "Ισπανία"
559
-
560
- #: src/Helpers.php:53
561
- msgctxt "(Admin)"
562
- msgid "Sweden"
563
- msgstr "Σουηδία"
564
-
565
- #: src/Helpers.php:54
566
- msgctxt "(Admin)"
567
- msgid "United Kingdom"
568
- msgstr "Ηνωμένο Βασίλειο"
569
-
570
- #: src/Helpers.php:69
571
- msgctxt "(Admin)"
572
- msgid "Iceland"
573
- msgstr "Ισλανδία"
574
-
575
- #: src/Helpers.php:70
576
- msgctxt "(Admin)"
577
- msgid "Norway"
578
- msgstr "Νορβηγία"
579
-
580
- #: src/Helpers.php:71
581
- msgctxt "(Admin)"
582
- msgid "Liechtenstein"
583
- msgstr "Λιχτενστάιν"
584
-
585
- #: src/Helpers.php:72
586
- msgctxt "(Admin)"
587
- msgid "Switzerland"
588
- msgstr "Ελβετία"
589
-
590
- #: src/Helpers.php:73
591
- msgctxt "(Admin)"
592
- msgid "United States"
593
- msgstr "Ηνωμένες Πολιτείες"
594
-
595
- #: src/Helpers.php:74
596
- msgctxt "(Admin)"
597
- msgid "Rest of the world"
598
- msgstr "Υπόλοιπος κόσμος"
599
-
600
- #: src/Helpers.php:145
601
- msgid "An error has occurred. Please contact the site administrator."
602
- msgstr "Παρουσιάστηκε σφάλμα. Επικοινωνήστε με τον διαχειριστή του ιστότοπου."
603
-
604
- #: src/Installer/Installer.php:135
605
- msgctxt "(Admin)"
606
- msgid "Setup Wizard"
607
- msgstr ""
608
-
609
- #: src/Installer/Steps/ConfigurationPages.php:23
610
- #: src/Installer/Steps/PolicySettings.php:23
611
- #: src/Installer/Steps/PolicySettings.php:48
612
- msgctxt "(Admin)"
613
- msgid "&mdash; Create a new page &mdash;"
614
- msgstr "&mdash; Δημιουργήστε μια νέα σελίδα &mdash;"
615
-
616
- #: src/Installer/Steps/PolicySettings.php:38
617
- msgctxt "(Admin)"
618
- msgid ""
619
- "We have automatically selected your WooCommerce Terms & Conditions page."
620
- msgstr ""
621
- "Έχουμε επιλέξει αυτόματα τη σελίδα σας όρους WooCommerce & προϋποθέσεις."
622
-
623
- #: src/Modules/ContactForm7/ContactForm7.php:35
624
- msgctxt "(Admin)"
625
- msgid "gdpr terms txt"
626
- msgstr ""
627
-
628
- #: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
629
- #, php-format
630
- msgid "Nonce error for action \"%s\". Please go back and try again!"
631
- msgstr "Σφάλμα nonce για ενέργεια \"%s\". Επιστρέψτε και δοκιμάστε ξανά!"
632
-
633
- #: src/Router.php:149
634
- msgctxt "(Admin)"
635
- msgid "You do not have the required permissions to perform this action!"
636
- msgstr ""
637
- "Δεν έχετε τα απαιτούμενα δικαιώματα για να εκτελέσετε αυτήν την ενέργεια!"
638
-
639
- #: views/admin/consent.php:3
640
- msgctxt "(Admin)"
641
- msgid "Default consent types"
642
- msgstr "Προεπιλεγμένοι τύποι συγκατάθεσης"
643
-
644
- #: views/admin/consent.php:4
645
- msgctxt "(Admin)"
646
- msgid ""
647
- "These are the consent types that have been automatically registered by the "
648
- "framework or a plugin."
649
- msgstr ""
650
-
651
- #: views/admin/consent.php:7 views/admin/consent.php:52
652
- msgctxt "(Admin)"
653
- msgid "Slug"
654
- msgstr ""
655
-
656
- #: views/admin/consent.php:8 views/admin/consent.php:38
657
- #: views/admin/consent.php:60
658
- msgctxt "(Admin)"
659
- msgid "Title"
660
- msgstr "Τίτλος"
661
-
662
- #: views/admin/consent.php:9 views/admin/consent.php:41
663
- #: views/admin/consent.php:63
664
- msgctxt "(Admin)"
665
- msgid "Description"
666
- msgstr "Περιγραφή"
667
-
668
- #: views/admin/consent.php:10
669
- msgctxt "(Admin)"
670
- msgid "Visibility"
671
- msgstr "Εμφάνιση"
672
-
673
- #: views/admin/consent.php:18
674
- msgctxt "(Admin)"
675
- msgid "Visible"
676
- msgstr "Ορατό"
677
-
678
- #: views/admin/consent.php:20
679
- msgctxt "(Admin)"
680
- msgid "Hidden"
681
- msgstr "Κρυφό"
682
-
683
- #: views/admin/consent.php:29
684
- msgctxt "(Admin)"
685
- msgid "Custom consent types"
686
- msgstr " Προσαρμοσμένοι τύποι συγκατάθεσης"
687
-
688
- #: views/admin/consent.php:30
689
- msgctxt "(Admin)"
690
- msgid ""
691
- "Here you can add custom consent types to track. They will not be used "
692
- "anywhere by default - you will need to build an integration for each of them."
693
- msgstr ""
694
- "Εδώ μπορείτε να προσθέσετε προσαρμοσμένους τύπους συγκατάθεσης για "
695
- "παρακολούθηση. Δεν θα χρησιμοποιηθούν οπουδήποτε από προεπιλογή - θα "
696
- "χρειαστεί να οικοδομήσετε μια ενοποίηση για καθένα από αυτά."
697
-
698
- #: views/admin/consent.php:35
699
- msgctxt "(Admin)"
700
- msgid "Machine-readable slug"
701
- msgstr ""
702
-
703
- #: views/admin/consent.php:44 views/admin/consent.php:68
704
- msgctxt "(Admin)"
705
- msgid "Visible?"
706
- msgstr ""
707
-
708
- #: views/admin/consent.php:72
709
- msgctxt "(Admin)"
710
- msgid "Remove"
711
- msgstr "Αφαίρεση"
712
-
713
- #: views/admin/consent.php:93
714
- msgctxt "(Admin)"
715
- msgid "Additional info"
716
- msgstr "Επιπλέον πληροφορίες"
717
-
718
- #: views/admin/consent.php:95
719
- msgctxt "(Admin)"
720
- msgid ""
721
- "This text will be displayed to your data subjects on the Privacy Tools page."
722
- msgstr ""
723
- "Αυτό το κείμενο θα εμφανιστεί στα υποκείμενα των δεδομένων σας στη σελίδα "
724
- "εργαλεία απορρήτου."
725
-
726
- #: views/admin/data-subjects/search-form.php:2
727
- msgctxt "(Admin)"
728
- msgid ""
729
- "On this page, you can find which data subjects personal data you are storing "
730
- "and download, export or delete it."
731
- msgstr ""
732
- "Σε αυτή τη σελίδα μπορείτε να βρείτε ποια δεδομένα θέματα προσωπικών "
733
- "δεδομένων, μπορείτε να αποθηκεύετε και να κατεβάσετε, εξαγωγή ή να "
734
- "διαγράψετε αυτό."
735
-
736
- #: views/admin/data-subjects/search-form.php:10
737
- msgctxt "(Admin)"
738
- msgid "Find data subject by email"
739
- msgstr "Βρείτε το υποκείμενο των δεδομένων μέσω ηλεκτρονικού ταχυδρομείου"
740
-
741
- #: views/admin/data-subjects/search-form.php:11
742
- msgctxt "(Admin)"
743
- msgid "Email address"
744
- msgstr "Διεύθυνση Email"
745
-
746
- #: views/admin/data-subjects/search-form.php:16
747
- msgctxt "(Admin)"
748
- msgid "Search"
749
- msgstr "Αναζήτηση"
750
-
751
- #: views/admin/data-subjects/search-results.php:7
752
- msgctxt "(Admin)"
753
- msgid "Username"
754
- msgstr "Όνομα χρήστη"
755
-
756
- #: views/admin/data-subjects/search-results.php:12
757
- msgctxt "(Admin)"
758
- msgid "is not a registered user."
759
- msgstr "δεν είναι εγγεγραμμένος χρήστης."
760
-
761
- #: views/admin/data-subjects/search-results.php:16
762
- msgctxt "(Admin)"
763
- msgid "Download data (html)"
764
- msgstr "Λήψη δεδομένων (html)"
765
-
766
- #: views/admin/data-subjects/search-results.php:17
767
- msgctxt "(Admin)"
768
- msgid "Export data (json)"
769
- msgstr "Εξαγωγή δεδομένων (json)"
770
-
771
- #: views/admin/data-subjects/search-results.php:21
772
- msgctxt "(Admin)"
773
- msgid ""
774
- "This user has admin capabilities. Deleting data via this interface is "
775
- "disabled."
776
- msgstr ""
777
- "Αυτός ο χρήστης έχει τις δυνατότητες διαχείρισης. Διαγραφή δεδομένων μέσω "
778
- "αυτής της διασύνδεσης είναι απενεργοποιημένη."
779
-
780
- #: views/admin/data-subjects/search-results.php:24
781
- msgctxt "(Admin)"
782
- msgid "Anonymize data"
783
- msgstr "Ανωνυμία δεδομένων"
784
-
785
- #: views/admin/data-subjects/search-results.php:25
786
- msgctxt "(Admin)"
787
- msgid "Delete data"
788
- msgstr "Διαγραφή Δεδομένων"
789
-
790
- #: views/admin/data-subjects/search-results.php:29
791
- msgctxt "(Admin)"
792
- msgid "No data found!"
793
- msgstr "Δεν βρέθηκαν δεδομένα"
794
-
795
- #: views/admin/general/delete-action-email.php:5
796
- #: views/admin/general/export-action-email.php:5
797
- #: views/installer/steps/configuration-settings.php:29
798
- #: views/installer/steps/configuration-settings.php:79
799
- msgid "Email address"
800
- msgstr "Διεύθυνση ηλεκτρονικού ταχυδρομείου"
801
-
802
- #: views/admin/general/delete-action-reassign.php:3
803
- #: views/installer/steps/configuration-settings.php:50
804
- msgctxt "(Admin)"
805
- msgid "Delete content"
806
- msgstr "Διαγραφή περιεχομένου"
807
-
808
- #: views/admin/general/delete-action-reassign.php:6
809
- #: views/installer/steps/configuration-settings.php:53
810
- msgctxt "(Admin)"
811
- msgid "Reassign content to a user"
812
- msgstr "Αντιστοιχίστε εκ νέου το περιεχόμενο σε ένα χρήστη"
813
-
814
- #: views/admin/general/delete-action-reassign.php:10
815
- msgctxt "(Admin)"
816
- msgid ""
817
- "If the user has submitted any content on your site, should it be deleted or "
818
- "reassigned to another user?"
819
- msgstr ""
820
- "Εάν ο χρήστης έχει υποβάλει οποιοδήποτε περιεχόμενο στην ιστοσελίδα σας, "
821
- "πρέπει να διαγραφεί και να εκχωρηθούν σε κάποιον άλλο χρήστη;"
822
-
823
- #: views/admin/general/description-data-page.php:2
824
- msgctxt "(Admin)"
825
- msgid ""
826
- "Select the page where users can go to control their data. This page must "
827
- "contain the [gdpr_privacy_tools] shortcode."
828
- msgstr ""
829
- "Επιλέξτε τη σελίδα όπου οι χρήστες μπορούν να πάνε για τον έλεγχο των "
830
- "δεδομένων τους. Αυτή η σελίδα πρέπει να περιέχει το shortcode "
831
- "[gdpr_privacy_tools]."
832
-
833
- #: views/admin/general/enable.php:9
834
- msgctxt "(Admin)"
835
- msgid "Enable the view, export and forget functionality for users and visitors"
836
- msgstr ""
837
- "Ενεργοποιήσετε την προβολή, να εξαγάγετε και να ξεχάσετε τη λειτουργικότητα "
838
- "για τους χρήστες και επισκέπτες."
839
-
840
- #: views/admin/general/enable.php:12
841
- msgctxt "(Admin)"
842
- msgid ""
843
- "Enable the Privacy Tools page on front-end and dashboard. This allows "
844
- "visitors to request viewing and deleting their personal data and withdraw "
845
- "consents."
846
- msgstr ""
847
- "Ενεργοποίηση της σελίδας εργαλείων προστασίας προσωπικών δεδομένων για front-"
848
- "end και ταμπλό. Αυτό επιτρέπει στους επισκέπτες να ζητήσουν προβολή και "
849
- "διαγραφή των προσωπικών τους δεδομένων και να αποσύρουν τις συναινέσεις."
850
-
851
- #: views/admin/general/theme-compatibility.php:9
852
- #: views/installer/steps/integrations.php:21
853
- msgctxt "(Admin)"
854
- msgid ""
855
- "Automatically add Privacy Policy and Privacy Tools links to your site footer."
856
- msgstr ""
857
- "Αυτόματα προσθέστε πολιτική απορρήτου και προστασίας προσωπικών δεδομένων "
858
- "εργαλεία συνδέσεις υποσέλιδο ιστοσελίδα σας."
859
-
860
- #: views/admin/notices/header.php:4 views/admin/settings-page.php:3
861
- #: views/installer/header.php:23
862
- msgctxt "(Admin)"
863
- msgid "The GDPR Framework"
864
- msgstr ""
865
-
866
- #: views/admin/notices/helper-autoinstall.php:2
867
- msgctxt "(Admin)"
868
- msgid ""
869
- "A Privacy Policy page has been created, but it is empty. You can generate a "
870
- "policy template on this page."
871
- msgstr ""
872
- "Έχει δημιουργηθεί μια σελίδα Πολιτική προστασίας προσωπικών δεδομένων, αλλά "
873
- "είναι κενή. Μπορείτε να δημιουργήσετε ένα πρότυπο πολιτικής σε αυτήν τη "
874
- "σελίδα."
875
-
876
- #: views/admin/notices/helper-policy.php:2
877
- msgctxt "(Admin)"
878
- msgid ""
879
- "Heads up - your Privacy Policy still requires some attention. Find the "
880
- "places marked with [TODO] and replace them with real content!"
881
- msgstr ""
882
- "Heads up - πολιτική απορρήτου σας εξακολουθεί να απαιτεί κάποια προσοχή. "
883
- "Βρείτε τα σημεία που σημειώνονται με [TODO] και την αντικατάστασή τους με "
884
- "πραγματικό περιεχόμενο!"
885
-
886
- #: views/admin/notices/helper-tools.php:2
887
- msgctxt "(Admin)"
888
- msgid "The contents of this page should contain the [gdpr_tools] shortcode."
889
- msgstr ""
890
- "Το περιεχόμενο αυτής της σελίδας θα πρέπει να περιέχει το shortcode "
891
- "[gdpr_tools]."
892
-
893
- #: views/admin/privacy-policy/description-policy-page.php:2
894
- msgctxt "(Admin)"
895
- msgid "Select the page which will contain your Privacy Policy"
896
- msgstr "Επιλέξτε τη σελίδα που θα περιέχει την πολιτική απορρήτου σας"
897
-
898
- #: views/admin/privacy-policy/generated.php:3
899
- msgctxt "(Admin)"
900
- msgid "Your Privacy Policy has been generated."
901
- msgstr "Η Πολιτική προστασίας προσωπικών δεδομένων σας έχει δημιουργηθεί."
902
-
903
- #: views/admin/privacy-policy/generated.php:20
904
- msgctxt "(Admin)"
905
- msgid "&laquo; Back"
906
- msgstr "&laquo; Πίσω"
907
-
908
- #: views/admin/privacy-policy/header.php:2
909
- msgctxt "(Admin)"
910
- msgid ""
911
- "This page allows you to generate a Privacy Policy based on the information "
912
- "you entered below."
913
- msgstr ""
914
- "Η σελίδα αυτή σας επιτρέπει να δημιουργήσετε μια πολιτική απορρήτου που "
915
- "βασίζεται στις πληροφορίες που καθορίσατε παρακάτω."
916
-
917
- #: views/admin/settings-page.php:31
918
- #, php-format
919
- msgctxt "(Admin)"
920
- msgid "The GDPR Framework. Built with &#9829; by %sCodelight%s."
921
- msgstr ""
922
-
923
- #: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
924
- msgctxt "(Admin)"
925
- msgid "Need more info?"
926
- msgstr "Χρειάζεστε περισσότερες πληροφορίες;"
927
-
928
- #: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
929
- msgctxt "(Admin)"
930
- msgid "Site Owner's guide to GDPR"
931
- msgstr ""
932
-
933
- #: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
934
- msgctxt "(Admin)"
935
- msgid "Read the full guide on GDPR compliance."
936
- msgstr "Διαβάστε τον πλήρη οδηγό σχετικά με τη συμμόρφωση του GDPR."
937
-
938
- #: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
939
- msgctxt "(Admin)"
940
- msgid "Knowledge base"
941
- msgstr "Γνωσιακή Βάση"
942
-
943
- #: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
944
- msgctxt "(Admin)"
945
- msgid "Check out the knowledge base for common questions and answers."
946
- msgstr "Ελέγξτε την Γνωσιακή βάση για συχνές ερωτήσεις και απαντήσεις."
947
-
948
- #: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
949
- msgctxt "(Admin)"
950
- msgid "Developer's guide to GDPR"
951
- msgstr "Οδηγός για προγραμματιστές να GDPR"
952
-
953
- #: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
954
- msgctxt "(Admin)"
955
- msgid "We have a thorough guide to help making custom sites compliant."
956
- msgstr ""
957
-
958
- #: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
959
- msgctxt "(Admin)"
960
- msgid "Need help?"
961
- msgstr "Χρειάζεστε βοήθεια;"
962
-
963
- #: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
964
- msgctxt "(Admin)"
965
- msgid "Submit a support request"
966
- msgstr "Υποβάλετε ένα αίτημα υποστήριξης"
967
-
968
- #: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
969
- msgctxt "(Admin)"
970
- msgid ""
971
- "Found a bug or problem with the plugin? Post in the wordpress.org support "
972
- "forum."
973
- msgstr ""
974
- "Βρέθηκε ένα bug ή πρόβλημα με το plugin; Δημοσίευση στα φόρουμ υποστήριξης "
975
- "της wordpress.org."
976
-
977
- #: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
978
- msgctxt "(Admin)"
979
- msgid "Request a consultation"
980
- msgstr "Αίτηση διαβούλευσης"
981
-
982
- #: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
983
- msgctxt "(Admin)"
984
- msgid ""
985
- "Need development or legal assistance in making your site compliant? We can "
986
- "help!"
987
- msgstr ""
988
- "Ανάγκη ανάπτυξης ή νομική βοήθεια στο να καταστεί συμβατό με το site σας; "
989
- "Μπορούμε να σας βοηθήσουμε!"
990
-
991
- #: views/admin/wizard-buttons.php:2
992
- msgctxt "(Admin)"
993
- msgid "Restart setup wizard"
994
- msgstr "Κάντε επανεκκίνηση του οδηγού εγκατάστασης"
995
-
996
- #: views/email/action-export.php:8 views/email/action-forget.php:12
997
- msgctxt "(Admin)"
998
- msgid ""
999
- "This email is just for your information. You don't need to take any action"
1000
- msgstr ""
1001
- "Αυτό το email είναι μόνο για τις πληροφορίες σας. Δεν χρειάζεται να προβείτε "
1002
- "σε καμία ενέργεια"
1003
-
1004
- #: views/email/action-forget.php:8
1005
- msgctxt "(Admin)"
1006
- msgid "The data subject had a user account on your website."
1007
- msgstr ""
1008
- "Το υποκείμενο των δεδομένων είχε ένα λογαριασμό χρήστη στην ιστοσελίδα σας."
1009
-
1010
- #: views/email/identify-data-subject.php:2
1011
- msgid "Someone has requested access to your data on"
1012
- msgstr "Κάποιος έχει ζητήσει πρόσβαση στα δεδομένα σας στο"
1013
-
1014
- #: views/email/identify-data-subject.php:3
1015
- msgid "If this was a mistake, just ignore this email and nothing will happen."
1016
- msgstr ""
1017
- "Εάν αυτό ήταν λάθος, απλά αγνοήστε αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου "
1018
- "και τίποτα δεν θα συμβεί."
1019
-
1020
- #: views/email/identify-data-subject.php:4
1021
- msgid "To manage your data, visit the following address:"
1022
- msgstr ""
1023
- "Για να διαχειριστείτε τα δεδομένα σας, επισκεφθείτε την ακόλουθη διεύθυνση:"
1024
-
1025
- #: views/email/identify-data-subject.php:10
1026
- msgid "This link is valid for 15 minutes."
1027
- msgstr "Αυτός ο σύνδεσμος ισχύει για 15 λεπτά."
1028
-
1029
- #: views/email/no-data.php:2
1030
- msgid "Someone has requested information about your personal data on"
1031
- msgstr ""
1032
- "Κάποιος έχει ζητήσει πληροφορίες σχετικά με τα προσωπικά σας δεδομένα στο"
1033
-
1034
- #: views/email/no-data.php:3
1035
- msgid "None of your personal data is stored on"
1036
- msgstr "Κανένα από τα προσωπικά σας δεδομένα δεν αποθηκεύεται στο"
1037
-
1038
- #: views/email/no-data.php:5
1039
- msgid ""
1040
- "If this was a mistake or you did not request this email, just ignore it and "
1041
- "nothing will happen."
1042
- msgstr ""
1043
- "Εάν αυτό ήταν λάθος ή δεν ζητήσατε αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου, "
1044
- "απλώς το αγνοήστε και δεν θα συμβεί τίποτα."
1045
-
1046
- #: views/email/request-export.php:13 views/email/request-forget.php:13
1047
- msgctxt "(Admin)"
1048
- msgid "As a reminder: according to GDPR, you have 30 days to comply."
1049
- msgstr ""
1050
- "Ως μια υπενθύμιση: σύμφωνα με το GDPR, έχετε 30 ημέρες για να συμμορφωθεί."
1051
-
1052
- #: views/global/delete-action.php:2
1053
- msgctxt "(Admin)"
1054
- msgid "Automatically anonymize data"
1055
- msgstr "Αυτόματη ανώνυμη επεξεργασία δεδομένων"
1056
-
1057
- #: views/global/delete-action.php:5
1058
- msgctxt "(Admin)"
1059
- msgid "Automatically delete data"
1060
- msgstr "Αυτόματη διαγραφή δεδομένων"
1061
-
1062
- #: views/global/delete-action.php:9
1063
- msgctxt "(Admin)"
1064
- msgid "Automatically anonymize data and notify me via email"
1065
- msgstr "Ανωνυμία δεδομένων αυτόματα και να ειδοποιούμαι μέσω e-mail"
1066
-
1067
- #: views/global/delete-action.php:13
1068
- msgctxt "(Admin)"
1069
- msgid "Automatically delete data and notify me via email"
1070
- msgstr "Αυτόματη διαγραφή δεδομένων και να ειδοποιούμαι μέσω e-mail"
1071
-
1072
- #: views/global/delete-action.php:16 views/global/export-action.php:10
1073
- msgctxt "(Admin)"
1074
- msgid "Only notify me via email"
1075
- msgstr "Να ειδοποιούμαι μόνο μέσω ηλεκτρονικού ταχυδρομείου"
1076
-
1077
- #: views/global/export-action.php:2
1078
- msgctxt "(Admin)"
1079
- msgid "Automatically download data"
1080
- msgstr "Αυτόματη λήψη δεδομένων"
1081
-
1082
- #: views/global/export-action.php:6
1083
- msgctxt "(Admin)"
1084
- msgid "Automatically download data and notify me via email"
1085
- msgstr "Αυτόματη λήψη δεδομένων και να ειδοποιούμαι μέσω e-mail"
1086
-
1087
- #: views/installer/continue-notice.php:2
1088
- msgctxt "(Admin)"
1089
- msgid "The The GDPR Framework setup has not been finalized yet."
1090
- msgstr ""
1091
-
1092
- #: views/installer/continue-notice.php:3
1093
- msgctxt "(Admin)"
1094
- msgid "You can continue the setup at any time."
1095
- msgstr "Μπορείτε να συνεχίσετε τη ρύθμιση οποιαδήποτε στιγμή."
1096
-
1097
- #: views/installer/continue-notice.php:6
1098
- msgctxt "(Admin)"
1099
- msgid "Continue the setup wizard"
1100
- msgstr ""
1101
-
1102
- #: views/installer/continue-notice.php:9
1103
- msgctxt "(Admin)"
1104
- msgid "Hide this message"
1105
- msgstr "Απόκρυψη αυτού του μηνύματος"
1106
-
1107
- #: views/installer/footer.php:7
1108
- msgid "Back"
1109
- msgstr "Πίσω"
1110
-
1111
- #: views/installer/header.php:26
1112
- msgctxt "(Admin)"
1113
- msgid "I need help"
1114
- msgstr "Χρειάζομαι βοήθεια"
1115
-
1116
- #: views/installer/header.php:29
1117
- msgctxt "(Admin)"
1118
- msgid "Developer Docs"
1119
- msgstr "Έγγραφα για developers"
1120
-
1121
- #: views/installer/header.php:36
1122
- msgctxt "(Admin)"
1123
- msgid "Configuration"
1124
- msgstr ""
1125
-
1126
- #: views/installer/header.php:46
1127
- msgctxt "(Admin)"
1128
- msgid "Forms & Consent"
1129
- msgstr "Έντυπα συγκατάθεσης"
1130
-
1131
- #: views/installer/header.php:51
1132
- msgctxt "(Admin)"
1133
- msgid "Integrations"
1134
- msgstr "Ενσωματώσεις"
1135
-
1136
- #: views/installer/steps/configuration-settings.php:23
1137
- #: views/installer/steps/configuration-settings.php:73
1138
- msgctxt "(Admin)"
1139
- msgid "Enter the email address to notify"
1140
- msgstr "Εισάγετε τη διεύθυνση email για να κοινοποίηση"
1141
-
1142
- #: views/installer/steps/disclaimer.php:21
1143
- msgctxt "(Admin)"
1144
- msgid "I accept"
1145
- msgstr "Δέχομαι"
1146
-
1147
- #: views/installer/welcome-notice.php:7
1148
- msgctxt "(Admin)"
1149
- msgid "Run the setup wizard"
1150
- msgstr ""
1151
-
1152
- #: views/installer/welcome-notice.php:11
1153
- msgctxt "(Admin)"
1154
- msgid "Auto-install pages"
1155
- msgstr "Αυτόματη εγκατάσταση σελίδων"
1156
-
1157
- #: views/installer/welcome-notice.php:15
1158
- msgctxt "(Admin)"
1159
- msgid "Skip and install manually"
1160
- msgstr "Χειροκίνητη εγκατάσταση"
1161
-
1162
- #: views/modules/contact-form-7/generator-privacy.php:6
1163
- msgctxt "(Admin)"
1164
- msgid ""
1165
- "This tag generates the default text for Terms & Conditions and/or Privacy "
1166
- "Policy checkbox."
1167
- msgstr ""
1168
- "Αυτή η ετικέτα δημιουργεί το προεπιλεγμένο κείμενο για & όροι ή/και πολιτική "
1169
- "προστασίας προσωπικών δεδομένων το πλαίσιο ελέγχου."
1170
-
1171
- #: views/modules/contact-form-7/generator-privacy.php:15
1172
- msgid "Insert"
1173
- msgstr "Εισάγετε"
1174
-
1175
- #: views/modules/wordpress-comments/terms-checkbox.php:6
1176
- #: views/modules/wordpress-user/registration-terms-checkbox.php:7
1177
- #, php-format
1178
- msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1179
- msgstr "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1180
-
1181
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
1182
- msgid "Manage consents"
1183
- msgstr "Διαχειριστείτε τις συγκαταθέσεις"
1184
-
1185
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
1186
- #: views/privacy-tools/form-consent.php:6
1187
- msgid "Here you can withdraw any consents you have given."
1188
- msgstr "Εδώ μπορείτε να αποσύρετε τυχόν συγκαταθέσεις που έχετε δώσει."
1189
-
1190
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
1191
- #: views/privacy-tools/form-consent.php:9
1192
- msgid "Consent types"
1193
- msgstr "Τύποι συγκατάθεσης"
1194
-
1195
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
1196
- #: views/privacy-tools/form-consent.php:24
1197
- msgid "Withdraw"
1198
- msgstr "Αποσύρω"
1199
-
1200
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
1201
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
1202
- msgctxt "(Admin)"
1203
- msgid "Delete this user and all data"
1204
- msgstr "Διαγραφή αυτού του χρήστη και όλα τα δεδομένα"
1205
-
1206
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
1207
- msgctxt "(Admin)"
1208
- msgid "Delete my data"
1209
- msgstr "Διαγράψτε τα δεδομένα μου"
1210
-
1211
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
1212
- #: views/privacy-tools/form-delete.php:13
1213
- msgid "Delete all data we have gathered about you."
1214
- msgstr "Διαγράψτε όλα τα δεδομένα που έχουμε συγκεντρώσει για εσάς."
1215
-
1216
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
1217
- #: views/privacy-tools/form-delete.php:14
1218
- msgid "If you have a user account on our site, it will also be deleted."
1219
- msgstr ""
1220
- "Εάν διαθέτετε λογαριασμό χρήστη στον ιστότοπό μας, θα διαγραφεί επίσης."
1221
-
1222
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
1223
- #: views/privacy-tools/form-delete.php:15
1224
- msgid "Be careful - this action is permanent and CANNOT be undone."
1225
- msgstr "ΠΡΟΣΟΧΗ - αυτή η ενέργεια είναι μόνιμη και ΔΕΝ μπορεί να ακυρωθεί."
1226
-
1227
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
1228
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
1229
- msgctxt "(Admin)"
1230
- msgid ""
1231
- "You seem to have an administrator or equivalent role, so deleting/"
1232
- "anonymizing via this page is disabled."
1233
- msgstr ""
1234
-
1235
- #: views/modules/wordpress-user/dashboard/form-export.php:7
1236
- #: views/privacy-tools/form-export.php:1
1237
- msgid "Download your data"
1238
- msgstr "Κατεβάστε τα δεδομένα σας"
1239
-
1240
- #: views/modules/wordpress-user/dashboard/form-export.php:12
1241
- #: views/privacy-tools/form-export.php:13
1242
- msgid "Download as table"
1243
- msgstr "Κάντε λήψη ως πίνακας"
1244
-
1245
- #: views/modules/wordpress-user/dashboard/form-export.php:15
1246
- #: views/privacy-tools/form-export.php:22
1247
- msgid "Export as JSON"
1248
- msgstr "Εξαγωγή ως JSON αρχειο"
1249
-
1250
- #: views/modules/wordpress-user/dashboard/form-export.php:19
1251
- #: views/privacy-tools/form-export.php:4
1252
- msgid "You can download all your data formatted as a table for viewing."
1253
- msgstr ""
1254
- "Μπορείτε να κατεβάσετε όλα τα δεδομένα σας μορφοποιημένα ως πίνακα για "
1255
- "προβολή."
1256
-
1257
- #: views/modules/wordpress-user/dashboard/form-export.php:20
1258
- #: views/privacy-tools/form-export.php:5
1259
- msgid "Alternatively, you can export it in machine-readable JSON format."
1260
- msgstr ""
1261
- "Εναλλακτικά, μπορείτε να την εξαγάγετε σε μορφή JSON αναγνώσιμη από μηχανή."
1262
-
1263
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
1264
- msgctxt "(Admin)"
1265
- msgid "Delete user and all data"
1266
- msgstr "Διαγραφή χρήστη και όλα τα δεδομένα"
1267
-
1268
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
1269
- msgctxt "(Admin)"
1270
- msgid "Anonymize user and all data"
1271
- msgstr "Ανωνυμία χρήστη και όλα τα δεδομένα"
1272
-
1273
- #: views/modules/wordpress-user/dashboard/profile-page/header.php:2
1274
- msgctxt "(Admin)"
1275
- msgid "GDPR Data"
1276
- msgstr ""
1277
-
1278
- #: views/modules/wordpress-user/dashboard/profile-page/header.php:6
1279
- msgctxt "(Admin)"
1280
- msgid "This user has been anonymized."
1281
- msgstr ""
1282
-
1283
- #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
1284
- msgctxt "(Admin)"
1285
- msgid "Consents given"
1286
- msgstr "Συναινέσεις που έχουν χορηγηθεί"
1287
-
1288
- #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
1289
- msgctxt "(Admin)"
1290
- msgid "No consents given"
1291
- msgstr ""
1292
-
1293
- #: views/privacy-tools/form-consent.php:2
1294
- msgid "Consent"
1295
- msgstr "Συγκατάθεση"
1296
-
1297
- #: views/privacy-tools/form-delete.php:1
1298
- #: views/privacy-tools/notice-admin-role.php:1
1299
- msgid "Delete my user and data"
1300
- msgstr "Διαγράψτε τον χρήστη και τα δεδομένα μου"
1301
-
1302
- #: views/privacy-tools/form-delete.php:7
1303
- msgid "Delete my data"
1304
- msgstr "Διαγράψτε τα δεδομένα μου"
1305
-
1306
- #: views/privacy-tools/form-identify.php:8
1307
- msgid "Back to Privacy Tools"
1308
- msgstr "Πίσω στην επεξεργασία προσωπικών δεδομένων"
1309
-
1310
- #: views/privacy-tools/form-identify.php:14
1311
- msgid "Identify yourself!"
1312
- msgstr "Προσδιορίστε τον εαυτό σας!"
1313
-
1314
- #: views/privacy-tools/form-identify.php:17
1315
- #: views/privacy-tools/form-identify.php:20
1316
- msgid "Enter your email address"
1317
- msgstr "Εισάγετε το email σας"
1318
-
1319
- #: views/privacy-tools/form-identify.php:23
1320
- msgid "Send email"
1321
- msgstr "Αποστολή email"
1322
-
1323
- #: views/privacy-tools/notice-admin-role.php:4
1324
- msgctxt "(Admin)"
1325
- msgid "Data deletion is disabled for administrative accounts."
1326
- msgstr "Διαγραφή δεδομένων είναι απενεργοποιημένη για λογαριασμών διαχειριστή."
1327
-
1328
- #: views/privacy-tools/notices.php:3
1329
- msgid ""
1330
- "We will send you an email with the link to access your data. Please check "
1331
- "your spam folder as well!"
1332
- msgstr ""
1333
- "Θα σας στείλουμε ένα μήνυμα ηλεκτρονικού ταχυδρομείου με το σύνδεσμο για να "
1334
- "έχετε πρόσβαση στα δεδομένα σας. Ελέγξτε επίσης το φάκελο spam σας!"
1335
-
1336
- #: views/privacy-tools/notices.php:7
1337
- msgid "The email you entered does not appear to be a valid email."
1338
- msgstr "Το email που καταχωρίσατε δεν φαίνεται να είναι έγκυρο."
1339
-
1340
- #: views/privacy-tools/notices.php:11
1341
- msgid "Sorry - the link seems to have expired. Please try again!"
1342
- msgstr ""
1343
- "Λυπούμαστε - ο σύνδεσμος φαίνεται να έχει λήξει. ΠΑΡΑΚΑΛΩ προσπαθησε ξανα!"
1344
-
1345
- #: views/privacy-tools/notices.php:23
1346
- msgid "Your personal data has been removed!"
1347
- msgstr "Τα προσωπικά σας δεδομένα έχουν αφαιρεθεί!"
1348
-
1349
- #: views/privacy-tools/privacy-tools.php:5
1350
- msgid "You are identified as"
1351
- msgstr "Έχετε αναγνωριστεί ως"
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR Codelight
3
+ # This file is distributed under the same license as the The GDPR Framework package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: The GDPR Framework 1.0\n"
9
+ "Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
10
+ "POT-Creation-Date: 2018-04-16 10:50+0000\n"
11
+ "PO-Revision-Date: 2018-05-18 21:23+0300\n"
12
+ "Last-Translator: john maniatopoulos <webace.wp@gmail.com>\n"
13
+ "Language-Team: Greek\n"
14
+ "Language: el\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
19
+ "X-Generator: Poedit 1.8.6\n"
20
+
21
+ #: gdpr-framework.php:26
22
+ msgctxt "(Admin)"
23
+ msgid "WordPress GDPR &rsaquo; Error"
24
+ msgstr ""
25
+
26
+ #: gdpr-framework.php:35
27
+ msgctxt "(Admin)"
28
+ msgid "Invalid PHP version"
29
+ msgstr "Μη έγκυρη έκδοση PHP"
30
+
31
+ #: gdpr-framework.php:35
32
+ msgctxt "(Admin)"
33
+ msgid "You must be using PHP 5.6.33 or greater."
34
+ msgstr "Πρέπει να χρησιμοποιείτε την PHP 5.6.33 ή μεγαλύτερη."
35
+
36
+ #: gdpr-framework.php:42
37
+ msgctxt "(Admin)"
38
+ msgid "Invalid WordPress version"
39
+ msgstr "Μη έγκυρη έκδοση WordPress"
40
+
41
+ #: gdpr-framework.php:42
42
+ msgctxt "(Admin)"
43
+ msgid "You must be using WordPress 4.3.0 or greater."
44
+ msgstr "Πρέπει να χρησιμοποιείτε WordPress 4.3.0 ή μεγαλύτερη."
45
+
46
+ #: gdpr-framework.php:52
47
+ msgctxt "(Admin)"
48
+ msgid ""
49
+ "You appear to be running a development version of GDPR. You must run "
50
+ "<code>composer install</code> from the plugin directory."
51
+ msgstr ""
52
+ "Σας φαίνεται να λειτουργεί μια έκδοση ανάπτυξης του GDPR πρέπει να "
53
+ "εκτελέσετε το <code>composer install</code> από τον κατάλογο του plugin."
54
+
55
+ #: gdpr-framework.php:53
56
+ msgctxt "(Admin)"
57
+ msgid "Autoloader not found."
58
+ msgstr "Autoloader δεν βρέθηκε."
59
+
60
+ #: gdpr-framework.php:115
61
+ msgctxt "(Admin)"
62
+ msgid "Anonymous"
63
+ msgstr "Ανώνυμος"
64
+
65
+ #: src/Admin/AdminTab.php:115
66
+ msgctxt "(Admin)"
67
+ msgid "Save"
68
+ msgstr "Αποθήκευση"
69
+
70
+ #: src/Admin/AdminTab.php:151
71
+ msgctxt "(Admin)"
72
+ msgid "Policy generated!"
73
+ msgstr "Πολιτική που δημιουργήθηκε!"
74
+
75
+ #: src/Admin/AdminTabGeneral.php:11
76
+ msgctxt "(Admin)"
77
+ msgid "General"
78
+ msgstr "Γενικά"
79
+
80
+ #: src/Admin/AdminTabGeneral.php:38
81
+ msgctxt "(Admin)"
82
+ msgid "General Settings"
83
+ msgstr "Γενικές Ρυθμίσεις"
84
+
85
+ #: src/Admin/AdminTabGeneral.php:43
86
+ msgctxt "(Admin)"
87
+ msgid "Enable Privacy Tools"
88
+ msgstr "Ενεργοποίηση εργαλείων προστασίας προσωπικών δεδομένων"
89
+
90
+ #: src/Admin/AdminTabGeneral.php:53
91
+ msgctxt "(Admin)"
92
+ msgid "Pages"
93
+ msgstr "Σελίδες"
94
+
95
+ #: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
96
+ msgctxt "(Admin)"
97
+ msgid "Privacy Tools Page"
98
+ msgstr "Εργαλεία σελίδας απορρήτου"
99
+
100
+ #: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
101
+ msgctxt "(Admin)"
102
+ msgid "Privacy Policy Page"
103
+ msgstr "Σελίδα Πολιτικής Απορρήτου"
104
+
105
+ #: src/Admin/AdminTabGeneral.php:72
106
+ msgctxt "(Admin)"
107
+ msgid "Terms & Conditions Page"
108
+ msgstr "Σελίδα Όρων & Προϋποθέσεων"
109
+
110
+ #: src/Admin/AdminTabGeneral.php:82
111
+ msgctxt "(Admin)"
112
+ msgid "View & Export Data"
113
+ msgstr "Προβολή & εξαγωγή δεδομένων"
114
+
115
+ #: src/Admin/AdminTabGeneral.php:87
116
+ msgctxt "(Admin)"
117
+ msgid "Export action"
118
+ msgstr "Εξαγωγή"
119
+
120
+ #: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
121
+ msgctxt "(Admin)"
122
+ msgid "Email to notify"
123
+ msgstr "Διεύθυνση ηλεκτρονικού ταχυδρομείου για κοινοποίηση"
124
+
125
+ #: src/Admin/AdminTabGeneral.php:105
126
+ msgctxt "(Admin)"
127
+ msgid "Delete & Anonymize Data"
128
+ msgstr "Διαγραφή του & ανωνυμία δεδομένων"
129
+
130
+ #: src/Admin/AdminTabGeneral.php:110
131
+ msgctxt "(Admin)"
132
+ msgid "Delete action"
133
+ msgstr "Διαγραφή ενέργειας"
134
+
135
+ #: src/Admin/AdminTabGeneral.php:117
136
+ msgctxt "(Admin)"
137
+ msgid "Delete or reassign content?"
138
+ msgstr "Διαγράψετε ή να εκχωρήσετε εκ νέου περιεχομένου;"
139
+
140
+ #: src/Admin/AdminTabGeneral.php:125
141
+ msgctxt "(Admin)"
142
+ msgid "Reassign content to"
143
+ msgstr "Επανατοποθετήστε περιεχόμενο σε"
144
+
145
+ #: src/Admin/AdminTabGeneral.php:145
146
+ msgctxt "(Admin)"
147
+ msgid "Styling"
148
+ msgstr "Μορφοποίηση"
149
+
150
+ #: src/Admin/AdminTabGeneral.php:150
151
+ msgctxt "(Admin)"
152
+ msgid "Enable basic styling on Privacy Tools page"
153
+ msgstr "Ενεργοποίηση βασικού στυλ στη σελίδα εργαλεία απορρήτου"
154
+
155
+ #: src/Admin/AdminTabGeneral.php:162
156
+ msgctxt "(Admin)"
157
+ msgid "Compatibility"
158
+ msgstr "Συμβατότητα"
159
+
160
+ #: src/Admin/AdminTabGeneral.php:167
161
+ msgctxt "(Admin)"
162
+ msgid "Enable automatic theme compatibility"
163
+ msgstr "Ενεργοποίηση αυτόματης συμβατότητας θέματος"
164
+
165
+ #: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
166
+ #: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
167
+ #: views/installer/steps/configuration-settings.php:62
168
+ msgctxt "(Admin)"
169
+ msgid "&mdash; Select &mdash;"
170
+ msgstr ""
171
+
172
+ #: src/Admin/WordpressAdmin.php:65
173
+ msgctxt "(Admin)"
174
+ msgid "Privacy & GDPR Settings"
175
+ msgstr "Απορρήτου & GDPR ρυθμίσεις"
176
+
177
+ #: src/Admin/WordpressAdmin.php:66
178
+ msgctxt "(Admin)"
179
+ msgid "Privacy"
180
+ msgstr "Προστασία Απορρήτου"
181
+
182
+ #: src/Components/Consent/AdminTabConsent.php:30
183
+ #: src/Components/Consent/AdminTabConsent.php:49
184
+ msgctxt "(Admin)"
185
+ msgid "Consent"
186
+ msgstr "Συγκατάθεση"
187
+
188
+ #: src/Components/Consent/AdminTabConsent.php:157
189
+ msgctxt "(Admin)"
190
+ msgid "Consent slug is a required field!"
191
+ msgstr "Συγκατάθεση slug είναι ένα απαιτούμενο πεδίο!"
192
+
193
+ #: src/Components/Consent/AdminTabConsent.php:162
194
+ msgctxt "(Admin)"
195
+ msgid ""
196
+ "You may only use alphanumeric characters, dash and underscore in the consent "
197
+ "slug field."
198
+ msgstr ""
199
+
200
+ #: src/Components/Consent/AdminTabConsent.php:167
201
+ msgctxt "(Admin)"
202
+ msgid "Consent title is a required field!"
203
+ msgstr "Συγκατάθεση τίτλος το πεδίο είναι υποχρεωτικό!"
204
+
205
+ #: src/Components/Consent/ConsentManager.php:46
206
+ #: views/modules/contact-form-7/content-privacy.php:2
207
+ #: views/modules/wordpress-comments/terms-checkbox.php:14
208
+ #: views/modules/wordpress-user/registration-terms-checkbox.php:15
209
+ #, php-format
210
+ msgid "I accept the %sPrivacy Policy%s"
211
+ msgstr "Αποδέχομαι την %sΠολιτική Προστασίας Προσωπικών Δεδομένων%s"
212
+
213
+ #: src/Components/Consent/ConsentManager.php:50
214
+ #: src/Components/Consent/ConsentManager.php:69
215
+ msgctxt "(Admin)"
216
+ msgid ""
217
+ "This consent is not visible by default. If someone wishes to withdraw it, "
218
+ "they should simply request to delete all their data."
219
+ msgstr ""
220
+ "Αυτή η συγκατάθεση δεν είναι ορατή από προεπιλογή. Αν κάποιος επιθυμεί να "
221
+ "την αποσύρει, θα πρέπει απλώς να ζητήσει τη διαγραφή όλων των δεδομένων."
222
+
223
+ #: src/Components/Consent/ConsentManager.php:65
224
+ #, php-format
225
+ msgid "I accept the %sTerms & Conditions%s"
226
+ msgstr "Αποδέχομαι τους %sΌρους & Προϋποθέσεις%s"
227
+
228
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
229
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
230
+ #: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
231
+ msgctxt "(Admin)"
232
+ msgid "Privacy Policy"
233
+ msgstr "Πολιτική Απορρήτου"
234
+
235
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
236
+ msgctxt "(Admin)"
237
+ msgid "Company information"
238
+ msgstr "ΠΛΗΡΟΦΟΡΙΕΣ ΓΙΑ ΤΗΝ ΕΤΑΙΡΙΑ"
239
+
240
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
241
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
242
+ msgctxt "(Admin)"
243
+ msgid "Company Name"
244
+ msgstr "Όνομα Εταιρίας"
245
+
246
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
247
+ msgctxt "(Admin)"
248
+ msgid "Company Email"
249
+ msgstr "Εταιρικό email"
250
+
251
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
252
+ msgctxt "(Admin)"
253
+ msgid "Company Location"
254
+ msgstr "Τοποθεσία της εταιρείας"
255
+
256
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
257
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
258
+ msgctxt "(Admin)"
259
+ msgid "Representative Contact Name"
260
+ msgstr "Αντιπροσωπευτικό όνομα επαφής"
261
+
262
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
263
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
264
+ msgctxt "(Admin)"
265
+ msgid "Representative Contact Email"
266
+ msgstr "Εκπρόσωπος επικοινωνίας Email"
267
+
268
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
269
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
270
+ msgctxt "(Admin)"
271
+ msgid "Representative Contact Phone"
272
+ msgstr "Τηλέφωνο επικοινωνίας του εκπροσώπου"
273
+
274
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
275
+ msgctxt "(Admin)"
276
+ msgid "Data Protection Authority"
277
+ msgstr "Αρχή προστασίας δεδομένων"
278
+
279
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
280
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
281
+ msgctxt "(Admin)"
282
+ msgid "Data Protection Authority Website"
283
+ msgstr "Δικτυακός τόπος της αρχής προστασίας δεδομένων"
284
+
285
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
286
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
287
+ msgctxt "(Admin)"
288
+ msgid "Data Protection Authority Email"
289
+ msgstr "Ηλεκτρονικό ταχυδρομείο αρχής προστασίας δεδομένων"
290
+
291
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
292
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
293
+ msgctxt "(Admin)"
294
+ msgid "Data Protection Authority Phone"
295
+ msgstr "Τηλέφωνο αρχής προστασίας δεδομένων"
296
+
297
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
298
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
299
+ msgctxt "(Admin)"
300
+ msgid "Data Protection Officer"
301
+ msgstr "Υπεύθυνος προστασίας δεδομένων"
302
+
303
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
304
+ msgctxt "(Admin)"
305
+ msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
306
+ msgstr ""
307
+ "Γνωσιακή βάση: χρειάζεται να διορίσει έναν υπεύθυνο προστασίας δεδομένων;"
308
+
309
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
310
+ msgctxt "(Admin)"
311
+ msgid "Data Protection Officer Name"
312
+ msgstr "Όνομα υπευθύνου προστασίας δεδομένων"
313
+
314
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
315
+ msgctxt "(Admin)"
316
+ msgid "Data Protection Officer Email"
317
+ msgstr "Ηλεκτρονικό ταχυδρομείο υπευθύνου προστασίας δεδομένων"
318
+
319
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
320
+ msgctxt "(Admin)"
321
+ msgid "Contact Email"
322
+ msgstr "Email επικοινωνίας"
323
+
324
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
325
+ msgctxt "(Admin)"
326
+ msgid "Representative Contact"
327
+ msgstr "Εκπρόσωπος επικοινωνίας"
328
+
329
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
330
+ msgctxt "(Admin)"
331
+ msgid "Knowledge base: Do I need to appoint an EU-based representative?"
332
+ msgstr "Γνωσιακή Βάση : πρέπει να διορίζει έναν εκπρόσωπο που εδρεύει στην ΕΕ;"
333
+
334
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
335
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
336
+ msgctxt "(Admin)"
337
+ msgid "DPO Name"
338
+ msgstr ""
339
+
340
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
341
+ msgctxt "(Admin)"
342
+ msgid "Save & Generate Policy"
343
+ msgstr ""
344
+
345
+ #: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
346
+ #: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
347
+ #: views/themes/storefront/footer.php:3
348
+ #: views/themes/twentyseventeen/footer.php:3
349
+ #: views/themes/twentysixteen/footer.php:4
350
+ msgid "Privacy Policy"
351
+ msgstr "Προσωπικά δεδομένα"
352
+
353
+ #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
354
+ msgid "This page is currently disabled."
355
+ msgstr "Αυτήν τη στιγμή αυτή η σελίδα είναι απενεργοποιημένη."
356
+
357
+ #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
358
+ #: src/Installer/Installer.php:279
359
+ #: src/Installer/Steps/ConfigurationPages.php:55
360
+ #: views/themes/storefront/footer.php:7
361
+ #: views/themes/twentyseventeen/footer.php:7
362
+ #: views/themes/twentysixteen/footer.php:9
363
+ msgid "Privacy Tools"
364
+ msgstr "Επεξεργασία προσωπικών δεδομένων"
365
+
366
+ #: src/Components/Support/AdminTabSupport.php:13
367
+ #: src/Components/Support/AdminTabSupport.php:20
368
+ msgctxt "(Admin)"
369
+ msgid "Support"
370
+ msgstr "Υποστήριξη"
371
+
372
+ #: src/Components/WordpressComments/WordpressComments.php:90
373
+ #, php-format
374
+ msgid ""
375
+ "%sERROR:%s You need to accept the terms and conditions to post a comment."
376
+ msgstr ""
377
+ "%sERROR:%s Πρέπει να αποδεχτείτε τους όρους και τις προϋποθέσεις για να "
378
+ "δημοσιεύσετε ένα σχόλιο."
379
+
380
+ #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
381
+ #: views/privacy-tools/notices.php:19
382
+ msgid "We have received your request and will reply within 30 days."
383
+ msgstr "Λάβαμε το αίτημά σας και θα απαντήσουμε εντός 30 ημερών."
384
+
385
+ #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
386
+ #: views/privacy-tools/notices.php:15
387
+ msgid "Consent withdrawn."
388
+ msgstr "Η συγκατάθεση αποσύρεται."
389
+
390
+ #: src/Components/WordpressUser/RegistrationForm.php:42
391
+ msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
392
+ msgstr ""
393
+ "<strong>ΣΦΑΛΜΑ</ strong>: Πρέπει να αποδεχτείτε τους όρους και τις "
394
+ "προϋποθέσεις."
395
+
396
+ #: src/Components/WordpressUser/WordpressUser.php:63
397
+ #: src/Components/WordpressUser/WordpressUser.php:64
398
+ #: views/modules/wordpress-user/dashboard/data-page/header.php:2
399
+ msgctxt "(Admin)"
400
+ msgid "Privacy Tools"
401
+ msgstr "Εργαλεία απορρήτου"
402
+
403
+ #: src/DataSubject/AdminTabDataSubject.php:27
404
+ #: src/DataSubject/AdminTabDataSubject.php:41
405
+ msgctxt "(Admin)"
406
+ msgid "Data Subjects"
407
+ msgstr "Υποκείμενα των δεδομένων"
408
+
409
+ #: src/DataSubject/DataRepository.php:143
410
+ msgid "Data exported"
411
+ msgstr "Εξαγόμενα δεδομένα"
412
+
413
+ #: src/DataSubject/DataRepository.php:158
414
+ msgid "Data export request"
415
+ msgstr "Αίτημα εξαγωγής δεδομένων"
416
+
417
+ #: src/DataSubject/DataRepository.php:171
418
+ msgid "Data removed"
419
+ msgstr "Τα δεδομένα καταργήθηκαν"
420
+
421
+ #: src/DataSubject/DataRepository.php:186
422
+ msgid "Data removal request"
423
+ msgstr "Αίτημα κατάργησης δεδομένων"
424
+
425
+ #: src/DataSubject/DataSubjectIdentificator.php:65
426
+ #: src/DataSubject/DataSubjectIdentificator.php:82
427
+ msgid "Your personal data on"
428
+ msgstr "Τα προσωπικά σας δεδομένα στο"
429
+
430
+ #: src/Helpers.php:27
431
+ msgctxt "(Admin)"
432
+ msgid "Austria"
433
+ msgstr "Αυστρία"
434
+
435
+ #: src/Helpers.php:28
436
+ msgctxt "(Admin)"
437
+ msgid "Belgium"
438
+ msgstr "Βέλγιο"
439
+
440
+ #: src/Helpers.php:29
441
+ msgctxt "(Admin)"
442
+ msgid "Bulgaria"
443
+ msgstr "Βουλγαρία"
444
+
445
+ #: src/Helpers.php:30
446
+ msgctxt "(Admin)"
447
+ msgid "Croatia"
448
+ msgstr "Κροατία"
449
+
450
+ #: src/Helpers.php:31
451
+ msgctxt "(Admin)"
452
+ msgid "Cyprus"
453
+ msgstr "Κύπρος"
454
+
455
+ #: src/Helpers.php:32
456
+ msgctxt "(Admin)"
457
+ msgid "Czech Republic"
458
+ msgstr "Τσεχική Δημοκρατία"
459
+
460
+ #: src/Helpers.php:33
461
+ msgctxt "(Admin)"
462
+ msgid "Denmark"
463
+ msgstr "Δανία"
464
+
465
+ #: src/Helpers.php:34
466
+ msgctxt "(Admin)"
467
+ msgid "Estonia"
468
+ msgstr "Εσθονία"
469
+
470
+ #: src/Helpers.php:35
471
+ msgctxt "(Admin)"
472
+ msgid "Finland"
473
+ msgstr "Φινλανδία"
474
+
475
+ #: src/Helpers.php:36
476
+ msgctxt "(Admin)"
477
+ msgid "France"
478
+ msgstr "Γαλλία"
479
+
480
+ #: src/Helpers.php:37
481
+ msgctxt "(Admin)"
482
+ msgid "Germany"
483
+ msgstr "Γερμανία"
484
+
485
+ #: src/Helpers.php:38
486
+ msgctxt "(Admin)"
487
+ msgid "Greece"
488
+ msgstr "Ελλάδα"
489
+
490
+ #: src/Helpers.php:39
491
+ msgctxt "(Admin)"
492
+ msgid "Hungary"
493
+ msgstr "Ουγγαρία"
494
+
495
+ #: src/Helpers.php:40
496
+ msgctxt "(Admin)"
497
+ msgid "Ireland"
498
+ msgstr "Ιρλανδία"
499
+
500
+ #: src/Helpers.php:41
501
+ msgctxt "(Admin)"
502
+ msgid "Italy"
503
+ msgstr "Ιταλία"
504
+
505
+ #: src/Helpers.php:42
506
+ msgctxt "(Admin)"
507
+ msgid "Latvia"
508
+ msgstr "Λετονία"
509
+
510
+ #: src/Helpers.php:43
511
+ msgctxt "(Admin)"
512
+ msgid "Lithuania"
513
+ msgstr "Λιθουανία"
514
+
515
+ #: src/Helpers.php:44
516
+ msgctxt "(Admin)"
517
+ msgid "Luxembourg"
518
+ msgstr "Λουξεμβούργο"
519
+
520
+ #: src/Helpers.php:45
521
+ msgctxt "(Admin)"
522
+ msgid "Malta"
523
+ msgstr "Μάλτα"
524
+
525
+ #: src/Helpers.php:46
526
+ msgctxt "(Admin)"
527
+ msgid "Netherlands"
528
+ msgstr "Ολλανδία"
529
+
530
+ #: src/Helpers.php:47
531
+ msgctxt "(Admin)"
532
+ msgid "Poland"
533
+ msgstr "Πολωνία"
534
+
535
+ #: src/Helpers.php:48
536
+ msgctxt "(Admin)"
537
+ msgid "Portugal"
538
+ msgstr "Πορτογαλία"
539
+
540
+ #: src/Helpers.php:49
541
+ msgctxt "(Admin)"
542
+ msgid "Romania"
543
+ msgstr "Ρουμανία"
544
+
545
+ #: src/Helpers.php:50
546
+ msgctxt "(Admin)"
547
+ msgid "Slovakia"
548
+ msgstr "Σλοβακία"
549
+
550
+ #: src/Helpers.php:51
551
+ msgctxt "(Admin)"
552
+ msgid "Slovenia"
553
+ msgstr "Σλοβενία"
554
+
555
+ #: src/Helpers.php:52
556
+ msgctxt "(Admin)"
557
+ msgid "Spain"
558
+ msgstr "Ισπανία"
559
+
560
+ #: src/Helpers.php:53
561
+ msgctxt "(Admin)"
562
+ msgid "Sweden"
563
+ msgstr "Σουηδία"
564
+
565
+ #: src/Helpers.php:54
566
+ msgctxt "(Admin)"
567
+ msgid "United Kingdom"
568
+ msgstr "Ηνωμένο Βασίλειο"
569
+
570
+ #: src/Helpers.php:69
571
+ msgctxt "(Admin)"
572
+ msgid "Iceland"
573
+ msgstr "Ισλανδία"
574
+
575
+ #: src/Helpers.php:70
576
+ msgctxt "(Admin)"
577
+ msgid "Norway"
578
+ msgstr "Νορβηγία"
579
+
580
+ #: src/Helpers.php:71
581
+ msgctxt "(Admin)"
582
+ msgid "Liechtenstein"
583
+ msgstr "Λιχτενστάιν"
584
+
585
+ #: src/Helpers.php:72
586
+ msgctxt "(Admin)"
587
+ msgid "Switzerland"
588
+ msgstr "Ελβετία"
589
+
590
+ #: src/Helpers.php:73
591
+ msgctxt "(Admin)"
592
+ msgid "United States"
593
+ msgstr "Ηνωμένες Πολιτείες"
594
+
595
+ #: src/Helpers.php:74
596
+ msgctxt "(Admin)"
597
+ msgid "Rest of the world"
598
+ msgstr "Υπόλοιπος κόσμος"
599
+
600
+ #: src/Helpers.php:145
601
+ msgid "An error has occurred. Please contact the site administrator."
602
+ msgstr "Παρουσιάστηκε σφάλμα. Επικοινωνήστε με τον διαχειριστή του ιστότοπου."
603
+
604
+ #: src/Installer/Installer.php:135
605
+ msgctxt "(Admin)"
606
+ msgid "Setup Wizard"
607
+ msgstr ""
608
+
609
+ #: src/Installer/Steps/ConfigurationPages.php:23
610
+ #: src/Installer/Steps/PolicySettings.php:23
611
+ #: src/Installer/Steps/PolicySettings.php:48
612
+ msgctxt "(Admin)"
613
+ msgid "&mdash; Create a new page &mdash;"
614
+ msgstr "&mdash; Δημιουργήστε μια νέα σελίδα &mdash;"
615
+
616
+ #: src/Installer/Steps/PolicySettings.php:38
617
+ msgctxt "(Admin)"
618
+ msgid ""
619
+ "We have automatically selected your WooCommerce Terms & Conditions page."
620
+ msgstr ""
621
+ "Έχουμε επιλέξει αυτόματα τη σελίδα σας όρους WooCommerce & προϋποθέσεις."
622
+
623
+ #: src/Modules/ContactForm7/ContactForm7.php:35
624
+ msgctxt "(Admin)"
625
+ msgid "gdpr terms txt"
626
+ msgstr ""
627
+
628
+ #: src/Router.php:80 src/Router.php:92 src/Router.php:125 src/Router.php:141
629
+ #, php-format
630
+ msgid "Nonce error for action \"%s\". Please go back and try again!"
631
+ msgstr "Σφάλμα nonce για ενέργεια \"%s\". Επιστρέψτε και δοκιμάστε ξανά!"
632
+
633
+ #: src/Router.php:149
634
+ msgctxt "(Admin)"
635
+ msgid "You do not have the required permissions to perform this action!"
636
+ msgstr ""
637
+ "Δεν έχετε τα απαιτούμενα δικαιώματα για να εκτελέσετε αυτήν την ενέργεια!"
638
+
639
+ #: views/admin/consent.php:3
640
+ msgctxt "(Admin)"
641
+ msgid "Default consent types"
642
+ msgstr "Προεπιλεγμένοι τύποι συγκατάθεσης"
643
+
644
+ #: views/admin/consent.php:4
645
+ msgctxt "(Admin)"
646
+ msgid ""
647
+ "These are the consent types that have been automatically registered by the "
648
+ "framework or a plugin."
649
+ msgstr ""
650
+
651
+ #: views/admin/consent.php:7 views/admin/consent.php:52
652
+ msgctxt "(Admin)"
653
+ msgid "Slug"
654
+ msgstr ""
655
+
656
+ #: views/admin/consent.php:8 views/admin/consent.php:38
657
+ #: views/admin/consent.php:60
658
+ msgctxt "(Admin)"
659
+ msgid "Title"
660
+ msgstr "Τίτλος"
661
+
662
+ #: views/admin/consent.php:9 views/admin/consent.php:41
663
+ #: views/admin/consent.php:63
664
+ msgctxt "(Admin)"
665
+ msgid "Description"
666
+ msgstr "Περιγραφή"
667
+
668
+ #: views/admin/consent.php:10
669
+ msgctxt "(Admin)"
670
+ msgid "Visibility"
671
+ msgstr "Εμφάνιση"
672
+
673
+ #: views/admin/consent.php:18
674
+ msgctxt "(Admin)"
675
+ msgid "Visible"
676
+ msgstr "Ορατό"
677
+
678
+ #: views/admin/consent.php:20
679
+ msgctxt "(Admin)"
680
+ msgid "Hidden"
681
+ msgstr "Κρυφό"
682
+
683
+ #: views/admin/consent.php:29
684
+ msgctxt "(Admin)"
685
+ msgid "Custom consent types"
686
+ msgstr " Προσαρμοσμένοι τύποι συγκατάθεσης"
687
+
688
+ #: views/admin/consent.php:30
689
+ msgctxt "(Admin)"
690
+ msgid ""
691
+ "Here you can add custom consent types to track. They will not be used "
692
+ "anywhere by default - you will need to build an integration for each of them."
693
+ msgstr ""
694
+ "Εδώ μπορείτε να προσθέσετε προσαρμοσμένους τύπους συγκατάθεσης για "
695
+ "παρακολούθηση. Δεν θα χρησιμοποιηθούν οπουδήποτε από προεπιλογή - θα "
696
+ "χρειαστεί να οικοδομήσετε μια ενοποίηση για καθένα από αυτά."
697
+
698
+ #: views/admin/consent.php:35
699
+ msgctxt "(Admin)"
700
+ msgid "Machine-readable slug"
701
+ msgstr ""
702
+
703
+ #: views/admin/consent.php:44 views/admin/consent.php:68
704
+ msgctxt "(Admin)"
705
+ msgid "Visible?"
706
+ msgstr ""
707
+
708
+ #: views/admin/consent.php:72
709
+ msgctxt "(Admin)"
710
+ msgid "Remove"
711
+ msgstr "Αφαίρεση"
712
+
713
+ #: views/admin/consent.php:93
714
+ msgctxt "(Admin)"
715
+ msgid "Additional info"
716
+ msgstr "Επιπλέον πληροφορίες"
717
+
718
+ #: views/admin/consent.php:95
719
+ msgctxt "(Admin)"
720
+ msgid ""
721
+ "This text will be displayed to your data subjects on the Privacy Tools page."
722
+ msgstr ""
723
+ "Αυτό το κείμενο θα εμφανιστεί στα υποκείμενα των δεδομένων σας στη σελίδα "
724
+ "εργαλεία απορρήτου."
725
+
726
+ #: views/admin/data-subjects/search-form.php:2
727
+ msgctxt "(Admin)"
728
+ msgid ""
729
+ "On this page, you can find which data subjects personal data you are storing "
730
+ "and download, export or delete it."
731
+ msgstr ""
732
+ "Σε αυτή τη σελίδα μπορείτε να βρείτε ποια δεδομένα θέματα προσωπικών "
733
+ "δεδομένων, μπορείτε να αποθηκεύετε και να κατεβάσετε, εξαγωγή ή να "
734
+ "διαγράψετε αυτό."
735
+
736
+ #: views/admin/data-subjects/search-form.php:10
737
+ msgctxt "(Admin)"
738
+ msgid "Find data subject by email"
739
+ msgstr "Βρείτε το υποκείμενο των δεδομένων μέσω ηλεκτρονικού ταχυδρομείου"
740
+
741
+ #: views/admin/data-subjects/search-form.php:11
742
+ msgctxt "(Admin)"
743
+ msgid "Email address"
744
+ msgstr "Διεύθυνση Email"
745
+
746
+ #: views/admin/data-subjects/search-form.php:16
747
+ msgctxt "(Admin)"
748
+ msgid "Search"
749
+ msgstr "Αναζήτηση"
750
+
751
+ #: views/admin/data-subjects/search-results.php:7
752
+ msgctxt "(Admin)"
753
+ msgid "Username"
754
+ msgstr "Όνομα χρήστη"
755
+
756
+ #: views/admin/data-subjects/search-results.php:12
757
+ msgctxt "(Admin)"
758
+ msgid "is not a registered user."
759
+ msgstr "δεν είναι εγγεγραμμένος χρήστης."
760
+
761
+ #: views/admin/data-subjects/search-results.php:16
762
+ msgctxt "(Admin)"
763
+ msgid "Download data (html)"
764
+ msgstr "Λήψη δεδομένων (html)"
765
+
766
+ #: views/admin/data-subjects/search-results.php:17
767
+ msgctxt "(Admin)"
768
+ msgid "Export data (json)"
769
+ msgstr "Εξαγωγή δεδομένων (json)"
770
+
771
+ #: views/admin/data-subjects/search-results.php:21
772
+ msgctxt "(Admin)"
773
+ msgid ""
774
+ "This user has admin capabilities. Deleting data via this interface is "
775
+ "disabled."
776
+ msgstr ""
777
+ "Αυτός ο χρήστης έχει τις δυνατότητες διαχείρισης. Διαγραφή δεδομένων μέσω "
778
+ "αυτής της διασύνδεσης είναι απενεργοποιημένη."
779
+
780
+ #: views/admin/data-subjects/search-results.php:24
781
+ msgctxt "(Admin)"
782
+ msgid "Anonymize data"
783
+ msgstr "Ανωνυμία δεδομένων"
784
+
785
+ #: views/admin/data-subjects/search-results.php:25
786
+ msgctxt "(Admin)"
787
+ msgid "Delete data"
788
+ msgstr "Διαγραφή Δεδομένων"
789
+
790
+ #: views/admin/data-subjects/search-results.php:29
791
+ msgctxt "(Admin)"
792
+ msgid "No data found!"
793
+ msgstr "Δεν βρέθηκαν δεδομένα"
794
+
795
+ #: views/admin/general/delete-action-email.php:5
796
+ #: views/admin/general/export-action-email.php:5
797
+ #: views/installer/steps/configuration-settings.php:29
798
+ #: views/installer/steps/configuration-settings.php:79
799
+ msgid "Email address"
800
+ msgstr "Διεύθυνση ηλεκτρονικού ταχυδρομείου"
801
+
802
+ #: views/admin/general/delete-action-reassign.php:3
803
+ #: views/installer/steps/configuration-settings.php:50
804
+ msgctxt "(Admin)"
805
+ msgid "Delete content"
806
+ msgstr "Διαγραφή περιεχομένου"
807
+
808
+ #: views/admin/general/delete-action-reassign.php:6
809
+ #: views/installer/steps/configuration-settings.php:53
810
+ msgctxt "(Admin)"
811
+ msgid "Reassign content to a user"
812
+ msgstr "Αντιστοιχίστε εκ νέου το περιεχόμενο σε ένα χρήστη"
813
+
814
+ #: views/admin/general/delete-action-reassign.php:10
815
+ msgctxt "(Admin)"
816
+ msgid ""
817
+ "If the user has submitted any content on your site, should it be deleted or "
818
+ "reassigned to another user?"
819
+ msgstr ""
820
+ "Εάν ο χρήστης έχει υποβάλει οποιοδήποτε περιεχόμενο στην ιστοσελίδα σας, "
821
+ "πρέπει να διαγραφεί και να εκχωρηθούν σε κάποιον άλλο χρήστη;"
822
+
823
+ #: views/admin/general/description-data-page.php:2
824
+ msgctxt "(Admin)"
825
+ msgid ""
826
+ "Select the page where users can go to control their data. This page must "
827
+ "contain the [gdpr_privacy_tools] shortcode."
828
+ msgstr ""
829
+ "Επιλέξτε τη σελίδα όπου οι χρήστες μπορούν να πάνε για τον έλεγχο των "
830
+ "δεδομένων τους. Αυτή η σελίδα πρέπει να περιέχει το shortcode "
831
+ "[gdpr_privacy_tools]."
832
+
833
+ #: views/admin/general/enable.php:9
834
+ msgctxt "(Admin)"
835
+ msgid "Enable the view, export and forget functionality for users and visitors"
836
+ msgstr ""
837
+ "Ενεργοποιήσετε την προβολή, να εξαγάγετε και να ξεχάσετε τη λειτουργικότητα "
838
+ "για τους χρήστες και επισκέπτες."
839
+
840
+ #: views/admin/general/enable.php:12
841
+ msgctxt "(Admin)"
842
+ msgid ""
843
+ "Enable the Privacy Tools page on front-end and dashboard. This allows "
844
+ "visitors to request viewing and deleting their personal data and withdraw "
845
+ "consents."
846
+ msgstr ""
847
+ "Ενεργοποίηση της σελίδας εργαλείων προστασίας προσωπικών δεδομένων για front-"
848
+ "end και ταμπλό. Αυτό επιτρέπει στους επισκέπτες να ζητήσουν προβολή και "
849
+ "διαγραφή των προσωπικών τους δεδομένων και να αποσύρουν τις συναινέσεις."
850
+
851
+ #: views/admin/general/theme-compatibility.php:9
852
+ #: views/installer/steps/integrations.php:21
853
+ msgctxt "(Admin)"
854
+ msgid ""
855
+ "Automatically add Privacy Policy and Privacy Tools links to your site footer."
856
+ msgstr ""
857
+ "Αυτόματα προσθέστε πολιτική απορρήτου και προστασίας προσωπικών δεδομένων "
858
+ "εργαλεία συνδέσεις υποσέλιδο ιστοσελίδα σας."
859
+
860
+ #: views/admin/notices/header.php:4 views/admin/settings-page.php:3
861
+ #: views/installer/header.php:23
862
+ msgctxt "(Admin)"
863
+ msgid "The GDPR Framework"
864
+ msgstr ""
865
+
866
+ #: views/admin/notices/helper-autoinstall.php:2
867
+ msgctxt "(Admin)"
868
+ msgid ""
869
+ "A Privacy Policy page has been created, but it is empty. You can generate a "
870
+ "policy template on this page."
871
+ msgstr ""
872
+ "Έχει δημιουργηθεί μια σελίδα Πολιτική προστασίας προσωπικών δεδομένων, αλλά "
873
+ "είναι κενή. Μπορείτε να δημιουργήσετε ένα πρότυπο πολιτικής σε αυτήν τη "
874
+ "σελίδα."
875
+
876
+ #: views/admin/notices/helper-policy.php:2
877
+ msgctxt "(Admin)"
878
+ msgid ""
879
+ "Heads up - your Privacy Policy still requires some attention. Find the "
880
+ "places marked with [TODO] and replace them with real content!"
881
+ msgstr ""
882
+ "Heads up - πολιτική απορρήτου σας εξακολουθεί να απαιτεί κάποια προσοχή. "
883
+ "Βρείτε τα σημεία που σημειώνονται με [TODO] και την αντικατάστασή τους με "
884
+ "πραγματικό περιεχόμενο!"
885
+
886
+ #: views/admin/notices/helper-tools.php:2
887
+ msgctxt "(Admin)"
888
+ msgid "The contents of this page should contain the [gdpr_tools] shortcode."
889
+ msgstr ""
890
+ "Το περιεχόμενο αυτής της σελίδας θα πρέπει να περιέχει το shortcode "
891
+ "[gdpr_tools]."
892
+
893
+ #: views/admin/privacy-policy/description-policy-page.php:2
894
+ msgctxt "(Admin)"
895
+ msgid "Select the page which will contain your Privacy Policy"
896
+ msgstr "Επιλέξτε τη σελίδα που θα περιέχει την πολιτική απορρήτου σας"
897
+
898
+ #: views/admin/privacy-policy/generated.php:3
899
+ msgctxt "(Admin)"
900
+ msgid "Your Privacy Policy has been generated."
901
+ msgstr "Η Πολιτική προστασίας προσωπικών δεδομένων σας έχει δημιουργηθεί."
902
+
903
+ #: views/admin/privacy-policy/generated.php:20
904
+ msgctxt "(Admin)"
905
+ msgid "&laquo; Back"
906
+ msgstr "&laquo; Πίσω"
907
+
908
+ #: views/admin/privacy-policy/header.php:2
909
+ msgctxt "(Admin)"
910
+ msgid ""
911
+ "This page allows you to generate a Privacy Policy based on the information "
912
+ "you entered below."
913
+ msgstr ""
914
+ "Η σελίδα αυτή σας επιτρέπει να δημιουργήσετε μια πολιτική απορρήτου που "
915
+ "βασίζεται στις πληροφορίες που καθορίσατε παρακάτω."
916
+
917
+ #: views/admin/settings-page.php:31
918
+ #, php-format
919
+ msgctxt "(Admin)"
920
+ msgid "The GDPR Framework. Built with &#9829; by %sCodelight%s."
921
+ msgstr ""
922
+
923
+ #: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
924
+ msgctxt "(Admin)"
925
+ msgid "Need more info?"
926
+ msgstr "Χρειάζεστε περισσότερες πληροφορίες;"
927
+
928
+ #: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
929
+ msgctxt "(Admin)"
930
+ msgid "Site Owner's guide to GDPR"
931
+ msgstr ""
932
+
933
+ #: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
934
+ msgctxt "(Admin)"
935
+ msgid "Read the full guide on GDPR compliance."
936
+ msgstr "Διαβάστε τον πλήρη οδηγό σχετικά με τη συμμόρφωση του GDPR."
937
+
938
+ #: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
939
+ msgctxt "(Admin)"
940
+ msgid "Knowledge base"
941
+ msgstr "Γνωσιακή Βάση"
942
+
943
+ #: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
944
+ msgctxt "(Admin)"
945
+ msgid "Check out the knowledge base for common questions and answers."
946
+ msgstr "Ελέγξτε την Γνωσιακή βάση για συχνές ερωτήσεις και απαντήσεις."
947
+
948
+ #: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
949
+ msgctxt "(Admin)"
950
+ msgid "Developer's guide to GDPR"
951
+ msgstr "Οδηγός για προγραμματιστές να GDPR"
952
+
953
+ #: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
954
+ msgctxt "(Admin)"
955
+ msgid "We have a thorough guide to help making custom sites compliant."
956
+ msgstr ""
957
+
958
+ #: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
959
+ msgctxt "(Admin)"
960
+ msgid "Need help?"
961
+ msgstr "Χρειάζεστε βοήθεια;"
962
+
963
+ #: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
964
+ msgctxt "(Admin)"
965
+ msgid "Submit a support request"
966
+ msgstr "Υποβάλετε ένα αίτημα υποστήριξης"
967
+
968
+ #: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
969
+ msgctxt "(Admin)"
970
+ msgid ""
971
+ "Found a bug or problem with the plugin? Post in the wordpress.org support "
972
+ "forum."
973
+ msgstr ""
974
+ "Βρέθηκε ένα bug ή πρόβλημα με το plugin; Δημοσίευση στα φόρουμ υποστήριξης "
975
+ "της wordpress.org."
976
+
977
+ #: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
978
+ msgctxt "(Admin)"
979
+ msgid "Request a consultation"
980
+ msgstr "Αίτηση διαβούλευσης"
981
+
982
+ #: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
983
+ msgctxt "(Admin)"
984
+ msgid ""
985
+ "Need development or legal assistance in making your site compliant? We can "
986
+ "help!"
987
+ msgstr ""
988
+ "Ανάγκη ανάπτυξης ή νομική βοήθεια στο να καταστεί συμβατό με το site σας; "
989
+ "Μπορούμε να σας βοηθήσουμε!"
990
+
991
+ #: views/admin/wizard-buttons.php:2
992
+ msgctxt "(Admin)"
993
+ msgid "Restart setup wizard"
994
+ msgstr "Κάντε επανεκκίνηση του οδηγού εγκατάστασης"
995
+
996
+ #: views/email/action-export.php:8 views/email/action-forget.php:12
997
+ msgctxt "(Admin)"
998
+ msgid ""
999
+ "This email is just for your information. You don't need to take any action"
1000
+ msgstr ""
1001
+ "Αυτό το email είναι μόνο για τις πληροφορίες σας. Δεν χρειάζεται να προβείτε "
1002
+ "σε καμία ενέργεια"
1003
+
1004
+ #: views/email/action-forget.php:8
1005
+ msgctxt "(Admin)"
1006
+ msgid "The data subject had a user account on your website."
1007
+ msgstr ""
1008
+ "Το υποκείμενο των δεδομένων είχε ένα λογαριασμό χρήστη στην ιστοσελίδα σας."
1009
+
1010
+ #: views/email/identify-data-subject.php:2
1011
+ msgid "Someone has requested access to your data on"
1012
+ msgstr "Κάποιος έχει ζητήσει πρόσβαση στα δεδομένα σας στο"
1013
+
1014
+ #: views/email/identify-data-subject.php:3
1015
+ msgid "If this was a mistake, just ignore this email and nothing will happen."
1016
+ msgstr ""
1017
+ "Εάν αυτό ήταν λάθος, απλά αγνοήστε αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου "
1018
+ "και τίποτα δεν θα συμβεί."
1019
+
1020
+ #: views/email/identify-data-subject.php:4
1021
+ msgid "To manage your data, visit the following address:"
1022
+ msgstr ""
1023
+ "Για να διαχειριστείτε τα δεδομένα σας, επισκεφθείτε την ακόλουθη διεύθυνση:"
1024
+
1025
+ #: views/email/identify-data-subject.php:10
1026
+ msgid "This link is valid for 15 minutes."
1027
+ msgstr "Αυτός ο σύνδεσμος ισχύει για 15 λεπτά."
1028
+
1029
+ #: views/email/no-data.php:2
1030
+ msgid "Someone has requested information about your personal data on"
1031
+ msgstr ""
1032
+ "Κάποιος έχει ζητήσει πληροφορίες σχετικά με τα προσωπικά σας δεδομένα στο"
1033
+
1034
+ #: views/email/no-data.php:3
1035
+ msgid "None of your personal data is stored on"
1036
+ msgstr "Κανένα από τα προσωπικά σας δεδομένα δεν αποθηκεύεται στο"
1037
+
1038
+ #: views/email/no-data.php:5
1039
+ msgid ""
1040
+ "If this was a mistake or you did not request this email, just ignore it and "
1041
+ "nothing will happen."
1042
+ msgstr ""
1043
+ "Εάν αυτό ήταν λάθος ή δεν ζητήσατε αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου, "
1044
+ "απλώς το αγνοήστε και δεν θα συμβεί τίποτα."
1045
+
1046
+ #: views/email/request-export.php:13 views/email/request-forget.php:13
1047
+ msgctxt "(Admin)"
1048
+ msgid "As a reminder: according to GDPR, you have 30 days to comply."
1049
+ msgstr ""
1050
+ "Ως μια υπενθύμιση: σύμφωνα με το GDPR, έχετε 30 ημέρες για να συμμορφωθεί."
1051
+
1052
+ #: views/global/delete-action.php:2
1053
+ msgctxt "(Admin)"
1054
+ msgid "Automatically anonymize data"
1055
+ msgstr "Αυτόματη ανώνυμη επεξεργασία δεδομένων"
1056
+
1057
+ #: views/global/delete-action.php:5
1058
+ msgctxt "(Admin)"
1059
+ msgid "Automatically delete data"
1060
+ msgstr "Αυτόματη διαγραφή δεδομένων"
1061
+
1062
+ #: views/global/delete-action.php:9
1063
+ msgctxt "(Admin)"
1064
+ msgid "Automatically anonymize data and notify me via email"
1065
+ msgstr "Ανωνυμία δεδομένων αυτόματα και να ειδοποιούμαι μέσω e-mail"
1066
+
1067
+ #: views/global/delete-action.php:13
1068
+ msgctxt "(Admin)"
1069
+ msgid "Automatically delete data and notify me via email"
1070
+ msgstr "Αυτόματη διαγραφή δεδομένων και να ειδοποιούμαι μέσω e-mail"
1071
+
1072
+ #: views/global/delete-action.php:16 views/global/export-action.php:10
1073
+ msgctxt "(Admin)"
1074
+ msgid "Only notify me via email"
1075
+ msgstr "Να ειδοποιούμαι μόνο μέσω ηλεκτρονικού ταχυδρομείου"
1076
+
1077
+ #: views/global/export-action.php:2
1078
+ msgctxt "(Admin)"
1079
+ msgid "Automatically download data"
1080
+ msgstr "Αυτόματη λήψη δεδομένων"
1081
+
1082
+ #: views/global/export-action.php:6
1083
+ msgctxt "(Admin)"
1084
+ msgid "Automatically download data and notify me via email"
1085
+ msgstr "Αυτόματη λήψη δεδομένων και να ειδοποιούμαι μέσω e-mail"
1086
+
1087
+ #: views/installer/continue-notice.php:2
1088
+ msgctxt "(Admin)"
1089
+ msgid "The The GDPR Framework setup has not been finalized yet."
1090
+ msgstr ""
1091
+
1092
+ #: views/installer/continue-notice.php:3
1093
+ msgctxt "(Admin)"
1094
+ msgid "You can continue the setup at any time."
1095
+ msgstr "Μπορείτε να συνεχίσετε τη ρύθμιση οποιαδήποτε στιγμή."
1096
+
1097
+ #: views/installer/continue-notice.php:6
1098
+ msgctxt "(Admin)"
1099
+ msgid "Continue the setup wizard"
1100
+ msgstr ""
1101
+
1102
+ #: views/installer/continue-notice.php:9
1103
+ msgctxt "(Admin)"
1104
+ msgid "Hide this message"
1105
+ msgstr "Απόκρυψη αυτού του μηνύματος"
1106
+
1107
+ #: views/installer/footer.php:7
1108
+ msgid "Back"
1109
+ msgstr "Πίσω"
1110
+
1111
+ #: views/installer/header.php:26
1112
+ msgctxt "(Admin)"
1113
+ msgid "I need help"
1114
+ msgstr "Χρειάζομαι βοήθεια"
1115
+
1116
+ #: views/installer/header.php:29
1117
+ msgctxt "(Admin)"
1118
+ msgid "Developer Docs"
1119
+ msgstr "Έγγραφα για developers"
1120
+
1121
+ #: views/installer/header.php:36
1122
+ msgctxt "(Admin)"
1123
+ msgid "Configuration"
1124
+ msgstr ""
1125
+
1126
+ #: views/installer/header.php:46
1127
+ msgctxt "(Admin)"
1128
+ msgid "Forms & Consent"
1129
+ msgstr "Έντυπα συγκατάθεσης"
1130
+
1131
+ #: views/installer/header.php:51
1132
+ msgctxt "(Admin)"
1133
+ msgid "Integrations"
1134
+ msgstr "Ενσωματώσεις"
1135
+
1136
+ #: views/installer/steps/configuration-settings.php:23
1137
+ #: views/installer/steps/configuration-settings.php:73
1138
+ msgctxt "(Admin)"
1139
+ msgid "Enter the email address to notify"
1140
+ msgstr "Εισάγετε τη διεύθυνση email για να κοινοποίηση"
1141
+
1142
+ #: views/installer/steps/disclaimer.php:21
1143
+ msgctxt "(Admin)"
1144
+ msgid "I accept"
1145
+ msgstr "Δέχομαι"
1146
+
1147
+ #: views/installer/welcome-notice.php:7
1148
+ msgctxt "(Admin)"
1149
+ msgid "Run the setup wizard"
1150
+ msgstr ""
1151
+
1152
+ #: views/installer/welcome-notice.php:11
1153
+ msgctxt "(Admin)"
1154
+ msgid "Auto-install pages"
1155
+ msgstr "Αυτόματη εγκατάσταση σελίδων"
1156
+
1157
+ #: views/installer/welcome-notice.php:15
1158
+ msgctxt "(Admin)"
1159
+ msgid "Skip and install manually"
1160
+ msgstr "Χειροκίνητη εγκατάσταση"
1161
+
1162
+ #: views/modules/contact-form-7/generator-privacy.php:6
1163
+ msgctxt "(Admin)"
1164
+ msgid ""
1165
+ "This tag generates the default text for Terms & Conditions and/or Privacy "
1166
+ "Policy checkbox."
1167
+ msgstr ""
1168
+ "Αυτή η ετικέτα δημιουργεί το προεπιλεγμένο κείμενο για & όροι ή/και πολιτική "
1169
+ "προστασίας προσωπικών δεδομένων το πλαίσιο ελέγχου."
1170
+
1171
+ #: views/modules/contact-form-7/generator-privacy.php:15
1172
+ msgid "Insert"
1173
+ msgstr "Εισάγετε"
1174
+
1175
+ #: views/modules/wordpress-comments/terms-checkbox.php:6
1176
+ #: views/modules/wordpress-user/registration-terms-checkbox.php:7
1177
+ #, php-format
1178
+ msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1179
+ msgstr "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1180
+
1181
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
1182
+ msgid "Manage consents"
1183
+ msgstr "Διαχειριστείτε τις συγκαταθέσεις"
1184
+
1185
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
1186
+ #: views/privacy-tools/form-consent.php:6
1187
+ msgid "Here you can withdraw any consents you have given."
1188
+ msgstr "Εδώ μπορείτε να αποσύρετε τυχόν συγκαταθέσεις που έχετε δώσει."
1189
+
1190
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
1191
+ #: views/privacy-tools/form-consent.php:9
1192
+ msgid "Consent types"
1193
+ msgstr "Τύποι συγκατάθεσης"
1194
+
1195
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
1196
+ #: views/privacy-tools/form-consent.php:24
1197
+ msgid "Withdraw"
1198
+ msgstr "Αποσύρω"
1199
+
1200
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
1201
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
1202
+ msgctxt "(Admin)"
1203
+ msgid "Delete this user and all data"
1204
+ msgstr "Διαγραφή αυτού του χρήστη και όλα τα δεδομένα"
1205
+
1206
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
1207
+ msgctxt "(Admin)"
1208
+ msgid "Delete my data"
1209
+ msgstr "Διαγράψτε τα δεδομένα μου"
1210
+
1211
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
1212
+ #: views/privacy-tools/form-delete.php:13
1213
+ msgid "Delete all data we have gathered about you."
1214
+ msgstr "Διαγράψτε όλα τα δεδομένα που έχουμε συγκεντρώσει για εσάς."
1215
+
1216
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
1217
+ #: views/privacy-tools/form-delete.php:14
1218
+ msgid "If you have a user account on our site, it will also be deleted."
1219
+ msgstr ""
1220
+ "Εάν διαθέτετε λογαριασμό χρήστη στον ιστότοπό μας, θα διαγραφεί επίσης."
1221
+
1222
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
1223
+ #: views/privacy-tools/form-delete.php:15
1224
+ msgid "Be careful - this action is permanent and CANNOT be undone."
1225
+ msgstr "ΠΡΟΣΟΧΗ - αυτή η ενέργεια είναι μόνιμη και ΔΕΝ μπορεί να ακυρωθεί."
1226
+
1227
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
1228
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
1229
+ msgctxt "(Admin)"
1230
+ msgid ""
1231
+ "You seem to have an administrator or equivalent role, so deleting/"
1232
+ "anonymizing via this page is disabled."
1233
+ msgstr ""
1234
+
1235
+ #: views/modules/wordpress-user/dashboard/form-export.php:7
1236
+ #: views/privacy-tools/form-export.php:1
1237
+ msgid "Download your data"
1238
+ msgstr "Κατεβάστε τα δεδομένα σας"
1239
+
1240
+ #: views/modules/wordpress-user/dashboard/form-export.php:12
1241
+ #: views/privacy-tools/form-export.php:13
1242
+ msgid "Download as table"
1243
+ msgstr "Κάντε λήψη ως πίνακας"
1244
+
1245
+ #: views/modules/wordpress-user/dashboard/form-export.php:15
1246
+ #: views/privacy-tools/form-export.php:22
1247
+ msgid "Export as JSON"
1248
+ msgstr "Εξαγωγή ως JSON αρχειο"
1249
+
1250
+ #: views/modules/wordpress-user/dashboard/form-export.php:19
1251
+ #: views/privacy-tools/form-export.php:4
1252
+ msgid "You can download all your data formatted as a table for viewing."
1253
+ msgstr ""
1254
+ "Μπορείτε να κατεβάσετε όλα τα δεδομένα σας μορφοποιημένα ως πίνακα για "
1255
+ "προβολή."
1256
+
1257
+ #: views/modules/wordpress-user/dashboard/form-export.php:20
1258
+ #: views/privacy-tools/form-export.php:5
1259
+ msgid "Alternatively, you can export it in machine-readable JSON format."
1260
+ msgstr ""
1261
+ "Εναλλακτικά, μπορείτε να την εξαγάγετε σε μορφή JSON αναγνώσιμη από μηχανή."
1262
+
1263
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
1264
+ msgctxt "(Admin)"
1265
+ msgid "Delete user and all data"
1266
+ msgstr "Διαγραφή χρήστη και όλα τα δεδομένα"
1267
+
1268
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
1269
+ msgctxt "(Admin)"
1270
+ msgid "Anonymize user and all data"
1271
+ msgstr "Ανωνυμία χρήστη και όλα τα δεδομένα"
1272
+
1273
+ #: views/modules/wordpress-user/dashboard/profile-page/header.php:2
1274
+ msgctxt "(Admin)"
1275
+ msgid "GDPR Data"
1276
+ msgstr ""
1277
+
1278
+ #: views/modules/wordpress-user/dashboard/profile-page/header.php:6
1279
+ msgctxt "(Admin)"
1280
+ msgid "This user has been anonymized."
1281
+ msgstr ""
1282
+
1283
+ #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
1284
+ msgctxt "(Admin)"
1285
+ msgid "Consents given"
1286
+ msgstr "Συναινέσεις που έχουν χορηγηθεί"
1287
+
1288
+ #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
1289
+ msgctxt "(Admin)"
1290
+ msgid "No consents given"
1291
+ msgstr ""
1292
+
1293
+ #: views/privacy-tools/form-consent.php:2
1294
+ msgid "Consent"
1295
+ msgstr "Συγκατάθεση"
1296
+
1297
+ #: views/privacy-tools/form-delete.php:1
1298
+ #: views/privacy-tools/notice-admin-role.php:1
1299
+ msgid "Delete my user and data"
1300
+ msgstr "Διαγράψτε τον χρήστη και τα δεδομένα μου"
1301
+
1302
+ #: views/privacy-tools/form-delete.php:7
1303
+ msgid "Delete my data"
1304
+ msgstr "Διαγράψτε τα δεδομένα μου"
1305
+
1306
+ #: views/privacy-tools/form-identify.php:8
1307
+ msgid "Back to Privacy Tools"
1308
+ msgstr "Πίσω στην επεξεργασία προσωπικών δεδομένων"
1309
+
1310
+ #: views/privacy-tools/form-identify.php:14
1311
+ msgid "Identify yourself!"
1312
+ msgstr "Προσδιορίστε τον εαυτό σας!"
1313
+
1314
+ #: views/privacy-tools/form-identify.php:17
1315
+ #: views/privacy-tools/form-identify.php:20
1316
+ msgid "Enter your email address"
1317
+ msgstr "Εισάγετε το email σας"
1318
+
1319
+ #: views/privacy-tools/form-identify.php:23
1320
+ msgid "Send email"
1321
+ msgstr "Αποστολή email"
1322
+
1323
+ #: views/privacy-tools/notice-admin-role.php:4
1324
+ msgctxt "(Admin)"
1325
+ msgid "Data deletion is disabled for administrative accounts."
1326
+ msgstr "Διαγραφή δεδομένων είναι απενεργοποιημένη για λογαριασμών διαχειριστή."
1327
+
1328
+ #: views/privacy-tools/notices.php:3
1329
+ msgid ""
1330
+ "We will send you an email with the link to access your data. Please check "
1331
+ "your spam folder as well!"
1332
+ msgstr ""
1333
+ "Θα σας στείλουμε ένα μήνυμα ηλεκτρονικού ταχυδρομείου με το σύνδεσμο για να "
1334
+ "έχετε πρόσβαση στα δεδομένα σας. Ελέγξτε επίσης το φάκελο spam σας!"
1335
+
1336
+ #: views/privacy-tools/notices.php:7
1337
+ msgid "The email you entered does not appear to be a valid email."
1338
+ msgstr "Το email που καταχωρίσατε δεν φαίνεται να είναι έγκυρο."
1339
+
1340
+ #: views/privacy-tools/notices.php:11
1341
+ msgid "Sorry - the link seems to have expired. Please try again!"
1342
+ msgstr ""
1343
+ "Λυπούμαστε - ο σύνδεσμος φαίνεται να έχει λήξει. ΠΑΡΑΚΑΛΩ προσπαθησε ξανα!"
1344
+
1345
+ #: views/privacy-tools/notices.php:23
1346
+ msgid "Your personal data has been removed!"
1347
+ msgstr "Τα προσωπικά σας δεδομένα έχουν αφαιρεθεί!"
1348
+
1349
+ #: views/privacy-tools/privacy-tools.php:5
1350
+ msgid "You are identified as"
1351
+ msgstr "Έχετε αναγνωριστεί ως"
languages/gdpr-framework-et.po CHANGED
@@ -1,1345 +1,1345 @@
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-05-22 15:47+0300\n"
11
- "PO-Revision-Date: 2018-05-22 15:48+0300\n"
12
- "Last-Translator: Codelight <team@codelight.eu>\n"
13
- "Language-Team: \n"
14
- "Language: et_EE\n"
15
- "MIME-Version: 1.0\n"
16
- "Content-Type: text/plain; charset=UTF-8\n"
17
- "Content-Transfer-Encoding: 8bit\n"
18
- "X-Generator: Poedit 2.0.6\n"
19
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
-
21
- #: gdpr-framework.php:28
22
- msgctxt "(Admin)"
23
- msgid "WordPress GDPR &rsaquo; Error"
24
- msgstr ""
25
-
26
- #: gdpr-framework.php:38
27
- msgctxt "(Admin)"
28
- msgid "You must be using PHP 5.6.0 or greater."
29
- msgstr ""
30
-
31
- #: gdpr-framework.php:39
32
- msgctxt "(Admin)"
33
- msgid "Invalid PHP version"
34
- msgstr ""
35
-
36
- #: gdpr-framework.php:48
37
- msgctxt "(Admin)"
38
- msgid "You must be using WordPress 4.3.0 or greater."
39
- msgstr ""
40
-
41
- #: gdpr-framework.php:49
42
- msgctxt "(Admin)"
43
- msgid "Invalid WordPress version"
44
- msgstr ""
45
-
46
- #: gdpr-framework.php:61
47
- msgctxt "(Admin)"
48
- msgid ""
49
- "You appear to be running a development version of GDPR. You must run "
50
- "<code>composer install</code> from the plugin directory."
51
- msgstr ""
52
-
53
- #: gdpr-framework.php:66
54
- msgctxt "(Admin)"
55
- msgid "Autoloader not found."
56
- msgstr ""
57
-
58
- #: gdpr-framework.php:86 src/Updater/Updater.php:40
59
- msgctxt "(Admin)"
60
- msgid "Anonymous"
61
- msgstr ""
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/AdminTabConsent.php:179
204
- msgid ""
205
- "To use this website, you accepted our Privacy Policy. If you wish to "
206
- "withdraw your acceptance, please use the \"Delete my data\" button below."
207
- msgstr ""
208
-
209
- #: src/Components/Consent/ConsentManager.php:46
210
- #: views/modules/contact-form-7/content-privacy.php:2
211
- #: views/modules/wordpress-comments/terms-checkbox.php:14
212
- #: views/modules/wordpress-user/registration-terms-checkbox.php:15
213
- #, php-format
214
- msgid "I accept the %sPrivacy Policy%s"
215
- msgstr "Nõustun %sprivaatsustingimustega%s"
216
-
217
- #: src/Components/Consent/ConsentManager.php:50
218
- #: src/Components/Consent/ConsentManager.php:69
219
- msgctxt "(Admin)"
220
- msgid ""
221
- "This consent is not visible by default. If someone wishes to withdraw it, "
222
- "they should simply request to delete all their data."
223
- msgstr ""
224
-
225
- #: src/Components/Consent/ConsentManager.php:65
226
- #, php-format
227
- msgid "I accept the %sTerms & Conditions%s"
228
- msgstr "Nõustun %stingimustega%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 ""
236
-
237
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
238
- msgctxt "(Admin)"
239
- msgid "Company information"
240
- msgstr ""
241
-
242
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
243
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
244
- msgctxt "(Admin)"
245
- msgid "Company Name"
246
- msgstr ""
247
-
248
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
249
- msgctxt "(Admin)"
250
- msgid "Company Email"
251
- msgstr ""
252
-
253
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
254
- msgctxt "(Admin)"
255
- msgid "Company Location"
256
- msgstr ""
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 ""
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 ""
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 ""
275
-
276
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
277
- msgctxt "(Admin)"
278
- msgid "Data Protection Authority"
279
- msgstr ""
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 ""
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 ""
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 ""
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 ""
304
-
305
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
306
- msgctxt "(Admin)"
307
- msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
308
- msgstr ""
309
-
310
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
311
- msgctxt "(Admin)"
312
- msgid "Data Protection Officer Name"
313
- msgstr ""
314
-
315
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
316
- msgctxt "(Admin)"
317
- msgid "Data Protection Officer Email"
318
- msgstr ""
319
-
320
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
321
- msgctxt "(Admin)"
322
- msgid "Contact Email"
323
- msgstr ""
324
-
325
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
326
- msgctxt "(Admin)"
327
- msgid "Representative Contact"
328
- msgstr ""
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
-
335
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
336
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
337
- msgctxt "(Admin)"
338
- msgid "DPO Name"
339
- msgstr ""
340
-
341
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
342
- msgctxt "(Admin)"
343
- msgid "Save & Generate Policy"
344
- msgstr ""
345
-
346
- #: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
347
- #: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
348
- #: views/themes/storefront/footer.php:3
349
- #: views/themes/twentyseventeen/footer.php:3
350
- #: views/themes/twentysixteen/footer.php:4
351
- msgid "Privacy Policy"
352
- msgstr "Privaatsustingimused"
353
-
354
- #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
355
- msgid "This page is currently disabled."
356
- msgstr "See leht on hetkel välja lülitatud."
357
-
358
- #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
359
- #: src/Installer/Installer.php:279
360
- #: src/Installer/Steps/ConfigurationPages.php:55
361
- #: views/themes/storefront/footer.php:7
362
- #: views/themes/twentyseventeen/footer.php:7
363
- #: views/themes/twentysixteen/footer.php:9
364
- msgid "Privacy Tools"
365
- msgstr "Privaatsustööriistad"
366
-
367
- #: src/Components/Support/AdminTabSupport.php:13
368
- #: src/Components/Support/AdminTabSupport.php:20
369
- msgctxt "(Admin)"
370
- msgid "Support"
371
- msgstr ""
372
-
373
- #: src/Components/WordpressComments/WordpressComments.php:90
374
- #, php-format
375
- msgid ""
376
- "%sERROR:%s You need to accept the terms and conditions to post a comment."
377
- msgstr "%sVIGA%s Kommenteerimiseks peate nõustuma tingimustega."
378
-
379
- #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
380
- #: views/privacy-tools/notices.php:19
381
- msgid "We have received your request and will reply within 30 days."
382
- msgstr "Saime teie taotluse kätte ning vastame 30 päeva jooksul."
383
-
384
- #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
385
- #: views/privacy-tools/notices.php:15
386
- msgid "Consent withdrawn."
387
- msgstr "Nõusolek tagasi võetud."
388
-
389
- #: src/Components/WordpressUser/RegistrationForm.php:42
390
- msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
391
- msgstr "<strong>VIGA</strong>: Tingimustega nõustumine on kohustuslik."
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 ""
399
-
400
- #: src/DataSubject/AdminTabDataSubject.php:27
401
- #: src/DataSubject/AdminTabDataSubject.php:41
402
- msgctxt "(Admin)"
403
- msgid "Data Subjects"
404
- msgstr ""
405
-
406
- #: src/DataSubject/DataRepository.php:143
407
- msgid "Data exported"
408
- msgstr "Andmed eksporditud"
409
-
410
- #: src/DataSubject/DataRepository.php:158
411
- msgid "Data export request"
412
- msgstr "Andmete eksportimise taotlus"
413
-
414
- #: src/DataSubject/DataRepository.php:171
415
- msgid "Data removed"
416
- msgstr "Andmed kustutatud"
417
-
418
- #: src/DataSubject/DataRepository.php:186
419
- msgid "Data removal request"
420
- msgstr "Andmete kustutamise taotlus"
421
-
422
- #: src/DataSubject/DataSubjectIdentificator.php:65
423
- #: src/DataSubject/DataSubjectIdentificator.php:82
424
- msgid "Your personal data on"
425
- msgstr "Sinu isiklikud andmed lehel"
426
-
427
- #: src/Helpers.php:27
428
- msgctxt "(Admin)"
429
- msgid "Austria"
430
- msgstr ""
431
-
432
- #: src/Helpers.php:28
433
- msgctxt "(Admin)"
434
- msgid "Belgium"
435
- msgstr ""
436
-
437
- #: src/Helpers.php:29
438
- msgctxt "(Admin)"
439
- msgid "Bulgaria"
440
- msgstr ""
441
-
442
- #: src/Helpers.php:30
443
- msgctxt "(Admin)"
444
- msgid "Croatia"
445
- msgstr ""
446
-
447
- #: src/Helpers.php:31
448
- msgctxt "(Admin)"
449
- msgid "Cyprus"
450
- msgstr ""
451
-
452
- #: src/Helpers.php:32
453
- msgctxt "(Admin)"
454
- msgid "Czech Republic"
455
- msgstr ""
456
-
457
- #: src/Helpers.php:33
458
- msgctxt "(Admin)"
459
- msgid "Denmark"
460
- msgstr ""
461
-
462
- #: src/Helpers.php:34
463
- msgctxt "(Admin)"
464
- msgid "Estonia"
465
- msgstr ""
466
-
467
- #: src/Helpers.php:35
468
- msgctxt "(Admin)"
469
- msgid "Finland"
470
- msgstr ""
471
-
472
- #: src/Helpers.php:36
473
- msgctxt "(Admin)"
474
- msgid "France"
475
- msgstr ""
476
-
477
- #: src/Helpers.php:37
478
- msgctxt "(Admin)"
479
- msgid "Germany"
480
- msgstr ""
481
-
482
- #: src/Helpers.php:38
483
- msgctxt "(Admin)"
484
- msgid "Greece"
485
- msgstr ""
486
-
487
- #: src/Helpers.php:39
488
- msgctxt "(Admin)"
489
- msgid "Hungary"
490
- msgstr ""
491
-
492
- #: src/Helpers.php:40
493
- msgctxt "(Admin)"
494
- msgid "Ireland"
495
- msgstr ""
496
-
497
- #: src/Helpers.php:41
498
- msgctxt "(Admin)"
499
- msgid "Italy"
500
- msgstr ""
501
-
502
- #: src/Helpers.php:42
503
- msgctxt "(Admin)"
504
- msgid "Latvia"
505
- msgstr ""
506
-
507
- #: src/Helpers.php:43
508
- msgctxt "(Admin)"
509
- msgid "Lithuania"
510
- msgstr ""
511
-
512
- #: src/Helpers.php:44
513
- msgctxt "(Admin)"
514
- msgid "Luxembourg"
515
- msgstr ""
516
-
517
- #: src/Helpers.php:45
518
- msgctxt "(Admin)"
519
- msgid "Malta"
520
- msgstr ""
521
-
522
- #: src/Helpers.php:46
523
- msgctxt "(Admin)"
524
- msgid "Netherlands"
525
- msgstr ""
526
-
527
- #: src/Helpers.php:47
528
- msgctxt "(Admin)"
529
- msgid "Poland"
530
- msgstr ""
531
-
532
- #: src/Helpers.php:48
533
- msgctxt "(Admin)"
534
- msgid "Portugal"
535
- msgstr ""
536
-
537
- #: src/Helpers.php:49
538
- msgctxt "(Admin)"
539
- msgid "Romania"
540
- msgstr ""
541
-
542
- #: src/Helpers.php:50
543
- msgctxt "(Admin)"
544
- msgid "Slovakia"
545
- msgstr ""
546
-
547
- #: src/Helpers.php:51
548
- msgctxt "(Admin)"
549
- msgid "Slovenia"
550
- msgstr ""
551
-
552
- #: src/Helpers.php:52
553
- msgctxt "(Admin)"
554
- msgid "Spain"
555
- msgstr ""
556
-
557
- #: src/Helpers.php:53
558
- msgctxt "(Admin)"
559
- msgid "Sweden"
560
- msgstr ""
561
-
562
- #: src/Helpers.php:54
563
- msgctxt "(Admin)"
564
- msgid "United Kingdom"
565
- msgstr ""
566
-
567
- #: src/Helpers.php:69
568
- msgctxt "(Admin)"
569
- msgid "Iceland"
570
- msgstr ""
571
-
572
- #: src/Helpers.php:70
573
- msgctxt "(Admin)"
574
- msgid "Norway"
575
- msgstr ""
576
-
577
- #: src/Helpers.php:71
578
- msgctxt "(Admin)"
579
- msgid "Liechtenstein"
580
- msgstr ""
581
-
582
- #: src/Helpers.php:72
583
- msgctxt "(Admin)"
584
- msgid "Switzerland"
585
- msgstr ""
586
-
587
- #: src/Helpers.php:73
588
- msgctxt "(Admin)"
589
- msgid "United States"
590
- msgstr ""
591
-
592
- #: src/Helpers.php:74
593
- msgctxt "(Admin)"
594
- msgid "Rest of the world"
595
- msgstr ""
596
-
597
- #: src/Helpers.php:145
598
- msgid "An error has occurred. Please contact the site administrator."
599
- msgstr "Süsteemis tekkis viga. Palun võtke ühendust lehe haldajaga."
600
-
601
- #: src/Installer/Installer.php:135
602
- msgctxt "(Admin)"
603
- msgid "Setup Wizard"
604
- msgstr ""
605
-
606
- #: src/Installer/Steps/ConfigurationPages.php:23
607
- #: src/Installer/Steps/PolicySettings.php:23
608
- #: src/Installer/Steps/PolicySettings.php:48
609
- msgctxt "(Admin)"
610
- msgid "&mdash; Create a new page &mdash;"
611
- msgstr ""
612
-
613
- #: src/Installer/Steps/PolicySettings.php:38
614
- msgctxt "(Admin)"
615
- msgid ""
616
- "We have automatically selected your WooCommerce Terms & Conditions page."
617
- msgstr ""
618
-
619
- #: src/Modules/ContactForm7/ContactForm7.php:35
620
- msgctxt "(Admin)"
621
- msgid "gdpr terms txt"
622
- msgstr ""
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 "VIGA \"%s\". Palun minge tagasi ja proovige uuesti!"
628
-
629
- #: src/Router.php:149
630
- msgctxt "(Admin)"
631
- msgid "You do not have the required permissions to perform this action!"
632
- msgstr ""
633
-
634
- #: views/admin/consent.php:3
635
- msgctxt "(Admin)"
636
- msgid "Default consent types"
637
- msgstr ""
638
-
639
- #: views/admin/consent.php:4
640
- msgctxt "(Admin)"
641
- msgid ""
642
- "These are the consent types that have been automatically registered by the "
643
- "framework or a plugin."
644
- msgstr ""
645
-
646
- #: views/admin/consent.php:7 views/admin/consent.php:52
647
- msgctxt "(Admin)"
648
- msgid "Slug"
649
- msgstr ""
650
-
651
- #: views/admin/consent.php:8 views/admin/consent.php:38
652
- #: views/admin/consent.php:60
653
- msgctxt "(Admin)"
654
- msgid "Title"
655
- msgstr ""
656
-
657
- #: views/admin/consent.php:9 views/admin/consent.php:41
658
- #: views/admin/consent.php:63
659
- msgctxt "(Admin)"
660
- msgid "Description"
661
- msgstr ""
662
-
663
- #: views/admin/consent.php:10
664
- msgctxt "(Admin)"
665
- msgid "Visibility"
666
- msgstr ""
667
-
668
- #: views/admin/consent.php:18
669
- msgctxt "(Admin)"
670
- msgid "Visible"
671
- msgstr ""
672
-
673
- #: views/admin/consent.php:20
674
- msgctxt "(Admin)"
675
- msgid "Hidden"
676
- msgstr ""
677
-
678
- #: views/admin/consent.php:29
679
- msgctxt "(Admin)"
680
- msgid "Custom consent types"
681
- msgstr ""
682
-
683
- #: views/admin/consent.php:30
684
- msgctxt "(Admin)"
685
- msgid ""
686
- "Here you can add custom consent types to track. They will not be used "
687
- "anywhere by default - you will need to build an integration for each of them."
688
- msgstr ""
689
-
690
- #: views/admin/consent.php:35
691
- msgctxt "(Admin)"
692
- msgid "Machine-readable slug"
693
- msgstr ""
694
-
695
- #: views/admin/consent.php:44 views/admin/consent.php:68
696
- msgctxt "(Admin)"
697
- msgid "Visible?"
698
- msgstr ""
699
-
700
- #: views/admin/consent.php:72
701
- msgctxt "(Admin)"
702
- msgid "Remove"
703
- msgstr ""
704
-
705
- #: views/admin/consent.php:93
706
- msgctxt "(Admin)"
707
- msgid "Additional info"
708
- msgstr ""
709
-
710
- #: views/admin/consent.php:95
711
- msgctxt "(Admin)"
712
- msgid ""
713
- "This text will be displayed to your data subjects on the Privacy Tools page."
714
- msgstr ""
715
-
716
- #: views/admin/data-subjects/search-form.php:2
717
- msgctxt "(Admin)"
718
- msgid ""
719
- "On this page, you can find which data subjects personal data you are storing "
720
- "and download, export or delete it."
721
- msgstr ""
722
-
723
- #: views/admin/data-subjects/search-form.php:10
724
- msgctxt "(Admin)"
725
- msgid "Find data subject by email"
726
- msgstr ""
727
-
728
- #: views/admin/data-subjects/search-form.php:11
729
- msgctxt "(Admin)"
730
- msgid "Email address"
731
- msgstr ""
732
-
733
- #: views/admin/data-subjects/search-form.php:16
734
- msgctxt "(Admin)"
735
- msgid "Search"
736
- msgstr ""
737
-
738
- #: views/admin/data-subjects/search-results.php:7
739
- msgctxt "(Admin)"
740
- msgid "Username"
741
- msgstr ""
742
-
743
- #: views/admin/data-subjects/search-results.php:12
744
- msgctxt "(Admin)"
745
- msgid "is not a registered user."
746
- msgstr ""
747
-
748
- #: views/admin/data-subjects/search-results.php:16
749
- msgctxt "(Admin)"
750
- msgid "Download data (html)"
751
- msgstr ""
752
-
753
- #: views/admin/data-subjects/search-results.php:17
754
- msgctxt "(Admin)"
755
- msgid "Export data (json)"
756
- msgstr ""
757
-
758
- #: views/admin/data-subjects/search-results.php:21
759
- msgctxt "(Admin)"
760
- msgid ""
761
- "This user has admin capabilities. Deleting data via this interface is "
762
- "disabled."
763
- msgstr ""
764
-
765
- #: views/admin/data-subjects/search-results.php:24
766
- msgctxt "(Admin)"
767
- msgid "Anonymize data"
768
- msgstr ""
769
-
770
- #: views/admin/data-subjects/search-results.php:25
771
- msgctxt "(Admin)"
772
- msgid "Delete data"
773
- msgstr ""
774
-
775
- #: views/admin/data-subjects/search-results.php:29
776
- msgctxt "(Admin)"
777
- msgid "No data found!"
778
- msgstr ""
779
-
780
- #: views/admin/general/delete-action-email.php:5
781
- #: views/admin/general/export-action-email.php:5
782
- #: views/installer/steps/configuration-settings.php:29
783
- #: views/installer/steps/configuration-settings.php:79
784
- msgid "Email address"
785
- msgstr "E-maili aadress"
786
-
787
- #: views/admin/general/delete-action-reassign.php:3
788
- #: views/installer/steps/configuration-settings.php:50
789
- msgctxt "(Admin)"
790
- msgid "Delete content"
791
- msgstr ""
792
-
793
- #: views/admin/general/delete-action-reassign.php:6
794
- #: views/installer/steps/configuration-settings.php:53
795
- msgctxt "(Admin)"
796
- msgid "Reassign content to a user"
797
- msgstr ""
798
-
799
- #: views/admin/general/delete-action-reassign.php:10
800
- msgctxt "(Admin)"
801
- msgid ""
802
- "If the user has submitted any content on your site, should it be deleted or "
803
- "reassigned to another user?"
804
- msgstr ""
805
-
806
- #: views/admin/general/description-data-page.php:2
807
- msgctxt "(Admin)"
808
- msgid ""
809
- "Select the page where users can go to control their data. This page must "
810
- "contain the [gdpr_privacy_tools] shortcode."
811
- msgstr ""
812
-
813
- #: views/admin/general/description-delete-action.php:2
814
- msgctxt "(Admin)"
815
- msgid "What should happen if a data subject requests deleting their data."
816
- msgstr ""
817
-
818
- #: views/admin/general/description-export-action.php:2
819
- msgctxt "(Admin)"
820
- msgid ""
821
- "What should happen if a data subject requests viewing or exporting their "
822
- "data."
823
- msgstr ""
824
-
825
- #: views/admin/general/description-terms-page.php:2
826
- msgctxt "(Admin)"
827
- msgid "Optional. Select the page which contains your Terms & Conditions"
828
- msgstr ""
829
-
830
- #: views/admin/general/enable.php:9
831
- msgctxt "(Admin)"
832
- msgid "Enable the view, export and forget functionality for users and visitors"
833
- msgstr ""
834
-
835
- #: views/admin/general/enable.php:12
836
- msgctxt "(Admin)"
837
- msgid ""
838
- "Enable the Privacy Tools page on front-end and dashboard. This allows "
839
- "visitors to request viewing and deleting their personal data and withdraw "
840
- "consents."
841
- msgstr ""
842
-
843
- #: views/admin/general/stylesheet.php:9
844
- msgctxt "(Admin)"
845
- msgid "Enable basic styling for Privacy Tools page."
846
- msgstr ""
847
-
848
- #: views/admin/general/theme-compatibility.php:9
849
- #: views/installer/steps/integrations.php:21
850
- msgctxt "(Admin)"
851
- msgid ""
852
- "Automatically add Privacy Policy and Privacy Tools links to your site footer."
853
- msgstr ""
854
-
855
- #: views/admin/notices/header.php:4 views/admin/settings-page.php:3
856
- #: views/installer/header.php:23
857
- msgctxt "(Admin)"
858
- msgid "The GDPR Framework"
859
- msgstr ""
860
-
861
- #: views/admin/notices/helper-autoinstall.php:2
862
- msgctxt "(Admin)"
863
- msgid ""
864
- "A Privacy Policy page has been created, but it is empty. You can generate a "
865
- "policy template on this page."
866
- msgstr ""
867
-
868
- #: views/admin/notices/helper-policy.php:2
869
- msgctxt "(Admin)"
870
- msgid ""
871
- "Heads up - your Privacy Policy still requires some attention. Find the "
872
- "places marked with [TODO] and replace them with real content!"
873
- msgstr ""
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 ""
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 ""
884
-
885
- #: views/admin/privacy-policy/generated.php:3
886
- msgctxt "(Admin)"
887
- msgid "Your Privacy Policy has been generated."
888
- msgstr ""
889
-
890
- #: views/admin/privacy-policy/generated.php:20
891
- msgctxt "(Admin)"
892
- msgid "&laquo; Back"
893
- msgstr ""
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 "
899
- "you entered below."
900
- msgstr ""
901
-
902
- #: views/admin/settings-page.php:8
903
- msgctxt "(Admin)"
904
- msgid "GDPR settings saved!"
905
- msgstr ""
906
-
907
- #: views/admin/settings-page.php:31
908
- #, php-format
909
- msgctxt "(Admin)"
910
- msgid "The GDPR Framework. Built with &#9829; by %sCodelight%s."
911
- msgstr ""
912
-
913
- #: views/admin/settings-page.php:39
914
- #, php-format
915
- msgctxt "(Admin)"
916
- msgid "Support our development efforts with a %s5-star rating%s."
917
- msgstr ""
918
-
919
- #: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
920
- msgctxt "(Admin)"
921
- msgid "Need more info?"
922
- msgstr ""
923
-
924
- #: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
925
- msgctxt "(Admin)"
926
- msgid "Site Owner's guide to GDPR"
927
- msgstr ""
928
-
929
- #: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
930
- msgctxt "(Admin)"
931
- msgid "Read the full guide on GDPR compliance."
932
- msgstr ""
933
-
934
- #: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
935
- msgctxt "(Admin)"
936
- msgid "Knowledge base"
937
- msgstr ""
938
-
939
- #: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
940
- msgctxt "(Admin)"
941
- msgid "Check out the knowledge base for common questions and answers."
942
- msgstr ""
943
-
944
- #: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
945
- msgctxt "(Admin)"
946
- msgid "Developer's guide to GDPR"
947
- msgstr ""
948
-
949
- #: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
950
- msgctxt "(Admin)"
951
- msgid "We have a thorough guide to help making custom sites compliant."
952
- msgstr ""
953
-
954
- #: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
955
- msgctxt "(Admin)"
956
- msgid "Need help?"
957
- msgstr ""
958
-
959
- #: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
960
- msgctxt "(Admin)"
961
- msgid "Submit a support request"
962
- msgstr ""
963
-
964
- #: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
965
- msgctxt "(Admin)"
966
- msgid ""
967
- "Found a bug or problem with the plugin? Post in the wordpress.org support "
968
- "forum."
969
- msgstr ""
970
-
971
- #: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
972
- msgctxt "(Admin)"
973
- msgid "Request a consultation"
974
- msgstr ""
975
-
976
- #: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
977
- msgctxt "(Admin)"
978
- msgid ""
979
- "Need development or legal assistance in making your site compliant? We can "
980
- "help!"
981
- msgstr ""
982
-
983
- #: views/admin/wizard-buttons.php:2
984
- msgctxt "(Admin)"
985
- msgid "Restart setup wizard"
986
- msgstr ""
987
-
988
- #: views/email/action-export.php:8 views/email/action-forget.php:12
989
- msgctxt "(Admin)"
990
- msgid ""
991
- "This email is just for your information. You don't need to take any action"
992
- msgstr ""
993
-
994
- #: views/email/action-forget.php:8
995
- msgctxt "(Admin)"
996
- msgid "The data subject had a user account on your website."
997
- msgstr ""
998
-
999
- #: views/email/identify-data-subject.php:2
1000
- msgid "Someone has requested access to your data on"
1001
- msgstr "Keegi on taotlenud ligipääsu teie andmetele leheküljel"
1002
-
1003
- #: views/email/identify-data-subject.php:3
1004
- msgid "If this was a mistake, just ignore this email and nothing will happen."
1005
- msgstr ""
1006
- "Kui see oli viga, siis lihtsalt ignoreerige seda kirja ning mitte midagi ei "
1007
- "juhtu."
1008
-
1009
- #: views/email/identify-data-subject.php:4
1010
- msgid "To manage your data, visit the following address:"
1011
- msgstr "Kui soovite oma andmeid hallata, külastage järgnevat aadress:"
1012
-
1013
- #: views/email/identify-data-subject.php:10
1014
- msgid "This link is valid for 15 minutes."
1015
- msgstr "See link on aktiivne 15 minutit."
1016
-
1017
- #: views/email/no-data.php:2
1018
- msgid "Someone has requested information about your personal data on"
1019
- msgstr "Keegi on taotlenud infot teie isiklike andmete kohta leheküljel"
1020
-
1021
- #: views/email/no-data.php:3
1022
- msgid "None of your personal data is stored on"
1023
- msgstr "Leheküljel ei ole kohta isiklikke andmeid"
1024
-
1025
- #: views/email/no-data.php:5
1026
- msgid ""
1027
- "If this was a mistake or you did not request this email, just ignore it and "
1028
- "nothing will happen."
1029
- msgstr ""
1030
- "Kui see oli viga, siis lihtsalt ignoreerige seda kirja ning mitte midagi ei "
1031
- "juhtu."
1032
-
1033
- #: views/email/request-export.php:13 views/email/request-forget.php:13
1034
- msgctxt "(Admin)"
1035
- msgid "As a reminder: according to GDPR, you have 30 days to comply."
1036
- msgstr ""
1037
-
1038
- #: views/global/delete-action.php:2
1039
- msgctxt "(Admin)"
1040
- msgid "Automatically anonymize data"
1041
- msgstr ""
1042
-
1043
- #: views/global/delete-action.php:5
1044
- msgctxt "(Admin)"
1045
- msgid "Automatically delete data"
1046
- msgstr ""
1047
-
1048
- #: views/global/delete-action.php:9
1049
- msgctxt "(Admin)"
1050
- msgid "Automatically anonymize data and notify me via email"
1051
- msgstr ""
1052
-
1053
- #: views/global/delete-action.php:13
1054
- msgctxt "(Admin)"
1055
- msgid "Automatically delete data and notify me via email"
1056
- msgstr ""
1057
-
1058
- #: views/global/delete-action.php:16 views/global/export-action.php:10
1059
- msgctxt "(Admin)"
1060
- msgid "Only notify me via email"
1061
- msgstr ""
1062
-
1063
- #: views/global/export-action.php:2
1064
- msgctxt "(Admin)"
1065
- msgid "Automatically download data"
1066
- msgstr ""
1067
-
1068
- #: views/global/export-action.php:6
1069
- msgctxt "(Admin)"
1070
- msgid "Automatically download data and notify me via email"
1071
- msgstr ""
1072
-
1073
- #: views/installer/continue-notice.php:2
1074
- msgctxt "(Admin)"
1075
- msgid "The The GDPR Framework setup has not been finalized yet."
1076
- msgstr ""
1077
-
1078
- #: views/installer/continue-notice.php:3
1079
- msgctxt "(Admin)"
1080
- msgid "You can continue the setup at any time."
1081
- msgstr ""
1082
-
1083
- #: views/installer/continue-notice.php:6
1084
- msgctxt "(Admin)"
1085
- msgid "Continue the setup wizard"
1086
- msgstr ""
1087
-
1088
- #: views/installer/continue-notice.php:9
1089
- msgctxt "(Admin)"
1090
- msgid "Hide this message"
1091
- msgstr ""
1092
-
1093
- #: views/installer/footer.php:7
1094
- msgid "Back"
1095
- msgstr "Tagasi"
1096
-
1097
- #: views/installer/header.php:26
1098
- msgctxt "(Admin)"
1099
- msgid "I need help"
1100
- msgstr ""
1101
-
1102
- #: views/installer/header.php:29
1103
- msgctxt "(Admin)"
1104
- msgid "Developer Docs"
1105
- msgstr ""
1106
-
1107
- #: views/installer/header.php:36
1108
- msgctxt "(Admin)"
1109
- msgid "Configuration"
1110
- msgstr ""
1111
-
1112
- #: views/installer/header.php:46
1113
- msgctxt "(Admin)"
1114
- msgid "Forms & Consent"
1115
- msgstr ""
1116
-
1117
- #: views/installer/header.php:51
1118
- msgctxt "(Admin)"
1119
- msgid "Integrations"
1120
- msgstr ""
1121
-
1122
- #: views/installer/steps/configuration-settings.php:23
1123
- #: views/installer/steps/configuration-settings.php:73
1124
- msgctxt "(Admin)"
1125
- msgid "Enter the email address to notify"
1126
- msgstr ""
1127
-
1128
- #: views/installer/steps/disclaimer.php:21
1129
- msgctxt "(Admin)"
1130
- msgid "I accept"
1131
- msgstr ""
1132
-
1133
- #: views/installer/welcome-notice.php:7
1134
- msgctxt "(Admin)"
1135
- msgid "Run the setup wizard"
1136
- msgstr ""
1137
-
1138
- #: views/installer/welcome-notice.php:11
1139
- msgctxt "(Admin)"
1140
- msgid "Auto-install pages"
1141
- msgstr ""
1142
-
1143
- #: views/installer/welcome-notice.php:15
1144
- msgctxt "(Admin)"
1145
- msgid "Skip and install manually"
1146
- msgstr ""
1147
-
1148
- #: views/modules/contact-form-7/generator-privacy.php:6
1149
- msgctxt "(Admin)"
1150
- msgid ""
1151
- "This tag generates the default text for Terms & Conditions and/or Privacy "
1152
- "Policy checkbox."
1153
- msgstr ""
1154
-
1155
- #: views/modules/contact-form-7/generator-privacy.php:15
1156
- msgid "Insert"
1157
- msgstr "Sisesta"
1158
-
1159
- #: views/modules/wordpress-comments/terms-checkbox.php:6
1160
- #: views/modules/wordpress-user/registration-terms-checkbox.php:7
1161
- #, php-format
1162
- msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1163
- msgstr "Nõustun %sKasutustingimustega%s ja %sPrivaatsustingimustega%s"
1164
-
1165
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
1166
- #: views/privacy-tools/form-consent.php:2
1167
- msgid "Consent"
1168
- msgstr "Nõusolek"
1169
-
1170
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
1171
- #: views/privacy-tools/form-consent.php:6
1172
- msgid "Here you can withdraw any consents you have given."
1173
- msgstr "Siin saate tagasi võtta kõik antud nõusolekud"
1174
-
1175
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
1176
- msgid "Consents"
1177
- msgstr "Nõusolekud"
1178
-
1179
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
1180
- #: views/privacy-tools/form-consent.php:24
1181
- msgid "Withdraw"
1182
- msgstr "Võta tagasi"
1183
-
1184
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
1185
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
1186
- msgctxt "(Admin)"
1187
- msgid "Delete this user and all data"
1188
- msgstr ""
1189
-
1190
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
1191
- msgctxt "(Admin)"
1192
- msgid "Delete my data"
1193
- msgstr ""
1194
-
1195
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
1196
- #: views/privacy-tools/form-delete.php:13
1197
- msgid "Delete all data we have gathered about you."
1198
- msgstr "Kogu info teie kohta kustutatakse."
1199
-
1200
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
1201
- #: views/privacy-tools/form-delete.php:14
1202
- msgid "If you have a user account on our site, it will also be deleted."
1203
- msgstr "Kui teil on meie lehel kasutajakonto, siis ka see kustutatakse."
1204
-
1205
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
1206
- #: views/privacy-tools/form-delete.php:15
1207
- msgid "Be careful - this action is permanent and CANNOT be undone."
1208
- msgstr "Ettevaatust - seda tegevust EI SAA tagasi võtta."
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/"
1215
- "anonymizing via this page is disabled."
1216
- msgstr ""
1217
-
1218
- #: views/modules/wordpress-user/dashboard/form-export.php:7
1219
- #: views/privacy-tools/form-export.php:1
1220
- msgid "Download your data"
1221
- msgstr "Lae oma andmed alla"
1222
-
1223
- #: views/modules/wordpress-user/dashboard/form-export.php:12
1224
- #: views/privacy-tools/form-export.php:13
1225
- msgid "Download as table"
1226
- msgstr "Lae oma andmed tabelina alla"
1227
-
1228
- #: views/modules/wordpress-user/dashboard/form-export.php:15
1229
- #: views/privacy-tools/form-export.php:22
1230
- msgid "Export as JSON"
1231
- msgstr "Ekspordi JSON failina"
1232
-
1233
- #: views/modules/wordpress-user/dashboard/form-export.php:19
1234
- #: views/privacy-tools/form-export.php:4
1235
- msgid "You can download all your data formatted as a table for viewing."
1236
- msgstr "Saate oma andmed tabeli kujul alla laadida"
1237
-
1238
- #: views/modules/wordpress-user/dashboard/form-export.php:20
1239
- #: views/privacy-tools/form-export.php:5
1240
- msgid "Alternatively, you can export it in machine-readable JSON format."
1241
- msgstr "Alternatiivselt saate eksportida faili masinloetavas JSON formaadis."
1242
-
1243
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
1244
- msgctxt "(Admin)"
1245
- msgid "Delete user and all data"
1246
- msgstr ""
1247
-
1248
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
1249
- msgctxt "(Admin)"
1250
- msgid "Anonymize user and all data"
1251
- msgstr ""
1252
-
1253
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:18
1254
- #, fuzzy
1255
- #| msgid "Be careful - this action is permanent and CANNOT be undone."
1256
- msgctxt "gdpr-framework"
1257
- msgid "Be careful - this action is permanent and CANNOT be undone."
1258
- msgstr "Ettevaatust - seda tegevust EI SAA tagasi võtta."
1259
-
1260
- #: views/modules/wordpress-user/dashboard/profile-page/header.php:2
1261
- msgctxt "(Admin)"
1262
- msgid "GDPR Data"
1263
- msgstr ""
1264
-
1265
- #: views/modules/wordpress-user/dashboard/profile-page/header.php:6
1266
- msgctxt "(Admin)"
1267
- msgid "This user has been anonymized."
1268
- msgstr ""
1269
-
1270
- #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
1271
- msgctxt "(Admin)"
1272
- msgid "Consents given"
1273
- msgstr ""
1274
-
1275
- #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
1276
- msgctxt "(Admin)"
1277
- msgid "No consents given"
1278
- msgstr ""
1279
-
1280
- #: views/privacy-tools/form-consent.php:9
1281
- msgid "Consent types"
1282
- msgstr "Nõusoleku tüübid"
1283
-
1284
- #: views/privacy-tools/form-delete.php:1
1285
- #: views/privacy-tools/notice-admin-role.php:1
1286
- msgid "Delete my user and data"
1287
- msgstr "Kustuta minu kasutaja ja andmed"
1288
-
1289
- #: views/privacy-tools/form-delete.php:7
1290
- msgid "Delete my data"
1291
- msgstr "Kustuta minu andmed"
1292
-
1293
- #: views/privacy-tools/form-identify.php:8
1294
- msgid "Back to front page"
1295
- msgstr ""
1296
-
1297
- #: views/privacy-tools/form-identify.php:15
1298
- #, fuzzy
1299
- #| msgid "Identify yourself!"
1300
- msgid "Please identify yourself via e-mail"
1301
- msgstr "Tuvasta ennast!"
1302
-
1303
- #: views/privacy-tools/form-identify.php:19
1304
- #: views/privacy-tools/form-identify.php:22
1305
- msgid "Enter your email address"
1306
- msgstr "Sisestage oma e-maili aadress"
1307
-
1308
- #: views/privacy-tools/form-identify.php:25
1309
- msgid "Send email"
1310
- msgstr "Saada e-mail"
1311
-
1312
- #: views/privacy-tools/notice-admin-role.php:4
1313
- msgctxt "(Admin)"
1314
- msgid "Data deletion is disabled for administrative accounts."
1315
- msgstr ""
1316
-
1317
- #: views/privacy-tools/notices.php:3
1318
- msgid ""
1319
- "We will send you an email with the link to access your data. Please check "
1320
- "your spam folder as well!"
1321
- msgstr ""
1322
- "Saadame teile e-maili koos lingiga mis võimaldab teie isiklikele andmetele "
1323
- "ligi pääseda. Palun kontrollige ka oma rämpsposti!"
1324
-
1325
- #: views/privacy-tools/notices.php:7
1326
- msgid "The email you entered does not appear to be a valid email."
1327
- msgstr "Sisestatud e-mail on vigane."
1328
-
1329
- #: views/privacy-tools/notices.php:11
1330
- msgid "Sorry - the link seems to have expired. Please try again!"
1331
- msgstr "Vabandame - see link on aegunud. Palun proovige uuesti!"
1332
-
1333
- #: views/privacy-tools/notices.php:23
1334
- msgid "Your personal data has been removed!"
1335
- msgstr "Teie isiklikud andmed on kustutatud!"
1336
-
1337
- #: views/privacy-tools/privacy-tools.php:5
1338
- msgid "You are identified as"
1339
- msgstr "Te olete tuvastatud e-maili aadressiga"
1340
-
1341
- #~ msgid "Manage consents"
1342
- #~ msgstr "Halda nõusolekuid"
1343
-
1344
- #~ msgid "Back to Privacy Tools"
1345
- #~ msgstr "Tagasi privaatsustööriistade juurde"
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-05-22 15:47+0300\n"
11
+ "PO-Revision-Date: 2018-05-22 15:48+0300\n"
12
+ "Last-Translator: Codelight <team@codelight.eu>\n"
13
+ "Language-Team: \n"
14
+ "Language: et_EE\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "X-Generator: Poedit 2.0.6\n"
19
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
+
21
+ #: gdpr-framework.php:28
22
+ msgctxt "(Admin)"
23
+ msgid "WordPress GDPR &rsaquo; Error"
24
+ msgstr ""
25
+
26
+ #: gdpr-framework.php:38
27
+ msgctxt "(Admin)"
28
+ msgid "You must be using PHP 5.6.0 or greater."
29
+ msgstr ""
30
+
31
+ #: gdpr-framework.php:39
32
+ msgctxt "(Admin)"
33
+ msgid "Invalid PHP version"
34
+ msgstr ""
35
+
36
+ #: gdpr-framework.php:48
37
+ msgctxt "(Admin)"
38
+ msgid "You must be using WordPress 4.3.0 or greater."
39
+ msgstr ""
40
+
41
+ #: gdpr-framework.php:49
42
+ msgctxt "(Admin)"
43
+ msgid "Invalid WordPress version"
44
+ msgstr ""
45
+
46
+ #: gdpr-framework.php:61
47
+ msgctxt "(Admin)"
48
+ msgid ""
49
+ "You appear to be running a development version of GDPR. You must run "
50
+ "<code>composer install</code> from the plugin directory."
51
+ msgstr ""
52
+
53
+ #: gdpr-framework.php:66
54
+ msgctxt "(Admin)"
55
+ msgid "Autoloader not found."
56
+ msgstr ""
57
+
58
+ #: gdpr-framework.php:86 src/Updater/Updater.php:40
59
+ msgctxt "(Admin)"
60
+ msgid "Anonymous"
61
+ msgstr ""
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/AdminTabConsent.php:179
204
+ msgid ""
205
+ "To use this website, you accepted our Privacy Policy. If you wish to "
206
+ "withdraw your acceptance, please use the \"Delete my data\" button below."
207
+ msgstr ""
208
+
209
+ #: src/Components/Consent/ConsentManager.php:46
210
+ #: views/modules/contact-form-7/content-privacy.php:2
211
+ #: views/modules/wordpress-comments/terms-checkbox.php:14
212
+ #: views/modules/wordpress-user/registration-terms-checkbox.php:15
213
+ #, php-format
214
+ msgid "I accept the %sPrivacy Policy%s"
215
+ msgstr "Nõustun %sprivaatsustingimustega%s"
216
+
217
+ #: src/Components/Consent/ConsentManager.php:50
218
+ #: src/Components/Consent/ConsentManager.php:69
219
+ msgctxt "(Admin)"
220
+ msgid ""
221
+ "This consent is not visible by default. If someone wishes to withdraw it, "
222
+ "they should simply request to delete all their data."
223
+ msgstr ""
224
+
225
+ #: src/Components/Consent/ConsentManager.php:65
226
+ #, php-format
227
+ msgid "I accept the %sTerms & Conditions%s"
228
+ msgstr "Nõustun %stingimustega%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 ""
236
+
237
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
238
+ msgctxt "(Admin)"
239
+ msgid "Company information"
240
+ msgstr ""
241
+
242
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
243
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
244
+ msgctxt "(Admin)"
245
+ msgid "Company Name"
246
+ msgstr ""
247
+
248
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
249
+ msgctxt "(Admin)"
250
+ msgid "Company Email"
251
+ msgstr ""
252
+
253
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
254
+ msgctxt "(Admin)"
255
+ msgid "Company Location"
256
+ msgstr ""
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 ""
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 ""
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 ""
275
+
276
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
277
+ msgctxt "(Admin)"
278
+ msgid "Data Protection Authority"
279
+ msgstr ""
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 ""
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 ""
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 ""
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 ""
304
+
305
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
306
+ msgctxt "(Admin)"
307
+ msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
308
+ msgstr ""
309
+
310
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
311
+ msgctxt "(Admin)"
312
+ msgid "Data Protection Officer Name"
313
+ msgstr ""
314
+
315
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
316
+ msgctxt "(Admin)"
317
+ msgid "Data Protection Officer Email"
318
+ msgstr ""
319
+
320
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
321
+ msgctxt "(Admin)"
322
+ msgid "Contact Email"
323
+ msgstr ""
324
+
325
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
326
+ msgctxt "(Admin)"
327
+ msgid "Representative Contact"
328
+ msgstr ""
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
+
335
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
336
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
337
+ msgctxt "(Admin)"
338
+ msgid "DPO Name"
339
+ msgstr ""
340
+
341
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
342
+ msgctxt "(Admin)"
343
+ msgid "Save & Generate Policy"
344
+ msgstr ""
345
+
346
+ #: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
347
+ #: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
348
+ #: views/themes/storefront/footer.php:3
349
+ #: views/themes/twentyseventeen/footer.php:3
350
+ #: views/themes/twentysixteen/footer.php:4
351
+ msgid "Privacy Policy"
352
+ msgstr "Privaatsustingimused"
353
+
354
+ #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
355
+ msgid "This page is currently disabled."
356
+ msgstr "See leht on hetkel välja lülitatud."
357
+
358
+ #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
359
+ #: src/Installer/Installer.php:279
360
+ #: src/Installer/Steps/ConfigurationPages.php:55
361
+ #: views/themes/storefront/footer.php:7
362
+ #: views/themes/twentyseventeen/footer.php:7
363
+ #: views/themes/twentysixteen/footer.php:9
364
+ msgid "Privacy Tools"
365
+ msgstr "Privaatsustööriistad"
366
+
367
+ #: src/Components/Support/AdminTabSupport.php:13
368
+ #: src/Components/Support/AdminTabSupport.php:20
369
+ msgctxt "(Admin)"
370
+ msgid "Support"
371
+ msgstr ""
372
+
373
+ #: src/Components/WordpressComments/WordpressComments.php:90
374
+ #, php-format
375
+ msgid ""
376
+ "%sERROR:%s You need to accept the terms and conditions to post a comment."
377
+ msgstr "%sVIGA%s Kommenteerimiseks peate nõustuma tingimustega."
378
+
379
+ #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
380
+ #: views/privacy-tools/notices.php:19
381
+ msgid "We have received your request and will reply within 30 days."
382
+ msgstr "Saime teie taotluse kätte ning vastame 30 päeva jooksul."
383
+
384
+ #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
385
+ #: views/privacy-tools/notices.php:15
386
+ msgid "Consent withdrawn."
387
+ msgstr "Nõusolek tagasi võetud."
388
+
389
+ #: src/Components/WordpressUser/RegistrationForm.php:42
390
+ msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
391
+ msgstr "<strong>VIGA</strong>: Tingimustega nõustumine on kohustuslik."
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 ""
399
+
400
+ #: src/DataSubject/AdminTabDataSubject.php:27
401
+ #: src/DataSubject/AdminTabDataSubject.php:41
402
+ msgctxt "(Admin)"
403
+ msgid "Data Subjects"
404
+ msgstr ""
405
+
406
+ #: src/DataSubject/DataRepository.php:143
407
+ msgid "Data exported"
408
+ msgstr "Andmed eksporditud"
409
+
410
+ #: src/DataSubject/DataRepository.php:158
411
+ msgid "Data export request"
412
+ msgstr "Andmete eksportimise taotlus"
413
+
414
+ #: src/DataSubject/DataRepository.php:171
415
+ msgid "Data removed"
416
+ msgstr "Andmed kustutatud"
417
+
418
+ #: src/DataSubject/DataRepository.php:186
419
+ msgid "Data removal request"
420
+ msgstr "Andmete kustutamise taotlus"
421
+
422
+ #: src/DataSubject/DataSubjectIdentificator.php:65
423
+ #: src/DataSubject/DataSubjectIdentificator.php:82
424
+ msgid "Your personal data on"
425
+ msgstr "Sinu isiklikud andmed lehel"
426
+
427
+ #: src/Helpers.php:27
428
+ msgctxt "(Admin)"
429
+ msgid "Austria"
430
+ msgstr ""
431
+
432
+ #: src/Helpers.php:28
433
+ msgctxt "(Admin)"
434
+ msgid "Belgium"
435
+ msgstr ""
436
+
437
+ #: src/Helpers.php:29
438
+ msgctxt "(Admin)"
439
+ msgid "Bulgaria"
440
+ msgstr ""
441
+
442
+ #: src/Helpers.php:30
443
+ msgctxt "(Admin)"
444
+ msgid "Croatia"
445
+ msgstr ""
446
+
447
+ #: src/Helpers.php:31
448
+ msgctxt "(Admin)"
449
+ msgid "Cyprus"
450
+ msgstr ""
451
+
452
+ #: src/Helpers.php:32
453
+ msgctxt "(Admin)"
454
+ msgid "Czech Republic"
455
+ msgstr ""
456
+
457
+ #: src/Helpers.php:33
458
+ msgctxt "(Admin)"
459
+ msgid "Denmark"
460
+ msgstr ""
461
+
462
+ #: src/Helpers.php:34
463
+ msgctxt "(Admin)"
464
+ msgid "Estonia"
465
+ msgstr ""
466
+
467
+ #: src/Helpers.php:35
468
+ msgctxt "(Admin)"
469
+ msgid "Finland"
470
+ msgstr ""
471
+
472
+ #: src/Helpers.php:36
473
+ msgctxt "(Admin)"
474
+ msgid "France"
475
+ msgstr ""
476
+
477
+ #: src/Helpers.php:37
478
+ msgctxt "(Admin)"
479
+ msgid "Germany"
480
+ msgstr ""
481
+
482
+ #: src/Helpers.php:38
483
+ msgctxt "(Admin)"
484
+ msgid "Greece"
485
+ msgstr ""
486
+
487
+ #: src/Helpers.php:39
488
+ msgctxt "(Admin)"
489
+ msgid "Hungary"
490
+ msgstr ""
491
+
492
+ #: src/Helpers.php:40
493
+ msgctxt "(Admin)"
494
+ msgid "Ireland"
495
+ msgstr ""
496
+
497
+ #: src/Helpers.php:41
498
+ msgctxt "(Admin)"
499
+ msgid "Italy"
500
+ msgstr ""
501
+
502
+ #: src/Helpers.php:42
503
+ msgctxt "(Admin)"
504
+ msgid "Latvia"
505
+ msgstr ""
506
+
507
+ #: src/Helpers.php:43
508
+ msgctxt "(Admin)"
509
+ msgid "Lithuania"
510
+ msgstr ""
511
+
512
+ #: src/Helpers.php:44
513
+ msgctxt "(Admin)"
514
+ msgid "Luxembourg"
515
+ msgstr ""
516
+
517
+ #: src/Helpers.php:45
518
+ msgctxt "(Admin)"
519
+ msgid "Malta"
520
+ msgstr ""
521
+
522
+ #: src/Helpers.php:46
523
+ msgctxt "(Admin)"
524
+ msgid "Netherlands"
525
+ msgstr ""
526
+
527
+ #: src/Helpers.php:47
528
+ msgctxt "(Admin)"
529
+ msgid "Poland"
530
+ msgstr ""
531
+
532
+ #: src/Helpers.php:48
533
+ msgctxt "(Admin)"
534
+ msgid "Portugal"
535
+ msgstr ""
536
+
537
+ #: src/Helpers.php:49
538
+ msgctxt "(Admin)"
539
+ msgid "Romania"
540
+ msgstr ""
541
+
542
+ #: src/Helpers.php:50
543
+ msgctxt "(Admin)"
544
+ msgid "Slovakia"
545
+ msgstr ""
546
+
547
+ #: src/Helpers.php:51
548
+ msgctxt "(Admin)"
549
+ msgid "Slovenia"
550
+ msgstr ""
551
+
552
+ #: src/Helpers.php:52
553
+ msgctxt "(Admin)"
554
+ msgid "Spain"
555
+ msgstr ""
556
+
557
+ #: src/Helpers.php:53
558
+ msgctxt "(Admin)"
559
+ msgid "Sweden"
560
+ msgstr ""
561
+
562
+ #: src/Helpers.php:54
563
+ msgctxt "(Admin)"
564
+ msgid "United Kingdom"
565
+ msgstr ""
566
+
567
+ #: src/Helpers.php:69
568
+ msgctxt "(Admin)"
569
+ msgid "Iceland"
570
+ msgstr ""
571
+
572
+ #: src/Helpers.php:70
573
+ msgctxt "(Admin)"
574
+ msgid "Norway"
575
+ msgstr ""
576
+
577
+ #: src/Helpers.php:71
578
+ msgctxt "(Admin)"
579
+ msgid "Liechtenstein"
580
+ msgstr ""
581
+
582
+ #: src/Helpers.php:72
583
+ msgctxt "(Admin)"
584
+ msgid "Switzerland"
585
+ msgstr ""
586
+
587
+ #: src/Helpers.php:73
588
+ msgctxt "(Admin)"
589
+ msgid "United States"
590
+ msgstr ""
591
+
592
+ #: src/Helpers.php:74
593
+ msgctxt "(Admin)"
594
+ msgid "Rest of the world"
595
+ msgstr ""
596
+
597
+ #: src/Helpers.php:145
598
+ msgid "An error has occurred. Please contact the site administrator."
599
+ msgstr "Süsteemis tekkis viga. Palun võtke ühendust lehe haldajaga."
600
+
601
+ #: src/Installer/Installer.php:135
602
+ msgctxt "(Admin)"
603
+ msgid "Setup Wizard"
604
+ msgstr ""
605
+
606
+ #: src/Installer/Steps/ConfigurationPages.php:23
607
+ #: src/Installer/Steps/PolicySettings.php:23
608
+ #: src/Installer/Steps/PolicySettings.php:48
609
+ msgctxt "(Admin)"
610
+ msgid "&mdash; Create a new page &mdash;"
611
+ msgstr ""
612
+
613
+ #: src/Installer/Steps/PolicySettings.php:38
614
+ msgctxt "(Admin)"
615
+ msgid ""
616
+ "We have automatically selected your WooCommerce Terms & Conditions page."
617
+ msgstr ""
618
+
619
+ #: src/Modules/ContactForm7/ContactForm7.php:35
620
+ msgctxt "(Admin)"
621
+ msgid "gdpr terms txt"
622
+ msgstr ""
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 "VIGA \"%s\". Palun minge tagasi ja proovige uuesti!"
628
+
629
+ #: src/Router.php:149
630
+ msgctxt "(Admin)"
631
+ msgid "You do not have the required permissions to perform this action!"
632
+ msgstr ""
633
+
634
+ #: views/admin/consent.php:3
635
+ msgctxt "(Admin)"
636
+ msgid "Default consent types"
637
+ msgstr ""
638
+
639
+ #: views/admin/consent.php:4
640
+ msgctxt "(Admin)"
641
+ msgid ""
642
+ "These are the consent types that have been automatically registered by the "
643
+ "framework or a plugin."
644
+ msgstr ""
645
+
646
+ #: views/admin/consent.php:7 views/admin/consent.php:52
647
+ msgctxt "(Admin)"
648
+ msgid "Slug"
649
+ msgstr ""
650
+
651
+ #: views/admin/consent.php:8 views/admin/consent.php:38
652
+ #: views/admin/consent.php:60
653
+ msgctxt "(Admin)"
654
+ msgid "Title"
655
+ msgstr ""
656
+
657
+ #: views/admin/consent.php:9 views/admin/consent.php:41
658
+ #: views/admin/consent.php:63
659
+ msgctxt "(Admin)"
660
+ msgid "Description"
661
+ msgstr ""
662
+
663
+ #: views/admin/consent.php:10
664
+ msgctxt "(Admin)"
665
+ msgid "Visibility"
666
+ msgstr ""
667
+
668
+ #: views/admin/consent.php:18
669
+ msgctxt "(Admin)"
670
+ msgid "Visible"
671
+ msgstr ""
672
+
673
+ #: views/admin/consent.php:20
674
+ msgctxt "(Admin)"
675
+ msgid "Hidden"
676
+ msgstr ""
677
+
678
+ #: views/admin/consent.php:29
679
+ msgctxt "(Admin)"
680
+ msgid "Custom consent types"
681
+ msgstr ""
682
+
683
+ #: views/admin/consent.php:30
684
+ msgctxt "(Admin)"
685
+ msgid ""
686
+ "Here you can add custom consent types to track. They will not be used "
687
+ "anywhere by default - you will need to build an integration for each of them."
688
+ msgstr ""
689
+
690
+ #: views/admin/consent.php:35
691
+ msgctxt "(Admin)"
692
+ msgid "Machine-readable slug"
693
+ msgstr ""
694
+
695
+ #: views/admin/consent.php:44 views/admin/consent.php:68
696
+ msgctxt "(Admin)"
697
+ msgid "Visible?"
698
+ msgstr ""
699
+
700
+ #: views/admin/consent.php:72
701
+ msgctxt "(Admin)"
702
+ msgid "Remove"
703
+ msgstr ""
704
+
705
+ #: views/admin/consent.php:93
706
+ msgctxt "(Admin)"
707
+ msgid "Additional info"
708
+ msgstr ""
709
+
710
+ #: views/admin/consent.php:95
711
+ msgctxt "(Admin)"
712
+ msgid ""
713
+ "This text will be displayed to your data subjects on the Privacy Tools page."
714
+ msgstr ""
715
+
716
+ #: views/admin/data-subjects/search-form.php:2
717
+ msgctxt "(Admin)"
718
+ msgid ""
719
+ "On this page, you can find which data subjects personal data you are storing "
720
+ "and download, export or delete it."
721
+ msgstr ""
722
+
723
+ #: views/admin/data-subjects/search-form.php:10
724
+ msgctxt "(Admin)"
725
+ msgid "Find data subject by email"
726
+ msgstr ""
727
+
728
+ #: views/admin/data-subjects/search-form.php:11
729
+ msgctxt "(Admin)"
730
+ msgid "Email address"
731
+ msgstr ""
732
+
733
+ #: views/admin/data-subjects/search-form.php:16
734
+ msgctxt "(Admin)"
735
+ msgid "Search"
736
+ msgstr ""
737
+
738
+ #: views/admin/data-subjects/search-results.php:7
739
+ msgctxt "(Admin)"
740
+ msgid "Username"
741
+ msgstr ""
742
+
743
+ #: views/admin/data-subjects/search-results.php:12
744
+ msgctxt "(Admin)"
745
+ msgid "is not a registered user."
746
+ msgstr ""
747
+
748
+ #: views/admin/data-subjects/search-results.php:16
749
+ msgctxt "(Admin)"
750
+ msgid "Download data (html)"
751
+ msgstr ""
752
+
753
+ #: views/admin/data-subjects/search-results.php:17
754
+ msgctxt "(Admin)"
755
+ msgid "Export data (json)"
756
+ msgstr ""
757
+
758
+ #: views/admin/data-subjects/search-results.php:21
759
+ msgctxt "(Admin)"
760
+ msgid ""
761
+ "This user has admin capabilities. Deleting data via this interface is "
762
+ "disabled."
763
+ msgstr ""
764
+
765
+ #: views/admin/data-subjects/search-results.php:24
766
+ msgctxt "(Admin)"
767
+ msgid "Anonymize data"
768
+ msgstr ""
769
+
770
+ #: views/admin/data-subjects/search-results.php:25
771
+ msgctxt "(Admin)"
772
+ msgid "Delete data"
773
+ msgstr ""
774
+
775
+ #: views/admin/data-subjects/search-results.php:29
776
+ msgctxt "(Admin)"
777
+ msgid "No data found!"
778
+ msgstr ""
779
+
780
+ #: views/admin/general/delete-action-email.php:5
781
+ #: views/admin/general/export-action-email.php:5
782
+ #: views/installer/steps/configuration-settings.php:29
783
+ #: views/installer/steps/configuration-settings.php:79
784
+ msgid "Email address"
785
+ msgstr "E-maili aadress"
786
+
787
+ #: views/admin/general/delete-action-reassign.php:3
788
+ #: views/installer/steps/configuration-settings.php:50
789
+ msgctxt "(Admin)"
790
+ msgid "Delete content"
791
+ msgstr ""
792
+
793
+ #: views/admin/general/delete-action-reassign.php:6
794
+ #: views/installer/steps/configuration-settings.php:53
795
+ msgctxt "(Admin)"
796
+ msgid "Reassign content to a user"
797
+ msgstr ""
798
+
799
+ #: views/admin/general/delete-action-reassign.php:10
800
+ msgctxt "(Admin)"
801
+ msgid ""
802
+ "If the user has submitted any content on your site, should it be deleted or "
803
+ "reassigned to another user?"
804
+ msgstr ""
805
+
806
+ #: views/admin/general/description-data-page.php:2
807
+ msgctxt "(Admin)"
808
+ msgid ""
809
+ "Select the page where users can go to control their data. This page must "
810
+ "contain the [gdpr_privacy_tools] shortcode."
811
+ msgstr ""
812
+
813
+ #: views/admin/general/description-delete-action.php:2
814
+ msgctxt "(Admin)"
815
+ msgid "What should happen if a data subject requests deleting their data."
816
+ msgstr ""
817
+
818
+ #: views/admin/general/description-export-action.php:2
819
+ msgctxt "(Admin)"
820
+ msgid ""
821
+ "What should happen if a data subject requests viewing or exporting their "
822
+ "data."
823
+ msgstr ""
824
+
825
+ #: views/admin/general/description-terms-page.php:2
826
+ msgctxt "(Admin)"
827
+ msgid "Optional. Select the page which contains your Terms & Conditions"
828
+ msgstr ""
829
+
830
+ #: views/admin/general/enable.php:9
831
+ msgctxt "(Admin)"
832
+ msgid "Enable the view, export and forget functionality for users and visitors"
833
+ msgstr ""
834
+
835
+ #: views/admin/general/enable.php:12
836
+ msgctxt "(Admin)"
837
+ msgid ""
838
+ "Enable the Privacy Tools page on front-end and dashboard. This allows "
839
+ "visitors to request viewing and deleting their personal data and withdraw "
840
+ "consents."
841
+ msgstr ""
842
+
843
+ #: views/admin/general/stylesheet.php:9
844
+ msgctxt "(Admin)"
845
+ msgid "Enable basic styling for Privacy Tools page."
846
+ msgstr ""
847
+
848
+ #: views/admin/general/theme-compatibility.php:9
849
+ #: views/installer/steps/integrations.php:21
850
+ msgctxt "(Admin)"
851
+ msgid ""
852
+ "Automatically add Privacy Policy and Privacy Tools links to your site footer."
853
+ msgstr ""
854
+
855
+ #: views/admin/notices/header.php:4 views/admin/settings-page.php:3
856
+ #: views/installer/header.php:23
857
+ msgctxt "(Admin)"
858
+ msgid "The GDPR Framework"
859
+ msgstr ""
860
+
861
+ #: views/admin/notices/helper-autoinstall.php:2
862
+ msgctxt "(Admin)"
863
+ msgid ""
864
+ "A Privacy Policy page has been created, but it is empty. You can generate a "
865
+ "policy template on this page."
866
+ msgstr ""
867
+
868
+ #: views/admin/notices/helper-policy.php:2
869
+ msgctxt "(Admin)"
870
+ msgid ""
871
+ "Heads up - your Privacy Policy still requires some attention. Find the "
872
+ "places marked with [TODO] and replace them with real content!"
873
+ msgstr ""
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 ""
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 ""
884
+
885
+ #: views/admin/privacy-policy/generated.php:3
886
+ msgctxt "(Admin)"
887
+ msgid "Your Privacy Policy has been generated."
888
+ msgstr ""
889
+
890
+ #: views/admin/privacy-policy/generated.php:20
891
+ msgctxt "(Admin)"
892
+ msgid "&laquo; Back"
893
+ msgstr ""
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 "
899
+ "you entered below."
900
+ msgstr ""
901
+
902
+ #: views/admin/settings-page.php:8
903
+ msgctxt "(Admin)"
904
+ msgid "GDPR settings saved!"
905
+ msgstr ""
906
+
907
+ #: views/admin/settings-page.php:31
908
+ #, php-format
909
+ msgctxt "(Admin)"
910
+ msgid "The GDPR Framework. Built with &#9829; by %sCodelight%s."
911
+ msgstr ""
912
+
913
+ #: views/admin/settings-page.php:39
914
+ #, php-format
915
+ msgctxt "(Admin)"
916
+ msgid "Support our development efforts with a %s5-star rating%s."
917
+ msgstr ""
918
+
919
+ #: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
920
+ msgctxt "(Admin)"
921
+ msgid "Need more info?"
922
+ msgstr ""
923
+
924
+ #: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
925
+ msgctxt "(Admin)"
926
+ msgid "Site Owner's guide to GDPR"
927
+ msgstr ""
928
+
929
+ #: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
930
+ msgctxt "(Admin)"
931
+ msgid "Read the full guide on GDPR compliance."
932
+ msgstr ""
933
+
934
+ #: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
935
+ msgctxt "(Admin)"
936
+ msgid "Knowledge base"
937
+ msgstr ""
938
+
939
+ #: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
940
+ msgctxt "(Admin)"
941
+ msgid "Check out the knowledge base for common questions and answers."
942
+ msgstr ""
943
+
944
+ #: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
945
+ msgctxt "(Admin)"
946
+ msgid "Developer's guide to GDPR"
947
+ msgstr ""
948
+
949
+ #: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
950
+ msgctxt "(Admin)"
951
+ msgid "We have a thorough guide to help making custom sites compliant."
952
+ msgstr ""
953
+
954
+ #: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
955
+ msgctxt "(Admin)"
956
+ msgid "Need help?"
957
+ msgstr ""
958
+
959
+ #: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
960
+ msgctxt "(Admin)"
961
+ msgid "Submit a support request"
962
+ msgstr ""
963
+
964
+ #: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
965
+ msgctxt "(Admin)"
966
+ msgid ""
967
+ "Found a bug or problem with the plugin? Post in the wordpress.org support "
968
+ "forum."
969
+ msgstr ""
970
+
971
+ #: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
972
+ msgctxt "(Admin)"
973
+ msgid "Request a consultation"
974
+ msgstr ""
975
+
976
+ #: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
977
+ msgctxt "(Admin)"
978
+ msgid ""
979
+ "Need development or legal assistance in making your site compliant? We can "
980
+ "help!"
981
+ msgstr ""
982
+
983
+ #: views/admin/wizard-buttons.php:2
984
+ msgctxt "(Admin)"
985
+ msgid "Restart setup wizard"
986
+ msgstr ""
987
+
988
+ #: views/email/action-export.php:8 views/email/action-forget.php:12
989
+ msgctxt "(Admin)"
990
+ msgid ""
991
+ "This email is just for your information. You don't need to take any action"
992
+ msgstr ""
993
+
994
+ #: views/email/action-forget.php:8
995
+ msgctxt "(Admin)"
996
+ msgid "The data subject had a user account on your website."
997
+ msgstr ""
998
+
999
+ #: views/email/identify-data-subject.php:2
1000
+ msgid "Someone has requested access to your data on"
1001
+ msgstr "Keegi on taotlenud ligipääsu teie andmetele leheküljel"
1002
+
1003
+ #: views/email/identify-data-subject.php:3
1004
+ msgid "If this was a mistake, just ignore this email and nothing will happen."
1005
+ msgstr ""
1006
+ "Kui see oli viga, siis lihtsalt ignoreerige seda kirja ning mitte midagi ei "
1007
+ "juhtu."
1008
+
1009
+ #: views/email/identify-data-subject.php:4
1010
+ msgid "To manage your data, visit the following address:"
1011
+ msgstr "Kui soovite oma andmeid hallata, külastage järgnevat aadress:"
1012
+
1013
+ #: views/email/identify-data-subject.php:10
1014
+ msgid "This link is valid for 15 minutes."
1015
+ msgstr "See link on aktiivne 15 minutit."
1016
+
1017
+ #: views/email/no-data.php:2
1018
+ msgid "Someone has requested information about your personal data on"
1019
+ msgstr "Keegi on taotlenud infot teie isiklike andmete kohta leheküljel"
1020
+
1021
+ #: views/email/no-data.php:3
1022
+ msgid "None of your personal data is stored on"
1023
+ msgstr "Leheküljel ei ole kohta isiklikke andmeid"
1024
+
1025
+ #: views/email/no-data.php:5
1026
+ msgid ""
1027
+ "If this was a mistake or you did not request this email, just ignore it and "
1028
+ "nothing will happen."
1029
+ msgstr ""
1030
+ "Kui see oli viga, siis lihtsalt ignoreerige seda kirja ning mitte midagi ei "
1031
+ "juhtu."
1032
+
1033
+ #: views/email/request-export.php:13 views/email/request-forget.php:13
1034
+ msgctxt "(Admin)"
1035
+ msgid "As a reminder: according to GDPR, you have 30 days to comply."
1036
+ msgstr ""
1037
+
1038
+ #: views/global/delete-action.php:2
1039
+ msgctxt "(Admin)"
1040
+ msgid "Automatically anonymize data"
1041
+ msgstr ""
1042
+
1043
+ #: views/global/delete-action.php:5
1044
+ msgctxt "(Admin)"
1045
+ msgid "Automatically delete data"
1046
+ msgstr ""
1047
+
1048
+ #: views/global/delete-action.php:9
1049
+ msgctxt "(Admin)"
1050
+ msgid "Automatically anonymize data and notify me via email"
1051
+ msgstr ""
1052
+
1053
+ #: views/global/delete-action.php:13
1054
+ msgctxt "(Admin)"
1055
+ msgid "Automatically delete data and notify me via email"
1056
+ msgstr ""
1057
+
1058
+ #: views/global/delete-action.php:16 views/global/export-action.php:10
1059
+ msgctxt "(Admin)"
1060
+ msgid "Only notify me via email"
1061
+ msgstr ""
1062
+
1063
+ #: views/global/export-action.php:2
1064
+ msgctxt "(Admin)"
1065
+ msgid "Automatically download data"
1066
+ msgstr ""
1067
+
1068
+ #: views/global/export-action.php:6
1069
+ msgctxt "(Admin)"
1070
+ msgid "Automatically download data and notify me via email"
1071
+ msgstr ""
1072
+
1073
+ #: views/installer/continue-notice.php:2
1074
+ msgctxt "(Admin)"
1075
+ msgid "The The GDPR Framework setup has not been finalized yet."
1076
+ msgstr ""
1077
+
1078
+ #: views/installer/continue-notice.php:3
1079
+ msgctxt "(Admin)"
1080
+ msgid "You can continue the setup at any time."
1081
+ msgstr ""
1082
+
1083
+ #: views/installer/continue-notice.php:6
1084
+ msgctxt "(Admin)"
1085
+ msgid "Continue the setup wizard"
1086
+ msgstr ""
1087
+
1088
+ #: views/installer/continue-notice.php:9
1089
+ msgctxt "(Admin)"
1090
+ msgid "Hide this message"
1091
+ msgstr ""
1092
+
1093
+ #: views/installer/footer.php:7
1094
+ msgid "Back"
1095
+ msgstr "Tagasi"
1096
+
1097
+ #: views/installer/header.php:26
1098
+ msgctxt "(Admin)"
1099
+ msgid "I need help"
1100
+ msgstr ""
1101
+
1102
+ #: views/installer/header.php:29
1103
+ msgctxt "(Admin)"
1104
+ msgid "Developer Docs"
1105
+ msgstr ""
1106
+
1107
+ #: views/installer/header.php:36
1108
+ msgctxt "(Admin)"
1109
+ msgid "Configuration"
1110
+ msgstr ""
1111
+
1112
+ #: views/installer/header.php:46
1113
+ msgctxt "(Admin)"
1114
+ msgid "Forms & Consent"
1115
+ msgstr ""
1116
+
1117
+ #: views/installer/header.php:51
1118
+ msgctxt "(Admin)"
1119
+ msgid "Integrations"
1120
+ msgstr ""
1121
+
1122
+ #: views/installer/steps/configuration-settings.php:23
1123
+ #: views/installer/steps/configuration-settings.php:73
1124
+ msgctxt "(Admin)"
1125
+ msgid "Enter the email address to notify"
1126
+ msgstr ""
1127
+
1128
+ #: views/installer/steps/disclaimer.php:21
1129
+ msgctxt "(Admin)"
1130
+ msgid "I accept"
1131
+ msgstr ""
1132
+
1133
+ #: views/installer/welcome-notice.php:7
1134
+ msgctxt "(Admin)"
1135
+ msgid "Run the setup wizard"
1136
+ msgstr ""
1137
+
1138
+ #: views/installer/welcome-notice.php:11
1139
+ msgctxt "(Admin)"
1140
+ msgid "Auto-install pages"
1141
+ msgstr ""
1142
+
1143
+ #: views/installer/welcome-notice.php:15
1144
+ msgctxt "(Admin)"
1145
+ msgid "Skip and install manually"
1146
+ msgstr ""
1147
+
1148
+ #: views/modules/contact-form-7/generator-privacy.php:6
1149
+ msgctxt "(Admin)"
1150
+ msgid ""
1151
+ "This tag generates the default text for Terms & Conditions and/or Privacy "
1152
+ "Policy checkbox."
1153
+ msgstr ""
1154
+
1155
+ #: views/modules/contact-form-7/generator-privacy.php:15
1156
+ msgid "Insert"
1157
+ msgstr "Sisesta"
1158
+
1159
+ #: views/modules/wordpress-comments/terms-checkbox.php:6
1160
+ #: views/modules/wordpress-user/registration-terms-checkbox.php:7
1161
+ #, php-format
1162
+ msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1163
+ msgstr "Nõustun %sKasutustingimustega%s ja %sPrivaatsustingimustega%s"
1164
+
1165
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
1166
+ #: views/privacy-tools/form-consent.php:2
1167
+ msgid "Consent"
1168
+ msgstr "Nõusolek"
1169
+
1170
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
1171
+ #: views/privacy-tools/form-consent.php:6
1172
+ msgid "Here you can withdraw any consents you have given."
1173
+ msgstr "Siin saate tagasi võtta kõik antud nõusolekud"
1174
+
1175
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
1176
+ msgid "Consents"
1177
+ msgstr "Nõusolekud"
1178
+
1179
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
1180
+ #: views/privacy-tools/form-consent.php:24
1181
+ msgid "Withdraw"
1182
+ msgstr "Võta tagasi"
1183
+
1184
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
1185
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
1186
+ msgctxt "(Admin)"
1187
+ msgid "Delete this user and all data"
1188
+ msgstr ""
1189
+
1190
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
1191
+ msgctxt "(Admin)"
1192
+ msgid "Delete my data"
1193
+ msgstr ""
1194
+
1195
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
1196
+ #: views/privacy-tools/form-delete.php:13
1197
+ msgid "Delete all data we have gathered about you."
1198
+ msgstr "Kogu info teie kohta kustutatakse."
1199
+
1200
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
1201
+ #: views/privacy-tools/form-delete.php:14
1202
+ msgid "If you have a user account on our site, it will also be deleted."
1203
+ msgstr "Kui teil on meie lehel kasutajakonto, siis ka see kustutatakse."
1204
+
1205
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
1206
+ #: views/privacy-tools/form-delete.php:15
1207
+ msgid "Be careful - this action is permanent and CANNOT be undone."
1208
+ msgstr "Ettevaatust - seda tegevust EI SAA tagasi võtta."
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/"
1215
+ "anonymizing via this page is disabled."
1216
+ msgstr ""
1217
+
1218
+ #: views/modules/wordpress-user/dashboard/form-export.php:7
1219
+ #: views/privacy-tools/form-export.php:1
1220
+ msgid "Download your data"
1221
+ msgstr "Lae oma andmed alla"
1222
+
1223
+ #: views/modules/wordpress-user/dashboard/form-export.php:12
1224
+ #: views/privacy-tools/form-export.php:13
1225
+ msgid "Download as table"
1226
+ msgstr "Lae oma andmed tabelina alla"
1227
+
1228
+ #: views/modules/wordpress-user/dashboard/form-export.php:15
1229
+ #: views/privacy-tools/form-export.php:22
1230
+ msgid "Export as JSON"
1231
+ msgstr "Ekspordi JSON failina"
1232
+
1233
+ #: views/modules/wordpress-user/dashboard/form-export.php:19
1234
+ #: views/privacy-tools/form-export.php:4
1235
+ msgid "You can download all your data formatted as a table for viewing."
1236
+ msgstr "Saate oma andmed tabeli kujul alla laadida"
1237
+
1238
+ #: views/modules/wordpress-user/dashboard/form-export.php:20
1239
+ #: views/privacy-tools/form-export.php:5
1240
+ msgid "Alternatively, you can export it in machine-readable JSON format."
1241
+ msgstr "Alternatiivselt saate eksportida faili masinloetavas JSON formaadis."
1242
+
1243
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
1244
+ msgctxt "(Admin)"
1245
+ msgid "Delete user and all data"
1246
+ msgstr ""
1247
+
1248
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
1249
+ msgctxt "(Admin)"
1250
+ msgid "Anonymize user and all data"
1251
+ msgstr ""
1252
+
1253
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:18
1254
+ #, fuzzy
1255
+ #| msgid "Be careful - this action is permanent and CANNOT be undone."
1256
+ msgctxt "gdpr-framework"
1257
+ msgid "Be careful - this action is permanent and CANNOT be undone."
1258
+ msgstr "Ettevaatust - seda tegevust EI SAA tagasi võtta."
1259
+
1260
+ #: views/modules/wordpress-user/dashboard/profile-page/header.php:2
1261
+ msgctxt "(Admin)"
1262
+ msgid "GDPR Data"
1263
+ msgstr ""
1264
+
1265
+ #: views/modules/wordpress-user/dashboard/profile-page/header.php:6
1266
+ msgctxt "(Admin)"
1267
+ msgid "This user has been anonymized."
1268
+ msgstr ""
1269
+
1270
+ #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
1271
+ msgctxt "(Admin)"
1272
+ msgid "Consents given"
1273
+ msgstr ""
1274
+
1275
+ #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
1276
+ msgctxt "(Admin)"
1277
+ msgid "No consents given"
1278
+ msgstr ""
1279
+
1280
+ #: views/privacy-tools/form-consent.php:9
1281
+ msgid "Consent types"
1282
+ msgstr "Nõusoleku tüübid"
1283
+
1284
+ #: views/privacy-tools/form-delete.php:1
1285
+ #: views/privacy-tools/notice-admin-role.php:1
1286
+ msgid "Delete my user and data"
1287
+ msgstr "Kustuta minu kasutaja ja andmed"
1288
+
1289
+ #: views/privacy-tools/form-delete.php:7
1290
+ msgid "Delete my data"
1291
+ msgstr "Kustuta minu andmed"
1292
+
1293
+ #: views/privacy-tools/form-identify.php:8
1294
+ msgid "Back to front page"
1295
+ msgstr ""
1296
+
1297
+ #: views/privacy-tools/form-identify.php:15
1298
+ #, fuzzy
1299
+ #| msgid "Identify yourself!"
1300
+ msgid "Please identify yourself via e-mail"
1301
+ msgstr "Tuvasta ennast!"
1302
+
1303
+ #: views/privacy-tools/form-identify.php:19
1304
+ #: views/privacy-tools/form-identify.php:22
1305
+ msgid "Enter your email address"
1306
+ msgstr "Sisestage oma e-maili aadress"
1307
+
1308
+ #: views/privacy-tools/form-identify.php:25
1309
+ msgid "Send email"
1310
+ msgstr "Saada e-mail"
1311
+
1312
+ #: views/privacy-tools/notice-admin-role.php:4
1313
+ msgctxt "(Admin)"
1314
+ msgid "Data deletion is disabled for administrative accounts."
1315
+ msgstr ""
1316
+
1317
+ #: views/privacy-tools/notices.php:3
1318
+ msgid ""
1319
+ "We will send you an email with the link to access your data. Please check "
1320
+ "your spam folder as well!"
1321
+ msgstr ""
1322
+ "Saadame teile e-maili koos lingiga mis võimaldab teie isiklikele andmetele "
1323
+ "ligi pääseda. Palun kontrollige ka oma rämpsposti!"
1324
+
1325
+ #: views/privacy-tools/notices.php:7
1326
+ msgid "The email you entered does not appear to be a valid email."
1327
+ msgstr "Sisestatud e-mail on vigane."
1328
+
1329
+ #: views/privacy-tools/notices.php:11
1330
+ msgid "Sorry - the link seems to have expired. Please try again!"
1331
+ msgstr "Vabandame - see link on aegunud. Palun proovige uuesti!"
1332
+
1333
+ #: views/privacy-tools/notices.php:23
1334
+ msgid "Your personal data has been removed!"
1335
+ msgstr "Teie isiklikud andmed on kustutatud!"
1336
+
1337
+ #: views/privacy-tools/privacy-tools.php:5
1338
+ msgid "You are identified as"
1339
+ msgstr "Te olete tuvastatud e-maili aadressiga"
1340
+
1341
+ #~ msgid "Manage consents"
1342
+ #~ msgstr "Halda nõusolekuid"
1343
+
1344
+ #~ msgid "Back to Privacy Tools"
1345
+ #~ msgstr "Tagasi privaatsustööriistade juurde"
languages/gdpr-framework.pot CHANGED
@@ -1,1328 +1,1328 @@
1
- # SOME DESCRIPTIVE TITLE.
2
- # Copyright (C) YEAR Codelight
3
- # This file is distributed under the same license as the The GDPR Framework package.
4
- # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
- #
6
- #, fuzzy
7
- msgid ""
8
- msgstr ""
9
- "Project-Id-Version: The GDPR Framework 1.0\n"
10
- "Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
11
- "POT-Creation-Date: 2018-05-22 15:47+0300\n"
12
- "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
- "Language-Team: LANGUAGE <LL@li.org>\n"
15
- "Language: \n"
16
- "MIME-Version: 1.0\n"
17
- "Content-Type: text/plain; charset=CHARSET\n"
18
- "Content-Transfer-Encoding: 8bit\n"
19
-
20
- #: gdpr-framework.php:28
21
- msgctxt "(Admin)"
22
- msgid "WordPress GDPR &rsaquo; Error"
23
- msgstr ""
24
-
25
- #: gdpr-framework.php:38
26
- msgctxt "(Admin)"
27
- msgid "You must be using PHP 5.6.0 or greater."
28
- msgstr ""
29
-
30
- #: gdpr-framework.php:39
31
- msgctxt "(Admin)"
32
- msgid "Invalid PHP version"
33
- msgstr ""
34
-
35
- #: gdpr-framework.php:48
36
- msgctxt "(Admin)"
37
- msgid "You must be using WordPress 4.3.0 or greater."
38
- msgstr ""
39
-
40
- #: gdpr-framework.php:49
41
- msgctxt "(Admin)"
42
- msgid "Invalid WordPress version"
43
- msgstr ""
44
-
45
- #: gdpr-framework.php:61
46
- msgctxt "(Admin)"
47
- msgid ""
48
- "You appear to be running a development version of GDPR. You must run "
49
- "<code>composer install</code> from the plugin directory."
50
- msgstr ""
51
-
52
- #: gdpr-framework.php:66
53
- msgctxt "(Admin)"
54
- msgid "Autoloader not found."
55
- msgstr ""
56
-
57
- #: gdpr-framework.php:86 src/Updater/Updater.php:40
58
- msgctxt "(Admin)"
59
- msgid "Anonymous"
60
- msgstr ""
61
-
62
- #: src/Admin/AdminTab.php:115
63
- msgctxt "(Admin)"
64
- msgid "Save"
65
- msgstr ""
66
-
67
- #: src/Admin/AdminTab.php:151
68
- msgctxt "(Admin)"
69
- msgid "Policy generated!"
70
- msgstr ""
71
-
72
- #: src/Admin/AdminTabGeneral.php:11
73
- msgctxt "(Admin)"
74
- msgid "General"
75
- msgstr ""
76
-
77
- #: src/Admin/AdminTabGeneral.php:38
78
- msgctxt "(Admin)"
79
- msgid "General Settings"
80
- msgstr ""
81
-
82
- #: src/Admin/AdminTabGeneral.php:43
83
- msgctxt "(Admin)"
84
- msgid "Enable Privacy Tools"
85
- msgstr ""
86
-
87
- #: src/Admin/AdminTabGeneral.php:53
88
- msgctxt "(Admin)"
89
- msgid "Pages"
90
- msgstr ""
91
-
92
- #: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
93
- msgctxt "(Admin)"
94
- msgid "Privacy Tools Page"
95
- msgstr ""
96
-
97
- #: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
98
- msgctxt "(Admin)"
99
- msgid "Privacy Policy Page"
100
- msgstr ""
101
-
102
- #: src/Admin/AdminTabGeneral.php:72
103
- msgctxt "(Admin)"
104
- msgid "Terms & Conditions Page"
105
- msgstr ""
106
-
107
- #: src/Admin/AdminTabGeneral.php:82
108
- msgctxt "(Admin)"
109
- msgid "View & Export Data"
110
- msgstr ""
111
-
112
- #: src/Admin/AdminTabGeneral.php:87
113
- msgctxt "(Admin)"
114
- msgid "Export action"
115
- msgstr ""
116
-
117
- #: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
118
- msgctxt "(Admin)"
119
- msgid "Email to notify"
120
- msgstr ""
121
-
122
- #: src/Admin/AdminTabGeneral.php:105
123
- msgctxt "(Admin)"
124
- msgid "Delete & Anonymize Data"
125
- msgstr ""
126
-
127
- #: src/Admin/AdminTabGeneral.php:110
128
- msgctxt "(Admin)"
129
- msgid "Delete action"
130
- msgstr ""
131
-
132
- #: src/Admin/AdminTabGeneral.php:117
133
- msgctxt "(Admin)"
134
- msgid "Delete or reassign content?"
135
- msgstr ""
136
-
137
- #: src/Admin/AdminTabGeneral.php:125
138
- msgctxt "(Admin)"
139
- msgid "Reassign content to"
140
- msgstr ""
141
-
142
- #: src/Admin/AdminTabGeneral.php:145
143
- msgctxt "(Admin)"
144
- msgid "Styling"
145
- msgstr ""
146
-
147
- #: src/Admin/AdminTabGeneral.php:150
148
- msgctxt "(Admin)"
149
- msgid "Enable basic styling on Privacy Tools page"
150
- msgstr ""
151
-
152
- #: src/Admin/AdminTabGeneral.php:162
153
- msgctxt "(Admin)"
154
- msgid "Compatibility"
155
- msgstr ""
156
-
157
- #: src/Admin/AdminTabGeneral.php:167
158
- msgctxt "(Admin)"
159
- msgid "Enable automatic theme compatibility"
160
- msgstr ""
161
-
162
- #: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
163
- #: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
164
- #: views/installer/steps/configuration-settings.php:62
165
- msgctxt "(Admin)"
166
- msgid "&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/AdminTabConsent.php:179
203
- msgid ""
204
- "To use this website, you accepted our Privacy Policy. If you wish to "
205
- "withdraw your acceptance, please use the \"Delete my data\" button below."
206
- msgstr ""
207
-
208
- #: src/Components/Consent/ConsentManager.php:46
209
- #: views/modules/contact-form-7/content-privacy.php:2
210
- #: views/modules/wordpress-comments/terms-checkbox.php:14
211
- #: views/modules/wordpress-user/registration-terms-checkbox.php:15
212
- #, php-format
213
- msgid "I accept the %sPrivacy Policy%s"
214
- msgstr ""
215
-
216
- #: src/Components/Consent/ConsentManager.php:50
217
- #: src/Components/Consent/ConsentManager.php:69
218
- msgctxt "(Admin)"
219
- msgid ""
220
- "This consent is not visible by default. If someone wishes to withdraw it, "
221
- "they should simply request to delete all their data."
222
- msgstr ""
223
-
224
- #: src/Components/Consent/ConsentManager.php:65
225
- #, php-format
226
- msgid "I accept the %sTerms & Conditions%s"
227
- msgstr ""
228
-
229
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
230
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
231
- #: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
232
- msgctxt "(Admin)"
233
- msgid "Privacy Policy"
234
- msgstr ""
235
-
236
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
237
- msgctxt "(Admin)"
238
- msgid "Company information"
239
- msgstr ""
240
-
241
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
242
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
243
- msgctxt "(Admin)"
244
- msgid "Company Name"
245
- msgstr ""
246
-
247
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
248
- msgctxt "(Admin)"
249
- msgid "Company Email"
250
- msgstr ""
251
-
252
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
253
- msgctxt "(Admin)"
254
- msgid "Company Location"
255
- msgstr ""
256
-
257
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
258
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
259
- msgctxt "(Admin)"
260
- msgid "Representative Contact Name"
261
- msgstr ""
262
-
263
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
264
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
265
- msgctxt "(Admin)"
266
- msgid "Representative Contact Email"
267
- msgstr ""
268
-
269
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
270
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
271
- msgctxt "(Admin)"
272
- msgid "Representative Contact Phone"
273
- msgstr ""
274
-
275
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
276
- msgctxt "(Admin)"
277
- msgid "Data Protection Authority"
278
- msgstr ""
279
-
280
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
281
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
282
- msgctxt "(Admin)"
283
- msgid "Data Protection Authority Website"
284
- msgstr ""
285
-
286
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
287
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
288
- msgctxt "(Admin)"
289
- msgid "Data Protection Authority Email"
290
- msgstr ""
291
-
292
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
293
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
294
- msgctxt "(Admin)"
295
- msgid "Data Protection Authority Phone"
296
- msgstr ""
297
-
298
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
299
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
300
- msgctxt "(Admin)"
301
- msgid "Data Protection Officer"
302
- msgstr ""
303
-
304
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
305
- msgctxt "(Admin)"
306
- msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
307
- msgstr ""
308
-
309
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
310
- msgctxt "(Admin)"
311
- msgid "Data Protection Officer Name"
312
- msgstr ""
313
-
314
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
315
- msgctxt "(Admin)"
316
- msgid "Data Protection Officer Email"
317
- msgstr ""
318
-
319
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
320
- msgctxt "(Admin)"
321
- msgid "Contact Email"
322
- msgstr ""
323
-
324
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
325
- msgctxt "(Admin)"
326
- msgid "Representative Contact"
327
- msgstr ""
328
-
329
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
330
- msgctxt "(Admin)"
331
- msgid "Knowledge base: Do I need to appoint an EU-based representative?"
332
- msgstr ""
333
-
334
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
335
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
336
- msgctxt "(Admin)"
337
- msgid "DPO Name"
338
- msgstr ""
339
-
340
- #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
341
- msgctxt "(Admin)"
342
- msgid "Save & Generate Policy"
343
- msgstr ""
344
-
345
- #: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
346
- #: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
347
- #: views/themes/storefront/footer.php:3
348
- #: views/themes/twentyseventeen/footer.php:3
349
- #: views/themes/twentysixteen/footer.php:4
350
- msgid "Privacy Policy"
351
- msgstr ""
352
-
353
- #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
354
- msgid "This page is currently disabled."
355
- msgstr ""
356
-
357
- #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
358
- #: src/Installer/Installer.php:279
359
- #: src/Installer/Steps/ConfigurationPages.php:55
360
- #: views/themes/storefront/footer.php:7
361
- #: views/themes/twentyseventeen/footer.php:7
362
- #: views/themes/twentysixteen/footer.php:9
363
- msgid "Privacy Tools"
364
- msgstr ""
365
-
366
- #: src/Components/Support/AdminTabSupport.php:13
367
- #: src/Components/Support/AdminTabSupport.php:20
368
- msgctxt "(Admin)"
369
- msgid "Support"
370
- msgstr ""
371
-
372
- #: src/Components/WordpressComments/WordpressComments.php:90
373
- #, php-format
374
- msgid ""
375
- "%sERROR:%s You need to accept the terms and conditions to post a comment."
376
- msgstr ""
377
-
378
- #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
379
- #: views/privacy-tools/notices.php:19
380
- msgid "We have received your request and will reply within 30 days."
381
- msgstr ""
382
-
383
- #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
384
- #: views/privacy-tools/notices.php:15
385
- msgid "Consent withdrawn."
386
- msgstr ""
387
-
388
- #: src/Components/WordpressUser/RegistrationForm.php:42
389
- msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
390
- msgstr ""
391
-
392
- #: src/Components/WordpressUser/WordpressUser.php:63
393
- #: src/Components/WordpressUser/WordpressUser.php:64
394
- #: views/modules/wordpress-user/dashboard/data-page/header.php:2
395
- msgctxt "(Admin)"
396
- msgid "Privacy Tools"
397
- msgstr ""
398
-
399
- #: src/DataSubject/AdminTabDataSubject.php:27
400
- #: src/DataSubject/AdminTabDataSubject.php:41
401
- msgctxt "(Admin)"
402
- msgid "Data Subjects"
403
- msgstr ""
404
-
405
- #: src/DataSubject/DataRepository.php:143
406
- msgid "Data exported"
407
- msgstr ""
408
-
409
- #: src/DataSubject/DataRepository.php:158
410
- msgid "Data export request"
411
- msgstr ""
412
-
413
- #: src/DataSubject/DataRepository.php:171
414
- msgid "Data removed"
415
- msgstr ""
416
-
417
- #: src/DataSubject/DataRepository.php:186
418
- msgid "Data removal request"
419
- msgstr ""
420
-
421
- #: src/DataSubject/DataSubjectIdentificator.php:65
422
- #: src/DataSubject/DataSubjectIdentificator.php:82
423
- msgid "Your personal data on"
424
- msgstr ""
425
-
426
- #: src/Helpers.php:27
427
- msgctxt "(Admin)"
428
- msgid "Austria"
429
- msgstr ""
430
-
431
- #: src/Helpers.php:28
432
- msgctxt "(Admin)"
433
- msgid "Belgium"
434
- msgstr ""
435
-
436
- #: src/Helpers.php:29
437
- msgctxt "(Admin)"
438
- msgid "Bulgaria"
439
- msgstr ""
440
-
441
- #: src/Helpers.php:30
442
- msgctxt "(Admin)"
443
- msgid "Croatia"
444
- msgstr ""
445
-
446
- #: src/Helpers.php:31
447
- msgctxt "(Admin)"
448
- msgid "Cyprus"
449
- msgstr ""
450
-
451
- #: src/Helpers.php:32
452
- msgctxt "(Admin)"
453
- msgid "Czech Republic"
454
- msgstr ""
455
-
456
- #: src/Helpers.php:33
457
- msgctxt "(Admin)"
458
- msgid "Denmark"
459
- msgstr ""
460
-
461
- #: src/Helpers.php:34
462
- msgctxt "(Admin)"
463
- msgid "Estonia"
464
- msgstr ""
465
-
466
- #: src/Helpers.php:35
467
- msgctxt "(Admin)"
468
- msgid "Finland"
469
- msgstr ""
470
-
471
- #: src/Helpers.php:36
472
- msgctxt "(Admin)"
473
- msgid "France"
474
- msgstr ""
475
-
476
- #: src/Helpers.php:37
477
- msgctxt "(Admin)"
478
- msgid "Germany"
479
- msgstr ""
480
-
481
- #: src/Helpers.php:38
482
- msgctxt "(Admin)"
483
- msgid "Greece"
484
- msgstr ""
485
-
486
- #: src/Helpers.php:39
487
- msgctxt "(Admin)"
488
- msgid "Hungary"
489
- msgstr ""
490
-
491
- #: src/Helpers.php:40
492
- msgctxt "(Admin)"
493
- msgid "Ireland"
494
- msgstr ""
495
-
496
- #: src/Helpers.php:41
497
- msgctxt "(Admin)"
498
- msgid "Italy"
499
- msgstr ""
500
-
501
- #: src/Helpers.php:42
502
- msgctxt "(Admin)"
503
- msgid "Latvia"
504
- msgstr ""
505
-
506
- #: src/Helpers.php:43
507
- msgctxt "(Admin)"
508
- msgid "Lithuania"
509
- msgstr ""
510
-
511
- #: src/Helpers.php:44
512
- msgctxt "(Admin)"
513
- msgid "Luxembourg"
514
- msgstr ""
515
-
516
- #: src/Helpers.php:45
517
- msgctxt "(Admin)"
518
- msgid "Malta"
519
- msgstr ""
520
-
521
- #: src/Helpers.php:46
522
- msgctxt "(Admin)"
523
- msgid "Netherlands"
524
- msgstr ""
525
-
526
- #: src/Helpers.php:47
527
- msgctxt "(Admin)"
528
- msgid "Poland"
529
- msgstr ""
530
-
531
- #: src/Helpers.php:48
532
- msgctxt "(Admin)"
533
- msgid "Portugal"
534
- msgstr ""
535
-
536
- #: src/Helpers.php:49
537
- msgctxt "(Admin)"
538
- msgid "Romania"
539
- msgstr ""
540
-
541
- #: src/Helpers.php:50
542
- msgctxt "(Admin)"
543
- msgid "Slovakia"
544
- msgstr ""
545
-
546
- #: src/Helpers.php:51
547
- msgctxt "(Admin)"
548
- msgid "Slovenia"
549
- msgstr ""
550
-
551
- #: src/Helpers.php:52
552
- msgctxt "(Admin)"
553
- msgid "Spain"
554
- msgstr ""
555
-
556
- #: src/Helpers.php:53
557
- msgctxt "(Admin)"
558
- msgid "Sweden"
559
- msgstr ""
560
-
561
- #: src/Helpers.php:54
562
- msgctxt "(Admin)"
563
- msgid "United Kingdom"
564
- msgstr ""
565
-
566
- #: src/Helpers.php:69
567
- msgctxt "(Admin)"
568
- msgid "Iceland"
569
- msgstr ""
570
-
571
- #: src/Helpers.php:70
572
- msgctxt "(Admin)"
573
- msgid "Norway"
574
- msgstr ""
575
-
576
- #: src/Helpers.php:71
577
- msgctxt "(Admin)"
578
- msgid "Liechtenstein"
579
- msgstr ""
580
-
581
- #: src/Helpers.php:72
582
- msgctxt "(Admin)"
583
- msgid "Switzerland"
584
- msgstr ""
585
-
586
- #: src/Helpers.php:73
587
- msgctxt "(Admin)"
588
- msgid "United States"
589
- msgstr ""
590
-
591
- #: src/Helpers.php:74
592
- msgctxt "(Admin)"
593
- msgid "Rest of the world"
594
- msgstr ""
595
-
596
- #: src/Helpers.php:145
597
- msgid "An error has occurred. Please contact the site administrator."
598
- msgstr ""
599
-
600
- #: src/Installer/Installer.php:135
601
- msgctxt "(Admin)"
602
- msgid "Setup Wizard"
603
- msgstr ""
604
-
605
- #: src/Installer/Steps/ConfigurationPages.php:23
606
- #: src/Installer/Steps/PolicySettings.php:23
607
- #: src/Installer/Steps/PolicySettings.php:48
608
- msgctxt "(Admin)"
609
- msgid "&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
-
628
- #: src/Router.php:149
629
- msgctxt "(Admin)"
630
- msgid "You do not have the required permissions to perform this action!"
631
- msgstr ""
632
-
633
- #: views/admin/consent.php:3
634
- msgctxt "(Admin)"
635
- msgid "Default consent types"
636
- msgstr ""
637
-
638
- #: views/admin/consent.php:4
639
- msgctxt "(Admin)"
640
- msgid ""
641
- "These are the consent types that have been automatically registered by the "
642
- "framework or a plugin."
643
- msgstr ""
644
-
645
- #: views/admin/consent.php:7 views/admin/consent.php:52
646
- msgctxt "(Admin)"
647
- msgid "Slug"
648
- msgstr ""
649
-
650
- #: views/admin/consent.php:8 views/admin/consent.php:38
651
- #: views/admin/consent.php:60
652
- msgctxt "(Admin)"
653
- msgid "Title"
654
- msgstr ""
655
-
656
- #: views/admin/consent.php:9 views/admin/consent.php:41
657
- #: views/admin/consent.php:63
658
- msgctxt "(Admin)"
659
- msgid "Description"
660
- msgstr ""
661
-
662
- #: views/admin/consent.php:10
663
- msgctxt "(Admin)"
664
- msgid "Visibility"
665
- msgstr ""
666
-
667
- #: views/admin/consent.php:18
668
- msgctxt "(Admin)"
669
- msgid "Visible"
670
- msgstr ""
671
-
672
- #: views/admin/consent.php:20
673
- msgctxt "(Admin)"
674
- msgid "Hidden"
675
- msgstr ""
676
-
677
- #: views/admin/consent.php:29
678
- msgctxt "(Admin)"
679
- msgid "Custom consent types"
680
- msgstr ""
681
-
682
- #: views/admin/consent.php:30
683
- msgctxt "(Admin)"
684
- msgid ""
685
- "Here you can add custom consent types to track. They will not be used "
686
- "anywhere by default - you will need to build an integration for each of them."
687
- msgstr ""
688
-
689
- #: views/admin/consent.php:35
690
- msgctxt "(Admin)"
691
- msgid "Machine-readable slug"
692
- msgstr ""
693
-
694
- #: views/admin/consent.php:44 views/admin/consent.php:68
695
- msgctxt "(Admin)"
696
- msgid "Visible?"
697
- msgstr ""
698
-
699
- #: views/admin/consent.php:72
700
- msgctxt "(Admin)"
701
- msgid "Remove"
702
- msgstr ""
703
-
704
- #: views/admin/consent.php:93
705
- msgctxt "(Admin)"
706
- msgid "Additional info"
707
- msgstr ""
708
-
709
- #: views/admin/consent.php:95
710
- msgctxt "(Admin)"
711
- msgid ""
712
- "This text will be displayed to your data subjects on the Privacy Tools page."
713
- msgstr ""
714
-
715
- #: views/admin/data-subjects/search-form.php:2
716
- msgctxt "(Admin)"
717
- msgid ""
718
- "On this page, you can find which data subjects personal data you are storing "
719
- "and download, export or delete it."
720
- msgstr ""
721
-
722
- #: views/admin/data-subjects/search-form.php:10
723
- msgctxt "(Admin)"
724
- msgid "Find data subject by email"
725
- msgstr ""
726
-
727
- #: views/admin/data-subjects/search-form.php:11
728
- msgctxt "(Admin)"
729
- msgid "Email address"
730
- msgstr ""
731
-
732
- #: views/admin/data-subjects/search-form.php:16
733
- msgctxt "(Admin)"
734
- msgid "Search"
735
- msgstr ""
736
-
737
- #: views/admin/data-subjects/search-results.php:7
738
- msgctxt "(Admin)"
739
- msgid "Username"
740
- msgstr ""
741
-
742
- #: views/admin/data-subjects/search-results.php:12
743
- msgctxt "(Admin)"
744
- msgid "is not a registered user."
745
- msgstr ""
746
-
747
- #: views/admin/data-subjects/search-results.php:16
748
- msgctxt "(Admin)"
749
- msgid "Download data (html)"
750
- msgstr ""
751
-
752
- #: views/admin/data-subjects/search-results.php:17
753
- msgctxt "(Admin)"
754
- msgid "Export data (json)"
755
- msgstr ""
756
-
757
- #: views/admin/data-subjects/search-results.php:21
758
- msgctxt "(Admin)"
759
- msgid ""
760
- "This user has admin capabilities. Deleting data via this interface is "
761
- "disabled."
762
- msgstr ""
763
-
764
- #: views/admin/data-subjects/search-results.php:24
765
- msgctxt "(Admin)"
766
- msgid "Anonymize data"
767
- msgstr ""
768
-
769
- #: views/admin/data-subjects/search-results.php:25
770
- msgctxt "(Admin)"
771
- msgid "Delete data"
772
- msgstr ""
773
-
774
- #: views/admin/data-subjects/search-results.php:29
775
- msgctxt "(Admin)"
776
- msgid "No data found!"
777
- msgstr ""
778
-
779
- #: views/admin/general/delete-action-email.php:5
780
- #: views/admin/general/export-action-email.php:5
781
- #: views/installer/steps/configuration-settings.php:29
782
- #: views/installer/steps/configuration-settings.php:79
783
- msgid "Email address"
784
- msgstr ""
785
-
786
- #: views/admin/general/delete-action-reassign.php:3
787
- #: views/installer/steps/configuration-settings.php:50
788
- msgctxt "(Admin)"
789
- msgid "Delete content"
790
- msgstr ""
791
-
792
- #: views/admin/general/delete-action-reassign.php:6
793
- #: views/installer/steps/configuration-settings.php:53
794
- msgctxt "(Admin)"
795
- msgid "Reassign content to a user"
796
- msgstr ""
797
-
798
- #: views/admin/general/delete-action-reassign.php:10
799
- msgctxt "(Admin)"
800
- msgid ""
801
- "If the user has submitted any content on your site, should it be deleted or "
802
- "reassigned to another user?"
803
- msgstr ""
804
-
805
- #: views/admin/general/description-data-page.php:2
806
- msgctxt "(Admin)"
807
- msgid ""
808
- "Select the page where users can go to control their data. This page must "
809
- "contain the [gdpr_privacy_tools] shortcode."
810
- msgstr ""
811
-
812
- #: views/admin/general/description-delete-action.php:2
813
- msgctxt "(Admin)"
814
- msgid "What should happen if a data subject requests deleting their data."
815
- msgstr ""
816
-
817
- #: views/admin/general/description-export-action.php:2
818
- msgctxt "(Admin)"
819
- msgid ""
820
- "What should happen if a data subject requests viewing or exporting their "
821
- "data."
822
- msgstr ""
823
-
824
- #: views/admin/general/description-terms-page.php:2
825
- msgctxt "(Admin)"
826
- msgid "Optional. Select the page which contains your Terms & Conditions"
827
- msgstr ""
828
-
829
- #: views/admin/general/enable.php:9
830
- msgctxt "(Admin)"
831
- msgid "Enable the view, export and forget functionality for users and visitors"
832
- msgstr ""
833
-
834
- #: views/admin/general/enable.php:12
835
- msgctxt "(Admin)"
836
- msgid ""
837
- "Enable the Privacy Tools page on front-end and dashboard. This allows "
838
- "visitors to request viewing and deleting their personal data and withdraw "
839
- "consents."
840
- msgstr ""
841
-
842
- #: views/admin/general/stylesheet.php:9
843
- msgctxt "(Admin)"
844
- msgid "Enable basic styling for Privacy Tools page."
845
- msgstr ""
846
-
847
- #: views/admin/general/theme-compatibility.php:9
848
- #: views/installer/steps/integrations.php:21
849
- msgctxt "(Admin)"
850
- msgid ""
851
- "Automatically add Privacy Policy and Privacy Tools links to your site footer."
852
- msgstr ""
853
-
854
- #: views/admin/notices/header.php:4 views/admin/settings-page.php:3
855
- #: views/installer/header.php:23
856
- msgctxt "(Admin)"
857
- msgid "The GDPR Framework"
858
- msgstr ""
859
-
860
- #: views/admin/notices/helper-autoinstall.php:2
861
- msgctxt "(Admin)"
862
- msgid ""
863
- "A Privacy Policy page has been created, but it is empty. You can generate a "
864
- "policy template on this page."
865
- msgstr ""
866
-
867
- #: views/admin/notices/helper-policy.php:2
868
- msgctxt "(Admin)"
869
- msgid ""
870
- "Heads up - your Privacy Policy still requires some attention. Find the "
871
- "places marked with [TODO] and replace them with real content!"
872
- msgstr ""
873
-
874
- #: views/admin/notices/helper-tools.php:2
875
- msgctxt "(Admin)"
876
- msgid "The contents of this page should contain the [gdpr_tools] shortcode."
877
- msgstr ""
878
-
879
- #: views/admin/privacy-policy/description-policy-page.php:2
880
- msgctxt "(Admin)"
881
- msgid "Select the page which will contain your Privacy Policy"
882
- msgstr ""
883
-
884
- #: views/admin/privacy-policy/generated.php:3
885
- msgctxt "(Admin)"
886
- msgid "Your Privacy Policy has been generated."
887
- msgstr ""
888
-
889
- #: views/admin/privacy-policy/generated.php:20
890
- msgctxt "(Admin)"
891
- msgid "&laquo; Back"
892
- msgstr ""
893
-
894
- #: views/admin/privacy-policy/header.php:2
895
- msgctxt "(Admin)"
896
- msgid ""
897
- "This page allows you to generate a Privacy Policy based on the information "
898
- "you entered below."
899
- msgstr ""
900
-
901
- #: views/admin/settings-page.php:8
902
- msgctxt "(Admin)"
903
- msgid "GDPR settings saved!"
904
- msgstr ""
905
-
906
- #: views/admin/settings-page.php:31
907
- #, php-format
908
- msgctxt "(Admin)"
909
- msgid "The GDPR Framework. Built with &#9829; by %sCodelight%s."
910
- msgstr ""
911
-
912
- #: views/admin/settings-page.php:39
913
- #, php-format
914
- msgctxt "(Admin)"
915
- msgid "Support our development efforts with a %s5-star rating%s."
916
- msgstr ""
917
-
918
- #: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
919
- msgctxt "(Admin)"
920
- msgid "Need more info?"
921
- msgstr ""
922
-
923
- #: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
924
- msgctxt "(Admin)"
925
- msgid "Site Owner's guide to GDPR"
926
- msgstr ""
927
-
928
- #: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
929
- msgctxt "(Admin)"
930
- msgid "Read the full guide on GDPR compliance."
931
- msgstr ""
932
-
933
- #: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
934
- msgctxt "(Admin)"
935
- msgid "Knowledge base"
936
- msgstr ""
937
-
938
- #: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
939
- msgctxt "(Admin)"
940
- msgid "Check out the knowledge base for common questions and answers."
941
- msgstr ""
942
-
943
- #: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
944
- msgctxt "(Admin)"
945
- msgid "Developer's guide to GDPR"
946
- msgstr ""
947
-
948
- #: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
949
- msgctxt "(Admin)"
950
- msgid "We have a thorough guide to help making custom sites compliant."
951
- msgstr ""
952
-
953
- #: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
954
- msgctxt "(Admin)"
955
- msgid "Need help?"
956
- msgstr ""
957
-
958
- #: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
959
- msgctxt "(Admin)"
960
- msgid "Submit a support request"
961
- msgstr ""
962
-
963
- #: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
964
- msgctxt "(Admin)"
965
- msgid ""
966
- "Found a bug or problem with the plugin? Post in the wordpress.org support "
967
- "forum."
968
- msgstr ""
969
-
970
- #: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
971
- msgctxt "(Admin)"
972
- msgid "Request a consultation"
973
- msgstr ""
974
-
975
- #: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
976
- msgctxt "(Admin)"
977
- msgid ""
978
- "Need development or legal assistance in making your site compliant? We can "
979
- "help!"
980
- msgstr ""
981
-
982
- #: views/admin/wizard-buttons.php:2
983
- msgctxt "(Admin)"
984
- msgid "Restart setup wizard"
985
- msgstr ""
986
-
987
- #: views/email/action-export.php:8 views/email/action-forget.php:12
988
- msgctxt "(Admin)"
989
- msgid ""
990
- "This email is just for your information. You don't need to take any action"
991
- msgstr ""
992
-
993
- #: views/email/action-forget.php:8
994
- msgctxt "(Admin)"
995
- msgid "The data subject had a user account on your website."
996
- msgstr ""
997
-
998
- #: views/email/identify-data-subject.php:2
999
- msgid "Someone has requested access to your data on"
1000
- msgstr ""
1001
-
1002
- #: views/email/identify-data-subject.php:3
1003
- msgid "If this was a mistake, just ignore this email and nothing will happen."
1004
- msgstr ""
1005
-
1006
- #: views/email/identify-data-subject.php:4
1007
- msgid "To manage your data, visit the following address:"
1008
- msgstr ""
1009
-
1010
- #: views/email/identify-data-subject.php:10
1011
- msgid "This link is valid for 15 minutes."
1012
- msgstr ""
1013
-
1014
- #: views/email/no-data.php:2
1015
- msgid "Someone has requested information about your personal data on"
1016
- msgstr ""
1017
-
1018
- #: views/email/no-data.php:3
1019
- msgid "None of your personal data is stored on"
1020
- msgstr ""
1021
-
1022
- #: views/email/no-data.php:5
1023
- msgid ""
1024
- "If this was a mistake or you did not request this email, just ignore it and "
1025
- "nothing will happen."
1026
- msgstr ""
1027
-
1028
- #: views/email/request-export.php:13 views/email/request-forget.php:13
1029
- msgctxt "(Admin)"
1030
- msgid "As a reminder: according to GDPR, you have 30 days to comply."
1031
- msgstr ""
1032
-
1033
- #: views/global/delete-action.php:2
1034
- msgctxt "(Admin)"
1035
- msgid "Automatically anonymize data"
1036
- msgstr ""
1037
-
1038
- #: views/global/delete-action.php:5
1039
- msgctxt "(Admin)"
1040
- msgid "Automatically delete data"
1041
- msgstr ""
1042
-
1043
- #: views/global/delete-action.php:9
1044
- msgctxt "(Admin)"
1045
- msgid "Automatically anonymize data and notify me via email"
1046
- msgstr ""
1047
-
1048
- #: views/global/delete-action.php:13
1049
- msgctxt "(Admin)"
1050
- msgid "Automatically delete data and notify me via email"
1051
- msgstr ""
1052
-
1053
- #: views/global/delete-action.php:16 views/global/export-action.php:10
1054
- msgctxt "(Admin)"
1055
- msgid "Only notify me via email"
1056
- msgstr ""
1057
-
1058
- #: views/global/export-action.php:2
1059
- msgctxt "(Admin)"
1060
- msgid "Automatically download data"
1061
- msgstr ""
1062
-
1063
- #: views/global/export-action.php:6
1064
- msgctxt "(Admin)"
1065
- msgid "Automatically download data and notify me via email"
1066
- msgstr ""
1067
-
1068
- #: views/installer/continue-notice.php:2
1069
- msgctxt "(Admin)"
1070
- msgid "The The GDPR Framework setup has not been finalized yet."
1071
- msgstr ""
1072
-
1073
- #: views/installer/continue-notice.php:3
1074
- msgctxt "(Admin)"
1075
- msgid "You can continue the setup at any time."
1076
- msgstr ""
1077
-
1078
- #: views/installer/continue-notice.php:6
1079
- msgctxt "(Admin)"
1080
- msgid "Continue the setup wizard"
1081
- msgstr ""
1082
-
1083
- #: views/installer/continue-notice.php:9
1084
- msgctxt "(Admin)"
1085
- msgid "Hide this message"
1086
- msgstr ""
1087
-
1088
- #: views/installer/footer.php:7
1089
- msgid "Back"
1090
- msgstr ""
1091
-
1092
- #: views/installer/header.php:26
1093
- msgctxt "(Admin)"
1094
- msgid "I need help"
1095
- msgstr ""
1096
-
1097
- #: views/installer/header.php:29
1098
- msgctxt "(Admin)"
1099
- msgid "Developer Docs"
1100
- msgstr ""
1101
-
1102
- #: views/installer/header.php:36
1103
- msgctxt "(Admin)"
1104
- msgid "Configuration"
1105
- msgstr ""
1106
-
1107
- #: views/installer/header.php:46
1108
- msgctxt "(Admin)"
1109
- msgid "Forms & Consent"
1110
- msgstr ""
1111
-
1112
- #: views/installer/header.php:51
1113
- msgctxt "(Admin)"
1114
- msgid "Integrations"
1115
- msgstr ""
1116
-
1117
- #: views/installer/steps/configuration-settings.php:23
1118
- #: views/installer/steps/configuration-settings.php:73
1119
- msgctxt "(Admin)"
1120
- msgid "Enter the email address to notify"
1121
- msgstr ""
1122
-
1123
- #: views/installer/steps/disclaimer.php:21
1124
- msgctxt "(Admin)"
1125
- msgid "I accept"
1126
- msgstr ""
1127
-
1128
- #: views/installer/welcome-notice.php:7
1129
- msgctxt "(Admin)"
1130
- msgid "Run the setup wizard"
1131
- msgstr ""
1132
-
1133
- #: views/installer/welcome-notice.php:11
1134
- msgctxt "(Admin)"
1135
- msgid "Auto-install pages"
1136
- msgstr ""
1137
-
1138
- #: views/installer/welcome-notice.php:15
1139
- msgctxt "(Admin)"
1140
- msgid "Skip and install manually"
1141
- msgstr ""
1142
-
1143
- #: views/modules/contact-form-7/generator-privacy.php:6
1144
- msgctxt "(Admin)"
1145
- msgid ""
1146
- "This tag generates the default text for Terms & Conditions and/or Privacy "
1147
- "Policy checkbox."
1148
- msgstr ""
1149
-
1150
- #: views/modules/contact-form-7/generator-privacy.php:15
1151
- msgid "Insert"
1152
- msgstr ""
1153
-
1154
- #: views/modules/wordpress-comments/terms-checkbox.php:6
1155
- #: views/modules/wordpress-user/registration-terms-checkbox.php:7
1156
- #, php-format
1157
- msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1158
- msgstr ""
1159
-
1160
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
1161
- #: views/privacy-tools/form-consent.php:2
1162
- msgid "Consent"
1163
- msgstr ""
1164
-
1165
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
1166
- #: views/privacy-tools/form-consent.php:6
1167
- msgid "Here you can withdraw any consents you have given."
1168
- msgstr ""
1169
-
1170
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
1171
- msgid "Consents"
1172
- msgstr ""
1173
-
1174
- #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
1175
- #: views/privacy-tools/form-consent.php:24
1176
- msgid "Withdraw"
1177
- msgstr ""
1178
-
1179
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
1180
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
1181
- msgctxt "(Admin)"
1182
- msgid "Delete this user and all data"
1183
- msgstr ""
1184
-
1185
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
1186
- msgctxt "(Admin)"
1187
- msgid "Delete my data"
1188
- msgstr ""
1189
-
1190
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
1191
- #: views/privacy-tools/form-delete.php:13
1192
- msgid "Delete all data we have gathered about you."
1193
- msgstr ""
1194
-
1195
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
1196
- #: views/privacy-tools/form-delete.php:14
1197
- msgid "If you have a user account on our site, it will also be deleted."
1198
- msgstr ""
1199
-
1200
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
1201
- #: views/privacy-tools/form-delete.php:15
1202
- msgid "Be careful - this action is permanent and CANNOT be undone."
1203
- msgstr ""
1204
-
1205
- #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
1206
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
1207
- msgctxt "(Admin)"
1208
- msgid ""
1209
- "You seem to have an administrator or equivalent role, so deleting/"
1210
- "anonymizing via this page is disabled."
1211
- msgstr ""
1212
-
1213
- #: views/modules/wordpress-user/dashboard/form-export.php:7
1214
- #: views/privacy-tools/form-export.php:1
1215
- msgid "Download your data"
1216
- msgstr ""
1217
-
1218
- #: views/modules/wordpress-user/dashboard/form-export.php:12
1219
- #: views/privacy-tools/form-export.php:13
1220
- msgid "Download as table"
1221
- msgstr ""
1222
-
1223
- #: views/modules/wordpress-user/dashboard/form-export.php:15
1224
- #: views/privacy-tools/form-export.php:22
1225
- msgid "Export as JSON"
1226
- msgstr ""
1227
-
1228
- #: views/modules/wordpress-user/dashboard/form-export.php:19
1229
- #: views/privacy-tools/form-export.php:4
1230
- msgid "You can download all your data formatted as a table for viewing."
1231
- msgstr ""
1232
-
1233
- #: views/modules/wordpress-user/dashboard/form-export.php:20
1234
- #: views/privacy-tools/form-export.php:5
1235
- msgid "Alternatively, you can export it in machine-readable JSON format."
1236
- msgstr ""
1237
-
1238
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
1239
- msgctxt "(Admin)"
1240
- msgid "Delete user and all data"
1241
- msgstr ""
1242
-
1243
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
1244
- msgctxt "(Admin)"
1245
- msgid "Anonymize user and all data"
1246
- msgstr ""
1247
-
1248
- #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:18
1249
- msgctxt "gdpr-framework"
1250
- msgid "Be careful - this action is permanent and CANNOT be undone."
1251
- msgstr ""
1252
-
1253
- #: views/modules/wordpress-user/dashboard/profile-page/header.php:2
1254
- msgctxt "(Admin)"
1255
- msgid "GDPR Data"
1256
- msgstr ""
1257
-
1258
- #: views/modules/wordpress-user/dashboard/profile-page/header.php:6
1259
- msgctxt "(Admin)"
1260
- msgid "This user has been anonymized."
1261
- msgstr ""
1262
-
1263
- #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
1264
- msgctxt "(Admin)"
1265
- msgid "Consents given"
1266
- msgstr ""
1267
-
1268
- #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
1269
- msgctxt "(Admin)"
1270
- msgid "No consents given"
1271
- msgstr ""
1272
-
1273
- #: views/privacy-tools/form-consent.php:9
1274
- msgid "Consent types"
1275
- msgstr ""
1276
-
1277
- #: views/privacy-tools/form-delete.php:1
1278
- #: views/privacy-tools/notice-admin-role.php:1
1279
- msgid "Delete my user and data"
1280
- msgstr ""
1281
-
1282
- #: views/privacy-tools/form-delete.php:7
1283
- msgid "Delete my data"
1284
- msgstr ""
1285
-
1286
- #: views/privacy-tools/form-identify.php:8
1287
- msgid "Back to front page"
1288
- msgstr ""
1289
-
1290
- #: views/privacy-tools/form-identify.php:15
1291
- msgid "Please identify yourself via e-mail"
1292
- msgstr ""
1293
-
1294
- #: views/privacy-tools/form-identify.php:19
1295
- #: views/privacy-tools/form-identify.php:22
1296
- msgid "Enter your email address"
1297
- msgstr ""
1298
-
1299
- #: views/privacy-tools/form-identify.php:25
1300
- msgid "Send email"
1301
- msgstr ""
1302
-
1303
- #: views/privacy-tools/notice-admin-role.php:4
1304
- msgctxt "(Admin)"
1305
- msgid "Data deletion is disabled for administrative accounts."
1306
- msgstr ""
1307
-
1308
- #: views/privacy-tools/notices.php:3
1309
- msgid ""
1310
- "We will send you an email with the link to access your data. Please check "
1311
- "your spam folder as well!"
1312
- msgstr ""
1313
-
1314
- #: views/privacy-tools/notices.php:7
1315
- msgid "The email you entered does not appear to be a valid email."
1316
- msgstr ""
1317
-
1318
- #: views/privacy-tools/notices.php:11
1319
- msgid "Sorry - the link seems to have expired. Please try again!"
1320
- msgstr ""
1321
-
1322
- #: views/privacy-tools/notices.php:23
1323
- msgid "Your personal data has been removed!"
1324
- msgstr ""
1325
-
1326
- #: views/privacy-tools/privacy-tools.php:5
1327
- msgid "You are identified as"
1328
- msgstr ""
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR Codelight
3
+ # This file is distributed under the same license as the The GDPR Framework package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: The GDPR Framework 1.0\n"
10
+ "Report-Msgid-Bugs-To: gdpr@codelight.eu\n"
11
+ "POT-Creation-Date: 2018-05-22 15:47+0300\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "Language: \n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=CHARSET\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+
20
+ #: gdpr-framework.php:28
21
+ msgctxt "(Admin)"
22
+ msgid "WordPress GDPR &rsaquo; Error"
23
+ msgstr ""
24
+
25
+ #: gdpr-framework.php:38
26
+ msgctxt "(Admin)"
27
+ msgid "You must be using PHP 5.6.0 or greater."
28
+ msgstr ""
29
+
30
+ #: gdpr-framework.php:39
31
+ msgctxt "(Admin)"
32
+ msgid "Invalid PHP version"
33
+ msgstr ""
34
+
35
+ #: gdpr-framework.php:48
36
+ msgctxt "(Admin)"
37
+ msgid "You must be using WordPress 4.3.0 or greater."
38
+ msgstr ""
39
+
40
+ #: gdpr-framework.php:49
41
+ msgctxt "(Admin)"
42
+ msgid "Invalid WordPress version"
43
+ msgstr ""
44
+
45
+ #: gdpr-framework.php:61
46
+ msgctxt "(Admin)"
47
+ msgid ""
48
+ "You appear to be running a development version of GDPR. You must run "
49
+ "<code>composer install</code> from the plugin directory."
50
+ msgstr ""
51
+
52
+ #: gdpr-framework.php:66
53
+ msgctxt "(Admin)"
54
+ msgid "Autoloader not found."
55
+ msgstr ""
56
+
57
+ #: gdpr-framework.php:86 src/Updater/Updater.php:40
58
+ msgctxt "(Admin)"
59
+ msgid "Anonymous"
60
+ msgstr ""
61
+
62
+ #: src/Admin/AdminTab.php:115
63
+ msgctxt "(Admin)"
64
+ msgid "Save"
65
+ msgstr ""
66
+
67
+ #: src/Admin/AdminTab.php:151
68
+ msgctxt "(Admin)"
69
+ msgid "Policy generated!"
70
+ msgstr ""
71
+
72
+ #: src/Admin/AdminTabGeneral.php:11
73
+ msgctxt "(Admin)"
74
+ msgid "General"
75
+ msgstr ""
76
+
77
+ #: src/Admin/AdminTabGeneral.php:38
78
+ msgctxt "(Admin)"
79
+ msgid "General Settings"
80
+ msgstr ""
81
+
82
+ #: src/Admin/AdminTabGeneral.php:43
83
+ msgctxt "(Admin)"
84
+ msgid "Enable Privacy Tools"
85
+ msgstr ""
86
+
87
+ #: src/Admin/AdminTabGeneral.php:53
88
+ msgctxt "(Admin)"
89
+ msgid "Pages"
90
+ msgstr ""
91
+
92
+ #: src/Admin/AdminTabGeneral.php:58 src/Admin/WordpressAdmin.php:151
93
+ msgctxt "(Admin)"
94
+ msgid "Privacy Tools Page"
95
+ msgstr ""
96
+
97
+ #: src/Admin/AdminTabGeneral.php:65 src/Admin/WordpressAdmin.php:147
98
+ msgctxt "(Admin)"
99
+ msgid "Privacy Policy Page"
100
+ msgstr ""
101
+
102
+ #: src/Admin/AdminTabGeneral.php:72
103
+ msgctxt "(Admin)"
104
+ msgid "Terms & Conditions Page"
105
+ msgstr ""
106
+
107
+ #: src/Admin/AdminTabGeneral.php:82
108
+ msgctxt "(Admin)"
109
+ msgid "View & Export Data"
110
+ msgstr ""
111
+
112
+ #: src/Admin/AdminTabGeneral.php:87
113
+ msgctxt "(Admin)"
114
+ msgid "Export action"
115
+ msgstr ""
116
+
117
+ #: src/Admin/AdminTabGeneral.php:94 src/Admin/AdminTabGeneral.php:133
118
+ msgctxt "(Admin)"
119
+ msgid "Email to notify"
120
+ msgstr ""
121
+
122
+ #: src/Admin/AdminTabGeneral.php:105
123
+ msgctxt "(Admin)"
124
+ msgid "Delete & Anonymize Data"
125
+ msgstr ""
126
+
127
+ #: src/Admin/AdminTabGeneral.php:110
128
+ msgctxt "(Admin)"
129
+ msgid "Delete action"
130
+ msgstr ""
131
+
132
+ #: src/Admin/AdminTabGeneral.php:117
133
+ msgctxt "(Admin)"
134
+ msgid "Delete or reassign content?"
135
+ msgstr ""
136
+
137
+ #: src/Admin/AdminTabGeneral.php:125
138
+ msgctxt "(Admin)"
139
+ msgid "Reassign content to"
140
+ msgstr ""
141
+
142
+ #: src/Admin/AdminTabGeneral.php:145
143
+ msgctxt "(Admin)"
144
+ msgid "Styling"
145
+ msgstr ""
146
+
147
+ #: src/Admin/AdminTabGeneral.php:150
148
+ msgctxt "(Admin)"
149
+ msgid "Enable basic styling on Privacy Tools page"
150
+ msgstr ""
151
+
152
+ #: src/Admin/AdminTabGeneral.php:162
153
+ msgctxt "(Admin)"
154
+ msgid "Compatibility"
155
+ msgstr ""
156
+
157
+ #: src/Admin/AdminTabGeneral.php:167
158
+ msgctxt "(Admin)"
159
+ msgid "Enable automatic theme compatibility"
160
+ msgstr ""
161
+
162
+ #: src/Admin/AdminTabGeneral.php:184 src/Admin/AdminTabGeneral.php:200
163
+ #: src/Admin/AdminTabGeneral.php:213 src/Admin/AdminTabGeneral.php:252
164
+ #: views/installer/steps/configuration-settings.php:62
165
+ msgctxt "(Admin)"
166
+ msgid "&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/AdminTabConsent.php:179
203
+ msgid ""
204
+ "To use this website, you accepted our Privacy Policy. If you wish to "
205
+ "withdraw your acceptance, please use the \"Delete my data\" button below."
206
+ msgstr ""
207
+
208
+ #: src/Components/Consent/ConsentManager.php:46
209
+ #: views/modules/contact-form-7/content-privacy.php:2
210
+ #: views/modules/wordpress-comments/terms-checkbox.php:14
211
+ #: views/modules/wordpress-user/registration-terms-checkbox.php:15
212
+ #, php-format
213
+ msgid "I accept the %sPrivacy Policy%s"
214
+ msgstr ""
215
+
216
+ #: src/Components/Consent/ConsentManager.php:50
217
+ #: src/Components/Consent/ConsentManager.php:69
218
+ msgctxt "(Admin)"
219
+ msgid ""
220
+ "This consent is not visible by default. If someone wishes to withdraw it, "
221
+ "they should simply request to delete all their data."
222
+ msgstr ""
223
+
224
+ #: src/Components/Consent/ConsentManager.php:65
225
+ #, php-format
226
+ msgid "I accept the %sTerms & Conditions%s"
227
+ msgstr ""
228
+
229
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:19
230
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:61
231
+ #: views/admin/privacy-policy/generated.php:1 views/installer/header.php:41
232
+ msgctxt "(Admin)"
233
+ msgid "Privacy Policy"
234
+ msgstr ""
235
+
236
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:70
237
+ msgctxt "(Admin)"
238
+ msgid "Company information"
239
+ msgstr ""
240
+
241
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:75
242
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:209
243
+ msgctxt "(Admin)"
244
+ msgid "Company Name"
245
+ msgstr ""
246
+
247
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:82
248
+ msgctxt "(Admin)"
249
+ msgid "Company Email"
250
+ msgstr ""
251
+
252
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:89
253
+ msgctxt "(Admin)"
254
+ msgid "Company Location"
255
+ msgstr ""
256
+
257
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:105
258
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:245
259
+ msgctxt "(Admin)"
260
+ msgid "Representative Contact Name"
261
+ msgstr ""
262
+
263
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:112
264
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:252
265
+ msgctxt "(Admin)"
266
+ msgid "Representative Contact Email"
267
+ msgstr ""
268
+
269
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:119
270
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:259
271
+ msgctxt "(Admin)"
272
+ msgid "Representative Contact Phone"
273
+ msgstr ""
274
+
275
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:135
276
+ msgctxt "(Admin)"
277
+ msgid "Data Protection Authority"
278
+ msgstr ""
279
+
280
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:141
281
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:286
282
+ msgctxt "(Admin)"
283
+ msgid "Data Protection Authority Website"
284
+ msgstr ""
285
+
286
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:148
287
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:293
288
+ msgctxt "(Admin)"
289
+ msgid "Data Protection Authority Email"
290
+ msgstr ""
291
+
292
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:155
293
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:300
294
+ msgctxt "(Admin)"
295
+ msgid "Data Protection Authority Phone"
296
+ msgstr ""
297
+
298
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:165
299
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:175
300
+ msgctxt "(Admin)"
301
+ msgid "Data Protection Officer"
302
+ msgstr ""
303
+
304
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:168
305
+ msgctxt "(Admin)"
306
+ msgid "Knowledge base: Do I need to appoint a Data Protection Officer?"
307
+ msgstr ""
308
+
309
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:182
310
+ msgctxt "(Admin)"
311
+ msgid "Data Protection Officer Name"
312
+ msgstr ""
313
+
314
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:190
315
+ msgctxt "(Admin)"
316
+ msgid "Data Protection Officer Email"
317
+ msgstr ""
318
+
319
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:216
320
+ msgctxt "(Admin)"
321
+ msgid "Contact Email"
322
+ msgstr ""
323
+
324
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:235
325
+ msgctxt "(Admin)"
326
+ msgid "Representative Contact"
327
+ msgstr ""
328
+
329
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:238
330
+ msgctxt "(Admin)"
331
+ msgid "Knowledge base: Do I need to appoint an EU-based representative?"
332
+ msgstr ""
333
+
334
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:317
335
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:324
336
+ msgctxt "(Admin)"
337
+ msgid "DPO Name"
338
+ msgstr ""
339
+
340
+ #: src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php:420
341
+ msgctxt "(Admin)"
342
+ msgid "Save & Generate Policy"
343
+ msgstr ""
344
+
345
+ #: src/Components/PrivacyPolicy/PrivacyPolicy.php:82
346
+ #: src/Installer/Installer.php:271 src/Installer/Steps/PolicySettings.php:199
347
+ #: views/themes/storefront/footer.php:3
348
+ #: views/themes/twentyseventeen/footer.php:3
349
+ #: views/themes/twentysixteen/footer.php:4
350
+ msgid "Privacy Policy"
351
+ msgstr ""
352
+
353
+ #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:19
354
+ msgid "This page is currently disabled."
355
+ msgstr ""
356
+
357
+ #: src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php:35
358
+ #: src/Installer/Installer.php:279
359
+ #: src/Installer/Steps/ConfigurationPages.php:55
360
+ #: views/themes/storefront/footer.php:7
361
+ #: views/themes/twentyseventeen/footer.php:7
362
+ #: views/themes/twentysixteen/footer.php:9
363
+ msgid "Privacy Tools"
364
+ msgstr ""
365
+
366
+ #: src/Components/Support/AdminTabSupport.php:13
367
+ #: src/Components/Support/AdminTabSupport.php:20
368
+ msgctxt "(Admin)"
369
+ msgid "Support"
370
+ msgstr ""
371
+
372
+ #: src/Components/WordpressComments/WordpressComments.php:90
373
+ #, php-format
374
+ msgid ""
375
+ "%sERROR:%s You need to accept the terms and conditions to post a comment."
376
+ msgstr ""
377
+
378
+ #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:54
379
+ #: views/privacy-tools/notices.php:19
380
+ msgid "We have received your request and will reply within 30 days."
381
+ msgstr ""
382
+
383
+ #: src/Components/WordpressUser/Controllers/DashboardDataPageController.php:59
384
+ #: views/privacy-tools/notices.php:15
385
+ msgid "Consent withdrawn."
386
+ msgstr ""
387
+
388
+ #: src/Components/WordpressUser/RegistrationForm.php:42
389
+ msgid "<strong>ERROR</strong>: You must accept the terms and conditions."
390
+ msgstr ""
391
+
392
+ #: src/Components/WordpressUser/WordpressUser.php:63
393
+ #: src/Components/WordpressUser/WordpressUser.php:64
394
+ #: views/modules/wordpress-user/dashboard/data-page/header.php:2
395
+ msgctxt "(Admin)"
396
+ msgid "Privacy Tools"
397
+ msgstr ""
398
+
399
+ #: src/DataSubject/AdminTabDataSubject.php:27
400
+ #: src/DataSubject/AdminTabDataSubject.php:41
401
+ msgctxt "(Admin)"
402
+ msgid "Data Subjects"
403
+ msgstr ""
404
+
405
+ #: src/DataSubject/DataRepository.php:143
406
+ msgid "Data exported"
407
+ msgstr ""
408
+
409
+ #: src/DataSubject/DataRepository.php:158
410
+ msgid "Data export request"
411
+ msgstr ""
412
+
413
+ #: src/DataSubject/DataRepository.php:171
414
+ msgid "Data removed"
415
+ msgstr ""
416
+
417
+ #: src/DataSubject/DataRepository.php:186
418
+ msgid "Data removal request"
419
+ msgstr ""
420
+
421
+ #: src/DataSubject/DataSubjectIdentificator.php:65
422
+ #: src/DataSubject/DataSubjectIdentificator.php:82
423
+ msgid "Your personal data on"
424
+ msgstr ""
425
+
426
+ #: src/Helpers.php:27
427
+ msgctxt "(Admin)"
428
+ msgid "Austria"
429
+ msgstr ""
430
+
431
+ #: src/Helpers.php:28
432
+ msgctxt "(Admin)"
433
+ msgid "Belgium"
434
+ msgstr ""
435
+
436
+ #: src/Helpers.php:29
437
+ msgctxt "(Admin)"
438
+ msgid "Bulgaria"
439
+ msgstr ""
440
+
441
+ #: src/Helpers.php:30
442
+ msgctxt "(Admin)"
443
+ msgid "Croatia"
444
+ msgstr ""
445
+
446
+ #: src/Helpers.php:31
447
+ msgctxt "(Admin)"
448
+ msgid "Cyprus"
449
+ msgstr ""
450
+
451
+ #: src/Helpers.php:32
452
+ msgctxt "(Admin)"
453
+ msgid "Czech Republic"
454
+ msgstr ""
455
+
456
+ #: src/Helpers.php:33
457
+ msgctxt "(Admin)"
458
+ msgid "Denmark"
459
+ msgstr ""
460
+
461
+ #: src/Helpers.php:34
462
+ msgctxt "(Admin)"
463
+ msgid "Estonia"
464
+ msgstr ""
465
+
466
+ #: src/Helpers.php:35
467
+ msgctxt "(Admin)"
468
+ msgid "Finland"
469
+ msgstr ""
470
+
471
+ #: src/Helpers.php:36
472
+ msgctxt "(Admin)"
473
+ msgid "France"
474
+ msgstr ""
475
+
476
+ #: src/Helpers.php:37
477
+ msgctxt "(Admin)"
478
+ msgid "Germany"
479
+ msgstr ""
480
+
481
+ #: src/Helpers.php:38
482
+ msgctxt "(Admin)"
483
+ msgid "Greece"
484
+ msgstr ""
485
+
486
+ #: src/Helpers.php:39
487
+ msgctxt "(Admin)"
488
+ msgid "Hungary"
489
+ msgstr ""
490
+
491
+ #: src/Helpers.php:40
492
+ msgctxt "(Admin)"
493
+ msgid "Ireland"
494
+ msgstr ""
495
+
496
+ #: src/Helpers.php:41
497
+ msgctxt "(Admin)"
498
+ msgid "Italy"
499
+ msgstr ""
500
+
501
+ #: src/Helpers.php:42
502
+ msgctxt "(Admin)"
503
+ msgid "Latvia"
504
+ msgstr ""
505
+
506
+ #: src/Helpers.php:43
507
+ msgctxt "(Admin)"
508
+ msgid "Lithuania"
509
+ msgstr ""
510
+
511
+ #: src/Helpers.php:44
512
+ msgctxt "(Admin)"
513
+ msgid "Luxembourg"
514
+ msgstr ""
515
+
516
+ #: src/Helpers.php:45
517
+ msgctxt "(Admin)"
518
+ msgid "Malta"
519
+ msgstr ""
520
+
521
+ #: src/Helpers.php:46
522
+ msgctxt "(Admin)"
523
+ msgid "Netherlands"
524
+ msgstr ""
525
+
526
+ #: src/Helpers.php:47
527
+ msgctxt "(Admin)"
528
+ msgid "Poland"
529
+ msgstr ""
530
+
531
+ #: src/Helpers.php:48
532
+ msgctxt "(Admin)"
533
+ msgid "Portugal"
534
+ msgstr ""
535
+
536
+ #: src/Helpers.php:49
537
+ msgctxt "(Admin)"
538
+ msgid "Romania"
539
+ msgstr ""
540
+
541
+ #: src/Helpers.php:50
542
+ msgctxt "(Admin)"
543
+ msgid "Slovakia"
544
+ msgstr ""
545
+
546
+ #: src/Helpers.php:51
547
+ msgctxt "(Admin)"
548
+ msgid "Slovenia"
549
+ msgstr ""
550
+
551
+ #: src/Helpers.php:52
552
+ msgctxt "(Admin)"
553
+ msgid "Spain"
554
+ msgstr ""
555
+
556
+ #: src/Helpers.php:53
557
+ msgctxt "(Admin)"
558
+ msgid "Sweden"
559
+ msgstr ""
560
+
561
+ #: src/Helpers.php:54
562
+ msgctxt "(Admin)"
563
+ msgid "United Kingdom"
564
+ msgstr ""
565
+
566
+ #: src/Helpers.php:69
567
+ msgctxt "(Admin)"
568
+ msgid "Iceland"
569
+ msgstr ""
570
+
571
+ #: src/Helpers.php:70
572
+ msgctxt "(Admin)"
573
+ msgid "Norway"
574
+ msgstr ""
575
+
576
+ #: src/Helpers.php:71
577
+ msgctxt "(Admin)"
578
+ msgid "Liechtenstein"
579
+ msgstr ""
580
+
581
+ #: src/Helpers.php:72
582
+ msgctxt "(Admin)"
583
+ msgid "Switzerland"
584
+ msgstr ""
585
+
586
+ #: src/Helpers.php:73
587
+ msgctxt "(Admin)"
588
+ msgid "United States"
589
+ msgstr ""
590
+
591
+ #: src/Helpers.php:74
592
+ msgctxt "(Admin)"
593
+ msgid "Rest of the world"
594
+ msgstr ""
595
+
596
+ #: src/Helpers.php:145
597
+ msgid "An error has occurred. Please contact the site administrator."
598
+ msgstr ""
599
+
600
+ #: src/Installer/Installer.php:135
601
+ msgctxt "(Admin)"
602
+ msgid "Setup Wizard"
603
+ msgstr ""
604
+
605
+ #: src/Installer/Steps/ConfigurationPages.php:23
606
+ #: src/Installer/Steps/PolicySettings.php:23
607
+ #: src/Installer/Steps/PolicySettings.php:48
608
+ msgctxt "(Admin)"
609
+ msgid "&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
+
628
+ #: src/Router.php:149
629
+ msgctxt "(Admin)"
630
+ msgid "You do not have the required permissions to perform this action!"
631
+ msgstr ""
632
+
633
+ #: views/admin/consent.php:3
634
+ msgctxt "(Admin)"
635
+ msgid "Default consent types"
636
+ msgstr ""
637
+
638
+ #: views/admin/consent.php:4
639
+ msgctxt "(Admin)"
640
+ msgid ""
641
+ "These are the consent types that have been automatically registered by the "
642
+ "framework or a plugin."
643
+ msgstr ""
644
+
645
+ #: views/admin/consent.php:7 views/admin/consent.php:52
646
+ msgctxt "(Admin)"
647
+ msgid "Slug"
648
+ msgstr ""
649
+
650
+ #: views/admin/consent.php:8 views/admin/consent.php:38
651
+ #: views/admin/consent.php:60
652
+ msgctxt "(Admin)"
653
+ msgid "Title"
654
+ msgstr ""
655
+
656
+ #: views/admin/consent.php:9 views/admin/consent.php:41
657
+ #: views/admin/consent.php:63
658
+ msgctxt "(Admin)"
659
+ msgid "Description"
660
+ msgstr ""
661
+
662
+ #: views/admin/consent.php:10
663
+ msgctxt "(Admin)"
664
+ msgid "Visibility"
665
+ msgstr ""
666
+
667
+ #: views/admin/consent.php:18
668
+ msgctxt "(Admin)"
669
+ msgid "Visible"
670
+ msgstr ""
671
+
672
+ #: views/admin/consent.php:20
673
+ msgctxt "(Admin)"
674
+ msgid "Hidden"
675
+ msgstr ""
676
+
677
+ #: views/admin/consent.php:29
678
+ msgctxt "(Admin)"
679
+ msgid "Custom consent types"
680
+ msgstr ""
681
+
682
+ #: views/admin/consent.php:30
683
+ msgctxt "(Admin)"
684
+ msgid ""
685
+ "Here you can add custom consent types to track. They will not be used "
686
+ "anywhere by default - you will need to build an integration for each of them."
687
+ msgstr ""
688
+
689
+ #: views/admin/consent.php:35
690
+ msgctxt "(Admin)"
691
+ msgid "Machine-readable slug"
692
+ msgstr ""
693
+
694
+ #: views/admin/consent.php:44 views/admin/consent.php:68
695
+ msgctxt "(Admin)"
696
+ msgid "Visible?"
697
+ msgstr ""
698
+
699
+ #: views/admin/consent.php:72
700
+ msgctxt "(Admin)"
701
+ msgid "Remove"
702
+ msgstr ""
703
+
704
+ #: views/admin/consent.php:93
705
+ msgctxt "(Admin)"
706
+ msgid "Additional info"
707
+ msgstr ""
708
+
709
+ #: views/admin/consent.php:95
710
+ msgctxt "(Admin)"
711
+ msgid ""
712
+ "This text will be displayed to your data subjects on the Privacy Tools page."
713
+ msgstr ""
714
+
715
+ #: views/admin/data-subjects/search-form.php:2
716
+ msgctxt "(Admin)"
717
+ msgid ""
718
+ "On this page, you can find which data subjects personal data you are storing "
719
+ "and download, export or delete it."
720
+ msgstr ""
721
+
722
+ #: views/admin/data-subjects/search-form.php:10
723
+ msgctxt "(Admin)"
724
+ msgid "Find data subject by email"
725
+ msgstr ""
726
+
727
+ #: views/admin/data-subjects/search-form.php:11
728
+ msgctxt "(Admin)"
729
+ msgid "Email address"
730
+ msgstr ""
731
+
732
+ #: views/admin/data-subjects/search-form.php:16
733
+ msgctxt "(Admin)"
734
+ msgid "Search"
735
+ msgstr ""
736
+
737
+ #: views/admin/data-subjects/search-results.php:7
738
+ msgctxt "(Admin)"
739
+ msgid "Username"
740
+ msgstr ""
741
+
742
+ #: views/admin/data-subjects/search-results.php:12
743
+ msgctxt "(Admin)"
744
+ msgid "is not a registered user."
745
+ msgstr ""
746
+
747
+ #: views/admin/data-subjects/search-results.php:16
748
+ msgctxt "(Admin)"
749
+ msgid "Download data (html)"
750
+ msgstr ""
751
+
752
+ #: views/admin/data-subjects/search-results.php:17
753
+ msgctxt "(Admin)"
754
+ msgid "Export data (json)"
755
+ msgstr ""
756
+
757
+ #: views/admin/data-subjects/search-results.php:21
758
+ msgctxt "(Admin)"
759
+ msgid ""
760
+ "This user has admin capabilities. Deleting data via this interface is "
761
+ "disabled."
762
+ msgstr ""
763
+
764
+ #: views/admin/data-subjects/search-results.php:24
765
+ msgctxt "(Admin)"
766
+ msgid "Anonymize data"
767
+ msgstr ""
768
+
769
+ #: views/admin/data-subjects/search-results.php:25
770
+ msgctxt "(Admin)"
771
+ msgid "Delete data"
772
+ msgstr ""
773
+
774
+ #: views/admin/data-subjects/search-results.php:29
775
+ msgctxt "(Admin)"
776
+ msgid "No data found!"
777
+ msgstr ""
778
+
779
+ #: views/admin/general/delete-action-email.php:5
780
+ #: views/admin/general/export-action-email.php:5
781
+ #: views/installer/steps/configuration-settings.php:29
782
+ #: views/installer/steps/configuration-settings.php:79
783
+ msgid "Email address"
784
+ msgstr ""
785
+
786
+ #: views/admin/general/delete-action-reassign.php:3
787
+ #: views/installer/steps/configuration-settings.php:50
788
+ msgctxt "(Admin)"
789
+ msgid "Delete content"
790
+ msgstr ""
791
+
792
+ #: views/admin/general/delete-action-reassign.php:6
793
+ #: views/installer/steps/configuration-settings.php:53
794
+ msgctxt "(Admin)"
795
+ msgid "Reassign content to a user"
796
+ msgstr ""
797
+
798
+ #: views/admin/general/delete-action-reassign.php:10
799
+ msgctxt "(Admin)"
800
+ msgid ""
801
+ "If the user has submitted any content on your site, should it be deleted or "
802
+ "reassigned to another user?"
803
+ msgstr ""
804
+
805
+ #: views/admin/general/description-data-page.php:2
806
+ msgctxt "(Admin)"
807
+ msgid ""
808
+ "Select the page where users can go to control their data. This page must "
809
+ "contain the [gdpr_privacy_tools] shortcode."
810
+ msgstr ""
811
+
812
+ #: views/admin/general/description-delete-action.php:2
813
+ msgctxt "(Admin)"
814
+ msgid "What should happen if a data subject requests deleting their data."
815
+ msgstr ""
816
+
817
+ #: views/admin/general/description-export-action.php:2
818
+ msgctxt "(Admin)"
819
+ msgid ""
820
+ "What should happen if a data subject requests viewing or exporting their "
821
+ "data."
822
+ msgstr ""
823
+
824
+ #: views/admin/general/description-terms-page.php:2
825
+ msgctxt "(Admin)"
826
+ msgid "Optional. Select the page which contains your Terms & Conditions"
827
+ msgstr ""
828
+
829
+ #: views/admin/general/enable.php:9
830
+ msgctxt "(Admin)"
831
+ msgid "Enable the view, export and forget functionality for users and visitors"
832
+ msgstr ""
833
+
834
+ #: views/admin/general/enable.php:12
835
+ msgctxt "(Admin)"
836
+ msgid ""
837
+ "Enable the Privacy Tools page on front-end and dashboard. This allows "
838
+ "visitors to request viewing and deleting their personal data and withdraw "
839
+ "consents."
840
+ msgstr ""
841
+
842
+ #: views/admin/general/stylesheet.php:9
843
+ msgctxt "(Admin)"
844
+ msgid "Enable basic styling for Privacy Tools page."
845
+ msgstr ""
846
+
847
+ #: views/admin/general/theme-compatibility.php:9
848
+ #: views/installer/steps/integrations.php:21
849
+ msgctxt "(Admin)"
850
+ msgid ""
851
+ "Automatically add Privacy Policy and Privacy Tools links to your site footer."
852
+ msgstr ""
853
+
854
+ #: views/admin/notices/header.php:4 views/admin/settings-page.php:3
855
+ #: views/installer/header.php:23
856
+ msgctxt "(Admin)"
857
+ msgid "The GDPR Framework"
858
+ msgstr ""
859
+
860
+ #: views/admin/notices/helper-autoinstall.php:2
861
+ msgctxt "(Admin)"
862
+ msgid ""
863
+ "A Privacy Policy page has been created, but it is empty. You can generate a "
864
+ "policy template on this page."
865
+ msgstr ""
866
+
867
+ #: views/admin/notices/helper-policy.php:2
868
+ msgctxt "(Admin)"
869
+ msgid ""
870
+ "Heads up - your Privacy Policy still requires some attention. Find the "
871
+ "places marked with [TODO] and replace them with real content!"
872
+ msgstr ""
873
+
874
+ #: views/admin/notices/helper-tools.php:2
875
+ msgctxt "(Admin)"
876
+ msgid "The contents of this page should contain the [gdpr_tools] shortcode."
877
+ msgstr ""
878
+
879
+ #: views/admin/privacy-policy/description-policy-page.php:2
880
+ msgctxt "(Admin)"
881
+ msgid "Select the page which will contain your Privacy Policy"
882
+ msgstr ""
883
+
884
+ #: views/admin/privacy-policy/generated.php:3
885
+ msgctxt "(Admin)"
886
+ msgid "Your Privacy Policy has been generated."
887
+ msgstr ""
888
+
889
+ #: views/admin/privacy-policy/generated.php:20
890
+ msgctxt "(Admin)"
891
+ msgid "&laquo; Back"
892
+ msgstr ""
893
+
894
+ #: views/admin/privacy-policy/header.php:2
895
+ msgctxt "(Admin)"
896
+ msgid ""
897
+ "This page allows you to generate a Privacy Policy based on the information "
898
+ "you entered below."
899
+ msgstr ""
900
+
901
+ #: views/admin/settings-page.php:8
902
+ msgctxt "(Admin)"
903
+ msgid "GDPR settings saved!"
904
+ msgstr ""
905
+
906
+ #: views/admin/settings-page.php:31
907
+ #, php-format
908
+ msgctxt "(Admin)"
909
+ msgid "The GDPR Framework. Built with &#9829; by %sCodelight%s."
910
+ msgstr ""
911
+
912
+ #: views/admin/settings-page.php:39
913
+ #, php-format
914
+ msgctxt "(Admin)"
915
+ msgid "Support our development efforts with a %s5-star rating%s."
916
+ msgstr ""
917
+
918
+ #: views/admin/support/contents.php:5 views/installer/steps/finish.php:10
919
+ msgctxt "(Admin)"
920
+ msgid "Need more info?"
921
+ msgstr ""
922
+
923
+ #: views/admin/support/contents.php:11 views/installer/steps/finish.php:16
924
+ msgctxt "(Admin)"
925
+ msgid "Site Owner's guide to GDPR"
926
+ msgstr ""
927
+
928
+ #: views/admin/support/contents.php:14 views/installer/steps/finish.php:19
929
+ msgctxt "(Admin)"
930
+ msgid "Read the full guide on GDPR compliance."
931
+ msgstr ""
932
+
933
+ #: views/admin/support/contents.php:20 views/installer/steps/finish.php:25
934
+ msgctxt "(Admin)"
935
+ msgid "Knowledge base"
936
+ msgstr ""
937
+
938
+ #: views/admin/support/contents.php:23 views/installer/steps/finish.php:28
939
+ msgctxt "(Admin)"
940
+ msgid "Check out the knowledge base for common questions and answers."
941
+ msgstr ""
942
+
943
+ #: views/admin/support/contents.php:29 views/installer/steps/finish.php:34
944
+ msgctxt "(Admin)"
945
+ msgid "Developer's guide to GDPR"
946
+ msgstr ""
947
+
948
+ #: views/admin/support/contents.php:32 views/installer/steps/finish.php:37
949
+ msgctxt "(Admin)"
950
+ msgid "We have a thorough guide to help making custom sites compliant."
951
+ msgstr ""
952
+
953
+ #: views/admin/support/contents.php:40 views/installer/steps/finish.php:45
954
+ msgctxt "(Admin)"
955
+ msgid "Need help?"
956
+ msgstr ""
957
+
958
+ #: views/admin/support/contents.php:46 views/installer/steps/finish.php:51
959
+ msgctxt "(Admin)"
960
+ msgid "Submit a support request"
961
+ msgstr ""
962
+
963
+ #: views/admin/support/contents.php:49 views/installer/steps/finish.php:54
964
+ msgctxt "(Admin)"
965
+ msgid ""
966
+ "Found a bug or problem with the plugin? Post in the wordpress.org support "
967
+ "forum."
968
+ msgstr ""
969
+
970
+ #: views/admin/support/contents.php:55 views/installer/steps/finish.php:60
971
+ msgctxt "(Admin)"
972
+ msgid "Request a consultation"
973
+ msgstr ""
974
+
975
+ #: views/admin/support/contents.php:58 views/installer/steps/finish.php:63
976
+ msgctxt "(Admin)"
977
+ msgid ""
978
+ "Need development or legal assistance in making your site compliant? We can "
979
+ "help!"
980
+ msgstr ""
981
+
982
+ #: views/admin/wizard-buttons.php:2
983
+ msgctxt "(Admin)"
984
+ msgid "Restart setup wizard"
985
+ msgstr ""
986
+
987
+ #: views/email/action-export.php:8 views/email/action-forget.php:12
988
+ msgctxt "(Admin)"
989
+ msgid ""
990
+ "This email is just for your information. You don't need to take any action"
991
+ msgstr ""
992
+
993
+ #: views/email/action-forget.php:8
994
+ msgctxt "(Admin)"
995
+ msgid "The data subject had a user account on your website."
996
+ msgstr ""
997
+
998
+ #: views/email/identify-data-subject.php:2
999
+ msgid "Someone has requested access to your data on"
1000
+ msgstr ""
1001
+
1002
+ #: views/email/identify-data-subject.php:3
1003
+ msgid "If this was a mistake, just ignore this email and nothing will happen."
1004
+ msgstr ""
1005
+
1006
+ #: views/email/identify-data-subject.php:4
1007
+ msgid "To manage your data, visit the following address:"
1008
+ msgstr ""
1009
+
1010
+ #: views/email/identify-data-subject.php:10
1011
+ msgid "This link is valid for 15 minutes."
1012
+ msgstr ""
1013
+
1014
+ #: views/email/no-data.php:2
1015
+ msgid "Someone has requested information about your personal data on"
1016
+ msgstr ""
1017
+
1018
+ #: views/email/no-data.php:3
1019
+ msgid "None of your personal data is stored on"
1020
+ msgstr ""
1021
+
1022
+ #: views/email/no-data.php:5
1023
+ msgid ""
1024
+ "If this was a mistake or you did not request this email, just ignore it and "
1025
+ "nothing will happen."
1026
+ msgstr ""
1027
+
1028
+ #: views/email/request-export.php:13 views/email/request-forget.php:13
1029
+ msgctxt "(Admin)"
1030
+ msgid "As a reminder: according to GDPR, you have 30 days to comply."
1031
+ msgstr ""
1032
+
1033
+ #: views/global/delete-action.php:2
1034
+ msgctxt "(Admin)"
1035
+ msgid "Automatically anonymize data"
1036
+ msgstr ""
1037
+
1038
+ #: views/global/delete-action.php:5
1039
+ msgctxt "(Admin)"
1040
+ msgid "Automatically delete data"
1041
+ msgstr ""
1042
+
1043
+ #: views/global/delete-action.php:9
1044
+ msgctxt "(Admin)"
1045
+ msgid "Automatically anonymize data and notify me via email"
1046
+ msgstr ""
1047
+
1048
+ #: views/global/delete-action.php:13
1049
+ msgctxt "(Admin)"
1050
+ msgid "Automatically delete data and notify me via email"
1051
+ msgstr ""
1052
+
1053
+ #: views/global/delete-action.php:16 views/global/export-action.php:10
1054
+ msgctxt "(Admin)"
1055
+ msgid "Only notify me via email"
1056
+ msgstr ""
1057
+
1058
+ #: views/global/export-action.php:2
1059
+ msgctxt "(Admin)"
1060
+ msgid "Automatically download data"
1061
+ msgstr ""
1062
+
1063
+ #: views/global/export-action.php:6
1064
+ msgctxt "(Admin)"
1065
+ msgid "Automatically download data and notify me via email"
1066
+ msgstr ""
1067
+
1068
+ #: views/installer/continue-notice.php:2
1069
+ msgctxt "(Admin)"
1070
+ msgid "The The GDPR Framework setup has not been finalized yet."
1071
+ msgstr ""
1072
+
1073
+ #: views/installer/continue-notice.php:3
1074
+ msgctxt "(Admin)"
1075
+ msgid "You can continue the setup at any time."
1076
+ msgstr ""
1077
+
1078
+ #: views/installer/continue-notice.php:6
1079
+ msgctxt "(Admin)"
1080
+ msgid "Continue the setup wizard"
1081
+ msgstr ""
1082
+
1083
+ #: views/installer/continue-notice.php:9
1084
+ msgctxt "(Admin)"
1085
+ msgid "Hide this message"
1086
+ msgstr ""
1087
+
1088
+ #: views/installer/footer.php:7
1089
+ msgid "Back"
1090
+ msgstr ""
1091
+
1092
+ #: views/installer/header.php:26
1093
+ msgctxt "(Admin)"
1094
+ msgid "I need help"
1095
+ msgstr ""
1096
+
1097
+ #: views/installer/header.php:29
1098
+ msgctxt "(Admin)"
1099
+ msgid "Developer Docs"
1100
+ msgstr ""
1101
+
1102
+ #: views/installer/header.php:36
1103
+ msgctxt "(Admin)"
1104
+ msgid "Configuration"
1105
+ msgstr ""
1106
+
1107
+ #: views/installer/header.php:46
1108
+ msgctxt "(Admin)"
1109
+ msgid "Forms & Consent"
1110
+ msgstr ""
1111
+
1112
+ #: views/installer/header.php:51
1113
+ msgctxt "(Admin)"
1114
+ msgid "Integrations"
1115
+ msgstr ""
1116
+
1117
+ #: views/installer/steps/configuration-settings.php:23
1118
+ #: views/installer/steps/configuration-settings.php:73
1119
+ msgctxt "(Admin)"
1120
+ msgid "Enter the email address to notify"
1121
+ msgstr ""
1122
+
1123
+ #: views/installer/steps/disclaimer.php:21
1124
+ msgctxt "(Admin)"
1125
+ msgid "I accept"
1126
+ msgstr ""
1127
+
1128
+ #: views/installer/welcome-notice.php:7
1129
+ msgctxt "(Admin)"
1130
+ msgid "Run the setup wizard"
1131
+ msgstr ""
1132
+
1133
+ #: views/installer/welcome-notice.php:11
1134
+ msgctxt "(Admin)"
1135
+ msgid "Auto-install pages"
1136
+ msgstr ""
1137
+
1138
+ #: views/installer/welcome-notice.php:15
1139
+ msgctxt "(Admin)"
1140
+ msgid "Skip and install manually"
1141
+ msgstr ""
1142
+
1143
+ #: views/modules/contact-form-7/generator-privacy.php:6
1144
+ msgctxt "(Admin)"
1145
+ msgid ""
1146
+ "This tag generates the default text for Terms & Conditions and/or Privacy "
1147
+ "Policy checkbox."
1148
+ msgstr ""
1149
+
1150
+ #: views/modules/contact-form-7/generator-privacy.php:15
1151
+ msgid "Insert"
1152
+ msgstr ""
1153
+
1154
+ #: views/modules/wordpress-comments/terms-checkbox.php:6
1155
+ #: views/modules/wordpress-user/registration-terms-checkbox.php:7
1156
+ #, php-format
1157
+ msgid "I accept the %sTerms and Conditions%s and the %sPrivacy Policy%s"
1158
+ msgstr ""
1159
+
1160
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:3
1161
+ #: views/privacy-tools/form-consent.php:2
1162
+ msgid "Consent"
1163
+ msgstr ""
1164
+
1165
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:6
1166
+ #: views/privacy-tools/form-consent.php:6
1167
+ msgid "Here you can withdraw any consents you have given."
1168
+ msgstr ""
1169
+
1170
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:8
1171
+ msgid "Consents"
1172
+ msgstr ""
1173
+
1174
+ #: views/modules/wordpress-user/dashboard/data-page/form-consent.php:23
1175
+ #: views/privacy-tools/form-consent.php:24
1176
+ msgid "Withdraw"
1177
+ msgstr ""
1178
+
1179
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:5
1180
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:5
1181
+ msgctxt "(Admin)"
1182
+ msgid "Delete this user and all data"
1183
+ msgstr ""
1184
+
1185
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:11
1186
+ msgctxt "(Admin)"
1187
+ msgid "Delete my data"
1188
+ msgstr ""
1189
+
1190
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:15
1191
+ #: views/privacy-tools/form-delete.php:13
1192
+ msgid "Delete all data we have gathered about you."
1193
+ msgstr ""
1194
+
1195
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:16
1196
+ #: views/privacy-tools/form-delete.php:14
1197
+ msgid "If you have a user account on our site, it will also be deleted."
1198
+ msgstr ""
1199
+
1200
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:17
1201
+ #: views/privacy-tools/form-delete.php:15
1202
+ msgid "Be careful - this action is permanent and CANNOT be undone."
1203
+ msgstr ""
1204
+
1205
+ #: views/modules/wordpress-user/dashboard/data-page/form-delete.php:22
1206
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:23
1207
+ msgctxt "(Admin)"
1208
+ msgid ""
1209
+ "You seem to have an administrator or equivalent role, so deleting/"
1210
+ "anonymizing via this page is disabled."
1211
+ msgstr ""
1212
+
1213
+ #: views/modules/wordpress-user/dashboard/form-export.php:7
1214
+ #: views/privacy-tools/form-export.php:1
1215
+ msgid "Download your data"
1216
+ msgstr ""
1217
+
1218
+ #: views/modules/wordpress-user/dashboard/form-export.php:12
1219
+ #: views/privacy-tools/form-export.php:13
1220
+ msgid "Download as table"
1221
+ msgstr ""
1222
+
1223
+ #: views/modules/wordpress-user/dashboard/form-export.php:15
1224
+ #: views/privacy-tools/form-export.php:22
1225
+ msgid "Export as JSON"
1226
+ msgstr ""
1227
+
1228
+ #: views/modules/wordpress-user/dashboard/form-export.php:19
1229
+ #: views/privacy-tools/form-export.php:4
1230
+ msgid "You can download all your data formatted as a table for viewing."
1231
+ msgstr ""
1232
+
1233
+ #: views/modules/wordpress-user/dashboard/form-export.php:20
1234
+ #: views/privacy-tools/form-export.php:5
1235
+ msgid "Alternatively, you can export it in machine-readable JSON format."
1236
+ msgstr ""
1237
+
1238
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:11
1239
+ msgctxt "(Admin)"
1240
+ msgid "Delete user and all data"
1241
+ msgstr ""
1242
+
1243
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:14
1244
+ msgctxt "(Admin)"
1245
+ msgid "Anonymize user and all data"
1246
+ msgstr ""
1247
+
1248
+ #: views/modules/wordpress-user/dashboard/profile-page/form-delete.php:18
1249
+ msgctxt "gdpr-framework"
1250
+ msgid "Be careful - this action is permanent and CANNOT be undone."
1251
+ msgstr ""
1252
+
1253
+ #: views/modules/wordpress-user/dashboard/profile-page/header.php:2
1254
+ msgctxt "(Admin)"
1255
+ msgid "GDPR Data"
1256
+ msgstr ""
1257
+
1258
+ #: views/modules/wordpress-user/dashboard/profile-page/header.php:6
1259
+ msgctxt "(Admin)"
1260
+ msgid "This user has been anonymized."
1261
+ msgstr ""
1262
+
1263
+ #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:4
1264
+ msgctxt "(Admin)"
1265
+ msgid "Consents given"
1266
+ msgstr ""
1267
+
1268
+ #: views/modules/wordpress-user/dashboard/profile-page/table-consent.php:17
1269
+ msgctxt "(Admin)"
1270
+ msgid "No consents given"
1271
+ msgstr ""
1272
+
1273
+ #: views/privacy-tools/form-consent.php:9
1274
+ msgid "Consent types"
1275
+ msgstr ""
1276
+
1277
+ #: views/privacy-tools/form-delete.php:1
1278
+ #: views/privacy-tools/notice-admin-role.php:1
1279
+ msgid "Delete my user and data"
1280
+ msgstr ""
1281
+
1282
+ #: views/privacy-tools/form-delete.php:7
1283
+ msgid "Delete my data"
1284
+ msgstr ""
1285
+
1286
+ #: views/privacy-tools/form-identify.php:8
1287
+ msgid "Back to front page"
1288
+ msgstr ""
1289
+
1290
+ #: views/privacy-tools/form-identify.php:15
1291
+ msgid "Please identify yourself via e-mail"
1292
+ msgstr ""
1293
+
1294
+ #: views/privacy-tools/form-identify.php:19
1295
+ #: views/privacy-tools/form-identify.php:22
1296
+ msgid "Enter your email address"
1297
+ msgstr ""
1298
+
1299
+ #: views/privacy-tools/form-identify.php:25
1300
+ msgid "Send email"
1301
+ msgstr ""
1302
+
1303
+ #: views/privacy-tools/notice-admin-role.php:4
1304
+ msgctxt "(Admin)"
1305
+ msgid "Data deletion is disabled for administrative accounts."
1306
+ msgstr ""
1307
+
1308
+ #: views/privacy-tools/notices.php:3
1309
+ msgid ""
1310
+ "We will send you an email with the link to access your data. Please check "
1311
+ "your spam folder as well!"
1312
+ msgstr ""
1313
+
1314
+ #: views/privacy-tools/notices.php:7
1315
+ msgid "The email you entered does not appear to be a valid email."
1316
+ msgstr ""
1317
+
1318
+ #: views/privacy-tools/notices.php:11
1319
+ msgid "Sorry - the link seems to have expired. Please try again!"
1320
+ msgstr ""
1321
+
1322
+ #: views/privacy-tools/notices.php:23
1323
+ msgid "Your personal data has been removed!"
1324
+ msgstr ""
1325
+
1326
+ #: views/privacy-tools/privacy-tools.php:5
1327
+ msgid "You are identified as"
1328
+ msgstr ""
license.txt CHANGED
@@ -1,199 +1,199 @@
1
- This program is free software: you can redistribute it and/or modify
2
- it under the terms of the GNU General Public License as published by
3
- the Free Software Foundation, either version 3 of the License, or
4
- (at your option) any later version.
5
-
6
- This program is distributed in the hope that it will be useful,
7
- but WITHOUT ANY WARRANTY; without even the implied warranty of
8
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9
- GNU General Public License for more details.
10
-
11
- You should have received a copy of the GNU General Public License
12
- along with this program. If not, see <http://www.gnu.org/licenses/>.
13
-
14
-
15
- GNU GENERAL PUBLIC LICENSE
16
- Version 3, 29 June 2007
17
-
18
- Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
19
-
20
- Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
21
-
22
- Preamble
23
- The GNU General Public License is a free, copyleft license for software and other kinds of works.
24
-
25
- The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
26
-
27
- When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
28
-
29
- To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
30
-
31
- For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
32
-
33
- Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
34
-
35
- For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
36
-
37
- Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
38
-
39
- Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
40
-
41
- The precise terms and conditions for copying, distribution and modification follow.
42
-
43
- TERMS AND CONDITIONS
44
- 0. Definitions.
45
- “This License” refers to version 3 of the GNU General Public License.
46
-
47
- “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
48
-
49
- “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
50
-
51
- To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
52
-
53
- A “covered work” means either the unmodified Program or a work based on the Program.
54
-
55
- To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
56
-
57
- To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
58
-
59
- An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
60
-
61
- 1. Source Code.
62
- The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
63
-
64
- A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
65
-
66
- The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
67
-
68
- The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
69
-
70
- The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
71
-
72
- The Corresponding Source for a work in source code form is that same work.
73
-
74
- 2. Basic Permissions.
75
- All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
76
-
77
- You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
78
-
79
- Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
80
-
81
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
82
- No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
83
-
84
- When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
85
-
86
- 4. Conveying Verbatim Copies.
87
- You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
88
-
89
- You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
90
-
91
- 5. Conveying Modified Source Versions.
92
- You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
93
-
94
- a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
95
- b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
96
- c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
97
- d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
98
- A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
99
-
100
- 6. Conveying Non-Source Forms.
101
- You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
102
-
103
- a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
104
- b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
105
- c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
106
- d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
107
- e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
108
- A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
109
-
110
- A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
111
-
112
- “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
113
-
114
- If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
115
-
116
- The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
117
-
118
- Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
119
-
120
- 7. Additional Terms.
121
- “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
122
-
123
- When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
124
-
125
- Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
126
-
127
- a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
128
- b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
129
- c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
130
- d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
131
- e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
132
- f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
133
- All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
134
-
135
- If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
136
-
137
- Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
138
-
139
- 8. Termination.
140
- You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
141
-
142
- However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
143
-
144
- Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
145
-
146
- Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
147
-
148
- 9. Acceptance Not Required for Having Copies.
149
- You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
150
-
151
- 10. Automatic Licensing of Downstream Recipients.
152
- Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
153
-
154
- An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
155
-
156
- You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
157
-
158
- 11. Patents.
159
- A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
160
-
161
- A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
162
-
163
- Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
164
-
165
- In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
166
-
167
- If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
168
-
169
- If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
170
-
171
- A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
172
-
173
- Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
174
-
175
- 12. No Surrender of Others' Freedom.
176
- If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
177
-
178
- 13. Use with the GNU Affero General Public License.
179
- Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
180
-
181
- 14. Revised Versions of this License.
182
- The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
183
-
184
- Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
185
-
186
- If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
187
-
188
- Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
189
-
190
- 15. Disclaimer of Warranty.
191
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
192
-
193
- 16. Limitation of Liability.
194
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
195
-
196
- 17. Interpretation of Sections 15 and 16.
197
- If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
198
-
199
  END OF TERMS AND CONDITIONS
1
+ This program is free software: you can redistribute it and/or modify
2
+ it under the terms of the GNU General Public License as published by
3
+ the Free Software Foundation, either version 3 of the License, or
4
+ (at your option) any later version.
5
+
6
+ This program is distributed in the hope that it will be useful,
7
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
8
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9
+ GNU General Public License for more details.
10
+
11
+ You should have received a copy of the GNU General Public License
12
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
13
+
14
+
15
+ GNU GENERAL PUBLIC LICENSE
16
+ Version 3, 29 June 2007
17
+
18
+ Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
19
+
20
+ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
21
+
22
+ Preamble
23
+ The GNU General Public License is a free, copyleft license for software and other kinds of works.
24
+
25
+ The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
26
+
27
+ When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
28
+
29
+ To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
30
+
31
+ For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
32
+
33
+ Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
34
+
35
+ For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
36
+
37
+ Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
38
+
39
+ Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
40
+
41
+ The precise terms and conditions for copying, distribution and modification follow.
42
+
43
+ TERMS AND CONDITIONS
44
+ 0. Definitions.
45
+ “This License” refers to version 3 of the GNU General Public License.
46
+
47
+ “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
48
+
49
+ “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.
50
+
51
+ To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.
52
+
53
+ A “covered work” means either the unmodified Program or a work based on the Program.
54
+
55
+ To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
56
+
57
+ To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
58
+
59
+ An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
60
+
61
+ 1. Source Code.
62
+ The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.
63
+
64
+ A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
65
+
66
+ The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
67
+
68
+ The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
69
+
70
+ The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
71
+
72
+ The Corresponding Source for a work in source code form is that same work.
73
+
74
+ 2. Basic Permissions.
75
+ All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
76
+
77
+ You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
78
+
79
+ Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
80
+
81
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
82
+ No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
83
+
84
+ When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
85
+
86
+ 4. Conveying Verbatim Copies.
87
+ You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
88
+
89
+ You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
90
+
91
+ 5. Conveying Modified Source Versions.
92
+ You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
93
+
94
+ a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
95
+ b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
96
+ c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
97
+ d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
98
+ A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
99
+
100
+ 6. Conveying Non-Source Forms.
101
+ You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
102
+
103
+ a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
104
+ b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
105
+ c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
106
+ d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
107
+ e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
108
+ A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
109
+
110
+ A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
111
+
112
+ “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
113
+
114
+ If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
115
+
116
+ The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
117
+
118
+ Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
119
+
120
+ 7. Additional Terms.
121
+ “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
122
+
123
+ When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
124
+
125
+ Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
126
+
127
+ a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
128
+ b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
129
+ c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
130
+ d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
131
+ e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
132
+ f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
133
+ All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
134
+
135
+ If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
136
+
137
+ Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
138
+
139
+ 8. Termination.
140
+ You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
141
+
142
+ However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
143
+
144
+ Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
145
+
146
+ Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
147
+
148
+ 9. Acceptance Not Required for Having Copies.
149
+ You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
150
+
151
+ 10. Automatic Licensing of Downstream Recipients.
152
+ Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
153
+
154
+ An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
155
+
156
+ You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
157
+
158
+ 11. Patents.
159
+ A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.
160
+
161
+ A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
162
+
163
+ Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
164
+
165
+ In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
166
+
167
+ If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
168
+
169
+ If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
170
+
171
+ A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
172
+
173
+ Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
174
+
175
+ 12. No Surrender of Others' Freedom.
176
+ If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
177
+
178
+ 13. Use with the GNU Affero General Public License.
179
+ Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
180
+
181
+ 14. Revised Versions of this License.
182
+ The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
183
+
184
+ Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
185
+
186
+ If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
187
+
188
+ Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
189
+
190
+ 15. Disclaimer of Warranty.
191
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
192
+
193
+ 16. Limitation of Liability.
194
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
195
+
196
+ 17. Interpretation of Sections 15 and 16.
197
+ If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
198
+
199
  END OF TERMS AND CONDITIONS
readme.txt CHANGED
@@ -1,161 +1,168 @@
1
- === The GDPR Framework ===
2
- Contributors: codelight, indrek_k, data443
3
- Donate link: https://www.paypal.me/gdprframework
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.10
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
- This plugin is a service of [Data443.com](https://www.data443.com) & ClassiDocs – please stay tuned for more updates!
17
-
18
- Easy to use tools to help make your website GDPR-compliant.
19
-
20
- 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.
21
-
22
- You don't need to drown your customers in pointless acceptance checkboxes if you know what you're doing!
23
-
24
- ## IMPORTANT
25
- 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.)
26
-
27
- ## IMPORTANT
28
- IF you're using a caching plugin, please make sure you exclude the Privacy Tools page from your cache. Otherwise, it won't work!
29
-
30
- ## Disclaimer
31
- 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.
32
-
33
- ### Documentation
34
- Full documentation: [The WordPress Site Owner's Guide to GDPR](https://codelight.eu/wordpress-gdpr-framework/wordpress-site-owners-guide-to-gdpr/)
35
- For developers: [Developer Docs](https://codelight.eu/wordpress-gdpr-framework/developer-docs/)
36
-
37
- ### Features
38
- &#9745; Allow both users and visitors without an account to automatically view, export and delete their personal data;
39
- &#9745; Configure the plugin to delete or anonymize personal data automatically or send a notification and allow admins to do it manually;
40
- &#9745; Track, manage and withdraw consent;
41
- &#9745; Generate a GDPR-compatible Privacy Policy template for your site;
42
- &#9745; Comes with a helpful installation wizard to get you started quickly;
43
- &#9745; Fully documented;
44
- &#9745; Developer-friendly. Everything can be extended, every feature and template can be overridden.
45
-
46
- ### Coming up next
47
- &#9744; Cookie solution
48
- &#9744; Integration with WP & WooCommerce core tools
49
- &#9744; Overhaul & improvements on the consent tracking mechanism, re-consent, etc.
50
-
51
- GDPR is here to stay and we are just getting started. There's lots more to come!
52
-
53
- ### Plugin support:
54
- The GDPR Framework currently works with the following plugins
55
- &#9745; Contact Form 7 & Contact Form Flamingo
56
- &#9745; Gravity Forms - [Download the GDPR add-on](https://wordpress.org/plugins/gdpr-for-gravity-forms/)
57
- &#9745; Formidable Forms - [Download the GDPR add-on](https://wordpress.org/plugins/gdpr-for-formidable-forms/)
58
- &#9745; WPML
59
-
60
- Coming soon:
61
- &#9744; Ninja Forms
62
-
63
- Still free and open-source.
64
-
65
- Other integrations coming up:
66
- &#9744; WP Migrate DB
67
- &#9744; WooCommerce (postponed until the launch of their own compliance toolkit)
68
- &#9744; Easy Digital Downloads
69
-
70
- We're happy to add support for other major plugins as well. If you have a request, get in touch!
71
-
72
- == Support the development! ==
73
- [Donate!](https://codelight.eu/wordpress-gdpr-framework/donate/)
74
-
75
- == Frequently Asked Questions ==
76
- = Help, the identification emails are not sent! =
77
- 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.
78
- If you get the forgot password email but not the identification email, please make a post in the support forums.
79
-
80
- = Help, the link in the identification email doesn't work! =
81
- Are you using SendGrid or another email delivery service? This might corrupt the link in the email.
82
- In case you're using Sendgrid, make sure to turn off "click tracking". Otherwise, please post in the support forum!
83
-
84
- = Help, the Privacy Tools page acts weirdly or always displays the "link expired" message! =
85
- Check if you're using any caching plugins. If yes, then make sure the Privacy Tools page is excluded.
86
- Also check if a server side cache is enabled by your web host.
87
-
88
- = How is this plugin different from the tools in WordPress v4.9.6? =
89
- 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.
90
- In addition to that, we provide tools to manage and track custom consent types and also a privacy policy generator.
91
- We are also planning to add other important privacy-related features missing from WordPress core over time.
92
-
93
- = What about cookies? =
94
- 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.
95
-
96
- == Changelog ==
97
-
98
- = 1.0.10 =
99
- * Fix fatal error caused by Flamingo integration
100
-
101
- = 1.0.9 =
102
- * Add support for Contact Form 7 Flamingo
103
- * Remove nested the_content filter in the consent area editor to avoid potential conflicts with various plugins (Thanks Gary McPherson!)
104
- * Fix some missing translation strings (Thanks trueqap!)
105
- * Additional minor tweaks
106
- * Update Italian translation (Thanks Rienzi Comunica!)
107
-
108
- = 1.0.8 =
109
- * Disable Privacy Tools page if not set via admin (fixes infinite redirect issue)
110
- * Add additional admin notification if Privacy Tools page is not set
111
- * Additional minor tweaks
112
-
113
- = 1.0.7 =
114
- * Update translation pot file
115
- * Add partial Greek translations (Thanks @webace-creative-studio)
116
-
117
- = 1.0.6 =
118
- * Fix administrative roles not being able to comment via admin interface
119
- * Fix trashed or spam comments not being deleted
120
- * Minor usability tweaks everywhere
121
- * Fix PHP5.6 not properly saving custom consent (Thanks @paulnewson!)
122
- * Fix CF7 always showing as enabled in wizard
123
- * In Tools > Privacy > Data Subjects, add the display of given consents
124
- * Add warning about Sendgrid compatibility in the installer
125
- * Fix issue with installer wizard not properly saving export action
126
- * Add notice in case the settings are not properly configured
127
- * Added Bulgarian translation (thanks Zankov Group!)
128
- * Added partial Italian translation (thanks Matteo Bruno!)
129
-
130
- = 1.0.5 =
131
- * Fix installing consent tables and roles properly
132
- * Add Spanish translations (Thanks @elarequi!)
133
- * Add partial German translations (Thanks @knodderdachs!)
134
- * Lower required PHP version to 5.6.0
135
- * Re-add container alias for DataSubjectManager
136
- * Fix for installer giving the option to add links to footer for unsupported themes
137
- * Fix PHP notice in WPML module
138
-
139
- = 1.0.4 =
140
- * Fix translations, for real this time
141
- * Add French translations (Thanks @datagitateur!)
142
- * Fix PHP warning if WPML is activated
143
- * Add filter around $headers array for all outgoing emails sent via this plugin
144
-
145
- = 1.0.3 =
146
- * Change text domain to 'gdpr-framework' to avoid conflict with other plugins
147
- * Add Portuguese translation (Thanks @kativiti!)
148
- * Add partial Estonian translation
149
-
150
- = 1.0.2 =
151
- * Fix T&C and Privacy Policy URLs on registration and comments forms
152
- * Add basic styling and separate stylesheet for Privacy Tools page
153
- * Allow disabling styles for Privacy Tools page via admin
154
- * Add confirmation notice on deleting data via front-end Privacy Tools
155
- * Change strings with 'gdpr-admin' domain back to 'gdpr'. Add context to all admin strings.
156
-
157
- = 1.0.1 =
158
- * Fix PHP notice on Privacy Tools frontend page if logged in as admin
159
-
160
- = 1.0.0 =
161
- * Initial release
 
 
 
 
 
 
 
1
+ === The GDPR Framework By Data443 ===
2
+ Contributors: codelight, indrek_k, data443
3
+ Tags: gdpr, compliance, security, privacy, wordpress gdpr, eu privacy directive, eu cookie law, california privacy law, regulations, privacy law, law, data, general data protection regulation, gdpr law
4
+ Requires at least: 4.7
5
+ Tested up to: 4.9.8
6
+ Requires PHP: 5.6.33
7
+ Stable tag: 1.0.11
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. Extensions to enterprise GDPR compliance coming - full active development and QA team. Free, friendly support!
12
+
13
+ == Description ==
14
+
15
+ This plugin is a service of [Data443.com](https://www.data443.com) & ClassiDocs – and this latest release is our first rollup bug fix release - we hope you like the many changes!
16
+
17
+ Data443 is a Data Security and Compliance company traded on the OTCMarkets as [LDSR](https://www.otcmarkets.com/stock/LDSR/overview). We have been providing leading GDPR compliance products such as [ClassiDocs](https://www.data443.com/classidocs-home/), Blockchain privace and enterprise cloud eDiscovery tools.
18
+
19
+ The GDPR regulation is a large and complex law. Each member country is to ratify it into its own legilsation and language. This makes it cumbersome to manage - but rest asssured - we have a full [Site Owners Guide](https://www.data443.com/wordpress-site-owners-guide-to-gdpr/) to help you learn and understand some of your requirements.
20
+
21
+ This product gives a simple and elegant interface to handle Data Subject Access Requests (DSARs). In a few clicks, you can:
22
+
23
+ ### Features
24
+ &#9745; Enable DSAR on one page - allow even those without an account to automatically view, export and delete their personal data;
25
+ &#9745; Configure the plugin to delete or anonymize personal data automatically or send a notification and allow admins to do it manually;
26
+ &#9745; Track, manage and withdraw consent;
27
+ &#9745; Generate a GDPR-compatible Privacy Policy template for your site;
28
+ &#9745; Use a helpful installation wizard to get you started quickly;
29
+ &#9745; Report on related data items within your WordPress installation;
30
+ &#9745; Significantly reduce your staff time efforts dealing with DSARs;
31
+ &#9745; Enable your larger organization to summarize and consolidate DSAR work;
32
+ &#9745; Report to management on DSAR status, volume and data requirements;
33
+
34
+
35
+ &#9745; We provide this fully documented;
36
+ &#9745; We are developer-friendly. Everything can be extended, every feature and template can be overridden.
37
+
38
+ ## IMPORTANT
39
+ Please disable (or otherwise remove) caching capabilities from the plugin pages - as these are very dynamic and based on use interaction.
40
+
41
+ ## Disclaimer
42
+ 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.
43
+
44
+ ### Documentation
45
+ Full documentation: [The WordPress Site Owner's Guide to GDPR](https://www.data443.com/wordpress-site-owners-guide-to-gdpr/)
46
+ For developers: [Developer Docs](https://www.data443.com/wordpress-gdpr-framework-developer-docs/)
47
+
48
+ ### Coming up next
49
+ &#9744; Cookie solution
50
+ &#9744; Integration with WP & WooCommerce core tools
51
+ &#9744; Overhaul & improvements on the consent tracking mechanism, re-consent, etc.
52
+
53
+ GDPR is here to stay and we are just getting started. There's lots more to come!
54
+
55
+ ### Plugin support:
56
+ The GDPR Framework currently works with the following plugins
57
+ &#9745; Contact Form 7 & Contact Form Flamingo
58
+ &#9745; Gravity Forms - [Download the GDPR add-on](https://wordpress.org/plugins/gdpr-for-gravity-forms/)
59
+ &#9745; Formidable Forms - [Download the GDPR add-on](https://wordpress.org/plugins/gdpr-for-formidable-forms/)
60
+ &#9745; WPML
61
+
62
+ Coming soon:
63
+ &#9744; WP Migrate DB
64
+ &#9744; WooCommerce (postponed until the launch of their own compliance toolkit)
65
+ &#9744; Easy Digital Downloads
66
+
67
+ We are happy to add support for other major plugins as well. If you have a request, get in touch! [SUPPORT](https://data443.atlassian.net/servicedesk/customer/portal/2)
68
+
69
+ == Frequently Asked Questions ==
70
+ = Help, the identification emails are not sent! =
71
+ 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.
72
+ If you get the forgot password email but not the identification email, please make a post in the support forums.
73
+
74
+ = Help, the link in the identification email doesn't work! =
75
+ Are you using SendGrid or another email delivery service? This might corrupt the link in the email.
76
+ In case you're using Sendgrid, make sure to turn off "click tracking". Otherwise, please post in the support forum!
77
+
78
+ = Help, the Privacy Tools page acts weirdly or always displays the "link expired" message! =
79
+ Check if you're using any caching plugins. If yes, then make sure the Privacy Tools page is excluded.
80
+ Also check if a server side cache is enabled by your web host.
81
+
82
+ = How is this plugin different from the tools in WordPress v4.9.6? =
83
+ 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.
84
+ In addition to that, we provide tools to manage and track custom consent types and also a privacy policy generator.
85
+ We are also planning to add other important privacy-related features missing from WordPress core over time.
86
+
87
+
88
+ == Changelog ==
89
+
90
+ = 1.0.11 =
91
+ Numerous backlog bug fixes including:
92
+ * comments checkbox reported to disappear with WPML active
93
+ * Can’t save on Consent tab
94
+ * Treat upper- and lowercase chars in visitor email addresses equally
95
+ * Captcha on privacy tools page
96
+ * Privacy Tools Delete text change
97
+ * Add locations outside of US and EU
98
+ * Ensure + symbol works in email addresses
99
+ * Privacy Policy: replace "[TODO]" with something that's not a shortcode format
100
+ * confirm "delete my data" when button is pushed
101
+ * can't leave any comments with GDPR activated
102
+ * add Polylang compatibility
103
+ * Validate functionality with most current WP version
104
+
105
+ = 1.0.10 =
106
+ * Fix fatal error caused by Flamingo integration
107
+
108
+ = 1.0.9 =
109
+ * Add support for Contact Form 7 Flamingo
110
+ * Remove nested the_content filter in the consent area editor to avoid potential conflicts with various plugins (Thanks Gary McPherson!)
111
+ * Fix some missing translation strings (Thanks trueqap!)
112
+ * Additional minor tweaks
113
+ * Update Italian translation (Thanks Rienzi Comunica!)
114
+
115
+ = 1.0.8 =
116
+ * Disable Privacy Tools page if not set via admin (fixes infinite redirect issue)
117
+ * Add additional admin notification if Privacy Tools page is not set
118
+ * Additional minor tweaks
119
+
120
+ = 1.0.7 =
121
+ * Update translation pot file
122
+ * Add partial Greek translations (Thanks @webace-creative-studio)
123
+
124
+ = 1.0.6 =
125
+ * Fix administrative roles not being able to comment via admin interface
126
+ * Fix trashed or spam comments not being deleted
127
+ * Minor usability tweaks everywhere
128
+ * Fix PHP5.6 not properly saving custom consent (Thanks @paulnewson!)
129
+ * Fix CF7 always showing as enabled in wizard
130
+ * In Tools > Privacy > Data Subjects, add the display of given consents
131
+ * Add warning about Sendgrid compatibility in the installer
132
+ * Fix issue with installer wizard not properly saving export action
133
+ * Add notice in case the settings are not properly configured
134
+ * Added Bulgarian translation (thanks Zankov Group!)
135
+ * Added partial Italian translation (thanks Matteo Bruno!)
136
+
137
+ = 1.0.5 =
138
+ * Fix installing consent tables and roles properly
139
+ * Add Spanish translations (Thanks @elarequi!)
140
+ * Add partial German translations (Thanks @knodderdachs!)
141
+ * Lower required PHP version to 5.6.0
142
+ * Re-add container alias for DataSubjectManager
143
+ * Fix for installer giving the option to add links to footer for unsupported themes
144
+ * Fix PHP notice in WPML module
145
+
146
+ = 1.0.4 =
147
+ * Fix translations, for real this time
148
+ * Add French translations (Thanks @datagitateur!)
149
+ * Fix PHP warning if WPML is activated
150
+ * Add filter around $headers array for all outgoing emails sent via this plugin
151
+
152
+ = 1.0.3 =
153
+ * Change text domain to 'gdpr-framework' to avoid conflict with other plugins
154
+ * Add Portuguese translation (Thanks @kativiti!)
155
+ * Add partial Estonian translation
156
+
157
+ = 1.0.2 =
158
+ * Fix T&C and Privacy Policy URLs on registration and comments forms
159
+ * Add basic styling and separate stylesheet for Privacy Tools page
160
+ * Allow disabling styles for Privacy Tools page via admin
161
+ * Add confirmation notice on deleting data via front-end Privacy Tools
162
+ * Change strings with 'gdpr-admin' domain back to 'gdpr'. Add context to all admin strings.
163
+
164
+ = 1.0.1 =
165
+ * Fix PHP notice on Privacy Tools frontend page if logged in as admin
166
+
167
+ = 1.0.0 =
168
+ * 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,87 +1,87 @@
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
- if (gdpr('options')->get('is_installed') &&
63
- (!gdpr('options')->get('tools_page') || is_null(get_post(gdpr('options')->get('tools_page'))))) {
64
- $this->renderSettingsHelperNotice();
65
- }
66
-
67
- if ('download_and_notify' === gdpr('options')->get('export_action') || 'notify' === gdpr('options')->get('export_action')) {
68
- if (!gdpr('options')->get('export_action_email')) {
69
- $this->renderSettingsHelperNotice();
70
- }
71
- }
72
-
73
- if ('anonymize_and_notify' === gdpr('options')->get('delete_action') ||
74
- 'delete_and_notify' === gdpr('options')->get('delete_action') ||
75
- 'notify' === gdpr('options')->get('delete_action')
76
- ) {
77
- if (!gdpr('options')->get('delete_action_email')) {
78
- $this->renderSettingsHelperNotice();
79
- }
80
- }
81
- }
82
-
83
- protected function renderSettingsHelperNotice()
84
- {
85
- gdpr('admin-notice')->add('admin/notices/helper-settings');
86
- }
87
- }
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
+ if (gdpr('options')->get('is_installed') &&
63
+ (!gdpr('options')->get('tools_page') || is_null(get_post(gdpr('options')->get('tools_page'))))) {
64
+ $this->renderSettingsHelperNotice();
65
+ }
66
+
67
+ if ('download_and_notify' === gdpr('options')->get('export_action') || 'notify' === gdpr('options')->get('export_action')) {
68
+ if (!gdpr('options')->get('export_action_email')) {
69
+ $this->renderSettingsHelperNotice();
70
+ }
71
+ }
72
+
73
+ if ('anonymize_and_notify' === gdpr('options')->get('delete_action') ||
74
+ 'delete_and_notify' === gdpr('options')->get('delete_action') ||
75
+ 'notify' === gdpr('options')->get('delete_action')
76
+ ) {
77
+ if (!gdpr('options')->get('delete_action_email')) {
78
+ $this->renderSettingsHelperNotice();
79
+ }
80
+ }
81
+ }
82
+
83
+ protected function renderSettingsHelperNotice()
84
+ {
85
+ gdpr('admin-notice')->add('admin/notices/helper-settings');
86
+ }
87
+ }
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/AdminTabInterface.php CHANGED
@@ -1,40 +1,40 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Admin;
4
-
5
- interface AdminTabInterface
6
- {
7
- /**
8
- * @return string
9
- */
10
- public function getSlug();
11
-
12
- /**
13
- * @return string
14
- */
15
- public function getTitle();
16
-
17
- /**
18
- * Use this function to register settings and fields
19
- *
20
- * @return void
21
- */
22
- public function init();
23
-
24
- /**
25
- * Wrapper around init() function.
26
- * You probably don't need to override this.
27
- *
28
- * @return void
29
- */
30
- public function setup();
31
-
32
- /**
33
- * Wrapper around render() function.
34
- * Automatically calls settings_fields(), do_settings_sections() and submit_button().
35
- * Override this if you don't want the functions to be called.
36
- *
37
- * @return string
38
- */
39
- public function renderContents();
40
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Admin;
4
+
5
+ interface AdminTabInterface
6
+ {
7
+ /**
8
+ * @return string
9
+ */
10
+ public function getSlug();
11
+
12
+ /**
13
+ * @return string
14
+ */
15
+ public function getTitle();
16
+
17
+ /**
18
+ * Use this function to register settings and fields
19
+ *
20
+ * @return void
21
+ */
22
+ public function init();
23
+
24
+ /**
25
+ * Wrapper around init() function.
26
+ * You probably don't need to override this.
27
+ *
28
+ * @return void
29
+ */
30
+ public function setup();
31
+
32
+ /**
33
+ * Wrapper around render() function.
34
+ * Automatically calls settings_fields(), do_settings_sections() and submit_button().
35
+ * Override this if you don't want the functions to be called.
36
+ *
37
+ * @return string
38
+ */
39
+ public function renderContents();
40
  }
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,154 +1,154 @@
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
- * jQuery UI dialog for modals
101
- */
102
- wp_enqueue_style('wp-jquery-ui-dialog');
103
- wp_enqueue_script(
104
- 'gdpr-admin',
105
- gdpr('config')->get('plugin.url') . 'assets/gdpr-admin.js',
106
- ['jquery-ui-dialog']
107
- );
108
-
109
- /**
110
- * jQuery Repeater
111
- */
112
- wp_enqueue_script(
113
- 'jquery-repeater',
114
- gdpr('config')->get('plugin.url') . 'assets/jquery.repeater.min.js',
115
- ['jquery']
116
- );
117
-
118
- /**
119
- * Select2
120
- */
121
- wp_enqueue_style(
122
- 'select2css',
123
- gdpr('config')->get('plugin.url') . 'assets/select2-4.0.5.css'
124
- );
125
-
126
- wp_enqueue_script(
127
- 'select2',
128
- gdpr('config')->get('plugin.url') . 'assets/select2-4.0.5.js',
129
- ['jquery']
130
- );
131
-
132
- wp_enqueue_script(
133
- 'conditional-show',
134
- gdpr('config')->get('plugin.url') . 'assets/conditional-show.js',
135
- ['jquery']
136
- );
137
- }
138
-
139
- /**
140
- * Add a new Post State for our super important system pages
141
- */
142
- public function registerPostStates($postStates, $post)
143
- {
144
- if (gdpr('options')->get('policy_page') == $post->ID) {
145
- $postStates['gdpr_policy_page'] = _x('Privacy Policy Page', '(Admin)', 'gdpr-framework');
146
- }
147
-
148
- if (gdpr('options')->get('tools_page') == $post->ID) {
149
- $postStates['gdpr_tools_page'] = _x('Privacy Tools Page', '(Admin)', 'gdpr-framework');
150
- }
151
-
152
- return $postStates;
153
- }
154
  }
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
+ * jQuery UI dialog for modals
101
+ */
102
+ wp_enqueue_style('wp-jquery-ui-dialog');
103
+ wp_enqueue_script(
104
+ 'gdpr-admin',
105
+ gdpr('config')->get('plugin.url') . 'assets/gdpr-admin.js',
106
+ ['jquery-ui-dialog']
107
+ );
108
+
109
+ /**
110
+ * jQuery Repeater
111
+ */
112
+ wp_enqueue_script(
113
+ 'jquery-repeater',
114
+ gdpr('config')->get('plugin.url') . 'assets/jquery.repeater.min.js',
115
+ ['jquery']
116
+ );
117
+
118
+ /**
119
+ * Select2
120
+ */
121
+ wp_enqueue_style(
122
+ 'select2css',
123
+ gdpr('config')->get('plugin.url') . 'assets/select2-4.0.5.css'
124
+ );
125
+
126
+ wp_enqueue_script(
127
+ 'select2',
128
+ gdpr('config')->get('plugin.url') . 'assets/select2-4.0.5.js',
129
+ ['jquery']
130
+ );
131
+
132
+ wp_enqueue_script(
133
+ 'conditional-show',
134
+ gdpr('config')->get('plugin.url') . 'assets/conditional-show.js',
135
+ ['jquery']
136
+ );
137
+ }
138
+
139
+ /**
140
+ * Add a new Post State for our super important system pages
141
+ */
142
+ public function registerPostStates($postStates, $post)
143
+ {
144
+ if (gdpr('options')->get('policy_page') == $post->ID) {
145
+ $postStates['gdpr_policy_page'] = _x('Privacy Policy Page', '(Admin)', 'gdpr-framework');
146
+ }
147
+
148
+ if (gdpr('options')->get('tools_page') == $post->ID) {
149
+ $postStates['gdpr_tools_page'] = _x('Privacy Tools Page', '(Admin)', 'gdpr-framework');
150
+ }
151
+
152
+ return $postStates;
153
+ }
154
  }
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/ConsentAdmin.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Components\Consent;
4
-
5
- class ConsentAdmin
6
- {
7
- public function __construct()
8
- {
9
- gdpr()->bind(AdminTabConsent::class);
10
-
11
- add_filter('gdpr/admin/tabs', [$this, 'registerAdminTab'], 20);
12
- }
13
-
14
- public function registerAdminTab($tabs)
15
- {
16
- $tabs['consent'] = gdpr(AdminTabConsent::class);
17
-
18
- return $tabs;
19
- }
20
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Components\Consent;
4
+
5
+ class ConsentAdmin
6
+ {
7
+ public function __construct()
8
+ {
9
+ gdpr()->bind(AdminTabConsent::class);
10
+
11
+ add_filter('gdpr/admin/tabs', [$this, 'registerAdminTab'], 20);
12
+ }
13
+
14
+ public function registerAdminTab($tabs)
15
+ {
16
+ $tabs['consent'] = gdpr(AdminTabConsent::class);
17
+
18
+ return $tabs;
19
+ }
20
  }
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
@@ -1,292 +1,292 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Components\Consent;
4
-
5
- /**
6
- * Class UserConsentModel
7
- *
8
- * @package Codelight\GDPR\Components\Consent
9
- */
10
- class UserConsentModel
11
- {
12
- /* @var string */
13
- public $tableName;
14
-
15
- /* @var string */
16
- public $version = '1.0';
17
-
18
- /* @var string */
19
- public $primaryKey = 'id';
20
-
21
- /**
22
- * UserConsentModel constructor.
23
- */
24
- public function __construct()
25
- {
26
- $this->setTableName();
27
-
28
- // todo: cleanup
29
- // global $wpdb;
30
- //$wpdb->query('TRUNCATE TABLE wp_gdpr_consent');
31
- }
32
-
33
- /**
34
- * Set the table name with wpdb-s prefix
35
- */
36
- protected function setTableName()
37
- {
38
- global $wpdb;
39
- $this->tableName = $wpdb->prefix . 'gdpr_consent';
40
- }
41
-
42
- /**
43
- * Check if a user has given a consent
44
- *
45
- * @param $email
46
- * @param $consent
47
- * @return int
48
- */
49
- public function given($email, $consent)
50
- {
51
- global $wpdb;
52
-
53
- return count($wpdb->get_results($wpdb->prepare(
54
- "SELECT * FROM {$this->tableName} WHERE email = %s AND consent = %s AND status = 1;",
55
- $email,
56
- $consent
57
- )));
58
- }
59
-
60
- /**
61
- * Check if a user has withdrawn a consent
62
- *
63
- * @param $email
64
- * @param $consent
65
- * @return int
66
- */
67
- public function withdrawn($email, $consent)
68
- {
69
- global $wpdb;
70
-
71
- return count($wpdb->get_results($wpdb->prepare(
72
- "SELECT * FROM {$this->tableName} WHERE email = %s AND consent = %s AND status = 0;",
73
- $email,
74
- $consent
75
- )));
76
- }
77
-
78
- /**
79
- * Check if a consent exists in the database
80
- *
81
- * @param $email
82
- * @param $consent
83
- * @return array|null|object
84
- */
85
- public function exists($email, $consent)
86
- {
87
- global $wpdb;
88
-
89
- return count($wpdb->get_results($wpdb->prepare(
90
- "SELECT * FROM {$this->tableName} WHERE email = %s AND consent = %s;",
91
- $email,
92
- $consent
93
- )));
94
- }
95
-
96
- /**
97
- * Set a consent to 'given'
98
- *
99
- * @param $email
100
- * @param $consent
101
- * @param $status
102
- * @return false|int
103
- */
104
- public function give($email, $consent)
105
- {
106
- $this->set($email, $consent, 1);
107
- }
108
-
109
- /**
110
- * Set a consent to 'withdrawn'
111
- *
112
- * @param $email
113
- * @param $consent
114
- * @param $status
115
- * @return false|int
116
- */
117
- public function withdraw($email, $consent)
118
- {
119
- $this->set($email, $consent, 0);
120
- }
121
-
122
- /**
123
- * Set a consent to 'given' or 'withdrawn'
124
- *
125
- * @param $email
126
- * @param $consent
127
- * @param $status
128
- * @return false|int
129
- */
130
- protected function set($email, $consent, $status, $version = 1)
131
- {
132
- global $wpdb;
133
-
134
- if ($this->exists($email, $consent)) {
135
- return $wpdb->update(
136
- $this->tableName,
137
- [
138
- 'version' => $version,
139
- 'consent' => $consent,
140
- 'status' => $status,
141
- 'updated_at' => date("Y-m-d H:i:s"),
142
- 'ip' => $_SERVER['REMOTE_ADDR'],
143
- ],
144
- [
145
- 'email' => $email,
146
- 'consent' => $consent,
147
- ]
148
- );
149
- } else {
150
- return $wpdb->insert(
151
- $this->tableName,
152
- [
153
- 'email' => $email,
154
- 'version' => $version,
155
- 'consent' => $consent,
156
- 'status' => $status,
157
- 'updated_at' => date("Y-m-d H:i:s"),
158
- 'ip' => $_SERVER['REMOTE_ADDR'],
159
- ]
160
- );
161
- }
162
- }
163
-
164
- /**
165
- * Get all consent given by data subject
166
- *
167
- * @param $email
168
- */
169
- public function getAll($email)
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
- /**
190
- * Remove a consent row from the database
191
- *
192
- * @param $email
193
- * @param $consent
194
- * @return false|int
195
- */
196
- public function delete($email, $consent)
197
- {
198
- global $wpdb;
199
-
200
- return $wpdb->delete(
201
- $this->tableName,
202
- [
203
- 'email' => $email,
204
- 'consent' => $consent,
205
- ]
206
- );
207
- }
208
-
209
- /**
210
- * Withdraw consent and anonymize data subject's email
211
- *
212
- * @param $email
213
- * @param $consent
214
- * @param $anonymizedId
215
- * @return false|int
216
- */
217
- public function anonymize($email, $consent, $anonymizedId)
218
- {
219
- global $wpdb;
220
-
221
- if ($this->exists($email, $consent)) {
222
- return $wpdb->update(
223
- $this->tableName,
224
- [
225
- 'email' => $anonymizedId,
226
- 'consent' => $consent,
227
- 'status' => 0,
228
- 'updated_at' => date("Y-m-d H:i:s"),
229
- 'ip' => $_SERVER['REMOTE_ADDR'],
230
- ],
231
- [
232
- 'email' => $email,
233
- 'consent' => $consent,
234
- ]
235
- );
236
- }
237
- }
238
-
239
- /**
240
- * Get columns and formats
241
- */
242
- public function getColumns()
243
- {
244
- return [
245
- 'id' => '%d',
246
- 'version' => '%d',
247
- 'email' => '%s',
248
- 'consent' => '%s',
249
- 'status' => '%d',
250
- 'updated_at' => '%s',
251
- 'ip' => '%s'
252
- //'valid_until' => '%s',
253
- ];
254
- }
255
-
256
- /**
257
- * Get default column values
258
- */
259
- public function getColumnDefaults()
260
- {
261
- return [
262
- 'id' => '',
263
- 'version' => 1,
264
- 'email' => '',
265
- 'consent' => '',
266
- 'status' => '',
267
- 'updated_at' => '',
268
- 'ip' => '',
269
- //'valid_until' => '',
270
- ];
271
- }
272
-
273
- /**
274
- * Create the table
275
- */
276
- public function createTable()
277
- {
278
- require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
279
- $sql = "CREATE TABLE " . $this->tableName . " (
280
- id bigint(20) NOT NULL AUTO_INCREMENT,
281
- version int NOT NULL,
282
- email varchar(64) NOT NULL,
283
- consent varchar(128) NOT NULL,
284
- status tinyint NOT NULL,
285
- updated_at TIMESTAMP NULL,
286
- ip varchar(64) NOT NULL,
287
- PRIMARY KEY (id)
288
- ) CHARACTER SET utf8 COLLATE utf8_general_ci;";
289
- dbDelta($sql);
290
- update_option($this->tableName . '_db_version', $this->version);
291
- }
292
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Components\Consent;
4
+
5
+ /**
6
+ * Class UserConsentModel
7
+ *
8
+ * @package Codelight\GDPR\Components\Consent
9
+ */
10
+ class UserConsentModel
11
+ {
12
+ /* @var string */
13
+ public $tableName;
14
+
15
+ /* @var string */
16
+ public $version = '1.0';
17
+
18
+ /* @var string */
19
+ public $primaryKey = 'id';
20
+
21
+ /**
22
+ * UserConsentModel constructor.
23
+ */
24
+ public function __construct()
25
+ {
26
+ $this->setTableName();
27
+
28
+ // todo: cleanup
29
+ // global $wpdb;
30
+ //$wpdb->query('TRUNCATE TABLE wp_gdpr_consent');
31
+ }
32
+
33
+ /**
34
+ * Set the table name with wpdb-s prefix
35
+ */
36
+ protected function setTableName()
37
+ {
38
+ global $wpdb;
39
+ $this->tableName = $wpdb->prefix . 'gdpr_consent';
40
+ }
41
+
42
+ /**
43
+ * Check if a user has given a consent
44
+ *
45
+ * @param $email
46
+ * @param $consent
47
+ * @return int
48
+ */
49
+ public function given($email, $consent)
50
+ {
51
+ global $wpdb;
52
+
53
+ return count($wpdb->get_results($wpdb->prepare(
54
+ "SELECT * FROM {$this->tableName} WHERE email = %s AND consent = %s AND status = 1;",
55
+ $email,
56
+ $consent
57
+ )));
58
+ }
59
+
60
+ /**
61
+ * Check if a user has withdrawn a consent
62
+ *
63
+ * @param $email
64
+ * @param $consent
65
+ * @return int
66
+ */
67
+ public function withdrawn($email, $consent)
68
+ {
69
+ global $wpdb;
70
+
71
+ return count($wpdb->get_results($wpdb->prepare(
72
+ "SELECT * FROM {$this->tableName} WHERE email = %s AND consent = %s AND status = 0;",
73
+ $email,
74
+ $consent
75
+ )));
76
+ }
77
+
78
+ /**
79
+ * Check if a consent exists in the database
80
+ *
81
+ * @param $email
82
+ * @param $consent
83
+ * @return array|null|object
84
+ */
85
+ public function exists($email, $consent)
86
+ {
87
+ global $wpdb;
88
+
89
+ return count($wpdb->get_results($wpdb->prepare(
90
+ "SELECT * FROM {$this->tableName} WHERE email = %s AND consent = %s;",
91
+ $email,
92
+ $consent
93
+ )));
94
+ }
95
+
96
+ /**
97
+ * Set a consent to 'given'
98
+ *
99
+ * @param $email
100
+ * @param $consent
101
+ * @param $status
102
+ * @return false|int
103
+ */
104
+ public function give($email, $consent)
105
+ {
106
+ $this->set($email, $consent, 1);
107
+ }
108
+
109
+ /**
110
+ * Set a consent to 'withdrawn'
111
+ *
112
+ * @param $email
113
+ * @param $consent
114
+ * @param $status
115
+ * @return false|int
116
+ */
117
+ public function withdraw($email, $consent)
118
+ {
119
+ $this->set($email, $consent, 0);
120
+ }
121
+
122
+ /**
123
+ * Set a consent to 'given' or 'withdrawn'
124
+ *
125
+ * @param $email
126
+ * @param $consent
127
+ * @param $status
128
+ * @return false|int
129
+ */
130
+ protected function set($email, $consent, $status, $version = 1)
131
+ {
132
+ global $wpdb;
133
+
134
+ if ($this->exists($email, $consent)) {
135
+ return $wpdb->update(
136
+ $this->tableName,
137
+ [
138
+ 'version' => $version,
139
+ 'consent' => $consent,
140
+ 'status' => $status,
141
+ 'updated_at' => date("Y-m-d H:i:s"),
142
+ 'ip' => $_SERVER['REMOTE_ADDR'],
143
+ ],
144
+ [
145
+ 'email' => $email,
146
+ 'consent' => $consent,
147
+ ]
148
+ );
149
+ } else {
150
+ return $wpdb->insert(
151
+ $this->tableName,
152
+ [
153
+ 'email' => $email,
154
+ 'version' => $version,
155
+ 'consent' => $consent,
156
+ 'status' => $status,
157
+ 'updated_at' => date("Y-m-d H:i:s"),
158
+ 'ip' => $_SERVER['REMOTE_ADDR'],
159
+ ]
160
+ );
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Get all consent given by data subject
166
+ *
167
+ * @param $email
168
+ */
169
+ public function getAll($email)
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
+ /**
190
+ * Remove a consent row from the database
191
+ *
192
+ * @param $email
193
+ * @param $consent
194
+ * @return false|int
195
+ */
196
+ public function delete($email, $consent)
197
+ {
198
+ global $wpdb;
199
+
200
+ return $wpdb->delete(
201
+ $this->tableName,
202
+ [
203
+ 'email' => $email,
204
+ 'consent' => $consent,
205
+ ]
206
+ );
207
+ }
208
+
209
+ /**
210
+ * Withdraw consent and anonymize data subject's email
211
+ *
212
+ * @param $email
213
+ * @param $consent
214
+ * @param $anonymizedId
215
+ * @return false|int
216
+ */
217
+ public function anonymize($email, $consent, $anonymizedId)
218
+ {
219
+ global $wpdb;
220
+
221
+ if ($this->exists($email, $consent)) {
222
+ return $wpdb->update(
223
+ $this->tableName,
224
+ [
225
+ 'email' => $anonymizedId,
226
+ 'consent' => $consent,
227
+ 'status' => 0,
228
+ 'updated_at' => date("Y-m-d H:i:s"),
229
+ 'ip' => $_SERVER['REMOTE_ADDR'],
230
+ ],
231
+ [
232
+ 'email' => $email,
233
+ 'consent' => $consent,
234
+ ]
235
+ );
236
+ }
237
+ }
238
+
239
+ /**
240
+ * Get columns and formats
241
+ */
242
+ public function getColumns()
243
+ {
244
+ return [
245
+ 'id' => '%d',
246
+ 'version' => '%d',
247
+ 'email' => '%s',
248
+ 'consent' => '%s',
249
+ 'status' => '%d',
250
+ 'updated_at' => '%s',
251
+ 'ip' => '%s'
252
+ //'valid_until' => '%s',
253
+ ];
254
+ }
255
+
256
+ /**
257
+ * Get default column values
258
+ */
259
+ public function getColumnDefaults()
260
+ {
261
+ return [
262
+ 'id' => '',
263
+ 'version' => 1,
264
+ 'email' => '',
265
+ 'consent' => '',
266
+ 'status' => '',
267
+ 'updated_at' => '',
268
+ 'ip' => '',
269
+ //'valid_until' => '',
270
+ ];
271
+ }
272
+
273
+ /**
274
+ * Create the table
275
+ */
276
+ public function createTable()
277
+ {
278
+ require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
279
+ $sql = "CREATE TABLE " . $this->tableName . " (
280
+ id bigint(20) NOT NULL AUTO_INCREMENT,
281
+ version int NOT NULL,
282
+ email varchar(64) NOT NULL,
283
+ consent varchar(128) NOT NULL,
284
+ status tinyint NOT NULL,
285
+ updated_at TIMESTAMP NULL,
286
+ ip varchar(64) NOT NULL,
287
+ PRIMARY KEY (id)
288
+ ) CHARACTER SET utf8 COLLATE utf8_general_ci;";
289
+ dbDelta($sql);
290
+ update_option($this->tableName . '_db_version', $this->version);
291
+ }
292
  }
src/Components/PrivacyPolicy/AdminTabPrivacyPolicy.php CHANGED
@@ -1,438 +1,458 @@
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 sprintf(
275
- _x('See the %slist of contacts here%s.', '(Admin)', 'gdpr-framework'),
276
- '<a href="http://ec.europa.eu/justice/data-protection/article-29/structure/data-protection-authorities/index_en.htm" target="_blank">',
277
- '</a>'
278
- );
279
- //echo "</a>";
280
-
281
- $dpaData = json_encode(gdpr('helpers')->getDataProtectionAuthorities());
282
- echo gdpr('view')->render('admin/privacy-policy/dpa', compact('dpaData'));
283
- }
284
-
285
- public function renderDpaWebsite()
286
- {
287
- $value = gdpr('options')->get('dpa_website') ? esc_attr(gdpr('options')->get('dpa_website')) : '';
288
- $placeholder = _x('Data Protection Authority Website', '(Admin)', 'gdpr-framework');
289
- echo "<input name='gdpr_dpa_website' id='gdpr_dpa_website' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
290
- }
291
-
292
- public function renderDpaEmail()
293
- {
294
- $value = gdpr('options')->get('dpa_email') ? esc_attr(gdpr('options')->get('dpa_email')) : '';
295
- $placeholder = _x('Data Protection Authority Email', '(Admin)', 'gdpr-framework');
296
- echo "<input type='email' name='gdpr_dpa_email' id='gdpr_dpa_email' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
297
- }
298
-
299
- public function renderDpaPhone()
300
- {
301
- $value = gdpr('options')->get('dpa_phone') ? esc_attr(gdpr('options')->get('dpa_phone')) : '';
302
- $placeholder = _x('Data Protection Authority Phone', '(Admin)', 'gdpr-framework');
303
- echo "<input name='gdpr_dpa_phone' id='gdpr_dpa_phone' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
304
- }
305
-
306
- /**
307
- * Data Protection Officer
308
- */
309
-
310
- public function renderHasDPOHtml()
311
- {
312
- $hasDPO = gdpr('options')->get('has_dpo');
313
- echo gdpr('view')->render('admin/privacy-policy/has-dpo', compact('hasDPO'));
314
- }
315
-
316
- public function renderDPONameHtml()
317
- {
318
- $value = gdpr('options')->get('dpo_name') ? esc_attr(gdpr('options')->get('dpo_name')) : '';
319
- $placeholder = _x('DPO Name', '(Admin)', 'gdpr-framework');
320
- echo "<input name='gdpr_dpo_name' placeholder='{$placeholder}' value='{$value}'>";
321
- }
322
-
323
- public function renderDPOEmailHtml()
324
- {
325
- $value = gdpr('options')->get('dpo_email') ? esc_attr(gdpr('options')->get('dpo_email')) : '';
326
- $placeholder = _x('DPO Name', '(Admin)', 'gdpr-framework');
327
- echo "<input type='email' name='gdpr_dpo_email' placeholder='{$placeholder}' value='{$value}'>";
328
- }
329
-
330
-
331
- public function generatePolicy()
332
- {
333
- $policyPage = gdpr('options')->get('policy_page');
334
-
335
- // todo: handle errors
336
- if ( ! $policyPage) {
337
- return;
338
- }
339
-
340
- $policy = gdpr('view')->render(
341
- 'policy/policy'
342
- );
343
-
344
- wp_update_post([
345
- 'ID' => $policyPage,
346
- 'post_content' => $policy,
347
- ]);
348
-
349
- wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy&gdpr_notice=policy_generated'));
350
- }
351
-
352
- /**
353
- * Render either the settings or the generated policy
354
- */
355
- public function renderContents()
356
- {
357
- if (isset($_GET['generate']) && 'yes' == $_GET['generate']) {
358
- return $this->renderPolicy();
359
- } else {
360
- return $this->renderSettings();
361
- }
362
- }
363
-
364
- /**
365
- * Render the contents including settings fields, sections and submit button.
366
- * Trigger hooks for rendering content before and after the settings fields.
367
- *
368
- * @return string
369
- */
370
- public function renderSettings()
371
- {
372
- ob_start();
373
-
374
- do_action("gdpr/tabs/{$this->getSlug()}/before", $this);
375
- $this->settingsFields($this->getOptionsGroupName());
376
- do_settings_sections($this->getOptionsGroupName());
377
- do_action("gdpr/tabs/{$this->getSlug()}/after", $this);
378
-
379
- $this->renderSubmitButton();
380
-
381
- return ob_get_clean();
382
- }
383
-
384
- public function renderPolicy()
385
- {
386
- $policyPageId = gdpr('options')->get('policy_page');
387
- if ($policyPageId) {
388
- $policyUrl = get_edit_post_link($policyPageId);
389
- } else {
390
- $policyUrl = false;
391
- }
392
-
393
- $editor = $this->getPolicyEditor();
394
- $backUrl = gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy');
395
-
396
- return gdpr('view')->render('admin/privacy-policy/generated', compact('editor', 'policyUrl', 'backUrl'));
397
- }
398
-
399
- protected function getPolicyEditor()
400
- {
401
- ob_start();
402
-
403
- wp_editor(
404
- wp_kses_post($this->policyGenerator->generate()),
405
- 'gdpr_policy',
406
- [
407
- 'media_buttons' => false,
408
- 'editor_height' => 600,
409
- 'teeny' => true,
410
- 'editor_css' => '<style>#mceu_16 { display: none; }</style>'
411
- ]
412
- );
413
-
414
- return ob_get_clean();
415
- }
416
-
417
- /**
418
- * Render WP's default submit button
419
- */
420
- public function renderSubmitButton()
421
- {
422
- submit_button(_x('Save & Generate Policy', '(Admin)', 'gdpr-framework'));
423
- }
424
-
425
- /**
426
- * In order to set up a proper redirect to the generated policy
427
- * after saving settings, we modify the way wp_nonce_field is called and insert our own referer input.
428
- *
429
- * @param $optionGroup
430
- */
431
- public function settingsFields($optionGroup)
432
- {
433
- echo "<input type='hidden' name='option_page' value='" . esc_attr($optionGroup) . "' />";
434
- echo '<input type="hidden" name="action" value="update" />';
435
- wp_nonce_field("$optionGroup-options", '_wpnonce', false);
436
- echo '<input type="hidden" name="_wp_http_referer" value="'. esc_attr( wp_unslash( $_SERVER['REQUEST_URI'] ) . '&generate=yes' ) . '" />';
437
- }
438
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ $this->registerSetting('gdpr_delete_text');
37
+
38
+ /*
39
+ $this->registerSetting('gdpr_pp_data_gathered_1');
40
+ $this->registerSetting('gdpr_pp_data_gathered_2');
41
+ $this->registerSetting('gdpr_pp_data_gathered_3');
42
+ $this->registerSetting('gdpr_pp_data_gathered_4');
43
+
44
+ $this->registerSetting('gdpr_pp_data_usage_1');
45
+ $this->registerSetting('gdpr_pp_data_usage_2');
46
+ $this->registerSetting('gdpr_pp_data_usage_3');
47
+ $this->registerSetting('gdpr_pp_data_usage_4');
48
+
49
+ $this->registerSetting('gdpr_pp_data_partners');
50
+ */
51
+
52
+ add_action('gdpr/admin/action/privacy-policy/generate', [$this, 'generatePolicy']);
53
+ }
54
+
55
+ public function init()
56
+ {
57
+ /**
58
+ * General settings
59
+ */
60
+ $this->registerSettingSection(
61
+ 'gdpr_section_privacy_policy',
62
+ _x('Privacy Policy', '(Admin)', 'gdpr-framework'),
63
+ [$this, 'renderHeader']
64
+ );
65
+
66
+ /**
67
+ * Company info
68
+ */
69
+ $this->registerSettingSection(
70
+ 'gdpr_section_privacy_policy_company',
71
+ _x('Company information', '(Admin)', 'gdpr-framework')
72
+ );
73
+
74
+ $this->registerSettingField(
75
+ 'gdpr_company_name',
76
+ _x('Company Name', '(Admin)', 'gdpr-framework'),
77
+ [$this, 'renderCompanyNameHtml'],
78
+ 'gdpr_section_privacy_policy_company'
79
+ );
80
+
81
+
82
+ $this->registerSettingField(
83
+ 'gdpr_company_email',
84
+ _x('Company Email', '(Admin)', 'gdpr-framework'),
85
+ [$this, 'renderCompanyEmailHtml'],
86
+ 'gdpr_section_privacy_policy_company'
87
+ );
88
+
89
+ $this->registerSettingField(
90
+ 'gdpr_company_location',
91
+ _x('Company Location', '(Admin)', 'gdpr-framework'),
92
+ [$this, 'renderCompanyLocationHtml'],
93
+ 'gdpr_section_privacy_policy_company'
94
+ );
95
+
96
+ /**
97
+ * Representative
98
+ */
99
+ $this->registerSettingSection(
100
+ 'gdpr_section_privacy_policy_representative',
101
+ false,
102
+ [$this, 'renderRepresentativeOpen']
103
+ );
104
+
105
+ $this->registerSettingField(
106
+ 'gdpr_representative_contact_name',
107
+ _x('Representative Contact Name', '(Admin)', 'gdpr-framework'),
108
+ [$this, 'renderRepresentativeContactName'],
109
+ 'gdpr_section_privacy_policy_representative'
110
+ );
111
+
112
+ $this->registerSettingField(
113
+ 'gdpr_representative_contact_email',
114
+ _x('Representative Contact Email', '(Admin)', 'gdpr-framework'),
115
+ [$this, 'renderRepresentativeContactEmail'],
116
+ 'gdpr_section_privacy_policy_representative'
117
+ );
118
+
119
+ $this->registerSettingField(
120
+ 'gdpr_representative_contact_phone',
121
+ _x('Representative Contact Phone', '(Admin)', 'gdpr-framework'),
122
+ [$this, 'renderRepresentativeContactPhone'],
123
+ 'gdpr_section_privacy_policy_representative'
124
+ );
125
+
126
+ $this->registerSettingSection(
127
+ 'gdpr_section_privacy_policy_representative_close',
128
+ false,
129
+ [$this, 'renderRepresentativeClose']
130
+ );
131
+
132
+ /**
133
+ * DPA
134
+ */
135
+ $this->registerSettingSection(
136
+ 'gdpr_section_privacy_policy_dpa',
137
+ _x('Data Protection Authority', '(Admin)', 'gdpr-framework'),
138
+ [$this, 'renderDpaJS']
139
+ );
140
+
141
+ $this->registerSettingField(
142
+ 'gdpr_dpa_website',
143
+ _x('Data Protection Authority Website', '(Admin)', 'gdpr-framework'),
144
+ [$this, 'renderDpaWebsite'],
145
+ 'gdpr_section_privacy_policy_dpa'
146
+ );
147
+
148
+ $this->registerSettingField(
149
+ 'gdpr_dpa_email',
150
+ _x('Data Protection Authority Email', '(Admin)', 'gdpr-framework'),
151
+ [$this, 'renderDpaEmail'],
152
+ 'gdpr_section_privacy_policy_dpa'
153
+ );
154
+
155
+ $this->registerSettingField(
156
+ 'gdpr_dpa_phone',
157
+ _x('Data Protection Authority Phone', '(Admin)', 'gdpr-framework'),
158
+ [$this, 'renderDpaPhone'],
159
+ 'gdpr_section_privacy_policy_dpa'
160
+ );
161
+
162
+ /**
163
+ * DPO
164
+ */
165
+ $this->registerSettingSection(
166
+ 'gdpr_section_privacy_policy_dpo',
167
+ _x('Data Protection Officer', '(Admin)', 'gdpr-framework'),
168
+ function() {
169
+ echo "<a href='https://codelight.eu/wordpress-gdpr-framework/knowledge-base/do-i-need-to-appoint-data-protection-officer-dpo/' target='_blank'>";
170
+ echo _x('Knowledge base: Do I need to appoint a Data Protection Officer?', '(Admin)', 'gdpr-framework');
171
+ echo "</a>";
172
+ }
173
+ );
174
+
175
+ $this->registerSettingField(
176
+ 'gdpr_has_dpo',
177
+ _x('Data Protection Officer', '(Admin)', 'gdpr-framework'),
178
+ [$this, 'renderHasDPOHtml'],
179
+ 'gdpr_section_privacy_policy_dpo'
180
+ );
181
+
182
+ $this->registerSettingField(
183
+ 'gdpr_dpo_name',
184
+ _x('Data Protection Officer Name', '(Admin)', 'gdpr-framework'),
185
+ [$this, 'renderDPONameHtml'],
186
+ 'gdpr_section_privacy_policy_dpo',
187
+ ['class' => 'gdpr-dpo hidden']
188
+ );
189
+
190
+ $this->registerSettingField(
191
+ 'gdpr_dpo_email',
192
+ _x('Data Protection Officer Email', '(Admin)', 'gdpr-framework'),
193
+ [$this, 'renderDPOEmailHtml'],
194
+ 'gdpr_section_privacy_policy_dpo',
195
+ ['class' => 'gdpr-dpo hidden']
196
+ );
197
+
198
+ /**
199
+ * Change Delete Text
200
+ */
201
+
202
+ $this->registerSettingField(
203
+ 'gdpr_delete_text',
204
+ _x('Delete Text', '(Admin)', 'gdpr-framework'),
205
+ [$this, 'renderDeleteTextHtml'],
206
+ 'gdpr_section_privacy_policy_company'
207
+ );
208
+
209
+ }
210
+
211
+ public function renderHeader()
212
+ {
213
+ echo gdpr('view')->render('admin/privacy-policy/header');
214
+ }
215
+
216
+ /**
217
+ * Company info
218
+ */
219
+
220
+ public function renderCompanyNameHtml()
221
+ {
222
+ $value = gdpr('options')->get('company_name') ? esc_attr(gdpr('options')->get('company_name')) : '';
223
+ $placeholder = _x('Company Name', '(Admin)', 'gdpr-framework');
224
+ echo "<input name='gdpr_company_name' placeholder='{$placeholder}' value='{$value}'>";
225
+ }
226
+
227
+ public function renderCompanyEmailHtml()
228
+ {
229
+ $value = gdpr('options')->get('contact_email') ? esc_attr(gdpr('options')->get('contact_email')) : '';
230
+ $placeholder = _x('Contact Email', '(Admin)', 'gdpr-framework');
231
+ echo "<input type='email' name='gdpr_contact_email' placeholder='{$placeholder}' value='{$value}'>";
232
+ }
233
+
234
+ public function renderCompanyLocationHtml()
235
+ {
236
+ $country = gdpr('options')->get('company_location') ? gdpr('options')->get('company_location') : '';
237
+ $countrySelectOptions = gdpr('helpers')->getCountrySelectOptions($country);
238
+ echo gdpr('view')->render('admin/privacy-policy/company-location', compact('countrySelectOptions'));
239
+ }
240
+
241
+ /**
242
+ * Representative contact
243
+ */
244
+
245
+ public function renderRepresentativeOpen()
246
+ {
247
+ echo "<span class='gdpr-representative hidden'>";
248
+ echo "<h3>";
249
+ echo _x('Representative Contact', '(Admin)', 'gdpr-framework');
250
+ echo "</h3>";
251
+ echo "<a href='https://codelight.eu/wordpress-gdpr-framework/knowledge-base/do-i-need-to-appoint-an-eu-based-representative/' target='_blank'>";
252
+ echo _x('Knowledge base: Do I need to appoint an EU-based representative?', '(Admin)', 'gdpr-framework');
253
+ echo "</a>";
254
+ }
255
+
256
+ public function renderRepresentativeContactName()
257
+ {
258
+ $value = gdpr('options')->get('representative_contact_name') ? esc_attr(gdpr('options')->get('representative_contact_name')) : '';
259
+ $placeholder = _x('Representative Contact Name', '(Admin)', 'gdpr-framework');
260
+ echo "<input name='gdpr_representative_contact_name' placeholder='{$placeholder}' value='{$value}'>";
261
+ }
262
+
263
+ public function renderRepresentativeContactEmail()
264
+ {
265
+ $value = gdpr('options')->get('representative_contact_email') ? esc_attr(gdpr('options')->get('representative_contact_email')) : '';
266
+ $placeholder = _x('Representative Contact Email', '(Admin)', 'gdpr-framework');
267
+ echo "<input type='email' name='gdpr_representative_contact_email' placeholder='{$placeholder}' value='{$value}'>";
268
+ }
269
+
270
+ public function renderRepresentativeContactPhone()
271
+ {
272
+ $value = gdpr('options')->get('representative_contact_phone') ? esc_attr(gdpr('options')->get('representative_contact_phone')) : '';
273
+ $placeholder = _x('Representative Contact Phone', '(Admin)', 'gdpr-framework');
274
+ echo "<input name='gdpr_representative_contact_phone' placeholder='{$placeholder}' value='{$value}'>";
275
+ }
276
+
277
+ public function renderRepresentativeClose()
278
+ {
279
+ echo "</span>";
280
+ }
281
+
282
+ /**
283
+ * Data Protection Authority
284
+ */
285
+ public function renderDpaJS()
286
+ {
287
+ //echo "<a href='https://codelight.eu/wordpress-gdpr-framework/knowledge-base/do-i-need-to-appoint-an-eu-based-representative/' target='_blank'>";
288
+ echo sprintf(
289
+ _x('See the %slist of contacts here%s.', '(Admin)', 'gdpr-framework'),
290
+ '<a href="http://ec.europa.eu/justice/data-protection/article-29/structure/data-protection-authorities/index_en.htm" target="_blank">',
291
+ '</a>'
292
+ );
293
+ //echo "</a>";
294
+
295
+ $dpaData = json_encode(gdpr('helpers')->getDataProtectionAuthorities());
296
+ echo gdpr('view')->render('admin/privacy-policy/dpa', compact('dpaData'));
297
+ }
298
+
299
+ public function renderDpaWebsite()
300
+ {
301
+ $value = gdpr('options')->get('dpa_website') ? esc_attr(gdpr('options')->get('dpa_website')) : '';
302
+ $placeholder = _x('Data Protection Authority Website', '(Admin)', 'gdpr-framework');
303
+ echo "<input name='gdpr_dpa_website' id='gdpr_dpa_website' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
304
+ }
305
+
306
+ public function renderDpaEmail()
307
+ {
308
+ $value = gdpr('options')->get('dpa_email') ? esc_attr(gdpr('options')->get('dpa_email')) : '';
309
+ $placeholder = _x('Data Protection Authority Email', '(Admin)', 'gdpr-framework');
310
+ echo "<input type='email' name='gdpr_dpa_email' id='gdpr_dpa_email' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
311
+ }
312
+
313
+ public function renderDpaPhone()
314
+ {
315
+ $value = gdpr('options')->get('dpa_phone') ? esc_attr(gdpr('options')->get('dpa_phone')) : '';
316
+ $placeholder = _x('Data Protection Authority Phone', '(Admin)', 'gdpr-framework');
317
+ echo "<input name='gdpr_dpa_phone' id='gdpr_dpa_phone' placeholder='{$placeholder}' value='{$value}' data-set='{$value}'>";
318
+ }
319
+
320
+ /**
321
+ * Data Protection Officer
322
+ */
323
+
324
+ public function renderHasDPOHtml()
325
+ {
326
+ $hasDPO = gdpr('options')->get('has_dpo');
327
+ echo gdpr('view')->render('admin/privacy-policy/has-dpo', compact('hasDPO'));
328
+ }
329
+
330
+ public function renderDPONameHtml()
331
+ {
332
+ $value = gdpr('options')->get('dpo_name') ? esc_attr(gdpr('options')->get('dpo_name')) : '';
333
+ $placeholder = _x('DPO Name', '(Admin)', 'gdpr-framework');
334
+ echo "<input name='gdpr_dpo_name' placeholder='{$placeholder}' value='{$value}'>";
335
+ }
336
+
337
+ public function renderDPOEmailHtml()
338
+ {
339
+ $value = gdpr('options')->get('dpo_email') ? esc_attr(gdpr('options')->get('dpo_email')) : '';
340
+ $placeholder = _x('DPO Email', '(Admin)', 'gdpr-framework');
341
+ echo "<input type='email' name='gdpr_dpo_email' placeholder='{$placeholder}' value='{$value}'>";
342
+ }
343
+
344
+ public function renderDeleteTextHtml()
345
+ {
346
+ $value = gdpr('options')->get('delete_text') ? esc_attr(gdpr('options')->get('delete_text')) : '';
347
+ $placeholder = _x('Delete Text', '(Admin)', 'gdpr-framework');
348
+ echo "<input name='gdpr_delete_text' placeholder='{$placeholder}' value='{$value}'>";
349
+ }
350
+
351
+ public function generatePolicy()
352
+ {
353
+ $policyPage = gdpr('options')->get('policy_page');
354
+
355
+ // todo: handle errors
356
+ if ( ! $policyPage) {
357
+ return;
358
+ }
359
+
360
+ $policy = gdpr('view')->render(
361
+ 'policy/policy'
362
+ );
363
+
364
+ wp_update_post([
365
+ 'ID' => $policyPage,
366
+ 'post_content' => $policy,
367
+ ]);
368
+
369
+ wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy&gdpr_notice=policy_generated'));
370
+ }
371
+
372
+ /**
373
+ * Render either the settings or the generated policy
374
+ */
375
+ public function renderContents()
376
+ {
377
+ if (isset($_GET['generate']) && 'yes' == $_GET['generate']) {
378
+ return $this->renderPolicy();
379
+ } else {
380
+ return $this->renderSettings();
381
+ }
382
+ }
383
+
384
+ /**
385
+ * Render the contents including settings fields, sections and submit button.
386
+ * Trigger hooks for rendering content before and after the settings fields.
387
+ *
388
+ * @return string
389
+ */
390
+ public function renderSettings()
391
+ {
392
+ ob_start();
393
+
394
+ do_action("gdpr/tabs/{$this->getSlug()}/before", $this);
395
+ $this->settingsFields($this->getOptionsGroupName());
396
+ do_settings_sections($this->getOptionsGroupName());
397
+ do_action("gdpr/tabs/{$this->getSlug()}/after", $this);
398
+
399
+ $this->renderSubmitButton();
400
+
401
+ return ob_get_clean();
402
+ }
403
+
404
+ public function renderPolicy()
405
+ {
406
+ $policyPageId = gdpr('options')->get('policy_page');
407
+ if ($policyPageId) {
408
+ $policyUrl = get_edit_post_link($policyPageId);
409
+ } else {
410
+ $policyUrl = false;
411
+ }
412
+
413
+ $editor = $this->getPolicyEditor();
414
+ $backUrl = gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy');
415
+
416
+ return gdpr('view')->render('admin/privacy-policy/generated', compact('editor', 'policyUrl', 'backUrl'));
417
+ }
418
+
419
+ protected function getPolicyEditor()
420
+ {
421
+ ob_start();
422
+
423
+ wp_editor(
424
+ wp_kses_post($this->policyGenerator->generate()),
425
+ 'gdpr_policy',
426
+ [
427
+ 'media_buttons' => false,
428
+ 'editor_height' => 600,
429
+ 'teeny' => true,
430
+ 'editor_css' => '<style>#mceu_16 { display: none; }</style>'
431
+ ]
432
+ );
433
+
434
+ return ob_get_clean();
435
+ }
436
+
437
+ /**
438
+ * Render WP's default submit button
439
+ */
440
+ public function renderSubmitButton()
441
+ {
442
+ submit_button(_x('Save & Generate Policy', '(Admin)', 'gdpr-framework'));
443
+ }
444
+
445
+ /**
446
+ * In order to set up a proper redirect to the generated policy
447
+ * after saving settings, we modify the way wp_nonce_field is called and insert our own referer input.
448
+ *
449
+ * @param $optionGroup
450
+ */
451
+ public function settingsFields($optionGroup)
452
+ {
453
+ echo "<input type='hidden' name='option_page' value='" . esc_attr($optionGroup) . "' />";
454
+ echo '<input type="hidden" name="action" value="update" />';
455
+ wp_nonce_field("$optionGroup-options", '_wpnonce', false);
456
+ echo '<input type="hidden" name="_wp_http_referer" value="'. esc_attr( wp_unslash( $_SERVER['REQUEST_URI'] ) . '&generate=yes' ) . '" />';
457
+ }
458
+ }
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,280 +1,280 @@
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 = wpautop(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
- $privacyToolsUrl = gdpr('options')->get('tools_page');
273
- // Avoid infinite loop redirect
274
- $baseUrl = $privacyToolsUrl ? get_permalink($privacyToolsUrl) : home_url();
275
- }
276
-
277
- wp_safe_redirect(add_query_arg($args, $baseUrl));
278
- exit;
279
- }
280
- }
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 = wpautop(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
+ $privacyToolsUrl = gdpr('options')->get('tools_page');
273
+ // Avoid infinite loop redirect
274
+ $baseUrl = $privacyToolsUrl ? get_permalink($privacyToolsUrl) : home_url();
275
+ }
276
+
277
+ wp_safe_redirect(add_query_arg($args, $baseUrl));
278
+ exit;
279
+ }
280
+ }
src/Components/PrivacyToolsPage/PrivacyToolsPageShortcode.php CHANGED
@@ -1,49 +1,49 @@
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
- if (!gdpr('options')->get('tools_page') || is_null(get_post(gdpr('options')->get('tools_page')))) {
23
- return __('Please configure the Privacy Tools page in the admin interface.', 'gdpr-framework');
24
- }
25
-
26
- ob_start();
27
- $this->controller->render();
28
- return ob_get_clean();
29
- }
30
-
31
- public function renderUrlShortcode()
32
- {
33
- return gdpr('helpers')->getPrivacyToolsPageUrl();
34
- }
35
-
36
- public function renderLinkShortcode($attributes)
37
- {
38
- $attributes = shortcode_atts([
39
- 'title' => __('Privacy Tools', 'gdpr-framework'),
40
- ], $attributes);
41
-
42
- $url = gdpr('helpers')->getPrivacyToolsPageUrl();
43
-
44
- return
45
- "<a href='{$url}'>" .
46
- esc_html($attributes['title']) .
47
- "</a>";
48
- }
49
- }
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
+ if (!gdpr('options')->get('tools_page') || is_null(get_post(gdpr('options')->get('tools_page')))) {
23
+ return __('Please configure the Privacy Tools page in the admin interface.', 'gdpr-framework');
24
+ }
25
+
26
+ ob_start();
27
+ $this->controller->render();
28
+ return ob_get_clean();
29
+ }
30
+
31
+ public function renderUrlShortcode()
32
+ {
33
+ return gdpr('helpers')->getPrivacyToolsPageUrl();
34
+ }
35
+
36
+ public function renderLinkShortcode($attributes)
37
+ {
38
+ $attributes = shortcode_atts([
39
+ 'title' => __('Privacy Tools', 'gdpr-framework'),
40
+ ], $attributes);
41
+
42
+ $url = gdpr('helpers')->getPrivacyToolsPageUrl();
43
+
44
+ return
45
+ "<a href='{$url}'>" .
46
+ esc_html($attributes['title']) .
47
+ "</a>";
48
+ }
49
+ }
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/Themes/Themes.php CHANGED
@@ -1,99 +1,99 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Components\Themes;
4
-
5
- class Themes
6
- {
7
- protected $theme;
8
-
9
- public $supportedThemes = [
10
- 'twentyseventeen',
11
- 'twentysixteen',
12
- 'storefront'
13
- ];
14
-
15
- public function __construct()
16
- {
17
- $this->theme = get_option('stylesheet');
18
-
19
- if (!$this->isCurrentThemeSupported() || !gdpr('options')->get('enable_theme_compatibility')) {
20
- return;
21
- }
22
-
23
- // If both pages aren't defined, bail
24
- $privacyPolicy = gdpr('options')->get('policy_page');
25
- $privacyToolsPage = gdpr('options')->get('tools_page');
26
-
27
- if (!$privacyPolicy || !$privacyToolsPage) {
28
- return;
29
- }
30
-
31
- $theme = $this->theme;
32
- $this->$theme();
33
- }
34
-
35
- public function isCurrentThemeSupported()
36
- {
37
- return in_array($this->theme, $this->supportedThemes);
38
- }
39
-
40
- public function getCurrentThemeName()
41
- {
42
- return $this->theme;
43
- }
44
-
45
- public function twentyseventeen()
46
- {
47
- add_action("get_template_part_template-parts/footer/site", [$this, 'renderTwentyseventeenFooterLinks'], 10, 2);
48
- }
49
-
50
- public function twentysixteen()
51
- {
52
- add_action("twentysixteen_credits", [$this, 'renderTwentysixteenFooterLinks']);
53
- }
54
-
55
- public function storefront()
56
- {
57
- // I feel slightly dirty, but also clever
58
- add_filter("storefront_credit_link", [$this, 'renderStorefrontFooterLinks']);
59
- }
60
-
61
- public function renderTwentyseventeenFooterLinks($slug, $name)
62
- {
63
- if ('info' !== $name) {
64
- return;
65
- }
66
-
67
- $privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
68
- $privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
69
-
70
- echo gdpr('view')->render(
71
- 'themes/twentyseventeen/footer',
72
- compact('privacyPolicyUrl', 'privacyToolsPageUrl')
73
- );
74
- }
75
-
76
- public function renderTwentysixteenFooterLinks()
77
- {
78
- $privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
79
- $privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
80
-
81
- echo gdpr('view')->render(
82
- 'themes/twentysixteen/footer',
83
- compact('privacyPolicyUrl', 'privacyToolsPageUrl')
84
- );
85
- }
86
-
87
- public function renderStorefrontFooterLinks($value)
88
- {
89
- $privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
90
- $privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
91
-
92
- echo gdpr('view')->render(
93
- 'themes/storefront/footer',
94
- compact('privacyPolicyUrl', 'privacyToolsPageUrl')
95
- );
96
-
97
- return $value;
98
- }
99
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Components\Themes;
4
+
5
+ class Themes
6
+ {
7
+ protected $theme;
8
+
9
+ public $supportedThemes = [
10
+ 'twentyseventeen',
11
+ 'twentysixteen',
12
+ 'storefront'
13
+ ];
14
+
15
+ public function __construct()
16
+ {
17
+ $this->theme = get_option('stylesheet');
18
+
19
+ if (!$this->isCurrentThemeSupported() || !gdpr('options')->get('enable_theme_compatibility')) {
20
+ return;
21
+ }
22
+
23
+ // If both pages aren't defined, bail
24
+ $privacyPolicy = gdpr('options')->get('policy_page');
25
+ $privacyToolsPage = gdpr('options')->get('tools_page');
26
+
27
+ if (!$privacyPolicy || !$privacyToolsPage) {
28
+ return;
29
+ }
30
+
31
+ $theme = $this->theme;
32
+ $this->$theme();
33
+ }
34
+
35
+ public function isCurrentThemeSupported()
36
+ {
37
+ return in_array($this->theme, $this->supportedThemes);
38
+ }
39
+
40
+ public function getCurrentThemeName()
41
+ {
42
+ return $this->theme;
43
+ }
44
+
45
+ public function twentyseventeen()
46
+ {
47
+ add_action("get_template_part_template-parts/footer/site", [$this, 'renderTwentyseventeenFooterLinks'], 10, 2);
48
+ }
49
+
50
+ public function twentysixteen()
51
+ {
52
+ add_action("twentysixteen_credits", [$this, 'renderTwentysixteenFooterLinks']);
53
+ }
54
+
55
+ public function storefront()
56
+ {
57
+ // I feel slightly dirty, but also clever
58
+ add_filter("storefront_credit_link", [$this, 'renderStorefrontFooterLinks']);
59
+ }
60
+
61
+ public function renderTwentyseventeenFooterLinks($slug, $name)
62
+ {
63
+ if ('info' !== $name) {
64
+ return;
65
+ }
66
+
67
+ $privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
68
+ $privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
69
+
70
+ echo gdpr('view')->render(
71
+ 'themes/twentyseventeen/footer',
72
+ compact('privacyPolicyUrl', 'privacyToolsPageUrl')
73
+ );
74
+ }
75
+
76
+ public function renderTwentysixteenFooterLinks()
77
+ {
78
+ $privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
79
+ $privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
80
+
81
+ echo gdpr('view')->render(
82
+ 'themes/twentysixteen/footer',
83
+ compact('privacyPolicyUrl', 'privacyToolsPageUrl')
84
+ );
85
+ }
86
+
87
+ public function renderStorefrontFooterLinks($value)
88
+ {
89
+ $privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
90
+ $privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
91
+
92
+ echo gdpr('view')->render(
93
+ 'themes/storefront/footer',
94
+ compact('privacyPolicyUrl', 'privacyToolsPageUrl')
95
+ );
96
+
97
+ return $value;
98
+ }
99
  }
src/Components/WordpressComments/WordpressComments.php CHANGED
@@ -1,195 +1,202 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Components\WordpressComments;
4
-
5
- use Codelight\GDPR\DataSubject\DataSubject;
6
- use Codelight\GDPR\DataSubject\DataSubjectManager;
7
-
8
- class WordpressComments
9
- {
10
- /* @var DataSubjectManager */
11
- protected $dataSubjectManager;
12
-
13
- public function __construct(DataSubjectManager $dataSubjectManager)
14
- {
15
- $this->dataSubjectManager = $dataSubjectManager;
16
-
17
- $this->setup();
18
- }
19
-
20
- public function setup()
21
- {
22
- if (gdpr('options')->get('policy_page')) {
23
- add_action('comment_form_after_fields', [$this, 'maybeAddCommentFormCheckbox']);
24
- add_action('comment_form_logged_in_after', [$this, 'maybeAddCommentFormCheckbox']);
25
-
26
- add_filter('preprocess_comment', [$this, 'validate']);
27
- }
28
-
29
- add_filter('gdpr/data-subject/data', [$this, 'getExportData'], 1, 2);
30
- add_action('gdpr/data-subject/delete', [$this, 'deleteComments']);
31
- add_action('gdpr/data-subject/anonymize', [$this, 'deleteComments']);
32
- }
33
-
34
- /**
35
- * Check if consent is needed
36
- *
37
- * @return bool
38
- */
39
- public function needsConsent($email = null)
40
- {
41
- if ($email) {
42
- $dataSubject = $this->dataSubjectManager->getByEmail($email);
43
- } else {
44
- $dataSubject = $this->dataSubjectManager->getByLoggedInUser();
45
- }
46
-
47
- return !($dataSubject && $dataSubject->hasConsented('privacy-policy'));
48
- }
49
-
50
- /**
51
- * If consent is needed, render the checkbox
52
- *
53
- * @param $fields
54
- */
55
- public function maybeAddCommentFormCheckbox()
56
- {
57
- $email = isset($_POST['email']) ? $_POST['email'] : null;
58
-
59
- if (!$this->needsConsent($email)) {
60
- return;
61
- }
62
-
63
- $privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
64
- $termsPage = gdpr('options')->get('terms_page');
65
- if ($termsPage) {
66
- $termsUrl = get_permalink($termsPage);
67
- } else {
68
- $termsUrl = false;
69
- }
70
-
71
- echo gdpr('view')->render(
72
- 'modules/wordpress-comments/terms-checkbox',
73
- compact('termsUrl', 'privacyPolicyUrl')
74
- );
75
- }
76
-
77
- /**
78
- * If consent is needed, validate it
79
- */
80
- public function validate($commentData)
81
- {
82
- if (is_user_logged_in() && is_admin()) {
83
- $allowedRoles = apply_filters('gdpr/roles/comments', ['administrator', 'editor', 'shop_manager']);
84
-
85
- foreach (wp_get_current_user()->roles as $userRole) {
86
- if (in_array($userRole, $allowedRoles)) {
87
- return $commentData;
88
- }
89
- }
90
- }
91
-
92
- $email = isset($_POST['email']) ? $_POST['email'] : null;
93
-
94
- if (!$this->needsConsent($email)) {
95
- return $commentData;
96
- }
97
-
98
- if (!isset($_POST['gdpr_terms']) || !$_POST['gdpr_terms']) {
99
- wp_die(
100
- sprintf(
101
- __('%sERROR:%s You need to accept the terms and conditions to post a comment.'),
102
- '<strong>',
103
- '</strong>'
104
- )
105
- );
106
- } else {
107
- if (is_user_logged_in()) {
108
- $dataSubject = $this->dataSubjectManager->getByLoggedInUser();
109
- } else {
110
- $dataSubject = $this->dataSubjectManager->getByEmail($email);
111
- }
112
- $dataSubject->giveConsent('privacy-policy');
113
- }
114
-
115
- return $commentData;
116
- }
117
-
118
- /**
119
- * Add comments as well as comment meta to export data
120
- *
121
- * @param $data
122
- * @param $email
123
- * @param $dataSubject
124
- * @return mixed
125
- */
126
- public function getExportData($data, $email)
127
- {
128
- $comments = $this->getCommentsByEmail($email);
129
-
130
- if (count($comments)) {
131
-
132
- foreach ($comments as $comment) {
133
- /* @var $comment \WP_Comment */
134
-
135
- $commentData = [
136
- 'comment_author' => $comment->comment_author,
137
- 'comment_author_email' => $comment->comment_author_email,
138
- 'comment_author_url' => $comment->comment_author_url,
139
- 'comment_author_IP' => $comment->comment_author_IP,
140
- 'comment_date' => $comment->comment_date,
141
- 'comment_date_gmt' => $comment->comment_date_gmt,
142
- 'comment_content' => $comment->comment_content,
143
- 'comment_approved' => $comment->comment_approved,
144
- 'comment_agent' => $comment->comment_agent,
145
- ];
146
-
147
- $commentMeta = get_comment_meta($comment->comment_ID);
148
- if (!empty($commentMeta)) {
149
- $commentData['comment_meta'] = $commentMeta;
150
- }
151
-
152
- $data['comments'][] = $commentData;
153
- }
154
- }
155
-
156
- return $data;
157
- }
158
-
159
- public function deleteComments($email)
160
- {
161
- $comments = $this->getCommentsByEmail($email);
162
-
163
- if (!count($comments)) {
164
- return;
165
- }
166
-
167
- foreach ($comments as $comment) {
168
- /* @var $comment \WP_Comment */
169
- wp_delete_comment($comment->comment_ID, true);
170
- }
171
- }
172
-
173
- /**
174
- * Todo: this currently doesn't include spam or trashed comments
175
- *
176
- * @param $email
177
- * @return array|int
178
- */
179
- public function getCommentsByEmail($email)
180
- {
181
- if (!$email || !is_email($email)) {
182
- return [];
183
- }
184
-
185
- $query = new \WP_Comment_Query;
186
-
187
- $comments = $query->query([
188
- 'author_email' => $email,
189
- 'include_unapproved' => true,
190
- 'status' => 'all',
191
- ]);
192
-
193
- return $comments;
194
- }
 
 
 
 
 
 
 
195
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Components\WordpressComments;
4
+
5
+ use Codelight\GDPR\DataSubject\DataSubject;
6
+ use Codelight\GDPR\DataSubject\DataSubjectManager;
7
+
8
+ class WordpressComments
9
+ {
10
+ /* @var DataSubjectManager */
11
+ protected $dataSubjectManager;
12
+
13
+ public function __construct(DataSubjectManager $dataSubjectManager)
14
+ {
15
+ $this->dataSubjectManager = $dataSubjectManager;
16
+
17
+ $this->setup();
18
+ }
19
+
20
+ public function setup()
21
+ {
22
+ if(gdpr('options')->get('policy_page')){
23
+ $gdpr_check = gdpr('options')->get('policy_page');
24
+ }else{
25
+ $gdpr_check = get_option('gdpr_policy_page');
26
+ }
27
+ if ($gdpr_check) {
28
+ add_action('comment_form_after_fields', [$this, 'maybeAddCommentFormCheckbox']);
29
+ add_action('comment_form_logged_in_after', [$this, 'maybeAddCommentFormCheckbox']);
30
+ add_filter('preprocess_comment', [$this, 'validate']);
31
+ }
32
+
33
+ add_filter('gdpr/data-subject/data', [$this, 'getExportData'], 1, 2);
34
+ add_action('gdpr/data-subject/delete', [$this, 'deleteComments']);
35
+ add_action('gdpr/data-subject/anonymize', [$this, 'deleteComments']);
36
+ }
37
+
38
+ /**
39
+ * Check if consent is needed
40
+ *
41
+ * @return bool
42
+ */
43
+ public function needsConsent($email = null)
44
+ {
45
+ if ($email) {
46
+ $dataSubject = $this->dataSubjectManager->getByEmail($email);
47
+ } else {
48
+ $dataSubject = $this->dataSubjectManager->getByLoggedInUser();
49
+ }
50
+
51
+ return !($dataSubject && $dataSubject->hasConsented('privacy-policy'));
52
+ }
53
+
54
+ /**
55
+ * If consent is needed, render the checkbox
56
+ *
57
+ * @param $fields
58
+ */
59
+ public function maybeAddCommentFormCheckbox()
60
+ {
61
+ $email = isset($_POST['email']) ? $_POST['email'] : null;
62
+
63
+ if (!$this->needsConsent($email)) {
64
+ return;
65
+ }
66
+
67
+ $privacyPolicyUrl = get_permalink(gdpr('options')->get('policy_page'));
68
+ $termsPage = gdpr('options')->get('terms_page');
69
+ if ($termsPage) {
70
+ $termsUrl = get_permalink($termsPage);
71
+ } else {
72
+ $termsUrl = false;
73
+ }
74
+
75
+ echo gdpr('view')->render(
76
+ 'modules/wordpress-comments/terms-checkbox',
77
+ compact('termsUrl', 'privacyPolicyUrl')
78
+ );
79
+ }
80
+
81
+ /**
82
+ * If consent is needed, validate it
83
+ */
84
+ public function validate($commentData)
85
+ {
86
+ if (is_user_logged_in() && is_admin()) {
87
+ $allowedRoles = apply_filters('gdpr/roles/comments', ['administrator', 'editor', 'shop_manager']);
88
+
89
+ foreach (wp_get_current_user()->roles as $userRole) {
90
+ if (in_array($userRole, $allowedRoles)) {
91
+ return $commentData;
92
+ }
93
+ }
94
+ }
95
+
96
+ $email = isset($_POST['email']) ? $_POST['email'] : null;
97
+
98
+ if (!$this->needsConsent($email)) {
99
+ return $commentData;
100
+ }
101
+
102
+ include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
103
+ if ( !is_plugin_active( 'jetpack/jetpack.php' ) || !is_plugin_active('wpdiscuz/class.WpdiscuzCore.php')) {
104
+ if (!isset($_POST['gdpr_terms']) || !$_POST['gdpr_terms']) {
105
+ wp_die(
106
+ sprintf(
107
+ __('%sERROR:%s You need to accept the terms and conditions to post a comment.'),
108
+ '<strong>',
109
+ '</strong>'
110
+ )
111
+ );
112
+ } else {
113
+ if (is_user_logged_in()) {
114
+ $dataSubject = $this->dataSubjectManager->getByLoggedInUser();
115
+ } else {
116
+ $dataSubject = $this->dataSubjectManager->getByEmail($email);
117
+ }
118
+ $dataSubject->giveConsent('privacy-policy');
119
+ }
120
+ }
121
+
122
+ return $commentData;
123
+ }
124
+
125
+ /**
126
+ * Add comments as well as comment meta to export data
127
+ *
128
+ * @param $data
129
+ * @param $email
130
+ * @param $dataSubject
131
+ * @return mixed
132
+ */
133
+ public function getExportData($data, $email)
134
+ {
135
+ $comments = $this->getCommentsByEmail($email);
136
+
137
+ if (count($comments)) {
138
+
139
+ foreach ($comments as $comment) {
140
+ /* @var $comment \WP_Comment */
141
+
142
+ $commentData = [
143
+ 'comment_author' => $comment->comment_author,
144
+ 'comment_author_email' => $comment->comment_author_email,
145
+ 'comment_author_url' => $comment->comment_author_url,
146
+ 'comment_author_IP' => $comment->comment_author_IP,
147
+ 'comment_date' => $comment->comment_date,
148
+ 'comment_date_gmt' => $comment->comment_date_gmt,
149
+ 'comment_content' => $comment->comment_content,
150
+ 'comment_approved' => $comment->comment_approved,
151
+ 'comment_agent' => $comment->comment_agent,
152
+ ];
153
+
154
+ $commentMeta = get_comment_meta($comment->comment_ID);
155
+ if (!empty($commentMeta)) {
156
+ $commentData['comment_meta'] = $commentMeta;
157
+ }
158
+
159
+ $data['comments'][] = $commentData;
160
+ }
161
+ }
162
+
163
+ return $data;
164
+ }
165
+
166
+ public function deleteComments($email)
167
+ {
168
+ $comments = $this->getCommentsByEmail($email);
169
+
170
+ if (!count($comments)) {
171
+ return;
172
+ }
173
+
174
+ foreach ($comments as $comment) {
175
+ /* @var $comment \WP_Comment */
176
+ wp_delete_comment($comment->comment_ID, true);
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Todo: this currently doesn't include spam or trashed comments
182
+ *
183
+ * @param $email
184
+ * @return array|int
185
+ */
186
+ public function getCommentsByEmail($email)
187
+ {
188
+ if (!$email || !is_email($email)) {
189
+ return [];
190
+ }
191
+
192
+ $query = new \WP_Comment_Query;
193
+
194
+ $comments = $query->query([
195
+ 'author_email' => $email,
196
+ 'include_unapproved' => true,
197
+ 'status' => 'all',
198
+ ]);
199
+
200
+ return $comments;
201
+ }
202
  }
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 = wpautop(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 = wpautop(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/Config.php CHANGED
@@ -1,8 +1,8 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR;
4
-
5
- class Config extends \Illuminate\Config\Repository
6
- {
7
-
8
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR;
4
+
5
+ class Config extends \Illuminate\Config\Repository
6
+ {
7
+
8
  }
src/Container.php CHANGED
@@ -1,8 +1,8 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR;
4
-
5
- class Container extends \Illuminate\Container\Container
6
- {
7
- protected static $instance;
8
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR;
4
+
5
+ class Container extends \Illuminate\Container\Container
6
+ {
7
+ protected static $instance;
8
  }
src/DataSubject/AdminTabDataSubject.php CHANGED
@@ -1,128 +1,128 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\DataSubject;
4
-
5
- use Codelight\GDPR\Admin\AdminTab;
6
-
7
- /**
8
- * Class AdminTabDataSubject
9
- *
10
- * @package Codelight\GDPR\DataSubject
11
- */
12
- class AdminTabDataSubject extends AdminTab
13
- {
14
- /* @var string */
15
- protected $slug = 'data-subject';
16
-
17
- /* @var DataSubjectManager */
18
- protected $dataSubjectManager;
19
-
20
- /**
21
- * AdminTabDataSubject constructor.
22
- *
23
- * @param DataSubjectManager $dataSubjectManager
24
- */
25
- public function __construct(DataSubjectManager $dataSubjectManager)
26
- {
27
- $this->title = _x('Data Subjects', '(Admin)', 'gdpr-framework');
28
- $this->dataSubjectManager = $dataSubjectManager;
29
-
30
- // Workaround to allow this page to be submitted
31
- $this->registerSetting('gdpr_email');
32
-
33
- // Register handler for this action
34
- add_action('gdpr/admin/action/search', [$this, 'searchRedirect']);
35
- }
36
-
37
- public function init()
38
- {
39
- $this->registerSettingSection(
40
- 'gdpr-section-data-subjects',
41
- _x('Data Subjects', '(Admin)', 'gdpr-framework'),
42
- [$this, 'renderTab']
43
- );
44
- }
45
-
46
- public function renderTab()
47
- {
48
- if (isset($_GET['search']) && $_GET['search']) {
49
- $results = $this->getRenderedResults($_GET['search'], $this->dataSubjectManager->getByEmail($_GET['search']));
50
- } else {
51
- $results = '';
52
- }
53
-
54
- $nonce = wp_create_nonce('gdpr/admin/action/search');
55
- echo gdpr('view')->render(
56
- 'admin/data-subjects/search-form',
57
- compact('nonce', 'results', 'exportUrl', 'deleteUrl')
58
- );
59
- }
60
-
61
- public function getRenderedResults($email, DataSubject $dataSubject)
62
- {
63
- $hasData = $dataSubject->hasData();
64
- $links = [];
65
-
66
- if ($hasData) {
67
- if ($dataSubject->getUserId()) {
68
- $userName = get_userdata($dataSubject->getUserId())->user_login;
69
- $links['profile'] = get_edit_user_link($dataSubject->getUserId());
70
- $adminCap = user_can($dataSubject->getUserId(), 'manage_options');
71
-
72
- } else {
73
- $userName = false;
74
- $adminCap = false;
75
- }
76
-
77
- /**
78
- * TODO: these actions are currently triggered in DashboardProfilePageController
79
- * Should replace this with a generic AdminController!
80
- * Also consider namespacing gdpr_action in this case, i.e. profile/delete vs data-subject-tab/delete
81
- */
82
- $links['view'] = add_query_arg([
83
- 'gdpr_action' => 'export',
84
- 'gdpr_format' => 'html',
85
- 'gdpr_email' => $_GET['search'],
86
- 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
87
- ]);
88
-
89
- $links['export'] = add_query_arg([
90
- 'gdpr_action' => 'export',
91
- 'gdpr_format' => 'json',
92
- 'gdpr_email' => $_GET['search'],
93
- 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
94
- ]);
95
-
96
- $links['anonymize'] = add_query_arg([
97
- 'gdpr_email' => $_GET['search'],
98
- 'gdpr_action' => 'forget',
99
- 'gdpr_force_action' => 'anonymize',
100
- 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
101
- ]);
102
-
103
- $links['delete'] = add_query_arg([
104
- 'gdpr_email' => $_GET['search'],
105
- 'gdpr_action' => 'forget',
106
- 'gdpr_force_action' => 'delete',
107
- 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
108
- ]);
109
- }
110
-
111
- $consentData = $dataSubject->getConsentData();
112
-
113
- return gdpr('view')->render('admin/data-subjects/search-results', compact('email', 'hasData', 'links', 'userName', 'adminCap', 'consentData'));
114
- }
115
-
116
- public function renderSubmitButton()
117
- {
118
- // Intentionally left blank
119
- }
120
-
121
- public function searchRedirect()
122
- {
123
- if (isset($_POST['gdpr_email']) && $_POST['gdpr_email']) {
124
- wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $_POST['gdpr_email']));
125
- exit;
126
- }
127
- }
128
- }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\DataSubject;
4
+
5
+ use Codelight\GDPR\Admin\AdminTab;
6
+
7
+ /**
8
+ * Class AdminTabDataSubject
9
+ *
10
+ * @package Codelight\GDPR\DataSubject
11
+ */
12
+ class AdminTabDataSubject extends AdminTab
13
+ {
14
+ /* @var string */
15
+ protected $slug = 'data-subject';
16
+
17
+ /* @var DataSubjectManager */
18
+ protected $dataSubjectManager;
19
+
20
+ /**
21
+ * AdminTabDataSubject constructor.
22
+ *
23
+ * @param DataSubjectManager $dataSubjectManager
24
+ */
25
+ public function __construct(DataSubjectManager $dataSubjectManager)
26
+ {
27
+ $this->title = _x('Data Subjects', '(Admin)', 'gdpr-framework');
28
+ $this->dataSubjectManager = $dataSubjectManager;
29
+
30
+ // Workaround to allow this page to be submitted
31
+ $this->registerSetting('gdpr_email');
32
+
33
+ // Register handler for this action
34
+ add_action('gdpr/admin/action/search', [$this, 'searchRedirect']);
35
+ }
36
+
37
+ public function init()
38
+ {
39
+ $this->registerSettingSection(
40
+ 'gdpr-section-data-subjects',
41
+ _x('Data Subjects', '(Admin)', 'gdpr-framework'),
42
+ [$this, 'renderTab']
43
+ );
44
+ }
45
+
46
+ public function renderTab()
47
+ {
48
+ if (isset($_GET['search']) && $_GET['search']) {
49
+ $results = $this->getRenderedResults($_GET['search'], $this->dataSubjectManager->getByEmail($_GET['search']));
50
+ } else {
51
+ $results = '';
52
+ }
53
+
54
+ $nonce = wp_create_nonce('gdpr/admin/action/search');
55
+ echo gdpr('view')->render(
56
+ 'admin/data-subjects/search-form',
57
+ compact('nonce', 'results', 'exportUrl', 'deleteUrl')
58
+ );
59
+ }
60
+
61
+ public function getRenderedResults($email, DataSubject $dataSubject)
62
+ {
63
+ $hasData = $dataSubject->hasData();
64
+ $links = [];
65
+
66
+ if ($hasData) {
67
+ if ($dataSubject->getUserId()) {
68
+ $userName = get_userdata($dataSubject->getUserId())->user_login;
69
+ $links['profile'] = get_edit_user_link($dataSubject->getUserId());
70
+ $adminCap = user_can($dataSubject->getUserId(), 'manage_options');
71
+
72
+ } else {
73
+ $userName = false;
74
+ $adminCap = false;
75
+ }
76
+
77
+ /**
78
+ * TODO: these actions are currently triggered in DashboardProfilePageController
79
+ * Should replace this with a generic AdminController!
80
+ * Also consider namespacing gdpr_action in this case, i.e. profile/delete vs data-subject-tab/delete
81
+ */
82
+ $links['view'] = add_query_arg([
83
+ 'gdpr_action' => 'export',
84
+ 'gdpr_format' => 'html',
85
+ 'gdpr_email' => $_GET['search'],
86
+ 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
87
+ ]);
88
+
89
+ $links['export'] = add_query_arg([
90
+ 'gdpr_action' => 'export',
91
+ 'gdpr_format' => 'json',
92
+ 'gdpr_email' => $_GET['search'],
93
+ 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/export"),
94
+ ]);
95
+
96
+ $links['anonymize'] = add_query_arg([
97
+ 'gdpr_email' => $_GET['search'],
98
+ 'gdpr_action' => 'forget',
99
+ 'gdpr_force_action' => 'anonymize',
100
+ 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
101
+ ]);
102
+
103
+ $links['delete'] = add_query_arg([
104
+ 'gdpr_email' => $_GET['search'],
105
+ 'gdpr_action' => 'forget',
106
+ 'gdpr_force_action' => 'delete',
107
+ 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/forget"),
108
+ ]);
109
+ }
110
+
111
+ $consentData = $dataSubject->getConsentData();
112
+
113
+ return gdpr('view')->render('admin/data-subjects/search-results', compact('email', 'hasData', 'links', 'userName', 'adminCap', 'consentData'));
114
+ }
115
+
116
+ public function renderSubmitButton()
117
+ {
118
+ // Intentionally left blank
119
+ }
120
+
121
+ public function searchRedirect()
122
+ {
123
+ if (isset($_POST['gdpr_email']) && $_POST['gdpr_email']) {
124
+ wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $_POST['gdpr_email']));
125
+ exit;
126
+ }
127
+ }
128
+ }
src/DataSubject/DataExporter.php CHANGED
@@ -1,138 +1,138 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\DataSubject;
4
-
5
- /**
6
- * Handle formatting and downloading data subject's data.
7
- *
8
- * Class DataManager
9
- *
10
- * @package Codelight\GDPR\DataSubject
11
- */
12
- class DataExporter
13
- {
14
- public function export(array $data, DataSubject $dataSubject, $format = 'html')
15
- {
16
- $data = $this->maybeUnserialize($data);
17
-
18
- do_action('gdpr/export', $data, $dataSubject->getEmail(), $dataSubject, $format);
19
-
20
- if ('html' === $format) {
21
- $this->downloadHTML($data, $dataSubject);
22
- } elseif ('json' === $format) {
23
- $this->downloadJSON($data, $dataSubject);
24
- }
25
- }
26
-
27
- /**
28
- * Download a data subject's data in human-readable format,
29
- * formatted as a table in an HTML document unless overridden.
30
- *
31
- * @param array $data
32
- * @param DataSubject $dataSubject
33
- */
34
- protected function downloadHTML(array $data, DataSubject $dataSubject)
35
- {
36
- // Allow extensions to send a different response
37
- do_action('gdpr/export/html', $data, $dataSubject->getEmail(), $dataSubject);
38
-
39
- $filename = 'data_' . date("Y-m-d_H:i:s") . '.html';
40
-
41
- // By default, send a downloadable HTML file
42
- header("Pragma: public");
43
- header("Expires: 0");
44
- header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
45
- header("Cache-Control: private", false);
46
- header("Content-Type: text/html");
47
- header("Content-Disposition: attachment; filename=\"{$filename}\";");
48
- header("Content-Transfer-Encoding: binary");
49
-
50
- echo $this->getHtmlData($data);
51
- exit;
52
- }
53
-
54
- /**
55
- * Download a data subject's data in machine-readable format,
56
- * formatted as JSON unless overridden.
57
- *
58
- * @param array $data
59
- * @param DataSubject $dataSubject
60
- */
61
- protected function downloadJSON(array $data, DataSubject $dataSubject)
62
- {
63
- // Allow extensions to send a different response
64
- do_action('gdpr/export/json', $data, $dataSubject->getEmail(), $dataSubject);
65
-
66
- $filename = 'data_' . date("Y-m-d_H:i:s") . '.json';
67
-
68
- // By default, encode to JSON and send a JSON response
69
- header("Pragma: public");
70
- header("Expires: 0");
71
- header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
72
- header("Cache-Control: private", false);
73
- header("Content-Type: application/json");
74
- header("Content-Disposition: attachment; filename=\"{$filename}\";");
75
- header("Content-Transfer-Encoding: binary");
76
-
77
- wp_send_json($data);
78
- }
79
-
80
- protected function getHtmlData($data)
81
- {
82
- $table = $this->formatAsTable($this->maybeUnserialize($data));
83
- return gdpr('view')->render('global/html-data', compact('table'));
84
- }
85
-
86
- protected function formatAsTable(array $data, $level = 0)
87
- {
88
- $output = "<table class='level-{$level}'>";
89
- foreach ($data as $key => $value) {
90
- $output .= "<tr>";
91
-
92
- // Output key
93
- $output .= "<td class='key'>";
94
- $output .= esc_html($key);
95
- $output .= "</td>";
96
-
97
- // Output value
98
- $output .= "<td class='value'>";
99
-
100
- // Account for arrays with just one item, such as usermeta
101
- if (is_array($value) && 1 === count($value)) {
102
- $value = $value[0];
103
- }
104
-
105
- // In case of arrays, recurse
106
- if (is_array($value)) {
107
- $output .= $this->formatAsTable($value, ($level + 1));
108
- } else {
109
- $output .= esc_html($value);
110
- }
111
- $output .= "</td>";
112
-
113
- $output .= "</tr>";
114
- }
115
-
116
- $output .= "</table>";
117
- return $output;
118
- }
119
-
120
- /**
121
- * Recursively maybe unserialize data
122
- *
123
- * @param array $data
124
- * @return array
125
- */
126
- protected function maybeUnserialize(array $data)
127
- {
128
- foreach ($data as &$datum) {
129
- if (is_array($datum)) {
130
- $datum = $this->maybeUnserialize($datum);
131
- } else {
132
- $datum = maybe_unserialize($datum);
133
- }
134
- }
135
-
136
- return $data;
137
- }
138
- }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\DataSubject;
4
+
5
+ /**
6
+ * Handle formatting and downloading data subject's data.
7
+ *
8
+ * Class DataManager
9
+ *
10
+ * @package Codelight\GDPR\DataSubject
11
+ */
12
+ class DataExporter
13
+ {
14
+ public function export(array $data, DataSubject $dataSubject, $format = 'html')
15
+ {
16
+ $data = $this->maybeUnserialize($data);
17
+
18
+ do_action('gdpr/export', $data, $dataSubject->getEmail(), $dataSubject, $format);
19
+
20
+ if ('html' === $format) {
21
+ $this->downloadHTML($data, $dataSubject);
22
+ } elseif ('json' === $format) {
23
+ $this->downloadJSON($data, $dataSubject);
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Download a data subject's data in human-readable format,
29
+ * formatted as a table in an HTML document unless overridden.
30
+ *
31
+ * @param array $data
32
+ * @param DataSubject $dataSubject
33
+ */
34
+ protected function downloadHTML(array $data, DataSubject $dataSubject)
35
+ {
36
+ // Allow extensions to send a different response
37
+ do_action('gdpr/export/html', $data, $dataSubject->getEmail(), $dataSubject);
38
+
39
+ $filename = 'data_' . date("Y-m-d_H:i:s") . '.html';
40
+
41
+ // By default, send a downloadable HTML file
42
+ header("Pragma: public");
43
+ header("Expires: 0");
44
+ header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
45
+ header("Cache-Control: private", false);
46
+ header("Content-Type: text/html");
47
+ header("Content-Disposition: attachment; filename=\"{$filename}\";");
48
+ header("Content-Transfer-Encoding: binary");
49
+
50
+ echo $this->getHtmlData($data);
51
+ exit;
52
+ }
53
+
54
+ /**
55
+ * Download a data subject's data in machine-readable format,
56
+ * formatted as JSON unless overridden.
57
+ *
58
+ * @param array $data
59
+ * @param DataSubject $dataSubject
60
+ */
61
+ protected function downloadJSON(array $data, DataSubject $dataSubject)
62
+ {
63
+ // Allow extensions to send a different response
64
+ do_action('gdpr/export/json', $data, $dataSubject->getEmail(), $dataSubject);
65
+
66
+ $filename = 'data_' . date("Y-m-d_H:i:s") . '.json';
67
+
68
+ // By default, encode to JSON and send a JSON response
69
+ header("Pragma: public");
70
+ header("Expires: 0");
71
+ header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
72
+ header("Cache-Control: private", false);
73
+ header("Content-Type: application/json");
74
+ header("Content-Disposition: attachment; filename=\"{$filename}\";");
75
+ header("Content-Transfer-Encoding: binary");
76
+
77
+ wp_send_json($data);
78
+ }
79
+
80
+ protected function getHtmlData($data)
81
+ {
82
+ $table = $this->formatAsTable($this->maybeUnserialize($data));
83
+ return gdpr('view')->render('global/html-data', compact('table'));
84
+ }
85
+
86
+ protected function formatAsTable(array $data, $level = 0)
87
+ {
88
+ $output = "<table class='level-{$level}'>";
89
+ foreach ($data as $key => $value) {
90
+ $output .= "<tr>";
91
+
92
+ // Output key
93
+ $output .= "<td class='key'>";
94
+ $output .= esc_html($key);
95
+ $output .= "</td>";
96
+
97
+ // Output value
98
+ $output .= "<td class='value'>";
99
+
100
+ // Account for arrays with just one item, such as usermeta
101
+ if (is_array($value) && 1 === count($value)) {
102
+ $value = $value[0];
103
+ }
104
+
105
+ // In case of arrays, recurse
106
+ if (is_array($value)) {
107
+ $output .= $this->formatAsTable($value, ($level + 1));
108
+ } else {
109
+ $output .= esc_html($value);
110
+ }
111
+ $output .= "</td>";
112
+
113
+ $output .= "</tr>";
114
+ }
115
+
116
+ $output .= "</table>";
117
+ return $output;
118
+ }
119
+
120
+ /**
121
+ * Recursively maybe unserialize data
122
+ *
123
+ * @param array $data
124
+ * @return array
125
+ */
126
+ protected function maybeUnserialize(array $data)
127
+ {
128
+ foreach ($data as &$datum) {
129
+ if (is_array($datum)) {
130
+ $datum = $this->maybeUnserialize($datum);
131
+ } else {
132
+ $datum = maybe_unserialize($datum);
133
+ }
134
+ }
135
+
136
+ return $data;
137
+ }
138
+ }
src/DataSubject/DataRepository.php CHANGED
@@ -1,191 +1,191 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\DataSubject;
4
-
5
- /**
6
- * Class DataRepository
7
- *
8
- * @package Codelight\GDPR\DataSubject
9
- */
10
- class DataRepository
11
- {
12
- /**
13
- * DataRepository constructor.
14
- *
15
- * @param $email
16
- */
17
- public function __construct($email)
18
- {
19
- $this->email = $email;
20
- }
21
-
22
- /**
23
- * Export all stored data. Triggers 'gdpr/data-subject/data' filter.
24
- */
25
- public function getData($email)
26
- {
27
- return apply_filters('gdpr/data-subject/data', [], $email);
28
- }
29
-
30
- /**
31
- * Trigger the configured 'export' action
32
- *
33
- * @param $email
34
- * @return array|null
35
- */
36
- public function export($email, $format, $force = false)
37
- {
38
- $action = gdpr('options')->get('export_action');
39
- $data = null;
40
-
41
- if ($force) {
42
- $action = 'download';
43
- }
44
-
45
- switch($action) {
46
- case 'download':
47
- $data = $this->getData($email);
48
- break;
49
- case 'download_and_notify':
50
- $data = $this->getData($email);
51
- $this->notifyExportAction($email, $format);
52
- break;
53
- case 'notify':
54
- $this->notifyExportRequest($email, $format);
55
- break;
56
- default:
57
- $this->notifyExportRequest($email, $format);
58
- break;
59
- }
60
-
61
- return $data;
62
- }
63
-
64
- /**
65
- * Trigger the configured 'forget' action
66
- *
67
- * @param $email
68
- *
69
- * @return bool
70
- */
71
- public function forget($email, $forceAction = null)
72
- {
73
- $action = gdpr('options')->get('delete_action');
74
-
75
- if ($forceAction) {
76
- $action = $forceAction;
77
- }
78
-
79
- switch($action) {
80
- case 'delete':
81
- $this->delete($email);
82
- return true;
83
- case 'delete_and_notify':
84
- $userId = $this->delete($email);
85
- $this->notifyForgetAction($email, $userId);
86
- return true;
87
- case 'anonymize':
88
- $this->anonymize($email);
89
- return true;
90
- case 'anonymize_and_notify':
91
- $userId = $this->anonymize($email);
92
- $this->notifyForgetAction($email, $userId);
93
- return true;
94
- case 'notify':
95
- $this->notifyForgetRequest($email);
96
- return false;
97
- default:
98
- $this->notifyForgetRequest($email);
99
- return false;
100
- }
101
- }
102
-
103
- /**
104
- * @param $email
105
- */
106
- protected function anonymize($email)
107
- {
108
- $userId = null;
109
-
110
- if (email_exists($email)) {
111
- $userId = get_user_by('email', $email)->ID;
112
- }
113
-
114
- $anonymizedId = wp_generate_password(12, false);
115
- do_action('gdpr/data-subject/anonymize', $email, $anonymizedId, $userId);
116
-
117
- return $userId;
118
- }
119
-
120
- /**
121
- * @param $email
122
- */
123
- protected function delete($email)
124
- {
125
- $userId = null;
126
-
127
- if (email_exists($email)) {
128
- $userId = get_user_by('email', $email)->ID;
129
- }
130
-
131
- do_action('gdpr/data-subject/delete', $email, $userId);
132
-
133
- return $userId;
134
- }
135
-
136
- /**
137
- * @param $email
138
- */
139
- protected function notifyExportAction($email, $format)
140
- {
141
- gdpr('helpers')->mail(
142
- gdpr('options')->get('export_action_email'),
143
- __("Data exported", 'gdpr-framework'),
144
- gdpr('view')->render('email/action-export', compact('email', 'format')),
145
- ['Content-Type: text/html; charset=UTF-8']
146
- );
147
- }
148
-
149
- /**
150
- * @param $email
151
- */
152
- protected function notifyExportRequest($email, $format)
153
- {
154
- $adminTabLink = esc_url(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $email));
155
-
156
- gdpr('helpers')->mail(
157
- gdpr('options')->get('export_action_email'),
158
- __("Data export request", 'gdpr-framework'),
159
- gdpr('view')->render('email/request-export', compact('email', 'format', 'adminTabLink')),
160
- ['Content-Type: text/html; charset=UTF-8']
161
- );
162
- }
163
-
164
- /**
165
- * @param $email
166
- */
167
- protected function notifyForgetAction($email, $userId = null)
168
- {
169
- gdpr('helpers')->mail(
170
- gdpr('options')->get('delete_action_email'),
171
- __("Data removed", 'gdpr-framework'),
172
- gdpr('view')->render('email/action-forget', compact('email', 'userId')),
173
- ['Content-Type: text/html; charset=UTF-8']
174
- );
175
- }
176
-
177
- /**
178
- * @param $email
179
- */
180
- protected function notifyForgetRequest($email)
181
- {
182
- $adminTabLink = esc_url(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $email));
183
-
184
- gdpr('helpers')->mail(
185
- gdpr('options')->get('delete_action_email'),
186
- __("Data removal request", 'gdpr-framework'),
187
- gdpr('view')->render('email/request-forget', compact('email', 'adminTabLink')),
188
- ['Content-Type: text/html; charset=UTF-8']
189
- );
190
- }
191
- }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\DataSubject;
4
+
5
+ /**
6
+ * Class DataRepository
7
+ *
8
+ * @package Codelight\GDPR\DataSubject
9
+ */
10
+ class DataRepository
11
+ {
12
+ /**
13
+ * DataRepository constructor.
14
+ *
15
+ * @param $email
16
+ */
17
+ public function __construct($email)
18
+ {
19
+ $this->email = $email;
20
+ }
21
+
22
+ /**
23
+ * Export all stored data. Triggers 'gdpr/data-subject/data' filter.
24
+ */
25
+ public function getData($email)
26
+ {
27
+ return apply_filters('gdpr/data-subject/data', [], $email);
28
+ }
29
+
30
+ /**
31
+ * Trigger the configured 'export' action
32
+ *
33
+ * @param $email
34
+ * @return array|null
35
+ */
36
+ public function export($email, $format, $force = false)
37
+ {
38
+ $action = gdpr('options')->get('export_action');
39
+ $data = null;
40
+
41
+ if ($force) {
42
+ $action = 'download';
43
+ }
44
+
45
+ switch($action) {
46
+ case 'download':
47
+ $data = $this->getData($email);
48
+ break;
49
+ case 'download_and_notify':
50
+ $data = $this->getData($email);
51
+ $this->notifyExportAction($email, $format);
52
+ break;
53
+ case 'notify':
54
+ $this->notifyExportRequest($email, $format);
55
+ break;
56
+ default:
57
+ $this->notifyExportRequest($email, $format);
58
+ break;
59
+ }
60
+
61
+ return $data;
62
+ }
63
+
64
+ /**
65
+ * Trigger the configured 'forget' action
66
+ *
67
+ * @param $email
68
+ *
69
+ * @return bool
70
+ */
71
+ public function forget($email, $forceAction = null)
72
+ {
73
+ $action = gdpr('options')->get('delete_action');
74
+
75
+ if ($forceAction) {
76
+ $action = $forceAction;
77
+ }
78
+
79
+ switch($action) {
80
+ case 'delete':
81
+ $this->delete($email);
82
+ return true;
83
+ case 'delete_and_notify':
84
+ $userId = $this->delete($email);
85
+ $this->notifyForgetAction($email, $userId);
86
+ return true;
87
+ case 'anonymize':
88
+ $this->anonymize($email);
89
+ return true;
90
+ case 'anonymize_and_notify':
91
+ $userId = $this->anonymize($email);
92
+ $this->notifyForgetAction($email, $userId);
93
+ return true;
94
+ case 'notify':
95
+ $this->notifyForgetRequest($email);
96
+ return false;
97
+ default:
98
+ $this->notifyForgetRequest($email);
99
+ return false;
100
+ }
101
+ }
102
+
103
+ /**
104
+ * @param $email
105
+ */
106
+ protected function anonymize($email)
107
+ {
108
+ $userId = null;
109
+
110
+ if (email_exists($email)) {
111
+ $userId = get_user_by('email', $email)->ID;
112
+ }
113
+
114
+ $anonymizedId = wp_generate_password(12, false);
115
+ do_action('gdpr/data-subject/anonymize', $email, $anonymizedId, $userId);
116
+
117
+ return $userId;
118
+ }
119
+
120
+ /**
121
+ * @param $email
122
+ */
123
+ protected function delete($email)
124
+ {
125
+ $userId = null;
126
+
127
+ if (email_exists($email)) {
128
+ $userId = get_user_by('email', $email)->ID;
129
+ }
130
+
131
+ do_action('gdpr/data-subject/delete', $email, $userId);
132
+
133
+ return $userId;
134
+ }
135
+
136
+ /**
137
+ * @param $email
138
+ */
139
+ protected function notifyExportAction($email, $format)
140
+ {
141
+ gdpr('helpers')->mail(
142
+ gdpr('options')->get('export_action_email'),
143
+ __("Data exported", 'gdpr-framework'),
144
+ gdpr('view')->render('email/action-export', compact('email', 'format')),
145
+ ['Content-Type: text/html; charset=UTF-8']
146
+ );
147
+ }
148
+
149
+ /**
150
+ * @param $email
151
+ */
152
+ protected function notifyExportRequest($email, $format)
153
+ {
154
+ $adminTabLink = esc_url(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $email));
155
+
156
+ gdpr('helpers')->mail(
157
+ gdpr('options')->get('export_action_email'),
158
+ __("Data export request", 'gdpr-framework'),
159
+ gdpr('view')->render('email/request-export', compact('email', 'format', 'adminTabLink')),
160
+ ['Content-Type: text/html; charset=UTF-8']
161
+ );
162
+ }
163
+
164
+ /**
165
+ * @param $email
166
+ */
167
+ protected function notifyForgetAction($email, $userId = null)
168
+ {
169
+ gdpr('helpers')->mail(
170
+ gdpr('options')->get('delete_action_email'),
171
+ __("Data removed", 'gdpr-framework'),
172
+ gdpr('view')->render('email/action-forget', compact('email', 'userId')),
173
+ ['Content-Type: text/html; charset=UTF-8']
174
+ );
175
+ }
176
+
177
+ /**
178
+ * @param $email
179
+ */
180
+ protected function notifyForgetRequest($email)
181
+ {
182
+ $adminTabLink = esc_url(gdpr('helpers')->getAdminUrl('&gdpr-tab=data-subject&search=' . $email));
183
+
184
+ gdpr('helpers')->mail(
185
+ gdpr('options')->get('delete_action_email'),
186
+ __("Data removal request", 'gdpr-framework'),
187
+ gdpr('view')->render('email/request-forget', compact('email', 'adminTabLink')),
188
+ ['Content-Type: text/html; charset=UTF-8']
189
+ );
190
+ }
191
+ }
src/DataSubject/DataSubject.php CHANGED
@@ -1,175 +1,175 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\DataSubject;
4
-
5
- use Codelight\GDPR\Components\Consent\ConsentManager;
6
-
7
- /**
8
- * A data subject is any person whose data we are storing.
9
- * A data subject might or might not have a user account on this site.
10
- *
11
- * Class DataSubject
12
- *
13
- * @package Codelight\GDPR\DataSubject
14
- */
15
- class DataSubject
16
- {
17
- /* @var string */
18
- protected $email;
19
-
20
- /* @var \WP_User|null */
21
- protected $user = null;
22
-
23
- /* @var ConsentManager */
24
- protected $consentManager;
25
-
26
- /* @var array */
27
- protected $consents = [];
28
-
29
- /**
30
- * DataSubject constructor.
31
- *
32
- * @param $email
33
- * @param \WP_User|null $user
34
- */
35
- public function __construct($email, \WP_User $user = null, ConsentManager $consentManager)
36
- {
37
- $this->email = $email;
38
- $this->user = $user;
39
- $this->consentManager = $consentManager;
40
- $this->dataRepository = new DataRepository($email);
41
-
42
- $this->consents = $this->consentManager->getAllConsents($this->email);
43
- }
44
-
45
- /**
46
- * @return string
47
- */
48
- public function getEmail()
49
- {
50
- return $this->email;
51
- }
52
-
53
- /**
54
- * @return bool
55
- */
56
- public function hasUser()
57
- {
58
- return $this->getUser() ? true : false;
59
- }
60
-
61
- /**
62
- * @return null|\WP_User
63
- */
64
- public function getUser()
65
- {
66
- return $this->user;
67
- }
68
-
69
- /**
70
- * @return int|null
71
- */
72
- public function getUserId()
73
- {
74
- if ($this->hasUser()) {
75
- return $this->getUser()->ID;
76
- }
77
-
78
- return null;
79
- }
80
-
81
- /**
82
- * Check if the data subject has consented to something specific
83
- */
84
- public function hasConsented($consent)
85
- {
86
- return in_array($consent, $this->consents);
87
- }
88
-
89
- /**
90
- * Get all consent given by the data subject
91
- */
92
- public function getConsents()
93
- {
94
- return $this->consents;
95
- }
96
-
97
- /**
98
- * Get a list of all consents intersected with the data subjects consents
99
- */
100
- public function getConsentData()
101
- {
102
- return $this->consentManager->getConsentData($this->consents);
103
- }
104
-
105
- /**
106
- * Get a list of all visible consents
107
- */
108
- public function getVisibleConsentData()
109
- {
110
- return array_filter($this->getConsentData(), function ($item) {
111
- return $item['visible'];
112
- });
113
- }
114
-
115
- /**
116
- * Save given consent to data subject
117
- *
118
- * @param $consent
119
- */
120
- public function giveConsent($consent)
121
- {
122
- $this->consentManager->giveConsent($this->email, $consent);
123
- }
124
-
125
- /**
126
- * Remove given consent from data subject
127
- *
128
- * @param $consent
129
- */
130
- public function withdrawConsent($consent)
131
- {
132
- $this->consentManager->withdrawConsent($this->email, $consent);
133
- }
134
-
135
- /**
136
- * Check if there's any data stored about this data subject at all
137
- */
138
- public function hasData()
139
- {
140
- return !empty($this->getData());
141
- }
142
-
143
- /**
144
- * Just get the data subjects data, without sending emails or anything.
145
- * Applies 'gdpr/data-subject/data' filter.
146
- *
147
- * @return array
148
- */
149
- public function getData()
150
- {
151
- return $this->dataRepository->getData($this->getEmail());
152
- }
153
-
154
- /**
155
- * Export the data subject's data as per admin configuration.
156
- * Applies 'gdpr/data-subject/data' filter.
157
- *
158
- * @return array|null
159
- */
160
- public function export($format, $force = false)
161
- {
162
- return $this->dataRepository->export($this->getEmail(), $format, $force);
163
- }
164
-
165
- /**
166
- * Forget the data subject as per admin configuration.
167
- * Triggers 'gdpr/data-subject/anonymize' or 'gdpr/data-subject/delete' action.
168
- *
169
- * @return bool
170
- */
171
- public function forget($forceAction = null)
172
- {
173
- return $this->dataRepository->forget($this->getEmail(), $forceAction);
174
- }
175
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\DataSubject;
4
+
5
+ use Codelight\GDPR\Components\Consent\ConsentManager;
6
+
7
+ /**
8
+ * A data subject is any person whose data we are storing.
9
+ * A data subject might or might not have a user account on this site.
10
+ *
11
+ * Class DataSubject
12
+ *
13
+ * @package Codelight\GDPR\DataSubject
14
+ */
15
+ class DataSubject
16
+ {
17
+ /* @var string */
18
+ protected $email;
19
+
20
+ /* @var \WP_User|null */
21
+ protected $user = null;
22
+
23
+ /* @var ConsentManager */
24
+ protected $consentManager;
25
+
26
+ /* @var array */
27
+ protected $consents = [];
28
+
29
+ /**
30
+ * DataSubject constructor.
31
+ *
32
+ * @param $email
33
+ * @param \WP_User|null $user
34
+ */
35
+ public function __construct($email, \WP_User $user = null, ConsentManager $consentManager)
36
+ {
37
+ $this->email = $email;
38
+ $this->user = $user;
39
+ $this->consentManager = $consentManager;
40
+ $this->dataRepository = new DataRepository($email);
41
+
42
+ $this->consents = $this->consentManager->getAllConsents($this->email);
43
+ }
44
+
45
+ /**
46
+ * @return string
47
+ */
48
+ public function getEmail()
49
+ {
50
+ return $this->email;
51
+ }
52
+
53
+ /**
54
+ * @return bool
55
+ */
56
+ public function hasUser()
57
+ {
58
+ return $this->getUser() ? true : false;
59
+ }
60
+
61
+ /**
62
+ * @return null|\WP_User
63
+ */
64
+ public function getUser()
65
+ {
66
+ return $this->user;
67
+ }
68
+
69
+ /**
70
+ * @return int|null
71
+ */
72
+ public function getUserId()
73
+ {
74
+ if ($this->hasUser()) {
75
+ return $this->getUser()->ID;
76
+ }
77
+
78
+ return null;
79
+ }
80
+
81
+ /**
82
+ * Check if the data subject has consented to something specific
83
+ */
84
+ public function hasConsented($consent)
85
+ {
86
+ return in_array($consent, $this->consents);
87
+ }
88
+
89
+ /**
90
+ * Get all consent given by the data subject
91
+ */
92
+ public function getConsents()
93
+ {
94
+ return $this->consents;
95
+ }
96
+
97
+ /**
98
+ * Get a list of all consents intersected with the data subjects consents
99
+ */
100
+ public function getConsentData()
101
+ {
102
+ return $this->consentManager->getConsentData($this->consents);
103
+ }
104
+
105
+ /**
106
+ * Get a list of all visible consents
107
+ */
108
+ public function getVisibleConsentData()
109
+ {
110
+ return array_filter($this->getConsentData(), function ($item) {
111
+ return $item['visible'];
112
+ });
113
+ }
114
+
115
+ /**
116
+ * Save given consent to data subject
117
+ *
118
+ * @param $consent
119
+ */
120
+ public function giveConsent($consent)
121
+ {
122
+ $this->consentManager->giveConsent($this->email, $consent);
123
+ }
124
+
125
+ /**
126
+ * Remove given consent from data subject
127
+ *
128
+ * @param $consent
129
+ */
130
+ public function withdrawConsent($consent)
131
+ {
132
+ $this->consentManager->withdrawConsent($this->email, $consent);
133
+ }
134
+
135
+ /**
136
+ * Check if there's any data stored about this data subject at all
137
+ */
138
+ public function hasData()
139
+ {
140
+ return !empty($this->getData());
141
+ }
142
+
143
+ /**
144
+ * Just get the data subjects data, without sending emails or anything.
145
+ * Applies 'gdpr/data-subject/data' filter.
146
+ *
147
+ * @return array
148
+ */
149
+ public function getData()
150
+ {
151
+ return $this->dataRepository->getData($this->getEmail());
152
+ }
153
+
154
+ /**
155
+ * Export the data subject's data as per admin configuration.
156
+ * Applies 'gdpr/data-subject/data' filter.
157
+ *
158
+ * @return array|null
159
+ */
160
+ public function export($format, $force = false)
161
+ {
162
+ return $this->dataRepository->export($this->getEmail(), $format, $force);
163
+ }
164
+
165
+ /**
166
+ * Forget the data subject as per admin configuration.
167
+ * Triggers 'gdpr/data-subject/anonymize' or 'gdpr/data-subject/delete' action.
168
+ *
169
+ * @return bool
170
+ */
171
+ public function forget($forceAction = null)
172
+ {
173
+ return $this->dataRepository->forget($this->getEmail(), $forceAction);
174
+ }
175
  }
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/DataSubject/DataSubjectManager.php CHANGED
@@ -1,80 +1,80 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\DataSubject;
4
-
5
- use Codelight\GDPR\Components\Consent\ConsentManager;
6
-
7
- /**
8
- * Handles finding data subjects by ID or email
9
- *
10
- * Class DataSubjectManager
11
- *
12
- * @package Codelight\GDPR\DataSubject
13
- */
14
- class DataSubjectManager
15
- {
16
- /* @var ConsentManager */
17
- protected $consentManager;
18
-
19
- /**
20
- * DataSubjectManager constructor.
21
- *
22
- * @param ConsentManager $consentManager
23
- */
24
- public function __construct(ConsentManager $consentManager)
25
- {
26
- $this->consentManager = $consentManager;
27
- }
28
-
29
- /**
30
- * @param $email
31
- * @return DataSubject
32
- */
33
- public function getByEmail($email)
34
- {
35
- $user = get_user_by('email', $email);
36
-
37
- return gdpr()->makeWith(
38
- DataSubject::class,
39
- [
40
- 'email' => $email,
41
- 'user' => $user ? $user : null,
42
- 'consentManager' => $this->consentManager,
43
- ]
44
- );
45
- }
46
-
47
- /**
48
- * @param $id
49
- * @return DataSubject|false
50
- */
51
- public function getById($id)
52
- {
53
- $user = get_user_by('id', $id);
54
-
55
- if (!$user) {
56
- return false;
57
- }
58
-
59
- return gdpr()->makeWith(
60
- DataSubject::class,
61
- [
62
- 'email' => $user->user_email,
63
- 'user' => $user,
64
- 'consentManager' => $this->consentManager,
65
- ]
66
- );
67
- }
68
-
69
- /**
70
- * @return bool|DataSubject
71
- */
72
- public function getByLoggedInUser()
73
- {
74
- if (!is_user_logged_in()) {
75
- return false;
76
- }
77
-
78
- return $this->getById(get_current_user_id());
79
- }
80
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\DataSubject;
4
+
5
+ use Codelight\GDPR\Components\Consent\ConsentManager;
6
+
7
+ /**
8
+ * Handles finding data subjects by ID or email
9
+ *
10
+ * Class DataSubjectManager
11
+ *
12
+ * @package Codelight\GDPR\DataSubject
13
+ */
14
+ class DataSubjectManager
15
+ {
16
+ /* @var ConsentManager */
17
+ protected $consentManager;
18
+
19
+ /**
20
+ * DataSubjectManager constructor.
21
+ *
22
+ * @param ConsentManager $consentManager
23
+ */
24
+ public function __construct(ConsentManager $consentManager)
25
+ {
26
+ $this->consentManager = $consentManager;
27
+ }
28
+
29
+ /**
30
+ * @param $email
31
+ * @return DataSubject
32
+ */
33
+ public function getByEmail($email)
34
+ {
35
+ $user = get_user_by('email', $email);
36
+
37
+ return gdpr()->makeWith(
38
+ DataSubject::class,
39
+ [
40
+ 'email' => $email,
41
+ 'user' => $user ? $user : null,
42
+ 'consentManager' => $this->consentManager,
43
+ ]
44
+ );
45
+ }
46
+
47
+ /**
48
+ * @param $id
49
+ * @return DataSubject|false
50
+ */
51
+ public function getById($id)
52
+ {
53
+ $user = get_user_by('id', $id);
54
+
55
+ if (!$user) {
56
+ return false;
57
+ }
58
+
59
+ return gdpr()->makeWith(
60
+ DataSubject::class,
61
+ [
62
+ 'email' => $user->user_email,
63
+ 'user' => $user,
64
+ 'consentManager' => $this->consentManager,
65
+ ]
66
+ );
67
+ }
68
+
69
+ /**
70
+ * @return bool|DataSubject
71
+ */
72
+ public function getByLoggedInUser()
73
+ {
74
+ if (!is_user_logged_in()) {
75
+ return false;
76
+ }
77
+
78
+ return $this->getById(get_current_user_id());
79
+ }
80
  }
src/Database/WordpressDatabase.php CHANGED
@@ -1,266 +1,266 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Database;
4
-
5
- if (!defined('ABSPATH')) {
6
- exit;
7
- }
8
-
9
- /**
10
- * DB base class
11
- * https://pippinsplugins.com/custom-database-api-the-basic-api-class/
12
- */
13
- abstract class WordpressDatabase
14
- {
15
-
16
- /**
17
- * The name of our database table
18
- *
19
- * @access public
20
- * @since 2.1
21
- */
22
- public $tableName;
23
-
24
- /**
25
- * The version of our database table
26
- *
27
- * @access public
28
- * @since 2.1
29
- */
30
- public $version;
31
-
32
- /**
33
- * The name of the primary column
34
- *
35
- * @access public
36
- * @since 2.1
37
- */
38
- public $primaryKey;
39
-
40
- /**
41
- * Get things started
42
- *
43
- * @access public
44
- * @since 2.1
45
- */
46
- public function __construct()
47
- {
48
- }
49
-
50
- /**
51
- * Whitelist of columns
52
- *
53
- * @access public
54
- * @since 2.1
55
- * @return array
56
- */
57
- public function getColumns()
58
- {
59
- return [];
60
- }
61
-
62
- /**
63
- * Default column values
64
- *
65
- * @access public
66
- * @since 2.1
67
- * @return array
68
- */
69
- public function getColumnDefaults()
70
- {
71
- return [];
72
- }
73
-
74
- /**
75
- * Retrieve a row by the primary key
76
- *
77
- * @access public
78
- * @since 2.1
79
- * @return object
80
- */
81
- public function get($row_id)
82
- {
83
- global $wpdb;
84
-
85
- return $wpdb->get_row($wpdb->prepare(
86
- "SELECT * FROM $this->tableName WHERE $this->primary_key = %s LIMIT 1;", $row_id
87
- ));
88
- }
89
-
90
- /**
91
- * Retrieve a row by a specific column / value
92
- *
93
- * @access public
94
- * @since 2.1
95
- * @return object
96
- */
97
- public function getBy($column, $row_id)
98
- {
99
- global $wpdb;
100
- $column = esc_sql($column);
101
-
102
- return $wpdb->get_row($wpdb->prepare(
103
- "SELECT * FROM $this->tableName WHERE $column = %s LIMIT 1;", $row_id
104
- ));
105
- }
106
-
107
- /**
108
- * Retrieve a specific column's value by the primary key
109
- *
110
- * @access public
111
- * @since 2.1
112
- * @return string
113
- */
114
- public function getColumn($column, $row_id)
115
- {
116
- global $wpdb;
117
- $column = esc_sql($column);
118
-
119
- return $wpdb->get_var($wpdb->prepare(
120
- "SELECT $column FROM $this->tableName WHERE $this->primary_key = %s LIMIT 1;", $row_id
121
- ));
122
- }
123
-
124
- /**
125
- * Retrieve a specific column's value by the the specified column / value
126
- *
127
- * @access public
128
- * @since 2.1
129
- * @return string
130
- */
131
- public function getColumnBy($column, $column_where, $column_value)
132
- {
133
- global $wpdb;
134
- $column_where = esc_sql($column_where);
135
- $column = esc_sql($column);
136
-
137
- return $wpdb->get_var($wpdb->prepare(
138
- "SELECT $column FROM $this->tableName WHERE $column_where = %s LIMIT 1;", $column_value
139
- ));
140
- }
141
-
142
- /**
143
- * Insert a new row
144
- *
145
- * @access public
146
- * @since 2.1
147
- * @return int
148
- */
149
- public function insert($data, $type = '')
150
- {
151
- global $wpdb;
152
-
153
- // Set default values
154
- $data = wp_parse_args($data, $this->getColumnDefaults());
155
-
156
- do_action('bs_db_pre_insert_' . $type, $data);
157
-
158
- // Initialise column format array
159
- $columnFormats = $this->getColumns();
160
-
161
- // Force fields to lower case
162
- $data = array_change_key_case($data);
163
-
164
- // White list columns
165
- $data = array_intersect_key($data, $columnFormats);
166
-
167
- // Reorder $columnFormats to match the order of columns given in $data
168
- $data_keys = array_keys($data);
169
- $columnFormats = array_merge(array_flip($data_keys), $columnFormats);
170
-
171
- $wpdb->insert($this->tableName, $data, $columnFormats);
172
-
173
- do_action('bs_db_post_insert_' . $type, $wpdb->insert_id, $data);
174
-
175
- return $wpdb->insert_id;
176
- }
177
-
178
- /**
179
- * Update a row
180
- *
181
- * @access public
182
- * @since 2.1
183
- * @return bool
184
- */
185
- public function update($row_id, $data = [], $where = '')
186
- {
187
- global $wpdb;
188
-
189
- // Row ID must be positive integer
190
- $row_id = absint($row_id);
191
-
192
- if (empty($row_id)) {
193
- return false;
194
- }
195
-
196
- if (empty($where)) {
197
- $where = $this->primaryKey;
198
- }
199
-
200
- // Initialise column format array
201
- $columnFormats = $this->getColumns();
202
-
203
- // Force fields to lower case
204
- $data = array_change_key_case($data);
205
-
206
- // White list columns
207
- $data = array_intersect_key($data, $columnFormats);
208
-
209
- // Reorder $columnFormats to match the order of columns given in $data
210
- $data_keys = array_keys($data);
211
- $columnFormats = array_merge(array_flip($data_keys), $columnFormats);
212
-
213
- if (false === $wpdb->update($this->tableName, $data, [$where => $row_id], $columnFormats)) {
214
- return false;
215
- }
216
-
217
- return true;
218
- }
219
-
220
-
221
- /**
222
- * Delete a row identified by the primary key
223
- *
224
- * @access public
225
- * @since 2.1
226
- * @return bool
227
- */
228
- public function delete($row_id = 0)
229
- {
230
- global $wpdb;
231
-
232
- // Row ID must be positive integer
233
- $row_id = absint($row_id);
234
-
235
- if (empty($row_id)) {
236
- return false;
237
- }
238
-
239
- if (false === $wpdb->query($wpdb->prepare(
240
- "DELETE FROM $this->tableName WHERE $this->primary_key = %d", $row_id
241
- ))) {
242
- return false;
243
- }
244
-
245
- return true;
246
- }
247
-
248
- /**
249
- * Check if the given table exists
250
- *
251
- * @since 2.4
252
- * @param string $table The table name
253
- * @return bool If the table name exists
254
- */
255
- public function tableExists($table)
256
- {
257
- global $wpdb;
258
- $table = sanitize_text_field($table);
259
-
260
- return $wpdb->get_var($wpdb->prepare(
261
- "SHOW TABLES LIKE '%s'", $table
262
- )) === $table;
263
- }
264
-
265
-
266
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Database;
4
+
5
+ if (!defined('ABSPATH')) {
6
+ exit;
7
+ }
8
+
9
+ /**
10
+ * DB base class
11
+ * https://pippinsplugins.com/custom-database-api-the-basic-api-class/
12
+ */
13
+ abstract class WordpressDatabase
14
+ {
15
+
16
+ /**
17
+ * The name of our database table
18
+ *
19
+ * @access public
20
+ * @since 2.1
21
+ */
22
+ public $tableName;
23
+
24
+ /**
25
+ * The version of our database table
26
+ *
27
+ * @access public
28
+ * @since 2.1
29
+ */
30
+ public $version;
31
+
32
+ /**
33
+ * The name of the primary column
34
+ *
35
+ * @access public
36
+ * @since 2.1
37
+ */
38
+ public $primaryKey;
39
+
40
+ /**
41
+ * Get things started
42
+ *
43
+ * @access public
44
+ * @since 2.1
45
+ */
46
+ public function __construct()
47
+ {
48
+ }
49
+
50
+ /**
51
+ * Whitelist of columns
52
+ *
53
+ * @access public
54
+ * @since 2.1
55
+ * @return array
56
+ */
57
+ public function getColumns()
58
+ {
59
+ return [];
60
+ }
61
+
62
+ /**
63
+ * Default column values
64
+ *
65
+ * @access public
66
+ * @since 2.1
67
+ * @return array
68
+ */
69
+ public function getColumnDefaults()
70
+ {
71
+ return [];
72
+ }
73
+
74
+ /**
75
+ * Retrieve a row by the primary key
76
+ *
77
+ * @access public
78
+ * @since 2.1
79
+ * @return object
80
+ */
81
+ public function get($row_id)
82
+ {
83
+ global $wpdb;
84
+
85
+ return $wpdb->get_row($wpdb->prepare(
86
+ "SELECT * FROM $this->tableName WHERE $this->primary_key = %s LIMIT 1;", $row_id
87
+ ));
88
+ }
89
+
90
+ /**
91
+ * Retrieve a row by a specific column / value
92
+ *
93
+ * @access public
94
+ * @since 2.1
95
+ * @return object
96
+ */
97
+ public function getBy($column, $row_id)
98
+ {
99
+ global $wpdb;
100
+ $column = esc_sql($column);
101
+
102
+ return $wpdb->get_row($wpdb->prepare(
103
+ "SELECT * FROM $this->tableName WHERE $column = %s LIMIT 1;", $row_id
104
+ ));
105
+ }
106
+
107
+ /**
108
+ * Retrieve a specific column's value by the primary key
109
+ *
110
+ * @access public
111
+ * @since 2.1
112
+ * @return string
113
+ */
114
+ public function getColumn($column, $row_id)
115
+ {
116
+ global $wpdb;
117
+ $column = esc_sql($column);
118
+
119
+ return $wpdb->get_var($wpdb->prepare(
120
+ "SELECT $column FROM $this->tableName WHERE $this->primary_key = %s LIMIT 1;", $row_id
121
+ ));
122
+ }
123
+
124
+ /**
125
+ * Retrieve a specific column's value by the the specified column / value
126
+ *
127
+ * @access public
128
+ * @since 2.1
129
+ * @return string
130
+ */
131
+ public function getColumnBy($column, $column_where, $column_value)
132
+ {
133
+ global $wpdb;
134
+ $column_where = esc_sql($column_where);
135
+ $column = esc_sql($column);
136
+
137
+ return $wpdb->get_var($wpdb->prepare(
138
+ "SELECT $column FROM $this->tableName WHERE $column_where = %s LIMIT 1;", $column_value
139
+ ));
140
+ }
141
+
142
+ /**
143
+ * Insert a new row
144
+ *
145
+ * @access public
146
+ * @since 2.1
147
+ * @return int
148
+ */
149
+ public function insert($data, $type = '')
150
+ {
151
+ global $wpdb;
152
+
153
+ // Set default values
154
+ $data = wp_parse_args($data, $this->getColumnDefaults());
155
+
156
+ do_action('bs_db_pre_insert_' . $type, $data);
157
+
158
+ // Initialise column format array
159
+ $columnFormats = $this->getColumns();
160
+
161
+ // Force fields to lower case
162
+ $data = array_change_key_case($data);
163
+
164
+ // White list columns
165
+ $data = array_intersect_key($data, $columnFormats);
166
+
167
+ // Reorder $columnFormats to match the order of columns given in $data
168
+ $data_keys = array_keys($data);
169
+ $columnFormats = array_merge(array_flip($data_keys), $columnFormats);
170
+
171
+ $wpdb->insert($this->tableName, $data, $columnFormats);
172
+
173
+ do_action('bs_db_post_insert_' . $type, $wpdb->insert_id, $data);
174
+
175
+ return $wpdb->insert_id;
176
+ }
177
+
178
+ /**
179
+ * Update a row
180
+ *
181
+ * @access public
182
+ * @since 2.1
183
+ * @return bool
184
+ */
185
+ public function update($row_id, $data = [], $where = '')
186
+ {
187
+ global $wpdb;
188
+
189
+ // Row ID must be positive integer
190
+ $row_id = absint($row_id);
191
+
192
+ if (empty($row_id)) {
193
+ return false;
194
+ }
195
+
196
+ if (empty($where)) {
197
+ $where = $this->primaryKey;
198
+ }
199
+
200
+ // Initialise column format array
201
+ $columnFormats = $this->getColumns();
202
+
203
+ // Force fields to lower case
204
+ $data = array_change_key_case($data);
205
+
206
+ // White list columns
207
+ $data = array_intersect_key($data, $columnFormats);
208
+
209
+ // Reorder $columnFormats to match the order of columns given in $data
210
+ $data_keys = array_keys($data);
211
+ $columnFormats = array_merge(array_flip($data_keys), $columnFormats);
212
+
213
+ if (false === $wpdb->update($this->tableName, $data, [$where => $row_id], $columnFormats)) {
214
+ return false;
215
+ }
216
+
217
+ return true;
218
+ }
219
+
220
+
221
+ /**
222
+ * Delete a row identified by the primary key
223
+ *
224
+ * @access public
225
+ * @since 2.1
226
+ * @return bool
227
+ */
228
+ public function delete($row_id = 0)
229
+ {
230
+ global $wpdb;
231
+
232
+ // Row ID must be positive integer
233
+ $row_id = absint($row_id);
234
+
235
+ if (empty($row_id)) {
236
+ return false;
237
+ }
238
+
239
+ if (false === $wpdb->query($wpdb->prepare(
240
+ "DELETE FROM $this->tableName WHERE $this->primary_key = %d", $row_id
241
+ ))) {
242
+ return false;
243
+ }
244
+
245
+ return true;
246
+ }
247
+
248
+ /**
249
+ * Check if the given table exists
250
+ *
251
+ * @since 2.4
252
+ * @param string $table The table name
253
+ * @return bool If the table name exists
254
+ */
255
+ public function tableExists($table)
256
+ {
257
+ global $wpdb;
258
+ $table = sanitize_text_field($table);
259
+
260
+ return $wpdb->get_var($wpdb->prepare(
261
+ "SHOW TABLES LIKE '%s'", $table
262
+ )) === $table;
263
+ }
264
+
265
+
266
  }
src/Helpers.php CHANGED
@@ -1,170 +1,388 @@
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
+ // All country list
56
+ 'AF' => _x('Afghanistan ', '(Admin)', 'gdpr-framework'),
57
+ 'AX' => _x('Åland Islands', '(Admin)', 'gdpr-framework'),
58
+ 'AL' => _x('Albania', '(Admin)', 'gdpr-framework'),
59
+ 'DZ' => _x('Algeria', '(Admin)', 'gdpr-framework'),
60
+ 'AS' => _x('American Samoa ', '(Admin)', 'gdpr-framework'),
61
+ 'AD' => _x('Andorra', '(Admin)', 'gdpr-framework'),
62
+ 'AO' => _x('Angola', '(Admin)', 'gdpr-framework'),
63
+ 'AI' => _x('Anguilla', '(Admin)', 'gdpr-framework'),
64
+ 'AQ' => _x('Antarctica', '(Admin)', 'gdpr-framework'),
65
+ 'AG' => _x('Antigua and Barbuda', '(Admin)', 'gdpr-framework'),
66
+ 'AR' => _x('Argentina', '(Admin)', 'gdpr-framework'),
67
+ 'AM' => _x('Armenia', '(Admin)', 'gdpr-framework'),
68
+ 'AW' => _x('Aruba', '(Admin)', 'gdpr-framework'),
69
+ 'AU' => _x('Australia', '(Admin)', 'gdpr-framework'),
70
+ 'AZ' => _x('Azerbaijan', '(Admin)', 'gdpr-framework'),
71
+ 'BH' => _x('Bahrain', '(Admin)', 'gdpr-framework'),
72
+ 'BS' => _x('Bahamas', '(Admin)', 'gdpr-framework'),
73
+ 'BD' => _x('Bangladesh', '(Admin)', 'gdpr-framework'),
74
+ 'BB' => _x('Barbados', '(Admin)', 'gdpr-framework'),
75
+ 'BY' => _x('Belarus', '(Admin)', 'gdpr-framework'),
76
+ 'BZ' => _x('Belize', '(Admin)', 'gdpr-framework'),
77
+ 'BJ' => _x('Benin', '(Admin)', 'gdpr-framework'),
78
+ 'BM' => _x('Bermuda', '(Admin)', 'gdpr-framework'),
79
+ 'BT' => _x('Bhutan', '(Admin)', 'gdpr-framework'),
80
+ 'BO' => _x('Bolivia, Plurinational State of', '(Admin)', 'gdpr-framework'),
81
+ 'BQ' => _x('Bonaire, Sint Eustatius and Saba', '(Admin)', 'gdpr-framework'),
82
+ 'BA' => _x('Bosnia and Herzegovina', '(Admin)', 'gdpr-framework'),
83
+ 'BW' => _x('Botswana', '(Admin)', 'gdpr-framework'),
84
+ 'BV' => _x('Bouvet Island', '(Admin)', 'gdpr-framework'),
85
+ 'BR' => _x('Brazil', '(Admin)', 'gdpr-framework'),
86
+ 'IO' => _x('British Indian Ocean Territory', '(Admin)', 'gdpr-framework'),
87
+ 'BN' => _x('Brunei Darussalam', '(Admin)', 'gdpr-framework'),
88
+ 'BF' => _x('Burkina Faso', '(Admin)', 'gdpr-framework'),
89
+ 'BI' => _x('Burundi', '(Admin)', 'gdpr-framework'),
90
+ 'KH' => _x('Cambodia', '(Admin)', 'gdpr-framework'),
91
+ 'CM' => _x('Cameroon', '(Admin)', 'gdpr-framework'),
92
+ 'CA' => _x('Canada', '(Admin)', 'gdpr-framework'),
93
+ 'CV' => _x('Cape Verde', '(Admin)', 'gdpr-framework'),
94
+ 'KY' => _x('Cayman Islands', '(Admin)', 'gdpr-framework'),
95
+ 'CF' => _x('Central African Republic', '(Admin)', 'gdpr-framework'),
96
+ 'TD' => _x('Chad', '(Admin)', 'gdpr-framework'),
97
+ 'CL' => _x('Chile', '(Admin)', 'gdpr-framework'),
98
+ 'CN' => _x('China', '(Admin)', 'gdpr-framework'),
99
+ 'CX' => _x('Christmas Island', '(Admin)', 'gdpr-framework'),
100
+ 'CC' => _x('Cocos (Keeling) Islands', '(Admin)', 'gdpr-framework'),
101
+ 'CO' => _x('Colombia', '(Admin)', 'gdpr-framework'),
102
+ 'KM' => _x('Comoros', '(Admin)', 'gdpr-framework'),
103
+ 'CG' => _x('Congo', '(Admin)', 'gdpr-framework'),
104
+ 'CD' => _x('Congo, the Democratic Republic of the', '(Admin)', 'gdpr-framework'),
105
+ 'CK' => _x('Cook Islands', '(Admin)', 'gdpr-framework'),
106
+ 'CR' => _x('Costa Rica', '(Admin)', 'gdpr-framework'),
107
+ 'CI' => _x('Côte dIvoire', '(Admin)', 'gdpr-framework'),
108
+ 'CU' => _x('Cuba', '(Admin)', 'gdpr-framework'),
109
+ 'CW' => _x('Curaçao', '(Admin)', 'gdpr-framework'),
110
+ 'DJ' => _x('Djibouti', '(Admin)', 'gdpr-framework'),
111
+ 'DM' => _x('Dominica', '(Admin)', 'gdpr-framework'),
112
+ 'DO' => _x('Dominican Republic', '(Admin)', 'gdpr-framework'),
113
+ 'EC' => _x('Ecuador', '(Admin)', 'gdpr-framework'),
114
+ 'EG' => _x('Egypt', '(Admin)', 'gdpr-framework'),
115
+ 'SV' => _x('El Salvador', '(Admin)', 'gdpr-framework'),
116
+ 'GQ' => _x('Equatorial Guinea', '(Admin)', 'gdpr-framework'),
117
+ 'ER' => _x('Eritrea', '(Admin)', 'gdpr-framework'),
118
+ 'ET' => _x('Ethiopia', '(Admin)', 'gdpr-framework'),
119
+ 'FK' => _x('Falkland Islands (Malvinas)', '(Admin)', 'gdpr-framework'),
120
+ 'FO' => _x('Faroe Islands', '(Admin)', 'gdpr-framework'),
121
+ 'FJ' => _x('Fiji', '(Admin)', 'gdpr-framework'),
122
+ 'GF' => _x('French Guiana', '(Admin)', 'gdpr-framework'),
123
+ 'PF' => _x('French Polynesia', '(Admin)', 'gdpr-framework'),
124
+ 'TF' => _x('French Southern Territories', '(Admin)', 'gdpr-framework'),
125
+ 'GA' => _x('Gabon', '(Admin)', 'gdpr-framework'),
126
+ 'GM' => _x('Gambia', '(Admin)', 'gdpr-framework'),
127
+ 'GE' => _x('Georgia', '(Admin)', 'gdpr-framework'),
128
+ 'GE' => _x('Georgia ', '(Admin)', 'gdpr-framework'),
129
+ 'GH' => _x('Ghana', '(Admin)', 'gdpr-framework'),
130
+ 'GI' => _x('Gibraltar', '(Admin)', 'gdpr-framework'),
131
+ 'GL' => _x('Greenland', '(Admin)', 'gdpr-framework'),
132
+ 'GD' => _x('Grenada ', '(Admin)', 'gdpr-framework'),
133
+ 'GP' => _x('Guadeloupe ', '(Admin)', 'gdpr-framework'),
134
+ 'GU' => _x('Guam', '(Admin)', 'gdpr-framework'),
135
+ 'GT' => _x('Guatemala', '(Admin)', 'gdpr-framework'),
136
+ 'GG' => _x('Guernsey', '(Admin)', 'gdpr-framework'),
137
+ 'GN' => _x('Guinea ', '(Admin)', 'gdpr-framework'),
138
+ 'GW' => _x('Guinea-Bissau ', '(Admin)', 'gdpr-framework'),
139
+ 'GY' => _x('Guyana ', '(Admin)', 'gdpr-framework'),
140
+ 'HT' => _x('Haiti ', '(Admin)', 'gdpr-framework'),
141
+ 'HM' => _x('Heard Island and McDonald Islands ', '(Admin)', 'gdpr-framework'),
142
+ 'VA' => _x('Holy See (Vatican City State) ', '(Admin)', 'gdpr-framework'),
143
+ 'HN' => _x('Honduras ', '(Admin)', 'gdpr-framework'),
144
+ 'HK' => _x('Hong Kong ', '(Admin)', 'gdpr-framework'),
145
+ 'IN' => _x('India ', '(Admin)', 'gdpr-framework'),
146
+ 'ID' => _x('Indonesia ', '(Admin)', 'gdpr-framework'),
147
+ 'IR' => _x('Iran, Islamic Republic of ', '(Admin)', 'gdpr-framework'),
148
+ 'IQ' => _x('Iraq ', '(Admin)', 'gdpr-framework'),
149
+ 'IM' => _x('Isle of Man ', '(Admin)', 'gdpr-framework'),
150
+ 'IL' => _x('Israel ', '(Admin)', 'gdpr-framework'),
151
+ 'JM' => _x('Jamaica ', '(Admin)', 'gdpr-framework'),
152
+ 'JP' => _x('Japan ', '(Admin)', 'gdpr-framework'),
153
+ 'JE' => _x('Jersey ', '(Admin)', 'gdpr-framework'),
154
+ 'JO' => _x('Jordan ', '(Admin)', 'gdpr-framework'),
155
+ 'KZ' => _x('Kazakhstan ', '(Admin)', 'gdpr-framework'),
156
+ 'KE' => _x('Kenya ', '(Admin)', 'gdpr-framework'),
157
+ 'KI' => _x('Kiribati ', '(Admin)', 'gdpr-framework'),
158
+ 'KP' => _x('Korea, Democratic Peoples Republic of ', '(Admin)', 'gdpr-framework'),
159
+ 'KR' => _x('Korea, Republic of ', '(Admin)', 'gdpr-framework'),
160
+ 'KW' => _x('Kuwait ', '(Admin)', 'gdpr-framework'),
161
+ 'KG' => _x('Kyrgyzstan ', '(Admin)', 'gdpr-framework'),
162
+ 'LA' => _x('Lao Peoples Democratic Republic ', '(Admin)', 'gdpr-framework'),
163
+ 'LB' => _x('Lebanon ', '(Admin)', 'gdpr-framework'),
164
+ 'LS' => _x('Lesotho ', '(Admin)', 'gdpr-framework'),
165
+ 'LR' => _x('Liberia ', '(Admin)', 'gdpr-framework'),
166
+ 'LY' => _x('Libya ', '(Admin)', 'gdpr-framework'),
167
+ 'MO' => _x('Macao ', '(Admin)', 'gdpr-framework'),
168
+ 'MK' => _x('Macedonia, the Former Yugoslav Republic of ', '(Admin)', 'gdpr-framework'),
169
+ 'MG' => _x('Madagascar ', '(Admin)', 'gdpr-framework'),
170
+ 'MW' => _x('Malawi ', '(Admin)', 'gdpr-framework'),
171
+ 'MY' => _x('Malaysia ', '(Admin)', 'gdpr-framework'),
172
+ 'MV' => _x('Maldives ', '(Admin)', 'gdpr-framework'),
173
+ 'ML' => _x('Mali ', '(Admin)', 'gdpr-framework'),
174
+ 'MH' => _x('Marshall Islands ', '(Admin)', 'gdpr-framework'),
175
+ 'MQ' => _x('Martinique ', '(Admin)', 'gdpr-framework'),
176
+ 'MR' => _x('Mauritania ', '(Admin)', 'gdpr-framework'),
177
+ 'MU' => _x('Mauritius ', '(Admin)', 'gdpr-framework'),
178
+ 'YT' => _x('Mayotte ', '(Admin)', 'gdpr-framework'),
179
+ 'MX' => _x('Mexico ', '(Admin)', 'gdpr-framework'),
180
+ 'FM' => _x('Micronesia, Federated States of ', '(Admin)', 'gdpr-framework'),
181
+ 'MD' => _x('Moldova, Republic of ', '(Admin)', 'gdpr-framework'),
182
+ 'MC' => _x('Monaco ', '(Admin)', 'gdpr-framework'),
183
+ 'MN' => _x('Mongolia ', '(Admin)', 'gdpr-framework'),
184
+ 'ME' => _x('Montenegro ', '(Admin)', 'gdpr-framework'),
185
+ 'MS' => _x('Montserrat ', '(Admin)', 'gdpr-framework'),
186
+ 'MA' => _x('Morocco ', '(Admin)', 'gdpr-framework'),
187
+ 'MZ' => _x('Mozambique ', '(Admin)', 'gdpr-framework'),
188
+ 'MM' => _x('Myanmar ', '(Admin)', 'gdpr-framework'),
189
+ 'NA' => _x('Namibia ', '(Admin)', 'gdpr-framework'),
190
+ 'NR' => _x('Nauru ', '(Admin)', 'gdpr-framework'),
191
+ 'NP' => _x('Nepal ', '(Admin)', 'gdpr-framework'),
192
+ 'NC' => _x('New Caledonia ', '(Admin)', 'gdpr-framework'),
193
+ 'NZ' => _x('New Zealand ', '(Admin)', 'gdpr-framework'),
194
+ 'NI' => _x('Nicaragua ', '(Admin)', 'gdpr-framework'),
195
+ 'NE' => _x('Niger ', '(Admin)', 'gdpr-framework'),
196
+ 'NG' => _x('Nigeria ', '(Admin)', 'gdpr-framework'),
197
+ 'NU' => _x('Niue ', '(Admin)', 'gdpr-framework'),
198
+ 'NF' => _x('Norfolk Island ', '(Admin)', 'gdpr-framework'),
199
+ 'MP' => _x('Northern Mariana Islands ', '(Admin)', 'gdpr-framework'),
200
+ 'OM' => _x('Oman ', '(Admin)', 'gdpr-framework'),
201
+ 'PK' => _x('Pakistan ', '(Admin)', 'gdpr-framework'),
202
+ 'PW' => _x('Palau ', '(Admin)', 'gdpr-framework'),
203
+ 'PS' => _x('Palestine, State of ', '(Admin)', 'gdpr-framework'),
204
+ 'PA' => _x('Panama ', '(Admin)', 'gdpr-framework'),
205
+ 'PG' => _x('Papua New Guinea ', '(Admin)', 'gdpr-framework'),
206
+ 'PY' => _x('Paraguay ', '(Admin)', 'gdpr-framework'),
207
+ 'PE' => _x('Peru ', '(Admin)', 'gdpr-framework'),
208
+ 'PH' => _x('Philippines ', '(Admin)', 'gdpr-framework'),
209
+ 'PN' => _x('Pitcairn ', '(Admin)', 'gdpr-framework'),
210
+ 'PR' => _x('Puerto Rico ', '(Admin)', 'gdpr-framework'),
211
+ 'QA' => _x('Qatar ', '(Admin)', 'gdpr-framework'),
212
+ 'RE' => _x('Réunion ', '(Admin)', 'gdpr-framework'),
213
+ 'RU' => _x('Russian Federation ', '(Admin)', 'gdpr-framework'),
214
+ 'RW' => _x('Rwanda ', '(Admin)', 'gdpr-framework'),
215
+ 'BL' => _x('Saint Barthélemy ', '(Admin)', 'gdpr-framework'),
216
+ 'SH' => _x('Saint Helena, Ascension and Tristan da Cunha ', '(Admin)', 'gdpr-framework'),
217
+ 'KN' => _x('Saint Kitts and Nevis ', '(Admin)', 'gdpr-framework'),
218
+ 'LC' => _x('Saint Lucia ', '(Admin)', 'gdpr-framework'),
219
+ 'MF' => _x('Saint Martin (French part) ', '(Admin)', 'gdpr-framework'),
220
+ 'PM' => _x('Saint Pierre and Miquelon ', '(Admin)', 'gdpr-framework'),
221
+ 'VC' => _x('Saint Vincent and the Grenadines ', '(Admin)', 'gdpr-framework'),
222
+ 'WS' => _x('Samoa ', '(Admin)', 'gdpr-framework'),
223
+ 'SM' => _x('San Marino ', '(Admin)', 'gdpr-framework'),
224
+ 'ST' => _x('Sao Tome and Principe ', '(Admin)', 'gdpr-framework'),
225
+ 'SA' => _x('Saudi Arabia ', '(Admin)', 'gdpr-framework'),
226
+ 'SN' => _x('Senegal ', '(Admin)', 'gdpr-framework'),
227
+ 'RS' => _x('Serbia ', '(Admin)', 'gdpr-framework'),
228
+ 'SC' => _x('Seychelles ', '(Admin)', 'gdpr-framework'),
229
+ 'SL' => _x('Sierra Leone ', '(Admin)', 'gdpr-framework'),
230
+ 'SG' => _x('Singapore ', '(Admin)', 'gdpr-framework'),
231
+ 'SX' => _x('Sint Maarten (Dutch part) ', '(Admin)', 'gdpr-framework'),
232
+ 'SB' => _x('Solomon Islands ', '(Admin)', 'gdpr-framework'),
233
+ 'SO' => _x('Somalia ', '(Admin)', 'gdpr-framework'),
234
+ 'ZA' => _x('South Africa ', '(Admin)', 'gdpr-framework'),
235
+ 'GS' => _x('South Georgia and the South Sandwich Islands ', '(Admin)', 'gdpr-framework'),
236
+ 'SS' => _x('South Sudan ', '(Admin)', 'gdpr-framework'),
237
+ 'LK' => _x('Sri Lanka ', '(Admin)', 'gdpr-framework'),
238
+ 'SD' => _x('Sudan ', '(Admin)', 'gdpr-framework'),
239
+ 'SR' => _x('Suriname ', '(Admin)', 'gdpr-framework'),
240
+ 'SJ' => _x('Svalbard and Jan Mayen ', '(Admin)', 'gdpr-framework'),
241
+ 'SZ' => _x('Swaziland ', '(Admin)', 'gdpr-framework'),
242
+ 'SY' => _x('Syrian Arab Republic ', '(Admin)', 'gdpr-framework'),
243
+ 'TW' => _x('Taiwan, Province of China ', '(Admin)', 'gdpr-framework'),
244
+ 'TJ' => _x('Tajikistan ', '(Admin)', 'gdpr-framework'),
245
+ 'TZ' => _x('Tanzania, United Republic of ', '(Admin)', 'gdpr-framework'),
246
+ 'TH' => _x('Thailand ', '(Admin)', 'gdpr-framework'),
247
+ 'TL' => _x('Timor-Leste ', '(Admin)', 'gdpr-framework'),
248
+ 'TG' => _x('Togo ', '(Admin)', 'gdpr-framework'),
249
+ 'TK' => _x('Tokelau ', '(Admin)', 'gdpr-framework'),
250
+ 'TO' => _x('Tonga ', '(Admin)', 'gdpr-framework'),
251
+ 'TT' => _x('Trinidad and Tobago ', '(Admin)', 'gdpr-framework'),
252
+ 'TN' => _x('Tunisia ', '(Admin)', 'gdpr-framework'),
253
+ 'TR' => _x('Turkey ', '(Admin)', 'gdpr-framework'),
254
+ 'TM' => _x('Turkmenistan ', '(Admin)', 'gdpr-framework'),
255
+ 'TC' => _x('Turks and Caicos Islands ', '(Admin)', 'gdpr-framework'),
256
+ 'TV' => _x('Tuvalu ', '(Admin)', 'gdpr-framework'),
257
+ 'UG' => _x('Uganda ', '(Admin)', 'gdpr-framework'),
258
+ 'UA' => _x('Ukraine ', '(Admin)', 'gdpr-framework'),
259
+ 'AE' => _x('United Arab Emirates ', '(Admin)', 'gdpr-framework'),
260
+ 'UM' => _x('United States Minor Outlying Islands ', '(Admin)', 'gdpr-framework'),
261
+ 'UY' => _x('Uruguay ', '(Admin)', 'gdpr-framework'),
262
+ 'UZ' => _x('Uzbekistan ', '(Admin)', 'gdpr-framework'),
263
+ 'VU' => _x('Vanuatu ', '(Admin)', 'gdpr-framework'),
264
+ 'VE' => _x('Venezuela, Bolivarian Republic of ', '(Admin)', 'gdpr-framework'),
265
+ 'VN' => _x('Viet Nam ', '(Admin)', 'gdpr-framework'),
266
+ 'VG' => _x('Virgin Islands, British ', '(Admin)', 'gdpr-framework'),
267
+ 'VI' => _x('Virgin Islands, U.S. ', '(Admin)', 'gdpr-framework'),
268
+ 'WF' => _x('Wallis and Futuna ', '(Admin)', 'gdpr-framework'),
269
+ 'EH' => _x('Western Sahara ', '(Admin)', 'gdpr-framework'),
270
+ 'YE' => _x('Yemen ', '(Admin)', 'gdpr-framework'),
271
+ 'ZM' => _x('Zambia ', '(Admin)', 'gdpr-framework'),
272
+ 'ZW' => _x('Zimbabwe ', '(Admin)', 'gdpr-framework'),
273
+ ];
274
+ }
275
+
276
+ /**
277
+ * Get a list of <option> values for the country selector
278
+ *
279
+ * @param null $current
280
+ *
281
+ * @return mixed
282
+ */
283
+ public function getCountrySelectOptions($current = null)
284
+ {
285
+ $eu = $this->getEUCountryList();
286
+ $outside = [
287
+ "IS" => _x('Iceland', '(Admin)', 'gdpr-framework'),
288
+ "NO" => _x('Norway', '(Admin)', 'gdpr-framework'),
289
+ "LI" => _x('Liechtenstein', '(Admin)', 'gdpr-framework'),
290
+ "CH" => _x('Switzerland', '(Admin)', 'gdpr-framework'),
291
+ "US" => _x('United States', '(Admin)', 'gdpr-framework'),
292
+ // "other" => _x('Rest of the world', '(Admin)', 'gdpr-framework'),
293
+ ];
294
+
295
+ return gdpr('view')->render('global/country-options', compact('eu', 'outside', 'current'));
296
+ }
297
+
298
+ /**
299
+ * Check if a controller from the given country needs a representative in the EU
300
+ *
301
+ * @param $code
302
+ * @return bool
303
+ */
304
+ public function countryNeedsRepresentative($code)
305
+ {
306
+ return in_array($code, ['US', 'other']);
307
+ }
308
+
309
+ /**
310
+ * Get the data protection authority information for a given country
311
+ *
312
+ * @param null $countryCode
313
+ * @return array
314
+ */
315
+ public function getDataProtectionAuthorityInfo($countryCode = null)
316
+ {
317
+ if (!$countryCode) {
318
+ $countryCode = gdpr('options')->get('company_location');
319
+ }
320
+
321
+ $dpaData = require(gdpr('config')->get('plugin.path') . 'assets/data-protection-authorities.php');
322
+
323
+ if (isset($dpaData[$countryCode])) {
324
+ return $dpaData[$countryCode];
325
+ }
326
+
327
+ return [];
328
+ }
329
+
330
+ /**
331
+ * Get the info regarding all DPAs
332
+ */
333
+ public function getDataProtectionAuthorities()
334
+ {
335
+ return require(gdpr('config')->get('plugin.path') . 'assets/data-protection-authorities.php');
336
+ }
337
+
338
+ public function getAdminUrl($suffix = '')
339
+ {
340
+ return admin_url('tools.php?page=privacy' . $suffix);
341
+ }
342
+
343
+ public function getDashboardDataPageUrl($suffix = '')
344
+ {
345
+ return admin_url('users.php?page=gdpr-profile' . $suffix);
346
+ }
347
+
348
+ public function getPrivacyToolsPageUrl()
349
+ {
350
+ $toolsPageId = gdpr('options')->get('tools_page');
351
+ return $toolsPageId ? get_permalink($toolsPageId) : '';
352
+ }
353
+
354
+ public function getPrivacyPolicyPageUrl()
355
+ {
356
+ $policyPageId = gdpr('options')->get('policy_page');
357
+ return $policyPageId ? get_permalink($policyPageId) : '';
358
+ }
359
+
360
+ public function error()
361
+ {
362
+ wp_die(
363
+ __('An error has occurred. Please contact the site administrator.', 'gdpr-framework')
364
+ );
365
+ }
366
+
367
+ public function docs($url = '')
368
+ {
369
+ return 'https://codelight.eu/wordpress-gdpr-framework/' . $url;
370
+ }
371
+
372
+ /**
373
+ * Wrapper around wp_mail() to filter the headers
374
+ * Example code for changing the sender email:
375
+ *
376
+ * add_filter('gdpr/mail/headers', function($headers) {
377
+ $headers[] = 'From: Firstname Lastname <test@example.com>';
378
+ return $headers;
379
+ });
380
+ *
381
+ *
382
+ */
383
+ public function mail($to, $subject, $message, $headers = '', $attachments = [])
384
+ {
385
+ $headers = apply_filters('gdpr/mail/headers', $headers);
386
+ wp_mail($to, $subject, $message, $headers, $attachments);
387
+ }
388
+ }
src/Installer/AdminInstallerNotice.php CHANGED
@@ -1,19 +1,19 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Installer;
4
-
5
- use Codelight\GDPR\Admin\AdminNotice;
6
-
7
- class AdminInstallerNotice extends AdminNotice
8
- {
9
- public function render()
10
- {
11
- if (!$this->template) {
12
- trigger_error('Template not set for installer step admin notice!', E_USER_ERROR);
13
- }
14
-
15
- echo gdpr('view')->render('admin/notices/header-step');
16
- echo gdpr('view')->render($this->template, $this->data);
17
- echo gdpr('view')->render('admin/notices/footer-step');
18
- }
19
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Installer;
4
+
5
+ use Codelight\GDPR\Admin\AdminNotice;
6
+
7
+ class AdminInstallerNotice extends AdminNotice
8
+ {
9
+ public function render()
10
+ {
11
+ if (!$this->template) {
12
+ trigger_error('Template not set for installer step admin notice!', E_USER_ERROR);
13
+ }
14
+
15
+ echo gdpr('view')->render('admin/notices/header-step');
16
+ echo gdpr('view')->render($this->template, $this->data);
17
+ echo gdpr('view')->render('admin/notices/footer-step');
18
+ }
19
  }
src/Installer/Installer.php CHANGED
@@ -1,305 +1,305 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Installer;
4
-
5
- use Codelight\GDPR\Admin\AdminTabGeneral;
6
-
7
- /**
8
- * Handle all installation activities
9
- *
10
- * Class Installer
11
- *
12
- * @package Codelight\GDPR\Installer
13
- */
14
- class Installer
15
- {
16
- /* @var array */
17
- protected $defaultSteps = [
18
- 'Codelight\GDPR\Installer\Steps\Welcome',
19
- 'Codelight\GDPR\Installer\Steps\Disclaimer',
20
- 'Codelight\GDPR\Installer\Steps\ConfigurationPages',
21
- 'Codelight\GDPR\Installer\Steps\ConfigurationSettings',
22
- 'Codelight\GDPR\Installer\Steps\PolicySettings',
23
- 'Codelight\GDPR\Installer\Steps\PolicyContents',
24
- 'Codelight\GDPR\Installer\Steps\Consent',
25
- 'Codelight\GDPR\Installer\Steps\Integrations',
26
- 'Codelight\GDPR\Installer\Steps\Finish',
27
- ];
28
-
29
- /* @var array */
30
- protected $steps = [];
31
-
32
- /* @var InstallerWizard */
33
- protected $wizard;
34
-
35
- /* @var InstallerRouter */
36
- protected $router;
37
-
38
- /**
39
- * Check if the installer is enabled and ensure the user has correct permissions to run it
40
- */
41
- public function __construct(AdminTabGeneral $adminTab)
42
- {
43
- if (!$this->isInstallerEnabled()) {
44
- return;
45
- }
46
-
47
- if (!$this->userHasPermissions()) {
48
- return;
49
- }
50
-
51
- $this->adminTab = $adminTab;
52
-
53
- $this->maybeDisplayDisclaimer();
54
- $this->setupHooks();
55
-
56
- if (!$this->isInstalled()) {
57
- $this->setupSteps();
58
- $this->runInstaller();
59
- }
60
- }
61
-
62
- /**
63
- * Setup actions and admin tab components
64
- */
65
- protected function setupHooks()
66
- {
67
- add_action('admin_init', [$this, 'setupAdminGeneralTabButtons'], 0);
68
-
69
- add_action('gdpr/admin/action/accept_disclaimer', [$this, 'acceptDisclaimer']);
70
-
71
- add_action('gdpr/admin/action/restart_wizard', [$this, 'restartWizard']);
72
-
73
- add_action('gdpr/admin/action/auto_install', [$this, 'autoInstall']);
74
- add_action('gdpr/admin/action/skip_install', [$this, 'skipInstall']);
75
- }
76
-
77
- protected function runInstaller()
78
- {
79
- $this->wizard = new InstallerWizard;
80
- $this->router = new InstallerRouter($this->steps);
81
-
82
- // If we're currently on one of the installer steps, let the router handle it
83
- if ($this->router->isInstallerStep()) {
84
- return;
85
- }
86
-
87
- if ($this->getCurrentStepSlug()) {
88
- // If the current step is set, display continue notice
89
- $step = $this->router->findStep($this->getCurrentStepSlug());
90
- // If step doesn't exist, then it means the step slugs have changed. Do nothing.
91
- if (!$step) {
92
- return;
93
- }
94
- $this->displayContinueNotice($step->getUrl());
95
- } else {
96
- // If the current step is not set, it means the installer hasn't been started yet
97
- $this->displayWelcomeNotice();
98
- }
99
- }
100
-
101
- /**
102
- * If the admin has not accepted the disclaimer, render it
103
- */
104
- public function maybeDisplayDisclaimer()
105
- {
106
- if (!gdpr('options')->get('plugin_disclaimer_accepted') && (isset($_GET['page']) && 'privacy' === $_GET['page'])) {
107
- $acceptUrl = add_query_arg([
108
- 'gdpr_action' => 'accept_disclaimer',
109
- 'gdpr_nonce' => wp_create_nonce('gdpr/admin/action/accept_disclaimer'),
110
- ]);
111
- gdpr('admin-notice')->add('admin/notices/disclaimer', compact('acceptUrl'));
112
- }
113
- }
114
-
115
- /**
116
- * Mark the disclaimer as accepted
117
- */
118
- public function acceptDisclaimer()
119
- {
120
- gdpr('options')->set('plugin_disclaimer_accepted', 'yes');
121
- wp_safe_redirect(gdpr('helpers')->getAdminUrl());
122
- exit;
123
- }
124
-
125
- /**
126
- * Display installer section in admin page
127
- */
128
- public function setupAdminGeneralTabButtons()
129
- {
130
- /**
131
- * Display wizard buttons
132
- */
133
- $this->adminTab->registerSettingSection(
134
- 'gdpr-section-wizard',
135
- _x('Setup Wizard', '(Admin)', 'gdpr-framework'),
136
- [$this, 'renderWizardButtons']
137
- );
138
- }
139
-
140
- /**
141
- * Render the installer section
142
- */
143
- public function renderWizardButtons()
144
- {
145
- $restartUrl = add_query_arg([
146
- 'gdpr_action' => 'restart_wizard',
147
- 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/restart_wizard"),
148
- ]);
149
-
150
- echo gdpr('view')->render(
151
- 'admin/wizard-buttons',
152
- compact('restartUrl')
153
- );
154
- }
155
-
156
- /**
157
- * Restart and redirect to first step
158
- */
159
- public function restartWizard()
160
- {
161
- gdpr('options')->delete('installer_step');
162
- gdpr('options')->delete('is_installed');
163
-
164
- wp_safe_redirect(self_admin_url());
165
- exit;
166
- }
167
-
168
- /**
169
- * Allow plugins to modify the steps
170
- */
171
- protected function setupSteps()
172
- {
173
- $steps = apply_filters('gdpr/installer/steps', $this->defaultSteps);
174
-
175
- foreach ($steps as $index => $step) {
176
- $this->steps[$index] = new $step;
177
- }
178
- }
179
-
180
- /**
181
- * The installer can be disabled by filter.
182
- * Check if it's enabled
183
- *
184
- * @return bool
185
- */
186
- protected function isInstallerEnabled()
187
- {
188
- return apply_filters('gdpr/installer/enabled', true);
189
- }
190
-
191
- /**
192
- * Check if the current user has correct permissions to run the installer
193
- *
194
- * @return bool
195
- */
196
- protected function userHasPermissions()
197
- {
198
- return current_user_can(apply_filters('gdpr/installer/permissions', 'manage_options'));
199
- }
200
-
201
- /**
202
- * Check if the installer is already ran
203
- *
204
- * @return bool
205
- */
206
- protected function isInstalled()
207
- {
208
- return gdpr('options')->get('is_installed');
209
- }
210
-
211
- /**
212
- * @return string
213
- */
214
- public function getCurrentStepSlug()
215
- {
216
- return gdpr('options')->get('installer_step');
217
- }
218
-
219
- /**
220
- * Render an admin notice that will display the welcome message
221
- */
222
- protected function displayWelcomeNotice()
223
- {
224
- // Make sure we display the notice only to admins
225
- if (!current_user_can(apply_filters('gdpr/capability', 'manage_options'))) {
226
- return;
227
- }
228
-
229
- $installerUrl = $this->steps[0]->getUrl();
230
- $autoInstallUrl = add_query_arg([
231
- 'gdpr_action' => 'auto_install',
232
- 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/auto_install"),
233
- ]);
234
- $skipUrl = add_query_arg([
235
- 'gdpr_action' => 'skip_install',
236
- 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/skip_install"),
237
- ]);
238
-
239
- gdpr('admin-notice')->add(
240
- 'installer/welcome-notice',
241
- compact('installerUrl', 'autoInstallUrl', 'skipUrl')
242
- );
243
- }
244
-
245
- /**
246
- * Render an admin notice that will display the continue button
247
- *
248
- * @param $url
249
- */
250
- protected function displayContinueNotice($url)
251
- {
252
- // Make sure we display the notice only to admins
253
- if (!current_user_can(apply_filters('gdpr/capability', 'manage_options'))) {
254
- return;
255
- }
256
-
257
- $skipUrl = add_query_arg([
258
- 'gdpr_action' => 'skip_install',
259
- 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/skip_install"),
260
- ]);
261
-
262
- gdpr('admin-notice')->add('installer/continue-notice', ['buttonUrl' => $url, 'skipUrl' => $skipUrl]);
263
- }
264
-
265
- /**
266
- * Automatically create pages for Privacy Policy and set the corresponding options
267
- */
268
- public function autoInstall()
269
- {
270
- $policyPageId = wp_insert_post([
271
- 'post_title' => __('Privacy Policy', 'gdpr-framework'),
272
- 'post_type' => 'page',
273
- 'post_status' => 'publish',
274
- ]);
275
-
276
- gdpr('options')->set('policy_page', $policyPageId);
277
-
278
- $toolsPageId = wp_insert_post([
279
- 'post_content' => '[gdpr_privacy_tools]',
280
- 'post_title' => __('Privacy Tools', 'gdpr-framework'),
281
- 'post_type' => 'page',
282
- 'post_status' => 'publish',
283
- ]);
284
- gdpr('options')->set('tools_page', $toolsPageId);
285
-
286
- // Woocommerce compatibility - automatically add their terms page
287
- if (get_option('woocommerce_terms_page_id')) {
288
- gdpr('options')->set('terms_page', get_option('woocommerce_terms_page_id'));
289
- }
290
-
291
- gdpr('options')->set('is_installed', 'yes');
292
- wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy&gdpr-notice=autoinstall'));
293
- exit;
294
- }
295
-
296
- /**
297
- * Do nothing, but mark the installer as completed
298
- */
299
- public function skipInstall()
300
- {
301
- gdpr('options')->set('is_installed', 'yes');
302
- wp_safe_redirect(gdpr('helpers')->getAdminUrl());
303
- exit;
304
- }
305
- }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Installer;
4
+
5
+ use Codelight\GDPR\Admin\AdminTabGeneral;
6
+
7
+ /**
8
+ * Handle all installation activities
9
+ *
10
+ * Class Installer
11
+ *
12
+ * @package Codelight\GDPR\Installer
13
+ */
14
+ class Installer
15
+ {
16
+ /* @var array */
17
+ protected $defaultSteps = [
18
+ 'Codelight\GDPR\Installer\Steps\Welcome',
19
+ 'Codelight\GDPR\Installer\Steps\Disclaimer',
20
+ 'Codelight\GDPR\Installer\Steps\ConfigurationPages',
21
+ 'Codelight\GDPR\Installer\Steps\ConfigurationSettings',
22
+ 'Codelight\GDPR\Installer\Steps\PolicySettings',
23
+ 'Codelight\GDPR\Installer\Steps\PolicyContents',
24
+ 'Codelight\GDPR\Installer\Steps\Consent',
25
+ 'Codelight\GDPR\Installer\Steps\Integrations',
26
+ 'Codelight\GDPR\Installer\Steps\Finish',
27
+ ];
28
+
29
+ /* @var array */
30
+ protected $steps = [];
31
+
32
+ /* @var InstallerWizard */
33
+ protected $wizard;
34
+
35
+ /* @var InstallerRouter */
36
+ protected $router;
37
+
38
+ /**
39
+ * Check if the installer is enabled and ensure the user has correct permissions to run it
40
+ */
41
+ public function __construct(AdminTabGeneral $adminTab)
42
+ {
43
+ if (!$this->isInstallerEnabled()) {
44
+ return;
45
+ }
46
+
47
+ if (!$this->userHasPermissions()) {
48
+ return;
49
+ }
50
+
51
+ $this->adminTab = $adminTab;
52
+
53
+ $this->maybeDisplayDisclaimer();
54
+ $this->setupHooks();
55
+
56
+ if (!$this->isInstalled()) {
57
+ $this->setupSteps();
58
+ $this->runInstaller();
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Setup actions and admin tab components
64
+ */
65
+ protected function setupHooks()
66
+ {
67
+ add_action('admin_init', [$this, 'setupAdminGeneralTabButtons'], 0);
68
+
69
+ add_action('gdpr/admin/action/accept_disclaimer', [$this, 'acceptDisclaimer']);
70
+
71
+ add_action('gdpr/admin/action/restart_wizard', [$this, 'restartWizard']);
72
+
73
+ add_action('gdpr/admin/action/auto_install', [$this, 'autoInstall']);
74
+ add_action('gdpr/admin/action/skip_install', [$this, 'skipInstall']);
75
+ }
76
+
77
+ protected function runInstaller()
78
+ {
79
+ $this->wizard = new InstallerWizard;
80
+ $this->router = new InstallerRouter($this->steps);
81
+
82
+ // If we're currently on one of the installer steps, let the router handle it
83
+ if ($this->router->isInstallerStep()) {
84
+ return;
85
+ }
86
+
87
+ if ($this->getCurrentStepSlug()) {
88
+ // If the current step is set, display continue notice
89
+ $step = $this->router->findStep($this->getCurrentStepSlug());
90
+ // If step doesn't exist, then it means the step slugs have changed. Do nothing.
91
+ if (!$step) {
92
+ return;
93
+ }
94
+ $this->displayContinueNotice($step->getUrl());
95
+ } else {
96
+ // If the current step is not set, it means the installer hasn't been started yet
97
+ $this->displayWelcomeNotice();
98
+ }
99
+ }
100
+
101
+ /**
102
+ * If the admin has not accepted the disclaimer, render it
103
+ */
104
+ public function maybeDisplayDisclaimer()
105
+ {
106
+ if (!gdpr('options')->get('plugin_disclaimer_accepted') && (isset($_GET['page']) && 'privacy' === $_GET['page'])) {
107
+ $acceptUrl = add_query_arg([
108
+ 'gdpr_action' => 'accept_disclaimer',
109
+ 'gdpr_nonce' => wp_create_nonce('gdpr/admin/action/accept_disclaimer'),
110
+ ]);
111
+ gdpr('admin-notice')->add('admin/notices/disclaimer', compact('acceptUrl'));
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Mark the disclaimer as accepted
117
+ */
118
+ public function acceptDisclaimer()
119
+ {
120
+ gdpr('options')->set('plugin_disclaimer_accepted', 'yes');
121
+ wp_safe_redirect(gdpr('helpers')->getAdminUrl());
122
+ exit;
123
+ }
124
+
125
+ /**
126
+ * Display installer section in admin page
127
+ */
128
+ public function setupAdminGeneralTabButtons()
129
+ {
130
+ /**
131
+ * Display wizard buttons
132
+ */
133
+ $this->adminTab->registerSettingSection(
134
+ 'gdpr-section-wizard',
135
+ _x('Setup Wizard', '(Admin)', 'gdpr-framework'),
136
+ [$this, 'renderWizardButtons']
137
+ );
138
+ }
139
+
140
+ /**
141
+ * Render the installer section
142
+ */
143
+ public function renderWizardButtons()
144
+ {
145
+ $restartUrl = add_query_arg([
146
+ 'gdpr_action' => 'restart_wizard',
147
+ 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/restart_wizard"),
148
+ ]);
149
+
150
+ echo gdpr('view')->render(
151
+ 'admin/wizard-buttons',
152
+ compact('restartUrl')
153
+ );
154
+ }
155
+
156
+ /**
157
+ * Restart and redirect to first step
158
+ */
159
+ public function restartWizard()
160
+ {
161
+ gdpr('options')->delete('installer_step');
162
+ gdpr('options')->delete('is_installed');
163
+
164
+ wp_safe_redirect(self_admin_url());
165
+ exit;
166
+ }
167
+
168
+ /**
169
+ * Allow plugins to modify the steps
170
+ */
171
+ protected function setupSteps()
172
+ {
173
+ $steps = apply_filters('gdpr/installer/steps', $this->defaultSteps);
174
+
175
+ foreach ($steps as $index => $step) {
176
+ $this->steps[$index] = new $step;
177
+ }
178
+ }
179
+
180
+ /**
181
+ * The installer can be disabled by filter.
182
+ * Check if it's enabled
183
+ *
184
+ * @return bool
185
+ */
186
+ protected function isInstallerEnabled()
187
+ {
188
+ return apply_filters('gdpr/installer/enabled', true);
189
+ }
190
+
191
+ /**
192
+ * Check if the current user has correct permissions to run the installer
193
+ *
194
+ * @return bool
195
+ */
196
+ protected function userHasPermissions()
197
+ {
198
+ return current_user_can(apply_filters('gdpr/installer/permissions', 'manage_options'));
199
+ }
200
+
201
+ /**
202
+ * Check if the installer is already ran
203
+ *
204
+ * @return bool
205
+ */
206
+ protected function isInstalled()
207
+ {
208
+ return gdpr('options')->get('is_installed');
209
+ }
210
+
211
+ /**
212
+ * @return string
213
+ */
214
+ public function getCurrentStepSlug()
215
+ {
216
+ return gdpr('options')->get('installer_step');
217
+ }
218
+
219
+ /**
220
+ * Render an admin notice that will display the welcome message
221
+ */
222
+ protected function displayWelcomeNotice()
223
+ {
224
+ // Make sure we display the notice only to admins
225
+ if (!current_user_can(apply_filters('gdpr/capability', 'manage_options'))) {
226
+ return;
227
+ }
228
+
229
+ $installerUrl = $this->steps[0]->getUrl();
230
+ $autoInstallUrl = add_query_arg([
231
+ 'gdpr_action' => 'auto_install',
232
+ 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/auto_install"),
233
+ ]);
234
+ $skipUrl = add_query_arg([
235
+ 'gdpr_action' => 'skip_install',
236
+ 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/skip_install"),
237
+ ]);
238
+
239
+ gdpr('admin-notice')->add(
240
+ 'installer/welcome-notice',
241
+ compact('installerUrl', 'autoInstallUrl', 'skipUrl')
242
+ );
243
+ }
244
+
245
+ /**
246
+ * Render an admin notice that will display the continue button
247
+ *
248
+ * @param $url
249
+ */
250
+ protected function displayContinueNotice($url)
251
+ {
252
+ // Make sure we display the notice only to admins
253
+ if (!current_user_can(apply_filters('gdpr/capability', 'manage_options'))) {
254
+ return;
255
+ }
256
+
257
+ $skipUrl = add_query_arg([
258
+ 'gdpr_action' => 'skip_install',
259
+ 'gdpr_nonce' => wp_create_nonce("gdpr/admin/action/skip_install"),
260
+ ]);
261
+
262
+ gdpr('admin-notice')->add('installer/continue-notice', ['buttonUrl' => $url, 'skipUrl' => $skipUrl]);
263
+ }
264
+
265
+ /**
266
+ * Automatically create pages for Privacy Policy and set the corresponding options
267
+ */
268
+ public function autoInstall()
269
+ {
270
+ $policyPageId = wp_insert_post([
271
+ 'post_title' => __('Privacy Policy', 'gdpr-framework'),
272
+ 'post_type' => 'page',
273
+ 'post_status' => 'publish',
274
+ ]);
275
+
276
+ gdpr('options')->set('policy_page', $policyPageId);
277
+
278
+ $toolsPageId = wp_insert_post([
279
+ 'post_content' => '[gdpr_privacy_tools]',
280
+ 'post_title' => __('Privacy Tools', 'gdpr-framework'),
281
+ 'post_type' => 'page',
282
+ 'post_status' => 'publish',
283
+ ]);
284
+ gdpr('options')->set('tools_page', $toolsPageId);
285
+
286
+ // Woocommerce compatibility - automatically add their terms page
287
+ if (get_option('woocommerce_terms_page_id')) {
288
+ gdpr('options')->set('terms_page', get_option('woocommerce_terms_page_id'));
289
+ }
290
+
291
+ gdpr('options')->set('is_installed', 'yes');
292
+ wp_safe_redirect(gdpr('helpers')->getAdminUrl('&gdpr-tab=privacy-policy&gdpr-notice=autoinstall'));
293
+ exit;
294
+ }
295
+
296
+ /**
297
+ * Do nothing, but mark the installer as completed
298
+ */
299
+ public function skipInstall()
300
+ {
301
+ gdpr('options')->set('is_installed', 'yes');
302
+ wp_safe_redirect(gdpr('helpers')->getAdminUrl());
303
+ exit;
304
+ }
305
+ }
src/Installer/InstallerRouter.php CHANGED
@@ -1,184 +1,184 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Installer;
4
-
5
- /**
6
- * Handle redirecting and routing the installer steps
7
- *
8
- * Class InstallerRouter
9
- *
10
- * @package Codelight\GDPR\Installer
11
- */
12
- class InstallerRouter
13
- {
14
- /**
15
- * Set up the router
16
- *
17
- * @param array $steps
18
- */
19
- public function __construct(array $steps)
20
- {
21
- $this->steps = $steps;
22
-
23
- if (isset($_GET['gdpr-step'])) {
24
- add_action('admin_init', [$this, 'route']);
25
- }
26
- }
27
-
28
- /**
29
- * Do the magic
30
- */
31
- public function route()
32
- {
33
- /* @var $step InstallerStepInterface */
34
- $step = $this->findStep($_GET['gdpr-step']);
35
-
36
- if (!$step) {
37
- trigger_error("Step {$_GET['gdpr-step']} not found!", E_USER_ERROR);
38
- }
39
-
40
- if ('POST' === $_SERVER['REQUEST_METHOD'] && isset($_POST['gdpr-installer'])) {
41
-
42
- // Handle the previous step button
43
- if ('previous' === $_POST['gdpr-installer']) {
44
- $this->setCurrentStep($this->getPreviousStep($step)->getSlug());
45
- wp_safe_redirect($this->getPreviousStep($step)->getUrl(), 302);
46
- exit;
47
- }
48
-
49
- // Handle form submission
50
- if ('next' === $_POST['gdpr-installer']) {
51
-
52
- if (!$step->validateNonce()) {
53
- wp_safe_redirect($step->getUrl() . '&gdpr-error=nonce', 302);
54
- exit;
55
- }
56
-
57
- // Handle successful validation
58
- if ($step->validate()) {
59
- $step->submit();
60
- $nextStep = $this->getNextStep($step);
61
- if ($nextStep) {
62
- $this->setCurrentStep($nextStep->getSlug());
63
- wp_safe_redirect($nextStep->getUrl(), 302);
64
- exit;
65
- } else {
66
- // If no next step then we're done
67
- wp_safe_redirect(admin_url(), 302);
68
- exit;
69
- }
70
- }
71
-
72
- // Handle form submission with failed validation
73
- wp_safe_redirect($step->getUrl() . '&gdpr-error=' . $step->getErrors(), 302);
74
- exit;
75
- }
76
-
77
- trigger_error('Installer action not defined!', E_USER_NOTICE);
78
-
79
- } else {
80
-
81
- // Run wizard page step
82
- if ('wizard' === $step->getType()) {
83
- ob_start();
84
- $step->run();
85
- exit;
86
- }
87
-
88
- // Run regular admin page step
89
- $step->run();
90
- }
91
- }
92
-
93
- /**
94
- * Find a step by slug
95
- *
96
- * @param $slug
97
- * @return InstallerStepInterface|bool
98
- */
99
- public function findStep($slug)
100
- {
101
- foreach ($this->steps as $i => $step) {
102
- if ($slug === $step->getSlug()) {
103
- return $step;
104
- }
105
- }
106
-
107
- return false;
108
- }
109
-
110
- /**
111
- * Find the index of a step by its slug
112
- *
113
- * @param $slug
114
- * @return bool|int|string
115
- */
116
- protected function findStepIndex($slug)
117
- {
118
- foreach ($this->steps as $i => $step) {
119
- if ($slug === $step->getSlug()) {
120
- return $i;
121
- }
122
- }
123
-
124
- return false;
125
- }
126
-
127
- /**
128
- * Get the URL of the previous step or false if it's the first step
129
- *
130
- * @param InstallerStepInterface $step
131
- * @return InstallerStepInterface|bool
132
- */
133
- public function getPreviousStep(InstallerStepInterface $step)
134
- {
135
- $currentStepNumber = $this->findStepIndex($step->getSlug());
136
-
137
- if (false === $currentStepNumber or 0 === $currentStepNumber) {
138
- $prevStep = false;
139
- } else {
140
- $prevStep = $this->steps[$currentStepNumber - 1];
141
- }
142
-
143
- return apply_filters('gdpr/installer/prev-step', $prevStep, $currentStepNumber);
144
- }
145
-
146
- /**
147
- * Get the URL of the next step or admin dashboard if it's the last step
148
- *
149
- * @param InstallerStepInterface $step
150
- * @return InstallerStepInterface|bool
151
- */
152
- public function getNextStep(InstallerStepInterface $step)
153
- {
154
- $currentStepNumber = $this->findStepIndex($step->getSlug());
155
-
156
- if (false === $currentStepNumber or count($this->steps) === $currentStepNumber + 1) {
157
- $nextStep = false;
158
- } else {
159
- $nextStep = $this->steps[$currentStepNumber + 1];
160
- }
161
-
162
- return apply_filters('gdpr/installer/next-step-url', $nextStep, $currentStepNumber);
163
- }
164
-
165
- /**
166
- * Save the current step slug in the database to enable continue functionality
167
- *
168
- * @param $steps
169
- */
170
- protected function setCurrentStep($slug)
171
- {
172
- gdpr('options')->set('installer_step', $slug);
173
- }
174
-
175
- /**
176
- * Check if we are currently on any of the installer steps
177
- *
178
- * @return array|bool
179
- */
180
- public function isInstallerStep()
181
- {
182
- return isset($_GET['gdpr-step']) && $this->findStep($_GET['gdpr-step']);
183
- }
184
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Installer;
4
+
5
+ /**
6
+ * Handle redirecting and routing the installer steps
7
+ *
8
+ * Class InstallerRouter
9
+ *
10
+ * @package Codelight\GDPR\Installer
11
+ */
12
+ class InstallerRouter
13
+ {
14
+ /**
15
+ * Set up the router
16
+ *
17
+ * @param array $steps
18
+ */
19
+ public function __construct(array $steps)
20
+ {
21
+ $this->steps = $steps;
22
+
23
+ if (isset($_GET['gdpr-step'])) {
24
+ add_action('admin_init', [$this, 'route']);
25
+ }
26
+ }
27
+
28
+ /**
29
+ * Do the magic
30
+ */
31
+ public function route()
32
+ {
33
+ /* @var $step InstallerStepInterface */
34
+ $step = $this->findStep($_GET['gdpr-step']);
35
+
36
+ if (!$step) {
37
+ trigger_error("Step {$_GET['gdpr-step']} not found!", E_USER_ERROR);
38
+ }
39
+
40
+ if ('POST' === $_SERVER['REQUEST_METHOD'] && isset($_POST['gdpr-installer'])) {
41
+
42
+ // Handle the previous step button
43
+ if ('previous' === $_POST['gdpr-installer']) {
44
+ $this->setCurrentStep($this->getPreviousStep($step)->getSlug());
45
+ wp_safe_redirect($this->getPreviousStep($step)->getUrl(), 302);
46
+ exit;
47
+ }
48
+
49
+ // Handle form submission
50
+ if ('next' === $_POST['gdpr-installer']) {
51
+
52
+ if (!$step->validateNonce()) {
53
+ wp_safe_redirect($step->getUrl() . '&gdpr-error=nonce', 302);
54
+ exit;
55
+ }
56
+
57
+ // Handle successful validation
58
+ if ($step->validate()) {
59
+ $step->submit();
60
+ $nextStep = $this->getNextStep($step);
61
+ if ($nextStep) {
62
+ $this->setCurrentStep($nextStep->getSlug());
63
+ wp_safe_redirect($nextStep->getUrl(), 302);
64
+ exit;
65
+ } else {
66
+ // If no next step then we're done
67
+ wp_safe_redirect(admin_url(), 302);
68
+ exit;
69
+ }
70
+ }
71
+
72
+ // Handle form submission with failed validation
73
+ wp_safe_redirect($step->getUrl() . '&gdpr-error=' . $step->getErrors(), 302);
74
+ exit;
75
+ }
76
+
77
+ trigger_error('Installer action not defined!', E_USER_NOTICE);
78
+
79
+ } else {
80
+
81
+ // Run wizard page step
82
+ if ('wizard' === $step->getType()) {
83
+ ob_start();
84
+ $step->run();
85
+ exit;
86
+ }
87
+
88
+ // Run regular admin page step
89
+ $step->run();
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Find a step by slug
95
+ *
96
+ * @param $slug
97
+ * @return InstallerStepInterface|bool
98
+ */
99
+ public function findStep($slug)
100
+ {
101
+ foreach ($this->steps as $i => $step) {
102
+ if ($slug === $step->getSlug()) {
103
+ return $step;
104
+ }
105
+ }
106
+
107
+ return false;
108
+ }
109
+
110
+ /**
111
+ * Find the index of a step by its slug
112
+ *
113
+ * @param $slug
114
+ * @return bool|int|string
115
+ */
116
+ protected function findStepIndex($slug)
117
+ {
118
+ foreach ($this->steps as $i => $step) {
119
+ if ($slug === $step->getSlug()) {
120
+ return $i;
121
+ }
122
+ }
123
+
124
+ return false;
125
+ }
126
+
127
+ /**
128
+ * Get the URL of the previous step or false if it's the first step
129
+ *
130
+ * @param InstallerStepInterface $step
131
+ * @return InstallerStepInterface|bool
132
+ */
133
+ public function getPreviousStep(InstallerStepInterface $step)
134
+ {
135
+ $currentStepNumber = $this->findStepIndex($step->getSlug());
136
+
137
+ if (false === $currentStepNumber or 0 === $currentStepNumber) {
138
+ $prevStep = false;
139
+ } else {
140
+ $prevStep = $this->steps[$currentStepNumber - 1];
141
+ }
142
+
143
+ return apply_filters('gdpr/installer/prev-step', $prevStep, $currentStepNumber);
144
+ }
145
+
146
+ /**
147
+ * Get the URL of the next step or admin dashboard if it's the last step
148
+ *
149
+ * @param InstallerStepInterface $step
150
+ * @return InstallerStepInterface|bool
151
+ */
152
+ public function getNextStep(InstallerStepInterface $step)
153
+ {
154
+ $currentStepNumber = $this->findStepIndex($step->getSlug());
155
+
156
+ if (false === $currentStepNumber or count($this->steps) === $currentStepNumber + 1) {
157
+ $nextStep = false;
158
+ } else {
159
+ $nextStep = $this->steps[$currentStepNumber + 1];
160
+ }
161
+
162
+ return apply_filters('gdpr/installer/next-step-url', $nextStep, $currentStepNumber);
163
+ }
164
+
165
+ /**
166
+ * Save the current step slug in the database to enable continue functionality
167
+ *
168
+ * @param $steps
169
+ */
170
+ protected function setCurrentStep($slug)
171
+ {
172
+ gdpr('options')->set('installer_step', $slug);
173
+ }
174
+
175
+ /**
176
+ * Check if we are currently on any of the installer steps
177
+ *
178
+ * @return array|bool
179
+ */
180
+ public function isInstallerStep()
181
+ {
182
+ return isset($_GET['gdpr-step']) && $this->findStep($_GET['gdpr-step']);
183
+ }
184
  }
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
- gdpr('config')->get('plugin.url') . 'assets/select2-4.0.5.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
- gdpr('config')->get('plugin.url') . 'assets/select2-4.0.5.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
+ gdpr('config')->get('plugin.url') . 'assets/select2-4.0.5.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
+ gdpr('config')->get('plugin.url') . 'assets/select2-4.0.5.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/InstallerStepInterface.php CHANGED
@@ -1,22 +1,22 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Installer;
4
-
5
- interface InstallerStepInterface
6
- {
7
- public function run();
8
-
9
- public function validateNonce();
10
-
11
- public function validate();
12
-
13
- public function submit();
14
-
15
- public function getErrors();
16
-
17
- public function getUrl();
18
-
19
- public function getSlug();
20
-
21
- public function getType();
22
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Installer;
4
+
5
+ interface InstallerStepInterface
6
+ {
7
+ public function run();
8
+
9
+ public function validateNonce();
10
+
11
+ public function validate();
12
+
13
+ public function submit();
14
+
15
+ public function getErrors();
16
+
17
+ public function getUrl();
18
+
19
+ public function getSlug();
20
+
21
+ public function getType();
22
  }
src/Installer/InstallerWizard.php CHANGED
@@ -1,49 +1,49 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Installer;
4
-
5
- /**
6
- * Handle the installer wizard pages
7
- *
8
- * Class InstallerWizard
9
- *
10
- * @package Codelight\GDPR\Installer
11
- */
12
- class InstallerWizard
13
- {
14
- /**
15
- * InstallerWizard constructor.
16
- */
17
- public function __construct()
18
- {
19
- $this->configure();
20
-
21
- add_action('admin_menu', [$this, 'registerWizardPage']);
22
- }
23
-
24
- /**
25
- * Register the installer page with WordPress
26
- */
27
- public function registerWizardPage()
28
- {
29
- add_dashboard_page( '', '', 'manage_options', 'gdpr-setup', '' );
30
- }
31
-
32
- /**
33
- * Set up the configuration object
34
- */
35
- protected function configure()
36
- {
37
- gdpr('config')->set('installer.wizardUrl', self_admin_url("index.php?page=gdpr-setup&gdpr-step="));
38
- }
39
-
40
- /**
41
- * Check if we are already on the installer page
42
- *
43
- * @return bool
44
- */
45
- public function isWizardPage()
46
- {
47
- return isset($_GET['page']) && 'gdpr-setup' === $_GET['page'];
48
- }
49
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Installer;
4
+
5
+ /**
6
+ * Handle the installer wizard pages
7
+ *
8
+ * Class InstallerWizard
9
+ *
10
+ * @package Codelight\GDPR\Installer
11
+ */
12
+ class InstallerWizard
13
+ {
14
+ /**
15
+ * InstallerWizard constructor.
16
+ */
17
+ public function __construct()
18
+ {
19
+ $this->configure();
20
+
21
+ add_action('admin_menu', [$this, 'registerWizardPage']);
22
+ }
23
+
24
+ /**
25
+ * Register the installer page with WordPress
26
+ */
27
+ public function registerWizardPage()
28
+ {
29
+ add_dashboard_page( '', '', 'manage_options', 'gdpr-setup', '' );
30
+ }
31
+
32
+ /**
33
+ * Set up the configuration object
34
+ */
35
+ protected function configure()
36
+ {
37
+ gdpr('config')->set('installer.wizardUrl', self_admin_url("index.php?page=gdpr-setup&gdpr-step="));
38
+ }
39
+
40
+ /**
41
+ * Check if we are already on the installer page
42
+ *
43
+ * @return bool
44
+ */
45
+ public function isWizardPage()
46
+ {
47
+ return isset($_GET['page']) && 'gdpr-setup' === $_GET['page'];
48
+ }
49
  }
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('export_action', $_POST['gdpr_export_action']);
49
- }
50
-
51
- if (isset($_POST['gdpr_export_action_email'])) {
52
- gdpr('options')->set('export_action_email', $_POST['gdpr_export_action_email']);
53
- }
54
-
55
- if (isset($_POST['gdpr_delete_action'])) {
56
- gdpr('options')->set('delete_action', $_POST['gdpr_delete_action']);
57
- }
58
-
59
- if (isset($_POST['gdpr_delete_action_email'])) {
60
- gdpr('options')->set('delete_action_email', $_POST['gdpr_delete_action_email']);
61
- }
62
-
63
- if (isset($_POST['gdpr_delete_action_reassign'])) {
64
- gdpr('options')->set('delete_action_reassign', $_POST['gdpr_delete_action_reassign']);
65
- }
66
-
67
- if (isset($_POST['gdpr_delete_action_reassign_user'])) {
68
- gdpr('options')->set('delete_action_reassign_user', $_POST['gdpr_delete_action_reassign_user']);
69
- }
70
- }
71
- }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Installer\Steps;
4
+
5
+ use Codelight\GDPR\Installer\InstallerStep;
6
+ use Codelight\GDPR\Installer\InstallerStepInterface;
7
+
8
+ class ConfigurationSettings extends InstallerStep implements InstallerStepInterface
9
+ {
10
+ protected $slug = 'configuration-settings';
11
+
12
+ protected $type = 'wizard';
13
+
14
+ protected $template = 'installer/steps/configuration-settings';
15
+
16
+ protected $activeSteps = 1;
17
+
18
+ protected function renderContent()
19
+ {
20
+ $privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
21
+
22
+ $deleteAction = gdpr('options')->get('delete_action');
23
+ $deleteActionEmail = gdpr('options')->get('delete_action_email');
24
+
25
+ $exportAction = gdpr('options')->get('export_action');
26
+ $exportActionEmail = gdpr('options')->get('export_action_email');
27
+
28
+ $reassign = gdpr('options')->get('delete_action_reassign');
29
+ $reassignUser = gdpr('options')->get('delete_action_reassign_user');
30
+
31
+ echo gdpr('view')->render(
32
+ $this->template,
33
+ compact(
34
+ 'deleteAction',
35
+ 'deleteActionEmail',
36
+ 'exportAction',
37
+ 'exportActionEmail',
38
+ 'privacyToolsPageUrl',
39
+ 'reassign',
40
+ 'reassignUser'
41
+ )
42
+ );
43
+ }
44
+
45
+ public function submit()
46
+ {
47
+ if (isset($_POST['gdpr_export_action'])) {
48
+ gdpr('options')->set('export_action', $_POST['gdpr_export_action']);
49
+ }
50
+
51
+ if (isset($_POST['gdpr_export_action_email'])) {
52
+ gdpr('options')->set('export_action_email', $_POST['gdpr_export_action_email']);
53
+ }
54
+
55
+ if (isset($_POST['gdpr_delete_action'])) {
56
+ gdpr('options')->set('delete_action', $_POST['gdpr_delete_action']);
57
+ }
58
+
59
+ if (isset($_POST['gdpr_delete_action_email'])) {
60
+ gdpr('options')->set('delete_action_email', $_POST['gdpr_delete_action_email']);
61
+ }
62
+
63
+ if (isset($_POST['gdpr_delete_action_reassign'])) {
64
+ gdpr('options')->set('delete_action_reassign', $_POST['gdpr_delete_action_reassign']);
65
+ }
66
+
67
+ if (isset($_POST['gdpr_delete_action_reassign_user'])) {
68
+ gdpr('options')->set('delete_action_reassign_user', $_POST['gdpr_delete_action_reassign_user']);
69
+ }
70
+ }
71
+ }
src/Installer/Steps/Consent.php CHANGED
@@ -1,31 +1,31 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Installer\Steps;
4
-
5
- use Codelight\GDPR\Installer\InstallerStep;
6
- use Codelight\GDPR\Installer\InstallerStepInterface;
7
-
8
- class Consent extends InstallerStep implements InstallerStepInterface
9
- {
10
- protected $slug = 'consent';
11
-
12
- protected $type = 'wizard';
13
-
14
- protected $template = 'installer/steps/consent';
15
-
16
- protected $activeSteps = 3;
17
-
18
- protected function renderContent()
19
- {
20
- $isRegistrationOpen = get_option('users_can_register');
21
- $isCommentsEnabled = class_exists('Disable_Comments') ? false : true;
22
- $privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
23
- $hasGravityForms = class_exists('\GFForms');
24
- $hasCF7 = class_exists('\WPCF7');
25
-
26
- echo gdpr('view')->render(
27
- $this->template,
28
- compact('isRegistrationOpen', 'isCommentsEnabled', 'privacyToolsPageUrl', 'hasGravityForms', 'hasCF7')
29
- );
30
- }
31
- }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Installer\Steps;
4
+
5
+ use Codelight\GDPR\Installer\InstallerStep;
6
+ use Codelight\GDPR\Installer\InstallerStepInterface;
7
+
8
+ class Consent extends InstallerStep implements InstallerStepInterface
9
+ {
10
+ protected $slug = 'consent';
11
+
12
+ protected $type = 'wizard';
13
+
14
+ protected $template = 'installer/steps/consent';
15
+
16
+ protected $activeSteps = 3;
17
+
18
+ protected function renderContent()
19
+ {
20
+ $isRegistrationOpen = get_option('users_can_register');
21
+ $isCommentsEnabled = class_exists('Disable_Comments') ? false : true;
22
+ $privacyToolsPageUrl = get_permalink(gdpr('options')->get('tools_page'));
23
+ $hasGravityForms = class_exists('\GFForms');
24
+ $hasCF7 = class_exists('\WPCF7');
25
+
26
+ echo gdpr('view')->render(
27
+ $this->template,
28
+ compact('isRegistrationOpen', 'isCommentsEnabled', 'privacyToolsPageUrl', 'hasGravityForms', 'hasCF7')
29
+ );
30
+ }
31
+ }
src/Installer/Steps/Disclaimer.php CHANGED
@@ -1,24 +1,24 @@
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 Disclaimer extends InstallerStep implements InstallerStepInterface
11
- {
12
- protected $slug = 'disclaimer';
13
-
14
- protected $type = 'wizard';
15
-
16
- protected $template = 'installer/steps/disclaimer';
17
-
18
- protected $activeSteps = 0;
19
-
20
- public function submit()
21
- {
22
- gdpr('options')->set('plugin_disclaimer_accepted', 'yes');
23
- }
24
  }
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 Disclaimer extends InstallerStep implements InstallerStepInterface
11
+ {
12
+ protected $slug = 'disclaimer';
13
+
14
+ protected $type = 'wizard';
15
+
16
+ protected $template = 'installer/steps/disclaimer';
17
+
18
+ protected $activeSteps = 0;
19
+
20
+ public function submit()
21
+ {
22
+ gdpr('options')->set('plugin_disclaimer_accepted', 'yes');
23
+ }
24
  }
src/Installer/Steps/Finish.php CHANGED
@@ -1,27 +1,27 @@
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 Finish extends InstallerStep implements InstallerStepInterface
9
- {
10
- protected $slug = 'finish';
11
-
12
- protected $type = 'wizard';
13
-
14
- protected $template = 'installer/steps/finish';
15
-
16
- protected $activeSteps = 4;
17
-
18
- public function submit()
19
- {
20
- gdpr('options')->set('is_installed', true);
21
- }
22
-
23
- protected function renderFooter()
24
- {
25
- echo gdpr('view')->render('installer/footer', ['disableBackButton' => true]);
26
- }
27
  }
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 Finish extends InstallerStep implements InstallerStepInterface
9
+ {
10
+ protected $slug = 'finish';
11
+
12
+ protected $type = 'wizard';
13
+
14
+ protected $template = 'installer/steps/finish';
15
+
16
+ protected $activeSteps = 4;
17
+
18
+ public function submit()
19
+ {
20
+ gdpr('options')->set('is_installed', true);
21
+ }
22
+
23
+ protected function renderFooter()
24
+ {
25
+ echo gdpr('view')->render('installer/footer', ['disableBackButton' => true]);
26
+ }
27
  }
src/Installer/Steps/Integrations.php CHANGED
@@ -1,49 +1,49 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Installer\Steps;
4
-
5
- use Codelight\GDPR\Installer\InstallerStep;
6
- use Codelight\GDPR\Installer\InstallerStepInterface;
7
-
8
- class Integrations extends InstallerStep implements InstallerStepInterface
9
- {
10
- protected $slug = 'integrations';
11
-
12
- protected $type = 'wizard';
13
-
14
- protected $template = 'installer/steps/integrations';
15
-
16
- protected $activeSteps = 4;
17
-
18
- protected function renderContent()
19
- {
20
- $enableThemeCompatibility = gdpr('options')->get('enable_theme_compatibility');
21
- $currentTheme = gdpr('themes')->getCurrentThemeName();
22
- $isThemeSupported = gdpr('themes')->isCurrentThemeSupported();
23
-
24
- $hasWooCommerce = false;
25
- $hasEDD = false;
26
- $hasSendGrid = class_exists('\Sendgrid_Tools');
27
-
28
- echo gdpr('view')->render(
29
- $this->template,
30
- compact(
31
- 'enableThemeCompatibility',
32
- 'hasEDD',
33
- 'hasWooCommerce',
34
- 'currentTheme',
35
- 'isThemeSupported',
36
- 'hasSendGrid'
37
- )
38
- );
39
- }
40
-
41
- public function submit()
42
- {
43
- if (isset($_POST['gdpr_enable_theme_compatibility']) && 'yes' === $_POST['gdpr_enable_theme_compatibility']) {
44
- gdpr('options')->set('enable_theme_compatibility', true);
45
- } else {
46
- gdpr('options')->set('enable_theme_compatibility', false);
47
- }
48
- }
49
- }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Installer\Steps;
4
+
5
+ use Codelight\GDPR\Installer\InstallerStep;
6
+ use Codelight\GDPR\Installer\InstallerStepInterface;
7
+
8
+ class Integrations extends InstallerStep implements InstallerStepInterface
9
+ {
10
+ protected $slug = 'integrations';
11
+
12
+ protected $type = 'wizard';
13
+
14
+ protected $template = 'installer/steps/integrations';
15
+
16
+ protected $activeSteps = 4;
17
+
18
+ protected function renderContent()
19
+ {
20
+ $enableThemeCompatibility = gdpr('options')->get('enable_theme_compatibility');
21
+ $currentTheme = gdpr('themes')->getCurrentThemeName();
22
+ $isThemeSupported = gdpr('themes')->isCurrentThemeSupported();
23
+
24
+ $hasWooCommerce = false;
25
+ $hasEDD = false;
26
+ $hasSendGrid = class_exists('\Sendgrid_Tools');
27
+
28
+ echo gdpr('view')->render(
29
+ $this->template,
30
+ compact(
31
+ 'enableThemeCompatibility',
32
+ 'hasEDD',
33
+ 'hasWooCommerce',
34
+ 'currentTheme',
35
+ 'isThemeSupported',
36
+ 'hasSendGrid'
37
+ )
38
+ );
39
+ }
40
+
41
+ public function submit()
42
+ {
43
+ if (isset($_POST['gdpr_enable_theme_compatibility']) && 'yes' === $_POST['gdpr_enable_theme_compatibility']) {
44
+ gdpr('options')->set('enable_theme_compatibility', true);
45
+ } else {
46
+ gdpr('options')->set('enable_theme_compatibility', false);
47
+ }
48
+ }
49
+ }
src/Installer/Steps/PolicyContents.php CHANGED
@@ -1,31 +1,31 @@
1
- <?php
2
-
3
-
4
- namespace Codelight\GDPR\Installer\Steps;
5
-
6
-
7
- use Codelight\GDPR\Installer\InstallerStep;
8
- use Codelight\GDPR\Installer\InstallerStepInterface;
9
-
10
- class PolicyContents extends InstallerStep implements InstallerStepInterface
11
- {
12
- protected $slug = 'policy-contents';
13
-
14
- protected $type = 'wizard';
15
-
16
- protected $template = 'installer/steps/policy-contents';
17
-
18
- protected $activeSteps = 2;
19
-
20
- protected function renderContent()
21
- {
22
- $policyUrl = get_permalink(gdpr('options')->get('policy_page'));
23
- $editPolicyUrl = get_edit_post_link(gdpr('options')->get('policy_page'));
24
- $policyGenerated = gdpr('options')->get('policy_generated');
25
-
26
- echo gdpr('view')->render(
27
- $this->template,
28
- compact('policyUrl', 'editPolicyUrl', 'policyGenerated')
29
- );
30
- }
31
- }
1
+ <?php
2
+
3
+
4
+ namespace Codelight\GDPR\Installer\Steps;
5
+
6
+
7
+ use Codelight\GDPR\Installer\InstallerStep;
8
+ use Codelight\GDPR\Installer\InstallerStepInterface;
9
+
10
+ class PolicyContents extends InstallerStep implements InstallerStepInterface
11
+ {
12
+ protected $slug = 'policy-contents';
13
+
14
+ protected $type = 'wizard';
15
+
16
+ protected $template = 'installer/steps/policy-contents';
17
+
18
+ protected $activeSteps = 2;
19
+
20
+ protected function renderContent()
21
+ {
22
+ $policyUrl = get_permalink(gdpr('options')->get('policy_page'));
23
+ $editPolicyUrl = get_edit_post_link(gdpr('options')->get('policy_page'));
24
+ $policyGenerated = gdpr('options')->get('policy_generated');
25
+
26
+ echo gdpr('view')->render(
27
+ $this->template,
28
+ compact('policyUrl', 'editPolicyUrl', 'policyGenerated')
29
+ );
30
+ }
31
+ }
src/Installer/Steps/PolicySettings.php CHANGED
@@ -1,215 +1,215 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Installer\Steps;
4
-
5
- use Codelight\GDPR\Installer\InstallerStep;
6
- use Codelight\GDPR\Installer\InstallerStepInterface;
7
-
8
- class PolicySettings extends InstallerStep implements InstallerStepInterface
9
- {
10
- protected $slug = 'policy-settings';
11
-
12
- protected $type = 'wizard';
13
-
14
- protected $template = 'installer/steps/policy-settings';
15
-
16
- protected $activeSteps = 2;
17
-
18
- protected function renderContent()
19
- {
20
- $policyPage = gdpr('options')->get('policy_page');
21
- $policyPageSelector = wp_dropdown_pages([
22
- 'name' => 'gdpr_policy_page',
23
- 'show_option_none' => _x('&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/Installer/Steps/Welcome.php CHANGED
@@ -1,29 +1,29 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Installer\Steps;
4
-
5
- use Codelight\GDPR\Installer\InstallerStep;
6
- use Codelight\GDPR\Installer\InstallerStepInterface;
7
-
8
- /**
9
- * Handle the first step on installer screen
10
- *
11
- * Class Welcome
12
- *
13
- * @package Codelight\GDPR\Installer\Steps
14
- */
15
- class Welcome extends InstallerStep implements InstallerStepInterface
16
- {
17
- protected $slug = 'welcome';
18
-
19
- protected $type = 'wizard';
20
-
21
- protected $template = 'installer/steps/welcome';
22
-
23
- protected $activeSteps = 0;
24
-
25
- protected function renderFooter()
26
- {
27
- echo gdpr('view')->render('installer/footer', ['disableBackButton' => true]);
28
- }
29
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Installer\Steps;
4
+
5
+ use Codelight\GDPR\Installer\InstallerStep;
6
+ use Codelight\GDPR\Installer\InstallerStepInterface;
7
+
8
+ /**
9
+ * Handle the first step on installer screen
10
+ *
11
+ * Class Welcome
12
+ *
13
+ * @package Codelight\GDPR\Installer\Steps
14
+ */
15
+ class Welcome extends InstallerStep implements InstallerStepInterface
16
+ {
17
+ protected $slug = 'welcome';
18
+
19
+ protected $type = 'wizard';
20
+
21
+ protected $template = 'installer/steps/welcome';
22
+
23
+ protected $activeSteps = 0;
24
+
25
+ protected function renderFooter()
26
+ {
27
+ echo gdpr('view')->render('installer/footer', ['disableBackButton' => true]);
28
+ }
29
  }
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/ContactForm7/Flamingo.php CHANGED
@@ -1,151 +1,151 @@
1
- <?php
2
-
3
-
4
- namespace Codelight\GDPR\Modules\ContactForm7;
5
-
6
-
7
- class Flamingo
8
- {
9
- public function __construct()
10
- {
11
- add_filter('wpcf7_editor_panels', [$this, 'addCF7Tab']);
12
- add_action('wpcf7_save_contact_form', [$this, 'saveCF7Tab'], 10, 3);
13
-
14
- add_filter('gdpr/data-subject/data', [$this, 'getExportData'], 20, 2);
15
- add_action('gdpr/data-subject/delete', [$this, 'deleteEntries']);
16
- add_action('gdpr/data-subject/anonymize', [$this, 'deleteEntries']);
17
- }
18
-
19
- public function addCF7Tab($tabs)
20
- {
21
- $tabs['privacy-panel'] = [
22
- 'title' => __('Privacy', 'gdpr-framework'),
23
- 'callback' => [$this, 'renderPrivacyTab'],
24
- ];
25
-
26
- return $tabs;
27
- }
28
-
29
- public function renderPrivacyTab(\WPCF7_ContactForm $form)
30
- {
31
- $enabled = get_post_meta($form->id(), 'gdpr_cf7_enabled', true) ? get_post_meta($form->id(), 'gdpr_cf7_enabled', true) : '';
32
- $emailField = get_post_meta($form->id(), 'gdpr_cf7_email_field', true) ? get_post_meta($form->id(), 'gdpr_cf7_email_field', true) : '';
33
-
34
- echo gdpr('view')->render(
35
- 'modules/contact-form-7/form-privacy-tab',
36
- compact('enabled', 'emailField')
37
- );
38
- }
39
-
40
- public function saveCF7Tab(\WPCF7_ContactForm $contactForm, $args, $context)
41
- {
42
- if (isset($_POST['gdpr_cf7_enabled']) && isset($_POST['post_ID']) && $_POST['post_ID']) {
43
- update_post_meta($_POST['post_ID'], 'gdpr_cf7_enabled', $_POST['gdpr_cf7_enabled']);
44
- }
45
-
46
- if (isset($_POST['gdpr_cf7_email_field']) && !empty($_POST['gdpr_cf7_email_field']) && isset($_POST['post_ID']) && $_POST['post_ID']) {
47
- update_post_meta($_POST['post_ID'], 'gdpr_cf7_email_field', $_POST['gdpr_cf7_email_field']);
48
- }
49
- }
50
-
51
- public function getExportData(array $data, $email)
52
- {
53
- $entries = $this->getEntriesByEmail($email);
54
-
55
- if (!count($entries)) {
56
- return $data;
57
- }
58
-
59
- foreach ($entries as $i => $message) {
60
- $title = __('Form submissions: ', 'gdpr') . ucfirst($message->channel);
61
-
62
- if (count($message->fields)) {
63
- foreach ($message->fields as $key => $value) {
64
- $data[$title][$i][$key] = $value;
65
- }
66
- }
67
-
68
- if (count($message->consent)) {
69
- foreach ($message->consent as $key => $value) {
70
- $data[$title][$i][$key] = $value;
71
- }
72
- }
73
-
74
- $data[$title][$i]['date'] = $message->date;
75
- $data[$title][$i]['ip'] = $message->meta['remote_ip'];
76
- $data[$title][$i]['user_agent'] = $message->meta['user_agent'];
77
- $data[$title][$i]['url'] = $message->meta['post_url'];
78
- }
79
-
80
- return $data;
81
- }
82
-
83
- public function getEntriesByEmail($email)
84
- {
85
- $forms = $this->getValidForms();
86
-
87
- if (!count($forms)) {
88
- return [];
89
- }
90
-
91
- $entries = [];
92
-
93
- foreach ($forms as $form) {
94
- /* @var $form \WPCF7_ContactForm */
95
- $messages = \Flamingo_Inbound_Message::find([
96
- 'channel' => get_post_field( 'post_name', $form->id()),
97
- ]);
98
-
99
- if (!count($messages)) {
100
- continue;
101
- }
102
-
103
- $emailField = get_post_meta($form->id(), 'gdpr_cf7_email_field', true);
104
-
105
- if (!$emailField) {
106
- continue;
107
- }
108
-
109
- foreach ($messages as $message) {
110
- if ($email === $message->fields[$emailField]) {
111
- $entries[] = $message;
112
- }
113
- }
114
- }
115
-
116
- return $entries;
117
- }
118
-
119
- public function getValidForms()
120
- {
121
- return \WPCF7_ContactForm::find([
122
- 'meta_query' => [
123
- [
124
- 'key' => 'gdpr_cf7_enabled',
125
- 'value' => '1',
126
- ],
127
- ],
128
- ]);
129
- }
130
-
131
- public function deleteEntries($email)
132
- {
133
- $entries = $this->getEntriesByEmail($email);
134
-
135
- if (count($entries)) {
136
- foreach ($entries as $i => $message) {
137
- if ($message->id) {
138
- $message->delete();
139
- }
140
- }
141
- }
142
-
143
- $contacts = \Flamingo_Contact::search_by_email($email);
144
- if (count($contacts)) {
145
- foreach ($contacts as $i => $contactId) {
146
- (new \Flamingo_Contact($contactId))->delete();
147
- }
148
- }
149
-
150
- }
151
  }
1
+ <?php
2
+
3
+
4
+ namespace Codelight\GDPR\Modules\ContactForm7;
5
+
6
+
7
+ class Flamingo
8
+ {
9
+ public function __construct()
10
+ {
11
+ add_filter('wpcf7_editor_panels', [$this, 'addCF7Tab']);
12
+ add_action('wpcf7_save_contact_form', [$this, 'saveCF7Tab'], 10, 3);
13
+
14
+ add_filter('gdpr/data-subject/data', [$this, 'getExportData'], 20, 2);
15
+ add_action('gdpr/data-subject/delete', [$this, 'deleteEntries']);
16
+ add_action('gdpr/data-subject/anonymize', [$this, 'deleteEntries']);
17
+ }
18
+
19
+ public function addCF7Tab($tabs)
20
+ {
21
+ $tabs['privacy-panel'] = [
22
+ 'title' => __('Privacy', 'gdpr-framework'),
23
+ 'callback' => [$this, 'renderPrivacyTab'],
24
+ ];
25
+
26
+ return $tabs;
27
+ }
28
+
29
+ public function renderPrivacyTab(\WPCF7_ContactForm $form)
30
+ {
31
+ $enabled = get_post_meta($form->id(), 'gdpr_cf7_enabled', true) ? get_post_meta($form->id(), 'gdpr_cf7_enabled', true) : '';
32
+ $emailField = get_post_meta($form->id(), 'gdpr_cf7_email_field', true) ? get_post_meta($form->id(), 'gdpr_cf7_email_field', true) : '';
33
+
34
+ echo gdpr('view')->render(
35
+ 'modules/contact-form-7/form-privacy-tab',
36
+ compact('enabled', 'emailField')
37
+ );
38
+ }
39
+
40
+ public function saveCF7Tab(\WPCF7_ContactForm $contactForm, $args, $context)
41
+ {
42
+ if (isset($_POST['gdpr_cf7_enabled']) && isset($_POST['post_ID']) && $_POST['post_ID']) {
43
+ update_post_meta($_POST['post_ID'], 'gdpr_cf7_enabled', $_POST['gdpr_cf7_enabled']);
44
+ }
45
+
46
+ if (isset($_POST['gdpr_cf7_email_field']) && !empty($_POST['gdpr_cf7_email_field']) && isset($_POST['post_ID']) && $_POST['post_ID']) {
47
+ update_post_meta($_POST['post_ID'], 'gdpr_cf7_email_field', $_POST['gdpr_cf7_email_field']);
48
+ }
49
+ }
50
+
51
+ public function getExportData(array $data, $email)
52
+ {
53
+ $entries = $this->getEntriesByEmail($email);
54
+
55
+ if (!count($entries)) {
56
+ return $data;
57
+ }
58
+
59
+ foreach ($entries as $i => $message) {
60
+ $title = __('Form submissions: ', 'gdpr') . ucfirst($message->channel);
61
+
62
+ if (count($message->fields)) {
63
+ foreach ($message->fields as $key => $value) {
64
+ $data[$title][$i][$key] = $value;
65
+ }
66
+ }
67
+
68
+ if (count($message->consent)) {
69
+ foreach ($message->consent as $key => $value) {
70
+ $data[$title][$i][$key] = $value;
71
+ }
72
+ }
73
+
74
+ $data[$title][$i]['date'] = $message->date;
75
+ $data[$title][$i]['ip'] = $message->meta['remote_ip'];
76
+ $data[$title][$i]['user_agent'] = $message->meta['user_agent'];
77
+ $data[$title][$i]['url'] = $message->meta['post_url'];
78
+ }
79
+
80
+ return $data;
81
+ }
82
+
83
+ public function getEntriesByEmail($email)
84
+ {
85
+ $forms = $this->getValidForms();
86
+
87
+ if (!count($forms)) {
88
+ return [];
89
+ }
90
+
91
+ $entries = [];
92
+
93
+ foreach ($forms as $form) {
94
+ /* @var $form \WPCF7_ContactForm */
95
+ $messages = \Flamingo_Inbound_Message::find([
96
+ 'channel' => get_post_field( 'post_name', $form->id()),
97
+ ]);
98
+
99
+ if (!count($messages)) {
100
+ continue;
101
+ }
102
+
103
+ $emailField = get_post_meta($form->id(), 'gdpr_cf7_email_field', true);
104
+
105
+ if (!$emailField) {
106
+ continue;
107
+ }
108
+
109
+ foreach ($messages as $message) {
110
+ if ($email === $message->fields[$emailField]) {
111
+ $entries[] = $message;
112
+ }
113
+ }
114
+ }
115
+
116
+ return $entries;
117
+ }
118
+
119
+ public function getValidForms()
120
+ {
121
+ return \WPCF7_ContactForm::find([
122
+ 'meta_query' => [
123
+ [
124
+ 'key' => 'gdpr_cf7_enabled',
125
+ 'value' => '1',
126
+ ],
127
+ ],
128
+ ]);
129
+ }
130
+
131
+ public function deleteEntries($email)
132
+ {
133
+ $entries = $this->getEntriesByEmail($email);
134
+
135
+ if (count($entries)) {
136
+ foreach ($entries as $i => $message) {
137
+ if ($message->id) {
138
+ $message->delete();
139
+ }
140
+ }
141
+ }
142
+
143
+ $contacts = \Flamingo_Contact::search_by_email($email);
144
+ if (count($contacts)) {
145
+ foreach ($contacts as $i => $contactId) {
146
+ (new \Flamingo_Contact($contactId))->delete();
147
+ }
148
+ }
149
+
150
+ }
151
  }
src/Modules/WPML/WPML.php CHANGED
@@ -1,153 +1,153 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Modules\WPML;
4
-
5
- class WPML
6
- {
7
- protected $prefix = 'gdpr_';
8
-
9
- protected $translatableOptions = [
10
- 'tools_page',
11
- 'policy_page',
12
- 'terms_page',
13
- 'consent_info',
14
- ];
15
-
16
- public function __construct()
17
- {
18
- if (!class_exists('Sitepress')) {
19
- return;
20
- }
21
-
22
- $this->setupOptionFilters();
23
- }
24
-
25
- protected function setupOptionFilters()
26
- {
27
- foreach ($this->translatableOptions as $option) {
28
- add_filter("gdpr/options/get/{$option}", [$this, 'getTranslatedOption']);
29
-
30
- $option = $this->prefix($option);
31
- add_filter("pre_update_option_{$option}", [$this, 'setTranslatedOption'], 10, 2);
32
- }
33
-
34
- add_filter('gdpr/options/get/consent_types', [$this, 'getConsentTypes']);
35
- add_filter('gdpr/options/set/consent_types', [$this, 'saveConsentTypes']);
36
- }
37
-
38
- public function getTranslatedOption($option)
39
- {
40
- if (!defined('ICL_LANGUAGE_CODE')) {
41
- if (is_array($option)) {
42
- return '';
43
- } else {
44
- return $option;
45
- }
46
- }
47
-
48
- if (isset($option[(string)ICL_LANGUAGE_CODE])) {
49
- return $option[(string)ICL_LANGUAGE_CODE];
50
- } else {
51
- return '';
52
- }
53
- }
54
-
55
- public function setTranslatedOption($newValue, $oldValue)
56
- {
57
- if (!defined('ICL_LANGUAGE_CODE')) {
58
- return $newValue;
59
- }
60
-
61
- if (is_array($oldValue)) {
62
- $value = $oldValue;
63
- } else {
64
- $value = [];
65
- }
66
-
67
- $value[(string)ICL_LANGUAGE_CODE] = $newValue;
68
-
69
- return $value;
70
- }
71
-
72
- public function getConsentTypes($consentTypes)
73
- {
74
- if (!defined('ICL_LANGUAGE_CODE')) {
75
- return $consentTypes;
76
- }
77
-
78
- $code = (string)ICL_LANGUAGE_CODE;
79
- $filteredConsentTypes = [];
80
-
81
- if (count($consentTypes)) {
82
- foreach ($consentTypes as $consentType) {
83
-
84
- if (isset($consentType['slug']) && ('privacy-policy' === $consentType['slug'] or 'terms-condition' === $consentType['slug'])) {
85
- $filteredConsentTypes[] = [
86
- 'slug' => isset($consentType['slug']) ? $consentType['slug'] : '',
87
- 'visible' => isset($consentType['visible']) ? $consentType['visible'] : 0,
88
- 'title' => isset($consentType["title"]) ? $consentType["title"] : '',
89
- 'description' => isset($consentType["description"]) ? $consentType["description"] : '',
90
- ];
91
- } else {
92
- $filteredConsentTypes[] = [
93
- 'slug' => isset($consentType['slug']) ? $consentType['slug'] : '',
94
- 'visible' => isset($consentType['visible']) ? $consentType['visible'] : 0,
95
- 'title' => isset($consentType["{$code}_title"]) ? $consentType["{$code}_title"] : '',
96
- 'description' => isset($consentType["{$code}_description"]) ? $consentType["{$code}_description"] : '',
97
- ];
98
- }
99
- }
100
- }
101
-
102
- return $filteredConsentTypes;
103
- }
104
-
105
- public function saveConsentTypes($newConsentTypes)
106
- {
107
- if (!defined('ICL_LANGUAGE_CODE')) {
108
- return $newConsentTypes;
109
- }
110
-
111
- $code = (string)ICL_LANGUAGE_CODE;
112
- $translatedConsentTypes = [];
113
- $currentConsentTypes = gdpr('options')->get('consent_types', null, false);
114
-
115
- if (count($newConsentTypes)) {
116
- foreach ($newConsentTypes as &$newConsentType) {
117
-
118
- // Match an existing consent type with the new one
119
- $slug = $newConsentType['slug'];
120
- $existingConsentType = current(array_filter($currentConsentTypes, function($value) use ($slug) {
121
- return $value['slug'] === $slug;
122
- }));
123
-
124
- if ($existingConsentType) {
125
- // We have a matching existing consent - update translations, keep the rest
126
- $existingConsentType["{$code}_title"] = $newConsentType['title'];
127
- $existingConsentType["{$code}_description"] = $newConsentType['description'];
128
-
129
- $translatedConsentTypes[] = $existingConsentType;
130
- } else {
131
- // We do not have a matching existin consent - just adjust the keys for language
132
- $newConsentType["{$code}_title"] = $newConsentType['title'];
133
- $newConsentType["{$code}_description"] = $newConsentType['description'];
134
- unset($newConsentType['title']);
135
- unset($newConsentType['description']);
136
-
137
- $translatedConsentTypes[] = $newConsentType;
138
- }
139
- }
140
- }
141
-
142
- return $translatedConsentTypes;
143
- }
144
-
145
- public function prefix($name)
146
- {
147
- if (0 === strpos($name, $this->prefix)) {
148
- return $name;
149
- }
150
-
151
- return $this->prefix . $name;
152
- }
153
- }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Modules\WPML;
4
+
5
+ class WPML
6
+ {
7
+ protected $prefix = 'gdpr_';
8
+
9
+ protected $translatableOptions = [
10
+ 'tools_page',
11
+ 'policy_page',
12
+ 'terms_page',
13
+ 'consent_info',
14
+ ];
15
+
16
+ public function __construct()
17
+ {
18
+ if (!class_exists('Sitepress')) {
19
+ return;
20
+ }
21
+
22
+ $this->setupOptionFilters();
23
+ }
24
+
25
+ protected function setupOptionFilters()
26
+ {
27
+ foreach ($this->translatableOptions as $option) {
28
+ add_filter("gdpr/options/get/{$option}", [$this, 'getTranslatedOption']);
29
+
30
+ $option = $this->prefix($option);
31
+ add_filter("pre_update_option_{$option}", [$this, 'setTranslatedOption'], 10, 2);
32
+ }
33
+
34
+ add_filter('gdpr/options/get/consent_types', [$this, 'getConsentTypes']);
35
+ add_filter('gdpr/options/set/consent_types', [$this, 'saveConsentTypes']);
36
+ }
37
+
38
+ public function getTranslatedOption($option)
39
+ {
40
+ if (!defined('ICL_LANGUAGE_CODE')) {
41
+ if (is_array($option)) {
42
+ return '';
43
+ } else {
44
+ return $option;
45
+ }
46
+ }
47
+
48
+ if (isset($option[(string)ICL_LANGUAGE_CODE])) {
49
+ return $option[(string)ICL_LANGUAGE_CODE];
50
+ } else {
51
+ return '';
52
+ }
53
+ }
54
+
55
+ public function setTranslatedOption($newValue, $oldValue)
56
+ {
57
+ if (!defined('ICL_LANGUAGE_CODE')) {
58
+ return $newValue;
59
+ }
60
+
61
+ if (is_array($oldValue)) {
62
+ $value = $oldValue;
63
+ } else {
64
+ $value = [];
65
+ }
66
+
67
+ $value[(string)ICL_LANGUAGE_CODE] = $newValue;
68
+
69
+ return $value;
70
+ }
71
+
72
+ public function getConsentTypes($consentTypes)
73
+ {
74
+ if (!defined('ICL_LANGUAGE_CODE')) {
75
+ return $consentTypes;
76
+ }
77
+
78
+ $code = (string)ICL_LANGUAGE_CODE;
79
+ $filteredConsentTypes = [];
80
+
81
+ if (count($consentTypes)) {
82
+ foreach ($consentTypes as $consentType) {
83
+
84
+ if (isset($consentType['slug']) && ('privacy-policy' === $consentType['slug'] or 'terms-condition' === $consentType['slug'])) {
85
+ $filteredConsentTypes[] = [
86
+ 'slug' => isset($consentType['slug']) ? $consentType['slug'] : '',
87
+ 'visible' => isset($consentType['visible']) ? $consentType['visible'] : 0,
88
+ 'title' => isset($consentType["title"]) ? $consentType["title"] : '',
89
+ 'description' => isset($consentType["description"]) ? $consentType["description"] : '',
90
+ ];
91
+ } else {
92
+ $filteredConsentTypes[] = [
93
+ 'slug' => isset($consentType['slug']) ? $consentType['slug'] : '',
94
+ 'visible' => isset($consentType['visible']) ? $consentType['visible'] : 0,
95
+ 'title' => isset($consentType["{$code}_title"]) ? $consentType["{$code}_title"] : '',
96
+ 'description' => isset($consentType["{$code}_description"]) ? $consentType["{$code}_description"] : '',
97
+ ];
98
+ }
99
+ }
100
+ }
101
+
102
+ return $filteredConsentTypes;
103
+ }
104
+
105
+ public function saveConsentTypes($newConsentTypes)
106
+ {
107
+ if (!defined('ICL_LANGUAGE_CODE')) {
108
+ return $newConsentTypes;
109
+ }
110
+
111
+ $code = (string)ICL_LANGUAGE_CODE;
112
+ $translatedConsentTypes = [];
113
+ $currentConsentTypes = gdpr('options')->get('consent_types', null, false);
114
+
115
+ if (count($newConsentTypes)) {
116
+ foreach ($newConsentTypes as &$newConsentType) {
117
+
118
+ // Match an existing consent type with the new one
119
+ $slug = $newConsentType['slug'];
120
+ $existingConsentType = current(array_filter($currentConsentTypes, function($value) use ($slug) {
121
+ return $value['slug'] === $slug;
122
+ }));
123
+
124
+ if ($existingConsentType) {
125
+ // We have a matching existing consent - update translations, keep the rest
126
+ $existingConsentType["{$code}_title"] = $newConsentType['title'];
127
+ $existingConsentType["{$code}_description"] = $newConsentType['description'];
128
+
129
+ $translatedConsentTypes[] = $existingConsentType;
130
+ } else {
131
+ // We do not have a matching existin consent - just adjust the keys for language
132
+ $newConsentType["{$code}_title"] = $newConsentType['title'];
133
+ $newConsentType["{$code}_description"] = $newConsentType['description'];
134
+ unset($newConsentType['title']);
135
+ unset($newConsentType['description']);
136
+
137
+ $translatedConsentTypes[] = $newConsentType;
138
+ }
139
+ }
140
+ }
141
+
142
+ return $translatedConsentTypes;
143
+ }
144
+
145
+ public function prefix($name)
146
+ {
147
+ if (0 === strpos($name, $this->prefix)) {
148
+ return $name;
149
+ }
150
+
151
+ return $this->prefix . $name;
152
+ }
153
+ }
src/Options/Options.php CHANGED
@@ -1,66 +1,66 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Options;
4
-
5
- /**
6
- * Main class for handling options on a non-multisite install.
7
- * Adapted from https://carlalexander.ca/designing-classes-wordpress-options-api/
8
- *
9
- * Class Options
10
- *
11
- * @package Codelight\GDPR\Options
12
- */
13
- class Options extends OptionsBase
14
- {
15
- /**
16
- * Gets the option for the given name. Returns the default value if the value does not exist.
17
- *
18
- * @param string $name
19
- * @param mixed $default
20
- *
21
- * @return mixed
22
- */
23
- public function get($name, $default = null, $enableFilter = true)
24
- {
25
- $value = get_option($this->prefix($name), $default);
26
-
27
- if ($enableFilter) {
28
- $value = apply_filters("gdpr/options/get/{$name}", $value);
29
- }
30
-
31
- if (is_array($default) && !is_array($value)) {
32
- $value = (array) $value;
33
- }
34
-
35
- return $value;
36
- }
37
-
38
- /**
39
- * Sets an option. Overwrites the existing option if the name is already in use.
40
- *
41
- * @param string $name
42
- * @param mixed $value
43
- */
44
- public function set($name, $value, $enableFilter = true)
45
- {
46
- if ($enableFilter) {
47
- $value = apply_filters("gdpr/options/set/{$name}", $value, get_option($this->prefix($name)));
48
- }
49
-
50
- update_option(
51
- $this->prefix($name),
52
- $value,
53
- false
54
- );
55
- }
56
-
57
- /**
58
- * Removes the option with the given name.
59
- *
60
- * @param string $name
61
- */
62
- public function delete($name)
63
- {
64
- delete_option($this->prefix($name));
65
- }
66
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Options;
4
+
5
+ /**
6
+ * Main class for handling options on a non-multisite install.
7
+ * Adapted from https://carlalexander.ca/designing-classes-wordpress-options-api/
8
+ *
9
+ * Class Options
10
+ *
11
+ * @package Codelight\GDPR\Options
12
+ */
13
+ class Options extends OptionsBase
14
+ {
15
+ /**
16
+ * Gets the option for the given name. Returns the default value if the value does not exist.
17
+ *
18
+ * @param string $name
19
+ * @param mixed $default
20
+ *
21
+ * @return mixed
22
+ */
23
+ public function get($name, $default = null, $enableFilter = true)
24
+ {
25
+ $value = get_option($this->prefix($name), $default);
26
+
27
+ if ($enableFilter) {
28
+ $value = apply_filters("gdpr/options/get/{$name}", $value);
29
+ }
30
+
31
+ if (is_array($default) && !is_array($value)) {
32
+ $value = (array) $value;
33
+ }
34
+
35
+ return $value;
36
+ }
37
+
38
+ /**
39
+ * Sets an option. Overwrites the existing option if the name is already in use.
40
+ *
41
+ * @param string $name
42
+ * @param mixed $value
43
+ */
44
+ public function set($name, $value, $enableFilter = true)
45
+ {
46
+ if ($enableFilter) {
47
+ $value = apply_filters("gdpr/options/set/{$name}", $value, get_option($this->prefix($name)));
48
+ }
49
+
50
+ update_option(
51
+ $this->prefix($name),
52
+ $value,
53
+ false
54
+ );
55
+ }
56
+
57
+ /**
58
+ * Removes the option with the given name.
59
+ *
60
+ * @param string $name
61
+ */
62
+ public function delete($name)
63
+ {
64
+ delete_option($this->prefix($name));
65
+ }
66
  }
src/Options/OptionsBase.php CHANGED
@@ -1,71 +1,71 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR\Options;
4
-
5
- /**
6
- * Parent class for options.
7
- * Adapted from https://carlalexander.ca/designing-classes-wordpress-options-api/
8
- *
9
- * Class OptionsBase
10
- *
11
- * @package Codelight\GDPR\Options
12
- */
13
- abstract class OptionsBase
14
- {
15
- /* @var string */
16
- protected $prefix = 'gdpr_';
17
-
18
- /**
19
- * Auto-prefix all options
20
- *
21
- * @param $name
22
- * @return string
23
- */
24
- public function prefix($name)
25
- {
26
- // Check for accidental duplicate prefix
27
- if (0 === strpos($name, $this->prefix)) {
28
- trigger_error("You appear to have a duplicate prefix for option {$name}", E_USER_NOTICE);
29
- return $name;
30
- }
31
-
32
- return $this->prefix . $name;
33
- }
34
-
35
- /**
36
- * Checks if the option with the given name exists or not.
37
- *
38
- * @param string $name
39
- *
40
- * @return bool
41
- */
42
- public function has($name)
43
- {
44
- return null !== $this->get($name);
45
- }
46
-
47
- /**
48
- * Gets the option for the given name. Returns the default value if the value does not exist.
49
- *
50
- * @param string $name
51
- * @param mixed $default
52
- *
53
- * @return mixed
54
- */
55
- abstract public function get($name, $default = null);
56
-
57
- /**
58
- * Removes the option with the given name.
59
- *
60
- * @param string $name
61
- */
62
- abstract public function delete($name);
63
-
64
- /**
65
- * Sets an option. Overwrites the existing option if the name is already in use.
66
- *
67
- * @param string $name
68
- * @param mixed $value
69
- */
70
- abstract public function set($name, $value);
71
  }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR\Options;
4
+
5
+ /**
6
+ * Parent class for options.
7
+ * Adapted from https://carlalexander.ca/designing-classes-wordpress-options-api/
8
+ *
9
+ * Class OptionsBase
10
+ *
11
+ * @package Codelight\GDPR\Options
12
+ */
13
+ abstract class OptionsBase
14
+ {
15
+ /* @var string */
16
+ protected $prefix = 'gdpr_';
17
+
18
+ /**
19
+ * Auto-prefix all options
20
+ *
21
+ * @param $name
22
+ * @return string
23
+ */
24
+ public function prefix($name)
25
+ {
26
+ // Check for accidental duplicate prefix
27
+ if (0 === strpos($name, $this->prefix)) {
28
+ trigger_error("You appear to have a duplicate prefix for option {$name}", E_USER_NOTICE);
29
+ return $name;
30
+ }
31
+
32
+ return $this->prefix . $name;
33
+ }
34
+
35
+ /**
36
+ * Checks if the option with the given name exists or not.
37
+ *
38
+ * @param string $name
39
+ *
40
+ * @return bool
41
+ */
42
+ public function has($name)
43
+ {
44
+ return null !== $this->get($name);
45
+ }
46
+
47
+ /**
48
+ * Gets the option for the given name. Returns the default value if the value does not exist.
49
+ *
50
+ * @param string $name
51
+ * @param mixed $default
52
+ *
53
+ * @return mixed
54
+ */
55
+ abstract public function get($name, $default = null);
56
+
57
+ /**
58
+ * Removes the option with the given name.
59
+ *
60
+ * @param string $name
61
+ */
62
+ abstract public function delete($name);
63
+
64
+ /**
65
+ * Sets an option. Overwrites the existing option if the name is already in use.
66
+ *
67
+ * @param string $name
68
+ * @param mixed $value
69
+ */
70
+ abstract public function set($name, $value);
71
  }
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,102 +1,102 @@
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\ContactForm7\Flamingo;
19
- use Codelight\GDPR\Modules\WPML\WPML;
20
- use Codelight\GDPR\Options\Options;
21
-
22
- /**
23
- * Instantiate components
24
- *
25
- * Class Setup
26
- * @package Codelight\GDPR
27
- */
28
- class Setup
29
- {
30
- /**
31
- * Setup constructor.
32
- */
33
- public function __construct()
34
- {
35
- $this->registerComponents();
36
- $this->runComponents();
37
-
38
- add_action('init', function() {
39
-
40
- if (!is_admin()) {
41
- return;
42
- }
43
-
44
- gdpr()->singleton(SetupAdmin::class);
45
- gdpr(SetupAdmin::class);
46
- }, 0);
47
- }
48
-
49
- /**
50
- * Register required components in the container
51
- */
52
- protected function registerComponents()
53
- {
54
- gdpr()->bind(Router::class);
55
- gdpr()->bind(DataExporter::class);
56
-
57
- gdpr()->singleton(PrivacyToolsPage::class);
58
-
59
- gdpr()->singleton(AdminTab::class);
60
- gdpr()->singleton(DataSubjectManager::class);
61
- gdpr()->singleton(DataSubjectIdentificator::class);
62
- gdpr()->singleton(View::class);
63
- gdpr()->singleton(Options::class);
64
- gdpr()->singleton(ConsentManager::class);
65
- gdpr()->singleton(Helpers::class);
66
- gdpr()->singleton(Themes::class);
67
-
68
- gdpr()->alias(View::class, 'view');
69
- gdpr()->alias(Options::class, 'options');
70
- gdpr()->alias(ConsentManager::class, 'consent');
71
- gdpr()->alias(Helpers::class, 'helpers');
72
- gdpr()->alias(Themes::class, 'themes');
73
- gdpr()->alias(DataSubjectManager::class, 'data-subject');
74
- }
75
-
76
- /**
77
- * Check which components should be ran and run them
78
- */
79
- protected function runComponents()
80
- {
81
- gdpr()->make(WPML::class);
82
- gdpr()->make(Router::class);
83
- gdpr()->make(DataSubjectIdentificator::class);
84
- gdpr()->make(DataSubjectAdmin::class);
85
- gdpr()->make(PrivacyToolsPage::class);
86
- gdpr()->make(PrivacyPolicy::class);
87
- gdpr()->make(WordpressComments::class);
88
- gdpr()->make(WordpressUser::class);
89
- gdpr()->make(Support::class);
90
-
91
- // Integrations
92
- gdpr()->make(Themes::class);
93
-
94
- if (defined('WPCF7_VERSION')) {
95
- gdpr()->make(ContactForm7::class);
96
- }
97
-
98
- if (defined('FLAMINGO_VERSION')) {
99
- gdpr()->make(Flamingo::class);
100
- }
101
- }
102
- }
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\ContactForm7\Flamingo;
19
+ use Codelight\GDPR\Modules\WPML\WPML;
20
+ use Codelight\GDPR\Options\Options;
21
+
22
+ /**
23
+ * Instantiate components
24
+ *
25
+ * Class Setup
26
+ * @package Codelight\GDPR
27
+ */
28
+ class Setup
29
+ {
30
+ /**
31
+ * Setup constructor.
32
+ */
33
+ public function __construct()
34
+ {
35
+ $this->registerComponents();
36
+ $this->runComponents();
37
+
38
+ add_action('init', function() {
39
+
40
+ if (!is_admin()) {
41
+ return;
42
+ }
43
+
44
+ gdpr()->singleton(SetupAdmin::class);
45
+ gdpr(SetupAdmin::class);
46
+ }, 0);
47
+ }
48
+
49
+ /**
50
+ * Register required components in the container
51
+ */
52
+ protected function registerComponents()
53
+ {
54
+ gdpr()->bind(Router::class);
55
+ gdpr()->bind(DataExporter::class);
56
+
57
+ gdpr()->singleton(PrivacyToolsPage::class);
58
+
59
+ gdpr()->singleton(AdminTab::class);
60
+ gdpr()->singleton(DataSubjectManager::class);
61
+ gdpr()->singleton(DataSubjectIdentificator::class);
62
+ gdpr()->singleton(View::class);
63
+ gdpr()->singleton(Options::class);
64
+ gdpr()->singleton(ConsentManager::class);
65
+ gdpr()->singleton(Helpers::class);
66
+ gdpr()->singleton(Themes::class);
67
+
68
+ gdpr()->alias(View::class, 'view');
69
+ gdpr()->alias(Options::class, 'options');
70
+ gdpr()->alias(ConsentManager::class, 'consent');
71
+ gdpr()->alias(Helpers::class, 'helpers');
72
+ gdpr()->alias(Themes::class, 'themes');
73
+ gdpr()->alias(DataSubjectManager::class, 'data-subject');
74
+ }
75
+
76
+ /**
77
+ * Check which components should be ran and run them
78
+ */
79
+ protected function runComponents()
80
+ {
81
+ gdpr()->make(WPML::class);
82
+ gdpr()->make(Router::class);
83
+ gdpr()->make(DataSubjectIdentificator::class);
84
+ gdpr()->make(DataSubjectAdmin::class);
85
+ gdpr()->make(PrivacyToolsPage::class);
86
+ gdpr()->make(PrivacyPolicy::class);
87
+ gdpr()->make(WordpressComments::class);
88
+ gdpr()->make(WordpressUser::class);
89
+ gdpr()->make(Support::class);
90
+
91
+ // Integrations
92
+ gdpr()->make(Themes::class);
93
+
94
+ if (defined('WPCF7_VERSION')) {
95
+ gdpr()->make(ContactForm7::class);
96
+ }
97
+
98
+ if (defined('FLAMINGO_VERSION')) {
99
+ gdpr()->make(Flamingo::class);
100
+ }
101
+ }
102
+ }
src/SetupAdmin.php CHANGED
@@ -1,62 +1,62 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR;
4
-
5
- use Codelight\GDPR\Admin\AdminError;
6
- use Codelight\GDPR\Admin\AdminNotice;
7
- use Codelight\GDPR\Admin\Modal;
8
- use Codelight\GDPR\Admin\WordpressAdmin;
9
- use Codelight\GDPR\Admin\WordpressAdminPage;
10
- use Codelight\GDPR\Components\Consent\ConsentAdmin;
11
- use Codelight\GDPR\Installer\Installer;
12
- use Codelight\GDPR\Installer\AdminInstallerNotice;
13
-
14
- /**
15
- * Register and set up admin components.
16
- * This class is instantiated at admin_init priority 0
17
- *
18
- * Class SetupAdmin
19
- *
20
- * @package Codelight\GDPR
21
- */
22
- class SetupAdmin
23
- {
24
- /**
25
- * SetupAdmin constructor.
26
- */
27
- public function __construct()
28
- {
29
- $this->registerComponents();
30
- $this->runComponents();
31
- }
32
-
33
- /**
34
- * Register components in the container
35
- */
36
- protected function registerComponents()
37
- {
38
- gdpr()->singleton(WordpressAdmin::class);
39
- gdpr()->singleton(WordpressAdminPage::class);
40
- gdpr()->singleton(Installer::class);
41
-
42
- // Not a singleton.
43
- gdpr()->alias(AdminNotice::class, 'admin-notice');
44
- gdpr()->alias(AdminError::class, 'admin-error');
45
- gdpr()->alias(AdminInstallerNotice::class, 'installer-notice');
46
- gdpr()->alias(Modal::class, 'admin-modal');
47
- gdpr()->alias(WordpressAdminPage::class, 'admin-page');
48
-
49
- gdpr()->bind(ConsentAdmin::class);
50
- }
51
-
52
- /**
53
- * Run components
54
- */
55
- protected function runComponents()
56
- {
57
- gdpr(WordpressAdmin::class);
58
- gdpr(WordpressAdminPage::class);
59
- gdpr(Installer::class);
60
- gdpr(ConsentAdmin::class);
61
- }
62
- }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR;
4
+
5
+ use Codelight\GDPR\Admin\AdminError;
6
+ use Codelight\GDPR\Admin\AdminNotice;
7
+ use Codelight\GDPR\Admin\Modal;
8
+ use Codelight\GDPR\Admin\WordpressAdmin;
9
+ use Codelight\GDPR\Admin\WordpressAdminPage;
10
+ use Codelight\GDPR\Components\Consent\ConsentAdmin;
11
+ use Codelight\GDPR\Installer\Installer;
12
+ use Codelight\GDPR\Installer\AdminInstallerNotice;
13
+
14
+ /**
15
+ * Register and set up admin components.
16
+ * This class is instantiated at admin_init priority 0
17
+ *
18
+ * Class SetupAdmin
19
+ *
20
+ * @package Codelight\GDPR
21
+ */
22
+ class SetupAdmin
23
+ {
24
+ /**
25
+ * SetupAdmin constructor.
26
+ */
27
+ public function __construct()
28
+ {
29
+ $this->registerComponents();
30
+ $this->runComponents();
31
+ }
32
+
33
+ /**
34
+ * Register components in the container
35
+ */
36
+ protected function registerComponents()
37
+ {
38
+ gdpr()->singleton(WordpressAdmin::class);
39
+ gdpr()->singleton(WordpressAdminPage::class);
40
+ gdpr()->singleton(Installer::class);
41
+
42
+ // Not a singleton.
43
+ gdpr()->alias(AdminNotice::class, 'admin-notice');
44
+ gdpr()->alias(AdminError::class, 'admin-error');
45
+ gdpr()->alias(AdminInstallerNotice::class, 'installer-notice');
46
+ gdpr()->alias(Modal::class, 'admin-modal');
47
+ gdpr()->alias(WordpressAdminPage::class, 'admin-page');
48
+
49
+ gdpr()->bind(ConsentAdmin::class);
50
+ }
51
+
52
+ /**
53
+ * Run components
54
+ */
55
+ protected function runComponents()
56
+ {
57
+ gdpr(WordpressAdmin::class);
58
+ gdpr(WordpressAdminPage::class);
59
+ gdpr(Installer::class);
60
+ gdpr(ConsentAdmin::class);
61
+ }
62
+ }
src/View.php CHANGED
@@ -1,64 +1,64 @@
1
- <?php
2
-
3
- namespace Codelight\GDPR;
4
-
5
- /**
6
- * Handles locating templates from either the theme or plugin,
7
- * injecting and extracting data and rendering them.
8
- *
9
- * Class View
10
- * @package Codelight\GDPR
11
- */
12
- class View
13
- {
14
- /**
15
- * View constructor.
16
- */
17
- public function __construct()
18
- {
19
- $this->dirs = $this->getTemplateDirectories();
20
- }
21
-
22
- /**
23
- * Render a given template.
24
- *
25
- * @param $template
26
- * @param array $data
27
- * @param null $templateDir
28
- *
29
- * @return string
30
- */
31
- public function render($template, $data = [], $templateDir = null)
32
- {
33
- if (is_null($templateDir)) {
34
- foreach ($this->dirs as $dir) {
35
- if (file_exists($dir . $template . '.php')) {
36
- $templateDir = $dir;
37
- break;
38
- }
39
- }
40
- }
41
-
42
- extract($data);
43
- ob_start();
44
- require $templateDir . $template . '.php';
45
-
46
- return ob_get_clean();
47
- }
48
-
49
- /**
50
- * Get valid template directories and pass them through a filter
51
- *
52
- * @return array
53
- */
54
- protected function getTemplateDirectories()
55
- {
56
- $directories = array_filter([
57
- get_stylesheet_directory() . '/gdpr-framework/',
58
- get_template_directory() . '/gdpr-framework/',
59
- gdpr('config')->get('plugin.template_path'),
60
- ], 'is_dir');
61
-
62
- return array_unique(apply_filters('gdpr/views', $directories));
63
- }
64
- }
1
+ <?php
2
+
3
+ namespace Codelight\GDPR;
4
+
5
+ /**
6
+ * Handles locating templates from either the theme or plugin,
7
+ * injecting and extracting data and rendering them.
8
+ *
9
+ * Class View
10
+ * @package Codelight\GDPR
11
+ */
12
+ class View
13
+ {
14
+ /**
15
+ * View constructor.
16
+ */
17
+ public function __construct()
18
+ {
19
+ $this->dirs = $this->getTemplateDirectories();
20
+ }
21
+
22
+ /**
23
+ * Render a given template.
24
+ *
25
+ * @param $template
26
+ * @param array $data
27
+ * @param null $templateDir
28
+ *
29
+ * @return string
30
+ */
31
+ public function render($template, $data = [], $templateDir = null)
32
+ {
33
+ if (is_null($templateDir)) {
34
+ foreach ($this->dirs as $dir) {
35
+ if (file_exists($dir . $template . '.php')) {
36
+ $templateDir = $dir;
37
+ break;
38
+ }
39
+ }
40
+ }
41
+
42
+ extract($data);
43
+ ob_start();
44
+ require $templateDir . $template . '.php';
45
+
46
+ return ob_get_clean();
47
+ }
48
+
49
+ /**
50
+ * Get valid template directories and pass them through a filter
51
+ *
52
+ * @return array
53
+ */
54
+ protected function getTemplateDirectories()
55
+ {
56
+ $directories = array_filter([
57
+ get_stylesheet_directory() . '/gdpr-framework/',
58
+ get_template_directory() . '/gdpr-framework/',
59
+ gdpr('config')->get('plugin.template_path'),
60
+ ], 'is_dir');
61
+
62
+ return array_unique(apply_filters('gdpr/views', $directories));
63
+ }
64
+ }
views/admin/consent.php CHANGED
@@ -1,105 +1,108 @@
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="<?= _x('Add consent type', '(Admin)', 'gdpr-framework'); ?>"/>
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 gdpr-show-hide gdpr-hidden" 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
+ class="gdpr_custom_consent_types"
53
+ placeholder="<?= _x('Slug', '(Admin)', 'gdpr-framework'); ?>"
54
+ pattern="^[A-Za-z0-9_-]+$"
55
+ oninvalid="setCustomValidity('Please fill in this field using alphanumeric characters, dashes and underscores.')"
56
+ oninput="setCustomValidity('')"
57
+ required
58
+ disabled
59
+ />
60
+ </td>
61
+ <td class="gdpr-consent-table-input">
62
+ <input type="text" name="title" class="gdpr_custom_consent_types" placeholder="<?= _x('Title', '(Admin)', 'gdpr-framework'); ?>" required disabled/>
63
+ </td>
64
+ <td class="gdpr-consent-table-desc">
65
+ <textarea type="text" name="description" placeholder="<?= _x('Description', '(Admin)', 'gdpr-framework'); ?>"></textarea>
66
+ </td>
67
+ <td>
68
+ <label>
69
+ <input type="checkbox" name="visible" value="1"/>
70
+ <?= _x('Visible?', '(Admin)', 'gdpr-framework'); ?>
71
+ </label>
72
+ </td>
73
+ <td>
74
+ <input data-repeater-delete class="button button-primary" type="button" value="<?= _x('Remove', '(Admin)', 'gdpr-framework'); ?>"/>
75
+ </td>
76
+ </tr>
77
+
78
+ </table>
79
+ <div class="gdpr-consent-add-button">
80
+ <input data-enable-repeater class="button button-primary show_form_consent_gdpr" type="button" value="<?= _x('Add consent type', '(Admin)', 'gdpr-framework'); ?>"/>
81
+ <input data-repeater-create class="button button-primary gdpr-show-hide gdpr-hidden" type="button" value="<?= _x('Add consent type', '(Admin)', 'gdpr-framework'); ?>"/>
82
+ <input data-enable-repeater class="button button-primary hide_form_consent_gdpr gdpr-show-hide gdpr-hidden" type="button" value="<?= _x('Remove consent type', '(Admin)', 'gdpr-framework'); ?>"/>
83
+ </div>
84
+ <input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
85
+ <input type="hidden" name="gdpr_action" value="update_consent_data" />
86
+ </div>
87
+
88
+ <?php if (count($customConsentTypes)): ?>
89
+ <script>
90
+ window.repeaterData = [];
91
+ window.repeaterData['gdpr_consent_types'] = <?= json_encode($customConsentTypes); ?>;
92
+ </script>
93
+ <?php endif; ?>
94
+ <br>
95
+ <hr>
96
+ <h3><?= _x('Additional info', '(Admin)', 'gdpr-framework'); ?></h3>
97
+ <p>
98
+ <?= _x('This text will be displayed to your data subjects on the Privacy Tools page.', '(Admin)', 'gdpr-framework'); ?>
99
+ </p>
100
+ <?php wp_editor(
101
+ wp_kses_post($consentInfo),
102
+ 'gdpr_consent_info',
103
+ [
104
+ 'textarea_rows' => 4,
105
+ ]
106
+ );
107
+ ?>
108
+
views/admin/data-subjects/search-form.php CHANGED
@@ -1,18 +1,18 @@
1
- <p>
2
- <?= _x('On this page, you can find which data subjects personal data you are storing and download, export or delete it.', '(Admin)', 'gdpr-framework'); ?>
3
- </p>
4
-
5
- <hr>
6
-
7
- <?= $results; ?>
8
-
9
- <label>
10
- <h3><?= _x('Find data subject by email', '(Admin)', 'gdpr-framework'); ?></h3>
11
- <input type="email" name="gdpr_email" placeholder="<?= _x('Email address', '(Admin)', 'gdpr-framework'); ?>" />
12
- </label>
13
-
14
- <input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
15
- <input type="hidden" name="gdpr_action" value="search" />
16
- <input class="button button-primary" type="submit" value="<?= _x('Search', '(Admin)', 'gdpr-framework'); ?>" />
17
-
18
- <br><br>
1
+ <p>
2
+ <?= _x('On this page, you can find which data subjects personal data you are storing and download, export or delete it.', '(Admin)', 'gdpr-framework'); ?>
3
+ </p>
4
+
5
+ <hr>
6
+
7
+ <?= $results; ?>
8
+
9
+ <label>
10
+ <h3><?= _x('Find data subject by email', '(Admin)', 'gdpr-framework'); ?></h3>
11
+ <input type="email" name="gdpr_email" placeholder="<?= _x('Email address', '(Admin)', 'gdpr-framework'); ?>" />
12
+ </label>
13
+
14
+ <input type="hidden" name="gdpr_nonce" value="<?= $nonce; ?>" />
15
+ <input type="hidden" name="gdpr_action" value="search" />
16
+ <input class="button button-primary" type="submit" value="<?= _x('Search', '(Admin)', 'gdpr-framework'); ?>" />
17
+
18
+ <br><br>
views/admin/data-subjects/search-results.php CHANGED
@@ -1,59 +1,59 @@
1
- <div>
2
- <h3>Results for: <?= esc_html($email); ?></h3>
3
- <?php if ($hasData): ?>
4
-
5
- <?php if (isset($links['profile'])): ?>
6
- <p>
7
- <strong><?= _x('Username', '(Admin)', 'gdpr-framework'); ?>:</strong>
8
- <a href="<?= $links['profile']; ?>"><?= esc_html($userName); ?></a>
9
- </p>
10
- <?php else: ?>
11
- <p>
12
- <em>
13
- <?= _x('Data found.', '(Admin)', 'gdpr-framework'); ?>
14
- <strong><?= esc_html($email); ?></strong> <?= _x('is not a registered user.', '(Admin)', 'gdpr-framework'); ?>
15
- </em>
16
- </p>
17
- <?php endif; ?>
18
-
19
- <hr>
20
-
21
- <a class="button button-primary" href="<?= esc_url($links['view']); ?>"><?= _x('Download data (html)', '(Admin)', 'gdpr-framework'); ?></a>
22
- <a class="button button-primary" href="<?= esc_url($links['export']); ?>"><?= _x('Export data (json)', '(Admin)', 'gdpr-framework'); ?></a>
23
-
24
- <?php if ($adminCap): ?>
25
- <p>
26
- <strong><?= _x('This user has admin capabilities. Deleting data via this interface is disabled.', '(Admin)', 'gdpr-framework'); ?></strong>
27
- </p>
28
- <?php else: ?>
29
- <a class="button button-primary" href="<?= esc_url($links['anonymize']); ?>"><?= _x('Anonymize data', '(Admin)', 'gdpr-framework'); ?></a>
30
- <a class="button button-primary" href="<?= esc_url($links['delete']); ?>"><?= _x('Delete data', '(Admin)', 'gdpr-framework'); ?></a>
31
- <?php endif; ?>
32
-
33
- <?php else: ?>
34
- <p><?= _x('No data found!', '(Admin)', 'gdpr-framework'); ?></p>
35
- <?php endif; ?>
36
-
37
- <hr>
38
-
39
- <?php if (count($consentData)): ?>
40
- <table class="gdpr-consent">
41
- <th colspan="2"><?= _x('Consents given', '(Admin)', 'gdpr-framework'); ?></th>
42
- <?php foreach ($consentData as $item): ?>
43
- <tr>
44
- <td>
45
- &#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>
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/export-action.php CHANGED
@@ -1,3 +1,3 @@
1
- <select class="gdpr-select js-gdpr-conditional" name="gdpr_export_action">
2
- <?= gdpr('view')->render('global/export-action', compact('exportAction')); ?>
3
  </select>
1
+ <select class="gdpr-select js-gdpr-conditional" name="gdpr_export_action">
2
+ <?= gdpr('view')->render('global/export-action', compact('exportAction')); ?>
3
  </select>
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/notice.php CHANGED
@@ -1,3 +1,3 @@
1
- <div class="<?= $class; ?>">
2
- <p><?= $message; ?></p>
3
  </div>
1
+ <div class="<?= $class; ?>">
2
+ <p><?= $message; ?></p>
3
  </div>
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/footer-step.php CHANGED
@@ -1,3 +1,3 @@
1
- </form>
2
- </div>
3
  </div>
1
+ </form>
2
+ </div>
3
  </div>
views/admin/notices/footer.php CHANGED
@@ -1,2 +1,2 @@
1
- </div>
2
  </div>
1
+ </div>
2
  </div>
views/admin/notices/header-step.php CHANGED
@@ -1,5 +1,5 @@
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
- <form method="POST">
5
  <input type="hidden" name="gdpr-installer" value="next">
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
+ <form method="POST">
5
  <input type="hidden" name="gdpr-installer" value="next">
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,7 +1,7 @@
1
- <p>
2
- <?= sprintf(
3
- _x('Need help? Take a look at our %sdocumentation%s.', '(Admin)', 'gdpr-framework'),
4
- '<a href="' . gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/') . '" target="_blank">',
5
- '</a>'
6
- ); ?>
7
- </p>
1
+ <p>
2
+ <?= sprintf(
3
+ _x('Need help? Take a look at our %sdocumentation%s.', '(Admin)', 'gdpr-framework'),
4
+ '<a href="' . gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/') . '" target="_blank">',
5
+ '</a>'
6
+ ); ?>
7
+ </p>
views/admin/notices/helper-autoinstall.php CHANGED
@@ -1,10 +1,10 @@
1
- <p>
2
- <?= _x('A Privacy Policy page has been created, but it is empty. You can generate a policy template on this page.', '(Admin)', 'gdpr-framework'); ?>
3
- </p>
4
- <p>
5
- <?= _x(
6
- sprintf('Read more %shere%s', "<a href='{$helpUrl}'>", "</a>"),
7
- '(Admin)',
8
- 'gdpr-framework'
9
- ); ?>
10
- </p>
1
+ <p>
2
+ <?= _x('A Privacy Policy page has been created, but it is empty. You can generate a policy template on this page.', '(Admin)', 'gdpr-framework'); ?>
3
+ </p>
4
+ <p>
5
+ <?= _x(
6
+ sprintf('Read more %shere%s', "<a href='{$helpUrl}'>", "</a>"),
7
+ '(Admin)',
8
+ 'gdpr-framework'
9
+ ); ?>
10
+ </p>
views/admin/notices/helper-policy.php CHANGED
@@ -1,9 +1,9 @@
1
- <p>
2
- <?= _x('Heads up - your Privacy Policy still requires some attention. Find the places marked with [TODO] and replace them with real content!', '(Admin)', 'gdpr-framework'); ?>
3
- </p>
4
- <p>
5
- <?= _x(
6
- sprintf('Read more about editing your Privacy Policy %shere%s', "<a href='{$helpUrl}'>", "</a>"),
7
- '(Admin)','gdpr-framework'
8
- ); ?>
9
- </p>
1
+ <p>
2
+ <?= _x('Heads up - your Privacy Policy still requires some attention. Find the places marked with [TODO] and replace them with real content!', '(Admin)', 'gdpr-framework'); ?>
3
+ </p>
4
+ <p>
5
+ <?= _x(
6
+ sprintf('Read more about editing your Privacy Policy %shere%s', "<a href='{$helpUrl}'>", "</a>"),
7
+ '(Admin)','gdpr-framework'
8
+ ); ?>
9
+ </p>
views/admin/notices/helper-settings.php CHANGED
@@ -1,8 +1,8 @@
1
- <p>
2
- <?= _x('Heads up! The GDPR Framework is not properly configured, so it will not work just yet.', '(Admin)', 'gdpr-framework'); ?> <br>
3
- <?= sprintf(
4
- _x('Go to %sTools > Privacy%s and make sure all fields are filled in.', '(Admin)', 'gdpr-framework'),
5
- "<a href='" . gdpr('helpers')->getAdminUrl() . "'>",
6
- '</a>'
7
- ); ?>
8
- </p>
1
+ <p>
2
+ <?= _x('Heads up! The GDPR Framework is not properly configured, so it will not work just yet.', '(Admin)', 'gdpr-framework'); ?> <br>
3
+ <?= sprintf(
4
+ _x('Go to %sTools > Privacy%s and make sure all fields are filled in.', '(Admin)', 'gdpr-framework'),
5
+ "<a href='" . gdpr('helpers')->getAdminUrl() . "'>",
6
+ '</a>'
7
+ ); ?>
8
+ </p>
views/admin/notices/helper-tools.php CHANGED
@@ -1,10 +1,10 @@
1
- <p>
2
- <?= _x('The contents of this page should contain the [gdpr_tools] shortcode.', '(Admin)', 'gdpr-framework'); ?>
3
- </p>
4
- <p>
5
- <?= _x(
6
- sprintf('Read more %shere%s', "<a href='{$helpUrl}'>", "</a>"),
7
- '(Admin)',
8
- 'gdpr-framework'
9
- ); ?>
10
- </p>
1
+ <p>
2
+ <?= _x('The contents of this page should contain the [gdpr_tools] shortcode.', '(Admin)', 'gdpr-framework'); ?>
3
+ </p>
4
+ <p>
5
+ <?= _x(
6
+ sprintf('Read more %shere%s', "<a href='{$helpUrl}'>", "</a>"),
7
+ '(Admin)',
8
+ 'gdpr-framework'
9
+ ); ?>
10
+ </p>
views/admin/privacy-policy/company-location.php CHANGED
@@ -1,3 +1,3 @@
1
- <select id="gdpr_company_location" name="gdpr_company_location" class="js-gdpr-select2 gdpr-select js-gdpr-conditional js-gdpr-country-selector">
2
- <?= $countrySelectOptions; ?>
3
  </select>
1
+ <select id="gdpr_company_location" name="gdpr_company_location" class="js-gdpr-select2 gdpr-select js-gdpr-conditional js-gdpr-country-selector">
2
+ <?= $countrySelectOptions; ?>
3
  </select>
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/has-dpo.php CHANGED
@@ -1,12 +1,12 @@
1
- <label for="gdpr_has_dpo">
2
- <input
3
- type="checkbox"
4
- name="gdpr_has_dpo"
5
- id="gdpr_has_dpo"
6
- class="js-gdpr-conditional"
7
- data-show=".gdpr-dpo"
8
- value="yes"
9
- <?= checked($hasDPO, 'yes'); ?>
10
- >
11
- <?= _x('I have appointed a Data Protection Officer (DPO)', '(Admin)', 'gdpr-framework'); ?>
12
  </label>
1
+ <label for="gdpr_has_dpo">
2
+ <input
3
+ type="checkbox"
4
+ name="gdpr_has_dpo"
5
+ id="gdpr_has_dpo"
6
+ class="js-gdpr-conditional"
7
+ data-show=".gdpr-dpo"
8
+ value="yes"
9
+ <?= checked($hasDPO, 'yes'); ?>
10
+ >
11
+ <?= _x('I have appointed a Data Protection Officer (DPO)', '(Admin)', 'gdpr-framework'); ?>
12
  </label>
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,48 +1,48 @@
1
- <div class="wrap gdpr-framework-wrap">
2
- <h2>
3
- <?= _x('The GDPR Framework', '(Admin)', 'gdpr-framework'); ?>
4
- </h2>
5
-
6
- <?php if (!empty($_GET['updated'])) : ?>
7
- <div id="setting-error-settings_updated" class="updated settings-error notice is-dismissible">
8
- <p><strong><?php _ex('GDPR settings saved!', '(Admin)', 'gdpr-framework') ?></strong></p>
9
- </div>
10
- <?php endif; ?>
11
-
12
- <?php if (count($tabs)): ?>
13
- <nav class="nav-tab-wrapper">
14
- <?php foreach ($tabs as $slug => $tab): ?>
15
- <a href="<?= $tab['url']; ?>" class="nav-tab <?= $tab['active'] ? 'nav-tab-active' : ''; ?>">
16
- <?= $tab['title'] ?>
17
- </a>
18
- <?php endforeach; ?>
19
- </nav>
20
- <?php endif; ?>
21
-
22
- <form action="options.php" method="POST">
23
- <?= $currentTabContents; ?>
24
- </form>
25
-
26
- <?php if ($signature): ?>
27
- <hr>
28
- <p>
29
- <em>
30
- <?= sprintf(
31
- _x('The GDPR Framework. Built with &#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! %sDonate%s or leave a %s5-star rating%s.", '(Admin)', 'gdpr-framework'),
40
- '<a href="https://codelight.eu/wordpress-gdpr-framework/donate/" target="_blank">',
41
- '</a>',
42
- '<a href="https://wordpress.org/plugins/gdpr-framework/#reviews" target="_blank">',
43
- '</a>'
44
- ); ?>
45
- </em>
46
- </p>
47
- <?php endif; ?>
48
- </div>
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! %sDonate%s or leave a %s5-star rating%s.", '(Admin)', 'gdpr-framework'),
40
+ '<a href="https://codelight.eu/wordpress-gdpr-framework/donate/" target="_blank">',
41
+ '</a>',
42
+ '<a href="https://wordpress.org/plugins/gdpr-framework/#reviews" target="_blank">',
43
+ '</a>'
44
+ ); ?>
45
+ </em>
46
+ </p>
47
+ <?php endif; ?>
48
+ </div>
views/admin/support/contents.php CHANGED
@@ -1,62 +1,62 @@
1
- <hr>
2
-
3
- <section class="section">
4
- <h3 class="align-center">
5
- <?= _x('Need more info?', '(Admin)', 'gdpr-framework'); ?>
6
- </h3>
7
- <div class="row">
8
- <div class="col">
9
- <div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/1.png');"></div>
10
- <a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/'); ?>" target="_blank">
11
- <?= _x('Site Owner\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
12
- </a>
13
- <p>
14
- <?= _x('Read the full guide on GDPR compliance.', '(Admin)', 'gdpr-framework'); ?>
15
- </p>
16
- </div>
17
- <div class="col">
18
- <div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/2.png');"></div>
19
- <a class="button button-primary" href="<?= gdpr('helpers')->docs('knowledge-base'); ?>" target="_blank">
20
- <?= _x('Knowledge base', '(Admin)', 'gdpr-framework'); ?>
21
- </a>
22
- <p>
23
- <?= _x('Check out the knowledge base for common questions and answers.', '(Admin)', 'gdpr-framework'); ?>
24
- </p>
25
- </div>
26
- <div class="col">
27
- <div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/3.png');"></div>
28
- <a class="button button-primary" href="<?= gdpr('helpers')->docs('developer-docs'); ?>" target="_blank">
29
- <?= _x('Developer\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
30
- </a>
31
- <p>
32
- <?= _x('We have a thorough guide to help making custom sites compliant.', '(Admin)', 'gdpr-framework'); ?>
33
- </p>
34
- </div>
35
- </div>
36
- </section>
37
-
38
- <section class="section">
39
- <h3 class="align-center">
40
- <?= _x('Need help?', '(Admin)', 'gdpr-framework'); ?>
41
- </h3>
42
- <div class="row">
43
- <div class="col">
44
- <div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/4.png');"></div>
45
- <a class="button button-primary" href="https://wordpress.org/support/plugin/gdpr-framework" target="_blank">
46
- <?= _x('Submit a support request', '(Admin)', 'gdpr-framework'); ?>
47
- </a>
48
- <p>
49
- <?= _x('Found a bug or problem with the plugin? Post in the wordpress.org support forum.', '(Admin)', 'gdpr-framework'); ?>
50
- </p>
51
- </div>
52
- <div class="col">
53
- <div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/5.png');"></div>
54
- <a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" target="_blank">
55
- <?= _x('Request a consultation', '(Admin)', 'gdpr-framework'); ?>
56
- </a>
57
- <p>
58
- <?= _x('Need development or legal assistance in making your site compliant? We can help!', '(Admin)', 'gdpr-framework'); ?>
59
- </p>
60
- </div>
61
- </div>
62
- </section>
1
+ <hr>
2
+
3
+ <section class="section">
4
+ <h3 class="align-center">
5
+ <?= _x('Need more info?', '(Admin)', 'gdpr-framework'); ?>
6
+ </h3>
7
+ <div class="row">
8
+ <div class="col">
9
+ <div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/1.png');"></div>
10
+ <a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-site-owners-guide-to-gdpr/'); ?>" target="_blank">
11
+ <?= _x('Site Owner\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
12
+ </a>
13
+ <p>
14
+ <?= _x('Read the full guide on GDPR compliance.', '(Admin)', 'gdpr-framework'); ?>
15
+ </p>
16
+ </div>
17
+ <div class="col">
18
+ <div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/2.png');"></div>
19
+ <a class="button button-primary" href="<?= gdpr('helpers')->docs('knowledge-base'); ?>" target="_blank">
20
+ <?= _x('Knowledge base', '(Admin)', 'gdpr-framework'); ?>
21
+ </a>
22
+ <p>
23
+ <?= _x('Check out the knowledge base for common questions and answers.', '(Admin)', 'gdpr-framework'); ?>
24
+ </p>
25
+ </div>
26
+ <div class="col">
27
+ <div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/3.png');"></div>
28
+ <a class="button button-primary" href="<?= gdpr('helpers')->docs('developer-docs'); ?>" target="_blank">
29
+ <?= _x('Developer\'s guide to GDPR', '(Admin)', 'gdpr-framework'); ?>
30
+ </a>
31
+ <p>
32
+ <?= _x('We have a thorough guide to help making custom sites compliant.', '(Admin)', 'gdpr-framework'); ?>
33
+ </p>
34
+ </div>
35
+ </div>
36
+ </section>
37
+
38
+ <section class="section">
39
+ <h3 class="align-center">
40
+ <?= _x('Need help?', '(Admin)', 'gdpr-framework'); ?>
41
+ </h3>
42
+ <div class="row">
43
+ <div class="col">
44
+ <div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/4.png');"></div>
45
+ <a class="button button-primary" href="https://wordpress.org/support/plugin/gdpr-framework" target="_blank">
46
+ <?= _x('Submit a support request', '(Admin)', 'gdpr-framework'); ?>
47
+ </a>
48
+ <p>
49
+ <?= _x('Found a bug or problem with the plugin? Post in the wordpress.org support forum.', '(Admin)', 'gdpr-framework'); ?>
50
+ </p>
51
+ </div>
52
+ <div class="col">
53
+ <div class="col_image" style="background-image:url('<?= gdpr('config')->get('plugin.url'); ?>/assets/5.png');"></div>
54
+ <a class="button button-primary" href="<?= gdpr('helpers')->docs('wordpress-gdpr-consultation'); ?>" target="_blank">
55
+ <?= _x('Request a consultation', '(Admin)', 'gdpr-framework'); ?>
56
+ </a>
57
+ <p>
58
+ <?= _x('Need development or legal assistance in making your site compliant? We can help!', '(Admin)', 'gdpr-framework'); ?>
59
+ </p>
60
+ </div>
61
+ </div>
62
+ </section>
views/admin/wizard-buttons.php CHANGED
@@ -1,5 +1,5 @@
1
- <a class="button button-primary" href="<?= esc_url($restartUrl); ?>">
2
- <?= _x('Restart setup wizard', '(Admin)', 'gdpr-framework'); ?>
3
- </a>
4
- <br><br>
5
- <hr>
1
+ <a class="button button-primary" href="<?= esc_url($restartUrl); ?>">
2
+ <?= _x('Restart setup wizard', '(Admin)', 'gdpr-framework'); ?>
3
+ </a>
4
+ <br><br>
5
+ <hr>
views/email/action-export.php CHANGED
@@ -1,9 +1,9 @@
1
- <p>
2
- <?= _x(
3
- sprintf('A data subject (%s) has just downloaded their data in %s format.', esc_html($email), esc_html($format)),
4
- '(Admin)', 'gdpr-framework'
5
- ); ?>
6
- </p>
7
- <p>
8
- <?= _x('This email is just for your information. You don\'t need to take any action', '(Admin)', 'gdpr-framework'); ?>
9
- </p>
1
+ <p>
2
+ <?= _x(
3
+ sprintf('A data subject (%s) has just downloaded their data in %s format.', esc_html($email), esc_html($format)),
4
+ '(Admin)', 'gdpr-framework'
5
+ ); ?>
6
+ </p>
7
+ <p>
8
+ <?= _x('This email is just for your information. You don\'t need to take any action', '(Admin)', 'gdpr-framework'); ?>
9
+ </p>
views/email/action-forget.php CHANGED
@@ -1,13 +1,13 @@
1
- <p>
2
- <?= _x(
3
- sprintf('A data subject (%s) has just removed all their data from your website.', esc_html($email)),
4
- '(Admin)', 'gdpr-framework'
5
- ); ?> <br><br>
6
-
7
- <?php if ($userId): ?>
8
- <?= _x('The data subject had a user account on your website.', '(Admin)', 'gdpr-framework'); ?> (ID: <?= $userId; ?>).
9
- <?php endif; ?>
10
- </p>
11
- <p>
12
- <?= _x('This email is just for your information. You don\'t need to take any action', '(Admin)', 'gdpr-framework'); ?>
13
- </p>
1
+ <p>
2
+ <?= _x(
3
+ sprintf('A data subject (%s) has just removed all their data from your website.', esc_html($email)),
4
+ '(Admin)', 'gdpr-framework'
5
+ ); ?> <br><br>
6
+
7
+ <?php if ($userId): ?>
8
+ <?= _x('The data subject had a user account on your website.', '(Admin)', 'gdpr-framework'); ?> (ID: <?= $userId; ?>).
9
+ <?php endif; ?>
10
+ </p>
11
+ <p>
12
+ <?= _x('This email is just for your information. You don\'t need to take any action', '(Admin)', 'gdpr-framework'); ?>
13
+ </p>
views/email/identify-data-subject.php CHANGED
@@ -1,11 +1,11 @@
1
- <p>
2
- <?= __('Someone has requested access to your data on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
3
- <?= __('If this was a mistake, just ignore this email and nothing will happen.', 'gdpr-framework'); ?> <br/>
4
- <?= __('To manage your data, visit the following address:', 'gdpr-framework'); ?> <br/>
5
- <a href="<?= esc_url($identificationUrl); ?>">
6
- <?= esc_url($identificationUrl); ?>
7
- </a>
8
- </p>
9
- <p>
10
- <?= __('This link is valid for 15 minutes.', 'gdpr-framework'); ?>
11
- </p>
1
+ <p>
2
+ <?= __('Someone has requested access to your data on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
3
+ <?= __('If this was a mistake, just ignore this email and nothing will happen.', 'gdpr-framework'); ?> <br/>
4
+ <?= __('To manage your data, visit the following address:', 'gdpr-framework'); ?> <br/>
5
+ <a href="<?= esc_url($identificationUrl); ?>">
6
+ <?= esc_url($identificationUrl); ?>
7
+ </a>
8
+ </p>
9
+ <p>
10
+ <?= __('This link is valid for 15 minutes.', 'gdpr-framework'); ?>
11
+ </p>
views/email/no-data.php CHANGED
@@ -1,6 +1,6 @@
1
- <p>
2
- <?= __('Someone has requested information about your personal data on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
3
- <?= __('None of your personal data is stored on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
4
- <br/>
5
- <?= __('If this was a mistake or you did not request this email, just ignore it and nothing will happen.', 'gdpr-framework'); ?> <br/>
6
- </p>
1
+ <p>
2
+ <?= __('Someone has requested information about your personal data on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
3
+ <?= __('None of your personal data is stored on', 'gdpr-framework'); ?> <?= esc_html($siteName); ?> <br/>
4
+ <br/>
5
+ <?= __('If this was a mistake or you did not request this email, just ignore it and nothing will happen.', 'gdpr-framework'); ?> <br/>
6
+ </p>
views/email/request-export.php CHANGED
@@ -1,14 +1,14 @@
1
- <p>
2
- <?= _x(
3
- sprintf('A data subject (%s) has requested to download their data in %s format.', esc_html($email), esc_html($format)),
4
- '(Admin)', 'gdpr-framework'
5
- ); ?>
6
- <br>
7
- <?= _x(
8
- sprintf('To access the data subject\'s data, %sclick here%s', "<a href='{$adminTabLink}'>", '</a>'),
9
- '(Admin)', 'gdpr-framework'
10
- ); ?>
11
- </p>
12
- <p>
13
- <?= _x('As a reminder: according to GDPR, you have 30 days to comply.', '(Admin)', 'gdpr-framework'); ?>
14
- </p>
1
+ <p>
2
+ <?= _x(
3
+ sprintf('A data subject (%s) has requested to download their data in %s format.', esc_html($email), esc_html($format)),
4
+ '(Admin)', 'gdpr-framework'
5
+ ); ?>
6
+ <br>
7
+ <?= _x(
8
+ sprintf('To access the data subject\'s data, %sclick here%s', "<a href='{$adminTabLink}'>", '</a>'),
9
+ '(Admin)', 'gdpr-framework'
10
+ ); ?>
11
+ </p>
12
+ <p>
13
+ <?= _x('As a reminder: according to GDPR, you have 30 days to comply.', '(Admin)', 'gdpr-framework'); ?>
14
+ </p>
views/email/request-forget.php CHANGED
@@ -1,14 +1,14 @@
1
- <p>
2
- <?= _x(
3
- sprintf('A data subject (%s) has requested to remove their data.', esc_html($email)),
4
- '(Admin)', 'gdpr-framework'
5
- ); ?>
6
- <br>
7
- <?= _x(
8
- sprintf('To access the data subject\'s data, %sclick here%s', "<a href='{$adminTabLink}'>", '</a>'),
9
- '(Admin)', 'gdpr-framework'
10
- ); ?>
11
- </p>
12
- <p>
13
- <?= _x('As a reminder: according to GDPR, you have 30 days to comply.', '(Admin)', 'gdpr-framework'); ?>
14
- </p>
1
+ <p>
2
+ <?= _x(
3
+ sprintf('A data subject (%s) has requested to remove their data.', esc_html($email)),
4
+ '(Admin)', 'gdpr-framework'
5
+ ); ?>
6
+ <br>
7
+ <?= _x(
8
+ sprintf('To access the data subject\'s data, %sclick here%s', "<a href='{$adminTabLink}'>", '</a>'),
9
+ '(Admin)', 'gdpr-framework'
10
+ ); ?>
11
+ </p>
12
+ <p>
13
+ <?= _x('As a reminder: according to GDPR, you have 30 days to comply.', '(Admin)', 'gdpr-framework'); ?>
14
+ </p>
views/global/country-options.php CHANGED
@@ -1,23 +1,23 @@
1
- <option disabled>-- Choose --</option>
2
-
3
- <optgroup label="Outside EU">
4
- <?php foreach ($outside as $code => $name): ?>
5
- <option
6
- value="<?= esc_attr($code); ?>"
7
- <?= selected($code, $current); ?>
8
- <?php if (in_array($code, ['UK', 'US', 'other'])): ?>
9
- data-show=".gdpr-representative"
10
- <?php endif; ?>
11
- >
12
- <?= esc_html($name); ?>
13
- </option>
14
- <?php endforeach; ?>
15
- </optgroup>
16
-
17
- <optgroup label="European Union">
18
- <?php foreach ($eu as $code => $name): ?>
19
- <option value="<?= esc_attr($code); ?>" <?= selected($code, $current); ?>>
20
- <?= esc_html($name); ?>
21
- </option>
22
- <?php endforeach; ?>
23
- </optgroup>
1
+ <option disabled>-- Choose --</option>
2
+
3
+ <optgroup label="Outside EU">
4
+ <?php foreach ($outside as $code => $name): ?>
5
+ <option
6
+ value="<?= esc_attr($code); ?>"
7
+ <?= selected($code, $current); ?>
8
+ <?php if (in_array($code, ['UK', 'US', 'other'])): ?>
9
+ data-show=".gdpr-representative"
10
+ <?php endif; ?>
11
+ >
12
+ <?= esc_html($name); ?>
13
+ </option>
14
+ <?php endforeach; ?>
15
+ </optgroup>
16
+
17
+ <optgroup label="European Union">
18
+ <?php foreach ($eu as $code => $name): ?>
19
+ <option value="<?= esc_attr($code); ?>" <?= selected($code, $current); ?>>
20
+ <?= esc_html($name); ?>
21
+ </option>
22
+ <?php endforeach; ?>
23
+ </optgroup>
views/global/delete-action.php CHANGED
@@ -1,20 +1,20 @@
1
- <option value="anonymize" <?= selected($deleteAction, 'anonymize'); ?>>
2
- <?= _x('Automatically anonymize data', '(Admin)', 'gdpr-framework') ?>
3
- </option>
4
- <option value="delete" <?= selected($deleteAction, 'delete'); ?> data-show=".js-gdpr-delete-action-reassign">
5
- <?= _x('Automatically delete data', '(Admin)', 'gdpr-framework') ?>
6
- </option>
7
- <option value="anonymize_and_notify" <?= selected($deleteAction, 'anonymize_and_notify'); ?>
8
- data-show=".js-gdpr-delete-action-email">
9
- <?= _x('Automatically anonymize data and notify me via email', '(Admin)', 'gdpr-framework') ?>
10
- </option>
11
- <option value="delete_and_notify" <?= selected($deleteAction, 'delete_and_notify'); ?>
12
- data-show=".js-gdpr-delete-action-email, .js-gdpr-delete-action-reassign">
13
- <?= _x('Automatically delete data and notify me via email', '(Admin)', 'gdpr-framework') ?>
14
- </option>
15
- <option value="notify" <?= selected($deleteAction, 'notify'); ?> data-show=".js-gdpr-delete-action-email">
16
- <?= _x('Only notify me via email', '(Admin)', 'gdpr-framework') ?>
17
- </option>
18
-
19
-
20
-
1
+ <option value="anonymize" <?= selected($deleteAction, 'anonymize'); ?>>
2
+ <?= _x('Automatically anonymize data', '(Admin)', 'gdpr-framework') ?>
3
+ </option>
4
+ <option value="delete" <?= selected($deleteAction, 'delete'); ?> data-show=".js-gdpr-delete-action-reassign">
5
+ <?= _x('Automatically delete data', '(Admin)', 'gdpr-framework') ?>
6
+ </option>
7
+ <option value="anonymize_and_notify" <?= selected($deleteAction, 'anonymize_and_notify'); ?>
8
+ data-show=".js-gdpr-delete-action-email">
9
+ <?= _x('Automatically anonymize data and notify me via email', '(Admin)', 'gdpr-framework') ?>
10
+ </option>
11
+ <option value="delete_and_notify" <?= selected($deleteAction, 'delete_and_notify'); ?>
12
+ data-show=".js-gdpr-delete-action-email, .js-gdpr-delete-action-reassign">
13
+ <?= _x('Automatically delete data and notify me via email', '(Admin)', 'gdpr-framework') ?>
14
+ </option>
15
+ <option value="notify" <?= selected($deleteAction, 'notify'); ?> data-show=".js-gdpr-delete-action-email">
16
+ <?= _x('Only notify me via email', '(Admin)', 'gdpr-framework') ?>
17
+ </option>
18
+
19
+
20
+
views/global/export-action.php CHANGED
@@ -1,14 +1,14 @@
1
- <option value="download" <?= selected($exportAction, 'download'); ?>>
2
- <?= _x('Automatically download data', '(Admin)', 'gdpr-framework') ?>
3
- </option>
4
- <option value="dow