WP DSGVO Tools - Version 2.0.0

Version Description

  • Cookie Notice Popup (Premium Edition)
  • HTML nun im Hinweisfeld fr Kommentare möglich
  • Bugfix: mehr als 10 Anfragen in der Liste bei Datenauszug und Löschanfrage möglich
  • Bugfix: Kompatibilität zum Divi Theme hergestellt
  • Text bei WooCommerce Datenschutzcheckbox nun editierbar
  • Benutzerdefinierte Trackerscripts für Google Analytics und FB Pixel (ab Blog Edition)
  • kleinere Bugfixes und Verbesserungen
Download this release

Release Info

Developer shapepress
Plugin Icon 128x128 WP DSGVO Tools
Version 2.0.0
Comparing to
See all releases

Code changes from version 1.5.6 to 2.0.0

Files changed (110) hide show
  1. README.txt +22 -8
  2. admin/base.php +38 -38
  3. admin/class-sp-dsgvo-admin-action.php +24 -24
  4. admin/class-sp-dsgvo-admin-tab.php +2 -2
  5. admin/class-sp-dsgvo-admin.php +48 -37
  6. admin/css/sp-dsgvo-admin.css +37 -4
  7. admin/images/logobackuppng +0 -0
  8. admin/images/logobackupsvg +9 -9
  9. admin/js/sp-dsgvo-admin.js +113 -2
  10. admin/tabs/common-settings/class-sp-dsgvo-common-settings-action.php +43 -50
  11. admin/tabs/common-settings/class-sp-dsgvo-common-settings-activate-action.php +99 -86
  12. admin/tabs/common-settings/class-sp-dsgvo-common-settings-tab.php +17 -14
  13. admin/tabs/common-settings/page.php +218 -200
  14. admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-action.php +78 -60
  15. admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-tab.php +17 -14
  16. admin/tabs/cookie-notice/page.php +674 -434
  17. admin/tabs/gravity-forms/class-sp-dsgvo-gravity-forms-tab.php +6 -3
  18. admin/tabs/gravity-forms/page.php +13 -21
  19. admin/tabs/imprint/class-sp-dsgvo-imprint-tab.php +7 -4
  20. admin/tabs/imprint/page.php +21 -21
  21. admin/tabs/integrations/class-sp-dsgvo-integrations-tab.php +5 -3
  22. admin/tabs/integrations/page.php +3 -3
  23. admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-action.php +8 -1
  24. admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-tab.php +6 -3
  25. admin/tabs/privacy-policy/page.php +46 -18
  26. admin/tabs/services/class-sp-dsgvo-add-service-action.php +6 -3
  27. admin/tabs/services/class-sp-dsgvo-delete-service-action.php +4 -4
  28. admin/tabs/services/class-sp-dsgvo-services-action.php +5 -2
  29. admin/tabs/services/class-sp-dsgvo-services-tab.php +8 -5
  30. admin/tabs/services/page.php +83 -46
  31. admin/tabs/setup/class-sp-dsgvo-create-page-action.php +11 -13
  32. admin/tabs/setup/class-sp-dsgvo-setup-tab.php +6 -4
  33. admin/tabs/setup/page.php +4 -99
  34. admin/tabs/subject-access-request/class-sp-dsgvo-subject-access-request-action.php +5 -0
  35. admin/tabs/subject-access-request/class-sp-dsgvo-subject-access-request-tab.php +7 -4
  36. admin/tabs/subject-access-request/page.php +76 -53
  37. admin/tabs/super-unsubscribe/class-sp-dsgvo-dismiss-unsubscribe-action.php +16 -0
  38. admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-action.php +9 -5
  39. admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-tab.php +6 -4
  40. admin/tabs/super-unsubscribe/page.php +144 -83
  41. includes/class-sp-dsgvo-ajax-action.php +21 -15
  42. includes/class-sp-dsgvo-cron.php +2 -2
  43. includes/class-sp-dsgvo-data-collecter.php +456 -424
  44. includes/class-sp-dsgvo-log.php +121 -121
  45. includes/class-sp-dsgvo-mail.php +32 -23
  46. includes/class-sp-dsgvo-pdf.php +70 -70
  47. includes/class-sp-dsgvo-settings.php +92 -44
  48. includes/class-sp-dsgvo-slim-model.php +7 -4
  49. includes/class-sp-dsgvo.php +32 -24
  50. includes/cron/do-delete-data-request.php +12 -12
  51. includes/cron/do-subject-access-request.php +9 -9
  52. includes/helpers.php +318 -110
  53. includes/html/index-footer.php +37 -0
  54. includes/html/index-header.php +429 -0
  55. includes/integrations/bbpress/BbpressIntegration.php +126 -0
  56. includes/integrations/buddypress/BuddyPressIntegration.php +210 -0
  57. includes/integrations/cf7/Cf7Integration.php +145 -141
  58. includes/integrations/mailchimp/MailchimpAPI.php +445 -0
  59. includes/integrations/mailchimp/MailchimpIntegration.php +54 -0
  60. includes/integrations/mailchimp/page.php +20 -0
  61. includes/integrations/woocommerce/WoocommerceIntegration.php +141 -0
  62. includes/models/subject-access-request.php +17 -17
  63. includes/models/unsubscriber.php +19 -20
  64. languages/shapepress-dsgvo-de_DE.mo +0 -0
  65. languages/shapepress-dsgvo-de_DE.po +2216 -0
  66. languages/shapepress-dsgvo-en_EN.mo +0 -0
  67. languages/shapepress-dsgvo-en_EN.po +1967 -0
  68. public/actions/popup-accept.php +19 -0
  69. public/actions/user-permissions.php +22 -5
  70. public/class-sp-dsgvo-public.php +616 -435
  71. public/css/simplebar.css +105 -0
  72. public/css/sp-dsgvo-public.css +303 -10
  73. public/images/logo-md.png +0 -0
  74. public/js/simplebar.js +17 -0
  75. public/js/sp-dsgvo-public.js +349 -184
  76. public/shortcodes/decline-permission.php +1 -1
  77. public/shortcodes/display-services.php +1 -1
  78. public/shortcodes/explicit-permission.php +2 -2
  79. public/shortcodes/imprint.php +6 -0
  80. public/shortcodes/privacy-policy.php +6 -1
  81. public/shortcodes/privacy-settings-form-alt.php +89 -0
  82. public/shortcodes/privacy-settings-form.php +42 -40
  83. public/shortcodes/subject-access-request/download-subject-access-request.php +4 -4
  84. public/shortcodes/subject-access-request/subject-access-request-action.php +10 -2
  85. public/shortcodes/subject-access-request/subject-access-request.php +10 -10
  86. public/shortcodes/super-unsubscribe/unsubscribe-confirm-action.php +2 -2
  87. public/shortcodes/super-unsubscribe/unsubscribe-form-action.php +14 -4
  88. public/shortcodes/super-unsubscribe/unsubscribe-form.php +11 -11
  89. sp-dsgvo.php +80 -77
  90. templates/de_DE/emails/feedback.php +17 -0
  91. templates/de_DE/emails/footer.php +11 -0
  92. templates/de_DE/emails/header.php +220 -0
  93. templates/de_DE/emails/subject-access-request.php +116 -0
  94. templates/de_DE/emails/super-unsubscribe.php +106 -0
  95. templates/de_DE/imprint.txt +18 -0
  96. templates/de_DE/privacy-policy.txt +153 -0
  97. templates/en_EN/emails/feedback.php +17 -0
  98. templates/en_EN/emails/footer.php +11 -0
  99. templates/en_EN/emails/header.php +220 -0
  100. templates/en_EN/emails/subject-access-request.php +116 -0
  101. templates/en_EN/emails/super-unsubscribe.php +106 -0
  102. templates/en_EN/imprint.txt +18 -0
  103. templates/en_EN/privacy-policy.txt +156 -0
  104. templates/en_US/emails/feedback.php +17 -0
  105. templates/en_US/emails/footer.php +11 -0
  106. templates/en_US/emails/header.php +220 -0
  107. templates/en_US/emails/subject-access-request.php +116 -0
  108. templates/en_US/emails/super-unsubscribe.php +106 -0
  109. templates/en_US/imprint.txt +18 -0
  110. templates/en_US/privacy-policy.txt +156 -0
README.txt CHANGED
@@ -1,10 +1,10 @@
1
  === WP DSGVO Tools ===
2
- Contributors: Shapepress, shapepresssupport
3
  Donate link: https://wp-dsgvo.eu
4
  Tags: gdpr, dsgvo, datenschutz, wordpress, compliance, data
5
  Requires at least: 3.0.1
6
- Tested up to: 4.9.6
7
- Stable tag: 1.5.6
8
  Requires PHP: 5.6.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -24,7 +24,8 @@ Features
24
  * Cookie Notice mit selektiven Opt-In & Opt-Out
25
  * Recht auf Vergessenheit (mit Zeit Option)
26
  * Userdaten Auskunft (als PDF und JSON) & Löschung
27
- * Contact Form 7 Integration (Flamingo und Acceptance Checkbox)
 
28
  * Blog Kommentare Checkbox für DSGVO Zustimmung
29
  * Pseudonomisierung
30
  * VdV (Verzeichnis der Verarbeitungstätigkeiten)
@@ -36,19 +37,19 @@ Features
36
  * Alle Features der Free Edition
37
  * **anpassbare Cookie Notice**
38
  * Texte der Checkbox bei den Kommentaren anpassbar
39
- * **Overlay** bei Cookie Notice um ein Interagieren vor Zustimmung/Ablehnung zu verhindern
 
40
 
41
  **Premium Edition**
42
  * Alle Features der Free und Blog Edition
 
43
  * **Woocommerce Integration**
44
  * Gravity Forms Integration
45
- * **Filter zum Erweitern des Datenauszugs und der Löschanfrage**
46
  * Mailchimp Integration
47
  * **bbPress** Integration
48
  * **buddyPress** Integration
49
  * **Cookie Notice anpassbar**
50
  * **Email Benachrichtigung bei neuen Anfragen**
51
- * **WPML** Unterstützung inkl. englischer Datenschutztexte (String Translations)
52
  * Support Forum & professioneller Support
53
  * 12 Monate Premium Updates
54
 
@@ -76,9 +77,21 @@ WICHTIG: Vor der Installation bitte alle bisher aktivierten Cookie Notice Plugin
76
 
77
  == Changelog ==
78
 
 
 
 
 
 
 
 
 
 
79
  = 1.5.6 =
80
  * Aktivierungsprobleme behoben
81
 
 
 
 
82
  = 1.5.0 =
83
  * WPML Unterstützung (nur Premium) inkl. englischer Datenschutztexte
84
  * WooCommerce Option zur Zustimmung der Datenschutzbestimmungen beim Checkout (nur Premium)
@@ -102,7 +115,7 @@ WICHTIG: Vor der Installation bitte alle bisher aktivierten Cookie Notice Plugin
102
  * Korrektur Email Betreff bei Löschanfrage
103
 
104
  = 1.4.3 =
105
- * Feature Request: Overlay bei Cookie Notice um ein Agieren vor Zustimmung/Ablehnung zu verhindern
106
 
107
  = 1.4.2 =
108
  * Problem mit Cookie Notice behoben
@@ -130,6 +143,7 @@ WICHTIG: Vor der Installation bitte alle bisher aktivierten Cookie Notice Plugin
130
  * Überarbeitung des Datenauszug Templates
131
  * Ergänzung der Kommentartexte bei eingeloggten User beim Datenauszug
132
  * Skriptverbesserung Kommentarcheckbox
 
133
 
134
  = 1.3.5 =
135
  * Verbesserung bei Kommentarcheckbox
1
  === WP DSGVO Tools ===
2
+ Contributors: Shapepress
3
  Donate link: https://wp-dsgvo.eu
4
  Tags: gdpr, dsgvo, datenschutz, wordpress, compliance, data
5
  Requires at least: 3.0.1
6
+ Tested up to: 4.9.8
7
+ Stable tag: 2.0.0
8
  Requires PHP: 5.6.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
24
  * Cookie Notice mit selektiven Opt-In & Opt-Out
25
  * Recht auf Vergessenheit (mit Zeit Option)
26
  * Userdaten Auskunft (als PDF und JSON) & Löschung
27
+ * **WPML** Unterstützung inkl. englischer Datenschutztexte (String Translations)
28
+ * Contact Form 7 Integration
29
  * Blog Kommentare Checkbox für DSGVO Zustimmung
30
  * Pseudonomisierung
31
  * VdV (Verzeichnis der Verarbeitungstätigkeiten)
37
  * Alle Features der Free Edition
38
  * **anpassbare Cookie Notice**
39
  * Texte der Checkbox bei den Kommentaren anpassbar
40
+ * **Benutzerdefinierte Trackerscripts für Google Analytics und FB Pixel möglich**
41
+ * **Overlay** bei Cookie Notice um ein Agieren vor Zustimmung/Ablehnung zu verhindern
42
 
43
  **Premium Edition**
44
  * Alle Features der Free und Blog Edition
45
+ * Popup für Cookie Notice
46
  * **Woocommerce Integration**
47
  * Gravity Forms Integration
 
48
  * Mailchimp Integration
49
  * **bbPress** Integration
50
  * **buddyPress** Integration
51
  * **Cookie Notice anpassbar**
52
  * **Email Benachrichtigung bei neuen Anfragen**
 
53
  * Support Forum & professioneller Support
54
  * 12 Monate Premium Updates
55
 
77
 
78
  == Changelog ==
79
 
80
+ = 2.0.0 =
81
+ * Cookie Notice Popup (Premium Edition)
82
+ * HTML nun im Hinweisfeld f�r Kommentare möglich
83
+ * Bugfix: mehr als 10 Anfragen in der Liste bei Datenauszug und Löschanfrage möglich
84
+ * Bugfix: Kompatibilität zum Divi Theme hergestellt
85
+ * Text bei WooCommerce Datenschutzcheckbox nun editierbar
86
+ * Benutzerdefinierte Trackerscripts für Google Analytics und FB Pixel (ab Blog Edition)
87
+ * kleinere Bugfixes und Verbesserungen
88
+
89
  = 1.5.6 =
90
  * Aktivierungsprobleme behoben
91
 
92
+ = 1.5.1 =
93
+ * Bugfixes
94
+
95
  = 1.5.0 =
96
  * WPML Unterstützung (nur Premium) inkl. englischer Datenschutztexte
97
  * WooCommerce Option zur Zustimmung der Datenschutzbestimmungen beim Checkout (nur Premium)
115
  * Korrektur Email Betreff bei Löschanfrage
116
 
117
  = 1.4.3 =
118
+ * Feature Request: Overlay bei Cookie Notice um ein Agieren vor Zustimmung/Ablehnung zu verhindern
119
 
120
  = 1.4.2 =
121
  * Problem mit Cookie Notice behoben
143
  * Überarbeitung des Datenauszug Templates
144
  * Ergänzung der Kommentartexte bei eingeloggten User beim Datenauszug
145
  * Skriptverbesserung Kommentarcheckbox
146
+ * Filter zur Erweiterung des Datenauszugs und der Löschanfrage
147
 
148
  = 1.3.5 =
149
  * Verbesserung bei Kommentarcheckbox
admin/base.php CHANGED
@@ -1,5 +1,5 @@
1
  <div class="wrap dsgvo-wrap" style="">
2
- <h2>WP DSGVO Tools</h2>
3
 
4
  <h2 class="nav-tab-wrapper">
5
  <?php foreach($tabs as $t): ?>
@@ -12,12 +12,12 @@
12
  <?php endforeach; ?>
13
  </h2>
14
 
15
- <?php
16
- if (isset($tabs[$tab])) {
17
- $tabs[$tab]->page();
18
- } else {
19
- $tabs['common-settings']->page();
20
- }
21
  ?>
22
  </div>
23
 
@@ -29,81 +29,81 @@
29
  <input type="hidden" name="action" value="admin-common-action">
30
 
31
  <div style="border: dashed 1px black; padding: 10px;">
32
- <span style="font-size: 1.2rem; line-height: 1.3rem;">WP DSGVO Tools
33
- ist unverbindlich &amp; ersetzt keine Expertenberatung</span>
34
  </div>
35
- <h2 style="margin-bottom: 0">DSGVO Website Selbstcheck</h2>
36
- <small>(Umfasst nur Ihren Webauftritt!)</small>
37
  <ul id="dsgvo-checklist">
38
  <li><input id="cb_spdsgvo_cl_vdv" name="cb_spdsgvo_cl_vdv"
39
  type="checkbox" class="cbChecklist" value="1"
40
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_vdv') === '1')? ' checked ' : ''; ?> /><span>
41
- VdV (Verzeichnis der Verarbeitungst&auml;tigkeiten) <a href="https://www.wp-dsgvo.eu/spdsgvo-bin/wp-dsgvp-tools-vdv.xls">heruntergeladen</a>
42
- &amp; ausgef&uuml;llt
43
  </span></li>
44
  <li><input id="cb_spdsgvo_cl_filled_out"
45
  name="cb_spdsgvo_cl_filled_out" type="checkbox" class="cbChecklist"
46
  value="1"
47
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_filled_out') === '1')? ' checked ' : ''; ?> /><span>
48
- WP DSGVO Tools Plugin vollst&auml;ndig ausgef&uuml;llt</span></li>
49
  <li><input id="cb_spdsgvo_cl_maintainance"
50
  name="cb_spdsgvo_cl_maintainance" type="checkbox"
51
  class="cbChecklist" value="1"
52
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_maintainance') === '1')? ' checked ' : ''; ?> /><span>
53
- Monatliche Wartung der Website (Wartungsvertrag beim Webdesigner)</span></li>
54
  <li><input id="cb_spdsgvo_cl_security" name="cb_spdsgvo_cl_security"
55
  type="checkbox" class="cbChecklist" value="1"
56
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_security') === '1')? ' checked ' : ''; ?> /><span>
57
- Sicherheitsvorkehrungen (Starke Passw&ouml;rter, wer hat
58
- Zugriff,...)</span></li>
59
  <li><input id="cb_spdsgvo_cl_hosting" name="cb_spdsgvo_cl_hosting"
60
  type="checkbox" class="cbChecklist" value="1"
61
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_hosting') === '1')? ' checked ' : ''; ?> /><span>
62
- DSGVO konformes und sicheres Web-Hosting? Unsere Empfehlung: <a
63
  href="https://raidboxes.de/?aid=14330" target="_blank">Raidboxes</a>
64
  </span></li>
65
  <li><input id="cb_spdsgvo_cl_plugins" name="cb_spdsgvo_cl_plugins"
66
  type="checkbox" class="cbChecklist" value="1"
67
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_plugins') === '1')? ' checked ' : ''; ?> /><span>
68
- Sicherheit von nicht unterst&uuml;tzten Plugins pr&uuml;fen</span></li>
69
  <li><input id="cb_spdsgvo_cl_experts" name="cb_spdsgvo_cl_experts"
70
  type="checkbox" class="cbChecklist" value="1"
71
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_experts') === '1')? ' checked ' : ''; ?> /><span>
72
  <a href="https://www.wp-dsgvo.eu/experten/"
73
- target="_blank">Expertenberatung</a> angefordert
74
  </span></li>
75
  </ul>
76
- <?php if (isLicenceValid() == false) : ?>
77
- <h1 style="margin-top: 1em">Neu: Blog Edition!</h1>
78
  <ul id="dsgvo-premium-featurelist">
79
- <li>Stylebare Cookie Notice: Passe das Look &amp; Feel deiner Wordpress Page an!</li>
80
- <li>Texte bei Kommentarcheckbox anpassbar</li>
81
  </ul>
82
  <div>
83
  <a href="https://www.wp-dsgvo.eu/shop" target="_blank"
84
- class="button button-primary" style="font-size: 1rem">Jetzt die Blog Edition holen</a>
85
  </div>
86
  <?php endif;?>
87
- <h1 style="margin-top: 1em">Upgrade to Premium</h1>
 
88
  <ul id="dsgvo-premium-featurelist">
89
- <li>Support &amp; Community</li>
90
- <li>Woocommerce Integration</li>
91
- <li>Automatische Userdaten Ausz&uuml;ge</li>
92
- <li>Email Benachrichtigungen</li>
93
- <li>Style &amp; Farbanpassungen (Ab Blog Edition)</li>
94
- <li>Texte bei Kommentarcheckbox anpassbar (Ab Blog Edition)</li>
 
95
  </ul>
96
  <div>
97
  <a href="https://www.wp-dsgvo.eu/shop" target="_blank"
98
- class="button button-primary" style="font-size: 1rem">Hol dir jetzt
99
- unser Premium Plugin</a>
100
  </div>
101
  <ul id="dsgvo-premium-featurelist-tipps">
102
- <li>FAQ &amp; Checklisten</li>
103
- <li>DSGVO Experten buchen</li>
104
- <li>Rechtliche Beratung buchen</li>
105
  </ul>
 
106
 
107
 
108
  </form>
109
- </div>
1
  <div class="wrap dsgvo-wrap" style="">
2
+ <h2><?php _e('WP DSGVO Tools', 'shapepress-dsgvo'); ?></h2>
3
 
4
  <h2 class="nav-tab-wrapper">
5
  <?php foreach($tabs as $t): ?>
12
  <?php endforeach; ?>
13
  </h2>
14
 
15
+ <?php
16
+ if (isset($tabs[$tab])) {
17
+ $tabs[$tab]->page();
18
+ } else {
19
+ $tabs['common-settings']->page();
20
+ }
21
  ?>
22
  </div>
23
 
29
  <input type="hidden" name="action" value="admin-common-action">
30
 
31
  <div style="border: dashed 1px black; padding: 10px;">
32
+ <span style="font-size: 1.2rem; line-height: 1.3rem;"><?php _e('WP DSGVO Tools is not binding and does not replace expert advice','shapepress-dsgvo')?></span>
 
33
  </div>
34
+ <h2 style="margin-bottom: 0"><?php _e('GDPR website self check','shapepress-dsgvo')?></h2>
35
+ <small>(<?php _e('Includes only your web presence!','shapepress-dsgvo')?>)</small>
36
  <ul id="dsgvo-checklist">
37
  <li><input id="cb_spdsgvo_cl_vdv" name="cb_spdsgvo_cl_vdv"
38
  type="checkbox" class="cbChecklist" value="1"
39
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_vdv') === '1')? ' checked ' : ''; ?> /><span>
40
+ <?php _e('VdV (directory of processing times)','shapepress-dsgvo')?> <a href="https://www.wp-dsgvo.eu/spdsgvo-bin/wp-dsgvp-tools-vdv.xls"><?php _e('downloaded','shapepress-dsgvo')?></a>
41
+ &amp; <?php _e('filled','shapepress-dsgvo')?>
42
  </span></li>
43
  <li><input id="cb_spdsgvo_cl_filled_out"
44
  name="cb_spdsgvo_cl_filled_out" type="checkbox" class="cbChecklist"
45
  value="1"
46
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_filled_out') === '1')? ' checked ' : ''; ?> /><span>
47
+ <?php _e('WP DSGVO Tools plugin completely filled','shapepress-dsgvo')?></span></li>
48
  <li><input id="cb_spdsgvo_cl_maintainance"
49
  name="cb_spdsgvo_cl_maintainance" type="checkbox"
50
  class="cbChecklist" value="1"
51
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_maintainance') === '1')? ' checked ' : ''; ?> /><span>
52
+ <?php _e('Monthly maintenance of the website (maintenance contract with the web designer)','shapepress-dsgvo')?></span></li>
53
  <li><input id="cb_spdsgvo_cl_security" name="cb_spdsgvo_cl_security"
54
  type="checkbox" class="cbChecklist" value="1"
55
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_security') === '1')? ' checked ' : ''; ?> /><span>
56
+ <?php _e('Security Precautions (strong passwords, who has access, ...)','shapepress-dsgvo')?></span></li>
 
57
  <li><input id="cb_spdsgvo_cl_hosting" name="cb_spdsgvo_cl_hosting"
58
  type="checkbox" class="cbChecklist" value="1"
59
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_hosting') === '1')? ' checked ' : ''; ?> /><span>
60
+ <?php _e('GDPR compliant and secure web hosting? Our recommendation:','shapepress-dsgvo')?> <a
61
  href="https://raidboxes.de/?aid=14330" target="_blank">Raidboxes</a>
62
  </span></li>
63
  <li><input id="cb_spdsgvo_cl_plugins" name="cb_spdsgvo_cl_plugins"
64
  type="checkbox" class="cbChecklist" value="1"
65
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_plugins') === '1')? ' checked ' : ''; ?> /><span>
66
+ <?php _e('Check the security of unsupported plugins','shapepress-dsgvo')?></span></li>
67
  <li><input id="cb_spdsgvo_cl_experts" name="cb_spdsgvo_cl_experts"
68
  type="checkbox" class="cbChecklist" value="1"
69
  <?= (SPDSGVOSettings::get('cb_spdsgvo_cl_experts') === '1')? ' checked ' : ''; ?> /><span>
70
  <a href="https://www.wp-dsgvo.eu/experten/"
71
+ target="_blank"><?php _e('Expert advice','shapepress-dsgvo')?></a> <?php _e('requested','shapepress-dsgvo')?>
72
  </span></li>
73
  </ul>
74
+ <?php if (isValidPremiumEdition() == false && isValidBlogEdition() == false) : ?>
75
+ <h1 style="margin-top: 1em"><?php _e('Blog Edition','shapepress-dsgvo')?></h1>
76
  <ul id="dsgvo-premium-featurelist">
77
+ <li><?php _e('Stylish Cookie Notice: Customize the look & feel of your Wordpress Page!','shapepress-dsgvo')?></li>
78
+ <li><?php _e('Texts customizable with comment checkbox','shapepress-dsgvo')?></li>
79
  </ul>
80
  <div>
81
  <a href="https://www.wp-dsgvo.eu/shop" target="_blank"
82
+ class="button button-primary" style="font-size: 1rem"><?php _e('Get the Blog Edition now','shapepress-dsgvo')?></a>
83
  </div>
84
  <?php endif;?>
85
+ <?php if(isValidPremiumEdition() == false):?>
86
+ <h1 style="margin-top: 1em"><?php _e('Upgrade to Premium','shapepress-dsgvo')?></h1>
87
  <ul id="dsgvo-premium-featurelist">
88
+ <li><?php _e('Cookie Notice Popup','shapepress-dsgvo')?></li>
89
+ <li><?php _e('Support & Community','shapepress-dsgvo')?></li>
90
+ <li><?php _e('More Integrations','shapepress-dsgvo')?></li>
91
+ <li><?php _e('Automatic user data reports','shapepress-dsgvo')?></li>
92
+ <li><?php _e('Email notifications','shapepress-dsgvo')?></li>
93
+ <li><?php _e('Style & Customization (from Blog Edition)','shapepress-dsgvo')?></li>
94
+ <li><?php _e('and much more','shapepress-dsgvo')?></li>
95
  </ul>
96
  <div>
97
  <a href="https://www.wp-dsgvo.eu/shop" target="_blank"
98
+ class="button button-primary" style="font-size: 1rem"><?php _e('Get Premium version now','shapepress-dsgvo')?></a>
 
99
  </div>
100
  <ul id="dsgvo-premium-featurelist-tipps">
101
+ <li><?php _e('FAQ & checklists','shapepress-dsgvo')?></li>
102
+ <li><?php _e('GDPR experts booking','shapepress-dsgvo')?></li>
103
+ <li><?php _e('Book legal advice','shapepress-dsgvo')?></li>
104
  </ul>
105
+ <?php endif;?>
106
 
107
 
108
  </form>
109
+ </div>
admin/class-sp-dsgvo-admin-action.php CHANGED
@@ -1,24 +1,24 @@
1
- <?php
2
-
3
- Class SPDSGVOAdminAction extends SPDSGVOAjaxAction{
4
-
5
- protected $action = 'admin-common-action';
6
-
7
- protected function run(){
8
- $this->requireAdmin();
9
-
10
- SPDSGVOSettings::set('cb_spdsgvo_cl_vdv', $this->get('cb_spdsgvo_cl_vdv', '0'));
11
- SPDSGVOSettings::set('cb_spdsgvo_cl_filled_out', $this->get('cb_spdsgvo_cl_filled_out', '0'));
12
- SPDSGVOSettings::set('cb_spdsgvo_cl_maintainance', $this->get('cb_spdsgvo_cl_maintainance', '0'));
13
- SPDSGVOSettings::set('cb_spdsgvo_cl_security', $this->get('cb_spdsgvo_cl_security', '0'));
14
- SPDSGVOSettings::set('cb_spdsgvo_cl_hosting', $this->get('cb_spdsgvo_cl_hosting', '0'));
15
- SPDSGVOSettings::set('cb_spdsgvo_cl_plugins', $this->get('cb_spdsgvo_cl_plugins', '0'));
16
- SPDSGVOSettings::set('cb_spdsgvo_cl_experts', $this->get('cb_spdsgvo_cl_experts', '0'));
17
-
18
- $this->returnBack();
19
- }
20
- }
21
-
22
- SPDSGVOAdminAction::listen();
23
-
24
-
1
+ <?php
2
+
3
+ Class SPDSGVOAdminAction extends SPDSGVOAjaxAction{
4
+
5
+ protected $action = 'admin-common-action';
6
+
7
+ protected function run(){
8
+ $this->requireAdmin();
9
+
10
+ SPDSGVOSettings::set('cb_spdsgvo_cl_vdv', $this->get('cb_spdsgvo_cl_vdv', '0'));
11
+ SPDSGVOSettings::set('cb_spdsgvo_cl_filled_out', $this->get('cb_spdsgvo_cl_filled_out', '0'));
12
+ SPDSGVOSettings::set('cb_spdsgvo_cl_maintainance', $this->get('cb_spdsgvo_cl_maintainance', '0'));
13
+ SPDSGVOSettings::set('cb_spdsgvo_cl_security', $this->get('cb_spdsgvo_cl_security', '0'));
14
+ SPDSGVOSettings::set('cb_spdsgvo_cl_hosting', $this->get('cb_spdsgvo_cl_hosting', '0'));
15
+ SPDSGVOSettings::set('cb_spdsgvo_cl_plugins', $this->get('cb_spdsgvo_cl_plugins', '0'));
16
+ SPDSGVOSettings::set('cb_spdsgvo_cl_experts', $this->get('cb_spdsgvo_cl_experts', '0'));
17
+
18
+ $this->returnBack();
19
+ }
20
+ }
21
+
22
+ SPDSGVOAdminAction::listen();
23
+
24
+
admin/class-sp-dsgvo-admin-tab.php CHANGED
@@ -37,10 +37,10 @@ abstract class SPDSGVOAdminTab{
37
  }
38
 
39
  public function isHighlighted(){
40
- if(!isset($this->$isHighlighted)){
41
  return false;
42
  }
43
 
44
- return $this->$isHighlighted;
45
  }
46
  }
37
  }
38
 
39
  public function isHighlighted(){
40
+ if(!isset($this->isHighlighted)){
41
  return false;
42
  }
43
 
44
+ return $this->isHighlighted;
45
  }
46
  }
admin/class-sp-dsgvo-admin.php CHANGED
@@ -46,11 +46,11 @@ class SPDSGVOAdmin{
46
  'integrations' => new SPDSGVOIntegrationsTab
47
  )
48
  );
49
-
50
- if (enablePremiumFeatures())
51
  {
52
  $this->tabs = array_merge( $this->tabs,SPDSGVOIntegration::getAllIntegrations());
53
-
54
  // Gravity Forms Tab
55
  if(class_exists('GFAPI')){
56
  $this->tabs = array_merge( $this->tabs, array('gravity-forms' => new SPDSGVOGravityFormsTab) );
@@ -60,28 +60,28 @@ class SPDSGVOAdmin{
60
  //$this->tabs = array_merge( $this->tabs, array('premium' => new SPDSGVOPremiumTab) );
61
  }
62
 
63
- public function menuItem()
64
  {
65
  global $submenu;
66
-
67
  $svg = 'data:image/svg+xml;base64,'. base64_encode(file_get_contents(SPDSGVO::pluginDir('admin/images/logo.svg')));
68
  add_menu_page('WP DSGVO Tools', 'WP DSGVO Tools', 'manage_options', 'sp-dsgvo', array($this, 'adminPage'), $svg);
69
 
70
  //add_submenu_page('sp-dsgvo', 'Terms & Conditions', 'Terms & Conditions', 'manage_options', 'admin.php?page=sp-dsgvo&tab=terms-conditions');
71
- add_submenu_page('sp-dsgvo', 'Datenschutz', 'Datenschutz', 'manage_options', 'admin.php?page=sp-dsgvo&tab=privacy-policy');
72
- add_submenu_page('sp-dsgvo', 'Impressum', 'Impressum', 'manage_options', 'admin.php?page=sp-dsgvo&tab=imprint');
73
  //add_submenu_page('sp-dsgvo', 'Integrations', 'Integrations', 'manage_options', 'admin.php?page=sp-dsgvo&tab=integrations');
74
-
75
  $index = 8;
76
  $menu_slug = 'sp-dsgvo';
77
-
78
- $submenu[$menu_slug][$index++] = array('Experteninfo', 'manage_options', 'https://wp-dsgvo.eu/experten');
79
- $submenu[$menu_slug][$index++] = array('Rechtsberatung', 'manage_options', 'https://wp-dsgvo.eu/tipps-hilfe');
80
- $submenu[$menu_slug][$index++] = array('FAQ', 'manage_options', 'https://wp-dsgvo.eu/faq');
81
- $submenu[$menu_slug][$index++] = array('&Uuml;ber uns', 'manage_options', 'https://wp-dsgvo.eu/about');
82
  }
83
-
84
-
85
  public function adminPage(){
86
  $tabs = $this->tabs;
87
 
@@ -114,7 +114,18 @@ class SPDSGVOAdmin{
114
  * @since 1.0.0
115
  */
116
  public function enqueue_scripts(){
 
 
 
117
  wp_enqueue_script(sp_dsgvo_VERSION, plugin_dir_url(__FILE__). 'js/sp-dsgvo-admin.js', array('jquery'), sp_dsgvo_VERSION, false );
 
 
 
 
 
 
 
 
118
  }
119
 
120
 
@@ -128,27 +139,27 @@ class SPDSGVOAdmin{
128
  public function addCustomPostStates($states, $post){
129
 
130
  $pages = array(
131
- SPDSGVOSettings::get('user_permissions_page') => 'Datenschutzeinstellungen Benutzer Seite',
132
- SPDSGVOSettings::get('super_unsubscribe_page') => 'L&ouml;schanfrage Seite',
133
- SPDSGVOSettings::get('terms_conditions_page') => 'AGB Seite',
134
- SPDSGVOSettings::get('explicit_permission_page') => 'Explizite Berechtigungen Seite',
135
- SPDSGVOSettings::get('opt_out_page') => 'Opt Out Seite',
136
- SPDSGVOSettings::get('privacy_policy_page') => 'Datenschutz Seite',
137
- SPDSGVOSettings::get('sar_page') => 'Datenauszug Seite',
138
- SPDSGVOSettings::get('imprint_page') => 'Impressum Seite',
139
  );
140
 
141
  if(in_array($post->ID, array_keys($pages))){
142
- $states[] = $pages[$post->ID];
143
- }
144
 
145
  return $states;
146
- }
147
 
148
 
149
  /**
150
  * Filter: Adds Extra Column to users table
151
- *
152
  * @since 1.0.0
153
  * @author Shapepress eU
154
  */
@@ -159,7 +170,7 @@ class SPDSGVOAdmin{
159
 
160
  /**
161
  * Filter: Adds Extra Column to users table
162
- *
163
  * @since 1.0.0
164
  * @author Shapepress eU
165
  */
@@ -174,29 +185,29 @@ class SPDSGVOAdmin{
174
  }
175
 
176
  return '';
177
- }
178
 
179
 
180
  /**
181
  * Hook: Displays User Permission status
182
- *
183
  * @since 1.0.0
184
  * @author Shapepress eU
185
  * @param WP_User $user
186
  */
187
  public function showPermissonStatus($user){
188
  ?>
189
- <h2>Datenschutzeinstellungen des Benutzers</h2>
190
  <table class="form-table">
191
  <tbody>
192
 
193
  <tr class="user-profile-picture">
194
- <th>Dienste</th>
195
  <td>
196
  <ul>
197
  <?php foreach(SPDSGVOSettings::get('services') as $slug => $service): ?>
198
  <li>
199
- <strong><?= $service['name'] ?>:</strong>
200
  <?= (hasUserGivenPermissionFor($service['slug']))? '<span class="dashicons dashicons-yes"></span>' : '<span class="dashicons dashicons-no"></span>' ?>
201
  </li>
202
  <?php endforeach; ?>
@@ -224,7 +235,7 @@ class SPDSGVOAdmin{
224
  // DELETE IP and USER AGENT
225
  if( SPDSGVOSettings::get('gf_no_ip_meta') ){
226
  GFAPI::update_entry_property( $entry['id'], 'ip', '' );
227
- GFAPI::update_entry_property( $entry['id'], 'user_agent', '' );
228
  }
229
 
230
  // update fields to 'removed' that have been selected as 'do not save'
@@ -254,7 +265,7 @@ class SPDSGVOAdmin{
254
 
255
  }
256
  }
257
-
258
- }
259
-
260
  }
46
  'integrations' => new SPDSGVOIntegrationsTab
47
  )
48
  );
49
+
50
+ if (isValidPremiumEdition())
51
  {
52
  $this->tabs = array_merge( $this->tabs,SPDSGVOIntegration::getAllIntegrations());
53
+
54
  // Gravity Forms Tab
55
  if(class_exists('GFAPI')){
56
  $this->tabs = array_merge( $this->tabs, array('gravity-forms' => new SPDSGVOGravityFormsTab) );
60
  //$this->tabs = array_merge( $this->tabs, array('premium' => new SPDSGVOPremiumTab) );
61
  }
62
 
63
+ public function menuItem()
64
  {
65
  global $submenu;
66
+
67
  $svg = 'data:image/svg+xml;base64,'. base64_encode(file_get_contents(SPDSGVO::pluginDir('admin/images/logo.svg')));
68
  add_menu_page('WP DSGVO Tools', 'WP DSGVO Tools', 'manage_options', 'sp-dsgvo', array($this, 'adminPage'), $svg);
69
 
70
  //add_submenu_page('sp-dsgvo', 'Terms & Conditions', 'Terms & Conditions', 'manage_options', 'admin.php?page=sp-dsgvo&tab=terms-conditions');
71
+ add_submenu_page('sp-dsgvo', __('Privacy policy','shapepress-dsgvo'), __('Privacy policy','shapepress-dsgvo'), 'manage_options', 'admin.php?page=sp-dsgvo&tab=privacy-policy');
72
+ add_submenu_page('sp-dsgvo', __('Imprint','shapepress-dsgvo'), __('Imprint','shapepress-dsgvo'), 'manage_options', 'admin.php?page=sp-dsgvo&tab=imprint');
73
  //add_submenu_page('sp-dsgvo', 'Integrations', 'Integrations', 'manage_options', 'admin.php?page=sp-dsgvo&tab=integrations');
74
+
75
  $index = 8;
76
  $menu_slug = 'sp-dsgvo';
77
+
78
+ $submenu[$menu_slug][$index++] = array(__('Experts Info','shapepress-dsgvo'), 'manage_options', 'https://wp-dsgvo.eu/experten');
79
+ $submenu[$menu_slug][$index++] = array(__('Legal advice','shapepress-dsgvo'), 'manage_options', 'https://wp-dsgvo.eu/tipps-hilfe');
80
+ $submenu[$menu_slug][$index++] = array(__('FAQ','shapepress-dsgvo'), 'manage_options', 'https://wp-dsgvo.eu/faq');
81
+ $submenu[$menu_slug][$index++] = array(__('About WP DSGVO Tools','shapepress-dsgvo'), 'manage_options', 'https://wp-dsgvo.eu/about');
82
  }
83
+
84
+
85
  public function adminPage(){
86
  $tabs = $this->tabs;
87
 
114
  * @since 1.0.0
115
  */
116
  public function enqueue_scripts(){
117
+ /* i592995 */
118
+ wp_enqueue_media();
119
+ /* i592995 */
120
  wp_enqueue_script(sp_dsgvo_VERSION, plugin_dir_url(__FILE__). 'js/sp-dsgvo-admin.js', array('jquery'), sp_dsgvo_VERSION, false );
121
+
122
+ /* i592995 */
123
+ wp_localize_script(sp_dsgvo_VERSION, 'args', array(
124
+ 'ajaxurl' => admin_url('admin-ajax.php'),
125
+ 'dismiss_confirm' => __('Are you sure you want to dismiss this request?', 'shapepress-dsgvo')
126
+ ));
127
+ /* i592995 */
128
+
129
  }
130
 
131
 
139
  public function addCustomPostStates($states, $post){
140
 
141
  $pages = array(
142
+ SPDSGVOSettings::get('user_permissions_page') => __('Privacy settings user page','shapepress-dsgvo'),
143
+ SPDSGVOSettings::get('super_unsubscribe_page') => __('Delete request page','shapepress-dsgvo'),
144
+ SPDSGVOSettings::get('terms_conditions_page') => __('Terms page','shapepress-dsgvo'),
145
+ SPDSGVOSettings::get('explicit_permission_page') => __('Explicit permissions page','shapepress-dsgvo'),
146
+ SPDSGVOSettings::get('opt_out_page') => __('Opt Out page','shapepress-dsgvo'),
147
+ SPDSGVOSettings::get('privacy_policy_page') => __('Privacy policy page','shapepress-dsgvo'),
148
+ SPDSGVOSettings::get('sar_page') => __('Subject access request page','shapepress-dsgvo'),
149
+ SPDSGVOSettings::get('imprint_page') => __('Imprint page','shapepress-dsgvo')
150
  );
151
 
152
  if(in_array($post->ID, array_keys($pages))){
153
+ $states[] = $pages[$post->ID];
154
+ }
155
 
156
  return $states;
157
+ }
158
 
159
 
160
  /**
161
  * Filter: Adds Extra Column to users table
162
+ *
163
  * @since 1.0.0
164
  * @author Shapepress eU
165
  */
170
 
171
  /**
172
  * Filter: Adds Extra Column to users table
173
+ *
174
  * @since 1.0.0
175
  * @author Shapepress eU
176
  */
185
  }
186
 
187
  return '';
188
+ }
189
 
190
 
191
  /**
192
  * Hook: Displays User Permission status
193
+ *
194
  * @since 1.0.0
195
  * @author Shapepress eU
196
  * @param WP_User $user
197
  */
198
  public function showPermissonStatus($user){
199
  ?>
200
+ <h2><?php _e('Privacy settings of the user','shapepress-dsgvo')?></h2>
201
  <table class="form-table">
202
  <tbody>
203
 
204
  <tr class="user-profile-picture">
205
+ <th><?php _e('Dienste','shapepress-dsgvo')?></th>
206
  <td>
207
  <ul>
208
  <?php foreach(SPDSGVOSettings::get('services') as $slug => $service): ?>
209
  <li>
210
+ <strong><?= $service['name'] ?>:</strong>
211
  <?= (hasUserGivenPermissionFor($service['slug']))? '<span class="dashicons dashicons-yes"></span>' : '<span class="dashicons dashicons-no"></span>' ?>
212
  </li>
213
  <?php endforeach; ?>
235
  // DELETE IP and USER AGENT
236
  if( SPDSGVOSettings::get('gf_no_ip_meta') ){
237
  GFAPI::update_entry_property( $entry['id'], 'ip', '' );
238
+ GFAPI::update_entry_property( $entry['id'], 'user_agent', '' );
239
  }
240
 
241
  // update fields to 'removed' that have been selected as 'do not save'
265
 
266
  }
267
  }
268
+
269
+ }
270
+
271
  }
admin/css/sp-dsgvo-admin.css CHANGED
@@ -13,9 +13,9 @@ hr.sp-dsgvo {
13
  background-color: white;
14
  padding-left: 15px;
15
  padding-right: 15px;
16
- float: left;
17
  width: calc(100% - 400px);
18
-
19
  }
20
 
21
  /*************************
@@ -105,11 +105,44 @@ textarea:hover.aio-transparent, input:hover.aio-transparent {
105
  display: inline-block;
106
  width: 30px;
107
  height: 20px;
108
- line-height: 20px;
109
  font-size : 20px;
110
  font-weight: 400;
111
  font-style: normal;
112
  vertical-align: top;
113
  text-align: center;
114
  color: orange;
115
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  background-color: white;
14
  padding-left: 15px;
15
  padding-right: 15px;
16
+ float: left;
17
  width: calc(100% - 400px);
18
+
19
  }
20
 
21
  /*************************
105
  display: inline-block;
106
  width: 30px;
107
  height: 20px;
108
+ line-height: 20px;
109
  font-size : 20px;
110
  font-weight: 400;
111
  font-style: normal;
112
  vertical-align: top;
113
  text-align: center;
114
  color: orange;
115
+ }
116
+
117
+ /* i592995 */
118
+
119
+ .cookie-notice-settings:not(.active),
120
+ .policy-popup-settings:not(.active) {
121
+ display: none;
122
+ }
123
+
124
+ .woo-privacy-text {
125
+ width: 100%;
126
+ }
127
+
128
+ .ga-code,
129
+ .fb-pixel-code {
130
+ display: block;
131
+ width: 100%;
132
+ height: 200px;
133
+ }
134
+
135
+ .unsubscribe-dismiss {
136
+ cursor: pointer;
137
+ }
138
+
139
+ .unsubscribe-dismiss line {
140
+ stroke: #000000;
141
+ stroke-width: 2px;
142
+ }
143
+
144
+ .form-table td {
145
+ vertical-align: top;
146
+ }
147
+
148
+ /* i592995 */
admin/images/logobackuppng CHANGED
Binary file
admin/images/logobackupsvg CHANGED
@@ -1,10 +1,10 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg width="51px" height="51px" viewBox="0 0 51 51" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
4
- <title>Combined Shape</title>
5
- <desc>Created with Sketch.</desc>
6
- <defs></defs>
7
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
- <path d="M19.3593492,33.4750511 L12.3057597,26.4214616 C11.3817513,25.4974532 9.88363778,25.4974532 8.95962941,26.4214616 C8.03562104,27.34547 8.03562104,28.8435835 8.95962941,29.7675919 L17.6862841,38.4942465 C18.1482882,38.9562507 18.7538187,39.1872528 19.3593492,39.1872528 C19.9648797,39.1872528 20.5704102,38.9562507 21.0324144,38.4942465 L21.0324144,38.4942465 L41.9673137,17.5593472 C42.8913221,16.6353388 42.8913221,15.1372252 41.9673137,14.2132169 C41.0433054,13.2892085 39.5451918,13.2892085 38.6211834,14.2132169 L38.6211834,14.2132169 L19.3593492,33.4750511 Z M25.7313287,50.1953496 C11.92421,50.1953496 0.731328714,39.0024683 0.731328714,25.1953496 C0.731328714,11.3882308 11.92421,0.195349574 25.7313287,0.195349574 C39.5384475,0.195349574 50.7313287,11.3882308 50.7313287,25.1953496 C50.7313287,39.0024683 39.5384475,50.1953496 25.7313287,50.1953496 Z" id="Combined-Shape" fill="#9FA3A8"></path>
9
- </g>
10
  </svg>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="51px" height="51px" viewBox="0 0 51 51" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch -->
4
+ <title>Combined Shape</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <path d="M19.3593492,33.4750511 L12.3057597,26.4214616 C11.3817513,25.4974532 9.88363778,25.4974532 8.95962941,26.4214616 C8.03562104,27.34547 8.03562104,28.8435835 8.95962941,29.7675919 L17.6862841,38.4942465 C18.1482882,38.9562507 18.7538187,39.1872528 19.3593492,39.1872528 C19.9648797,39.1872528 20.5704102,38.9562507 21.0324144,38.4942465 L21.0324144,38.4942465 L41.9673137,17.5593472 C42.8913221,16.6353388 42.8913221,15.1372252 41.9673137,14.2132169 C41.0433054,13.2892085 39.5451918,13.2892085 38.6211834,14.2132169 L38.6211834,14.2132169 L19.3593492,33.4750511 Z M25.7313287,50.1953496 C11.92421,50.1953496 0.731328714,39.0024683 0.731328714,25.1953496 C0.731328714,11.3882308 11.92421,0.195349574 25.7313287,0.195349574 C39.5384475,0.195349574 50.7313287,11.3882308 50.7313287,25.1953496 C50.7313287,39.0024683 39.5384475,50.1953496 25.7313287,50.1953496 Z" id="Combined-Shape" fill="#9FA3A8"></path>
9
+ </g>
10
  </svg>
admin/js/sp-dsgvo-admin.js CHANGED
@@ -1,5 +1,5 @@
1
  (function($){
2
-
3
  $(document).ready(function(){
4
 
5
  /************************
@@ -31,7 +31,7 @@
31
  }
32
  }
33
  });
34
-
35
  $('.cbChecklist').on('change', function () {
36
  var input = $(this).next('span');
37
  if (this.checked) {
@@ -42,5 +42,116 @@
42
  $('#checklist-form').submit();
43
  });
44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  });
46
  })( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  (function($){
2
+
3
  $(document).ready(function(){
4
 
5
  /************************
31
  }
32
  }
33
  });
34
+
35
  $('.cbChecklist').on('change', function () {
36
  var input = $(this).next('span');
37
  if (this.checked) {
42
  $('#checklist-form').submit();
43
  });
44
 
45
+ /* i592995 */
46
+ function checkNoticeType($select) {
47
+ var val = $select.val(),
48
+ $popupSettings = $('.policy-popup-settings'),
49
+ $noticeSettings = $('.cookie-notice-settings');
50
+
51
+ if(val == 'cookie_notice') {
52
+ $popupSettings.removeClass('active');
53
+ $noticeSettings.addClass('active');
54
+ } else if(val == 'policy_popup') {
55
+ $popupSettings.addClass('active');
56
+ $noticeSettings.removeClass('active');
57
+ } else {
58
+ $popupSettings.removeClass('active');
59
+ $noticeSettings.removeClass('active');
60
+ }
61
+ }
62
+
63
+ var $noticeType = $('#cookie_notice_display');
64
+ if($noticeType.length > 0) {
65
+ checkNoticeType($noticeType);
66
+
67
+ $noticeType.on('change', function() {
68
+ var $this = $(this);
69
+ checkNoticeType($this);
70
+ });
71
+ }
72
+
73
+ $('.unsubscribe-dismiss').on('click tap', function() {
74
+ var $this = $(this),
75
+ id = $this.attr('data-id');
76
+
77
+ if(confirm(args.dismiss_confirm)) {
78
+ $this.parent().parent().fadeOut(500);
79
+ $.post( args.ajaxurl, {
80
+ action: 'admin-dismiss-unsubscribe',
81
+ id: id
82
+ },
83
+ function( data ) {
84
+ } );
85
+ }
86
+ });
87
+ /* i592995 */
88
+
89
  });
90
  })( jQuery );
91
+
92
+ /* i592995 */
93
+ // THIS PART OF THE SCRIPT ADDS UPLOAD IMAGE Buttons
94
+
95
+ jQuery( document ).ready( function( $ ) {
96
+
97
+ function prepareUpload($upload) {
98
+ // Uploading files
99
+ var file_frame;
100
+ var wp_media_post_id = wp.media.model.settings.post.id; // Store the old id
101
+ var set_to_post_id = $upload.find('.image-id').val(); // Set this
102
+ $upload.find('.button').on('click', function( event ){
103
+ event.preventDefault();
104
+ // If the media frame already exists, reopen it.
105
+ if ( file_frame ) {
106
+ // Set the post ID to what we want
107
+ file_frame.uploader.uploader.param( 'post_id', set_to_post_id );
108
+ // Open frame
109
+ file_frame.open();
110
+ return;
111
+ } else {
112
+ // Set the wp.media post id so the uploader grabs the ID we want when initialised
113
+ wp.media.model.settings.post.id = set_to_post_id;
114
+ }
115
+ // Create the media frame.
116
+ file_frame = wp.media.frames.file_frame = wp.media({
117
+ multiple: false // Set to true to allow multiple files to be selected
118
+ });
119
+ // When an image is selected, run a callback.
120
+ file_frame.on( 'select', function() {
121
+ // We set multiple to false so only get one image from the uploader
122
+ attachment = file_frame.state().get('selection').first().toJSON();
123
+ // Do something with attachment.id and/or attachment.url here
124
+ $upload.find('.image-preview').attr( 'src', attachment.url );
125
+ $upload.find('.image-id').val( attachment.id );
126
+ // Restore the main post ID
127
+ wp.media.model.settings.post.id = wp_media_post_id;
128
+ });
129
+ // Finally, open the modal
130
+ file_frame.open();
131
+ });
132
+ // Restore the main ID when the add media button is pressed
133
+ jQuery( 'a.add_media' ).on( 'click', function() {
134
+ wp.media.model.settings.post.id = wp_media_post_id;
135
+ });
136
+ }
137
+
138
+ $('.dsgvo-image-upload').each(function() {
139
+ var $this = $(this);
140
+
141
+ prepareUpload($this);
142
+ });
143
+
144
+ $('#own_code').on('change', function() {
145
+ var $this = $(this);
146
+ $this.toggleClass('active');
147
+
148
+ if($this.hasClass('active')) {
149
+ $('#ga_code').removeAttr('disabled');
150
+ $('#fb_pixel_code').removeAttr('disabled');
151
+ } else {
152
+ $('#ga_code').attr('disabled', 'disabled');
153
+ $('#fb_pixel_code').attr('disabled', 'disabled');
154
+ }
155
+ });
156
+
157
+ });
admin/tabs/common-settings/class-sp-dsgvo-common-settings-action.php CHANGED
@@ -1,50 +1,43 @@
1
- <?php
2
-
3
- class SPDSGVOCommonSettingsAction extends SPDSGVOAjaxAction
4
- {
5
-
6
- protected $action = 'admin-common-settings';
7
-
8
- protected function run()
9
- {
10
- $this->requireAdmin();
11
-
12
-
13
- SPDSGVOSettings::set('admin_email', $this->get('admin_email', ''));
14
- SPDSGVOSettings::set('sp_dsgvo_comments_checkbox', $this->get('sp_dsgvo_comments_checkbox', '0'));
15
-
16
- if (isLicenceValid())
17
- {
18
- SPDSGVOSettings::set('spdsgvo_comments_checkbox_info', $this->get('spdsgvo_comments_checkbox_info', ''));
19
- SPDSGVOSettings::set('spdsgvo_comments_checkbox_confirm', $this->get('spdsgvo_comments_checkbox_confirm', ''));
20
- SPDSGVOSettings::set('spdsgvo_comments_checkbox_text', $this->get('spdsgvo_comments_checkbox_text', ''));
21
- } else
22
- {
23
- SPDSGVOSettings::set('spdsgvo_comments_checkbox_info', SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_info'));
24
- SPDSGVOSettings::set('spdsgvo_comments_checkbox_confirm', SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_confirm'));
25
- SPDSGVOSettings::set('spdsgvo_comments_checkbox_text', SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_text'));
26
- }
27
- SPDSGVOSettings::set('sp_dsgvo_cf7_acceptance_replace', $this->get('sp_dsgvo_cf7_acceptance_replace', '0'));
28
-
29
- SPDSGVOSettings::set('spdsgvo_company_info_name', $this->get('spdsgvo_company_info_name', ''));
30
- SPDSGVOSettings::set('spdsgvo_company_info_street', $this->get('spdsgvo_company_info_street', ''));
31
- SPDSGVOSettings::set('spdsgvo_company_info_loc_zip', $this->get('spdsgvo_company_info_loc_zip', ''));
32
- SPDSGVOSettings::set('spdsgvo_company_fn_nr', $this->get('spdsgvo_company_fn_nr', ''));
33
- SPDSGVOSettings::set('spdsgvo_company_law_loc', $this->get('spdsgvo_company_law_loc', ''));
34
- SPDSGVOSettings::set('spdsgvo_company_uid_nr', $this->get('spdsgvo_company_uid_nr', ''));
35
- SPDSGVOSettings::set('spdsgvo_company_law_person', $this->get('spdsgvo_company_law_person', ''));
36
- SPDSGVOSettings::set('spdsgvo_company_chairmen', $this->get('spdsgvo_company_chairmen', ''));
37
- SPDSGVOSettings::set('spdsgvo_company_resp_content', $this->get('spdsgvo_company_resp_content', ''));
38
- SPDSGVOSettings::set('spdsgvo_company_info_phone', $this->get('spdsgvo_company_info_phone', ''));
39
- SPDSGVOSettings::set('spdsgvo_company_info_fax', $this->get('spdsgvo_company_info_fax', ''));
40
- SPDSGVOSettings::set('spdsgvo_company_info_email', $this->get('spdsgvo_company_info_email', ''));
41
- SPDSGVOSettings::set('spdsgvo_newsletter_service', $this->get('spdsgvo_newsletter_service', ''));
42
- SPDSGVOSettings::set('spdsgvo_newsletter_service_privacy_policy_url', $this->get('spdsgvo_newsletter_service_privacy_policy_url', ''));
43
-
44
- $this->returnBack();
45
- }
46
- }
47
-
48
- SPDSGVOCommonSettingsAction::listen();
49
-
50
-
1
+ <?php
2
+
3
+ class SPDSGVOCommonSettingsAction extends SPDSGVOAjaxAction
4
+ {
5
+
6
+ protected $action = 'admin-common-settings';
7
+
8
+ protected function run()
9
+ {
10
+ $this->requireAdmin();
11
+
12
+ SPDSGVOSettings::set('admin_email', $this->get('admin_email', ''));
13
+ SPDSGVOSettings::set('use_wpml_strings', $this->get('use_wpml_strings', '0'));
14
+
15
+ SPDSGVOSettings::set('sp_dsgvo_comments_checkbox', $this->get('sp_dsgvo_comments_checkbox', '0'));
16
+ if (isValidBlogEdition() || isValidPremiumEdition())
17
+ {
18
+ SPDSGVOSettings::set('spdsgvo_comments_checkbox_info', $this->get('spdsgvo_comments_checkbox_info', ''));
19
+ SPDSGVOSettings::set('spdsgvo_comments_checkbox_confirm', $this->get('spdsgvo_comments_checkbox_confirm', ''));
20
+ SPDSGVOSettings::set('spdsgvo_comments_checkbox_text', $this->get('spdsgvo_comments_checkbox_text', ''));
21
+ SPDSGVOSettings::set('sp_dsgvo_cf7_acceptance_replace', $this->get('sp_dsgvo_cf7_acceptance_replace', ''));
22
+ }
23
+
24
+ SPDSGVOSettings::set('spdsgvo_company_info_name', $this->get('spdsgvo_company_info_name', ''));
25
+ SPDSGVOSettings::set('spdsgvo_company_info_street', $this->get('spdsgvo_company_info_street', ''));
26
+ SPDSGVOSettings::set('spdsgvo_company_info_loc_zip', $this->get('spdsgvo_company_info_loc_zip', ''));
27
+ SPDSGVOSettings::set('spdsgvo_company_fn_nr', $this->get('spdsgvo_company_fn_nr', ''));
28
+ SPDSGVOSettings::set('spdsgvo_company_law_loc', $this->get('spdsgvo_company_law_loc', ''));
29
+ SPDSGVOSettings::set('spdsgvo_company_uid_nr', $this->get('spdsgvo_company_uid_nr', ''));
30
+ SPDSGVOSettings::set('spdsgvo_company_law_person', $this->get('spdsgvo_company_law_person', ''));
31
+ SPDSGVOSettings::set('spdsgvo_company_chairmen', $this->get('spdsgvo_company_chairmen', ''));
32
+ SPDSGVOSettings::set('spdsgvo_company_resp_content', $this->get('spdsgvo_company_resp_content', ''));
33
+ SPDSGVOSettings::set('spdsgvo_company_info_phone', $this->get('spdsgvo_company_info_phone', ''));
34
+ SPDSGVOSettings::set('spdsgvo_company_info_fax', $this->get('spdsgvo_company_info_fax', ''));
35
+ SPDSGVOSettings::set('spdsgvo_company_info_email', $this->get('spdsgvo_company_info_email', ''));
36
+ SPDSGVOSettings::set('spdsgvo_newsletter_service', $this->get('spdsgvo_newsletter_service', ''));
37
+ SPDSGVOSettings::set('spdsgvo_newsletter_service_privacy_policy_url', $this->get('spdsgvo_newsletter_service_privacy_policy_url', ''));
38
+
39
+ $this->returnBack();
40
+ }
41
+ }
42
+
43
+ SPDSGVOCommonSettingsAction::listen();
 
 
 
 
 
 
 
admin/tabs/common-settings/class-sp-dsgvo-common-settings-activate-action.php CHANGED
@@ -1,86 +1,99 @@
1
- <?php
2
-
3
- class SPDSGVOCommonSettingsActivateAction extends SPDSGVOAjaxAction
4
- {
5
-
6
- protected $action = 'admin-common-settings-activate';
7
-
8
- protected function run()
9
- {
10
- $this->requireAdmin();
11
-
12
- $oldLicenceKey = SPDSGVOSettings::get('dsgvo_licence');
13
- $licenceKey = $this->get('dsgvo_licence', '');
14
-
15
- if (SPDSGVOSettings::get('license_activated') === '0')
16
- {
17
- //error_log('activating licence '.$licenceKey);
18
- SPDSGVOSettings::set('license_activated', '0');
19
- SPDSGVOSettings::set('license_key_error', '1');
20
-
21
- $url = 'http://wp-dsgvo.eu/spdsgvo-bin/activate.php';
22
- $url .= '?license_key=' .$licenceKey;
23
-
24
- $request = wp_remote_get($url);
25
-
26
- if( is_wp_error( $request ) ) {
27
-
28
- try {
29
- error_log('error during license activation: '.$request->get_error_message()); // Bail early
30
- if (strpos(strtolower($request->get_error_message()), 'curl error 35') !== false) {
31
- SPDSGVOSettings::set('license_key_error', '0');
32
- SPDSGVOSettings::set('license_activated', '1');
33
- } else
34
- {
35
- SPDSGVOSettings::set('license_activation_error', $request->get_error_message());
36
- }
37
- } catch (Exception $e) {
38
- error_log('error during license activation.');
39
- }
40
- } else {
41
- $result = wp_remote_retrieve_body( $request );
42
- if (strpos($result, 'OK') !== false) {
43
- SPDSGVOSettings::set('license_key_error', '0');
44
- SPDSGVOSettings::set('license_activated', '1');
45
- } else
46
- {
47
- SPDSGVOSettings::set('license_activation_error', $result);
48
- SPDSGVOSettings::set('license_key_error', '1');
49
- }
50
-
51
- }
52
- } elseif(SPDSGVOSettings::get('license_activated') === '1')
53
- {
54
- $url = 'http://wp-dsgvo.eu/spdsgvo-bin/deactivate.php';
55
- $url .= '?license_key=' .$licenceKey;
56
-
57
- $request = wp_remote_get($url);
58
-
59
- if( is_wp_error( $request ) ) {
60
-
61
- try {
62
- error_log('error during license activation: '.$request->get_error_message()); // Bail early
63
- } catch (Exception $e) {
64
- error_log('error during license activation.');
65
- }
66
- } else {
67
- $result = wp_remote_retrieve_body( $request );
68
- if (strpos($result, 'OK') !== false) {
69
- SPDSGVOSettings::set('license_key_error', '1');
70
- SPDSGVOSettings::set('license_activated', '0');
71
- } else
72
- {
73
-
74
- }
75
- }
76
- }
77
-
78
- SPDSGVOSettings::set('dsgvo_licence', $licenceKey);
79
-
80
- $this->returnBack();
81
- }
82
- }
83
-
84
- SPDSGVOCommonSettingsActivateAction::listen();
85
-
86
-
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SPDSGVOCommonSettingsActivateAction extends SPDSGVOAjaxAction
4
+ {
5
+
6
+ protected $action = 'admin-common-settings-activate';
7
+
8
+ protected function run()
9
+ {
10
+ $this->requireAdmin();
11
+
12
+ $oldLicenceKey = SPDSGVOSettings::get('dsgvo_licence');
13
+ $licenceKey = $this->get('dsgvo_licence', '');
14
+
15
+ if (SPDSGVOSettings::get('license_activated') === '0')
16
+ {
17
+ //error_log('activating licence '.$licenceKey);
18
+ SPDSGVOSettings::set('license_activated', '0');
19
+ SPDSGVOSettings::set('license_key_error', '1');
20
+
21
+ $url = 'https://wp-dsgvo.eu/spdsgvo-bin/activate.php';
22
+ $url .= '?license_key=' .$licenceKey;
23
+
24
+ $request = wp_remote_get($url);
25
+
26
+ if( is_wp_error( $request ) ) {
27
+
28
+ error_log(__('error during license activation: ', 'shapepress-dsgvo') . $request); // Bail early
29
+ } else {
30
+ $result = wp_remote_retrieve_body( $request );
31
+ if (strpos($result, 'OK') !== false) {
32
+ SPDSGVOSettings::set('license_key_error', '0');
33
+ SPDSGVOSettings::set('license_activated', '1');
34
+ } else
35
+ {
36
+ SPDSGVOSettings::set('license_activation_error', $result);
37
+ SPDSGVOSettings::set('license_key_error', '1');
38
+ }
39
+
40
+ }
41
+ } elseif(SPDSGVOSettings::get('license_activated') === '1')
42
+ {
43
+ $url = 'https://wp-dsgvo.eu/spdsgvo-bin/deactivate.php';
44
+ $url .= '?license_key=' .$licenceKey;
45
+
46
+ $request = wp_remote_get($url);
47
+
48
+ if( is_wp_error( $request ) ) {
49
+
50
+ error_log(__('error during license activation: ', 'shapepress-dsgvo').$request); // Bail early
51
+ } else {
52
+ $result = wp_remote_retrieve_body( $request );
53
+ if (strpos($result, 'OK') !== false) {
54
+ SPDSGVOSettings::set('license_key_error', '1');
55
+ SPDSGVOSettings::set('license_activated', '0');
56
+ SPDSGVOSettings::set('licence_valid_to', '');
57
+ SPDSGVOSettings::set('licence_activated_on', '');
58
+ } else
59
+ {
60
+
61
+ }
62
+ }
63
+ }
64
+
65
+
66
+ if ($licenceKey !== '' && SPDSGVOSettings::get('license_activated') === '1') {
67
+
68
+ //error_log('validating licence '.$licenceKey);
69
+
70
+ $url = 'https://wp-dsgvo.eu/spdsgvo-bin/licensedetails.php';
71
+ $url .= '?license_key=' .$licenceKey;
72
+
73
+ $request = wp_remote_get($url);
74
+
75
+ if( is_wp_error( $request ) ) {
76
+
77
+ error_log(__('error during license details: ', 'shapepress-dsgvo').$request); // Bail early
78
+ } else {
79
+
80
+ $body = wp_remote_retrieve_body( $request );
81
+
82
+ if ($body !== false)
83
+ {
84
+ $data = json_decode( $body );
85
+ SPDSGVOSettings::set('licence_activated_on', $data->activation_date);
86
+ SPDSGVOSettings::set('licence_valid_to', $data->expiration_date);
87
+
88
+ SPDSGVOSettings::set('licence_details_fetched', '1');
89
+ }
90
+ }
91
+ }
92
+
93
+ SPDSGVOSettings::set('dsgvo_licence', $licenceKey);
94
+
95
+ $this->returnBack();
96
+ }
97
+ }
98
+
99
+ SPDSGVOCommonSettingsActivateAction::listen();
admin/tabs/common-settings/class-sp-dsgvo-common-settings-tab.php CHANGED
@@ -1,14 +1,17 @@
1
- <?php
2
-
3
- class SPDSGVOCommonSettingsTab extends SPDSGVOAdminTab{
4
-
5
- public $title = 'Allgemeine Einstellungen';
6
- public $slug = 'common-settings';
7
- public $isHidden = FALSE;
8
-
9
- public function __construct(){}
10
-
11
- public function page(){
12
- include plugin_dir_path(__FILE__) .'page.php';
13
- }
14
- }
 
 
 
1
+ <?php
2
+
3
+ class SPDSGVOCommonSettingsTab extends SPDSGVOAdminTab{
4
+
5
+ public $title = 'Allgemeine Einstellungen';
6
+ public $slug = 'common-settings';
7
+ public $isHidden = FALSE;
8
+
9
+ public function __construct(){
10
+
11
+ $this->title = __('Common Settings','shapepress-dsgvo');
12
+ }
13
+
14
+ public function page(){
15
+ include plugin_dir_path(__FILE__) .'page.php';
16
+ }
17
+ }
admin/tabs/common-settings/page.php CHANGED
@@ -1,200 +1,218 @@
1
- <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
2
- <input type="hidden" name="action" value="admin-common-settings-activate">
3
-
4
- <h1>Blog Edition freischalten</h1>
5
-
6
- <table class="form-table">
7
- <tr>
8
- <th scope="row">Lizenz</th>
9
- <td><label for="dsgvo_licence"> <input name="dsgvo_licence"
10
- type="text" id="dsgvo_licence" style="width: 300px"
11
- value="<?= SPDSGVOSettings::get('dsgvo_licence'); ?>">
12
- </label>
13
- <?php if(SPDSGVOSettings::get('license_activated') === '1'): ?>
14
- <span class="info-text">
15
- <?= (SPDSGVOSettings::get('dsgvo_licence') !== '' && SPDSGVOSettings::get('license_key_error') === '0') ? 'G&uuml;ltige Lizenz. Die Blog Edition ist aktiviert.' : 'Ung&uuml;ltige Lizenz'; ?>
16
- </span>
17
- <?php submit_button('Lizenz deaktivieren'); ?>
18
- <?php else: ?>
19
- <span class="info-text">Lizenz eingeben und auf aktivieren klicken schaltet die Features der "Blog Edition" frei.</span>
20
- <?php submit_button('Lizenz aktivieren'); ?>
21
- <?php endif; ?>
22
- </td>
23
- </tr>
24
- </table>
25
- </form>
26
-
27
- <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
28
- <input type="hidden" name="action" value="admin-common-settings">
29
-
30
- <input type="hidden" value="<?= SPDSGVOSettings::get('dsgvo_licence'); ?>" id="dsgvo_licence_hidden" name="dsgvo_licence_hidden" />
31
-
32
- <h1>Allgemeine Einstellungen</h1>
33
-
34
- <table class="form-table">
35
- <tr>
36
- <th scope="row">Admin Email</th>
37
- <td><label for="admin_email"> <input name="admin_email"
38
- type="text" id="admin_email" style="width: 300px"
39
- value="<?= SPDSGVOSettings::get('admin_email'); ?>">
40
- </label><span class="info-text">Wird bei Emails mitgesendet.</span></td>
41
- </tr>
42
- </table>
43
-
44
- <?php if (isLicenceValid()) : ?>
45
- <h2>Kommentare</h2>
46
- <?php else : ?>
47
- <h2>Kommentare</h2><span style="color: orange">Anpassung in der Blog oder Premium Edition m&ouml;glich</span>
48
- <small><a href="https://www.wp-dsgvo.eu/shop"> Hier klicken um eine Lizenz anzufordern.</a></small>
49
- <?php endif; ?>
50
- <?php $disableCommentInputs = isLicenceValid() == false; ?>
51
- <table class="form-table">
52
- <tr>
53
- <th scope="row">Checkbox bei Kommentaren:</th>
54
- <td><label for="sp_dsgvo_comments_checkbox"> <input
55
- name="sp_dsgvo_comments_checkbox" type="checkbox"
56
- id="sp_dsgvo_comments_checkbox" value="1"
57
- <?= (SPDSGVOSettings::get('sp_dsgvo_comments_checkbox') === '1')? ' checked ' : ''; ?>>
58
- </label><span class="info-text">Zeigt eine Checkbox bei Kommentaren an welche die Zustimmung zu den DSGVO Bestimmungen fordert.</span></td>
59
- </tr>
60
- <?php if (class_exists('WPCF7_ContactForm')) : ?>
61
- <tr>
62
- <td>CF7 Acceptance Text ersetzen:</td>
63
- <td><label for="sp_dsgvo_cf7_acceptance_replace"> <input
64
- name="sp_dsgvo_cf7_acceptance_replace" type="checkbox"
65
- id="sp_dsgvo_cf7_acceptance_replace" value="1"
66
- <?= (SPDSGVOSettings::get('sp_dsgvo_cf7_acceptance_replace') === '1')? ' checked ' : ''; ?>>
67
- </label><span class="info-text">&Uuml;berschreibt den Text von Acceptance Checkboxen von CF7 mit dem nachfolgendem Text. (Im Formular erg&auml;nzen: [acceptance dsgvo] Text[/acceptance])</span></td>
68
- </tr>
69
- <?php endif ?>
70
- <tr>
71
- <th scope="row">Text:</th>
72
- <td><label for="spdsgvo_comments_checkbox_text"> <textarea name="spdsgvo_comments_checkbox_text"
73
- placeholder="Gib hier einen Meldungstext ein" id="spdsgvo_comments_checkbox_text" rows="3"
74
- <?= $disableCommentInputs ? 'disabled' : ''; ?>
75
- style="width: 100%"><?= $disableCommentInputs ? SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_text') : SPDSGVOSettings::get('spdsgvo_comments_checkbox_text'); ?></textarea>
76
- </label></td>
77
- </tr>
78
- <tr>
79
- <th scope="row">Hinweistext:</th>
80
- <td><label for="spdsgvo_comments_checkbox_info"> <input
81
- name="spdsgvo_comments_checkbox_info" type="text" style="width: 500px"
82
- <?= $disableCommentInputs ? 'disabled' : ''; ?>
83
- id="spdsgvo_comments_checkbox_info" value="<?= $disableCommentInputs ? SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_info') : SPDSGVOSettings::get('spdsgvo_comments_checkbox_info'); ?>">
84
- </label></td>
85
- </tr>
86
- <tr>
87
- <th scope="row">Zustimmungstext:</th>
88
- <td><label for="spdsgvo_comments_checkbox_confirm"> <input
89
- name="spdsgvo_comments_checkbox_confirm" type="text" style="width: 300px"
90
- <?= $disableCommentInputs ? 'disabled' : ''; ?>
91
- id="spdsgvo_comments_checkbox_confirm" value="<?= $disableCommentInputs ? SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_confirm') : SPDSGVOSettings::get('spdsgvo_comments_checkbox_confirm'); ?>">
92
- </label></td>
93
- </tr>
94
- </table>
95
-
96
- <hr class="sp-dsgvo">
97
-
98
- <h2>Unternehmensdaten</h2>
99
- <p>Die nachfolgenden Eingabefelder stellen die grundlegenden Daten dar, die zum Erzeugen DSGVO-konformer Datenschutzbestimmungen sowie ein Impressum notwendig sind.<br />
100
- Alle Eingaben die sie hier t&auml;tigen werden automatisch in das vom WP DSGVO Tools Plugin generierten Datenschutzbestimmungen sowie Impressum verwendet.</p>
101
-
102
- <table class="form-table">
103
- <tr>
104
- <td>Name des Unternehmens:</td>
105
- <td><label for="spdsgvo_company_info_name"> <input name="spdsgvo_company_info_name"
106
- type="text" id="spdsgvo_company_info_name" style="width: 300px"
107
- value="<?= SPDSGVOSettings::get('spdsgvo_company_info_name'); ?>">
108
- </label><span class="info-text"></span></td>
109
- </tr>
110
- <tr>
111
- <td>Stra&szlig;e:</td>
112
- <td><label for="spdsgvo_company_info_street"> <input name="spdsgvo_company_info_street"
113
- type="text" id="spdsgvo_company_info_street" style="width: 300px"
114
- value="<?= SPDSGVOSettings::get('spdsgvo_company_info_street'); ?>">
115
- </label><span class="info-text"></span></td>
116
- </tr>
117
- <tr>
118
- <td>PLZ + Ort:</td>
119
- <td><label for="spdsgvo_company_info_loc_zip"> <input name="spdsgvo_company_info_loc_zip"
120
- type="text" id="spdsgvo_company_info_loc_zip" style="width: 300px"
121
- value="<?= SPDSGVOSettings::get('spdsgvo_company_info_loc_zip'); ?>">
122
- </label><span class="info-text"></span></td>
123
- </tr>
124
- <tr>
125
- <td>Firmenbuch Nummer:</td>
126
- <td><label for="spdsgvo_company_fn_nr"> <input name="spdsgvo_company_fn_nr"
127
- type="text" id="spdsgvo_company_fn_nr" style="width: 300px"
128
- value="<?= SPDSGVOSettings::get('spdsgvo_company_fn_nr'); ?>">
129
- </label><span class="info-text"></span></td>
130
- </tr>
131
- <tr>
132
- <td>Gerichtsstand:</td>
133
- <td><label for="spdsgvo_company_law_loc"> <input name="spdsgvo_company_law_loc"
134
- type="text" id="spdsgvo_company_law_loc" style="width: 300px"
135
- value="<?= SPDSGVOSettings::get('spdsgvo_company_law_loc'); ?>">
136
- </label><span class="info-text"></span></td>
137
- </tr>
138
- <tr>
139
- <td>USt. Id.:</td>
140
- <td><label for="spdsgvo_company_uid_nr"> <input name="spdsgvo_company_uid_nr"
141
- type="text" id="spdsgvo_company_uid_nr" style="width: 300px"
142
- value="<?= SPDSGVOSettings::get('spdsgvo_company_uid_nr'); ?>">
143
- </label><span class="info-text"></span></td>
144
- </tr>
145
- <tr>
146
- <td>Gesetzlicher Vertreter:</td>
147
- <td><label for="spdsgvo_company_law_person"> <input name="spdsgvo_company_law_person"
148
- type="text" id="spdsgvo_company_law_person" style="width: 300px"
149
- value="<?= SPDSGVOSettings::get('spdsgvo_company_law_person'); ?>">
150
- </label><span class="info-text">Die Person die das Unternehmen gesetzlich vertritt.</span></td>
151
- </tr>
152
- <tr>
153
- <td>Gesellschafter:</td>
154
- <td><label for="spdsgvo_company_chairmen"> <input name="spdsgvo_company_chairmen"
155
- type="text" id="spdsgvo_company_chairmen" style="width: 300px"
156
- value="<?= SPDSGVOSettings::get('spdsgvo_company_chairmen'); ?>">
157
- </label><span class="info-text">Im Fall von Gesellschaften hier bitte alle Gesellschafter anf&uuml;hren.</span></td>
158
- </tr>
159
- <tr>
160
- <td>Verantwortlicher f&uuml;r Inhalt:</td>
161
- <td><label for="spdsgvo_company_resp_content"> <input name="spdsgvo_company_resp_content"
162
- type="text" id="spdsgvo_company_resp_content" style="width: 300px"
163
- value="<?= SPDSGVOSettings::get('spdsgvo_company_resp_content'); ?>">
164
- </label><span class="info-text">Die Person die f&uuml;r den Inhalt auf dieser Website verantwortlich ist.</span></td>
165
- </tr>
166
- <tr>
167
- <td>Telefon:</td>
168
- <td><label for="spdsgvo_company_info_phone"> <input name="spdsgvo_company_info_phone"
169
- type="text" id="spdsgvo_company_info_phone" style="width: 300px"
170
- value="<?= SPDSGVOSettings::get('spdsgvo_company_info_phone'); ?>">
171
- </label><span class="info-text"></span></td>
172
- </tr>
173
- <tr>
174
- <td>Email:</td>
175
- <td><label for="spdsgvo_company_info_email"> <input name="spdsgvo_company_info_email"
176
- type="text" id="spdsgvo_company_info_email" style="width: 300px"
177
- value="<?= SPDSGVOSettings::get('spdsgvo_company_info_email'); ?>">
178
- </label><span class="info-text"></span></td>
179
- </tr>
180
- <tr>
181
- <td>Newsletter Service:</td>
182
- <td><label for="spdsgvo_newsletter_service"> <input name="spdsgvo_newsletter_service"
183
- type="text" id="spdsgvo_newsletter_service" style="width: 300px"
184
- value="<?= SPDSGVOSettings::get('spdsgvo_newsletter_service'); ?>">
185
- </label><span class="info-text">Name des Versanddienstleisters mit dem die Newsletter versendet werden.</span></td>
186
- </tr>
187
- <tr>
188
- <td>URL Datenschutz Newsletter Service:</td>
189
- <td><label for="spdsgvo_newsletter_service_privacy_policy_url"> <input name="spdsgvo_newsletter_service_privacy_policy_url"
190
- type="text" id="spdsgvo_newsletter_service_privacy_policy_url" style="width: 300px"
191
- value="<?= SPDSGVOSettings::get('spdsgvo_newsletter_service_privacy_policy_url'); ?>">
192
- </label><span class="info-text">Die URL zu den Datenschutzbestimmungen des Versanddienstleisters mit dem die Newsletter versendet werden.</span></td>
193
- </tr>
194
- </table>
195
-
196
-
197
- <br>
198
- <?php submit_button(); ?>
199
- </form>
200
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
2
+ <input type="hidden" name="action" value="admin-common-settings-activate">
3
+
4
+ <h1><?php _e('Activate Blog/Premium','shapepress-dsgvo')?></h1>
5
+
6
+ <table class="form-table">
7
+ <tr>
8
+ <th scope="row"><?php _e('License','shapepress-dsgvo')?></th>
9
+ <td><label for="dsgvo_licence"> <input name="dsgvo_licence"
10
+ type="text" id="dsgvo_licence" style="width: 200px"
11
+ value="<?= SPDSGVOSettings::get('dsgvo_licence'); ?>">
12
+ </label>
13
+ <?php if(SPDSGVOSettings::get('license_activated') === '1'): ?>
14
+ <span class="info-text">
15
+ <?php if(isPremiumEdition()): ?>
16
+ <?= isValidPremiumEdition() ? _e('Premium version has been activated','shapepress-dsgvo') : _e('Invalid or expired license.','shapepress-dsgvo'); ?>
17
+ <?php endif; ?>
18
+ <?php if(isBlogEdition()): ?>
19
+ <?= isValidBlogEdition() ? _e('Blog version has been activated','shapepress-dsgvo') : _e('Invalid license.','shapepress-dsgvo'); ?>
20
+ <?php endif; ?>
21
+ </span>
22
+ <?php if(isPremiumEdition() && SPDSGVOSettings::get('licence_details_fetched') === '1'): ?>
23
+ <span class="info-text"><?php _e('Activated on:','shapepress-dsgvo'); ?> <?= date("d.m.Y", strtotime(SPDSGVOSettings::get('licence_activated_on'))); ?>
24
+ <?php _e('Valid to:','shapepress-dsgvo'); ?> <?= date("d.m.Y", strtotime(SPDSGVOSettings::get('licence_valid_to'))); ?></span>
25
+ <?php endif; ?>
26
+ <?php submit_button(__('Deactivate license','shapepress-dsgvo')); ?>
27
+ <?php else: ?>
28
+ <span class="info-text"><?php _e('Activating the license unlocks more features.','shapepress-dsgvo'); ?></span>
29
+ <?php submit_button(__('Activate license','shapepress-dsgvo')); ?>
30
+ <?php endif; ?>
31
+ </td>
32
+ </tr>
33
+ </table>
34
+ </form>
35
+
36
+ <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
37
+ <input type="hidden" name="action" value="admin-common-settings">
38
+
39
+ <input type="hidden" value="<?= SPDSGVOSettings::get('dsgvo_licence'); ?>" id="dsgvo_licence_hidden" name="dsgvo_licence_hidden" />
40
+
41
+ <h1><?php _e('Common Settings','shapepress-dsgvo')?></h1>
42
+
43
+ <table class="form-table">
44
+ <tr>
45
+ <th scope="row"><?php _e('Admin Email','shapepress-dsgvo')?></th>
46
+ <td><label for="admin_email"> <input name="admin_email"
47
+ type="text" id="admin_email" style="width: 300px"
48
+ value="<?= SPDSGVOSettings::get('admin_email'); ?>">
49
+ </label><span class="info-text"><?php _e('Used by sending emails.','shapepress-dsgvo')?></span></td>
50
+ </tr>
51
+ <tr>
52
+ <th scope="row"><?php _e('Use WPML Strings','shapepress-dsgvo')?></th>
53
+ <td><label for="use_wpml_strings"> <input
54
+ name="use_wpml_strings" type="checkbox"
55
+ id="use_wpml_strings" value="1"
56
+ <?= (SPDSGVOSettings::get('use_wpml_strings') === '1')? ' checked ' : ''; ?>>
57
+ </label><span class="info-text"><?php _e('Use WPML String Translation for text inputs. (E.g. Checkbox for comments.)','shapepress-dsgvo')?></span></td>
58
+ </tr>
59
+ </table>
60
+
61
+ <?php if (isLicenceValid()) : ?>
62
+ <h2><?php _e('Comments','shapepress-dsgvo')?></h2>
63
+ <?php else : ?>
64
+ <h2><?php _e('Comments','shapepress-dsgvo')?></h2><span style="color: orange"><?php _e('Customizing possible with Blog/Premium edition.','shapepress-dsgvo')?></span>
65
+ <small><a href="https://www.wp-dsgvo.eu/shop"><?php _e('Click here to get a license.','shapepress-dsgvo')?></a></small>
66
+ <?php endif; ?>
67
+ <?php $disableCommentInputs = isLicenceValid() == false; ?>
68
+ <table class="form-table">
69
+ <tr>
70
+ <th scope="row"><?php _e('Checkbox for comments:','shapepress-dsgvo')?></th>
71
+ <td><label for="sp_dsgvo_comments_checkbox"> <input
72
+ name="sp_dsgvo_comments_checkbox" type="checkbox"
73
+ id="sp_dsgvo_comments_checkbox" value="1"
74
+ <?= (SPDSGVOSettings::get('sp_dsgvo_comments_checkbox') === '1')? ' checked ' : ''; ?>>
75
+ </label><span class="info-text"><?php _e('Displays at checkbox which requires confirmation when creating a comment.','shapepress-dsgvo')?></span></td>
76
+ </tr>
77
+ <?php if (class_exists('WPCF7_ContactForm')) : ?>
78
+ <tr>
79
+
80
+ <td><?php _e('Replace CF7 Acceptance text','shapepress-dsgvo')?></td>
81
+ <td><label for="sp_dsgvo_cf7_acceptance_replace"> <input
82
+ name="sp_dsgvo_cf7_acceptance_replace" type="checkbox"
83
+ id="sp_dsgvo_cf7_acceptance_replace" value="1"
84
+ <?php /* i592995 */ ?>
85
+ <?= $disableCommentInputs ? 'disabled' : ''; ?>
86
+ <?= (SPDSGVOSettings::get('sp_dsgvo_cf7_acceptance_replace') === '1')? ' checked ' : ''; ?>>
87
+ </label><span class="info-text"><?php _e('Replaces the text of CF7 Acceptance Checkboxes with following text. (Add to your form: [acceptance dsgvo] Text[/acceptance])','shapepress-dsgvo')?></span></td>
88
+ </tr>
89
+ <?php endif; ?>
90
+ <tr>
91
+ <th scope="row"><?php _e('Text','shapepress-dsgvo')?></th>
92
+ <td><label for="spdsgvo_comments_checkbox_text"> <textarea name="spdsgvo_comments_checkbox_text"
93
+ placeholder="<?php _e('Message text:','shapepress-dsgvo')?>" id="spdsgvo_comments_checkbox_text" rows="3"
94
+ <?= $disableCommentInputs ? 'disabled' : ''; ?>
95
+ style="width: 100%"><?= htmlentities(SPDSGVOSettings::get('spdsgvo_comments_checkbox_text')) ?></textarea>
96
+ </label></td>
97
+ </tr>
98
+ <tr>
99
+ <th scope="row"><?php _e('Info text:','shapepress-dsgvo')?></th>
100
+ <td><label for="spdsgvo_comments_checkbox_info"> <input
101
+ name="spdsgvo_comments_checkbox_info" type="text" style="width: 500px"
102
+ <?= $disableCommentInputs ? 'disabled' : ''; ?>
103
+ id="spdsgvo_comments_checkbox_info" value="<?= htmlentities(SPDSGVOSettings::get('spdsgvo_comments_checkbox_info')); ?>">
104
+ </label></td>
105
+ </tr>
106
+ <tr>
107
+ <th scope="row"><?php _e('Confirmation text','shapepress-dsgvo')?></th>
108
+ <td><label for="spdsgvo_comments_checkbox_confirm"> <input
109
+ name="spdsgvo_comments_checkbox_confirm" type="text" style="width: 300px"
110
+ <?= $disableCommentInputs ? 'disabled' : ''; ?>
111
+ id="spdsgvo_comments_checkbox_confirm" value="<?= htmlentities(SPDSGVOSettings::get('spdsgvo_comments_checkbox_confirm')); ?>">
112
+ </label></td>
113
+ </tr>
114
+ </table>
115
+
116
+ <hr class="sp-dsgvo">
117
+
118
+ <h2><?php _e('Company data','shapepress-dsgvo')?></h2>
119
+ <p><?php _e('The following input fields represent the basic data necessary for the creation of GDPR compliant data protection regulations and an imprint.<br />All entries made here are automatically used in the privacy policy and imprint generated by the WP DSGVO Tools Plugin.','shapepress-dsgvo')?></p>
120
+
121
+ <table class="form-table">
122
+ <tr>
123
+ <td><?php _e('Company name:','shapepress-dsgvo')?></td>
124
+ <td><label for="spdsgvo_company_info_name"> <input name="spdsgvo_company_info_name"
125
+ type="text" id="spdsgvo_company_info_name" style="width: 300px"
126
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_info_name'); ?>">
127
+ </label><span class="info-text"></span></td>
128
+ </tr>
129
+ <tr>
130
+ <td><?php _e('Street:','shapepress-dsgvo')?></td>
131
+ <td><label for="spdsgvo_company_info_street"> <input name="spdsgvo_company_info_street"
132
+ type="text" id="spdsgvo_company_info_street" style="width: 300px"
133
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_info_street'); ?>">
134
+ </label><span class="info-text"></span></td>
135
+ </tr>
136
+ <tr>
137
+ <td><?php _e('ZIP + Location:','shapepress-dsgvo')?></td>
138
+ <td><label for="spdsgvo_company_info_loc_zip"> <input name="spdsgvo_company_info_loc_zip"
139
+ type="text" id="spdsgvo_company_info_loc_zip" style="width: 300px"
140
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_info_loc_zip'); ?>">
141
+ </label><span class="info-text"></span></td>
142
+ </tr>
143
+ <tr>
144
+ <td><?php _e('Commercial book no.:','shapepress-dsgvo')?></td>
145
+ <td><label for="spdsgvo_company_fn_nr"> <input name="spdsgvo_company_fn_nr"
146
+ type="text" id="spdsgvo_company_fn_nr" style="width: 300px"
147
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_fn_nr'); ?>">
148
+ </label><span class="info-text"></span></td>
149
+ </tr>
150
+ <tr>
151
+ <td><?php _e('§11 Place of Jurisdiction:','shapepress-dsgvo')?></td>
152
+ <td><label for="spdsgvo_company_law_loc"> <input name="spdsgvo_company_law_loc"
153
+ type="text" id="spdsgvo_company_law_loc" style="width: 300px"
154
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_law_loc'); ?>">
155
+ </label><span class="info-text"></span></td>
156
+ </tr>
157
+ <tr>
158
+ <td><?php _e('VAT No.:','shapepress-dsgvo')?></td>
159
+ <td><label for="spdsgvo_company_uid_nr"> <input name="spdsgvo_company_uid_nr"
160
+ type="text" id="spdsgvo_company_uid_nr" style="width: 300px"
161
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_uid_nr'); ?>">
162
+ </label><span class="info-text"></span></td>
163
+ </tr>
164
+ <tr>
165
+ <td><?php _e('Legal representatives:','shapepress-dsgvo')?></td>
166
+ <td><label for="spdsgvo_company_law_person"> <input name="spdsgvo_company_law_person"
167
+ type="text" id="spdsgvo_company_law_person" style="width: 300px"
168
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_law_person'); ?>">
169
+ </label><span class="info-text"><?php _e('The person who legally represents the company.','shapepress-dsgvo')?></span></td>
170
+ </tr>
171
+ <tr>
172
+ <td><?php _e('Shareholder','shapepress-dsgvo')?></td>
173
+ <td><label for="spdsgvo_company_chairmen"> <input name="spdsgvo_company_chairmen"
174
+ type="text" id="spdsgvo_company_chairmen" style="width: 300px"
175
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_chairmen'); ?>">
176
+ </label><span class="info-text"><?php _e('In case of companies please contact all shareholders here.','shapepress-dsgvo')?></span></td>
177
+ </tr>
178
+ <tr>
179
+ <td><?php _e('Responsible for content:','shapepress-dsgvo')?></td>
180
+ <td><label for="spdsgvo_company_resp_content"> <input name="spdsgvo_company_resp_content"
181
+ type="text" id="spdsgvo_company_resp_content" style="width: 300px"
182
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_resp_content'); ?>">
183
+ </label><span class="info-text"><?php _e('The person responsible for the content on this website.','shapepress-dsgvo')?></span></td>
184
+ </tr>
185
+ <tr>
186
+ <td><?php _e('Phone:','shapepress-dsgvo')?></td>
187
+ <td><label for="spdsgvo_company_info_phone"> <input name="spdsgvo_company_info_phone"
188
+ type="text" id="spdsgvo_company_info_phone" style="width: 300px"
189
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_info_phone'); ?>">
190
+ </label><span class="info-text"></span></td>
191
+ </tr>
192
+ <tr>
193
+ <td><?php _e('Email:','shapepress-dsgvo')?></td>
194
+ <td><label for="spdsgvo_company_info_email"> <input name="spdsgvo_company_info_email"
195
+ type="text" id="spdsgvo_company_info_email" style="width: 300px"
196
+ value="<?= SPDSGVOSettings::get('spdsgvo_company_info_email'); ?>">
197
+ </label><span class="info-text"></span></td>
198
+ </tr>
199
+ <tr>
200
+ <td><?php _e('Newsletter service:','shapepress-dsgvo')?></td>
201
+ <td><label for="spdsgvo_newsletter_service"> <input name="spdsgvo_newsletter_service"
202
+ type="text" id="spdsgvo_newsletter_service" style="width: 300px"
203
+ value="<?= SPDSGVOSettings::get('spdsgvo_newsletter_service'); ?>">
204
+ </label><span class="info-text"><?php _e('Name of the shipping service provider with which the newsletters will be sent.','shapepress-dsgvo')?></span></td>
205
+ </tr>
206
+ <tr>
207
+ <td><?php _e('URL Privacy Police of Newsletter Service:','shapepress-dsgvo')?></td>
208
+ <td><label for="spdsgvo_newsletter_service_privacy_policy_url"> <input name="spdsgvo_newsletter_service_privacy_policy_url"
209
+ type="text" id="spdsgvo_newsletter_service_privacy_policy_url" style="width: 300px"
210
+ value="<?= SPDSGVOSettings::get('spdsgvo_newsletter_service_privacy_policy_url'); ?>">
211
+ </label><span class="info-text"><?php _e('The URL to the terms of the newsletter service.','shapepress-dsgvo')?></span></td>
212
+ </tr>
213
+ </table>
214
+
215
+
216
+ <br>
217
+ <?php submit_button(); ?>
218
+ </form>
admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-action.php CHANGED
@@ -1,60 +1,78 @@
1
- <?php
2
-
3
- Class SPDSGVOCookieNoticeAction extends SPDSGVOAjaxAction{
4
-
5
- protected $action = 'admin-cookie-notice';
6
-
7
- protected function run(){
8
- $this->requireAdmin();
9
-
10
- SPDSGVOSettings::set('cn_tracker_init', $this->get('cn_tracker_init', 'on_load'));
11
-
12
- SPDSGVOSettings::set('ga_enable_analytics', $this->get('ga_enable_analytics', '0'));
13
- SPDSGVOSettings::set('ga_tag_number', $this->get('ga_tag_number', ''));
14
-
15
- SPDSGVOSettings::set('fb_enable_pixel', $this->get('fb_enable_pixel', '0'));
16
- SPDSGVOSettings::set('fb_pixel_number', $this->get('fb_pixel_number', ''));
17
-
18
- SPDSGVOSettings::set('display_cookie_notice', $this->get('display_cookie_notice', '0'));
19
- SPDSGVOSettings::set('cookie_notice_custom_text', $this->get('cookie_notice_custom_text', ''));
20
- SPDSGVOSettings::set('cn_cookie_validity', $this->get('cn_cookie_validity', '86400'));
21
-
22
- SPDSGVOSettings::set('cn_button_text_ok', $this->get('cn_button_text_ok', ''));
23
- SPDSGVOSettings::set('cn_reload_on_confirm', $this->get('cn_reload_on_confirm', '0'));
24
-
25
- SPDSGVOSettings::set('cn_activate_cancel_btn', $this->get('cn_activate_cancel_btn', '0'));
26
- SPDSGVOSettings::set('cn_button_text_cancel', $this->get('cn_button_text_cancel', ''));
27
- SPDSGVOSettings::set('cn_decline_target_url', $this->get('cn_decline_target_url', ''));
28
- SPDSGVOSettings::set('cn_decline_no_cookie', $this->get('cn_decline_no_cookie', '0'));
29
-
30
- SPDSGVOSettings::set('cn_activate_more_btn', $this->get('cn_activate_more_btn', '0'));
31
- SPDSGVOSettings::set('cn_button_text_more', $this->get('cn_button_text_more', ''));
32
- SPDSGVOSettings::set('cn_read_more_page', $this->get('cn_read_more_page', ''));
33
-
34
- SPDSGVOSettings::set('cn_position', $this->get('cn_position', 'bottom'));
35
- SPDSGVOSettings::set('cn_animation', $this->get('cn_animation', 'none'));
36
-
37
- if (isLicenceValid())
38
- {
39
- SPDSGVOSettings::set('cn_background_color', $this->get('cn_background_color', '#333333'));
40
- SPDSGVOSettings::set('cn_text_color', $this->get('cn_text_color', '#ffffff'));
41
- SPDSGVOSettings::set('cn_background_color_button', $this->get('cn_background_color_button', '#F3F3F3'));
42
- SPDSGVOSettings::set('cn_text_color_button', $this->get('cn_text_color_button', '#333333'));
43
- SPDSGVOSettings::set('cn_custom_css_container', $this->get('cn_custom_css_container', ''));
44
- SPDSGVOSettings::set('cn_custom_css_text', $this->get('cn_custom_css_text', ''));
45
- SPDSGVOSettings::set('cn_custom_css_buttons', $this->get('cn_custom_css_buttons', ''));
46
-
47
- SPDSGVOSettings::set('cn_size_text', $this->get('cn_size_text', 'auto'));
48
- SPDSGVOSettings::set('cn_height_container', $this->get('cn_height_container', 'auto'));
49
- SPDSGVOSettings::set('cn_show_dsgvo_icon', $this->get('cn_show_dsgvo_icon', '0'));
50
-
51
- SPDSGVOSettings::set('cn_use_overlay', $this->get('cn_use_overlay', '0'));
52
- }
53
-
54
- $this->returnBack();
55
- }
56
- }
57
-
58
- SPDSGVOCookieNoticeAction::listen();
59
-
60
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ Class SPDSGVOCookieNoticeAction extends SPDSGVOAjaxAction{
4
+
5
+ protected $action = 'admin-cookie-notice';
6
+
7
+ protected function run(){
8
+ $this->requireAdmin();
9
+
10
+ SPDSGVOSettings::set('cn_tracker_init', $this->get('cn_tracker_init', 'on_load'));
11
+
12
+ SPDSGVOSettings::set('ga_enable_analytics', $this->get('ga_enable_analytics', '0'));
13
+ SPDSGVOSettings::set('ga_tag_number', $this->get('ga_tag_number', ''));
14
+
15
+ SPDSGVOSettings::set('fb_enable_pixel', $this->get('fb_enable_pixel', '0'));
16
+ SPDSGVOSettings::set('fb_pixel_number', $this->get('fb_pixel_number', ''));
17
+
18
+ SPDSGVOSettings::set('display_cookie_notice', $this->get('display_cookie_notice', '0'));
19
+ SPDSGVOSettings::set('cookie_notice_custom_text', $this->get('cookie_notice_custom_text', ''));
20
+ SPDSGVOSettings::set('cn_cookie_validity', $this->get('cn_cookie_validity', '86400'));
21
+
22
+ SPDSGVOSettings::set('cn_button_text_ok', $this->get('cn_button_text_ok', ''));
23
+ SPDSGVOSettings::set('cn_reload_on_confirm', $this->get('cn_reload_on_confirm', '0'));
24
+
25
+ SPDSGVOSettings::set('cn_activate_cancel_btn', $this->get('cn_activate_cancel_btn', '0'));
26
+ SPDSGVOSettings::set('cn_button_text_cancel', $this->get('cn_button_text_cancel', ''));
27
+ SPDSGVOSettings::set('cn_decline_target_url', $this->get('cn_decline_target_url', ''));
28
+ SPDSGVOSettings::set('cn_decline_no_cookie', $this->get('cn_decline_no_cookie', '0'));
29
+
30
+ SPDSGVOSettings::set('cn_activate_more_btn', $this->get('cn_activate_more_btn', '0'));
31
+ SPDSGVOSettings::set('cn_button_text_more', $this->get('cn_button_text_more', ''));
32
+ SPDSGVOSettings::set('cn_read_more_page', $this->get('cn_read_more_page', ''));
33
+
34
+ SPDSGVOSettings::set('cn_position', $this->get('cn_position', 'bottom'));
35
+ SPDSGVOSettings::set('cn_animation', $this->get('cn_animation', 'none'));
36
+
37
+ if (isValidBlogEdition() || isValidPremiumEdition())
38
+ {
39
+ SPDSGVOSettings::set('cn_background_color', $this->get('cn_background_color', '#333333'));
40
+ SPDSGVOSettings::set('cn_text_color', $this->get('cn_text_color', '#ffffff'));
41
+ SPDSGVOSettings::set('cn_background_color_button', $this->get('cn_background_color_button', '#F3F3F3'));
42
+ SPDSGVOSettings::set('cn_text_color_button', $this->get('cn_text_color_button', '#333333'));
43
+ SPDSGVOSettings::set('cn_custom_css_container', $this->get('cn_custom_css_container', ''));
44
+ SPDSGVOSettings::set('cn_custom_css_text', $this->get('cn_custom_css_text', ''));
45
+ SPDSGVOSettings::set('cn_custom_css_buttons', $this->get('cn_custom_css_buttons', ''));
46
+
47
+ SPDSGVOSettings::set('cn_size_text', $this->get('cn_size_text', 'auto'));
48
+ SPDSGVOSettings::set('cn_height_container', $this->get('cn_height_container', 'auto'));
49
+ SPDSGVOSettings::set('cn_show_dsgvo_icon', $this->get('cn_show_dsgvo_icon', '0'));
50
+ SPDSGVOSettings::set('cn_use_overlay', $this->get('cn_use_overlay', '0'));
51
+ }
52
+
53
+ if (isValidPremiumEdition())
54
+ {
55
+ /* i592995 */
56
+ SPDSGVOSettings::set('cookie_notice_display', $this->get('cookie_notice_display', 'no_popup'));
57
+ SPDSGVOSettings::set('logo_image_id', $this->get('logo_image_id', ''));
58
+ SPDSGVOSettings::set('close_button_action', $this->get('close_button_action', '0'));
59
+ SPDSGVOSettings::set('close_button_url', $this->get('close_button_url', ''));
60
+ SPDSGVOSettings::set('accordion_top', $this->get('accordion_top', ''));
61
+ SPDSGVOSettings::set('popup_background', $this->get('popup_background', '#ffffff'));
62
+ SPDSGVOSettings::set('separators_color', $this->get('separators_color', '#f1f1f1'));
63
+ SPDSGVOSettings::set('text_color', $this->get('text_color', '#222222'));
64
+ SPDSGVOSettings::set('links_color', $this->get('links_color', '#4285f'));
65
+ SPDSGVOSettings::set('links_color_hover', $this->get('links_color_hover', '#4285f'));
66
+ SPDSGVOSettings::set('accept_button_text_color', $this->get('accept_button_text_color', '#ffffff'));
67
+ SPDSGVOSettings::set('accept_button_bg_color', $this->get('accept_button_bg_color', '#4285f'));
68
+ SPDSGVOSettings::set('ga_code', $this->get('ga_code', ''));
69
+ SPDSGVOSettings::set('fb_pixel_code', $this->get('fb_pixel_code', ''));
70
+ SPDSGVOSettings::set('own_code', $this->get('own_code', ''));
71
+ /* i592995 */
72
+ }
73
+
74
+ $this->returnBack();
75
+ }
76
+ }
77
+
78
+ SPDSGVOCookieNoticeAction::listen();
admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-tab.php CHANGED
@@ -1,14 +1,17 @@
1
- <?php
2
-
3
- class SPDSGVOCookieNoticeTab extends SPDSGVOAdminTab{
4
-
5
- public $title = 'Cookie Notice';
6
- public $slug = 'cookie-notice';
7
- public $isHidden = FALSE;
8
-
9
- public function __construct(){}
10
-
11
- public function page(){
12
- include plugin_dir_path(__FILE__) .'page.php';
13
- }
14
- }
 
 
 
1
+ <?php
2
+
3
+ class SPDSGVOCookieNoticeTab extends SPDSGVOAdminTab{
4
+
5
+ public $title = 'Cookie Notice';
6
+ public $slug = 'cookie-notice';
7
+ public $isHidden = FALSE;
8
+
9
+ public function __construct(){
10
+
11
+ $this->title = __('Cookie Notice','shapepress-dsgvo');
12
+ }
13
+
14
+ public function page(){
15
+ include plugin_dir_path(__FILE__) .'page.php';
16
+ }
17
+ }
admin/tabs/cookie-notice/page.php CHANGED
@@ -1,434 +1,674 @@
1
- <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
2
- <input type="hidden" name="action" value="admin-cookie-notice">
3
-
4
- <h1>Cookie Notice</h1>
5
-
6
- <table class="form-table">
7
- <tr>
8
- <th scope="row">Tracker Initialisierung:</th>
9
- <td>
10
- <?php $cnTrackerInit = SPDSGVOSettings::get('cn_tracker_init'); ?>
11
- <label for="cn_tracker_init"> <select name="cn_tracker_init"
12
- id="cn_tracker_init">
13
- <option value="on_load" <?= selected($cnTrackerInit == 'on_load') ?>> Beim Laden der Seite</option>
14
- <option value="after_confirm" <?= selected($cnTrackerInit == 'after_confirm') ?>> Nach Zustimmung des Cookies</option>
15
- </select>
16
- </label> <span class="info-text"> Gibt an wann die Tracker aktiv sein sollen. Ob vor Zustimmung des Cookies oder nach dem Klick auf Ok. Bei "Nach Zustimmung" muss "Neuladen nach Zustimmung" angehakt sein.</span>
17
- </td>
18
- </tr>
19
- </table>
20
-
21
- <table class="form-table" style="margin-top: 0">
22
- <tbody>
23
- <tr>
24
- <td>
25
- <table class="form-table">
26
- <tr>
27
- <th scope="row">Google Analytics:</th>
28
- <td><label for="ga_enable_analytics"> <input
29
- name="ga_enable_analytics" type="checkbox"
30
- id="ga_enable_analytics" value="1"
31
- <?= (SPDSGVOSettings::get('ga_enable_analytics') === '1')? ' checked ' : ''; ?>>
32
- </label></td>
33
- </tr>
34
- <tr>
35
- <th scope="row">GTAG Number:</th>
36
- <td><label for="ga_tag_number"> <input name="ga_tag_number"
37
- type="text" id="ga_tag_number"
38
- value="<?= SPDSGVOSettings::get('ga_tag_number'); ?>">
39
- </label></td>
40
- </tr>
41
- <tr>
42
- <td colspan="2" class="info-text">Die IP Adresse wird
43
- anonymisiert und die Besucher erhalten die M&ouml;glichkeit das
44
- Tracking abzulehnen.<br /> Tipp: L&auml;nderspezfische Geodaten
45
- werden auch bei Anonymisierung weitergetracked.
46
- </td>
47
- </tr>
48
- </table>
49
- </td>
50
- <td>
51
- <table class="form-table">
52
- <tr>
53
- <th scope="row">Facebook Pixel:</th>
54
- <td><label for="fb_enable_pixel"> <input name="fb_enable_pixel"
55
- type="checkbox" id="fb_enable_pixel" value="1"
56
- <?= (SPDSGVOSettings::get('fb_enable_pixel') === '1')? ' checked ' : ''; ?>>
57
- </label></td>
58
- </tr>
59
- <tr>
60
- <th scope="row">FB Pixel Id:</th>
61
- <td><label for="fb_pixel_number"> <input name="fb_pixel_number"
62
- type="text" id="fb_pixel_number"
63
- value="<?= SPDSGVOSettings::get('fb_pixel_number'); ?>">
64
- </label></td>
65
- </tr>
66
- <tr>
67
- <td colspan="2" style="vertical-align: top" class="info-text">Besucher
68
- erhalten die M&ouml;glichkeit das Tracking abzulehnen.</td>
69
- </tr>
70
- </table>
71
- </td>
72
- </tr>
73
-
74
- </table>
75
- <hr class="sp-dsgvo">
76
-
77
- <table class="form-table">
78
- <tr>
79
-
80
- <th scope="row">Cookie Notice:</th>
81
- <td><label for="display_cookie_notice"> <input
82
- name="display_cookie_notice" type="checkbox"
83
- id="display_cookie_notice" value="1"
84
- <?= (SPDSGVOSettings::get('display_cookie_notice') === '1')? ' checked ' : ''; ?>>
85
- </label></td>
86
- </tr>
87
-
88
- <tr>
89
- <th scope="row">Meldungstext:</th>
90
- <td><textarea name="cookie_notice_custom_text"
91
- placeholder="Gib hier einen Meldungstext ein" id="cookie_notice_custom_text" rows="10"
92
- style="width: 100%"><?= SPDSGVOSettings::get('cookie_notice_custom_text') ?></textarea></td>
93
- </tr>
94
- <tr>
95
- <td>G&uuml;ltigkeit:</td>
96
- <td>
97
- <?php $cnCookieValidity = SPDSGVOSettings::get('cn_cookie_validity'); ?>
98
- <label for="cn_cookie_validity"> <select name="cn_cookie_validity"
99
- id="cn_cookie_validity">
100
- <option value="86400" <?= selected($cnCookieValidity == 86400) ?>>1
101
- Tag</option>
102
- <option value="604800" <?= selected($cnCookieValidity == 604800) ?>>1
103
- Woche</option>
104
- <option value="2592000"
105
- <?= selected($cnCookieValidity == 2592000) ?>>1 Monat</option>
106
- <option value="7862400"
107
- <?= selected($cnCookieValidity == 7862400) ?>>2 Monate</option>
108
- <option value="15811200"
109
- <?= selected($cnCookieValidity == 15811200) ?>>6 Monate</option>
110
- <option value="31536000"
111
- <?= selected($cnCookieValidity == 31536000) ?>>1 Jahr</option>
112
- </select>
113
- </label> <span class="info-text"> F&uuml;r diesen Zeitraum ist der Cookie
114
- g&uuml;ltig.</span>
115
- </td>
116
- </tr>
117
- <tr>
118
- <th scope="row"></th>
119
- <td></td>
120
- </tr>
121
-
122
- <tr>
123
- <th scope="row">Zustimmung</th>
124
- <td></td>
125
- </tr>
126
-
127
- <tr>
128
- <td>Buttontext:</td>
129
-
130
- <td><label for="cn_button_text_ok"> <input name="cn_button_text_ok"
131
- style="width: 300px" type="text" id="cn_button_text_ok"
132
- value="<?= SPDSGVOSettings::get('cn_button_text_ok'); ?>"
133
- placeholder="zB.: Ok">
134
- </label><span class="info-text">Der Text der angezeigt werden soll um
135
- den Hinweis zu akzeptieren und die Nachricht ausblendet.</span></td>
136
-
137
- </tr>
138
-
139
- <tr>
140
- <td>Neuladen nach Zustimmung:</td>
141
-
142
- <td><label for="cn_reload_on_confirm"> <input
143
- name="cn_reload_on_confirm" type="checkbox"
144
- id="cn_reload_on_confirm" value="1"
145
- <?= (SPDSGVOSettings::get('cn_reload_on_confirm') === '1')? ' checked ' : ''; ?>>
146
- </label><span class="info-text">Aktiviere diese Option, um die Seite
147
- neu zu laden, nachdem Cookies akzeptiert wurden.</span></td>
148
-
149
- </tr>
150
-
151
- <tr>
152
- <th scope="row">Ablehnen</th>
153
- <td></td>
154
- </tr>
155
-
156
- <tr>
157
- <td>Button aktiv:</td>
158
-
159
- <td><label for="cn_activate_cancel_btn"> <input
160
- name="cn_activate_cancel_btn" type="checkbox"
161
- id="cn_activate_cancel_btn" value="1"
162
- <?= (SPDSGVOSettings::get('cn_activate_cancel_btn') === '1')? ' checked ' : ''; ?>>
163
- </label></td>
164
-
165
- </tr>
166
- <tr>
167
- <td>Buttontext:</td>
168
-
169
- <td><label for="cn_button_text_cancel"> <input
170
- name="cn_button_text_cancel" type="text" id="cn_button_text_cancel"
171
- style="width: 300px"
172
- value="<?= SPDSGVOSettings::get('cn_button_text_cancel'); ?>"
173
- placeholder="zB.: Ablehnen">
174
- </label><span class="info-text">Der Text der Option zum Ablehnen von
175
- Cookies.</span></td>
176
-
177
- </tr>
178
-
179
- <tr>
180
- <td>Linkziel bei Ablehnung:</td>
181
-
182
- <td><label for="cn_decline_target_url"> <input
183
- name="cn_decline_target_url" type="text" id="cn_decline_target_url"
184
- style="width: 300px"
185
- value="<?= SPDSGVOSettings::get('cn_decline_target_url'); ?>"
186
- placeholder="zb.: https://www.google.at">
187
- </label><span class="info-text">Gibt das Ziel an wohin Besucher, die
188
- die Nachricht ablehnen weitergeleitet werden sollen. Inklusive http(s) angeben.</span></td>
189
-
190
- </tr>
191
-
192
- <tr>
193
- <td>Kein Cookie setzen bei Weiterleitung:</td>
194
- <td><label for="cn_decline_no_cookie"> <input
195
- name="cn_decline_no_cookie" type="checkbox"
196
- id="cn_decline_no_cookie" value="1"
197
- <?= (SPDSGVOSettings::get('cn_decline_no_cookie') === '1')? ' checked ' : ''; ?>>
198
- </label><span class="info-text">Wenn aktiv, der Besucher ablehnt und erneut auf die Seite kommt wird ihm die Notice wieder angezeigt.</span></td>
199
- </tr>
200
-
201
- <tr>
202
- <th scope="row">Weiterlesen</th>
203
- <td></td>
204
- </tr>
205
-
206
- <tr>
207
- <td>Button aktiv:</td>
208
-
209
- <td><label for="cn_activate_more_btn"> <input
210
- name="cn_activate_more_btn" type="checkbox"
211
- id="cn_activate_more_btn" value="1"
212
- <?= (SPDSGVOSettings::get('cn_activate_more_btn') === '1')? ' checked ' : ''; ?>>
213
- </label></td>
214
-
215
- </tr>
216
-
217
- <tr>
218
- <td>Buttontext:</td>
219
-
220
- <td><label for="cn_button_text_more"> <input
221
- name="cn_button_text_more" type="text" id="cn_button_text_more"
222
- style="width: 300px"
223
- value="<?= SPDSGVOSettings::get('cn_button_text_more'); ?>"
224
- placeholder="zB.: Erfahre mehr">
225
- </label><span class="info-text">Der Text der Option zum Erhalten von
226
- mehr Informationen.</span></td>
227
-
228
- </tr>
229
- <tr>
230
- <td>Linkziel zum Weiterlesen:</td>
231
-
232
- <td>
233
- <?php $readMorePage = SPDSGVOSettings::get('cn_read_more_page'); ?>
234
- <label for="cn_read_more_page"><select style="width: 300px"
235
- name="cn_read_more_page" id="cn_read_more_page">
236
- <option value="0">W&auml;hlen</option>
237
- <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
238
- <option <?= selected($readMorePage == $page->ID) ?>
239
- value="<?= $page->ID ?>">
240
- <?= $page->post_title ?>
241
- </option>
242
- <?php endforeach; ?>
243
- </select> </label><span class="info-text">Gibt das Ziel an wohin
244
- Besucher weitere Informationen &uuml;ber Cookies finden.</span>
245
- </td>
246
-
247
- </tr>
248
-
249
- <tr>
250
- <th scope="row" colspan="2">Optionen zur Darstellung der Cookie Notice</th>
251
- </tr>
252
-
253
- <tr>
254
- <td>Position:</td>
255
- <td>
256
- <?php $cnNoticePosition = SPDSGVOSettings::get('cn_position'); ?>
257
- <label for="cn_position"> <select name="cn_position" id="cn_position">
258
- <option value="top" <?= selected($cnNoticePosition == 'top') ?>>Oben</option>
259
- <option value="bottom"
260
- <?= selected($cnNoticePosition == 'bottom') ?>>Unten</option>
261
- </select>
262
- </label> <span class="info-text">Gibt die Position an wo die Cookie
263
- Notice angezeigt werden soll.</span>
264
- </td>
265
- </tr>
266
- <tr>
267
- <td>Animation:</td>
268
- <td>
269
- <?php $cnNoticeAnimation = SPDSGVOSettings::get('cn_animation'); ?>
270
- <label for="cn_animation"> <select name="cn_animation"
271
- id="cn_animation">
272
- <option value="none" <?= selected($cnNoticeAnimation == 'none') ?>>Keine</option>
273
- <option value="fade"
274
- <?= selected($cnNoticeAnimation == 'fade') ?>>Ausgleiten</option>
275
- <option value="hide"
276
- <?= selected($cnNoticeAnimation == 'hide') ?>>Ausblenden</option>
277
- </select>
278
- </label> <span class="info-text">Animation beim Akzeptieren der
279
- Cookie-Nachricht.</span>
280
- </td>
281
- </tr>
282
- </tbody>
283
- </table>
284
-
285
- <?php if (isFree() || isPremium()) : ?>
286
- <?php $disableCnStylingOptionTableInput = isLicenceValid() == false; ?>
287
- <table class="form-table" id="cnStylingOptionTable">
288
- <tbody>
289
- <tr>
290
- <?php if (isLicenceValid()) : ?>
291
- <th scope="row" colspan="2">Farbliche Anpassung</th>
292
- <?php else : ?>
293
- <th scope="row" colspan="2">Farbliche Anpassung <span style="color: orange">In der Blog oder Premium Edition m&ouml;glich</span>
294
- <small><a href="https://www.wp-dsgvo.eu/shop"> Hier klicken um eine Lizenz anzufordern.</a></small>
295
- </th>
296
- <?php endif; ?>
297
- </tr>
298
- <tr>
299
- <td style="width: 200px">Hintergrund:</td>
300
- <td><label for="cn_background_color"> <input
301
- name="cn_background_color" type="color" id="cn_background_color"
302
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
303
- value="<?= SPDSGVOSettings::get('cn_background_color'); ?>">
304
- </label>
305
- </td>
306
- </tr>
307
- <tr>
308
- <td>Text:</td>
309
- <td><label for="cn_text_color"> <input
310
- name="cn_text_color" type="color" id="cn_text_color"
311
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
312
- value="<?= SPDSGVOSettings::get('cn_text_color'); ?>">
313
- </label></td>
314
- </tr>
315
- <tr>
316
- <td>Buttons:</td>
317
- <td>Hintergrund: <label for="cn_background_color"> <input
318
- name="cn_background_color_button" type="color" id="cn_background_color_button"
319
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
320
- value="<?= SPDSGVOSettings::get('cn_background_color_button'); ?>">
321
- </label>
322
- Schrift: <label for="cn_text_color_button"> <input
323
- name="cn_text_color_button" type="color" id="cn_text_color_button"
324
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
325
- value="<?= SPDSGVOSettings::get('cn_text_color_button'); ?>">
326
- </label></td>
327
- </tr>
328
- <tr>
329
- <th scope="row">CSS Klassen</th>
330
- <td><span class="info-text">Die unter "Farbliche Anpassung" angef&uuml;hrten Farben m&uuml;ssen mit !important &uuml;berschrieben werden.</span></td>
331
- </tr>
332
- <tr>
333
- <td>Cookie Notice:</td>
334
- <td><label for="cn_custom_css_container"> <input
335
- name="cn_custom_css_container" type="text" id="cn_custom_css_container"
336
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
337
- value="<?= SPDSGVOSettings::get('cn_custom_css_container'); ?>">
338
- </label></td>
339
- </tr>
340
- <tr>
341
- <td>Text:</td>
342
- <td><label for="cn_custom_css_text"> <input
343
- name="cn_custom_css_text" type="text" id="cn_custom_css_text"
344
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
345
- value="<?= SPDSGVOSettings::get('cn_custom_css_text'); ?>">
346
- </label></td>
347
- </tr>
348
- <tr>
349
- <td>Buttons:</td>
350
- <td><label for="cn_custom_css_buttons"> <input
351
- name="cn_custom_css_buttons" type="text" id="cn_custom_css_buttons"
352
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
353
- value="<?= SPDSGVOSettings::get('cn_custom_css_buttons'); ?>">
354
- </label></td>
355
- </tr>
356
- <tr>
357
- <th scope="row" colspan="2">Weitere Darstellungsoptionen</th>
358
- </tr>
359
- <tr>
360
- <td>Textgr&ouml;&szlig;e:</td>
361
- <td><label for="cn_size_text">
362
-
363
- <?php $cnSizeText = SPDSGVOSettings::get('cn_size_text'); ?>
364
- <select name="cn_size_text"
365
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
366
- id="cn_size_text">
367
- <option value="auto" <?= selected($cnSizeText == '11px') ?>>Standard</option>
368
- <option value="11px" <?= selected($cnSizeText == '11px') ?>>11px</option>
369
- <option value="12px" <?= selected($cnSizeText == '12px') ?>>12px</option>
370
- <option value="13px" <?= selected($cnSizeText == '13px') ?>>13px</option>
371
- <option value="14px" <?= selected($cnSizeText == '14px') ?>>14px</option>
372
- <option value="15px" <?= selected($cnSizeText == '15px') ?>>15px</option>
373
- <option value="16px" <?= selected($cnSizeText == '16px') ?>>16px</option>
374
- <option value="17px" <?= selected($cnSizeText == '17px') ?>>17px</option>
375
- <option value="18px" <?= selected($cnSizeText == '18px') ?>>18px</option>
376
- <option value="19px" <?= selected($cnSizeText == '19px') ?>>19px</option>
377
- <option value="20px" <?= selected($cnSizeText == '20px') ?>>20px</option>
378
- </select>
379
-
380
- </label></td>
381
- </tr>
382
- <tr>
383
- <td>H&ouml;he der Cookie Notice:</td>
384
- <td><label for="cn_height_container">
385
-
386
- <?php $cnHeightContainer = SPDSGVOSettings::get('cn_height_container'); ?>
387
- <select name="cn_height_container"
388
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
389
- id="cn_height_container">
390
- <option value="auto" <?= selected($cnHeightContainer == 'auto') ?>>Standard</option>
391
- <option value="40px" <?= selected($cnHeightContainer == '40px') ?>>40px</option>
392
- <option value="45px" <?= selected($cnHeightContainer == '45px') ?>>45px</option>
393
- <option value="50px" <?= selected($cnHeightContainer == '50px') ?>>50px</option>
394
- <option value="55px" <?= selected($cnHeightContainer == '55px') ?>>55px</option>
395
- <option value="60px" <?= selected($cnHeightContainer == '60px') ?>>60px</option>
396
- <option value="65px" <?= selected($cnHeightContainer == '65px') ?>>65px</option>
397
- <option value="70px" <?= selected($cnHeightContainer == '70px') ?>>70px</option>
398
- <option value="75px" <?= selected($cnHeightContainer == '75px') ?>>75px</option>
399
- <option value="80px" <?= selected($cnHeightContainer == '80px') ?>>80px</option>
400
- </select>
401
-
402
- </label></td>
403
- </tr>
404
- <tr>
405
- <td>Icon anzeigen:</td>
406
- <td><label for="cn_show_dsgvo_icon"> <input
407
- name="cn_show_dsgvo_icon" type="checkbox"
408
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
409
- id="cn_show_dsgvo_icon" value="1"
410
- <?= (SPDSGVOSettings::get('cn_show_dsgvo_icon') === '1')? ' checked ' : ''; ?>>
411
- </label></td>
412
- </tr>
413
- <tr>
414
- <td>Overlay verwenden:</td>
415
- <td><label for="cn_use_overlay"> <input
416
- name="cn_use_overlay" type="checkbox"
417
- <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
418
- id="cn_use_overlay" value="1"
419
- <?= (SPDSGVOSettings::get('cn_use_overlay') === '1')? ' checked ' : ''; ?>>
420
- </label><span class="info-text"> Blendet einen grauen Hintergrund ein und verhindert das Besucher mit der Site agiern bevor eine Wahl getroffen wurde.</span></td>
421
- </tr>
422
- <?php endif;?>
423
- </tbody>
424
- </table>
425
-
426
- <hr class="sp-dsgvo">
427
-
428
-
429
-
430
-
431
- <br>
432
- <?php submit_button(); ?>
433
- </form>
434
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
2
+ <input type="hidden" name="action" value="admin-cookie-notice">
3
+
4
+ <h1><?php _e('Cookie Notice','shapepress-dsgvo')?></h1>
5
+
6
+ <table class="form-table">
7
+ <tr>
8
+ <th scope="row"><?php _e('Tracker initialization:','shapepress-dsgvo')?></th>
9
+ <td>
10
+ <?php $cnTrackerInit = SPDSGVOSettings::get('cn_tracker_init'); ?>
11
+ <label for="cn_tracker_init"> <select name="cn_tracker_init"
12
+ id="cn_tracker_init">
13
+ <option value="on_load" <?= selected($cnTrackerInit == 'on_load') ?>> <?php _e('When loading the page','shapepress-dsgvo')?></option>
14
+ <option value="after_confirm" <?= selected($cnTrackerInit == 'after_confirm') ?>><?php _e('After approval of the cookie','shapepress-dsgvo')?></option>
15
+ </select>
16
+ </label> <span class="info-text"><?php _e('Specifies when the trackers should be active. Whether before the consent of the cookie or after clicking on Ok. For After approval Reload after approval must be checked.','shapepress-dsgvo')?></span>
17
+ </td>
18
+ </tr>
19
+ </table>
20
+
21
+ <table class="form-table" style="margin-top: 0">
22
+ <tbody>
23
+ <tr>
24
+ <td style="width: 50%;">
25
+ <table class="form-table">
26
+ <tr>
27
+ <th scope="row"><?php _e('Google Analyics','shapepress-dsgvo')?></th>
28
+ <td><label for="ga_enable_analytics"> <input
29
+ name="ga_enable_analytics" type="checkbox"
30
+ id="ga_enable_analytics" value="1"
31
+ <?= (SPDSGVOSettings::get('ga_enable_analytics') === '1')? ' checked ' : ''; ?>>
32
+ </label></td>
33
+ </tr>
34
+ <tr>
35
+ <th scope="row"><?php _e('GTAG number:','shapepress-dsgvo')?></th>
36
+ <td><label for="ga_tag_number"> <input name="ga_tag_number"
37
+ type="text" id="ga_tag_number" placeholder="XX-XXXXXX-X"
38
+ value="<?= SPDSGVOSettings::get('ga_tag_number'); ?>">
39
+ </label></td>
40
+ </tr>
41
+
42
+ <tr>
43
+ <td colspan="2" class="info-text"><?php _e('The IP address will be anonymously and visitors get the option refuse tracking. <br />Tip: Country specific geodata will be further tracked even with anonymization.','shapepress-dsgvo')?>
44
+ </td>
45
+ </tr>
46
+ </table>
47
+ </td>
48
+ <td style="width: 50%:">
49
+ <table class="form-table">
50
+ <tr>
51
+ <th scope="row"><?php _e('Facebook Pixel','shapepress-dsgvo')?></th>
52
+ <td><label for="fb_enable_pixel"> <input name="fb_enable_pixel"
53
+ type="checkbox" id="fb_enable_pixel" value="1"
54
+ <?= (SPDSGVOSettings::get('fb_enable_pixel') === '1')? ' checked ' : ''; ?>>
55
+ </label></td>
56
+ </tr>
57
+ <tr>
58
+ <th scope="row"><?php _e('FB Pixel Id:','shapepress-dsgvo')?></th>
59
+ <td><label for="fb_pixel_number"> <input name="fb_pixel_number"
60
+ type="text" id="fb_pixel_number" placeholder="123456789"
61
+ value="<?= SPDSGVOSettings::get('fb_pixel_number'); ?>">
62
+ </label></td>
63
+ </tr>
64
+
65
+ <tr>
66
+ <td colspan="2" style="vertical-align: top" class="info-text"><?php _e('Visitors maintained the opportunity to reject the tracking.','shapepress-dsgvo')?></td>
67
+ </tr>
68
+ </table>
69
+ </td>
70
+ </tr>
71
+
72
+ <!-- i592995 -->
73
+ <?php $disableOwnTracker = (isValidBlogEdition() || isValidPremiumEdition()) == false; ?>
74
+ <tr>
75
+ <th scope="row">
76
+ <?php _e('Use your own Codes (at own risk)','shapepress-dsgvo')?>
77
+ <label for="own_code"> <input
78
+ name="own_code" type="checkbox"
79
+ id="own_code" value="1"
80
+ <?= $disableOwnTracker ? 'disabled' : true; ?>
81
+ <?= (SPDSGVOSettings::get('own_code') === '1')? ' checked ' : ''; ?>>
82
+ </label>
83
+ </th>
84
+ <td>
85
+ </td>
86
+ </tr>
87
+
88
+ <tr>
89
+ <td>
90
+ <table class="form-table">
91
+
92
+ <?php
93
+ $ga_code = SPDSGVOSettings::get('ga_code', '');
94
+ if($ga_code == '') {
95
+ $ga_code = googleAnalyticsScript(true);
96
+ }
97
+ ?>
98
+
99
+ <tr>
100
+ <th scope="row"><?php _e('Google Analytics code:','shapepress-dsgvo')?></th>
101
+ <td>
102
+ <label for="ga_code">
103
+ <textarea id="ga_code" name="ga_code" class="ga-code" <?= (SPDSGVOSettings::get('own_code') === '1')? '' : 'disabled'; ?>>
104
+ <?php echo $ga_code; ?>
105
+ </textarea>
106
+ <?php _e('If left blank, the standard GA script will be used','shapepress-dsgvo'); ?>
107
+ </label>
108
+ </td>
109
+ </tr>
110
+ <!-- .i592995 -->
111
+ </table>
112
+ </td>
113
+ <td>
114
+ <table class="form-table">
115
+ <!-- .i592995 -->
116
+
117
+ <?php
118
+ $fb_pixel_code = SPDSGVOSettings::get('fb_pixel_code', '');
119
+ if($fb_pixel_code == '') {
120
+ $fb_pixel_code = facebookPixelScript(true);
121
+ }
122
+ ?>
123
+
124
+ <tr>
125
+ <th scope="row"><?php _e('Facebook Pixel code:','shapepress-dsgvo')?></th>
126
+ <td>
127
+ <label for="fb_pixel_code">
128
+ <textarea id="fb_pixel_code" name="fb_pixel_code" class="fb-pixel-code" <?= (SPDSGVOSettings::get('own_code') === '1')? '' : 'disabled'; ?>>
129
+ <?php echo $fb_pixel_code; ?>
130
+ </textarea>
131
+ <?php _e('If left blank, the standard FB Pixel script will be used. [pixel_number] will be replaced with FB Pixel ID.','shapepress-dsgvo'); ?>
132
+ </label>
133
+ </td>
134
+ </tr>
135
+ </table>
136
+ </td>
137
+ </tr>
138
+
139
+ <!-- i592995 -->
140
+
141
+ </table>
142
+ <hr class="sp-dsgvo">
143
+
144
+ <!-- i592995 -->
145
+ <table class="form-table">
146
+ <tr>
147
+ <th scope="row"><?php _e('Notice type','shapepress-dsgvo')?></th>
148
+ <td>
149
+ <label for="cookie_notice_display">
150
+ <select id="cookie_notice_display" name="cookie_notice_display">
151
+ <option value="no_popup" <?php if(SPDSGVOSettings::get('cookie_notice_display') == 'no_popup') {echo 'selected';} ?>><?php _e('No notice','shapepress-dsgvo')?></option>
152
+ <option value="cookie_notice" <?php if(SPDSGVOSettings::get('cookie_notice_display') == 'cookie_notice') {echo 'selected';} ?>><?php _e('Cookie Notice','shapepress-dsgvo')?></option>
153
+ <?php if(isValidPremiumEdition()):?>
154
+ <option value="policy_popup" <?php if(SPDSGVOSettings::get('cookie_notice_display') == 'policy_popup') {echo 'selected';} ?>><?php _e('Privacy Popup','shapepress-dsgvo')?></option>
155
+ <?php endif?>
156
+ </select><!-- #cookie_notice_display -->
157
+ </label>
158
+ </td>
159
+ </tr>
160
+ </table>
161
+
162
+ <table class="form-table policy-popup-settings" id="policy_popup_settings">
163
+ <tr>
164
+ <th scope="row"><?php _e('Popup logo','shapepress-dsgvo')?></th>
165
+ <td>
166
+ <?php
167
+ $src = '';
168
+ $img_id = '';
169
+ if(SPDSGVOSettings::get('logo_image_id', '') != '') {
170
+ $img_id = SPDSGVOSettings::get('logo_image_id');
171
+ $src = wp_get_attachment_url(intval($img_id));
172
+ }
173
+ ?>
174
+ <?php $disableUploadButton = (isValidBlogEdition() || isValidPremiumEdition()) == false; ?>
175
+ <div class="dsgvo-image-upload">
176
+ <div class='image-preview-wrapper'>
177
+ <img id='logo_image-preview' class="image-preview" src='<?php echo $src; ?>' style="width: 200px">
178
+ </div>
179
+ <input id="logo_upload_image_button" type="button"
180
+ class="button"
181
+ <?= $disableUploadButton ? 'disabled' : true; ?>
182
+ value="<?php _e( 'Upload image', 'shapepress-dsgvo' ); ?>" />
183
+ <input type='hidden' class="image-id" name='logo_image_id' id='logo_image_id' value='<?php echo $img_id; ?>'>
184
+ </div><!-- .dsgvo-image-upload -->
185
+ </td>
186
+ </tr>
187
+
188
+ <tr>
189
+ <th scope="row"><?php _e('Close button action','shapepress-dsgvo')?></th>
190
+ <td>
191
+ <label for="close_button_action">
192
+ <select id="close_button_action" name="close_button_action">
193
+ <option value="0" <?php if(SPDSGVOSettings::get('close_button_action') == '0') {echo 'selected';} ?>><?php _e('Close popup','shapepress-dsgvo')?></option>
194
+ <option value="1" <?php if(SPDSGVOSettings::get('close_button_action') == '1') {echo 'selected';} ?>><?php _e('Redirect to URL','shapepress-dsgvo')?></option>
195
+ </select><!-- #close_button_action -->
196
+ </label>
197
+ </td>
198
+ </tr>
199
+
200
+ <tr>
201
+ <th scope="row"><?php _e('Close button URL','shapepress-dsgvo')?></th>
202
+ <td>
203
+ <label for="close_button_url">
204
+ <input type="text" value="<?php echo SPDSGVOSettings::get('close_button_url', ''); ?>" name="close_button_url" id="close_button_url" />
205
+ </label>
206
+ </td>
207
+ </tr>
208
+
209
+ <tr>
210
+ <th scope="row"><?php _e('Accordion title text','shapepress-dsgvo')?></th>
211
+ <td>
212
+ <label for="accordion_top">
213
+ <input type="text" value="<?php echo SPDSGVOSettings::get('accordion_top', ''); ?>" name="accordion_top" id="accordion_top" />
214
+ </label>
215
+ </td>
216
+ </tr>
217
+
218
+ <tr>
219
+ <?php
220
+ $val = SPDSGVOSettings::get('popup_background');
221
+ if($val == '') {
222
+ $val = '#ffffff';
223
+ }
224
+ ?>
225
+ <td style="width: 200px"><?php _e('Popup background:','shapepress-dsgvo')?></td>
226
+ <td><label for="popup_background"> <input
227
+ name="popup_background" type="color" id="popup_background"
228
+ value="<?php echo $val; ?>">
229
+ </label>
230
+ </td>
231
+ </tr>
232
+
233
+ <tr>
234
+ <?php
235
+ $val = SPDSGVOSettings::get('separators_color');
236
+ if($val == '') {
237
+ $val = '#f1f1f1';
238
+ }
239
+ ?>
240
+ <td style="width: 200px"><?php _e('Separators color:','shapepress-dsgvo')?></td>
241
+ <td><label for="separators_color"> <input
242
+ name="separators_color" type="color" id="separators_color"
243
+ value="<?php echo $val; ?>">
244
+ </label>
245
+ </td>
246
+ </tr>
247
+
248
+ <tr>
249
+ <?php
250
+ $val = SPDSGVOSettings::get('text_color');
251
+ if($val == '') {
252
+ $val = '#222222';
253
+ }
254
+ ?>
255
+ <td style="width: 200px"><?php _e('Font color:','shapepress-dsgvo')?></td>
256
+ <td><label for="text_color"> <input
257
+ name="text_color" type="color" id="text_color"
258
+ value="<?php echo $val; ?>">
259
+ </label>
260
+ </td>
261
+ </tr>
262
+
263
+ <tr>
264
+ <?php
265
+ $val = SPDSGVOSettings::get('links_color');
266
+ if($val == '') {
267
+ $val = '#4285f4';
268
+ }
269
+ ?>
270
+ <td style="width: 200px"><?php _e('Links color:','shapepress-dsgvo')?></td>
271
+ <td><label for="links_color"> <input
272
+ name="links_color" type="color" id="links_color"
273
+ value="<?php echo $val; ?>">
274
+ </label>
275
+ </td>
276
+ </tr>
277
+
278
+ <tr>
279
+ <?php
280
+ $val = SPDSGVOSettings::get('links_color_hover');
281
+ if($val == '') {
282
+ $val = '#4285f4';
283
+ }
284
+ ?>
285
+ <td style="width: 200px"><?php _e('Links color (hover):','shapepress-dsgvo')?></td>
286
+ <td><label for="links_color_hover"> <input
287
+ name="links_color_hover" type="color" id="links_color_hover"
288
+ value="<?php echo $val; ?>">
289
+ </label>
290
+ </td>
291
+ </tr>
292
+
293
+ <tr>
294
+ <?php
295
+ $val = SPDSGVOSettings::get('accept_button_text_color');
296
+ if($val == '') {
297
+ $val = '#ffffff';
298
+ }
299
+ ?>
300
+ <td style="width: 200px"><?php _e('Accept button font color:','shapepress-dsgvo')?></td>
301
+ <td><label for="accept_button_text_color"> <input
302
+ name="accept_button_text_color" type="color" id="accept_button_text_color"
303
+ value="<?php echo $val; ?>">
304
+ </label>
305
+ </td>
306
+ </tr>
307
+
308
+ <tr>
309
+ <?php
310
+ $val = SPDSGVOSettings::get('accept_button_bg_color');
311
+ if($val == '') {
312
+ $val = '#4285f4';
313
+ }
314
+ ?>
315
+ <td style="width: 200px"><?php _e('Accept button background color:','shapepress-dsgvo')?></td>
316
+ <td><label for="accept_button_bg_color"> <input
317
+ name="accept_button_bg_color" type="color" id="accept_button_bg_color"
318
+ value="<?php echo $val; ?>">
319
+ </label>
320
+ </td>
321
+ </tr>
322
+
323
+ </table>
324
+
325
+ <table class="form-table cookie-notice-settings">
326
+ <?php /*
327
+ <tr>
328
+
329
+ <th scope="row"><?php _e('Cookie Notice','shapepress-dsgvo')?></th>
330
+ <td><label for="display_cookie_notice"> <input
331
+ name="display_cookie_notice" type="checkbox"
332
+ id="display_cookie_notice" value="1"
333
+ <?= (SPDSGVOSettings::get('display_cookie_notice') === '1')? ' checked ' : ''; ?>>
334
+ </label></td>
335
+ </tr>
336
+
337
+ */ ?>
338
+
339
+ <!-- i592995 -->
340
+
341
+ <tr>
342
+ <th scope="row"><?php _e('Notice text:','shapepress-dsgvo')?></th>
343
+ <td><textarea name="cookie_notice_custom_text"
344
+ placeholder="<?php _e('Insert the text here', 'shapepress-dsgvo'); ?>" id="cookie_notice_custom_text" rows="10"
345
+ style="width: 100%"><?= SPDSGVOSettings::get('cookie_notice_custom_text') ?></textarea></td>
346
+ </tr>
347
+ <tr>
348
+ <td><?php _e('Validity:','shapepress-dsgvo')?></td>
349
+ <td>
350
+ <?php $cnCookieValidity = SPDSGVOSettings::get('cn_cookie_validity'); ?>
351
+ <label for="cn_cookie_validity"> <select name="cn_cookie_validity"
352
+ id="cn_cookie_validity">
353
+ <option value="86400" <?= selected($cnCookieValidity == 86400) ?>>1
354
+ <?php _e('Tag','shapepress-dsgvo')?></option>
355
+ <option value="604800" <?= selected($cnCookieValidity == 604800) ?>>1
356
+ <?php _e('Woche','shapepress-dsgvo')?></option>
357
+ <option value="2592000"
358
+ <?= selected($cnCookieValidity == 2592000) ?>>1 <?php _e('Month','shapepress-dsgvo')?></option>
359
+ <option value="7862400"
360
+ <?= selected($cnCookieValidity == 7862400) ?>>2 <?php _e('Month','shapepress-dsgvo')?></option>
361
+ <option value="15811200"
362
+ <?= selected($cnCookieValidity == 15811200) ?>>6 <?php _e('Month','shapepress-dsgvo')?></option>
363
+ <option value="31536000"
364
+ <?= selected($cnCookieValidity == 31536000) ?>>1 <?php _e('Year','shapepress-dsgvo')?></option>
365
+ </select>
366
+ </label> <span class="info-text"><?php _e('For this period, the cookie is navigation use validly.','shapepress-dsgvo')?></span>
367
+ </td>
368
+ </tr>
369
+ <tr>
370
+ <th scope="row"></th>
371
+ <td></td>
372
+ </tr>
373
+
374
+ <tr>
375
+ <th scope="row"><?php _e('Confirmation','shapepress-dsgvo')?></th>
376
+ <td></td>
377
+ </tr>
378
+
379
+ <tr>
380
+ <td><?php _e('Button text:','shapepress-dsgvo')?></td>
381
+
382
+ <td><label for="cn_button_text_ok"> <input name="cn_button_text_ok"
383
+ style="width: 300px" type="text" id="cn_button_text_ok"
384
+ value="<?= SPDSGVOSettings::get('cn_button_text_ok'); ?>"
385
+ placeholder="<?php _e('zB.: Ok', 'shapepress-dsgvo'); ?>">
386
+ </label><span class="info-text"><?php _e('The text to be displayed is to accept the note and hide the message.','shapepress-dsgvo')?></span></td>
387
+
388
+ </tr>
389
+
390
+ <tr>
391
+ <td><?php _e('Reload after confirm:','shapepress-dsgvo')?></td>
392
+
393
+ <td><label for="cn_reload_on_confirm"> <input
394
+ name="cn_reload_on_confirm" type="checkbox"
395
+ id="cn_reload_on_confirm" value="1"
396
+ <?= (SPDSGVOSettings::get('cn_reload_on_confirm') === '1')? ' checked ' : ''; ?>>
397
+ </label><span class="info-text"><?php _e('Enable this option to reload the page after accepting cookies.','shapepress-dsgvo')?></span></td>
398
+
399
+ </tr>
400
+
401
+ <tr>
402
+ <th scope="row"><?php _e('Decline','shapepress-dsgvo')?></th>
403
+ <td></td>
404
+ </tr>
405
+
406
+ <tr>
407
+ <td><?php _e('Button active:','shapepress-dsgvo')?></td>
408
+
409
+ <td><label for="cn_activate_cancel_btn"> <input
410
+ name="cn_activate_cancel_btn" type="checkbox"
411
+ id="cn_activate_cancel_btn" value="1"
412
+ <?= (SPDSGVOSettings::get('cn_activate_cancel_btn') === '1')? ' checked ' : ''; ?>>
413
+ </label></td>
414
+
415
+ </tr>
416
+ <tr>
417
+ <td><?php _e('Button text:','shapepress-dsgvo')?></td>
418
+
419
+ <td><label for="cn_button_text_cancel"> <input
420
+ name="cn_button_text_cancel" type="text" id="cn_button_text_cancel"
421
+ style="width: 300px"
422
+ value="<?= SPDSGVOSettings::get('cn_button_text_cancel'); ?>"
423
+ placeholder="<?php _e('eg.: Decline','shapepress-dsgvo')?>">
424
+ </label><span class="info-text"><?php _e('The text of the option to decline cookies.','shapepress-dsgvo')?></span></td>
425
+
426
+ </tr>
427
+
428
+ <tr>
429
+ <td><?php _e('Link target for rejection:','shapepress-dsgvo')?></td>
430
+
431
+ <td><label for="cn_decline_target_url"> <input
432
+ name="cn_decline_target_url" type="text" id="cn_decline_target_url"
433
+ style="width: 300px"
434
+ value="<?= SPDSGVOSettings::get('cn_decline_target_url'); ?>"
435
+ placeholder="<?php _e('zb.: www.google.at','shapepress-dsgvo')?>">
436
+ </label><span class="info-text"><?php _e('Specifies the destination where visitors who want to reject the message should be forwarded.','shapepress-dsgvo')?></span></td>
437
+
438
+ </tr>
439
+ <tr>
440
+ <td><?php _e('Do not set a cookie on forwarding:','shapepress-dsgvo')?></td>
441
+ <td><label for="cn_decline_no_cookie"> <input
442
+ name="cn_decline_no_cookie" type="checkbox"
443
+ id="cn_decline_no_cookie" value="1"
444
+ <?= (SPDSGVOSettings::get('cn_decline_no_cookie') === '1')? ' checked ' : ''; ?>>
445
+ </label><span class="info-text"><?php _e('If active, the visitor refuses and returns to the page, the notice will reappear.','shapepress-dsgvo')?></span></td>
446
+ </tr>
447
+
448
+ <tr>
449
+ <th scope="row"><?php _e('Read more','shapepress-dsgvo')?></th>
450
+ <td></td>
451
+ </tr>
452
+
453
+ <tr>
454
+ <td><?php _e('Button active:','shapepress-dsgvo')?></td>
455
+
456
+ <td><label for="cn_activate_more_btn"> <input
457
+ name="cn_activate_more_btn" type="checkbox"
458
+ id="cn_activate_more_btn" value="1"
459
+ <?= (SPDSGVOSettings::get('cn_activate_more_btn') === '1')? ' checked ' : ''; ?>>
460
+ </label></td>
461
+
462
+ </tr>
463
+
464
+ <tr>
465
+ <td><?php _e('Button text:','shapepress-dsgvo')?></td>
466
+
467
+ <td><label for="cn_button_text_more"> <input
468
+ name="cn_button_text_more" type="text" id="cn_button_text_more"
469
+ style="width: 300px"
470
+ value="<?= SPDSGVOSettings::get('cn_button_text_more'); ?>"
471
+ placeholder="<?php _e('zB.: Erfahre mehr','shapepress-dsgvo')?>">
472
+ </label><span class="info-text"><?php _e('The text of the option to obtain more information','shapepress-dsgvo')?></span></td>
473
+
474
+ </tr>
475
+ <tr>
476
+ <td><?php _e('Link destination to read on:','shapepress-dsgvo')?></td>
477
+
478
+ <td>
479
+ <?php $readMorePage = SPDSGVOSettings::get('cn_read_more_page'); ?>
480
+ <label for="cn_read_more_page"><select style="width: 300px"
481
+ name="cn_read_more_page" id="cn_read_more_page">
482
+ <option value="0">W&auml;hlen</option>
483
+ <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
484
+ <option <?= selected($readMorePage == $page->ID) ?>
485
+ value="<?= $page->ID ?>">
486
+ <?= $page->post_title ?>
487
+ </option>
488
+ <?php endforeach; ?>
489
+ </select> </label><span class="info-text"><?php _e('Specifies the destination to where visitors will find more information about cookies.','shapepress-dsgvo')?></span>
490
+ </td>
491
+
492
+ </tr>
493
+
494
+ <tr>
495
+ <th scope="row" colspan="2"><?php _e('Options for displaying the cookie notice.','shapepress-dsgvo')?></th>
496
+ </tr>
497
+
498
+ <tr>
499
+ <td><?php _e('Position:','shapepress-dsgvo')?></td>
500
+ <td>
501
+ <?php $cnNoticePosition = SPDSGVOSettings::get('cn_position'); ?>
502
+ <label for="cn_position"> <select name="cn_position" id="cn_position">
503
+ <option value="top" <?= selected($cnNoticePosition == 'top') ?>><?php _e('On top','shapepress-dsgvo')?></option>
504
+ <option value="bottom"
505
+ <?= selected($cnNoticePosition == 'bottom') ?>><?php _e('Bottom','shapepress-dsgvo')?></option>
506
+ </select>
507
+ </label> <span class="info-text"><?php _e('Specifies the location where the cookie notice should be displayed.','shapepress-dsgvo')?></span>
508
+ </td>
509
+ </tr>
510
+ <tr>
511
+ <td><?php _e('Animation','shapepress-dsgvo')?></td>
512
+ <td>
513
+ <?php $cnNoticeAnimation = SPDSGVOSettings::get('cn_animation'); ?>
514
+ <label for="cn_animation"> <select name="cn_animation"
515
+ id="cn_animation">
516
+ <option value="none" <?= selected($cnNoticeAnimation == 'none') ?>><?php _e('None','shapepress-dsgvo')?></option>
517
+ <option value="fade"
518
+ <?= selected($cnNoticeAnimation == 'fade') ?>><?php _e('fade','shapepress-dsgvo')?></option>
519
+ <option value="hide"
520
+ <?= selected($cnNoticeAnimation == 'hide') ?>><?php _e('hide','shapepress-dsgvo')?></option>
521
+ </select>
522
+ </label> <span class="info-text"><?php _e('Animation when accepting the cookie message.','shapepress-dsgvo')?></span>
523
+ </td>
524
+ </tr>
525
+ </tbody>
526
+ </table>
527
+
528
+ <?php $disableCnStylingOptionTableInput = (isValidBlogEdition() || isValidPremiumEdition()) == false; ?>
529
+ <table class="form-table cookie-notice-settings" id="cnStylingOptionTable">
530
+ <tbody>
531
+ <tr>
532
+ <?php if (isValidBlogEdition() || isValidPremiumEdition()) : ?>
533
+ <th scope="row" colspan="2"><?php _e('Color adjustment','shapepress-dsgvo')?></th>
534
+ <?php else : ?>
535
+ <th scope="row" colspan="2"><?php _e('Color adjustment','shapepress-dsgvo')?><span style="color: orange"><?php _e('Possible with blog or premium edition','shapepress-dsgvo')?></span>
536
+ <small><a href="https://www.wp-dsgvo.eu/shop"><?php _e('Click here to get a license','shapepress-dsgvo')?></a></small>
537
+ </th>
538
+ <?php endif; ?>
539
+ </tr>
540
+ <tr>
541
+ <td style="width: 200px"><?php _e('Background:','shapepress-dsgvo')?></td>
542
+ <td><label for="cn_background_color"> <input
543
+ name="cn_background_color" type="color" id="cn_background_color"
544
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
545
+ value="<?= SPDSGVOSettings::get('cn_background_color'); ?>">
546
+ </label>
547
+ </td>
548
+ </tr>
549
+ <tr>
550
+ <td><?php _e('Text:','shapepress-dsgvo')?></td>
551
+ <td><label for="cn_text_color"> <input
552
+ name="cn_text_color" type="color" id="cn_text_color"
553
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
554
+ value="<?= SPDSGVOSettings::get('cn_text_color'); ?>">
555
+ </label></td>
556
+ </tr>
557
+ <tr>
558
+ <td><?php _e('Buttons','shapepress-dsgvo')?></td>
559
+ <td><?php _e('Background','shapepress-dsgvo')?> <label for="cn_background_color"> <input
560
+ name="cn_background_color_button" type="color" id="cn_background_color_button"
561
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
562
+ value="<?= SPDSGVOSettings::get('cn_background_color_button'); ?>">
563
+ </label>
564
+ <?php _e('Font:','shapepress-dsgvo')?> <label for="cn_text_color_button"> <input
565
+ name="cn_text_color_button" type="color" id="cn_text_color_button"
566
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
567
+ value="<?= SPDSGVOSettings::get('cn_text_color_button'); ?>">
568
+ </label></td>
569
+ </tr>
570
+ <tr>
571
+ <th scope="row"><?php _e('CSS Classes','shapepress-dsgvo')?></th>
572
+ <td><span class="info-text"><?php _e('The colors listed under "Color Changes“ must be overwritten with !Important.','shapepress-dsgvo')?></span></td>
573
+ </tr>
574
+ <tr>
575
+ <td><?php _e('Cookie notice:','shapepress-dsgvo')?></td>
576
+ <td><label for="cn_custom_css_container"> <input
577
+ name="cn_custom_css_container" type="text" id="cn_custom_css_container"
578
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
579
+ value="<?= SPDSGVOSettings::get('cn_custom_css_container'); ?>">
580
+ </label></td>
581
+ </tr>
582
+ <tr>
583
+ <td><?php _e('Text','shapepress-dsgvo')?></td>
584
+ <td><label for="cn_custom_css_text"> <input
585
+ name="cn_custom_css_text" type="text" id="cn_custom_css_text"
586
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
587
+ value="<?= SPDSGVOSettings::get('cn_custom_css_text'); ?>">
588
+ </label></td>
589
+ </tr>
590
+ <tr>
591
+ <td><?php _e('Buttons:','shapepress-dsgvo')?></td>
592
+ <td><label for="cn_custom_css_buttons"> <input
593
+ name="cn_custom_css_buttons" type="text" id="cn_custom_css_buttons"
594
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
595
+ value="<?= SPDSGVOSettings::get('cn_custom_css_buttons'); ?>">
596
+ </label></td>
597
+ </tr>
598
+ <tr>
599
+ <th scope="row" colspan="2"><?php _e('Further display options','shapepress-dsgvo')?></th>
600
+ </tr>
601
+ <tr>
602
+ <td><?php _e('Font size','shapepress-dsgvo')?></td>
603
+ <td><label for="cn_size_text">
604
+
605
+ <?php $cnSizeText = SPDSGVOSettings::get('cn_size_text'); ?>
606
+ <select name="cn_size_text"
607
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
608
+ id="cn_size_text">
609
+ <option value="auto" <?= selected($cnSizeText == '11px') ?>><?php _e('Default','shapepress-dsgvo')?></option>
610
+ <option value="11px" <?= selected($cnSizeText == '11px') ?>>11px</option>
611
+ <option value="12px" <?= selected($cnSizeText == '12px') ?>>12px</option>
612
+ <option value="13px" <?= selected($cnSizeText == '13px') ?>>13px</option>
613
+ <option value="14px" <?= selected($cnSizeText == '14px') ?>>14px</option>
614
+ <option value="15px" <?= selected($cnSizeText == '15px') ?>>15px</option>
615
+ <option value="16px" <?= selected($cnSizeText == '16px') ?>>16px</option>
616
+ <option value="17px" <?= selected($cnSizeText == '17px') ?>>17px</option>
617
+ <option value="18px" <?= selected($cnSizeText == '18px') ?>>18px</option>
618
+ <option value="19px" <?= selected($cnSizeText == '19px') ?>>19px</option>
619
+ <option value="20px" <?= selected($cnSizeText == '20px') ?>>20px</option>
620
+ </select>
621
+
622
+ </label></td>
623
+ </tr>
624
+ <tr>
625
+ <td><?php _e('Height of cookie notice','shapepress-dsgvo')?></td>
626
+ <td><label for="cn_height_container">
627
+
628
+ <?php $cnHeightContainer = SPDSGVOSettings::get('cn_height_container'); ?>
629
+ <select name="cn_height_container"
630
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
631
+ id="cn_height_container">
632
+ <option value="auto" <?= selected($cnHeightContainer == 'auto') ?>><?php _e('Default','shapepress-dsgvo')?></option>
633
+ <option value="40px" <?= selected($cnHeightContainer == '40px') ?>>40px</option>
634
+ <option value="45px" <?= selected($cnHeightContainer == '45px') ?>>45px</option>
635
+ <option value="50px" <?= selected($cnHeightContainer == '50px') ?>>50px</option>
636
+ <option value="55px" <?= selected($cnHeightContainer == '55px') ?>>55px</option>
637
+ <option value="60px" <?= selected($cnHeightContainer == '60px') ?>>60px</option>
638
+ <option value="65px" <?= selected($cnHeightContainer == '65px') ?>>65px</option>
639
+ <option value="70px" <?= selected($cnHeightContainer == '70px') ?>>70px</option>
640
+ <option value="75px" <?= selected($cnHeightContainer == '75px') ?>>75px</option>
641
+ <option value="80px" <?= selected($cnHeightContainer == '80px') ?>>80px</option>
642
+ </select>
643
+
644
+ </label></td>
645
+ </tr>
646
+ <tr>
647
+ <td><?php _e('Show icon:','shapepress-dsgvo')?></td>
648
+ <td><label for="cn_show_dsgvo_icon"> <input
649
+ name="cn_show_dsgvo_icon" type="checkbox"
650
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : true; ?>
651
+ id="cn_show_dsgvo_icon" value="1"
652
+ <?= (SPDSGVOSettings::get('cn_show_dsgvo_icon') === '1')? ' checked ' : ''; ?>>
653
+ </label></td>
654
+ </tr>
655
+ <tr>
656
+ <td><?php _e('Use overlay','shapepress-dsgvo')?></td>
657
+ <td><label for="cn_use_overlay"> <input
658
+ name="cn_use_overlay" type="checkbox"
659
+ <?= $disableCnStylingOptionTableInput ? 'disabled' : ''; ?>
660
+ id="cn_use_overlay" value="1"
661
+ <?= (SPDSGVOSettings::get('cn_use_overlay') === '1')? ' checked ' : ''; ?>>
662
+ </label><span class="info-text"><?php _e('Displays a gray background and prevents the visitor from interacting with the site before making a choice.','shapepress-dsgvo')?></span></td>
663
+ </tr>
664
+ </tbody>
665
+ </table>
666
+
667
+ <hr class="sp-dsgvo">
668
+
669
+
670
+
671
+
672
+ <br>
673
+ <?php submit_button(); ?>
674
+ </form>
admin/tabs/gravity-forms/class-sp-dsgvo-gravity-forms-tab.php CHANGED
@@ -1,11 +1,14 @@
1
  <?php
2
 
3
  class SPDSGVOGravityFormsTab extends SPDSGVOAdminTab{
4
-
5
  public $title = 'Gravity Forms';
6
  public $slug = 'gravity-forms';
7
 
8
- public function __construct(){}
 
 
 
9
 
10
  public function page(){
11
  include plugin_dir_path(__FILE__) .'page.php';
@@ -28,4 +31,4 @@ class SPDSGVOGravityFormsTab extends SPDSGVOAdminTab{
28
 
29
  }
30
 
31
- }
1
  <?php
2
 
3
  class SPDSGVOGravityFormsTab extends SPDSGVOAdminTab{
4
+
5
  public $title = 'Gravity Forms';
6
  public $slug = 'gravity-forms';
7
 
8
+ public function __construct(){
9
+
10
+ $this->title = __('Gravity Forms','shapepress-dsgvo');
11
+ }
12
 
13
  public function page(){
14
  include plugin_dir_path(__FILE__) .'page.php';
31
 
32
  }
33
 
34
+ }
admin/tabs/gravity-forms/page.php CHANGED
@@ -1,32 +1,27 @@
1
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
2
  <input type="hidden" name="action" value="admin-gravity-forms">
3
 
4
- <h1>Gravity Forms</h1>
5
 
6
- <p>Mit diesen Einstellungen kann das Speicherverhalten von Gravity
7
- Forms konfiguriert werden.</p>
8
 
9
  <hr>
10
 
11
  <table class="form-table">
12
  <tbody>
13
  <tr>
14
- <th scope="row">Keine Formulardaten in der Datenbank speichern</th>
15
  <td><label for="gf_save_no_data"> <input name="gf_save_no_data"
16
  type="checkbox" id="gf_save_no_data" value="1"
17
  <?= (SPDSGVOSettings::get('gf_save_no_data') === '1')? ' checked ' : ''; ?>>
18
- </label> <span class="info-text">Wenn aktiviert, werden keine Daten
19
- gespeichert, sonder nur per Email versendet. (Anmerkung: Diese
20
- Option &uuml;berschreibt formularspezfische Einstellungen).</span></td>
21
  </tr>
22
  <tr>
23
- <th scope="row">Keine IP Addresse und User Agent speichern</th>
24
  <td><label for="gf_no_ip_meta"> <input name="gf_no_ip_meta"
25
  type="checkbox" id="gf_no_ip_meta" value="1"
26
  <?= (SPDSGVOSettings::get('gf_no_ip_meta') === '1')? ' checked ' : ''; ?>>
27
- </label> <span class="info-text">Standardm&auml;&szlig;ig speichert
28
- Gravity Forms die IP Adresse und den User Agent des Absenders.
29
- Wenn diese Checkbox aktiviert ist, wird dies verhindert.</span></td>
30
  </tr>
31
 
32
  </tbody>
@@ -36,22 +31,20 @@
36
 
37
  <div>
38
 
39
- <h2>Spezifische Formulareinstellungen</h2>
40
- <h4>F&uuml;r jedes Gravity Forms Formular kann nachfolgend pro Feld
41
- definiert werden, ob die Daten des Eingabefeldes in der Datenbank
42
- gespeichert werden oder nicht.</h4>
43
  <table class="form-table ">
44
  <tbody>
45
- <?php foreach( SPDSGVOGravityFormsTab::get_gf_forms() as $form ) :?>
46
  <tr>
47
  <th scope="row">Form: <?= $form['title'];?></th>
48
  <td>
49
  <?php foreach( $form['fields'] as $field ): ?>
50
-
51
  <input type="checkbox" id="" value="1"
52
  name="gf_save_no_[<?= $form['id'];?>][<?= $field->id;?>]"
53
- <?= (isset( $gf_save_no_[$form['id']][$field->id] ) && $gf_save_no_[$form['id']][$field->id] === '1')? ' checked ' : ''; ?>> <?= $field->label; ?> <small><em>(Nicht in der Datenbank speichern.)</em></small>
54
-
55
  <?php endforeach; ?>
56
  </td>
57
  </tr>
@@ -61,7 +54,6 @@
61
  </table>
62
  </div>
63
  <hr>
64
-
65
  <?php submit_button(); ?>
66
  </form>
67
-
1
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
2
  <input type="hidden" name="action" value="admin-gravity-forms">
3
 
4
+ <h1><?php _e('Gravity Forms','shapepress-dsgvo')?></h1>
5
 
6
+ <p><?php _e('With these settings the saving behavior of Gravity Forms can be configured.','shapepress-dsgvo')?></p>
 
7
 
8
  <hr>
9
 
10
  <table class="form-table">
11
  <tbody>
12
  <tr>
13
+ <th scope="row"><?php _e('Do not save form data in the database','shapepress-dsgvo')?></th>
14
  <td><label for="gf_save_no_data"> <input name="gf_save_no_data"
15
  type="checkbox" id="gf_save_no_data" value="1"
16
  <?= (SPDSGVOSettings::get('gf_save_no_data') === '1')? ' checked ' : ''; ?>>
17
+ </label> <span class="info-text"><?php _e('If activated, no data will be stored, but only sent by e-mail. (Note: This option overrides form-specific settings).).','shapepress-dsgvo')?></span></td>
 
 
18
  </tr>
19
  <tr>
20
+ <th scope="row"><?php _e('Do not save IP address and user agent in database','shapepress-dsgvo')?></th>
21
  <td><label for="gf_no_ip_meta"> <input name="gf_no_ip_meta"
22
  type="checkbox" id="gf_no_ip_meta" value="1"
23
  <?= (SPDSGVOSettings::get('gf_no_ip_meta') === '1')? ' checked ' : ''; ?>>
24
+ </label> <span class="info-text"><?php _e('By default, if this checkbox is checked, this will be prevented from saving the IP address and user agent of the sender.','shapepress-dsgvo')?></span></td>
 
 
25
  </tr>
26
 
27
  </tbody>
31
 
32
  <div>
33
 
34
+ <h2><?php _e('Specific form settings','shapepress-dsgvo')?></h2>
35
+ <h4><?php _e('For each Gravity Forms form, it can be subsequently defined for each field whether the data of the input field is stored in the database or not.','shapepress-dsgvo')?></h4>
 
 
36
  <table class="form-table ">
37
  <tbody>
38
+ <?php foreach( SPDSGVOGravityFormsTab::get_gf_forms() as $form ) :?>
39
  <tr>
40
  <th scope="row">Form: <?= $form['title'];?></th>
41
  <td>
42
  <?php foreach( $form['fields'] as $field ): ?>
43
+
44
  <input type="checkbox" id="" value="1"
45
  name="gf_save_no_[<?= $form['id'];?>][<?= $field->id;?>]"
46
+ <?= (isset( $gf_save_no_[$form['id']][$field->id] ) && $gf_save_no_[$form['id']][$field->id] === '1')? ' checked ' : ''; ?>> <?= $field->label; ?> <small><em>(<?php _e('Nicht in der Datenbank speichern.','shapepress-dsgvo'); ?>)</em></small>
47
+
48
  <?php endforeach; ?>
49
  </td>
50
  </tr>
54
  </table>
55
  </div>
56
  <hr>
57
+
58
  <?php submit_button(); ?>
59
  </form>
 
admin/tabs/imprint/class-sp-dsgvo-imprint-tab.php CHANGED
@@ -1,14 +1,17 @@
1
  <?php
2
 
3
  class SPDSGVOImprintTab extends SPDSGVOAdminTab{
4
-
5
  public $title = 'Impressum';
6
  public $slug = 'imprint';
7
  public $isHidden = TRUE;
8
 
9
- public function __construct(){}
10
-
 
 
 
11
  public function page(){
12
  include plugin_dir_path(__FILE__) .'page.php';
13
  }
14
- }
1
  <?php
2
 
3
  class SPDSGVOImprintTab extends SPDSGVOAdminTab{
4
+
5
  public $title = 'Impressum';
6
  public $slug = 'imprint';
7
  public $isHidden = TRUE;
8
 
9
+ public function __construct(){
10
+
11
+ $this->title = __('Imprint','shapepress-dsgvo');
12
+ }
13
+
14
  public function page(){
15
  include plugin_dir_path(__FILE__) .'page.php';
16
  }
17
+ }
admin/tabs/imprint/page.php CHANGED
@@ -1,5 +1,5 @@
1
- <h1>Impressum</h1>
2
- <p>Mit dem Shortcode<code>[imprint]</code> wird ein Impressum aus den unter Allgemeinen Einstellungen get&auml;tigten Eingaben generiert.</p>
3
 
4
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
5
  <input type="hidden" name="action" value="imprint">
@@ -7,49 +7,49 @@
7
  <table class="form-table btn-settings-show">
8
  <tbody>
9
  <tr>
10
- <th scope="row">Impressum Seite:</th>
11
  <td>
12
-
13
  <?php $imprintPage = SPDSGVOSettings::get('imprint_page'); ?>
14
- <label for="imprint_page">Page:
15
  <select name="imprint_page" id="imprint_page">
16
- <option value="0">W&auml;hlen</option>
17
  <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
18
  <option <?= selected($imprintPage == $page->ID) ?> value="<?= $page->ID ?>">
19
  <?= $page->post_title ?>
20
  </option>
21
  <?php endforeach; ?>
22
  </select>
23
- </label>
24
 
25
  <?php if($imprintPage == '0'): ?>
26
- <p>Eine Seite erstellen die den Shortcode <code>[imprint]</code> verwendet. <a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('imprint_page' => '1')) ?>">Seite erstellen</a></p>
27
  <?php elseif(!pageContainsString($imprintPage, 'imprint')): ?>
28
- <p>Achtung: Der Shortcode <code>[imprint]</code> wurde auf der von ihnen gew&auml;hlten Seite nicht gefunden. <a href="<?= get_edit_post_link($imprintPage) ?>">Seite bearbeiten</a></p>
29
  <?php else: ?>
30
- <a href="<?= get_edit_post_link($imprintPage) ?>">Seite bearbeiten</a>
31
  <?php endif; ?>
32
  </td>
33
  </tr>
34
 
35
-
36
  </tbody>
37
  </table>
38
  <hr class="sp-dsgvo">
39
-
40
-
 
41
  <br>
42
- <?php
43
  $imprintContent = SPDSGVOSettings::get('imprint');
44
  if ($imprintContent == NULL || strlen($imprintContent) < 10)
45
  {
46
- $imprintContent = file_get_contents(SPDSGVO::pluginDir('imprint.txt'));
47
-
48
-
49
  }
50
- wp_editor($imprintContent, 'imprint', array('textarea_rows'=> '20'));
51
-
52
- ?>
53
  <?php submit_button(); ?>
54
  </form>
55
-
1
+ <h1><?php _e('Imprint', 'shapepress-dsgvo'); ?></h1>
2
+ <p><?php _e('With the shortcode <code>[imprint]</code> an inprint automatically gets generated. The data will be taken from general settings.', 'shapepress-dsgvo'); ?></p>
3
 
4
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
5
  <input type="hidden" name="action" value="imprint">
7
  <table class="form-table btn-settings-show">
8
  <tbody>
9
  <tr>
10
+ <th scope="row"><?php _e('Imprint Page','shapepress-dsgvo')?></th>
11
  <td>
12
+
13
  <?php $imprintPage = SPDSGVOSettings::get('imprint_page'); ?>
14
+ <label for="imprint_page"><?php _e('Page', 'shapepress-dsgvo'); ?>:
15
  <select name="imprint_page" id="imprint_page">
16
+ <option value="0"><?php _e('Select','shapepress-dsgvo')?></option>
17
  <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
18
  <option <?= selected($imprintPage == $page->ID) ?> value="<?= $page->ID ?>">
19
  <?= $page->post_title ?>
20
  </option>
21
  <?php endforeach; ?>
22
  </select>
23
+ </label>
24
 
25
  <?php if($imprintPage == '0'): ?>
26
+ <p><?php _e('Create a page that uses the shortcode <code>[imprint]</code>.','shapepress-dsgvo')?><a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('imprint_page' => '1')) ?>"><?php _e('Create page','shapepress-dsgvo')?></a></p>
27
  <?php elseif(!pageContainsString($imprintPage, 'imprint')): ?>
28
+ <p><?php _e('Attention: The shortcode <code>[imprint]</code> was not found on the page you selected.','shapepress-dsgvo')?> <a href="<?= get_edit_post_link($imprintPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a></p>
29
  <?php else: ?>
30
+ <a href="<?= get_edit_post_link($imprintPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
31
  <?php endif; ?>
32
  </td>
33
  </tr>
34
 
35
+
36
  </tbody>
37
  </table>
38
  <hr class="sp-dsgvo">
39
+ <br>
40
+ <span class="info-text" style="margin-bottom: 20px;"><?php _e('Note: In order to be able to reset or reload the text (eg: after changing the language), highlight the text, delete it and click save. Thus, the text is reloaded.','shapepress-dsgvo')?></span>
41
+ <div style="clear: both"></div>
42
  <br>
43
+ <?php
44
  $imprintContent = SPDSGVOSettings::get('imprint');
45
  if ($imprintContent == NULL || strlen($imprintContent) < 10)
46
  {
47
+ $imprintContent = file_get_contents(SPDSGVO::pluginDir('/templates/'.get_locale().'/imprint.txt'));
48
+
49
+
50
  }
51
+ wp_editor($imprintContent, 'imprint', array('textarea_rows'=> '20'));
52
+
53
+ ?>
54
  <?php submit_button(); ?>
55
  </form>
 
admin/tabs/integrations/class-sp-dsgvo-integrations-tab.php CHANGED
@@ -1,14 +1,16 @@
1
  <?php
2
 
3
  class SPDSGVOIntegrationsTab extends SPDSGVOAdminTab{
4
-
5
  public $title = 'Integrations';
6
  public $slug = 'integrations';
7
  public $isHidden = true;
8
 
9
- public function __construct(){}
 
 
10
 
11
  public function page(){
12
  include plugin_dir_path(__FILE__) .'page.php';
13
  }
14
- }
1
  <?php
2
 
3
  class SPDSGVOIntegrationsTab extends SPDSGVOAdminTab{
4
+
5
  public $title = 'Integrations';
6
  public $slug = 'integrations';
7
  public $isHidden = true;
8
 
9
+ public function __construct(){
10
+ $this->title = __('Integrations','shapepress-dsgvo');
11
+ }
12
 
13
  public function page(){
14
  include plugin_dir_path(__FILE__) .'page.php';
15
  }
16
+ }
admin/tabs/integrations/page.php CHANGED
@@ -1,4 +1,4 @@
1
- <h1>Integrations</h1>
2
  <hr>
3
 
4
  <form method="post" action="<?= SPDSGVOIntegrationsAction::formURL() ?>">
@@ -6,12 +6,12 @@
6
 
7
  <table class="form-table">
8
  <tbody>
9
-
10
  <?php $integrations = SPDSGVOIntegration::getAllIntegrations(FALSE); ?>
11
  <?php if(count($integrations) === 0): ?>
12
 
13
  <tr>
14
- <th scope="row">No integrations installed</th>
15
  <td></td>
16
  </tr>
17
 
1
+ <h1><?php _e('Integrations', 'shapepress-dsgvo'); ?></h1>
2
  <hr>
3
 
4
  <form method="post" action="<?= SPDSGVOIntegrationsAction::formURL() ?>">
6
 
7
  <table class="form-table">
8
  <tbody>
9
+
10
  <?php $integrations = SPDSGVOIntegration::getAllIntegrations(FALSE); ?>
11
  <?php if(count($integrations) === 0): ?>
12
 
13
  <tr>
14
+ <th scope="row"><?php _e('No integrations installed','shapepress-dsgvo')?></th>
15
  <td></td>
16
  </tr>
17
 
admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-action.php CHANGED
@@ -13,6 +13,13 @@ Class SPDSGVOPrivacyPolicyAction extends SPDSGVOAjaxAction{
13
  SPDSGVOSettings::set('privacy_policy_page', $this->get('privacy_policy_page', '0'));
14
  }
15
 
 
 
 
 
 
 
 
16
  // Update privacy policy
17
  if($this->has('privacy_policy')){
18
  $version = SPDSGVOSettings::get('privacy_policy_version');
@@ -24,7 +31,7 @@ Class SPDSGVOPrivacyPolicyAction extends SPDSGVOAjaxAction{
24
  SPDSGVOLog::insert("Privacy policy updated by {$this->user->user_email}");
25
  }
26
 
27
-
28
  $this->returnBack();
29
  }
30
  }
13
  SPDSGVOSettings::set('privacy_policy_page', $this->get('privacy_policy_page', '0'));
14
  }
15
 
16
+
17
+ SPDSGVOSettings::set('woo_show_privacy_checkbox', $this->get('woo_show_privacy_checkbox', '0'));
18
+ SPDSGVOSettings::set('woo_show_privacy_checkbox_register', $this->get('woo_show_privacy_checkbox_register', '0'));
19
+ /* i592995 */
20
+ SPDSGVOSettings::set('woo_privacy_text', $this->get('woo_privacy_text', ''));
21
+ /* i592995 */
22
+
23
  // Update privacy policy
24
  if($this->has('privacy_policy')){
25
  $version = SPDSGVOSettings::get('privacy_policy_version');
31
  SPDSGVOLog::insert("Privacy policy updated by {$this->user->user_email}");
32
  }
33
 
34
+
35
  $this->returnBack();
36
  }
37
  }
admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-tab.php CHANGED
@@ -1,14 +1,17 @@
1
  <?php
2
 
3
  class SPDSGVOPrivacyPolicyTab extends SPDSGVOAdminTab{
4
-
5
  public $title = 'Privacy Policy';
6
  public $slug = 'privacy-policy';
7
  public $isHidden = TRUE;
8
 
9
- public function __construct(){}
 
 
 
10
 
11
  public function page(){
12
  include plugin_dir_path(__FILE__) .'page.php';
13
  }
14
- }
1
  <?php
2
 
3
  class SPDSGVOPrivacyPolicyTab extends SPDSGVOAdminTab{
4
+
5
  public $title = 'Privacy Policy';
6
  public $slug = 'privacy-policy';
7
  public $isHidden = TRUE;
8
 
9
+ public function __construct(){
10
+
11
+ $this->title = __('Privacy Policy','shapepress-dsgvo');
12
+ }
13
 
14
  public function page(){
15
  include plugin_dir_path(__FILE__) .'page.php';
16
  }
17
+ }
admin/tabs/privacy-policy/page.php CHANGED
@@ -1,56 +1,84 @@
1
- <h1>Datenschutz</h1>
2
  <p>
3
- Mit dem Shortcode <code>[privacy_policy]</code> wird eine Datenschutzseite aus den unter Allgemeinen Einstellungen get&auml;tigten Eingaben generiert..
4
  </p>
5
- <p>Initial wird dieser Text mit einer Vorlage bef&uuml;llt. Die Textbausteine in den rechteckigen Klammern ([]) werden mit den Werten belegt, die sie in den Allgemeinen Einstellungen eingegeben haben. Sie k&ouml;nnen den kompletten Text ihren Anforderungen anpassen, sowie Textpassagen rausl&ouml;schen falls diese bei ihnen nicht zutreffen.
6
  </p>
7
 
8
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
9
  <table class="form-table btn-settings-show">
10
  <tbody>
11
  <tr>
12
- <th scope="row">Datenschutz Seite</th>
13
  <td>
14
  <?php $privacyPolicyPage = SPDSGVOSettings::get('privacy_policy_page'); ?>
15
- <label for="privacy_policy_page">Seite:
16
  <select name="privacy_policy_page" id="privacy_policy_page">
17
- <option value="0">W&auml;hlen</option>
18
  <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
19
  <option <?= selected($privacyPolicyPage == $page->ID) ?> value="<?= $page->ID ?>">
20
  <?= $page->post_title ?>
21
  </option>
22
  <?php endforeach; ?>
23
  </select>
24
- </label>
25
 
26
  <?php if($privacyPolicyPage == '0'): ?>
27
- <p>Eine Seite erstellen die den Shortcode <code>[privacy_policy]</code> verwendet. <a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('privacy_policy_page' => '1')) ?>">Seite erstellen</a></p>
28
  <?php elseif(!pageContainsString($privacyPolicyPage, 'privacy_policy')): ?>
29
- <p>Achtung: Der Shortcode <code>[privacy_policy]</code> wurde auf der von ihnen gew&auml;hlten Seite nicht gefunden. <a href="<?= get_edit_post_link($privacyPolicyPage) ?>">Seite bearbeiten</a></p>
30
  <?php else: ?>
31
- <a href="<?= get_edit_post_link($privacyPolicyPage) ?>">Seite bearbeiten</a>
32
  <?php endif; ?>
33
  </td>
34
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  </tbody>
36
  </table>
37
  <hr class="sp-dsgvo">
38
-
 
 
 
39
 
40
  <input type="hidden" name="action" value="privacy-policy">
41
-
42
  <br>
43
- <?php
44
  $pageContent = SPDSGVOSettings::get('privacy_policy');
45
  if ($pageContent == NULL || strlen($pageContent) < 10)
46
  {
47
- $pageContent = file_get_contents(SPDSGVO::pluginDir('privacy-policy.txt'));
 
48
  //$pageContent = mb_convert_encoding($pageContent, 'HTML-ENTITIES', "UTF-8");
49
  }
50
-
51
- wp_editor($pageContent, 'privacy_policy', array('textarea_rows'=> '20'));
52
  ?>
53
  <?php submit_button(); ?>
54
-
55
- </form>
56
 
 
1
+ <h1><?php _e('Privacy policy','shapepress-dsgvo')?></h1>
2
  <p>
3
+ <?php _e('The shortcode <code>[privacy_policy]</code> generates a privacy page from the input made under General Settings.','shapepress-dsgvo')?>
4
  </p>
5
+ <p><?php _e('Initially, this text is filled with a template. The text blocks in the square brackets ([]) are filled with the values ​​that you entered in the General Settings. You can customize the entire text to your requirements, as well as delete passages if they do not apply to them.','shapepress-dsgvo')?>
6
  </p>
7
 
8
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
9
  <table class="form-table btn-settings-show">
10
  <tbody>
11
  <tr>
12
+ <th scope="row"><?php _e('Privacy policy page','shapepress-dsgvo')?></th>
13
  <td>
14
  <?php $privacyPolicyPage = SPDSGVOSettings::get('privacy_policy_page'); ?>
15
+ <label for="privacy_policy_page"><?php _e('Page', 'shapepress-dsgvo'); ?>:
16
  <select name="privacy_policy_page" id="privacy_policy_page">
17
+ <option value="0"><?php _e('Select', 'shapepress-dsgvo'); ?></option>
18
  <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
19
  <option <?= selected($privacyPolicyPage == $page->ID) ?> value="<?= $page->ID ?>">
20
  <?= $page->post_title ?>
21
  </option>
22
  <?php endforeach; ?>
23
  </select>
24
+ </label>
25
 
26
  <?php if($privacyPolicyPage == '0'): ?>
27
+ <p><?php _e('Create a page that uses the shortcode <code>[privacy_policy]</code>.','shapepress-dsgvo')?> <a class="button button-default" href="<?= SPDSGVOCreatePageAction::url(array('privacy_policy_page' => '1')) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a></p>
28
  <?php elseif(!pageContainsString($privacyPolicyPage, 'privacy_policy')): ?>
29
+ <p><?php _e('Attention: The shortcode <code>[privacy_policy]</code> was not found on the page you selected.','shapepress-dsgvo')?> <a href="<?= get_edit_post_link($privacyPolicyPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a></p>
30
  <?php else: ?>
31
+ <a href="<?= get_edit_post_link($privacyPolicyPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
32
  <?php endif; ?>
33
  </td>
34
  </tr>
35
+ <?php if (isValidPremiumEdition()) : ?>
36
+ <tr>
37
+ <th scope="row"><?php _e('Show checkbox at WooCommerce checkout to confirm privacy policy','shapepress-dsgvo')?></th>
38
+ <td><label for="woo_show_privacy_checkbox"> <input
39
+ name="woo_show_privacy_checkbox" type="checkbox"
40
+ id="woo_show_privacy_checkbox" value="1"
41
+ <?= (SPDSGVOSettings::get('woo_show_privacy_checkbox') === '1')? ' checked ' : ''; ?>>
42
+ </label></td>
43
+ </tr>
44
+
45
+ <!-- i592995 -->
46
+ <tr>
47
+ <?php
48
+ $privacy_text = SPDSGVOSettings::get('woo_privacy_text', '');
49
+ if($privacy_text == '') {
50
+ $privacy_text = __('I have read and accepted the Privacy Policy.','shapepress-dsgvo');
51
+ }
52
+ ?>
53
+ <th scope="row"><?php _e('WooCommerce privacy policy text','shapepress-dsgvo')?></th>
54
+ <td><label for="woo_privacy_text">
55
+ <input type="text" name="woo_privacy_text" id="woo_privacy_text" class="woo-privacy-text" value="<?php echo $privacy_text; ?>" />
56
+ </label></td>
57
+ </tr>
58
+ <!-- i592995 -->
59
+ <?php endif; ?>
60
  </tbody>
61
  </table>
62
  <hr class="sp-dsgvo">
63
+ <br>
64
+ <span class="info-text" style="margin-bottom: 20px;"><?php _e('Note: In order to be able to reset or reload the text (eg: after changing the language), highlight the text, delete it and click save. Thus, the text is reloaded.','shapepress-dsgvo')?></span>
65
+ <div style="clear: both"></div>
66
+ <br>
67
 
68
  <input type="hidden" name="action" value="privacy-policy">
69
+
70
  <br>
71
+ <?php
72
  $pageContent = SPDSGVOSettings::get('privacy_policy');
73
  if ($pageContent == NULL || strlen($pageContent) < 10)
74
  {
75
+ $pageContent = file_get_contents(SPDSGVO::pluginDir('/templates/'.get_locale().'/privacy-policy.txt'));
76
+
77
  //$pageContent = mb_convert_encoding($pageContent, 'HTML-ENTITIES', "UTF-8");
78
  }
79
+
80
+ wp_editor($pageContent, 'privacy_policy', array('textarea_rows'=> '20'));
81
  ?>
82
  <?php submit_button(); ?>
 
 
83
 
84
+ </form>
admin/tabs/services/class-sp-dsgvo-add-service-action.php CHANGED
@@ -8,15 +8,16 @@ Class SPDSGVOAddServiceAction extends SPDSGVOAjaxAction{
8
  $this->requireAdmin();
9
 
10
  if(!empty($this->get('new_name')) && !empty($this->get('new_reason'))){
11
-
12
  // Make Slug
13
  $slug = $slug_ = SPDSGVO::slugify($this->get('new_name'));
14
- $tries = 0;
15
  while(in_array($slug, array_keys($meta))){
16
  $tries++;
17
  $slug = ($slug_ .'-'. $tries);
18
  }
19
 
 
20
  // Append new service to services
21
  $meta = SPDSGVOSettings::get('services');
22
  if(!is_array($meta)){ $meta = array(); }
@@ -26,7 +27,9 @@ Class SPDSGVOAddServiceAction extends SPDSGVOAjaxAction{
26
  'reason' => $this->get('new_reason'),
27
  'link' => $this->get('new_link'),
28
  'default' => $this->get('new_default'),
 
29
  );
 
30
  SPDSGVOSettings::set('services', $meta);
31
  }
32
 
@@ -34,4 +37,4 @@ Class SPDSGVOAddServiceAction extends SPDSGVOAjaxAction{
34
  }
35
  }
36
 
37
- SPDSGVOAddServiceAction::listen();
8
  $this->requireAdmin();
9
 
10
  if(!empty($this->get('new_name')) && !empty($this->get('new_reason'))){
11
+
12
  // Make Slug
13
  $slug = $slug_ = SPDSGVO::slugify($this->get('new_name'));
14
+ $tries = 0;
15
  while(in_array($slug, array_keys($meta))){
16
  $tries++;
17
  $slug = ($slug_ .'-'. $tries);
18
  }
19
 
20
+ /* i592995 */
21
  // Append new service to services
22
  $meta = SPDSGVOSettings::get('services');
23
  if(!is_array($meta)){ $meta = array(); }
27
  'reason' => $this->get('new_reason'),
28
  'link' => $this->get('new_link'),
29
  'default' => $this->get('new_default'),
30
+ 'image' => $this->get('new_image')
31
  );
32
+ /* i592995 */
33
  SPDSGVOSettings::set('services', $meta);
34
  }
35
 
37
  }
38
  }
39
 
40
+ SPDSGVOAddServiceAction::listen();
admin/tabs/services/class-sp-dsgvo-delete-service-action.php CHANGED
@@ -6,8 +6,8 @@ Class SPDSGVODeleteServiceAction extends SPDSGVOAjaxAction{
6
 
7
  protected function run(){
8
  $this->requireAdmin();
9
-
10
-
11
  $services = SPDSGVOSettings::get('services');
12
 
13
  if(is_array($services)){
@@ -19,11 +19,11 @@ Class SPDSGVODeleteServiceAction extends SPDSGVOAjaxAction{
19
  }
20
 
21
  SPDSGVOSettings::set('services', $meta);
22
- SPDSGVOLog::insert("Third-party service deleted by {$this->user->user_email}");
23
  }
24
 
25
  $this->returnBack();
26
  }
27
  }
28
 
29
- SPDSGVODeleteServiceAction::listen();
6
 
7
  protected function run(){
8
  $this->requireAdmin();
9
+
10
+
11
  $services = SPDSGVOSettings::get('services');
12
 
13
  if(is_array($services)){
19
  }
20
 
21
  SPDSGVOSettings::set('services', $meta);
22
+ SPDSGVOLog::insert(__('Third-party service deleted by', 'shapepress-dsgvo') . " {$this->user->user_email}");
23
  }
24
 
25
  $this->returnBack();
26
  }
27
  }
28
 
29
+ SPDSGVODeleteServiceAction::listen();
admin/tabs/services/class-sp-dsgvo-services-action.php CHANGED
@@ -6,7 +6,7 @@ Class SPDSGVOServicesAction extends SPDSGVOAjaxAction{
6
 
7
  protected function run(){
8
  $this->requireAdmin();
9
-
10
 
11
  // User permissons page
12
  if($this->has('user_permissions_page')){
@@ -18,15 +18,18 @@ Class SPDSGVOServicesAction extends SPDSGVOAjaxAction{
18
  $services = $this->get('services', NULL, FALSE);
19
  $meta = array();
20
  if(is_array($services)){
 
21
  foreach($services as $key => $service){
22
  $meta[$service['slug']] = array(
23
  'slug' => stripslashes($service['slug']),
24
  'name' => stripslashes($service['name']),
25
  'reason' => stripslashes($service['reason']),
26
  'link' => stripslashes($service['link']),
 
27
  'default' => stripslashes($service['default']),
28
  );
29
  }
 
30
  }
31
 
32
  SPDSGVOSettings::set('services', $meta);
@@ -37,4 +40,4 @@ Class SPDSGVOServicesAction extends SPDSGVOAjaxAction{
37
  }
38
  }
39
 
40
- SPDSGVOServicesAction::listen();
6
 
7
  protected function run(){
8
  $this->requireAdmin();
9
+
10
 
11
  // User permissons page
12
  if($this->has('user_permissions_page')){
18
  $services = $this->get('services', NULL, FALSE);
19
  $meta = array();
20
  if(is_array($services)){
21
+ /* i592995 */
22
  foreach($services as $key => $service){
23
  $meta[$service['slug']] = array(
24
  'slug' => stripslashes($service['slug']),
25
  'name' => stripslashes($service['name']),
26
  'reason' => stripslashes($service['reason']),
27
  'link' => stripslashes($service['link']),
28
+ 'image' => stripslashes($service['image']),
29
  'default' => stripslashes($service['default']),
30
  );
31
  }
32
+ /* i592995 */
33
  }
34
 
35
  SPDSGVOSettings::set('services', $meta);
40
  }
41
  }
42
 
43
+ SPDSGVOServicesAction::listen();
admin/tabs/services/class-sp-dsgvo-services-tab.php CHANGED
@@ -1,13 +1,16 @@
1
  <?php
2
 
3
  class SPDSGVOServicesTab extends SPDSGVOAdminTab{
4
-
5
- public $title = 'Datenschutz & Plugins';
6
  public $slug = 'services';
7
 
8
- public function __construct(){}
9
-
 
 
 
10
  public function page(){
11
  include plugin_dir_path(__FILE__) .'page.php';
12
  }
13
- }
1
  <?php
2
 
3
  class SPDSGVOServicesTab extends SPDSGVOAdminTab{
4
+
5
+ public $title = 'Privacy policy & Plugins';
6
  public $slug = 'services';
7
 
8
+ public function __construct(){
9
+
10
+ $this->title = __('Privacy policy & Plugins','shapepress-dsgvo');
11
+ }
12
+
13
  public function page(){
14
  include plugin_dir_path(__FILE__) .'page.php';
15
  }
16
+ }
admin/tabs/services/page.php CHANGED
@@ -1,6 +1,6 @@
1
- <h1>Datenschutz: Einstellungen und 3rd Party Plugins</h1>
2
- <p>Hier k&ouml;nnen alle 3rd Party Plugins (Google Analytics, Facebook Pixel,..) aufgelistet werden um ihren Benutzern ein selektives Opt-In/Opt-Out zu erm&ouml;glichen.</p>
3
- <p>Mit dem Shortcode <code>[display_services]</code> k&ouml;nnen diese Dienste dann dem User angezeigt werden.</p>
4
 
5
 
6
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
@@ -9,14 +9,14 @@
9
  <table class="form-table btn-settings-show" >
10
  <tbody>
11
  <tr>
12
- <th scope="row">Datenschutz Seite f&uuml;r ihre Benutzer</th>
13
  <td>
14
 
15
  <ul>
16
  <li>
17
- <label for="user_permissions_page">Seite:
18
  <select name="user_permissions_page" id="user_permissions_page">
19
- <option value="0">W&auml;hlen</option>
20
 
21
  <?php $userPermissionsPage = SPDSGVOSettings::get('user_permissions_page'); ?>
22
  <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
@@ -26,21 +26,23 @@
26
  <?php endforeach; ?>
27
  </select>
28
  </label>
29
- <span class="info-text">Gibt die Seite an auf der Benutzer die M&ouml;glichkeit haben ihre Datenschutzeinstellungen (selektivies Opt-In/Opt-out) anzupassen.</span>
30
  </li>
31
  </ul>
32
-
33
  <?php if($userPermissionsPage == '0'): ?>
34
  <p>
35
- Eine Seite erstellen die den Shortcode <code>[user_privacy_settings_form]</code> verwendet.
36
  <a class="button button-default"
37
- href="<?= SPDSGVOCreatePageAction::url(array('user_privacy_settings_page' => '1')) ?>">Seite erstellen</a>
38
  </p>
39
-
40
  <?php elseif($userPermissionsPage != '0' && strpos(get_post($userPermissionsPage)->post_content, 'user_privacy_settings_form') === FALSE): ?>
41
- <p>Achtung: Der Shortcode <code>[user_privacy_settings_form]</code> wurde auf der gew&auml;hlten Seite nicht gefunden. Das Formular wird somit nicht angezeigt. <a href="<?= get_edit_post_link($userPermissionsPage) ?>">Seite bearbeiten</a></p>
42
  <?php else: ?>
43
- <a href="<?= get_edit_post_link($userPermissionsPage) ?>">Seite bearbeiten</a>
 
 
44
  <?php endif; ?>
45
  </td>
46
  </tr>
@@ -49,16 +51,17 @@
49
  <hr class="sp-dsgvo">
50
 
51
 
52
-
53
  <table class="widefat fixed" cellspacing="0">
54
  <thead>
55
  <tr>
56
- <th id="slug" class="manage-column column-slug" scope="col" style="width:12%">Slug</th>
57
- <th id="name" class="manage-column column-name" scope="col">Name</th>
58
- <th id="reason" class="manage-column column-reason" scope="col">Grund</th>
59
- <th id="reason" class="manage-column column-link" scope="col">AGB URL</th>
60
- <th id="default" class="manage-column column-default" scope="col" style="width:10%">Standard</th>
61
- <th id="delete" class="manage-column column-delete" scope="col" style="width:10%">L&ouml;schen</th>
 
62
  </tr>
63
  </thead>
64
 
@@ -79,79 +82,113 @@
79
  </td>
80
 
81
  <td class="column-link">
82
- <input type="text" class="aio-transparent" placeholder="Terms & Conditions link" name="services[<?= $slug ?>][link]" value="<?= $service['link'] ?>">
83
  </td>
84
  <td class="column-default">
85
  <select name="services[<?= $slug ?>][default]">
86
- <option <?= ($service['default'] == '1')? ' selected ' : '' ?> value="1">Aktiviert</option>
87
- <option <?= ($service['default'] == '0')? ' selected ' : '' ?> value="0">Deaktiviert</option>
88
  </select>
89
  </td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  <td class="column-reason">
91
- <a href="<?= SPDSGVODeleteServiceAction::url(['slug' => $slug]) ?>">L&ouml;schen</a>
92
  </td>
93
  </tr>
94
-
95
  <?php $i++; ?>
96
  <?php endforeach; ?>
97
  </tbody>
98
 
99
  <tfoot>
100
  <tr>
101
- <th class="manage-column column-slug" scope="col">Slug</th>
102
- <th class="manage-column column-name" scope="col">Name</th>
103
- <th class="manage-column column-reason" scope="col">Grund</th>
104
- <th class="manage-column column-link" scope="col">AGB URL</th>
105
- <th class="manage-column column-default" scope="col">Standard</th>
106
- <th class="manage-column column-delete" scope="col">L&ouml;schen</th>
107
  </tr>
108
  </tfoot>
109
  </table>
110
-
111
  <?php submit_button(); ?>
112
  </form>
113
 
114
 
115
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
116
  <input type="hidden" name="action" value="admin-add-service">
117
- <br><br>
118
 
119
- <h3>Dienst hinzuf&uuml;gen</h3>
120
  <table class="form-table">
121
  <tbody>
122
  <tr>
123
- <th scope="row"><label for="new_name">Name</label></th>
124
  <td>
125
  <input name="new_name" type="text" id="new_name" value="" class="regular-text ltr">
126
- <p class="description" >Der Name des Dienstes</p>
127
  </td>
128
  </tr>
129
  <tr>
130
- <th scope="row"><label for="new_reason">Grund</label></th>
131
  <td>
132
  <input name="new_reason" type="text" id="new_reason" value="" class="regular-text ltr">
133
- <p class="description">Der Grund f&uuml;r die Benutzung</p>
134
  </td>
135
  </tr>
136
  <tr>
137
- <th scope="row"><label for="new_link">AGB URL</label></th>
138
  <td>
139
  <input name="new_link" type="text" id="new_link" value="" class="regular-text ltr">
140
- <p class="description">Die URL zu den AGB des Dienstes</p>
141
  </td>
142
  </tr>
143
  <tr>
144
- <th scope="row"><label for="new_default">Standard</label></th>
145
  <td>
146
  <select name="new_default">
147
- <option value="1">Aktiviert</option>
148
- <option value="0">Deaktiviert</option>
149
  </select>
150
- <p class="description">Gibt an ob der Dienst standardm&auml;&szlig;ig aktiviert sein soll oder nicht.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  </td>
152
  </tr>
 
153
  </tbody>
154
  </table>
155
 
156
- <?php submit_button('Dienst hinzuf&uuml;gen'); ?>
157
- </form>
1
+ <h1><?php _e('Privacy: Settings and 3rd party plugins','shapepress-dsgvo')?></h1>
2
+ <p><?php _e('All 3rd Party Plugins (Google Analytics, Facebook Pixel, ..) can be listed here to give their users a selective opt-in / opt-out.','shapepress-dsgvo')?></p>
3
+ <p><?php _e('With the shortcode <code>[display_services]</code> these services can then be displayed to the user.','shapepress-dsgvo')?></p>
4
 
5
 
6
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
9
  <table class="form-table btn-settings-show" >
10
  <tbody>
11
  <tr>
12
+ <th scope="row"><?php _e('Datenschutz Seite für ihre Benutzer','shapepress-dsgvo')?></th>
13
  <td>
14
 
15
  <ul>
16
  <li>
17
+ <label for="user_permissions_page"><?php _e('Page','shapepress-dsgvo')?>
18
  <select name="user_permissions_page" id="user_permissions_page">
19
+ <option value="0"><?php _e('Select','shapepress-dsgvo')?></option>
20
 
21
  <?php $userPermissionsPage = SPDSGVOSettings::get('user_permissions_page'); ?>
22
  <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
26
  <?php endforeach; ?>
27
  </select>
28
  </label>
29
+ <span class="info-text"><?php _e('Specifies the page where users have the option to customize their privacy settings (selective opt-in / opt-out).','shapepress-dsgvo')?></span>
30
  </li>
31
  </ul>
32
+
33
  <?php if($userPermissionsPage == '0'): ?>
34
  <p>
35
+ <?php _e('Create a page that uses the shortcode <code>[user_privacy_settings_form]</code>.','shapepress-dsgvo')?>
36
  <a class="button button-default"
37
+ href="<?= SPDSGVOCreatePageAction::url(array('user_privacy_settings_page' => '1')) ?>"><?php _e('Create page','shapepress-dsgvo')?></a>
38
  </p>
39
+
40
  <?php elseif($userPermissionsPage != '0' && strpos(get_post($userPermissionsPage)->post_content, 'user_privacy_settings_form') === FALSE): ?>
41
+ <p><?php _e('Attention: The shortcode <code>[user_privacy_settings_form]</code> was not found on the selected page. The form will not be displayed.','shapepress-dsgvo')?> <a href="<?= get_edit_post_link($userPermissionsPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a></p>
42
  <?php else: ?>
43
+ <a href="<?= get_edit_post_link($userPermissionsPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a> <br/>
44
+ <?php _e('The shortcode <code>[user_privacy_settings_form]</code> allows the user to activate or deactivate services on the selected page.','shapepress-dsgvo')?>
45
+
46
  <?php endif; ?>
47
  </td>
48
  </tr>
51
  <hr class="sp-dsgvo">
52
 
53
 
54
+
55
  <table class="widefat fixed" cellspacing="0">
56
  <thead>
57
  <tr>
58
+ <th id="slug" class="manage-column column-slug" scope="col" style="width:12%"><?php _e('Slug','shapepress-dsgvo')?></th>
59
+ <th id="name" class="manage-column column-name" scope="col"><?php _e('Name','shapepress-dsgvo')?></th>
60
+ <th id="reason" class="manage-column column-reason" scope="col"><?php _e('Reason','shapepress-dsgvo')?></th>
61
+ <th id="reason" class="manage-column column-link" scope="col"><?php _e('Terms Url','shapepress-dsgvo')?></th>
62
+ <th id="default" class="manage-column column-default" scope="col" style="width:10%"><?php _e('Default','shapepress-dsgvo')?></th>
63
+ <th id="image" class="manage-column column-image" scope="col" style="width:10%"><?php _e('Image','shapepress-dsgvo')?></th>
64
+ <th id="delete" class="manage-column column-delete" scope="col" style="width:10%"><?php _e('Delete','shapepress-dsgvo')?></th>
65
  </tr>
66
  </thead>
67
 
82
  </td>
83
 
84
  <td class="column-link">
85
+ <input type="text" class="aio-transparent" placeholder="<?php _e('Terms & Conditions link', 'shapepress-dsgvo'); ?>" name="services[<?= $slug ?>][link]" value="<?= $service['link'] ?>">
86
  </td>
87
  <td class="column-default">
88
  <select name="services[<?= $slug ?>][default]">
89
+ <option <?= ($service['default'] == '1')? ' selected ' : '' ?> value="1"><?php _e('Enabled','shapepress-dsgvo')?></option>
90
+ <option <?= ($service['default'] == '0')? ' selected ' : '' ?> value="0"><?php _e('Disabled','shapepress-dsgvo')?></option>
91
  </select>
92
  </td>
93
+ <!-- i592995 -->
94
+ <td class="column-image">
95
+ <?php
96
+ $src = '';
97
+ $img_id = '';
98
+ if(isset($service['image'])) {
99
+ $img_id = $service['image'];
100
+ $src = wp_get_attachment_url(intval($img_id));
101
+ }
102
+ ?>
103
+
104
+ <div class="dsgvo-image-upload">
105
+ <div class='image-preview-wrapper'>
106
+ <img id='<?= $slug ?>_image-preview' class="image-preview" src='<?php echo $src; ?>' style="width: 100%">
107
+ </div>
108
+ <input id="<?= $slug ?>_upload_image_button" type="button" class="button" value="<?php _e( 'Upload image', 'shapepress-dsgvo' ); ?>" />
109
+ <input type='hidden' class="image-id" name='services[<?= $slug ?>][image]' id='<?= $slug ?>_image_id' value='<?php echo $img_id; ?>'>
110
+ </div><!-- .dsgvo-image-upload -->
111
+ </td>
112
+ <!-- i592995 -->
113
  <td class="column-reason">
114
+ <a href="<?= SPDSGVODeleteServiceAction::url(['slug' => $slug]) ?>"><?php _e('Delete','shapepress-dsgvo')?></a>
115
  </td>
116
  </tr>
117
+
118
  <?php $i++; ?>
119
  <?php endforeach; ?>
120
  </tbody>
121
 
122
  <tfoot>
123
  <tr>
124
+ <th class="manage-column column-slug" scope="col"><?php _e('Slug','shapepress-dsgvo')?></th>
125
+ <th class="manage-column column-name" scope="col"><?php _e('Name','shapepress-dsgvo')?></th>
126
+ <th class="manage-column column-reason" scope="col"><?php _e('Reason','shapepress-dsgvo')?></th>
127
+ <th class="manage-column column-link" scope="col"><?php _e('Terms Url','shapepress-dsgvo')?></th>
128
+ <th class="manage-column column-default" scope="col"><?php _e('Default','shapepress-dsgvo')?></th>
129
+ <th class="manage-column column-delete" scope="col"><?php _e('Delete','shapepress-dsgvo')?></th>
130
  </tr>
131
  </tfoot>
132
  </table>
133
+
134
  <?php submit_button(); ?>
135
  </form>
136
 
137
 
138
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
139
  <input type="hidden" name="action" value="admin-add-service">
140
+ <br><br>
141
 
142
+ <h3><?php _e('Add service','shapepress-dsgvo')?></h3>
143
  <table class="form-table">
144
  <tbody>
145
  <tr>
146
+ <th scope="row"><label for="new_name"><?php _e('Name','shapepress-dsgvo')?></label></th>
147
  <td>
148
  <input name="new_name" type="text" id="new_name" value="" class="regular-text ltr">
149
+ <p class="description" ><?php _e('Service name','shapepress-dsgvo')?></p>
150
  </td>
151
  </tr>
152
  <tr>
153
+ <th scope="row"><label for="new_reason"><?php _e('Reason','shapepress-dsgvo')?></label></th>
154
  <td>
155
  <input name="new_reason" type="text" id="new_reason" value="" class="regular-text ltr">
156
+ <p class="description"><?php _e('Reason for use','shapepress-dsgvo')?></p>
157
  </td>
158
  </tr>
159
  <tr>
160
+ <th scope="row"><label for="new_link"><?php _e('Terms Url','shapepress-dsgvo')?></label></th>
161
  <td>
162
  <input name="new_link" type="text" id="new_link" value="" class="regular-text ltr">
163
+ <p class="description"><?php _e('The URL pointing to the terms of the service','shapepress-dsgvo')?></p>
164
  </td>
165
  </tr>
166
  <tr>
167
+ <th scope="row"><label for="new_default"><?php _e('Default','shapepress-dsgvo')?></label></th>
168
  <td>
169
  <select name="new_default">
170
+ <option value="1"><?php _e('Enabled','shapepress-dsgvo')?></option>
171
+ <option value="0"><?php _e('Disabled','shapepress-dsgvo')?></option>
172
  </select>
173
+ <p class="description"><?php _e('Indicates whether the service should be enabled by default or not.','shapepress-dsgvo')?></p>
174
+ </td>
175
+ </tr>
176
+ <!-- i592995 -->
177
+ <tr>
178
+ <th scope="row"><label for="new_image"><?php _e('Image','shapepress-dsgvo')?></label></th>
179
+ <td>
180
+ <div class="dsgvo-image-upload">
181
+ <div class='image-preview-wrapper'>
182
+ <img id='image-preview-new' class="image-preview" src='' style="width: 200px">
183
+ </div>
184
+ <input id="upload_image_button_new" type="button" class="button" value="<?php _e( 'Upload image', 'shapepress-dsgvo' ); ?>" />
185
+ <input type='hidden' class="image-id" name='new_image' id='new_image' value=''>
186
+ </div><!-- .dsgvo-image-upload -->
187
  </td>
188
  </tr>
189
+ <!-- i592995 -->
190
  </tbody>
191
  </table>
192
 
193
+ <?php submit_button(__('Add service','shapepress-dsgvo')); ?>
194
+ </form>
admin/tabs/setup/class-sp-dsgvo-create-page-action.php CHANGED
@@ -15,7 +15,7 @@ Class SPDSGVOCreatePageAction extends SPDSGVOAjaxAction{
15
  }
16
 
17
  SPDSGVOLog::migrate();
18
- SPDSGVOLog::insert('Plugin installed');
19
  }
20
  }
21
 
@@ -33,47 +33,47 @@ Class SPDSGVOCreatePageAction extends SPDSGVOAjaxAction{
33
  }
34
 
35
  if($this->has('sar')){
36
- $ID = $this->createPage('Datenauszug', '[sar_form]');
37
  SPDSGVOSettings::set('sar_page', $ID);
38
  }
39
 
40
  if($this->has('user_privacy_settings_page')){
41
- $ID = $this->createPage('Datenschutzeinstellungen Benutzer', '[user_privacy_settings_form]');
42
  SPDSGVOSettings::set('user_permissions_page', $ID);
43
  }
44
 
45
  if($this->has('terms_conditions_page')){
46
- $ID = $this->createPage('Terms & Conditions', '[terms_conditions]');
47
  SPDSGVOSettings::set('terms_conditions_page', $ID);
48
  }
49
 
50
  if($this->has('privacy_policy_page')){
51
- $ID = $this->createPage('Datenschutz', '[privacy_policy]');
52
  SPDSGVOSettings::set('privacy_policy_page', $ID);
53
  }
54
 
55
  if($this->has('super_unsubscribe_page')){
56
- $ID = $this->createPage('L&ouml;schanfrage', '[unsubscribe_form]');
57
  SPDSGVOSettings::set('super_unsubscribe_page', $ID);
58
  }
59
 
60
  if($this->has('imprint_page')){
61
- $ID = $this->createPage('Impressum', '[imprint]');
62
  SPDSGVOSettings::set('imprint_page', $ID);
63
  }
64
 
65
  // Other Pages
66
  if($this->has('explicit_permission_page')){
67
- $ID = $this->createPage('Terms & Conditions Wall', '[explicit_permission]');
68
  SPDSGVOSettings::set('explicit_permission_page', $ID);
69
  }
70
-
71
  if($this->has('opt_out_page')){
72
- $ID = $this->createPage('Opt-out', '[decline_permission]');
73
  SPDSGVOSettings::set('opt_out_page', $ID);
74
  }
75
 
76
-
77
  // Show Set Up
78
  if($this->has('show_setup')){
79
  SPDSGVOSettings::set('show_setup', '1');
@@ -95,5 +95,3 @@ Class SPDSGVOCreatePageAction extends SPDSGVOAjaxAction{
95
  }
96
 
97
  SPDSGVOCreatePageAction::listen();
98
-
99
-
15
  }
16
 
17
  SPDSGVOLog::migrate();
18
+ SPDSGVOLog::insert(__('Plugin installed', 'shapepress-dsgvo'));
19
  }
20
  }
21
 
33
  }
34
 
35
  if($this->has('sar')){
36
+ $ID = $this->createPage(__('Subject Access Request','shapepress-dsgvo'), '[sar_form]');
37
  SPDSGVOSettings::set('sar_page', $ID);
38
  }
39
 
40
  if($this->has('user_privacy_settings_page')){
41
+ $ID = $this->createPage(__('User privacy settings','shapepress-dsgvo'), '[user_privacy_settings_form]');
42
  SPDSGVOSettings::set('user_permissions_page', $ID);
43
  }
44
 
45
  if($this->has('terms_conditions_page')){
46
+ $ID = $this->createPage(__('Terms & Conditions', 'shapepress-dsgvo'), '[terms_conditions]');
47
  SPDSGVOSettings::set('terms_conditions_page', $ID);
48
  }
49
 
50
  if($this->has('privacy_policy_page')){
51
+ $ID = $this->createPage(__('Privacy Policy','shapepress-dsgvo'), '[privacy_policy]');
52
  SPDSGVOSettings::set('privacy_policy_page', $ID);
53
  }
54
 
55
  if($this->has('super_unsubscribe_page')){
56
+ $ID = $this->createPage(__('Delete Request','shapepress-dsgvo'), '[unsubscribe_form]');
57
  SPDSGVOSettings::set('super_unsubscribe_page', $ID);
58
  }
59
 
60
  if($this->has('imprint_page')){
61
+ $ID = $this->createPage(__('Imprint','shapepress-dsgvo'), '[imprint]');
62
  SPDSGVOSettings::set('imprint_page', $ID);
63
  }
64
 
65
  // Other Pages
66
  if($this->has('explicit_permission_page')){
67
+ $ID = $this->createPage(__('Terms & Conditions', 'shapepress-dsgvo'), '[explicit_permission]');
68
  SPDSGVOSettings::set('explicit_permission_page', $ID);
69
  }
70
+
71
  if($this->has('opt_out_page')){
72
+ $ID = $this->createPage(__('Opt-out', 'shapepress-dsgvo'), '[decline_permission]');
73
  SPDSGVOSettings::set('opt_out_page', $ID);
74
  }
75
 
76
+
77
  // Show Set Up
78
  if($this->has('show_setup')){
79
  SPDSGVOSettings::set('show_setup', '1');
95
  }
96
 
97
  SPDSGVOCreatePageAction::listen();
 
 
admin/tabs/setup/class-sp-dsgvo-setup-tab.php CHANGED
@@ -1,13 +1,15 @@
1
  <?php
2
 
3
  class SPDSGVOSetupTab extends SPDSGVOAdminTab{
4
-
5
  public $title = 'Setup';
6
  public $slug = 'setup';
7
 
8
- public function __construct(){}
 
 
9
 
10
- public function page(){
11
  include plugin_dir_path(__FILE__) .'page.php';
12
  }
13
- }
1
  <?php
2
 
3
  class SPDSGVOSetupTab extends SPDSGVOAdminTab{
4
+
5
  public $title = 'Setup';
6
  public $slug = 'setup';
7
 
8
+ public function __construct(){
9
+ $this->title = __('Setup','shapepress-dsgvo');
10
+ }
11
 
12
+ public function page(){
13
  include plugin_dir_path(__FILE__) .'page.php';
14
  }
15
+ }
admin/tabs/setup/page.php CHANGED
@@ -1,103 +1,8 @@
1
- <h1>Setup</h1>
2
- <p>Welcome to All-in-One GDPR, a GDPR toolkit for WordPress that makes it even easier to comply with the GDPR.</p>
3
- <hr>
4
 
5
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
6
- <input type="hidden" name="action" value="<?= SPDSGVOCreatePageAction::getActionName(); ?>">
7
 
8
- <table class="form-table">
9
- <tbody>
10
- <tr>
11
- <th scope="row">License Key</th>
12
- <td>
13
- <fieldset>
14
- <legend class="screen-reader-text">
15
- <span>License Key</span>
16
- </legend>
17
-
18
- <label for="license_key">
19
- <input name="license_key" type="text" id="license_key" required value="<?php echo SPDSGVOSettings::get('license_key');?>" />
20
- <p class="description" id="admin-email-description">If you need a license key you can buy one <a href="https://gdprplug.in">here</a></p>
21
- </label>
22
- </fieldset>
23
- </td>
24
- </tr>
25
-
26
-
27
- <?php if(SPDSGVOSettings::get('show_setup') == '1'): ?>
28
- <tr>
29
- <th scope="row">
30
- Enable Cookie Notice
31
- </th>
32
- <td>
33
- <label for="display_cookie_notice">
34
- <input name="display_cookie_notice" type="checkbox" id="display_cookie_notice" value="1" checked>
35
- </label>
36
- </td>
37
- </tr>
38
-
39
- <tr>
40
- <th scope="row">
41
- Create Subject Access Request Page
42
- </th>
43
- <td>
44
- <label for="sar">
45
- <input name="sar" type="checkbox" id="sar" value="1" checked>
46
- </label>
47
- </td>
48
- </tr>
49
-
50
- <tr>
51
- <th scope="row">
52
- Create User Privacy Settings Page
53
- </th>
54
- <td>
55
- <label for="user_privacy_settings_page">
56
- <input name="user_privacy_settings_page" type="checkbox" id="user_privacy_settings_page" value="1" checked>
57
- </label>
58
- </td>
59
- </tr>
60
-
61
- <tr>
62
- <th scope="row">
63
- Create Terms and Conditione Page
64
- </th>
65
- <td>
66
- <label for="terms_conditions_page">
67
- <input name="terms_conditions_page" type="checkbox" id="terms_conditions_page" value="1" checked>
68
- </label>
69
- </td>
70
- </tr>
71
- <tr>
72
- <th scope="row">
73
- Create Privacy Policy Page
74
- </th>
75
- <td>
76
- <label for="privacy_policy_page">
77
- <input name="privacy_policy_page" type="checkbox" id="privacy_policy_page" value="1" checked>
78
- </label>
79
- </td>
80
- </tr>
81
-
82
- <tr>
83
- <th scope="row">
84
- Create Super Unsubscribe Page
85
- </th>
86
- <td>
87
- <label for="super_unsubscribe_page">
88
- <input name="super_unsubscribe_page" type="checkbox" id="super_unsubscribe_page" value="1" checked>
89
- </label>
90
- </td>
91
- </tr>
92
-
93
- <tr>
94
- <th scope="row"></th>
95
- <td>
96
- <button type="submit" class="button button-primary button-large">Install</button>
97
- </td>
98
- </tr>
99
-
100
- <?php endif; ?>
101
- </tbody>
102
- </table>
103
  </form>
1
+ <h1><?php _e('Setup', 'shapepress-dsgvo'); ?></h1><hr>
 
 
2
 
3
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
4
+ <input type="hidden" name="action" value="<?= SPDSGVOCreatePageAction::getActionName(); ?>">
5
 
6
+
7
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  </form>
admin/tabs/subject-access-request/class-sp-dsgvo-subject-access-request-action.php CHANGED
@@ -8,6 +8,11 @@ Class SPDSGVOAdminSubjectAccessRequestAction extends SPDSGVOAjaxAction{
8
  $this->requireAdmin();
9
 
10
  SPDSGVOSettings::set('sar_cron', $this->get('sar_cron', '0'));
 
 
 
 
 
11
  SPDSGVOSettings::set('sar_dsgvo_accepted_text', $this->get('sar_dsgvo_accepted_text', ''));
12
 
13
  if($this->has('sar_page')){
8
  $this->requireAdmin();
9
 
10
  SPDSGVOSettings::set('sar_cron', $this->get('sar_cron', '0'));
11
+ if (isValidPremiumEdition())
12
+ {
13
+ SPDSGVOSettings::set('sar_email_notification', $this->get('sar_email_notification', '0'));
14
+ }
15
+
16
  SPDSGVOSettings::set('sar_dsgvo_accepted_text', $this->get('sar_dsgvo_accepted_text', ''));
17
 
18
  if($this->has('sar_page')){
admin/tabs/subject-access-request/class-sp-dsgvo-subject-access-request-tab.php CHANGED
@@ -1,13 +1,16 @@
1
  <?php
2
 
3
  class SPDSGVOSubjectAccessRequestTab extends SPDSGVOAdminTab{
4
-
5
- public $title = 'Datenauszug';
6
  public $slug = 'subject-access-request';
7
 
8
- public function __construct(){}
 
 
 
9
 
10
  public function page(){
11
  include plugin_dir_path(__FILE__) .'page.php';
12
  }
13
- }
1
  <?php
2
 
3
  class SPDSGVOSubjectAccessRequestTab extends SPDSGVOAdminTab{
4
+
5
+ public $title ='Subject Access Request';
6
  public $slug = 'subject-access-request';
7
 
8
+ public function __construct(){
9
+
10
+ $this->title = __('Subject Access Request','shapepress-dsgvo');
11
+ }
12
 
13
  public function page(){
14
  include plugin_dir_path(__FILE__) .'page.php';
15
  }
16
+ }
admin/tabs/subject-access-request/page.php CHANGED
@@ -1,49 +1,59 @@
1
- <h1>Datenauszug</h1>
2
- <p>
3
- Mit diesem Feature k&ouml;nnen User einen Auszug &uuml;ber alle von
4
- ihnen gespeicherten Daten anfordern. <br> S&auml;mtliche Daten in ihrer
5
- Datenbank werden auf vertrauliche Daten &uuml;berpr&uuml;ft und dem
6
- User per Email gesendet.
7
  </p>
8
 
9
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
10
  <input type="hidden" name="action"
11
  value="<?= SPDSGVOAdminSubjectAccessRequestAction::getActionName(); ?>">
12
 
 
 
13
  <table class="form-table">
14
  <tbody>
15
  <tr>
16
- <th scope="row">Automatisch Abarbeitung</th>
17
  <td>
18
  <?php $sarCron = SPDSGVOSettings::get('sar_cron'); ?>
19
  <label for="sar_cron"> <select name="sar_cron"
20
  id="sar_cron">
21
- <option value="0" <?= selected($sarCron === '0') ?>>keine</option>
22
- <option value="1" <?= selected($sarCron === '1') ?>>1 Tag</option>
23
- <option value="2" <?= selected($sarCron === '2') ?>>2 Tage</option>
24
- <option value="3" <?= selected($sarCron === '3') ?>>3 Tage</option>
25
- <option value="7" <?= selected($sarCron === '4') ?>>1 Woche</option>
26
  </select>
27
  </label>
28
- <span class="info-text">Anfragen werden nach eingestellter Zeit
29
- automatisch bearbeitet und dem User gesendet.</span></td>
30
  </tr>
31
- <tr>
32
- <td>DSGVO Zustimmungstext:</td>
 
 
 
 
 
 
 
 
 
 
 
 
33
  <td>
34
  <input
35
  name="sar_dsgvo_accepted_text" type="text" style="width: 550px;"
36
  id="sar_dsgvo_accepted_text" value="<?= SPDSGVOSettings::get('sar_dsgvo_accepted_text'); ?>">
37
- <span class="info-text">Der Text der bei der Checkbox f&uuml; die Datenspeicherung angezeigt werden soll</span>
38
  </td>
39
  </tr>
 
40
  <tr>
41
- <th scope="row">Seite zum Anfordern:</th>
42
  <td>
43
 
44
  <?php $sarPage = SPDSGVOSettings::get('sar_page'); ?>
45
  <label for="sar_page"><select name="sar_page" id="sar_page">
46
- <option value="0">W&auml;hlen</option>
47
  <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
48
  <option <?= selected($sarPage == $page->ID) ?>
49
  value="<?= $page->ID ?>">
@@ -52,23 +62,21 @@
52
  <?php endforeach; ?>
53
  </select>
54
  </label>
55
- <span class="info-text">Gibt die Seite an auf der Benutzer die M&ouml;glichkeit haben ihren Datenauszug anzufordern.</span>
56
 
57
  <?php if($sarPage == '0'): ?>
58
  <p>
59
- Eine Seite erstellen die den Shortcode <code>[sar_form]</code> verwendet.
60
  <a class="button button-default"
61
- href="<?= SPDSGVOCreatePageAction::url(array('sar' => '1')) ?>">Seite erstellen</a>
62
  </p>
63
  <?php elseif(!pageContainsString($sarPage, 'sar_form')): ?>
64
  <p>
65
- Achtung: Der Shortcode
66
- <code>[sar_form]</code>
67
- wurde auf der von ihnen gew&auml;hlten Seite nicht gefunden. Somit hat der User keine M&ouml;glichkeit zur Anforderung der Daten. <a
68
- href="<?= get_edit_post_link($sarPage) ?>">Seite bearbeiten</a>
69
  </p>
70
  <?php else: ?>
71
- <a href="<?= get_edit_post_link($sarPage) ?>">Seite bearbeiten</a>
72
  <?php endif; ?>
73
  </td>
74
  </tr>
@@ -89,17 +97,21 @@
89
  <thead>
90
  <tr>
91
  <th id="request_id" class="manage-column column-request_id"
92
- scope="col" style="width: 10%">ID</th>
93
  <th id="email" class="manage-column column-email" scope="col"
94
- style="width: 20%">Email</th>
95
  <th id="first_name" class="manage-column column-first_name"
96
- scope="col" style="width: 15%">Vorname</th>
97
  <th id="last_name" class="manage-column column-last_name" scope="col"
98
- style="width: 15%">Nachname</th>
99
  <th id="dsgvo_accepted" class="manage-column column-dsgvo_accepted" scope="col"
100
- style="width: 15%">DSGVO Zustimmung</th>
101
  <th id="process" class="manage-column column-process" scope="col"
102
- style="width: 15%">Ausf&uuml;hren</th>
 
 
 
 
103
  </tr>
104
  </thead>
105
 
@@ -120,16 +132,24 @@
120
  <?= $pendingRequest->last_name ?>
121
  </td>
122
  <td class="column-auto-deleting-on">
123
- <?= $pendingRequest->dsgvo_accepted === '1' ? 'Ja' : 'Nein' ?>
124
  </td>
125
  <td class="column-unsubscribe-user"><a class="button-primary"
126
- href="<?= SPDSGVOAdminSubjectAccessRequestAction::url(array('process' => $pendingRequest->ID)) ?>">Ausf&uuml;hren</a></td>
 
 
 
 
 
 
 
 
127
  </tr>
128
-
129
  <?php endforeach; ?>
130
  <?php else: ?>
131
  <tr>
132
- <td class="column-slug" colspan="2">Keine offenen Anfragen vorhanden.</td>
133
  <td class="column-default"></td>
134
  <td class="column-reason"></td>
135
  </tr>
@@ -138,12 +158,15 @@
138
 
139
  <tfoot>
140
  <tr>
141
- <th class="manage-column column-request_id" scope="col">ID</th>
142
- <th class="manage-column column-email" scope="col">Email</th>
143
- <th class="manage-column column-first_name" scope="col">Vorname</th>
144
- <th class="manage-column column-last_name" scope="col">Nachname</th>
145
- <th class="manage-column column-dsgvo_accepted" scope="col">DSGVO Zustimmung</th>
146
- <th class="manage-column column-process" scope="col">Ausf&uuml;hren</th>
 
 
 
147
  </tr>
148
  </tfoot>
149
  </table>
@@ -151,7 +174,7 @@
151
  <?php if(count($pending) !== 0): ?>
152
  <p>
153
  <a class="button-primary"
154
- href="<?= SPDSGVOAdminSubjectAccessRequestAction::url(array('all' => '1')) ?>">Alle ausf&uuml;hren</a>
155
  </p>
156
  <?php endif; ?>
157
 
@@ -163,41 +186,41 @@
163
  type="hidden" name="is_admin" value="1"> <br>
164
  <br>
165
 
166
- <h3>Datenauszug hinzuf&uuml;gen</h3>
167
  <table class="form-table">
168
  <tbody>
169
  <tr>
170
- <th scope="row"><label for="email">Email <span style="color: #F00">*</span></label></th>
171
  <td><input name="email" type="email" id="email" value=""
172
  class="regular-text ltr" required></td>
173
  </tr>
174
  <tr>
175
- <th scope="row"><label for="first_name">Vorname</label></th>
176
  <td><input name="first_name" type="text" id="first_name" value=""
177
  class="regular-text ltr"></td>
178
  </tr>
179
  <tr>
180
- <th scope="row"><label for="last_name">Nachname</label></th>
181
  <td><input name="last_name" type="text" id="last_name" value=""
182
  class="regular-text ltr"></td>
183
  </tr>
184
  <tr>
185
- <th scope="row"><label for="dsgvo_checkbox">DSGVO Speicherungszustimmung</label></th>
186
  <td><input name="dsgvo_checkbox" type="checkbox" id="dsgvo_checkbox"
187
  value="1"></td>
188
  </tr>
189
  <tr>
190
- <th scope="row"><label for="process_now">Sofort ausf&uuml;hren</label></th>
191
  <td><input name="process_now" type="checkbox" id="process_now"
192
  value="1"></td>
193
  </tr>
194
  <tr style="display: none;">
195
- <th scope="row"><label for="display_email">Email anzeigen</label></th>
196
  <td><input name="display_email" type="checkbox" id="display_email"
197
  value="1"></td>
198
  </tr>
199
  </tbody>
200
  </table>
201
 
202
- <?php submit_button('Hinzuf&uuml;gen'); ?>
203
- </form>
1
+ <h1><?php _e('Subject Access Requests','shapepress-dsgvo')?></h1>
2
+ <p><?php _e('This feature allows users to request a digest of all data stored by you. <br> All data in your database is checked for confidential data and sent to the User by email.','shapepress-dsgvo')?>
 
 
 
 
3
  </p>
4
 
5
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
6
  <input type="hidden" name="action"
7
  value="<?= SPDSGVOAdminSubjectAccessRequestAction::getActionName(); ?>">
8
 
9
+ <?php $disablePremiumFeatures = isValidPremiumEdition() == false; ?>
10
+
11
  <table class="form-table">
12
  <tbody>
13
  <tr>
14
+ <th scope="row"><?php _e('Automatic processing','shapepress-dsgvo')?></th>
15
  <td>
16
  <?php $sarCron = SPDSGVOSettings::get('sar_cron'); ?>
17
  <label for="sar_cron"> <select name="sar_cron"
18
  id="sar_cron">
19
+ <option value="0" <?= selected($sarCron === '0') ?>><?php _e('none','shapepress-dsgvo')?></option>
20
+ <option value="1" <?= selected($sarCron === '1') ?>>1 <?php _e('day','shapepress-dsgvo')?></option>
21
+ <option value="2" <?= selected($sarCron === '2') ?>>2 <?php _e('days','shapepress-dsgvo')?></option>
22
+ <option value="3" <?= selected($sarCron === '3') ?>>3 <?php _e('days','shapepress-dsgvo')?></option>
23
+ <option value="7" <?= selected($sarCron === '4') ?>>1 <?php _e('weeks','shapepress-dsgvo')?></option>
24
  </select>
25
  </label>
26
+ <span class="info-text"><?php _e('Requests will be automatically processed after the set time and sent to the user.','shapepress-dsgvo')?></span></td>
 
27
  </tr>
28
+
29
+ <tr>
30
+ <th scope="row"><?php _e('Email for new application:','shapepress-dsgvo')?></th>
31
+ <td>
32
+ <input
33
+ name="sar_email_notification" type="checkbox"
34
+ id="sar_email_notification" value="1"
35
+ <?= $disablePremiumFeatures ? 'disabled' : true; ?>
36
+ <?= (SPDSGVOSettings::get('sar_email_notification') === '1')? ' checked ' : ''; ?>>
37
+ <span class="info-text"><?php _e('Send a notification for a new application to the admin email address.','shapepress-dsgvo')?></span>
38
+ </td>
39
+ </tr>
40
+ <tr>
41
+ <td><?php _e('GDPR consent text:','shapepress-dsgvo')?></td>
42
  <td>
43
  <input
44
  name="sar_dsgvo_accepted_text" type="text" style="width: 550px;"
45
  id="sar_dsgvo_accepted_text" value="<?= SPDSGVOSettings::get('sar_dsgvo_accepted_text'); ?>">
46
+ <span class="info-text"><?php _e('The text to be displayed in the GDPR checkbox for data storage.','shapepress-dsgvo')?></span>
47
  </td>
48
  </tr>
49
+
50
  <tr>
51
+ <th scope="row"><?php _e('Request page:','shapepress-dsgvo')?></th>
52
  <td>
53
 
54
  <?php $sarPage = SPDSGVOSettings::get('sar_page'); ?>
55
  <label for="sar_page"><select name="sar_page" id="sar_page">
56
+ <option value="0"><?php _e('Select','shapepress-dsgvo')?></option>
57
  <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
58
  <option <?= selected($sarPage == $page->ID) ?>
59
  value="<?= $page->ID ?>">
62
  <?php endforeach; ?>
63
  </select>
64
  </label>
65
+ <span class="info-text"><?php _e('Specifies the page on which users have the option to request their data extract.','shapepress-dsgvo')?></span>
66
 
67
  <?php if($sarPage == '0'): ?>
68
  <p>
69
+ <?php _e('Create a page using the shortcode <code>[sar_form]</code>.','shapepress-dsgvo')?>
70
  <a class="button button-default"
71
+ href="<?= SPDSGVOCreatePageAction::url(array('sar' => '1')) ?>"><?php _e('Create page','shapepress-dsgvo')?></a>
72
  </p>
73
  <?php elseif(!pageContainsString($sarPage, 'sar_form')): ?>
74
  <p>
75
+ <?php _e('Attention: The shortcode <code>[sar_form]</code> of the selected page was not found. Thus, the user has no opportunity to request the data.','shapepress-dsgvo')?> <a
76
+ href="<?= get_edit_post_link($sarPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
 
 
77
  </p>
78
  <?php else: ?>
79
+ <a href="<?= get_edit_post_link($sarPage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
80
  <?php endif; ?>
81
  </td>
82
  </tr>
97
  <thead>
98
  <tr>
99
  <th id="request_id" class="manage-column column-request_id"
100
+ scope="col" style="width: 10%"><?php _e('ID','shapepress-dsgvo')?></th>
101
  <th id="email" class="manage-column column-email" scope="col"
102
+ style="width: 20%"><?php _e('Email','shapepress-dsgvo')?></th>
103
  <th id="first_name" class="manage-column column-first_name"
104
+ scope="col" style="width: 15%"><?php _e('First name','shapepress-dsgvo')?></th>
105
  <th id="last_name" class="manage-column column-last_name" scope="col"
106
+ style="width: 15%"><?php _e('Last name','shapepress-dsgvo')?></th>
107
  <th id="dsgvo_accepted" class="manage-column column-dsgvo_accepted" scope="col"
108
+ style="width: 15%"><?php _e('GDPR approval','shapepress-dsgvo')?></th>
109
  <th id="process" class="manage-column column-process" scope="col"
110
+ style="width: 15%"><?php _e('Run','shapepress-dsgvo')?></th>
111
+ <!-- i592995 -->
112
+ <th id="dismiss" class="manage-column column-dismiss" scope="col"
113
+ style="width: 15%"><?php _e('Dismiss','shapepress-dsgvo')?></th>
114
+ <!-- i592995 -->
115
  </tr>
116
  </thead>
117
 
132
  <?= $pendingRequest->last_name ?>
133
  </td>
134
  <td class="column-auto-deleting-on">
135
+ <?= $pendingRequest->dsgvo_accepted === '1' ? 'Yes' : 'No' ?>
136
  </td>
137
  <td class="column-unsubscribe-user"><a class="button-primary"
138
+ href="<?= SPDSGVOAdminSubjectAccessRequestAction::url(array('process' => $pendingRequest->ID)) ?>"><?php _e('Run', 'shapepress-dsgvo'); ?></a></td>
139
+ <!-- i592995 -->
140
+ <td class="column-dismiss">
141
+ <svg class="unsubscribe-dismiss" width="10" height="10" data-id="<?php echo $pendingRequest->ID; ?>">
142
+ <line x1="0" y1="0" x2="10" y2="10" />
143
+ <line x1="0" y1="10" x2="10" y2="0" />
144
+ </svg>
145
+ </td>
146
+ <!-- i592995 -->
147
  </tr>
148
+
149
  <?php endforeach; ?>
150
  <?php else: ?>
151
  <tr>
152
+ <td class="column-slug" colspan="2"><?php _e('No open requests','shapepress-dsgvo')?></td>
153
  <td class="column-default"></td>
154
  <td class="column-reason"></td>
155
  </tr>
158
 
159
  <tfoot>
160
  <tr>
161
+ <th class="manage-column column-request_id" scope="col"><?php _e('ID','shapepress-dsgvo')?></th>
162
+ <th class="manage-column column-email" scope="col"><?php _e('Email','shapepress-dsgvo')?></th>
163
+ <th class="manage-column column-first_name" scope="col"><?php _e('First name','shapepress-dsgvo')?></th>
164
+ <th class="manage-column column-last_name" scope="col"><?php _e('Last name','shapepress-dsgvo')?></th>
165
+ <th class="manage-column column-dsgvo_accepted" scope="col"><?php _e('GDPR approval','shapepress-dsgvo')?></th>
166
+ <th class="manage-column column-process" scope="col"><?php _e('Run','shapepress-dsgvo')?></th>
167
+ <!-- i592995 -->
168
+ <th class="manage-column column-dismiss" scope="col"><?php _e('Dismiss','shapepress-dsgvo')?></th>
169
+ <!-- i592995 -->
170
  </tr>
171
  </tfoot>
172
  </table>
174
  <?php if(count($pending) !== 0): ?>
175
  <p>
176
  <a class="button-primary"
177
+ href="<?= SPDSGVOAdminSubjectAccessRequestAction::url(array('all' => '1')) ?>"><?php _e('Run all','shapepress-dsgvo')?></a>
178
  </p>
179
  <?php endif; ?>
180
 
186
  type="hidden" name="is_admin" value="1"> <br>
187
  <br>
188
 
189
+ <h3><?php _e('Add entry','shapepress-dsgvo')?></h3>
190
  <table class="form-table">
191
  <tbody>
192
  <tr>
193
+ <th scope="row"><label for="email"><?php _e('Email','shapepress-dsgvo')?> <span style="color: #F00">*</span></label></th>
194
  <td><input name="email" type="email" id="email" value=""
195
  class="regular-text ltr" required></td>
196
  </tr>
197
  <tr>
198
+ <th scope="row"><label for="first_name"><?php _e('First name','shapepress-dsgvo')?></label></th>
199
  <td><input name="first_name" type="text" id="first_name" value=""
200
  class="regular-text ltr"></td>
201
  </tr>
202
  <tr>
203
+ <th scope="row"><label for="last_name"><?php _e('Last name','shapepress-dsgvo')?></label></th>
204
  <td><input name="last_name" type="text" id="last_name" value=""
205
  class="regular-text ltr"></td>
206
  </tr>
207
  <tr>
208
+ <th scope="row"><label for="dsgvo_checkbox"><?php _e('GDPR approval','shapepress-dsgvo')?></label></th>
209
  <td><input name="dsgvo_checkbox" type="checkbox" id="dsgvo_checkbox"
210
  value="1"></td>
211
  </tr>
212
  <tr>
213
+ <th scope="row"><label for="process_now"><?php _e('Run now','shapepress-dsgvo')?></label></th>
214
  <td><input name="process_now" type="checkbox" id="process_now"
215
  value="1"></td>
216
  </tr>
217
  <tr style="display: none;">
218
+ <th scope="row"><label for="display_email"><?php _e('Show email','shapepress-dsgvo')?></label></th>
219
  <td><input name="display_email" type="checkbox" id="display_email"
220
  value="1"></td>
221
  </tr>
222
  </tbody>
223
  </table>
224
 
225
+ <?php submit_button(__('Add','shapepress-dsgvo')); ?>
226
+ </form>
admin/tabs/super-unsubscribe/class-sp-dsgvo-dismiss-unsubscribe-action.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* i592995 */
3
+ Class SPDSGVODismissUnsubscribeAction extends SPDSGVOAjaxAction{
4
+
5
+ protected $action = 'admin-dismiss-unsubscribe';
6
+
7
+ protected function run(){
8
+ $id = $this->get('id');
9
+ wp_delete_post($id);
10
+ die();
11
+ }
12
+ }
13
+
14
+ SPDSGVODismissUnsubscribeAction::listen();
15
+
16
+ /* i592995 */
admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-action.php CHANGED
@@ -6,17 +6,21 @@ Class SPDSGVOSuperUnsubscribeAction extends SPDSGVOAjaxAction{
6
 
7
  protected function run(){
8
  $this->requireAdmin();
9
-
10
-
11
  // unsubscribe_auto_delete
12
  SPDSGVOSettings::set('unsubscribe_auto_delete', $this->get('unsubscribe_auto_delete', '0'));
 
 
 
 
 
 
 
 
13
  SPDSGVOSettings::set('su_dsgvo_accepted_text', $this->get('su_dsgvo_accepted_text', ''));
14
 
15
-
16
  // unsubscribe auto delete tme
17
  SPDSGVOSettings::set('su_auto_del_time', $this->get('su_auto_del_time', '0'));
18
-
19
- SPDSGVOSettings::set('su_woo_data_action', $this->get('su_woo_data_action', 'ignore'));
20
 
21
  // Set super_unsubscribe_page
22
  if($this->has('super_unsubscribe_page')){
6
 
7
  protected function run(){
8
  $this->requireAdmin();
9
+
 
10
  // unsubscribe_auto_delete
11
  SPDSGVOSettings::set('unsubscribe_auto_delete', $this->get('unsubscribe_auto_delete', '0'));
12
+ if (isValidPremiumEdition())
13
+ {
14
+ SPDSGVOSettings::set('su_email_notification', $this->get('su_email_notification', '0'));
15
+ SPDSGVOSettings::set('su_woo_data_action', $this->get('su_woo_data_action', 'ignore'));
16
+ SPDSGVOSettings::set('su_bbpress_data_action', $this->get('su_bbpress_data_action', 'ignore'));
17
+ SPDSGVOSettings::set('su_buddypress_data_action', $this->get('su_buddypress_data_action', 'ignore'));
18
+ SPDSGVOSettings::set('su_cf7_data_action', $this->get('su_cf7_data_action', 'ignore'));
19
+ }
20
  SPDSGVOSettings::set('su_dsgvo_accepted_text', $this->get('su_dsgvo_accepted_text', ''));
21
 
 
22
  // unsubscribe auto delete tme
23
  SPDSGVOSettings::set('su_auto_del_time', $this->get('su_auto_del_time', '0'));
 
 
24
 
25
  // Set super_unsubscribe_page
26
  if($this->has('super_unsubscribe_page')){
admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-tab.php CHANGED
@@ -1,13 +1,15 @@
1
  <?php
2
 
3
  class SPDSGVOSuperUnsubscribeTab extends SPDSGVOAdminTab{
4
-
5
- public $title = 'L&ouml;schanfragen';
6
  public $slug = 'super-unsubscribe';
7
 
8
- public function __construct(){}
 
 
9
 
10
  public function page(){
11
  include plugin_dir_path(__FILE__) .'page.php';
12
  }
13
- }
1
  <?php
2
 
3
  class SPDSGVOSuperUnsubscribeTab extends SPDSGVOAdminTab{
4
+
5
+ public $title = 'Delete request';
6
  public $slug = 'super-unsubscribe';
7
 
8
+ public function __construct(){
9
+ $this->title = __('Delete request','shapepress-dsgvo');
10
+ }
11
 
12
  public function page(){
13
  include plugin_dir_path(__FILE__) .'page.php';
14
  }
15
+ }
admin/tabs/super-unsubscribe/page.php CHANGED
@@ -1,81 +1,129 @@
1
- <h1>L&ouml;schanfragen</h1>
2
- <p>Hier finden sie alle L&ouml;schanfragen die User ihrer Seite gestellt haben.
3
- Mit einem klick auf "Jetzt l&ouml;schen" l&ouml;schen sie alle gespeicherten Daten des Users auf ihrer Seite inklusive Plugins.
4
  </p>
5
 
6
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
7
  <input type="hidden" name="action"
8
  value="<?= SPDSGVOSuperUnsubscribeAction::getActionName(); ?>"> <input
9
  type="hidden" name="CSRF" value="<?= sp_dsgvo_CSRF_TOKEN() ?>">
 
10
 
11
  <table class="form-table">
12
  <tbody>
13
  <tr>
14
- <th scope="row">Automatisches L&ouml;schen</th>
15
  <td></td>
16
  </tr>
17
  <tr>
18
- <td>Sofort bei Anfrage</td>
19
  <td><label for="unsubscribe_auto_delete"> <input
20
  name="unsubscribe_auto_delete" type="checkbox"
21
  id="unsubscribe_auto_delete" value="1"
22
  <?= (SPDSGVOSettings::get('unsubscribe_auto_delete') === '1')? ' checked ' : ''; ?>>
23
  </label>
24
- <span class="info-text">Wenn aktiviert, werden L&ouml;schanfragen sofort durchgef&uuml;hrt.</span></td>
25
  </tr>
26
  <tr>
27
- <td>Nach Zeit</td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  <td>
29
  <?php $suAutoDelTime = SPDSGVOSettings::get('su_auto_del_time'); ?>
30
  <label for="su_auto_del_time"> <select name="su_auto_del_time"
31
  id="su_auto_del_time">
32
- <option value="0" <?= selected($suAutoDelTime === '0') ?>>keine</option>
33
- <option value="1m" <?= selected($suAutoDelTime === '1m') ?>>1 Monat</option>
34
- <option value="3m" <?= selected($suAutoDelTime === '3m') ?>>3 Monate</option>
35
- <option value="6m" <?= selected($suAutoDelTime === '6m') ?>>6 Monate</option>
36
- <option value="1y" <?= selected($suAutoDelTime === '1y') ?>>1 Jahr</option>
37
- <option value="6y" <?= selected($suAutoDelTime === '6y') ?>>6 Jahre</option>
38
- <option value="7y" <?= selected($suAutoDelTime === '7y') ?>>7 Jahre</option>
39
  </select>
40
  </label>
41
- <span class="info-text">Daten werden nach eingestellter Zeit
42
- automatisch gel&ouml;scht. Stellt die maximale Aufbewahrungszeit sicher.</span></td>
43
  </tr>
44
 
 
45
  <tr>
46
- <td>DSGVO Zustimmungstext:</td>
47
- <td>
48
- <input
49
- name="su_dsgvo_accepted_text" type="text" style="width: 550px;"
50
- id="su_dsgvo_accepted_text" value="<?= SPDSGVOSettings::get('su_dsgvo_accepted_text'); ?>">
51
- <span class="info-text">Der Text der bei der Checkbox f&uuml; die Datenspeicherung angezeigt werden soll</span>
52
- </td>
53
- </tr>
54
-
55
- <?php if (enablePremiumFeatures()) : ?>
56
- <tr>
57
- <td>WooCommerce Daten</td>
58
  <td>
59
  <?php $wooDataAction = SPDSGVOSettings::get('su_woo_data_action'); ?>
60
  <label for="su_woo_data_action"> <select name="su_woo_data_action"
61
  id="su_woo_data_action">
62
- <option value="ignore" <?= selected($wooDataAction === 'ignore') ?>>Keine Aktion</option>
63
- <option value="pseudo" <?= selected($wooDataAction === 'pseudo') ?>>Pseudonymisieren</option>
64
- <option value="del" <?= selected($wooDataAction === 'del') ?>>L&ouml;schen</option>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  </select>
66
  </label>
67
- <span class="info-text">Gibt an was mit pers&ouml;nlichen Daten von Bestellungen passieren soll.</span></td>
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  </tr>
69
  <?php endif;?>
70
 
71
  <tr>
72
- <th scope="row">Seite f&uuml;r L&ouml;schanfrage:</th>
73
  <td>
74
 
75
  <?php $unsubscribePage = SPDSGVOSettings::get('super_unsubscribe_page'); ?>
76
  <label for="super_unsubscribe_page"><select
77
  name="super_unsubscribe_page" id="super_unsubscribe_page">
78
- <option value="0">W&auml;hlen</option>
79
  <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
80
  <option <?= selected($unsubscribePage == $page->ID) ?>
81
  value="<?= $page->ID ?>">
@@ -83,23 +131,21 @@
83
  </option>
84
  <?php endforeach; ?>
85
  </select>
86
- </label>
87
 
88
  <?php if($unsubscribePage == '0'): ?>
89
  <p>
90
- Eine Seite erstellen die den Shortcode <code>[unsubscribe_form]</code> verwendet.
91
  <a class="button button-default"
92
- href="<?= SPDSGVOCreatePageAction::url(array('super_unsubscribe_page' => '1')) ?>">Seite erstellen</a>
93
  </p>
94
  <?php elseif(!pageContainsString($unsubscribePage, 'unsubscribe_form')): ?>
95
  <p>
96
- Achtung: Der Shortcode
97
- <code>[unsubscribe_form]</code>
98
- wurde auf der von ihnen gew&auml;hlten Seite nicht gefunden. Somit hat der User keine M&ouml;glichkeit eine L&ouml;schanfrage zu stellen. <a
99
- href="<?= get_edit_post_link($unsubscribePage) ?>">Seite bearbeiten</a>
100
  </p>
101
  <?php else: ?>
102
- <a href="<?= get_edit_post_link($unsubscribePage) ?>">Seite bearbeiten</a>
103
  <?php endif; ?>
104
  </td>
105
  </tr>
@@ -114,16 +160,16 @@
114
  <hr class="sp-dsgvo">
115
  </form>
116
 
117
- <?php
118
- $statuses = array(
119
- 'pending',
120
- 'done'
121
- );
122
- if (in_array($_GET['status'], $statuses)) {
123
- $status = $_GET['status'];
124
- } else {
125
- $status = 'pending';
126
- }
127
  ?>
128
 
129
  <ul class="subsubsub">
@@ -131,14 +177,14 @@ if (in_array($_GET['status'], $statuses)) {
131
  <a
132
  href="<?= SPDSGVO::adminURL(array('tab' => 'super-unsubscribe', 'status' => 'pending')) ?>"
133
  class="<?= ($status === 'pending')? 'current' : ''; ?>" aria-current="page">
134
- Ausstehend
135
  </a>
136
  </li>
137
  <li>
138
  <a
139
  href="<?= SPDSGVO::adminURL(array('tab' => 'super-unsubscribe', 'status' => 'done')) ?>"
140
  class="<?= ($status === 'done')? 'current' : ''; ?>" aria-current="page">
141
- Erledigt
142
  </a>
143
  </li>
144
  </ul>
@@ -150,19 +196,23 @@ if (in_array($_GET['status'], $statuses)) {
150
  <thead>
151
  <tr>
152
  <th id="request_id" class="manage-column column-request_id"
153
- scope="col" style="width: 10%">ID</th>
154
  <th id="email" class="manage-column column-email" scope="col"
155
- style="width: 20%">Email</th>
156
  <th id="first_name" class="manage-column column-first_name"
157
- scope="col" style="width: 15%">Vorname</th>
158
  <th id="last_name" class="manage-column column-last_name" scope="col"
159
- style="width: 15%">Nachname</th>
160
  <th id="dsgvo_accepted" class="manage-column column-dsgvo_accepted" scope="col"
161
- style="width: 15%">DSGVO Zustimmung</th>
162
  <th id="status" class="manage-column column-status" scope="col"
163
- style="width: 15%">Status</th>
164
  <th id="process" class="manage-column column-process" scope="col"
165
- style="width: 15%">Jetzt l&ouml;schen</th>
 
 
 
 
166
  </tr>
167
  </thead>
168
 
@@ -191,22 +241,30 @@ if (in_array($_GET['status'], $statuses)) {
191
  <td class="column-unsubscribe-user">
192
 
193
  <?php if($status == 'done'): ?>
194
- <a class="button-primary disabled" href="#">Delete Now</a>
195
  <?php else: ?>
196
  <a class="button-primary"
197
- href="<?= SPDSGVOSuperUnsubscribeAction::url(array('process' => $confirmedRequest->ID)) ?>">Jetzt l&ouml;schen</a>
198
  <?php endif; ?>
199
  </td>
 
 
 
 
 
 
 
 
200
  </tr>
201
-
202
  <?php endforeach; ?>
203
  <?php else: ?>
204
  <tr>
205
  <td class="column-slug" colspan="2">
206
  <?php if($status == 'done'): ?>
207
- <h4>Es wurden noch keine L&ouml;schanfragen durchgef&uuml;hrt.</h4>
208
  <?php else: ?>
209
- <h4>Keine L&ouml;schanfragen vorhanden.</h4>
210
  <?php endif; ?>
211
  </td>
212
  <td class="column-default"></td>
@@ -217,13 +275,16 @@ if (in_array($_GET['status'], $statuses)) {
217
 
218
  <tfoot>
219
  <tr>
220
- <th class="manage-column column-request_id" scope="col">ID</th>
221
- <th class="manage-column column-email" scope="col">Email</th>
222
- <th class="manage-column column-first_name" scope="col">Vorname</th>
223
- <th class="manage-column column-last_name" scope="col">Nachname</th>
224
- <th class="manage-column column-dsgvo_accepted" scope="col">DSGVO Zustimmung</th>
225
- <th class="manage-column column-status" scope="col">Status</th>
226
- <th class="manage-column column-process" scope="col">Jetzt l&ouml;schen</th>
 
 
 
227
  </tr>
228
  </tfoot>
229
  </table>
@@ -231,7 +292,7 @@ if (in_array($_GET['status'], $statuses)) {
231
  <?php if(count($pending) !== 0): ?>
232
  <p>
233
  <a class="button-primary"
234
- href="<?= SPDSGVOSuperUnsubscribeAction::url(array('all' => '1')) ?>">Alle l�schen</a>
235
  </p>
236
  <?php endif; ?>
237
 
@@ -243,37 +304,37 @@ if (in_array($_GET['status'], $statuses)) {
243
  type="hidden" name="is_admin" value="1"> <br>
244
  <br>
245
 
246
- <h3>L&ouml;schanfrage hinzuf&uuml;gen</h3>
247
- <span style="color:red">ACHTUNG: Mit Ausf&uuml;hren dieser Aktion wird der Account gel&ouml;scht (Administratoren ausgenommen).</span>
248
  <table class="form-table">
249
  <tbody>
250
  <tr>
251
- <th scope="row"><label for="email">Email <span style="color: #F00">*</span></label></th>
252
  <td><input name="email" type="email" id="email" value=""
253
  class="regular-text ltr" required></td>
254
  </tr>
255
  <tr>
256
- <th scope="row"><label for="first_name">Vorname</label></th>
257
  <td><input name="first_name" type="text" id="first_name" value=""
258
  class="regular-text ltr"></td>
259
  </tr>
260
  <tr>
261
- <th scope="row"><label for="last_name">Nachname</label></th>
262
  <td><input name="last_name" type="text" id="last_name" value=""
263
  class="regular-text ltr"></td>
264
  </tr>
265
  <tr>
266
- <th scope="row"><label for="dsgvo_checkbox">DSGVO Speicherungszustimmung</label></th>
267
  <td><input name="dsgvo_checkbox" type="checkbox" id="dsgvo_checkbox"
268
  value="1"></td>
269
  </tr>
270
  <tr>
271
- <th scope="row"><label for="process_now">Ohne Benutzerbest&auml;tigung ausf&uuml;hren</label></th>
272
  <td><input name="process_now" type="checkbox" id="process_now"
273
  value="1"></td>
274
  </tr>
275
  </tbody>
276
  </table>
277
 
278
- <?php submit_button('Hinzuf&uuml;gen'); ?>
279
- </form>
1
+ <h1><?php _e('Delete Requests','shapepress-dsgvo')?></h1>
2
+ <p><?php _e('Here you will find all deletion requests that users have made on their site. With a click on "delete now " you delete all stored data of the user on their side including Plugins.','shapepress-dsgvo')?>
 
3
  </p>
4
 
5
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>">
6
  <input type="hidden" name="action"
7
  value="<?= SPDSGVOSuperUnsubscribeAction::getActionName(); ?>"> <input
8
  type="hidden" name="CSRF" value="<?= sp_dsgvo_CSRF_TOKEN() ?>">
9
+ <?php $disablePremiumFeatures = isValidPremiumEdition() == false; ?>
10
 
11
  <table class="form-table">
12
  <tbody>
13
  <tr>
14
+ <th scope="row"><?php _e('Automatic processing','shapepress-dsgvo')?></th>
15
  <td></td>
16
  </tr>
17
  <tr>
18
+ <td><?php _e('Immediately on request','shapepress-dsgvo')?></td>
19
  <td><label for="unsubscribe_auto_delete"> <input
20
  name="unsubscribe_auto_delete" type="checkbox"
21
  id="unsubscribe_auto_delete" value="1"
22
  <?= (SPDSGVOSettings::get('unsubscribe_auto_delete') === '1')? ' checked ' : ''; ?>>
23
  </label>
24
+ <span class="info-text"><?php _e('If enabled, delete requests are performed immediately.','shapepress-dsgvo')?></span></td>
25
  </tr>
26
  <tr>
27
+ <td><?php _e('Email for new application:','shapepress-dsgvo')?></td>
28
+ <td>
29
+ <input
30
+ name="su_email_notification" type="checkbox"
31
+ id="su_email_notification" value="1"
32
+ <?= $disablePremiumFeatures ? 'disabled' : true; ?>
33
+ <?= (SPDSGVOSettings::get('su_email_notification') === '1')? ' checked ' : ''; ?>>
34
+ <span class="info-text"><?php _e('Send a notification for a new application to the admin email address.','shapepress-dsgvo')?></span>
35
+ </td>
36
+ </tr>
37
+ <tr>
38
+ <td><?php _e('GDPR confirmation text:','shapepress-dsgvo')?></td>
39
+ <td>
40
+ <input
41
+ name="su_dsgvo_accepted_text" type="text" style="width: 550px;"
42
+ id="su_dsgvo_accepted_text" value="<?= SPDSGVOSettings::get('su_dsgvo_accepted_text'); ?>">
43
+ <span class="info-text"><?php _e('The text to be displayed in the GDPR checkbox for data deletion.','shapepress-dsgvo')?></span>
44
+ </td>
45
+ </tr>
46
+ <tr>
47
+ <td><?php _e('After period','shapepress-dsgvo')?></td>
48
  <td>
49
  <?php $suAutoDelTime = SPDSGVOSettings::get('su_auto_del_time'); ?>
50
  <label for="su_auto_del_time"> <select name="su_auto_del_time"
51
  id="su_auto_del_time">
52
+ <option value="0" <?= selected($suAutoDelTime === '0') ?>><?php _e('none','shapepress-dsgvo')?></option>
53
+ <option value="1m" <?= selected($suAutoDelTime === '1m') ?>>1 <?php _e('month','shapepress-dsgvo')?></option>
54
+ <option value="3m" <?= selected($suAutoDelTime === '3m') ?>>3 <?php _e('months','shapepress-dsgvo')?></option>
55
+ <option value="6m" <?= selected($suAutoDelTime === '6m') ?>>6 <?php _e('months','shapepress-dsgvo')?></option>
56
+ <option value="1y" <?= selected($suAutoDelTime === '1y') ?>>1 <?php _e('year','shapepress-dsgvo')?></option>
57
+ <option value="6y" <?= selected($suAutoDelTime === '6y') ?>>6 <?php _e('years','shapepress-dsgvo')?></option>
58
+ <option value="7y" <?= selected($suAutoDelTime === '7y') ?>>7 <?php _e('years','shapepress-dsgvo')?></option>
59
  </select>
60
  </label>
61
+ <span class="info-text"><?php _e('Data is automatically deleted after the set time. Ensures the maximum retention time.','shapepress-dsgvo')?></span></td>
 
62
  </tr>
63
 
64
+ <?php if (isValidPremiumEdition()) : ?>
65
  <tr>
66
+ <td><?php _e('WooCommerce Data','shapepress-dsgvo')?></td>
 
 
 
 
 
 
 
 
 
 
 
67
  <td>
68
  <?php $wooDataAction = SPDSGVOSettings::get('su_woo_data_action'); ?>
69
  <label for="su_woo_data_action"> <select name="su_woo_data_action"
70
  id="su_woo_data_action">
71
+ <option value="ignore" <?= selected($wooDataAction === 'ignore') ?>><?php _e('No action','shapepress-dsgvo')?></option>
72
+ <option value="pseudo" <?= selected($wooDataAction === 'pseudo') ?>><?php _e('Pseudonymise','shapepress-dsgvo')?></option>
73
+ <option value="del" <?= selected($wooDataAction === 'del') ?>><?php _e('Delete','shapepress-dsgvo')?></option>
74
+ </select>
75
+ </label>
76
+ <span class="info-text"><?php _e('Specifies what should happen to personal data of orders.','shapepress-dsgvo')?></span></td>
77
+ </tr>
78
+ <tr>
79
+ <td><?php _e('bbPress Data','shapepress-dsgvo')?></td>
80
+ <td>
81
+ <?php $bbPDataAction = SPDSGVOSettings::get('su_bbpress_data_action'); ?>
82
+ <label for="su_bbpress_data_action"> <select name="su_bbpress_data_action"
83
+ id="su_bbpress_data_action">
84
+ <option value="ignore" <?= selected($bbPDataAction === 'ignore') ?>><?php _e('No action','shapepress-dsgvo')?></option>
85
+ <option value="pseudo" <?= selected($wooDataAction === 'pseudo') ?>><?php _e('Pseudonymise','shapepress-dsgvo')?></option>
86
+ <option value="del" <?= selected($bbPDataAction === 'del') ?>><?php _e('Delete','shapepress-dsgvo')?></option>
87
+ </select>
88
+ </label>
89
+ <span class="info-text"><?php _e('Specifies what should happen with forum entries.','shapepress-dsgvo')?></span></td>
90
+ </tr>
91
+ <tr>
92
+ <td><?php _e('buddyPress Data','shapepress-dsgvo')?></td>
93
+ <td>
94
+ <?php $buddyPressDataAction = SPDSGVOSettings::get('su_buddypress_data_action'); ?>
95
+ <label for="su_buddypress_data_action"> <select name="su_buddypress_data_action"
96
+ id="su_buddypress_data_action">
97
+ <option value="ignore" <?= selected($buddyPressDataAction === 'ignore') ?>><?php _e('No action','shapepress-dsgvo')?></option>
98
+ <option value="pseudo" <?= selected($buddyPressDataAction === 'pseudo') ?>><?php _e('Pseudonymise','shapepress-dsgvo')?></option>
99
+ <option value="del" <?= selected($buddyPressDataAction === 'del') ?>><?php _e('Delete','shapepress-dsgvo')?></option>
100
  </select>
101
  </label>
102
+ <span class="info-text"><?php _e('Specifies what should happen with PNs and extended profile fields.','shapepress-dsgvo')?></span></td>
103
+ </tr>
104
+ <tr>
105
+ <td><?php _e('CF7/Flamingo Data','shapepress-dsgvo')?></td>
106
+ <td>
107
+ <?php $cf7DataAction = SPDSGVOSettings::get('su_cf7_data_action'); ?>
108
+ <label for="su_cf7_data_action"> <select name="su_cf7_data_action"
109
+ id="su_cf7_data_action">
110
+ <option value="ignore" <?= selected($cf7DataAction === 'ignore') ?>><?php _e('No action','shapepress-dsgvo')?></option>
111
+ <option value="pseudo" <?= selected($cf7DataAction === 'pseudo') ?>><?php _e('Pseudonymise','shapepress-dsgvo')?></option>
112
+ <option value="del" <?= selected($cf7DataAction === 'del') ?>><?php _e('Delete','shapepress-dsgvo')?></option>
113
+ </select>
114
+ </label>
115
+ <span class="info-text"><?php _e('Specifies what to do with contact entries and messages.','shapepress-dsgvo')?></span></td>
116
  </tr>
117
  <?php endif;?>
118
 
119
  <tr>
120
+ <th scope="row"><?php _e('Page for deletion request:','shapepress-dsgvo')?></th>
121
  <td>
122
 
123
  <?php $unsubscribePage = SPDSGVOSettings::get('super_unsubscribe_page'); ?>
124
  <label for="super_unsubscribe_page"><select
125
  name="super_unsubscribe_page" id="super_unsubscribe_page">
126
+ <option value="0"><?php _e('Select','shapepress-dsgvo')?></option>
127
  <?php foreach(get_pages(array('number' => 0)) as $key => $page): ?>
128
  <option <?= selected($unsubscribePage == $page->ID) ?>
129
  value="<?= $page->ID ?>">
131
  </option>
132
  <?php endforeach; ?>
133
  </select>
134
+ </label>
135
 
136
  <?php if($unsubscribePage == '0'): ?>
137
  <p>
138
+ <?php _e('Create a page using the shortcode <code>[unsubscribe_form]</code>.','shapepress-dsgvo')?>
139
  <a class="button button-default"
140
+ href="<?= SPDSGVOCreatePageAction::url(array('super_unsubscribe_page' => '1')) ?>"><?php _e('Create page','shapepress-dsgvo')?></a>
141
  </p>
142
  <?php elseif(!pageContainsString($unsubscribePage, 'unsubscribe_form')): ?>
143
  <p>
144
+ <?php _e('Attention: The shortcode <code>[unsubscribe_form]</code> that should be on the selected page was not found. Thus, the user has no opportunity to ask a deletion request.','shapepress-dsgvo')?> <a
145
+ href="<?= get_edit_post_link($unsubscribePage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
 
 
146
  </p>
147
  <?php else: ?>
148
+ <a href="<?= get_edit_post_link($unsubscribePage) ?>"><?php _e('Edit page','shapepress-dsgvo')?></a>
149
  <?php endif; ?>
150
  </td>
151
  </tr>
160
  <hr class="sp-dsgvo">
161
  </form>
162
 
163
+ <?php
164
+ $statuses = array(
165
+ 'pending',
166
+ 'done'
167
+ );
168
+ if (in_array($_GET['status'], $statuses)) {
169
+ $status = $_GET['status'];
170
+ } else {
171
+ $status = 'pending';
172
+ }
173
  ?>
174
 
175
  <ul class="subsubsub">
177
  <a
178
  href="<?= SPDSGVO::adminURL(array('tab' => 'super-unsubscribe', 'status' => 'pending')) ?>"
179
  class="<?= ($status === 'pending')? 'current' : ''; ?>" aria-current="page">
180
+ <?php _e('Pending','shapepress-dsgvo')?>
181
  </a>
182
  </li>
183
  <li>
184
  <a
185
  href="<?= SPDSGVO::adminURL(array('tab' => 'super-unsubscribe', 'status' => 'done')) ?>"
186
  class="<?= ($status === 'done')? 'current' : ''; ?>" aria-current="page">
187
+ <?php _e('Done','shapepress-dsgvo')?>
188
  </a>
189
  </li>
190
  </ul>
196
  <thead>
197
  <tr>
198
  <th id="request_id" class="manage-column column-request_id"
199
+ scope="col" style="width: 10%"><?php _e('ID','shapepress-dsgvo')?></th>
200
  <th id="email" class="manage-column column-email" scope="col"
201
+ style="width: 20%"><?php _e('Email','shapepress-dsgvo')?></th>
202
  <th id="first_name" class="manage-column column-first_name"
203
+ scope="col" style="width: 15%"><?php _e('First name','shapepress-dsgvo')?></th>
204
  <th id="last_name" class="manage-column column-last_name" scope="col"
205
+ style="width: 15%"><?php _e('Last name','shapepress-dsgvo')?></th>
206
  <th id="dsgvo_accepted" class="manage-column column-dsgvo_accepted" scope="col"
207
+ style="width: 15%"><?php _e('GDPR approval','shapepress-dsgvo')?></th>
208
  <th id="status" class="manage-column column-status" scope="col"
209
+ style="width: 15%"><?php _e('State','shapepress-dsgvo')?></th>
210
  <th id="process" class="manage-column column-process" scope="col"
211
+ style="width: 15%"><?php _e('Delete now','shapepress-dsgvo')?></th>
212
+ <!-- .i592995 -->
213
+ <th id="dismiss" class="manage-column column-dismiss" scope="col"
214
+ style="width: 15%"><?php _e('Dismiss','shapepress-dsgvo')?></th>
215
+ <!-- .i592995 -->
216
  </tr>
217
  </thead>
218
 
241
  <td class="column-unsubscribe-user">
242
 
243
  <?php if($status == 'done'): ?>
244
+ <a class="button-primary disabled" href="#"><?php _e('Delete now','shapepress-dsgvo')?></a>
245
  <?php else: ?>
246
  <a class="button-primary"
247
+ href="<?= SPDSGVOSuperUnsubscribeAction::url(array('process' => $confirmedRequest->ID)) ?>"><?php _e('Delete now','shapepress-dsgvo')?></a>
248
  <?php endif; ?>
249
  </td>
250
+ <!-- .i592995 -->
251
+ <td class="column-dismiss">
252
+ <svg class="unsubscribe-dismiss" width="10" height="10" data-id="<?php echo $confirmedRequest->ID; ?>">
253
+ <line x1="0" y1="0" x2="10" y2="10" />
254
+ <line x1="0" y1="10" x2="10" y2="0" />
255
+ </svg>
256
+ </td>
257
+ <!-- .i592995 -->
258
  </tr>
259
+
260
  <?php endforeach; ?>
261
  <?php else: ?>
262
  <tr>
263
  <td class="column-slug" colspan="2">
264
  <?php if($status == 'done'): ?>
265
+ <h4><?php _e('No requests done','shapepress-dsgvo')?></h4>
266
  <?php else: ?>
267
+ <h4><?php _e('No pending requests','shapepress-dsgvo')?></h4>
268
  <?php endif; ?>
269
  </td>
270
  <td class="column-default"></td>
275
 
276
  <tfoot>
277
  <tr>
278
+ <th class="manage-column column-request_id" scope="col"><?php _e('ID','shapepress-dsgvo')?></th>
279
+ <th class="manage-column column-email" scope="col"><?php _e('Email','shapepress-dsgvo')?></th>
280
+ <th class="manage-column column-first_name" scope="col"><?php _e('First name','shapepress-dsgvo')?></th>
281
+ <th class="manage-column column-last_name" scope="col"><?php _e('Last name','shapepress-dsgvo')?></th>
282
+ <th class="manage-column column-dsgvo_accepted" scope="col"><?php _e('GDPR approval','shapepress-dsgvo')?></th>
283
+ <th class="manage-column column-status" scope="col"><?php _e('State','shapepress-dsgvo')?></th>
284
+ <th class="manage-column column-process" scope="col"><?php _e('Delete now','shapepress-dsgvo')?></th>
285
+ <!-- .i592995 -->
286
+ <th class="manage-column column-dismiss" scope="col"><?php _e('Dismiss','shapepress-dsgvo')?></th>
287
+ <!-- .i592995 -->
288
  </tr>
289
  </tfoot>
290
  </table>
292
  <?php if(count($pending) !== 0): ?>
293
  <p>
294
  <a class="button-primary"
295
+ href="<?= SPDSGVOSuperUnsubscribeAction::url(array('all' => '1')) ?>"><?php _e('Delete all','shapepress-dsgvo')?></a>
296
  </p>
297
  <?php endif; ?>
298
 
304
  type="hidden" name="is_admin" value="1"> <br>
305
  <br>
306
 
307
+ <h3><?php _e('Add entry','shapepress-dsgvo')?></h3>
308
+ <span style="color:red"><?php _e('ATTENTION: Executing this action deletes the account (except administrators).','shapepress-dsgvo')?></span>
309
  <table class="form-table">
310
  <tbody>
311
  <tr>
312
+ <th scope="row"><label for="email"><?php _e('Email','shapepress-dsgvo')?> <span style="color: #F00">*</span></label></th>
313
  <td><input name="email" type="email" id="email" value=""
314
  class="regular-text ltr" required></td>
315
  </tr>
316
  <tr>
317
+ <th scope="row"><label for="first_name"><?php _e('First name','shapepress-dsgvo')?></label></th>
318
  <td><input name="first_name" type="text" id="first_name" value=""
319
  class="regular-text ltr"></td>
320
  </tr>
321
  <tr>
322
+ <th scope="row"><label for="last_name"><?php _e('Last name','shapepress-dsgvo')?></label></th>
323
  <td><input name="last_name" type="text" id="last_name" value=""
324
  class="regular-text ltr"></td>
325
  </tr>
326
  <tr>
327
+ <th scope="row"><label for="dsgvo_checkbox"><?php _e('GDPR approval','shapepress-dsgvo')?></label></th>
328
  <td><input name="dsgvo_checkbox" type="checkbox" id="dsgvo_checkbox"
329
  value="1"></td>
330
  </tr>
331
  <tr>
332
+ <th scope="row"><label for="process_now"><?php _e('Run without user confirmation','shapepress-dsgvo')?></label></th>
333
  <td><input name="process_now" type="checkbox" id="process_now"
334
  value="1"></td>
335
  </tr>
336
  </tbody>
337
  </table>
338
 
339
+ <?php submit_button(__('Add','shapepress-dsgvo')); ?>
340
+ </form>
includes/class-sp-dsgvo-ajax-action.php CHANGED
@@ -32,35 +32,42 @@ abstract class SPDSGVOAjaxAction{
32
  protected $action;
33
  public $request;
34
  public $user;
35
-
36
  abstract protected function run();
37
 
38
- public function __construct(){
39
  $this->request = $_REQUEST;
40
  if($this->isLoggedIn()){
41
  $this->user = wp_get_current_user();
42
  }
43
  }
44
 
45
- public function boot(){
46
- $class = self::getClassName();
47
  $action = new $class;
48
  $action->run();
49
 
50
  if($action->has('href')){
51
  wp_redirect($action->get('href'));
52
  }else{
53
- header('Location: '. $_SERVER['HTTP_REFERER']);
 
 
 
 
 
 
 
54
  }
55
-
56
  die;
57
  }
58
 
59
  public static function listen($public = TRUE){
60
- $actionName = self::getActionName();
61
- $className = self::getClassName();
62
  add_action("wp_ajax_{$actionName}", array($className, 'boot'));
63
-
64
  if($public){
65
  add_action("wp_ajax_nopriv_{$actionName}", array($className, 'boot'));
66
  }
@@ -73,17 +80,17 @@ abstract class SPDSGVOAjaxAction{
73
  public static function getClassName(){
74
  return get_called_class();
75
  }
76
-
77
  public static function formURL(){
78
  return admin_url('/admin-ajax.php');
79
  }
80
 
81
  public static function getActionName(){
82
- $class = self::getClassName();
83
  $reflection = new ReflectionClass($class);
84
  $action = $reflection->newInstanceWithoutConstructor();
85
  if(!isset($action->action)){
86
- throw new Exception("Public property \$action not provied");
87
  }
88
  return $action->action;
89
  }
@@ -147,9 +154,8 @@ abstract class SPDSGVOAjaxAction{
147
  }
148
 
149
  public static function url($params = array()){
150
- $classInstance = new static();
151
  $params = http_build_query(array_merge(array(
152
- 'action' => $classInstance->action,
153
  ), $params));
154
 
155
  return admin_url('/admin-ajax.php') .'?'. $params;
@@ -190,7 +196,7 @@ abstract class SPDSGVOAjaxAction{
190
 
191
  public function returnBack(){
192
  if(isset($_SERVER['HTTP_REFERER'])){
193
- header('Location: '. $_SERVER['HTTP_REFERER']);
194
  die();
195
  }
196
 
32
  protected $action;
33
  public $request;
34
  public $user;
35
+
36
  abstract protected function run();
37
 
38
+ public function __construct(){
39
  $this->request = $_REQUEST;
40
  if($this->isLoggedIn()){
41
  $this->user = wp_get_current_user();
42
  }
43
  }
44
 
45
+ public function boot(){
46
+ $class = self::getClassName();
47
  $action = new $class;
48
  $action->run();
49
 
50
  if($action->has('href')){
51
  wp_redirect($action->get('href'));
52
  }else{
53
+ if(isset($_SERVER['HTTP_REFERER'])) {
54
+ header('Location: '. $_SERVER['HTTP_REFERER']);
55
+ }
56
+ else
57
+ {
58
+ //it was not sent, perform your default actions here
59
+ }
60
+
61
  }
62
+
63
  die;
64
  }
65
 
66
  public static function listen($public = TRUE){
67
+ $actionName = self::getActionName();
68
+ $className = self::getClassName();
69
  add_action("wp_ajax_{$actionName}", array($className, 'boot'));
70
+
71
  if($public){
72
  add_action("wp_ajax_nopriv_{$actionName}", array($className, 'boot'));
73
  }
80
  public static function getClassName(){
81
  return get_called_class();
82
  }
83
+
84
  public static function formURL(){
85
  return admin_url('/admin-ajax.php');
86
  }
87
 
88
  public static function getActionName(){
89
+ $class = self::getClassName();
90
  $reflection = new ReflectionClass($class);
91
  $action = $reflection->newInstanceWithoutConstructor();
92
  if(!isset($action->action)){
93
+ throw new Exception(__("Public property \$action not provied", 'shapepress-dsgvo'));
94
  }
95
  return $action->action;
96
  }
154
  }
155
 
156
  public static function url($params = array()){
 
157
  $params = http_build_query(array_merge(array(
158
+ 'action' => (new static())->action,
159
  ), $params));
160
 
161
  return admin_url('/admin-ajax.php') .'?'. $params;
196
 
197
  public function returnBack(){
198
  if(isset($_SERVER['HTTP_REFERER'])){
199
+ header('Location: '. $_SERVER['HTTP_REFERER']);
200
  die();
201
  }
202
 
includes/class-sp-dsgvo-cron.php CHANGED
@@ -8,7 +8,7 @@ Class SPDSGVOCron{
8
  return 'wp_cron__'. strtolower($class);
9
  }
10
 
11
- public function schedule(){
12
  return 'schedule_'. $this->slug();
13
  }
14
 
@@ -63,7 +63,7 @@ Class SPDSGVOCron{
63
  if(!in_array($this->schedule(), array_keys($schedules))){
64
  $schedules[$this->schedule()] = array(
65
  'interval' => $interval,
66
- 'display' => 'Alle '. floor($interval / 60) .' Minuten',
67
  );
68
  }
69
 
8
  return 'wp_cron__'. strtolower($class);
9
  }
10
 
11
+ public function schedule(){
12
  return 'schedule_'. $this->slug();
13
  }
14
 
63
  if(!in_array($this->schedule(), array_keys($schedules))){
64
  $schedules[$this->schedule()] = array(
65
  'interval' => $interval,
66
+ 'display' => __('All', 'shapepress-dsgvo') . ' '. floor($interval / 60) .' ' . __('Minutes', 'shapepress-dsgvo'),
67
  );
68
  }
69
 
includes/class-sp-dsgvo-data-collecter.php CHANGED
@@ -1,437 +1,469 @@
1
- <?php
2
-
3
- /**
4
- * Fired during plugin deactivation
5
- *
6
- * @link https://wp-dsgvo.eu
7
- * @since 1.0.0
8
- *
9
- * @package WP DSGVO Tools
10
- * @subpackage WP DSGVO Tools/includes
11
- */
12
-
13
- /**
14
- * Fired during plugin deactivation.
15
- *
16
- * This class defines all code necessary to run during the plugin's deactivation.
17
- *
18
- * @since 1.0.0
19
- * @package WP DSGVO Tools
20
- * @subpackage WP DSGVO Tools/includes
21
- * @author Shapepress eU
22
- */
23
- class SPDSGVODataCollecter
24
- {
25
-
26
- public $email;
27
-
28
- public $firstName;
29
-
30
- public $lastName;
31
-
32
- public $user = NULL;
33
-
34
- public $totalFound = 0;
35
-
36
- public $data = array();
37
-
38
- public $identifiers = array();
39
-
40
- public $tables = array();
41
-
42
- public $sensativeKeys = array(
43
- 'company',
44
- 'country',
45
- 'county',
46
- 'city',
47
- 'state',
48
- 'address',
49
- 'first_name',
50
- 'last_name',
51
- 'zip',
52
- 'zip_code',
53
- 'post_code',
54
- 'postcode',
55
- 'email',
56
- 'phone',
57
- 'ip',
58
- 'ip_address'
59
- );
60
-
61
- public function __construct($email, $firstName = '', $lastName = '')
62
- {
63
- $this->email = $email;
64
-
65
- if (! empty($firstName)) {
66
- $this->addIdentifier($firstName, 'Name');
67
- $this->firstName = $firstName;
68
- }
69
-
70
- if (! empty($lastName)) {
71
- $this->addIdentifier($lastName, 'Name');
72
- $this->lastName = $lastName;
73
- }
74
-
75
- $this->user = get_user_by('email', $this->email);
76
- if (is_a($this->user, 'WP_User')) {
77
- $this->addIdentifier($this->user->user_login, 'Login');
78
- $this->addIdentifier($this->user->user_nicename, 'Name');
79
- $this->addIdentifier($this->user->user_email, 'Email');
80
- $this->addIdentifier($this->user->user_url, 'Url');
81
- $this->addIdentifier($this->user->display_name, 'Anzeigename');
82
- $this->addIdentifier(str_replace('www.', '', @parse_url($this->user->user_url)['host']), 'Url');
83
- }
84
- }
85
-
86
- public function sar()
87
- {
88
- if (is_a($this->user, 'WP_User')) {
89
- $this->crawlLocal();
90
- } else
91
- {
92
- $this->crawlLocal(); // both for now because it only crawls comments
93
- }
94
-
95
- $this->integrationsSAR();
96
-
97
- return $this->getData();
98
- }
99
-
100
- public function crawlLocal()
101
- {
102
- global $wpdb;
103
-
104
- if (! is_a($this->user, 'WP_User')) {
105
-
106
- // search public comments and then return
107
-
108
- $comments = get_comments(array(
109
- 'author_email' => $this->email,
110
- 'type' => ''
111
- ));
112
- foreach ($comments as $comment) {
113
- $this->addData($comment->comment_author, 'Name');
114
- $this->addData($comment->comment_author_email, 'Email');
115
- $this->addData($comment->comment_author_url, 'Url');
116
- $this->addData($comment->comment_author_IP, 'IP Adresse');
117
- $this->addData($comment->comment_content, 'Kommentar');
118
- }
119
-
120
- return;
121
- }
122
-
123
- // ====================================================
124
- // WP_User
125
- // ====================================================
126
- $this->addData($this->user->user_login, 'Benutzername');
127
- $this->addData($this->user->user_nicename, 'Name');
128
- $this->addData($this->user->user_url, 'Url');
129
- $this->addData($this->user->display_name, 'Anzeigename');
130
-
131
- // ====================================================
132
- // WP_Usermeta
133
- // ====================================================
134
- foreach (get_user_meta($this->user->ID) as $key => $meta) {
135
- if ($this->isSensativeKey($key)) {
136
- foreach ($meta as $metaValue) {
137
- $this->addData($metaValue);
138
- }
139
- }
140
- }
141
-
142
- // ====================================================
143
- // WP_Comments
144
- // ====================================================
145
- $comments = get_comments(array(
146
- 'user_id' => $this->user->ID
147
- ));
148
- foreach ($comments as $comment) {
149
- $this->addData($comment->comment_author, 'Name');
150
- $this->addData($comment->comment_author_email, 'Email');
151
- $this->addData($comment->comment_author_url, 'Url');
152
- $this->addData($comment->comment_author_IP, 'IP Adresse');
153
- $this->addData($comment->comment_content, 'Kommentar');
154
- }
155
-
156
-
157
- }
158
-
159
- public function integrationsSAR()
160
- {
161
- foreach (SPDSGVOIntegration::getAllIntegrations() as $integration) {
162
- if (method_exists($integration, 'onSubjectAccessRequest')) {
163
- try {
164
- $data = $integration->onSubjectAccessRequest($this->email, $this->firstName, $this->lastName, $this->user);
165
- if (is_array($data)) {
166
- foreach ($data as $value) {
167
- if (is_string($value)) {
168
- $this->addData($value, $integration->title, $integration->name);
169
- } else if (is_array($value)) {
170
- foreach ($value as $valueItem) {
171
- if (is_string($valueItem)) {
172
- $this->addData($valueItem, $integration->title, $integration->name);
173
- }
174
- }
175
- }
176
- }
177
- }
178
- } catch (Exception $e) {}
179
- }
180
- }
181
- }
182
-
183
- public function superUnsubscribe()
184
- {
185
- if (is_a($this->user, 'WP_User')) {
186
- $this->superUnsubscribeLocal();
187
- } else
188
- {
189
- $this->superUnsubscribeLocal();
190
- }
191
-
192
- $this->superUnsubscribeIntegrations();
193
- }
194
-
195
- public function superUnsubscribeLocal()
196
- {
197
- global $wpdb;
198
-
199
- if (! is_a($this->user, 'WP_User')) { // only do commments for not registered ones
200
-
201
- // ======================================================================
202
- // WP_Comments
203
- // ======================================================================
204
- error_log('not a user '.$this->email);
205
- $wpdb->get_results($wpdb->prepare("
206
- UPDATE $wpdb->comments
207
- SET
208
- comment_author = 'Deleted User',
209
- comment_author_email = %s,
210
- comment_author_url = '',
211
- comment_author_IP = '000.000.000.00'
212
- WHERE comment_author_email = '". $this->email ."'", 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
213
-
214
-
215
- return;
216
- }
217
-
218
- $userID = wp_update_user(array(
219
- 'ID' => $this->user->ID,
220
- 'user_pass' => wp_generate_password(),
221
- 'user_nicename' => 'Deleted User',
222
- 'user_url' => '',
223
- 'display_name' => 'Deleted User',
224
- 'nickname' => 'Deleted User',
225
- 'first_name' => 'Deleted',
226
- 'last_name' => 'User',
227
- 'description' => '',
228
- 'rich_editing' => '',
229
- 'user_registered' => '',
230
- 'role' => '',
231
- 'jabber' => '',
232
- 'aim' => '',
233
- 'yim' => '',
234
- 'show_admin_bar_front' => ''
235
- ));
236
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
237
  $wpdb->get_results($wpdb->prepare("
238
  UPDATE $wpdb->users
239
- SET
240
  user_login = %s,
241
  user_email = %s
242
- WHERE ID = {$this->user->ID}", 'deleted_user_' . wp_generate_password(10, FALSE, FALSE), 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
243
-
244
- // ======================================================================
245
- // WP_Comments
246
- // ======================================================================
247
  $wpdb->get_results($wpdb->prepare("
248
  UPDATE $wpdb->comments
249
- SET
250
  comment_author = 'Deleted User',
251
  comment_author_email = %s,
252
  comment_author_url = '',
253
  comment_author_IP = '000.000.000.00'
254
- WHERE user_id = %d", $this->user->ID, 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
255
-
256
- // ======================================================================
257
- // WP_UserMeta
258
- // ======================================================================
259
- $meta = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d", $this->user->ID));
260
-
261
- foreach ($meta as $row) {
262
- if ($this->isSensativeKey($row->meta_key)) {
263
  $wpdb->get_results($wpdb->prepare("
264
  UPDATE $wpdb->usermeta
265
- SET
266
  meta_value = 'Deleted'
267
- WHERE umeta_id = %d", $row->umeta_id));
268
- }
269
- }
270
- }
271
-
272
- public function superUnsubscribeIntegrations()
273
- {
274
- foreach (SPDSGVOIntegration::getAllIntegrations() as $integration) {
275
- if (method_exists($integration, 'onSuperUnsubscribe')) {
276
- try {
277
- $integration->onSuperUnsubscribe($this->email, $this->firstName, $this->lastName, $this->user);
278
- } catch (Exception $e) {}
279
- }
280
- }
281
- }
282
-
283
- // ======================================================================
284
- // Helpers
285
- // ======================================================================
286
- public function addIdentifier($identifier, $type)
287
- {
288
- $identifier = strtolower($identifier);
289
-
290
- if (empty($identifier)) {
291
- return;
292
- }
293
-
294
- if (! in_array($identifier, $this->identifiers)) {
295
- $this->identifiers[] = (object) [
296
- 'value' => $identifier,
297
- 'type' => $type
298
- ];
299
- }
300
- }
301
-
302
- public function addData($data, $type = 'misc', $source = 'database')
303
- {
304
- // $data = strtolower($data);
305
- if (empty($data)) {
306
- return;
307
- }
308
- if ($data === '::1') {
309
- return;
310
- }
311
-
312
- foreach ($this->data as $d) {
313
- if ($d->data === $data) {
314
- return;
315
- }
316
- }
317
-
318
- if ($type === 'misc') {
319
- $type = $this->guessDataType($data);
320
- $type = ($type === FALSE) ? 'misc' : $type;
321
- }
322
-
323
- $this->data[] = (object) array(
324
- 'data' => $data,
325
- 'type' => $type,
326
- 'source' => $source
327
- );
328
- $this->totalFound ++;
329
- }
330
-
331
- public function guessDataType($data)
332
- {
333
- $dataToCheck = strtolower($data);
334
-
335
- // IP Addresses
336
- preg_match_all('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $dataToCheck, $IPAddresses);
337
- foreach ($IPAddresses[0] as $ip) {
338
- return 'ip';
339
- }
340
-
341
- // Email
342
- preg_match_all('/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $dataToCheck, $emailAdresses);
343
- foreach ($emailAdresses[0] as $emailAddress) {
344
- return 'email';
345
- }
346
-
347
- // Post Code
348
- preg_match_all('/((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))/i', $dataToCheck, $postCodes);
349
- foreach ($postCodes[0] as $postCode) {
350
- return 'post_code';
351
- }
352
-
353
- // Phone Number
354
- preg_match_all('/^[().+\d -]{5,15}$/', $dataToCheck, $phoneNumbers);
355
- foreach ($phoneNumbers[0] as $phoneNumber) {
356
- if (strlen($phoneNumber) >= 7) {
357
- return 'phone_number';
358
- }
359
- }
360
-
361
- // URLs
362
- preg_match_all('#[-a-zA-Z0-9@:%_\+.~\#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~\#?&//=]*)?#si', $dataToCheck, $URLs);
363
- foreach ($URLs[0] as $url) {
364
- if (! empty($url)) {
365
- if (strpos($url, @parse_url($url)['host']) === FALSE) {
366
- if (filter_var($url, FILTER_VALIDATE_URL)) {
367
- return 'url';
368
- }
369
- }
370
- }
371
- }
372
-
373
- // Address
374
- if (strpos($dataToCheck, 'road') !== FALSE || strpos($dataToCheck, 'street') !== FALSE) {
375
- return 'address';
376
- }
377
-
378
- foreach ($this->identifiers as $key => $identifier) {
379
- if ($identifier->value == $dataToCheck) {
380
- return $identifier->type;
381
- }
382
- }
383
-
384
- return false;
385
- }
386
-
387
- public function getData()
388
- {
389
- $done = array();
390
- $data = array();
391
-
392
- foreach ($this->data as $d) {
393
- if (! in_array($d->data, $done)) {
394
- $done[] = $d->data;
395
- $data[] = $d;
396
- }
397
- }
398
-
399
- return $data;
400
- }
401
-
402
- public function getDataByType()
403
- {
404
- $done = array();
405
- $data = array();
406
-
407
- foreach ($this->data as $d) {
408
- if (! in_array($d->data, $done)) {
409
- $done[] = $d->data;
410
-
411
- if (! isset($data[$d->type])) {
412
- $data[$d->type] = array();
413
- }
414
-
415
- $data[$d->type][] = $d;
416
- }
417
- }
418
-
419
- return $data;
420
- }
421
-
422
- public function isSensativeKey($key)
423
- {
424
- return (str_replace($this->sensativeKeys, '', $key) !== $key);
425
- }
426
-
427
- public function searchStringForKnownIdentifiers($string)
428
- {
429
- $identifiers = array_unique($this->identifiers);
430
-
431
- foreach ($identifiers as $identifier) {
432
- if (strpos($string, $identifier) !== FALSE) {
433
- $this->addData($string);
434
- }
435
- }
436
- }
437
- }
1
+ <?php
2
+
3
+ /**
4
+ * Fired during plugin deactivation
5
+ *
6
+ * @link https://wp-dsgvo.eu
7
+ * @since 1.0.0
8
+ *
9
+ * @package WP DSGVO Tools
10
+ * @subpackage WP DSGVO Tools/includes
11
+ */
12
+
13
+ /**
14
+ * Fired during plugin deactivation.
15
+ *
16
+ * This class defines all code necessary to run during the plugin's deactivation.
17
+ *
18
+ * @since 1.0.0
19
+ * @package WP DSGVO Tools
20
+ * @subpackage WP DSGVO Tools/includes
21
+ * @author Shapepress eU
22
+ */
23
+ class SPDSGVODataCollecter
24
+ {
25
+
26
+ public $email;
27
+
28
+ public $firstName;
29
+
30
+ public $lastName;
31
+
32
+ public $user = NULL;
33
+
34
+ public $totalFound = 0;
35
+
36
+ public $data = array();
37
+
38
+ public $identifiers = array();
39
+
40
+ public $tables = array();
41
+
42
+ public $sensativeKeys = array(
43
+ 'company',
44
+ 'country',
45
+ 'county',
46
+ 'city',
47
+ 'state',
48
+ 'address',
49
+ 'first_name',
50
+ 'last_name',
51
+ 'zip',
52
+ 'zip_code',
53
+ 'post_code',
54
+ 'postcode',
55
+ 'email',
56
+ 'phone',
57
+ 'ip',
58
+ 'ip_address'
59
+ );
60
+
61
+ public function __construct($email, $firstName = '', $lastName = '')
62
+ {
63
+ $this->email = $email;
64
+
65
+ if (! empty($firstName)) {
66
+ $this->addIdentifier($firstName, __('Name','shapepress-dsgvo'));
67
+ $this->firstName = $firstName;
68
+ }
69
+
70
+ if (! empty($lastName)) {
71
+ $this->addIdentifier($lastName, __('Name','shapepress-dsgvo'));
72
+ $this->lastName = $lastName;
73
+ }
74
+
75
+ $this->user = get_user_by('email', $this->email);
76
+ if (is_a($this->user, 'WP_User')) {
77
+ $this->addIdentifier($this->user->user_login, __('Login','shapepress-dsgvo'));
78
+ $this->addIdentifier($this->user->user_nicename, __('Name','shapepress-dsgvo'));
79
+ $this->addIdentifier($this->user->user_email, __('Email','shapepress-dsgvo'));
80
+ $this->addIdentifier($this->user->user_url, __('Url','shapepress-dsgvo'));
81
+ $this->addIdentifier($this->user->display_name, __('Display Name','shapepress-dsgvo'));
82
+ $this->addIdentifier(str_replace('www.', '', @parse_url($this->user->user_url)['host']), __('Url','shapepress-dsgvo'));
83
+ }
84
+ }
85
+
86
+ public function sar()
87
+ {
88
+ if (is_a($this->user, 'WP_User')) {
89
+ $this->crawlLocal();
90
+ }else
91
+ {
92
+ $this->crawlLocal(); // both for now because it only crawls comments
93
+ }
94
+
95
+ $this->integrationsSAR();
96
+
97
+ if (isValidPremiumEdition())
98
+ {
99
+ try {
100
+ $customData = apply_filters('spdsgvo_custom_sar', $this->email);
101
+
102
+ //error_log('custom filter result. '.$customData);
103
+ if ($customData === $this->email) $customData = NULL;
104
+ if ($customData)
105
+ {
106
+ foreach ($customData as $data) {
107
+ $this->addData($data, __('Advanced', 'shapepress-dsgvo'), 'spdsgvo_custom_sar');
108
+ }
109
+ }
110
+
111
+ } catch (Exception $e) {
112
+ error_log($e);
113
+ }
114
+ }
115
+
116
+ return $this->getData();
117
+ }
118
+
119
+ public function crawlLocal()
120
+ {
121
+ global $wpdb;
122
+
123
+ if (! is_a($this->user, 'WP_User')) {
124
+
125
+ // search public comments and then return
126
+
127
+ $comments = get_comments(array(
128
+ 'author_email' => $this->email,
129
+ 'type' => ''
130
+ ));
131
+ foreach ($comments as $comment) {
132
+ $this->addData($comment->comment_author, __('Name','shapepress-dsgvo'));
133
+ $this->addData($comment->comment_author_email, __('Email','shapepress-dsgvo'));
134
+ $this->addData($comment->comment_author_url, __('Url','shapepress-dsgvo'));
135
+ $this->addData($comment->comment_author_IP, __('IP Address','shapepress-dsgvo'));
136
+ $this->addData($comment->comment_content, __('Comment','shapepress-dsgvo'));
137
+ }
138
+
139
+ return;
140
+ }
141
+
142
+ // ====================================================
143
+ // WP_User
144
+ // ====================================================
145
+ $this->addData($this->user->user_login, __('User name','shapepress-dsgvo'));
146
+ $this->addData($this->user->user_nicename, __('Name','shapepress-dsgvo'));
147
+ $this->addData($this->user->user_url, __('Url','shapepress-dsgvo'));
148
+ $this->addData($this->user->display_name, __('Display name','shapepress-dsgvo'));
149
+
150
+ // ====================================================
151
+ // WP_Usermeta
152
+ // ====================================================
153
+ foreach (get_user_meta($this->user->ID) as $key => $meta) {
154
+ if ($this->isSensativeKey($key)) {
155
+ foreach ($meta as $metaValue) {
156
+ $this->addData($metaValue);
157
+ }
158
+ }
159
+ }
160
+
161
+ // ====================================================
162
+ // WP_Comments
163
+ // ====================================================
164
+ $comments = get_comments(array(
165
+ 'user_id' => $this->user->ID
166
+ ));
167
+ //error_log('comments1: '.implode(', ',$comments));
168
+ foreach ($comments as $comment) {
169
+ $this->addData($comment->comment_author, __('Name','shapepress-dsgvo'));
170
+ $this->addData($comment->comment_author_email, __('Email','shapepress-dsgvo'));
171
+ $this->addData($comment->comment_author_url, __('Url','shapepress-dsgvo'));
172
+ $this->addData($comment->comment_author_IP, __('IP Address','shapepress-dsgvo'));
173
+ $this->addData($comment->comment_content, __('Comment','shapepress-dsgvo'));
174
+ }
175
+
176
+
177
+ }
178
+
179
+ public function integrationsSAR()
180
+ {
181
+ foreach (SPDSGVOIntegration::getAllIntegrations() as $integration) {
182
+ if (method_exists($integration, 'onSubjectAccessRequest')) {
183
+ try {
184
+ $data = $integration->onSubjectAccessRequest($this->email, $this->firstName, $this->lastName, $this->user);
185
+ if (is_array($data)) {
186
+ foreach ($data as $value) {
187
+ if (is_string($value)) {
188
+ $this->addData($value, $integration->title, $integration->name);
189
+ } else if (is_array($value)) {
190
+ foreach ($value as $valueItem) {
191
+ if (is_string($valueItem)) {
192
+ $this->addData($valueItem, $integration->title, $integration->name);
193
+ }
194
+ }
195
+ }
196
+ }
197
+ }
198
+ } catch (Exception $e) {}
199
+ }
200
+ }
201
+ }
202
+
203
+ public function superUnsubscribe()
204
+ {
205
+ $this->user = get_user_by('email', $this->email);
206
+
207
+ if (is_a($this->user, 'WP_User')) {
208
+ $this->superUnsubscribeLocal();
209
+ } else
210
+ {
211
+ $this->superUnsubscribeLocal();
212
+ }
213
+
214
+ if (isValidPremiumEdition())
215
+ {
216
+ try {
217
+ apply_filters('spdsgvo_custom_unsubscribe', $this->email);
218
+
219
+ } catch (Exception $e) {
220
+ error_log($e);
221
+ }
222
+ }
223
+
224
+ $this->superUnsubscribeIntegrations();
225
+ }
226
+
227
+ public function superUnsubscribeLocal()
228
+ {
229
+ global $wpdb;
230
+
231
+ if (! is_a($this->user, 'WP_User')) { // only do commments for not registered ones
232
+
233
+ // ======================================================================
234
+ // WP_Comments
235
+ // ======================================================================
236
+ error_log('not a user '.$this->email);
237
+ $wpdb->get_results($wpdb->prepare("
238
+ UPDATE $wpdb->comments
239
+ SET
240
+ comment_author = 'Deleted User',
241
+ comment_author_email = %s,
242
+ comment_author_url = '',
243
+ comment_author_IP = '000.000.000.00'
244
+ WHERE comment_author_email = '". $this->email ."'", 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
245
+
246
+
247
+ return;
248
+ }
249
+
250
+ $userID = wp_update_user(array(
251
+ 'ID' => $this->user->ID,
252
+ 'user_pass' => wp_generate_password(),
253
+ 'user_nicename' => 'Deleted User',
254
+ 'user_url' => '',
255
+ 'display_name' => 'Deleted User',
256
+ 'nickname' => 'Deleted User',
257
+ 'first_name' => 'Deleted',
258
+ 'last_name' => 'User',
259
+ 'description' => '',
260
+ 'rich_editing' => '',
261
+ 'user_registered' => '',
262
+ 'role' => '',
263
+ 'jabber' => '',
264
+ 'aim' => '',
265
+ 'yim' => '',
266
+ 'show_admin_bar_front' => ''
267
+ ));
268
+
269
  $wpdb->get_results($wpdb->prepare("
270
  UPDATE $wpdb->users
271
+ SET
272
  user_login = %s,
273
  user_email = %s
274
+ WHERE ID = {$this->user->ID}", 'deleted_user_' . wp_generate_password(10, FALSE, FALSE), 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
275
+
276
+ // ======================================================================
277
+ // WP_Comments
278
+ // ======================================================================
279
  $wpdb->get_results($wpdb->prepare("
280
  UPDATE $wpdb->comments
281
+ SET
282
  comment_author = 'Deleted User',
283
  comment_author_email = %s,
284
  comment_author_url = '',
285
  comment_author_IP = '000.000.000.00'
286
+ WHERE user_id = %d", $this->user->ID, 'deleted_user_' . wp_generate_password(10, FALSE, FALSE) . '@example.com'));
287
+
288
+ // ======================================================================
289
+ // WP_UserMeta
290
+ // ======================================================================
291
+ $meta = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d", $this->user->ID));
292
+
293
+ foreach ($meta as $row) {
294
+ if ($this->isSensativeKey($row->meta_key)) {
295
  $wpdb->get_results($wpdb->prepare("
296
  UPDATE $wpdb->usermeta
297
+ SET
298
  meta_value = 'Deleted'
299
+ WHERE umeta_id = %d", $row->umeta_id));
300
+ }
301
+ }
302
+ }
303
+
304
+ public function superUnsubscribeIntegrations()
305
+ {
306
+ foreach (SPDSGVOIntegration::getAllIntegrations() as $integration) {
307
+ if (method_exists($integration, 'onSuperUnsubscribe')) {
308
+ try {
309
+ $integration->onSuperUnsubscribe($this->email, $this->firstName, $this->lastName, $this->user);
310
+ } catch (Exception $e) {}
311
+ }
312
+ }
313
+ }
314
+
315
+ // ======================================================================
316
+ // Helpers
317
+ // ======================================================================
318
+ public function addIdentifier($identifier, $type)
319
+ {
320
+ $identifier = strtolower($identifier);
321
+
322
+ if (empty($identifier)) {
323
+ return;
324
+ }
325
+
326
+ if (! in_array($identifier, $this->identifiers)) {
327
+ $this->identifiers[] = (object) [
328
+ 'value' => $identifier,
329
+ 'type' => $type
330
+ ];
331
+ }
332
+ }
333
+
334
+ public function addData($data, $type = 'misc', $source = 'database')
335
+ {
336
+ // $data = strtolower($data);
337
+ if (empty($data)) {
338
+ return;
339
+ }
340
+ if ($data === '::1') {
341
+ return;
342
+ }
343
+
344
+ foreach ($this->data as $d) {
345
+ if ($d->data === $data) {
346
+ return;
347
+ }
348
+ }
349
+
350
+ if ($type === 'misc') {
351
+ $type = $this->guessDataType($data);
352
+ $type = ($type === FALSE) ? 'misc' : $type;
353
+ }
354
+
355
+ $this->data[] = (object) array(
356
+ 'data' => $data,
357
+ 'type' => $type,
358
+ 'source' => $source
359
+ );
360
+ $this->totalFound ++;
361
+ }
362
+
363
+ public function guessDataType($data)
364
+ {
365
+ $dataToCheck = strtolower($data);
366
+
367
+ // IP Addresses
368
+ preg_match_all('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $dataToCheck, $IPAddresses);
369
+ foreach ($IPAddresses[0] as $ip) {
370
+ return 'IP';
371
+ }
372
+
373
+ // Email
374
+ preg_match_all('/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $dataToCheck, $emailAdresses);
375
+ foreach ($emailAdresses[0] as $emailAddress) {
376
+ return __('Email','shapepress-dsgvo');
377
+ }
378
+
379
+ // Post Code
380
+ preg_match_all('/((GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2}))/i', $dataToCheck, $postCodes);
381
+ foreach ($postCodes[0] as $postCode) {
382
+ return __('ZIP Code','shapepress-dsgvo');
383
+ }
384
+
385
+ // Phone Number
386
+ preg_match_all('/^[().+\d -]{5,15}$/', $dataToCheck, $phoneNumbers);
387
+ foreach ($phoneNumbers[0] as $phoneNumber) {
388
+ if (strlen($phoneNumber) >= 7) {
389
+ return __('Phone number','shapepress-dsgvo');
390
+ }
391
+ }
392
+
393
+ // URLs
394
+ preg_match_all('#[-a-zA-Z0-9@:%_\+.~\#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~\#?&//=]*)?#si', $dataToCheck, $URLs);
395
+ foreach ($URLs[0] as $url) {
396
+ if (! empty($url)) {
397
+ if (strpos($url, @parse_url($url)['host']) === FALSE) {
398
+ if (filter_var($url, FILTER_VALIDATE_URL)) {
399
+ return __('Url','shapepress-dsgvo');
400
+ }
401
+ }
402
+ }
403
+ }
404
+
405
+ // Address
406
+ if (strpos($dataToCheck, 'road') !== FALSE || strpos($dataToCheck, 'street') !== FALSE) {
407
+ return __('Address','shapepress-dsgvo');
408
+ }
409
+
410
+ foreach ($this->identifiers as $key => $identifier) {
411
+ if ($identifier->value == $dataToCheck) {
412
+ return $identifier->type;
413
+ }
414
+ }
415
+
416
+ return false;
417
+ }
418
+
419
+ public function getData()
420
+ {
421
+ $done = array();
422
+ $data = array();
423
+
424
+ foreach ($this->data as $d) {
425
+ if (! in_array($d->data, $done)) {
426
+ $done[] = $d->data;
427
+ $data[] = $d;
428
+ }
429
+ }
430
+
431
+ return $data;
432
+ }
433
+
434
+ public function getDataByType()
435
+ {
436
+ $done = array();
437
+ $data = array();
438
+
439
+ foreach ($this->data as $d) {
440
+ if (! in_array($d->data, $done)) {
441
+ $done[] = $d->data;
442
+
443
+ if (! isset($data[$d->type])) {
444
+ $data[$d->type] = array();
445
+ }
446
+
447
+ $data[$d->type][] = $d;
448
+ }
449
+ }
450
+
451
+ return $data;
452
+ }
453
+
454
+ public function isSensativeKey($key)
455
+ {
456
+ return (str_replace($this->sensativeKeys, '', $key) !== $key);
457
+ }
458
+
459
+ public function searchStringForKnownIdentifiers($string)
460
+ {
461
+ $identifiers = array_unique($this->identifiers);
462
+
463
+ foreach ($identifiers as $identifier) {
464
+ if (strpos($string, $identifier) !== FALSE) {
465
+ $this->addData($string);
466
+ }
467
+ }
468
+ }
469
+ }
includes/class-sp-dsgvo-log.php CHANGED
@@ -1,57 +1,57 @@
1
- <?php
2
-
3
- /**
4
- * Post Model for Logs
5
- *
6
- * @link http://example.com
7
- * @since 1.0.0
8
- *
9
- * @package WP DSGVO Tools
10
- * @subpackage WP DSGVO Tools/includes
11
- */
12
-
13
- /**
14
- * Post Model for Logs
15
- *
16
- * @since 1.0.0
17
- * @package WP DSGVO Tools
18
- * @subpackage WP DSGVO Tools/includes
19
- * @author Shapepress eU
20
- */
21
- class SPDSGVOLog
22
- {
23
-
24
- public static $tableName = 'sp_dsgvo_logs';
25
-
26
- public $ID;
27
-
28
- public $date;
29
-
30
- public $content;
31
-
32
- public function __construct($content = '')
33
- {
34
- $this->content = $content;
35
- $this->date = date("Y-m-d H:i:s");
36
- }
37
-
38
- public function boot()
39
- {
40
- global $wpdb;
41
- $tableName = $wpdb->prefix . self::$tableName;
42
- $result = $wpdb->get_results("SELECT * from {$tableName} WHERE `ID` = {$this->ID}");
43
-
44
- if (isset($result[0]->log_content)) {
45
- $this->date = $result[0]->log_date;
46
- $this->content = $result[0]->log_content;
47
- }
48
- }
49
-
50
- public static function migrate()
51
- {
52
- global $wpdb;
53
- $tableName = $wpdb->prefix . self::$tableName;
54
-
55
  $wpdb->get_var("
56
  CREATE TABLE `{$tableName}` (
57
  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
@@ -59,73 +59,73 @@ class SPDSGVOLog
59
  `log_content` longtext NOT NULL,
60
  PRIMARY KEY (`ID`)
61
  )
62
- ");
63
-
64
- $error = $wpdb->last_error;
65
- return ($error) ? $error : TRUE;
66
- }
67
-
68
- public static function tableExists()
69
- {
70
- global $wpdb;
71
-
72
- $tableName = $wpdb->prefix . self::$tableName;
73
-
74
- return $wpdb->get_var("SHOW TABLES LIKE '$tableName'") == $tableName;
75
- }
76
-
77
- public static function insert($content)
78
- {
79
- $log = new self($content);
80
- $log->save();
81
- return $log;
82
- }
83
-
84
- public static function find($ID)
85
- {
86
- $log = new self();
87
- $log->ID = $ID;
88
- $log->boot();
89
- return $log;
90
- }
91
-
92
- public static function all()
93
- {
94
- global $wpdb;
95
- $tableName = $wpdb->prefix . self::$tableName;
96
-
97
- $result = $wpdb->get_results("SELECT * FROM {$tableName} ORDER BY ID DESC");
98
-
99
- $logs = array();
100
- foreach ($result as $key => $row) {
101
- array_push($logs, self::find($row->ID));
102
- }
103
-
104
- return $logs;
105
- }
106
-
107
- public static function mostRecent($limit = 15)
108
- {
109
- global $wpdb;
110
- $tableName = $wpdb->prefix . self::$tableName;
111
-
112
- $result = $wpdb->get_results("SELECT * FROM {$tableName} ORDER BY ID DESC LIMIT {$limit}");
113
-
114
- $logs = array();
115
- foreach ($result as $key => $row) {
116
- array_push($logs, self::find($row->ID));
117
- }
118
-
119
- return $logs;
120
- }
121
-
122
- public function save()
123
- {
124
- global $wpdb;
125
- $tableName = $wpdb->prefix . self::$tableName;
126
-
127
  $wpdb->get_results("
128
  INSERT INTO {$tableName} (log_date, log_content) VALUES('{$this->date}', '$this->content')
129
- ");
130
- }
131
  }
1
+ <?php
2
+
3
+ /**
4
+ * Post Model for Logs
5
+ *
6
+ * @link http://example.com
7
+ * @since 1.0.0
8
+ *
9
+ * @package WP DSGVO Tools
10
+ * @subpackage WP DSGVO Tools/includes
11
+ */
12
+
13
+ /**
14
+ * Post Model for Logs
15
+ *
16
+ * @since 1.0.0
17
+ * @package WP DSGVO Tools
18
+ * @subpackage WP DSGVO Tools/includes
19
+ * @author Shapepress eU
20
+ */
21
+ class SPDSGVOLog
22
+ {
23
+
24
+ public static $tableName = 'sp_dsgvo_logs';
25
+
26
+ public $ID;
27
+
28
+ public $date;
29
+
30
+ public $content;
31
+
32
+ public function __construct($content = '')
33
+ {
34
+ $this->content = $content;
35
+ $this->date = date("Y-m-d H:i:s");
36
+ }
37
+
38
+ public function boot()
39
+ {
40
+ global $wpdb;
41
+ $tableName = $wpdb->prefix . self::$tableName;
42
+ $result = $wpdb->get_results("SELECT * from {$tableName} WHERE `ID` = {$this->ID}");
43
+
44
+ if (isset($result[0]->log_content)) {
45
+ $this->date = $result[0]->log_date;
46
+ $this->content = $result[0]->log_content;
47
+ }
48
+ }
49
+
50
+ public static function migrate()
51
+ {
52
+ global $wpdb;
53
+ $tableName = $wpdb->prefix . self::$tableName;
54
+
55
  $wpdb->get_var("
56
  CREATE TABLE `{$tableName}` (
57
  `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
59
  `log_content` longtext NOT NULL,
60
  PRIMARY KEY (`ID`)
61
  )
62
+ ");
63
+
64
+ $error = $wpdb->last_error;
65
+ return ($error) ? $error : TRUE;
66
+ }
67
+
68
+ public static function tableExists()
69
+ {
70
+ global $wpdb;
71
+
72
+ $tableName = $wpdb->prefix . self::$tableName;
73
+
74
+ return $wpdb->get_var("SHOW TABLES LIKE '$tableName'") == $tableName;
75
+ }
76
+
77
+ public static function insert($content)
78
+ {
79
+ $log = new self($content);
80
+ $log->save();
81
+ return $log;
82
+ }
83
+
84
+ public static function find($ID)
85
+ {
86
+ $log = new self();
87
+ $log->ID = $ID;
88
+ $log->boot();
89
+ return $log;
90
+ }
91
+
92
+ public static function all()
93
+ {
94
+ global $wpdb;
95
+ $tableName = $wpdb->prefix . self::$tableName;
96
+
97
+ $result = $wpdb->get_results("SELECT * FROM {$tableName} ORDER BY ID DESC");
98
+
99
+ $logs = array();
100
+ foreach ($result as $key => $row) {
101
+ array_push($logs, self::find($row->ID));
102
+ }
103
+
104
+ return $logs;
105
+ }
106
+
107
+ public static function mostRecent($limit = 15)
108
+ {
109
+ global $wpdb;
110
+ $tableName = $wpdb->prefix . self::$tableName;
111
+
112
+ $result = $wpdb->get_results("SELECT * FROM {$tableName} ORDER BY ID DESC LIMIT {$limit}");
113
+
114
+ $logs = array();
115
+ foreach ($result as $key => $row) {
116
+ array_push($logs, self::find($row->ID));
117
+ }
118
+
119
+ return $logs;
120
+ }
121
+
122
+ public function save()
123
+ {
124
+ global $wpdb;
125
+ $tableName = $wpdb->prefix . self::$tableName;
126
+
127
  $wpdb->get_results("
128
  INSERT INTO {$tableName} (log_date, log_content) VALUES('{$this->date}', '$this->content')
129
+ ");
130
+ }
131
  }
includes/class-sp-dsgvo-mail.php CHANGED
@@ -108,7 +108,7 @@ Class SPDSGVOMail
108
  }
109
 
110
 
111
- /**
112
  * Set email Subject
113
  * @param Srting $subject
114
  * @return Object $this
@@ -138,7 +138,7 @@ Class SPDSGVOMail
138
  return $this;
139
  }
140
 
141
- /**
142
  * Set the email's headers
143
  * @param String|Array $headers [description]
144
  * @return Object $this
@@ -149,7 +149,7 @@ Class SPDSGVOMail
149
  }else{
150
  $this->headers = array($headers);
151
  }
152
-
153
  return $this;
154
  }
155
 
@@ -172,7 +172,7 @@ Class SPDSGVOMail
172
  }
173
 
174
 
175
- /**
176
  * Set email content type
177
  * @param Bool $html
178
  * @return Object $this
@@ -183,10 +183,10 @@ Class SPDSGVOMail
183
  }
184
 
185
 
186
- /**
187
  * Attach a file or array of files.
188
  * Filepaths must be absolute.
189
- * @param String|Array $path
190
  * @throws Exception
191
  * @return Object $this
192
  */
@@ -195,14 +195,14 @@ Class SPDSGVOMail
195
  $this->attachments = array();
196
  foreach($path as $path_) {
197
  if(!file_exists($path_)){
198
- throw new Exception("Attachment not found at $path");
199
  }else{
200
  $this->attachments[] = $path_;
201
  }
202
  }
203
  }else{
204
  if(!file_exists($path)){
205
- throw new Exception("Attachment not found at $path");
206
  }
207
  $this->attachments = array($path);
208
  }
@@ -220,10 +220,10 @@ Class SPDSGVOMail
220
  */
221
  public function beforeTemplate($template, $variables = NULL){
222
  if(!file_exists($template)){
223
- throw new Exception('Template file not found');
224
  }
225
 
226
- if(is_array($variables)){
227
  $this->beforeVariables = $variables;
228
  }
229
 
@@ -244,7 +244,7 @@ Class SPDSGVOMail
244
  throw new Exception('File not found');
245
  }
246
 
247
- if(is_array($variables)){
248
  $this->variables = $variables;
249
  }
250
 
@@ -262,10 +262,10 @@ Class SPDSGVOMail
262
  */
263
  public function afterTemplate($template, $variables = NULL){
264
  if(!file_exists($template)){
265
- throw new Exception('Template file not found');
266
  }
267
 
268
- if(is_array($variables)){
269
  $this->afterVariables = $variables;
270
  }
271
 
@@ -279,17 +279,17 @@ Class SPDSGVOMail
279
  * @return string
280
  */
281
  public function render(){
282
- return $this->renderPart('before') .
283
  $this->renderPart('main') .
284
  $this->renderPart('after');
285
  }
286
-
287
 
288
  /**
289
  * Render a specific part of the email
290
  * @author Shapepress eU
291
  * @param string $part before, after, main
292
- * @return string
293
  */
294
  public function renderPart($part = 'main'){
295
  switch($part){
@@ -302,7 +302,7 @@ Class SPDSGVOMail
302
  $templateFile = $this->afterTemplate;
303
  $variables = $this->afterVariables;
304
  break;
305
-
306
  case 'main':
307
  default:
308
  $templateFile = $this->template;
@@ -314,7 +314,16 @@ Class SPDSGVOMail
314
  return '';
315
  }
316
 
317
- $template = file_get_contents($templateFile);
 
 
 
 
 
 
 
 
 
318
 
319
  if(!is_array($variables) || empty($variables)){
320
  return $template;
@@ -361,21 +370,21 @@ Class SPDSGVOMail
361
 
362
 
363
  /**
364
- * Set the wp_mail_content_type filter, if necessary
365
  */
366
  private function beforeSend(){
367
  if(count($this->to) === 0){
368
- throw new Exception('You must set at least 1 recipient');
369
  }
370
 
371
  if(empty($this->template)){
372
- throw new Exception('You must set a template');
373
  }
374
 
375
  if($this->sendAsHTML){
376
  add_filter('wp_mail_content_type', array($this, 'HTMLFilter'));
377
  }
378
- }
379
 
380
 
381
  /**
@@ -387,4 +396,4 @@ Class SPDSGVOMail
387
  $this->beforeSend();
388
  return wp_mail($this->to, $this->subject, $this->render(), $this->buildHeaders(), $this->attachments);
389
  }
390
- }
108
  }
109
 
110
 
111
+ /**
112
  * Set email Subject
113
  * @param Srting $subject
114
  * @return Object $this
138
  return $this;
139
  }
140
 
141
+ /**
142
  * Set the email's headers
143
  * @param String|Array $headers [description]
144
  * @return Object $this
149
  }else{
150
  $this->headers = array($headers);
151
  }
152
+
153
  return $this;
154
  }
155
 
172
  }
173
 
174
 
175
+ /**
176
  * Set email content type
177
  * @param Bool $html
178
  * @return Object $this
183
  }
184
 
185
 
186
+ /**
187
  * Attach a file or array of files.
188
  * Filepaths must be absolute.
189
+ * @param String|Array $path
190
  * @throws Exception
191
  * @return Object $this
192
  */
195
  $this->attachments = array();
196
  foreach($path as $path_) {
197
  if(!file_exists($path_)){
198
+ throw new Exception(__('Attachment not found at', 'shapepress-dsgvo') . " $path");
199
  }else{
200
  $this->attachments[] = $path_;
201
  }
202
  }
203
  }else{
204
  if(!file_exists($path)){
205
+ throw new Exception(__('Attachment not found at', 'shapepress-dsgvo') . " $path");
206
  }
207
  $this->attachments = array($path);
208
  }
220
  */
221
  public function beforeTemplate($template, $variables = NULL){
222
  if(!file_exists($template)){
223
+ throw new Exception(__('Template file not found', 'shapepress-dsgvo'));
224
  }
225
 
226
+ if(is_array($variables)){
227
  $this->beforeVariables = $variables;
228
  }
229
 
244
  throw new Exception('File not found');
245
  }
246
 
247
+ if(is_array($variables)){
248
  $this->variables = $variables;
249
  }
250
 
262
  */
263
  public function afterTemplate($template, $variables = NULL){
264
  if(!file_exists($template)){
265
+ throw new Exception(__('Template file not found', 'shapepress-dsgvo'));
266
  }
267
 
268
+ if(is_array($variables)){
269
  $this->afterVariables = $variables;
270
  }
271
 
279
  * @return string
280
  */
281
  public function render(){
282
+ return $this->renderPart('before') .
283
  $this->renderPart('main') .
284
  $this->renderPart('after');
285
  }
286
+
287
 
288
  /**
289
  * Render a specific part of the email
290
  * @author Shapepress eU
291
  * @param string $part before, after, main
292
+ * @return string
293
  */
294
  public function renderPart($part = 'main'){
295
  switch($part){
302
  $templateFile = $this->afterTemplate;
303
  $variables = $this->afterVariables;
304
  break;
305
+
306
  case 'main':
307
  default:
308
  $templateFile = $this->template;
314
  return '';
315
  }
316
 
317
+
318
+ /* WP KRAKEN START */
319
+
320
+ //$template = file_get_contents($templateFile);
321
+
322
+ ob_start();
323
+ include $templateFile;
324
+ $template = ob_get_clean();
325
+
326
+ /* WP KRAKEN END */
327
 
328
  if(!is_array($variables) || empty($variables)){
329
  return $template;
370
 
371
 
372
  /**
373
+ * Set the wp_mail_content_type filter, if necessary
374
  */
375
  private function beforeSend(){
376
  if(count($this->to) === 0){
377
+ throw new Exception(__('You must set at least 1 recipient', 'shapepress-dsgvo'));
378
  }
379
 
380
  if(empty($this->template)){
381
+ throw new Exception(__('You must set a template', 'shapepress-dsgvo'));
382
  }
383
 
384
  if($this->sendAsHTML){
385
  add_filter('wp_mail_content_type', array($this, 'HTMLFilter'));
386
  }
387
+ }
388
 
389
 
390
  /**
396
  $this->beforeSend();
397
  return wp_mail($this->to, $this->subject, $this->render(), $this->buildHeaders(), $this->attachments);
398
  }
399
+ }
includes/class-sp-dsgvo-pdf.php CHANGED
@@ -1,71 +1,71 @@
1
- <?php
2
-
3
- /**
4
- * Extension of TCPDF
5
- *
6
- * @link http://example.com
7
- * @since 1.0.0
8
- *
9
- * @package WP DSGVO Tools
10
- * @subpackage WP DSGVO Tools/includes
11
- */
12
-
13
- /**
14
- * Extension of TCPDF
15
- *
16
- * @since 1.0.0
17
- * @package WP DSGVO Tools
18
- * @subpackage WP DSGVO Tools/includes
19
- * @author Shapepress eU
20
- */
21
- class SPDSGVOPDF extends TCPDF
22
- {
23
-
24
- public function coloredTable($data)
25
- {
26
- $this->SetFillColor(56, 64, 94);
27
- $this->SetTextColor(255);
28
- $this->SetDrawColor(128, 0, 0);
29
- $this->SetLineWidth(0.3);
30
- $this->SetFont('', 'B');
31
-
32
- $width = array(
33
- 60,
34
- 110
35
- );
36
- //$this->Cell($width[0], 7, 'Typ', 1, 0, 'C', 1);
37
- //$this->Cell($width[1], 7, 'Daten', 1, 0, 'C', 1);
38
-
39
- $this->Ln();
40
- $this->SetFillColor(224, 235, 255);
41
- $this->SetTextColor(0);
42
- $this->SetFont('');
43
-
44
- $fill = 0;
45
- foreach ($data as $type => $d) {
46
- $data = array();
47
-
48
- $title = "<strong>" . $type . "</strong>";
49
-
50
- $this->writeHTML($title, true, false, true, false, '');
51
-
52
- if (is_array($d)) {
53
- foreach ($d as $value) {
54
- if (! empty($value)) {
55
- array_push($data, $value->data);
56
-
57
- $span = "<span>" . $value->data . "</span>";
58
- $this->writeHTML($span, true, false, true, false, '');
59
- }
60
- }
61
- }
62
-
63
- //$this->MultiCell($width[0], 6, $type, 'LR', 'L', $fill, 0, '', '', true, 0, false, true, 0);
64
- //$this->MultiCell($width[1], 6, implode(', ', $data), 'LR', 'L', $fill, 0, '', '', true, 0, false, true, 0);
65
- $this->Ln();
66
- $fill = ! $fill;
67
- }
68
-
69
- $this->Cell(array_sum($width), 0, '', 'T');
70
- }
71
  }
1
+ <?php
2
+
3
+ /**
4
+ * Extension of TCPDF
5
+ *
6
+ * @link http://example.com
7
+ * @since 1.0.0
8
+ *
9
+ * @package WP DSGVO Tools
10
+ * @subpackage WP DSGVO Tools/includes
11
+ */
12
+
13
+ /**
14
+ * Extension of TCPDF
15
+ *
16
+ * @since 1.0.0
17
+ * @package WP DSGVO Tools
18
+ * @subpackage WP DSGVO Tools/includes
19
+ * @author Shapepress eU
20
+ */
21
+ class SPDSGVOPDF extends TCPDF
22
+ {
23
+
24
+ public function coloredTable($data)
25
+ {
26
+ $this->SetFillColor(56, 64, 94);
27
+ $this->SetTextColor(255);
28
+ $this->SetDrawColor(128, 0, 0);
29
+ $this->SetLineWidth(0.3);
30
+ $this->SetFont('', 'B');
31
+
32
+ $width = array(
33
+ 60,
34
+ 110
35
+ );
36
+ //$this->Cell($width[0], 7, 'Typ', 1, 0, 'C', 1);
37
+ //$this->Cell($width[1], 7, 'Daten', 1, 0, 'C', 1);
38
+
39
+ $this->Ln();
40
+ $this->SetFillColor(224, 235, 255);
41
+ $this->SetTextColor(0);
42
+ $this->SetFont('');
43
+
44
+ $fill = 0;
45
+ foreach ($data as $type => $d) {
46
+ $data = array();
47
+
48
+ $title = "<strong>" . $type . "</strong>";
49
+
50
+ $this->writeHTML($title, true, false, true, false, '');
51
+
52
+ if (is_array($d)) {
53
+ foreach ($d as $value) {
54
+ if (! empty($value)) {
55
+ array_push($data, $value->data);
56
+
57
+ $span = "<span>" . $value->data . "</span>";
58
+ $this->writeHTML($span, true, false, true, false, '');
59
+ }
60
+ }
61
+ }
62
+
63
+ //$this->MultiCell($width[0], 6, $type, 'LR', 'L', $fill, 0, '', '', true, 0, false, true, 0);
64
+ //$this->MultiCell($width[1], 6, implode(', ', $data), 'LR', 'L', $fill, 0, '', '', true, 0, false, true, 0);
65
+ $this->Ln();
66
+ $fill = ! $fill;
67
+ }
68
+
69
+ $this->Cell(array_sum($width), 0, '', 'T');
70
+ }
71
  }
includes/class-sp-dsgvo-settings.php CHANGED
@@ -23,27 +23,51 @@
23
  */
24
  class SPDSGVOSettings{
25
 
26
- public static $defaults = array(
27
- /////////////////////////////////////
28
- // common settings
 
29
  /////////////////////////////////////
30
- 'show_setup' => '0',
31
- 'license_key_error' => '1',
 
 
32
  'license_activated' => '0',
33
- 'api_key' => '',
34
- 'admin_email' => '',
 
 
 
 
35
  'sp_dsgvo_comments_checkbox' => '0',
36
- 'spdsgvo_comments_checkbox_confirm' => 'Ich stimme zu.',
37
- 'spdsgvo_comments_checkbox_info' => 'Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.',
38
- 'spdsgvo_comments_checkbox_text' => 'Dieses Formular speichert Ihren Namen, Ihre Email Adresse sowie den Inhalt, damit wir die Kommentare auf unsere Seite auswerten können. Weitere Informationen finden Sie auf unserer Seite der Datenschutzbestimmungen.',
39
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  /////////////////////////////////////
41
  // SAR
42
  /////////////////////////////////////
43
- 'sar_cron' => '0',
44
- 'sar_page' => '0',
45
- 'sar_dsgvo_accepted_text' => 'Ich stimme der Speicherung der Daten zur Verarbeitung im Sinne der DSGVO zu.',
46
-
47
 
48
  /////////////////////////////////////
49
  // Third-party Services
@@ -54,42 +78,45 @@ class SPDSGVOSettings{
54
  'cookies' => array(
55
  'slug' => 'cookies',
56
  'name' => 'Cookies',
57
- 'reason' => 'Wir benutzen Cookies um das Besucherverhalten zu analysieren.',
58
  'link' => '',
59
  'default' => '1',
60
  ),
61
  'google-analytics' => array(
62
  'slug' => 'google-analytics',
63
  'name' => 'Google Analytics',
64
- 'reason' => 'Google Analytics wird zum Anlayiseren des Websitetraffics verwendet.',
65
  'link' => 'https://www.google.com/analytics/terms/us.html',
66
  'default' => '1',
67
  ),
68
  'facebook-pixel' => array(
69
  'slug' => 'facebook-pixel',
70
  'name' => 'Facebook Pixel',
71
- 'reason' => 'Facebook Pixel wird zum Analysieren des Besucherverhaltens verwendet.',
72
  'link' => 'https://www.facebook.com/legal/terms/update',
73
  'default' => '1',
74
  )
75
- ),
76
 
77
 
78
  /////////////////////////////////////
79
  // Unsubscribe Page
80
  /////////////////////////////////////
81
- 'super_unsubscribe_page' => '0',
82
  'unsubscribe_auto_delete' => '0',
83
  'su_auto_del_time' => '0',
84
  'su_woo_data_action' => 'ignore',
85
- 'su_dsgvo_accepted_text' => 'Ich stimme der Speicherung der Daten zur Verarbeitung im Sinne der DSGVO zu.',
 
 
 
86
 
87
 
88
  /////////////////////////////////////
89
  // Cookie Notice
90
  /////////////////////////////////////
91
  'display_cookie_notice' => '0',
92
- 'cookie_notice' => "This website uses cookies. By clicking 'accept' you are providing consent to us using cookies on this browser.",
93
  'cookie_notice_custom_css' => "",
94
  'cn_tracker_init' => 'on_load',
95
  'ga_enable_analytics' => '0',
@@ -97,20 +124,20 @@ class SPDSGVOSettings{
97
  'fb_enable_pixel' => '0',
98
  'fb_pixel_number' => '',
99
  'display_cookie_notice' => '0',
100
- 'cookie_notice_custom_text' => 'Wir verwenden Cookies, um Ihnen das beste Nutzererlebnis bieten zu können. Wenn Sie fortfahren, diese Seite zu verwenden, nehmen wir an, dass Sie damit einverstanden sind.',
101
  'cn_cookie_validity' => '86400',
102
- 'cn_button_text_ok' => 'OK',
103
  'cn_reload_on_confirm' => '0',
104
  'cn_activate_cancel_btn' => '1',
105
- 'cn_button_text_cancel' => 'Ablehnen',
106
  'cn_decline_target_url' => '',
107
  'cn_activate_more_btn' => '0',
108
- 'cn_button_text_more' => 'Mehr Information',
109
  'cn_read_more_page' => '',
110
  'cn_position' => 'bottom',
111
  'cn_animation' => 'none',
112
  'cn_background_color' => '#333333',
113
- 'cn_text_color' => '#ffffff',
114
  'cn_background_color_button' => '#F3F3F3',
115
  'cn_text_color_button' => '#333333',
116
  'cn_custom_css_container' => '',
@@ -142,7 +169,9 @@ class SPDSGVOSettings{
142
  'privacy_policy_page' => '0',
143
  'privacy_policy_version' => '1',
144
  'privacy_policy_hash' => '',
145
-
 
 
146
  /////////////////////////////////////
147
  // imprint
148
  /////////////////////////////////////
@@ -150,10 +179,22 @@ class SPDSGVOSettings{
150
  'imprint_page' => '0',
151
  'imprint_version' => '1',
152
  'imprint_hash' => '',
153
-
 
 
 
 
 
 
 
 
 
154
  );
 
155
 
156
  public static function init(){
 
 
157
  $users = get_users(array('role' => 'administrator'));
158
  $admin = (isset($users[0]))? $users[0] : FALSE;
159
  if(!self::get('admin_email')){
@@ -161,10 +202,10 @@ class SPDSGVOSettings{
161
  self::set('admin_email', $admin->user_email);
162
  }
163
  }
164
-
165
 
166
  if(!self::get('privacy_policy')){
167
- $privacyPolicy = file_get_contents(SPDSGVO::pluginDir('privacy-policy.txt'));
168
  // if($admin){
169
  // $privacyPolicy = str_replace('[name]', $admin->display_name, $privacyPolicy);
170
  // $privacyPolicy = str_replace('[email]', $admin->user_email, $privacyPolicy);
@@ -179,9 +220,9 @@ class SPDSGVOSettings{
179
  SPDSGVOSettings::set('terms_conditions_hash', wp_hash($termsConditions));
180
  self::set('terms_conditions', $termsConditions);
181
  }
182
-
183
  if(!self::get('imprint')){
184
- $imprint = file_get_contents(SPDSGVO::pluginDir('imprint.txt'));
185
  SPDSGVOSettings::set('imprint_hash', wp_hash($imprint));
186
  self::set('imprint', $imprint);
187
  }
@@ -192,30 +233,30 @@ class SPDSGVOSettings{
192
  'cookies' => array(
193
  'slug' => 'cookies',
194
  'name' => 'Cookies',
195
- 'reason' => 'Wir benutzen Cookies um das Besucherverhalten zu analysieren.',
196
  'link' => '',
197
  'default' => '0',
198
  ),
199
  'google-analytics' => array(
200
  'slug' => 'google-analytics',
201
  'name' => 'Google Analytics',
202
- 'reason' => 'Google Analytics wird zum Anlayiseren des Websitetraffics verwendet.',
203
  'link' => 'https://www.google.com/analytics/terms/us.html',
204
  'default' => '0',
205
  ),
206
  'facebook-pixel' => array(
207
  'slug' => 'facebook-pixel',
208
  'name' => 'Facebook Pixel',
209
- 'reason' => 'Facebook Pixel wird zum Analysieren des Besucherverhaltens verwendet.',
210
  'link' => 'https://www.facebook.com/legal/terms/update',
211
  'default' => '0',
212
  )
213
-
214
  ));
215
  }
216
 
217
 
218
- foreach(self::$defaults as $setting => $value){
219
  if(!self::get($setting)){
220
  self::set($setting, $value);
221
  }
@@ -231,18 +272,25 @@ class SPDSGVOSettings{
231
 
232
  if($value !== '0'){
233
  if(!$value || empty($value)){
234
- $value = @self::$defaults[$property];
 
235
  }
236
  }
237
 
238
  return $value;
239
  }
240
-
241
  public static function getDefault($property){
242
-
243
- $value = @self::$defaults[$property];
244
-
245
- return $value;
 
 
 
 
 
 
246
  }
247
 
248
 
23
  */
24
  class SPDSGVOSettings{
25
 
26
+ public $defaults = array();
27
+
28
+ public function __construct() {
29
+ $this->defaults = array(
30
  /////////////////////////////////////
31
+ // common settings
32
+ /////////////////////////////////////
33
+ 'show_setup' => '0',
34
+ 'license_key_error' => '1',
35
  'license_activated' => '0',
36
+ 'licence_activated_on' => '2018-05-01',
37
+ 'licence_valid_to' => '2019-05-05',
38
+ 'licence_details_fetched' => '0',
39
+ 'api_key' => '',
40
+ 'admin_email' => '',
41
+ 'use_wpml_strings' => '0',
42
  'sp_dsgvo_comments_checkbox' => '0',
43
+ 'spdsgvo_comments_checkbox_confirm' => __('I confirm','shapepress-dsgvo'),
44
+ 'spdsgvo_comments_checkbox_info' => __('The confirmation to GDPR is mandatory.','shapepress-dsgvo'),
45
+ 'spdsgvo_comments_checkbox_text' => __('This form stores your name, email address and content so that we can evaluate the comments on our site. For more information, visit our Privacy Policy page.','shapepress-dsgvo'),
46
+
47
+ 'spdsgvo_company_info_name' => '',
48
+ 'spdsgvo_company_info_street' => '',
49
+ 'spdsgvo_company_info_loc_zip' => '',
50
+ 'spdsgvo_company_fn_nr' => '',
51
+ 'spdsgvo_company_law_loc' => '',
52
+ 'spdsgvo_company_uid_nr' => '',
53
+ 'spdsgvo_company_law_person' => '',
54
+ 'spdsgvo_company_chairmen' => '',
55
+ 'spdsgvo_company_resp_content' => '',
56
+ 'spdsgvo_company_info_phone' => '',
57
+ 'spdsgvo_company_info_fax' => '',
58
+ 'spdsgvo_company_info_email' => '',
59
+ 'spdsgvo_newsletter_service' => '',
60
+ 'spdsgvo_newsletter_service_privacy_policy_url' => '',
61
+
62
+
63
+
64
  /////////////////////////////////////
65
  // SAR
66
  /////////////////////////////////////
67
+ 'sar_cron' => '0',
68
+ 'sar_page' => '0',
69
+ 'sar_email_notification' => '0',
70
+ 'sar_dsgvo_accepted_text' => __('I agree to the storage of the data for processing within the meaning of the GDPR.','shapepress-dsgvo'),
71
 
72
  /////////////////////////////////////
73
  // Third-party Services
78
  'cookies' => array(
79
  'slug' => 'cookies',
80
  'name' => 'Cookies',
81
+ 'reason' => __('We use cookies to analyze visitor behavior.','shapepress-dsgvo'),
82
  'link' => '',
83
  'default' => '1',
84
  ),
85
  'google-analytics' => array(
86
  'slug' => 'google-analytics',
87
  'name' => 'Google Analytics',
88
+ 'reason' => __('Google Analytics is used to analyze website traffic.','shapepress-dsgvo'),
89
  'link' => 'https://www.google.com/analytics/terms/us.html',
90
  'default' => '1',
91
  ),
92
  'facebook-pixel' => array(
93
  'slug' => 'facebook-pixel',
94
  'name' => 'Facebook Pixel',
95
+ 'reason' => __('Facebook Pixel is used to analyze visitor behavior.','shapepress-dsgvo'),
96
  'link' => 'https://www.facebook.com/legal/terms/update',
97
  'default' => '1',
98
  )
99
+ ),
100
 
101
 
102
  /////////////////////////////////////
103
  // Unsubscribe Page
104
  /////////////////////////////////////
105
+ 'super_unsubscribe_page' => '0',
106
  'unsubscribe_auto_delete' => '0',
107
  'su_auto_del_time' => '0',
108
  'su_woo_data_action' => 'ignore',
109
+ 'su_bbpress_data_action' => 'ignore',
110
+ 'su_buddypress_data_action' => 'ignore',
111
+ 'su_email_notification' => '0',
112
+ 'su_dsgvo_accepted_text' => __('I agree to the storage of the data for processing within the meaning of the GDPR.','shapepress-dsgvo'),
113
 
114
 
115
  /////////////////////////////////////
116
  // Cookie Notice
117
  /////////////////////////////////////
118
  'display_cookie_notice' => '0',
119
+ 'cookie_notice' => __("This website uses cookies. By clicking 'accept' you are providing consent to us using cookies on this browser.", 'shapepress-dsgvo'),
120
  'cookie_notice_custom_css' => "",
121
  'cn_tracker_init' => 'on_load',
122
  'ga_enable_analytics' => '0',
124
  'fb_enable_pixel' => '0',
125
  'fb_pixel_number' => '',
126
  'display_cookie_notice' => '0',
127
+ 'cookie_notice_custom_text' => __('We use cookies to give you the best user experience. If you continue to use this site, we assume that you agree.','shapepress-dsgvo'),
128
  'cn_cookie_validity' => '86400',
129
+ 'cn_button_text_ok' => __('OK','shapepress-dsgvo'),
130
  'cn_reload_on_confirm' => '0',
131
  'cn_activate_cancel_btn' => '1',
132
+ 'cn_button_text_cancel' => __('Deny','shapepress-dsgvo'),
133
  'cn_decline_target_url' => '',
134
  'cn_activate_more_btn' => '0',
135
+ 'cn_button_text_more' => __('More information','shapepress-dsgvo'),
136
  'cn_read_more_page' => '',
137
  'cn_position' => 'bottom',
138
  'cn_animation' => 'none',
139
  'cn_background_color' => '#333333',
140
+ 'cn_text_color' => '#ffffff',
141
  'cn_background_color_button' => '#F3F3F3',
142
  'cn_text_color_button' => '#333333',
143
  'cn_custom_css_container' => '',
169
  'privacy_policy_page' => '0',
170
  'privacy_policy_version' => '1',
171
  'privacy_policy_hash' => '',
172
+ 'woo_show_privacy_checkbox' => '0',
173
+ 'woo_show_privacy_checkbox_register' => '0',
174
+
175
  /////////////////////////////////////
176
  // imprint
177
  /////////////////////////////////////
179
  'imprint_page' => '0',
180
  'imprint_version' => '1',
181
  'imprint_hash' => '',
182
+
183
+ 'cb_spdsgvo_cl_vdv' => '0',
184
+ 'cb_spdsgvo_cl_filled_out' => '0',
185
+ 'cb_spdsgvo_cl_maintainance' => '0',
186
+ 'cb_spdsgvo_cl_security' => '0',
187
+ 'cb_spdsgvo_cl_hosting' => '0',
188
+ 'cb_spdsgvo_cl_plugins' => '0',
189
+ 'cb_spdsgvo_cl_experts' => '0',
190
+
191
+
192
  );
193
+ }
194
 
195
  public static function init(){
196
+
197
+ $sInstance = (new self);
198
  $users = get_users(array('role' => 'administrator'));
199
  $admin = (isset($users[0]))? $users[0] : FALSE;
200
  if(!self::get('admin_email')){
202
  self::set('admin_email', $admin->user_email);
203
  }
204
  }
205
+
206
 
207
  if(!self::get('privacy_policy')){
208
+ $privacyPolicy = file_get_contents(SPDSGVO::pluginDir('/templates/'.get_locale().'/privacy-policy.txt'));
209
  // if($admin){
210
  // $privacyPolicy = str_replace('[name]', $admin->display_name, $privacyPolicy);
211
  // $privacyPolicy = str_replace('[email]', $admin->user_email, $privacyPolicy);
220
  SPDSGVOSettings::set('terms_conditions_hash', wp_hash($termsConditions));
221
  self::set('terms_conditions', $termsConditions);
222
  }
223
+
224
  if(!self::get('imprint')){
225
+ $imprint = file_get_contents(SPDSGVO::pluginDir('/templates/'.get_locale().'/imprint.txt'));
226
  SPDSGVOSettings::set('imprint_hash', wp_hash($imprint));
227
  self::set('imprint', $imprint);
228
  }
233
  'cookies' => array(
234
  'slug' => 'cookies',
235
  'name' => 'Cookies',
236
+ 'reason' => __('We use cookies to analyze visitor behavior.','shapepress-dsgvo'),
237
  'link' => '',
238
  'default' => '0',
239
  ),
240
  'google-analytics' => array(
241
  'slug' => 'google-analytics',
242
  'name' => 'Google Analytics',
243
+ 'reason' => __('Google Analytics is used to analyze website traffic.','shapepress-dsgvo'),
244
  'link' => 'https://www.google.com/analytics/terms/us.html',
245
  'default' => '0',
246
  ),
247
  'facebook-pixel' => array(
248
  'slug' => 'facebook-pixel',
249
  'name' => 'Facebook Pixel',
250
+ 'reason' => __('Facebook Pixel is used to analyze visitor behavior.','shapepress-dsgvo'),
251
  'link' => 'https://www.facebook.com/legal/terms/update',
252
  'default' => '0',
253
  )
254
+
255
  ));
256
  }
257
 
258
 
259
+ foreach($sInstance->defaults as $setting => $value){
260
  if(!self::get($setting)){
261
  self::set($setting, $value);
262
  }
272
 
273
  if($value !== '0'){
274
  if(!$value || empty($value)){
275
+
276
+ $value = self::getDefault($property);
277
  }
278
  }
279
 
280
  return $value;
281
  }
282
+
283
  public static function getDefault($property){
284
+
285
+ $sInstance = new self;
286
+
287
+ if (array_key_exists($property, $sInstance->defaults))
288
+ {
289
+ return $sInstance->defaults[$property];
290
+ } else
291
+ {
292
+ return '';
293
+ }
294
  }
295
 
296
 
includes/class-sp-dsgvo-slim-model.php CHANGED
@@ -36,8 +36,8 @@ Abstract Class SPDSGVOModel{
36
  $this->set($attribute, $value);
37
  }
38
  }
39
-
40
- $this->set('title', isset($insert['title'])? $insert['title'] : '');
41
  $this->set('content', isset($insert['content'])? $insert['content'] : '');
42
  $this->boot();
43
  }
@@ -249,7 +249,7 @@ Abstract Class SPDSGVOModel{
249
  return $this->data[$attribute];
250
  }else{
251
  return $default;
252
- }
253
  }
254
 
255
  /**
@@ -528,6 +528,9 @@ Abstract Class SPDSGVOModel{
528
  }
529
 
530
  $args['post_type'] = self::getPostType();
 
 
 
531
  foreach((new WP_Query($args))->get_posts() as $key => $post){
532
  $return[] = self::find($post->ID);
533
  }
@@ -649,4 +652,4 @@ Abstract Class SPDSGVOModel{
649
  wp_untrash_post($ID);
650
  return self::find($ID);
651
  }
652
- }
36
  $this->set($attribute, $value);
37
  }
38
  }
39
+
40
+ $this->set('title', isset($insert['title'])? $insert['title'] : '');
41
  $this->set('content', isset($insert['content'])? $insert['content'] : '');
42
  $this->boot();
43
  }
249
  return $this->data[$attribute];
250
  }else{
251
  return $default;
252
+ }
253
  }
254
 
255
  /**
528
  }
529
 
530
  $args['post_type'] = self::getPostType();
531
+ /* i592995 */
532
+ $args['posts_per_page'] = -1;
533
+ /* i592995 */
534
  foreach((new WP_Query($args))->get_posts() as $key => $post){
535
  $return[] = self::find($post->ID);
536
  }
652
  wp_untrash_post($ID);
653
  return self::find($ID);
654
  }
655
+ }
includes/class-sp-dsgvo.php CHANGED
@@ -69,7 +69,7 @@ class SPDSGVO{
69
  if(!isset(static::$instance)){
70
  static::$instance = new static;
71
  }
72
-
73
  return static::$instance;
74
  }
75
 
@@ -84,7 +84,7 @@ class SPDSGVO{
84
  if(!class_exists('TCPDF')){
85
  require_once SPDSGVO::pluginDir('includes/lib/tcpdf/tcpdf.php');
86
  require_once SPDSGVO::pluginDir('includes/class-sp-dsgvo-pdf.php');
87
- }
88
 
89
  $load = array(
90
  //======================================================================
@@ -117,7 +117,7 @@ class SPDSGVO{
117
  //======================================================================
118
  SPDSGVO::pluginDir('includes/cron/do-subject-access-request.php'),
119
  SPDSGVO::pluginDir('includes/cron/do-delete-data-request.php'),
120
-
121
 
122
  //======================================================================
123
  // Actions
@@ -125,7 +125,10 @@ class SPDSGVO{
125
  SPDSGVO::pluginDir('public/actions/unsubscribe.php'),
126
  SPDSGVO::pluginDir('public/actions/explicit-permission.php'),
127
  SPDSGVO::pluginDir('public/actions/user-permissions.php'),
128
-
 
 
 
129
 
130
  //======================================================================
131
  // Shortcodes
@@ -134,25 +137,31 @@ class SPDSGVO{
134
  SPDSGVO::pluginDir('public/shortcodes/subject-access-request/download-subject-access-request.php'),
135
  SPDSGVO::pluginDir('public/shortcodes/subject-access-request/subject-access-request-action.php'),
136
  SPDSGVO::pluginDir('public/shortcodes/subject-access-request/subject-access-request.php'),
137
-
138
  // Super Unsubscribe
139
  SPDSGVO::pluginDir('public/shortcodes/super-unsubscribe/unsubscribe-form.php'),
140
  SPDSGVO::pluginDir('public/shortcodes/super-unsubscribe/unsubscribe-form-action.php'),
141
  SPDSGVO::pluginDir('public/shortcodes/super-unsubscribe/unsubscribe-confirm-action.php'),
142
-
143
 
144
  SPDSGVO::pluginDir('public/shortcodes/privacy-policy.php'),
145
  SPDSGVO::pluginDir('public/shortcodes/explicit-permission.php'),
146
- SPDSGVO::pluginDir('public/shortcodes/terms-conditions.php'),
147
  SPDSGVO::pluginDir('public/shortcodes/decline-permission.php'),
148
  SPDSGVO::pluginDir('public/shortcodes/privacy-settings-form.php'),
 
 
 
149
  SPDSGVO::pluginDir('public/shortcodes/display-services.php'),
150
  SPDSGVO::pluginDir('public/shortcodes/imprint.php'),
151
 
152
  //======================================================================
153
  // Default Integrations
154
  //======================================================================
 
 
155
  SPDSGVO::pluginDir('includes/integrations/cf7/Cf7Integration.php'),
 
 
156
 
157
 
158
  //======================================================================
@@ -166,6 +175,9 @@ class SPDSGVO{
166
  // Super Unsubscribe
167
  SPDSGVO::pluginDir('admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-tab.php'),
168
  SPDSGVO::pluginDir('admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-action.php'),
 
 
 
169
 
170
  // Services
171
  SPDSGVO::pluginDir('admin/tabs/services/class-sp-dsgvo-services-tab.php'),
@@ -177,27 +189,20 @@ class SPDSGVO{
177
  SPDSGVO::pluginDir('admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-tab.php'),
178
  SPDSGVO::pluginDir('admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-action.php'),
179
 
180
- // Terms Conditions
181
- SPDSGVO::pluginDir('admin/tabs/terms-conditions/class-sp-dsgvo-terms-conditions-tab.php'),
182
- SPDSGVO::pluginDir('admin/tabs/terms-conditions/class-sp-dsgvo-terms-conditions-action.php'),
183
-
184
  // Imprint
185
  SPDSGVO::pluginDir('admin/tabs/imprint/class-sp-dsgvo-imprint-tab.php'),
186
  SPDSGVO::pluginDir('admin/tabs/imprint/class-sp-dsgvo-imprint-action.php'),
187
-
188
- // premium
189
- SPDSGVO::pluginDir('admin/tabs/premium/class-sp-dsgvo-premium-tab.php'),
190
- SPDSGVO::pluginDir('admin/tabs/premium/class-sp-dsgvo-premium-action.php'),
191
 
192
  // Common Settings
193
  SPDSGVO::pluginDir('admin/tabs/common-settings/class-sp-dsgvo-common-settings-tab.php'),
194
  SPDSGVO::pluginDir('admin/tabs/common-settings/class-sp-dsgvo-common-settings-action.php'),
195
  SPDSGVO::pluginDir('admin/tabs/common-settings/class-sp-dsgvo-common-settings-activate-action.php'),
196
-
197
  // Cookie Notice
198
  SPDSGVO::pluginDir('admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-tab.php'),
199
  SPDSGVO::pluginDir('admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-action.php'),
200
-
201
  // Integrations
202
  SPDSGVO::pluginDir('admin/tabs/integrations/class-sp-dsgvo-integrations-tab.php'),
203
  SPDSGVO::pluginDir('admin/tabs/integrations/class-sp-dsgvo-integrations-action.php'),
@@ -221,8 +226,7 @@ class SPDSGVO{
221
  }
222
 
223
  public static function version(){
224
- $classInstance = new self;
225
- return $classInstance->version;
226
  }
227
 
228
  public static function isTesting(){
@@ -240,6 +244,7 @@ class SPDSGVO{
240
  */
241
  private function defineAdminHooks(){
242
  $admin = new SPDSGVOAdmin();
 
243
  $this->loader->add_action('admin_enqueue_scripts', $admin, 'enqueue_styles');
244
  $this->loader->add_action('admin_enqueue_scripts', $admin, 'enqueue_scripts');
245
 
@@ -256,7 +261,7 @@ class SPDSGVO{
256
 
257
  // gravity forms action
258
  $this->loader->add_action('gform_after_submission', $admin, 'gf_after_submisison_cleanse', 10, 2);
259
-
260
  }
261
 
262
  /**
@@ -273,13 +278,16 @@ class SPDSGVO{
273
  $this->loader->add_action('upload_mimes', $public, 'allowJSON');
274
  $this->loader->add_action('user_register', $public, 'newUserRegistered', 10, 1);
275
  $this->loader->add_action('wp', $public, 'forcePermisson');
276
- $this->loader->add_action('init', $public, 'autoDeleteUnsubscribers');
277
  $this->loader->add_action('sp_dsgvo_collect_user_data', $public, 'collectUserData');
278
  $this->loader->add_action('wp_print_footer_scripts', $public, 'wp_print_footer_scripts');
279
- $this->loader->add_action('wp_footer', $public, 'writeFooterScripts', 1000);
280
- $this->loader->add_action('wp_head', $public, 'writeHeaderScripts');
281
  $this->loader->add_action('comment_form', $public, 'addCommentsCheckBoxForDSGVO' );
282
- //$this->loader->add_filter('option_active_plugins', $public, 'loadSpecificPlugins' );
 
 
 
283
  }
284
 
285
  /**
69
  if(!isset(static::$instance)){
70
  static::$instance = new static;
71
  }
72
+
73
  return static::$instance;
74
  }
75
 
84
  if(!class_exists('TCPDF')){
85
  require_once SPDSGVO::pluginDir('includes/lib/tcpdf/tcpdf.php');
86
  require_once SPDSGVO::pluginDir('includes/class-sp-dsgvo-pdf.php');
87
+ }
88
 
89
  $load = array(
90
  //======================================================================
117
  //======================================================================
118
  SPDSGVO::pluginDir('includes/cron/do-subject-access-request.php'),
119
  SPDSGVO::pluginDir('includes/cron/do-delete-data-request.php'),
120
+
121
 
122
  //======================================================================
123
  // Actions
125
  SPDSGVO::pluginDir('public/actions/unsubscribe.php'),
126
  SPDSGVO::pluginDir('public/actions/explicit-permission.php'),
127
  SPDSGVO::pluginDir('public/actions/user-permissions.php'),
128
+ /* i592995 */
129
+ SPDSGVO::pluginDir('public/actions/popup-accept.php'),
130
+ /* i592995 */
131
+
132
 
133
  //======================================================================
134
  // Shortcodes
137
  SPDSGVO::pluginDir('public/shortcodes/subject-access-request/download-subject-access-request.php'),
138
  SPDSGVO::pluginDir('public/shortcodes/subject-access-request/subject-access-request-action.php'),
139
  SPDSGVO::pluginDir('public/shortcodes/subject-access-request/subject-access-request.php'),
140
+
141
  // Super Unsubscribe
142
  SPDSGVO::pluginDir('public/shortcodes/super-unsubscribe/unsubscribe-form.php'),
143
  SPDSGVO::pluginDir('public/shortcodes/super-unsubscribe/unsubscribe-form-action.php'),
144
  SPDSGVO::pluginDir('public/shortcodes/super-unsubscribe/unsubscribe-confirm-action.php'),
145
+
146
 
147
  SPDSGVO::pluginDir('public/shortcodes/privacy-policy.php'),
148
  SPDSGVO::pluginDir('public/shortcodes/explicit-permission.php'),
 
149
  SPDSGVO::pluginDir('public/shortcodes/decline-permission.php'),
150
  SPDSGVO::pluginDir('public/shortcodes/privacy-settings-form.php'),
151
+ /* i592995 */
152
+ SPDSGVO::pluginDir('public/shortcodes/privacy-settings-form-alt.php'),
153
+ /* i592995 */
154
  SPDSGVO::pluginDir('public/shortcodes/display-services.php'),
155
  SPDSGVO::pluginDir('public/shortcodes/imprint.php'),
156
 
157
  //======================================================================
158
  // Default Integrations
159
  //======================================================================
160
+ SPDSGVO::pluginDir('includes/integrations/mailchimp/MailchimpIntegration.php'),
161
+ SPDSGVO::pluginDir('includes/integrations/woocommerce/WoocommerceIntegration.php'),
162
  SPDSGVO::pluginDir('includes/integrations/cf7/Cf7Integration.php'),
163
+ SPDSGVO::pluginDir('includes/integrations/bbpress/BbpressIntegration.php'),
164
+ SPDSGVO::pluginDir('includes/integrations/buddypress/BuddyPressIntegration.php'),
165
 
166
 
167
  //======================================================================
175
  // Super Unsubscribe
176
  SPDSGVO::pluginDir('admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-tab.php'),
177
  SPDSGVO::pluginDir('admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-action.php'),
178
+ /* i592995 */
179
+ SPDSGVO::pluginDir('admin/tabs/super-unsubscribe/class-sp-dsgvo-dismiss-unsubscribe-action.php'),
180
+ /* i592995 */
181
 
182
  // Services
183
  SPDSGVO::pluginDir('admin/tabs/services/class-sp-dsgvo-services-tab.php'),
189
  SPDSGVO::pluginDir('admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-tab.php'),
190
  SPDSGVO::pluginDir('admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-action.php'),
191
 
 
 
 
 
192
  // Imprint
193
  SPDSGVO::pluginDir('admin/tabs/imprint/class-sp-dsgvo-imprint-tab.php'),
194
  SPDSGVO::pluginDir('admin/tabs/imprint/class-sp-dsgvo-imprint-action.php'),
195
+
 
 
 
196
 
197
  // Common Settings
198
  SPDSGVO::pluginDir('admin/tabs/common-settings/class-sp-dsgvo-common-settings-tab.php'),
199
  SPDSGVO::pluginDir('admin/tabs/common-settings/class-sp-dsgvo-common-settings-action.php'),
200
  SPDSGVO::pluginDir('admin/tabs/common-settings/class-sp-dsgvo-common-settings-activate-action.php'),
201
+
202
  // Cookie Notice
203
  SPDSGVO::pluginDir('admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-tab.php'),
204
  SPDSGVO::pluginDir('admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-action.php'),
205
+
206
  // Integrations
207
  SPDSGVO::pluginDir('admin/tabs/integrations/class-sp-dsgvo-integrations-tab.php'),
208
  SPDSGVO::pluginDir('admin/tabs/integrations/class-sp-dsgvo-integrations-action.php'),
226
  }
227
 
228
  public static function version(){
229
+ return (new self)->version;
 
230
  }
231
 
232
  public static function isTesting(){
244
  */
245
  private function defineAdminHooks(){
246
  $admin = new SPDSGVOAdmin();
247
+ $this->loader->add_action('init', $admin, 'adminInit');
248
  $this->loader->add_action('admin_enqueue_scripts', $admin, 'enqueue_styles');
249
  $this->loader->add_action('admin_enqueue_scripts', $admin, 'enqueue_scripts');
250
 
261
 
262
  // gravity forms action
263
  $this->loader->add_action('gform_after_submission', $admin, 'gf_after_submisison_cleanse', 10, 2);
264
+
265
  }
266
 
267
  /**
278
  $this->loader->add_action('upload_mimes', $public, 'allowJSON');
279
  $this->loader->add_action('user_register', $public, 'newUserRegistered', 10, 1);
280
  $this->loader->add_action('wp', $public, 'forcePermisson');
281
+ $this->loader->add_action('init', $public, 'publicInit');
282
  $this->loader->add_action('sp_dsgvo_collect_user_data', $public, 'collectUserData');
283
  $this->loader->add_action('wp_print_footer_scripts', $public, 'wp_print_footer_scripts');
284
+ $this->loader->add_action('wp_footer', $public, 'writeFooterScripts', 1000);
285
+ $this->loader->add_action('wp_head', $public, 'writeHeaderScripts');
286
  $this->loader->add_action('comment_form', $public, 'addCommentsCheckBoxForDSGVO' );
287
+ $this->loader->add_action('wpcf7_init', $public, 'wpcf7AddDsgvoTag' );
288
+ $this->loader->add_action('woocommerce_after_order_notes', $public, 'wooAddCustomFields' );
289
+ $this->loader->add_action('woocommerce_checkout_process', $public, 'wooAddCustomCheckout');
290
+ $this->loader->add_action('woocommerce_checkout_update_order_meta', $public, 'wooUpdateOrderMeta');
291
  }
292
 
293
  /**
includes/cron/do-delete-data-request.php CHANGED
@@ -5,30 +5,30 @@ Class DoDSGVODeleteDataRequest extends SPDSGVOCron{
5
  public $interval = array(
6
  'days' => 1,
7
  );
8
-
9
  public function handle(){
10
  $delCron = SPDSGVOSettings::get('su_auto_del_time');
11
  if($delCron !== '0'){
12
-
13
  $daysAgo = strtotime('-'.$delCron.' day');
14
-
15
- error_log('DoDSGVODeleteDataRequest with days: '.$delCron . ' and intval: '.$daysAgo);
16
-
17
  foreach(SPDSGVOUnsubscriber::finder('pending') as $sar){
18
-
19
  $post = $sar->_post;// get_post($sar->ID);
20
- error_log('doing sar '. $sar->ID . ' with intval '. intval(strtotime($post->post_date)));
21
-
22
- if (intval(strtotime($post->post_date)) <= intval($daysAgo))
23
  {
24
  $sar->doSuperUnsubscribe();
25
- } else
26
  {
27
- error_log('sar '. $sar->ID . ' has not the date to process');
28
  }
29
  }
30
  }
31
  }
32
  }
33
 
34
- DoDSGVODeleteDataRequest::register();
5
  public $interval = array(
6
  'days' => 1,
7
  );
8
+
9
  public function handle(){
10
  $delCron = SPDSGVOSettings::get('su_auto_del_time');
11
  if($delCron !== '0'){
12
+
13
  $daysAgo = strtotime('-'.$delCron.' day');
14
+
15
+ error_log(__('DoDSGVODeleteDataRequest with days:', 'shapepress-dsgvo').' '.$delCron . ' ' . __('and intval:', 'shapepress-dsgvo') . ' '.$daysAgo);
16
+
17
  foreach(SPDSGVOUnsubscriber::finder('pending') as $sar){
18
+
19
  $post = $sar->_post;// get_post($sar->ID);
20
+ error_log(__('doing sar', 'shapepress-dsgvo') . ' '. $sar->ID . ' ' . __('with intval', 'shapepress-dsgvo') . ' '. intval(strtotime($post->post_date)));
21
+
22
+ if (intval(strtotime($post->post_date)) <= intval($daysAgo))
23
  {
24
  $sar->doSuperUnsubscribe();
25
+ } else
26
  {
27
+ error_log(__('sar', 'shapepress-dsgvo') . ' '. $sar->ID . ' ' . __('has not the date to process', 'shapepress-dsgvo'));
28
  }
29
  }
30
  }
31
  }
32
  }
33
 
34
+ DoDSGVODeleteDataRequest::register();
includes/cron/do-subject-access-request.php CHANGED
@@ -5,24 +5,24 @@ Class DoDSGVOSubjectAccessRequest extends SPDSGVOCron{
5
  public $interval = array(
6
  'days' => 1,
7
  );
8
-
9
  public function handle(){
10
  $sarCron = SPDSGVOSettings::get('sar_cron');
11
  if($sarCron !== '0'){
12
-
13
  $daysAgo = strtotime('-'.$sarCron.' day');
14
-
15
  //error_log('DoDSGVOSubjectAccessRequest with days: '.$sarCron . ' and intval: '.$daysAgo);
16
-
17
  foreach(SPDSGVOSubjectAccessRequest::finder('pending') as $sar){
18
-
19
  $post = $sar->_post;// get_post($sar->ID);
20
  //error_log('doing sar '. $sar->ID . ' with intval '. intval(strtotime($post->post_date)));
21
-
22
- if (intval(strtotime($post->post_date)) <= intval($daysAgo))
23
  {
24
  $sar->doSubjectAccessRequest();
25
- } else
26
  {
27
  //error_log('sar '. $sar->ID . ' has not the date to process');
28
  }
@@ -31,4 +31,4 @@ Class DoDSGVOSubjectAccessRequest extends SPDSGVOCron{
31
  }
32
  }
33
 
34
- DoDSGVOSubjectAccessRequest::register();
5
  public $interval = array(
6
  'days' => 1,
7
  );
8
+
9
  public function handle(){
10
  $sarCron = SPDSGVOSettings::get('sar_cron');
11
  if($sarCron !== '0'){
12
+
13
  $daysAgo = strtotime('-'.$sarCron.' day');
14
+
15
  //error_log('DoDSGVOSubjectAccessRequest with days: '.$sarCron . ' and intval: '.$daysAgo);
16
+
17
  foreach(SPDSGVOSubjectAccessRequest::finder('pending') as $sar){
18
+
19
  $post = $sar->_post;// get_post($sar->ID);
20
  //error_log('doing sar '. $sar->ID . ' with intval '. intval(strtotime($post->post_date)));
21
+
22
+ if (intval(strtotime($post->post_date)) <= intval($daysAgo))
23
  {
24
  $sar->doSubjectAccessRequest();
25
+ } else
26
  {
27
  //error_log('sar '. $sar->ID . ' has not the date to process');
28
  }
31
  }
32
  }
33
 
34
+ DoDSGVOSubjectAccessRequest::register();
includes/helpers.php CHANGED
@@ -1,164 +1,228 @@
1
  <?php
 
2
 
3
- if(!function_exists('hasUserAgreedToTerms')){
 
 
 
 
 
 
4
 
5
- function hasUserAgreedToTerms($user = NULL){
6
- if(is_null($user)){
7
- $user = wp_get_current_user();
8
- }elseif(!$user instanceof WP_User){
9
- $user = get_user_by('ID', $user);
10
- }
11
 
12
- if(!$user instanceof WP_User){
13
- if(!isset($_COOKIE['sp_dsgvo_explicit_permission_given'])){
14
- return FALSE;
15
- }
16
-
17
- return wp_hash(SPDSGVOSettings::get('terms_conditions')) === @$_COOKIE['sp_dsgvo_explicit_permission_given'];
18
- }
19
-
20
- return get_user_meta($user->ID, 'sp_dsgvo_explicit_permission_granted', TRUE) === '1';
21
- }
22
 
 
 
23
  }
24
 
 
25
 
26
- if(!function_exists('hasUserDeclinedTerms')){
27
-
28
- function hasUserDeclinedTerms(){
29
- $user = wp_get_current_user();
30
- if($user instanceof WP_User && $user->ID){
31
- return (get_user_meta($user->ID, 'sp_dsgvo_explicit_permission_declined', TRUE) === '1');
32
- }else{
33
- return (@$_COOKIE['sp_dsgvo_explicit_permission_declined'] === '1');
34
- }
35
- }
36
-
37
  }
38
 
 
39
 
40
- if(!function_exists('sp_dsgvo_CSRF_TOKEN')){
 
 
41
 
42
- function sp_dsgvo_CSRF_TOKEN(){
43
- $user = wp_get_current_user();
 
 
 
44
 
45
- if($user instanceof WP_User && $user->ID){
46
- return get_user_meta($user->ID, 'sp_dsgvo_CSRF_token', TRUE);
47
- }
48
- }
49
 
 
 
 
 
 
 
 
 
50
  }
51
 
52
- if(!function_exists('pageContainsString')){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
- function pageContainsString($pageID, $string){
55
- if(get_post_status($pageID) === FALSE){
56
- return FALSE;
57
- }
58
 
59
- return (strpos(get_post($pageID)->post_content, $string) !== FALSE);
60
- }
61
 
62
- }
 
 
 
 
 
63
 
 
 
 
64
 
65
- if(!function_exists('hasUserGivenPermissionFor')){
 
 
66
 
67
- function hasUserGivenPermissionFor($slug){
68
- $user = wp_get_current_user();
69
 
70
- if($slug === 'cookies'){
71
- $cnAccepted = sp_dsgvo_cn_cookies_accepted();
72
-
73
- if($user instanceof WP_User && $user->ID){
74
- $userPermissions = get_user_meta($user->ID, 'sp_dsgvo_user_permissions', TRUE);
75
- }else{
76
- $userPermissions = @$_COOKIE['sp_dsgvo_user_permissions'];
77
- $userPermissions = unserialize(stripslashes($userPermissions));
78
- }
79
 
80
- if(isset($userPermissions['cookies'])){
81
- return $userPermissions['cookies'] == '1'|| $cnAccepted;
82
- }
83
- //error_log('hasUserGivenPermissionFor: '.$slug .': '. 'NULL');
84
- return $cnAccepted; // at last its false -> opt-in
85
- }
86
 
87
-
88
- if($user instanceof WP_User && $user->ID){
89
-
90
- $userPermissions = get_user_meta($user->ID, 'sp_dsgvo_user_permissions', TRUE);
91
 
92
- }else{
93
 
94
- $userPermissions = @$_COOKIE['sp_dsgvo_user_permissions'];
 
95
 
96
- $userPermissions = unserialize(stripslashes($userPermissions));
97
- }
 
 
 
 
 
98
 
99
- if(isset($userPermissions[$slug])){
100
- //error_log('hasUserGivenPermissionFor: '.$slug .': '. $userPermissions[$slug] == '1');
101
- return $userPermissions[$slug] == '1';
102
- }else{
103
- $defaults = SPDSGVOSettings::get('services');
104
 
105
- if(isset($defaults[$slug])){
106
- error_log('hasUserGivenPermissionFor: '.$slug .': '. @$defaults[$slug]['default'] === '1');
107
- return @$defaults[$slug]['default'] === '1';
108
- }
 
109
 
110
- //error_log('hasUserGivenPermissionFor: '.$slug .': '. 'FALSE');
111
- return FALSE;
112
- }
113
- }
114
 
 
 
 
 
 
 
 
115
  }
116
 
117
- if(!function_exists('isPremium')){
118
- function isPremium(){
119
- return FALSE;
 
 
 
 
 
 
 
 
120
  }
121
  }
122
 
123
- if(!function_exists('isFree')){
124
- function isFree(){
125
- return TRUE;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
  }
127
  }
128
 
129
- if(!function_exists('isLicenceValid')){
130
- function isLicenceValid(){
131
- return SPDSGVOSettings::get('dsgvo_licence') !== ''
132
- //&& SPDSGVOSettings::get('license_key_error') === '0'
133
- && SPDSGVOSettings::get('license_activated') === '1'
134
- && isFree();
135
  }
136
  }
137
 
138
- if(!function_exists('enablePremiumFeatures')){
139
- function enablePremiumFeatures(){
140
- //error_log('enablePremiumFeatures: '. isPremium() && isLicenceValid() ? 'true' : 'false');
141
- return isPremium() && isLicenceValid();
 
142
  }
143
  }
144
 
145
- if(!function_exists('enableLightFeatures')){
146
- function enableLightFeatures(){
147
- return isFree() && isLicenceValid();
 
 
148
  }
149
  }
150
 
 
151
 
152
- if(!function_exists('createLog')){
153
- function createLog($content){
154
- return SPDSGVOLog::insert($content);
155
- }
156
  }
157
 
 
158
 
159
- if(!function_exists('convDeChars')){
160
- function convDeChars($content){
161
-
162
  $content = str_replace('ä', '�', $content);
163
  $content = str_replace('Ä', '�', $content);
164
  $content = str_replace('ü', '�', $content);
@@ -176,10 +240,154 @@ if(!function_exists('convDeChars')){
176
  $content = str_replace('�', '&Ouml;', $content);
177
  $content = str_replace('�', '&szlig;', $content);
178
  $content = str_replace('�', '$szlig;', $content);
179
-
180
  return $content;
181
  }
182
  }
183
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
 
185
-
1
  <?php
2
+ if (! function_exists('hasUserAgreedToTerms')) {
3
 
4
+ function hasUserAgreedToTerms($user = NULL)
5
+ {
6
+ if (is_null($user)) {
7
+ $user = wp_get_current_user();
8
+ } elseif (! $user instanceof WP_User) {
9
+ $user = get_user_by('ID', $user);
10
+ }
11
 
12
+ if (! $user instanceof WP_User) {
13
+ if (! isset($_COOKIE['sp_dsgvo_explicit_permission_given'])) {
14
+ return FALSE;
15
+ }
 
 
16
 
17
+ return wp_hash(SPDSGVOSettings::get('terms_conditions')) === @$_COOKIE['sp_dsgvo_explicit_permission_given'];
18
+ }
 
 
 
 
 
 
 
 
19
 
20
+ return get_user_meta($user->ID, 'sp_dsgvo_explicit_permission_granted', TRUE) === '1';
21
+ }
22
  }
23
 
24
+ if (! function_exists('hasUserDeclinedTerms')) {
25
 
26
+ function hasUserDeclinedTerms()
27
+ {
28
+ $user = wp_get_current_user();
29
+ if ($user instanceof WP_User && $user->ID) {
30
+ return (get_user_meta($user->ID, 'sp_dsgvo_explicit_permission_declined', TRUE) === '1');
31
+ } else {
32
+ return (@$_COOKIE['sp_dsgvo_explicit_permission_declined'] === '1');
33
+ }
34
+ }
 
 
35
  }
36
 
37
+ if (! function_exists('sp_dsgvo_CSRF_TOKEN')) {
38
 
39
+ function sp_dsgvo_CSRF_TOKEN()
40
+ {
41
+ $user = wp_get_current_user();
42
 
43
+ if ($user instanceof WP_User && $user->ID) {
44
+ return get_user_meta($user->ID, 'sp_dsgvo_CSRF_token', TRUE);
45
+ }
46
+ }
47
+ }
48
 
49
+ if (! function_exists('pageContainsString')) {
 
 
 
50
 
51
+ function pageContainsString($pageID, $string)
52
+ {
53
+ if (get_post_status($pageID) === FALSE) {
54
+ return FALSE;
55
+ }
56
+
57
+ return (strpos(get_post($pageID)->post_content, $string) !== FALSE);
58
+ }
59
  }
60
 
61
+ /* i592995 */
62
+ if(!function_exists('hasUserAcceptedPopup')) :
63
+ function hasUserAcceptedPopup()
64
+ {
65
+ $user = wp_get_current_user();
66
+ $accept = false;
67
+ if($user->ID != 0) {
68
+ $meta = get_user_meta($user->ID, 'sp_dsgvo_popup', TRUE);
69
+ if($meta != '') {
70
+ $accept = true;
71
+ }
72
+ }
73
+
74
+ if(!$accept) {
75
+ if(isset($_COOKIE['sp_dsgvo_popup'])) {
76
+ $cookie = $_COOKIE['sp_dsgvo_popup'];
77
+ if($cookie != null) {
78
+ $accept = true;
79
+ }
80
+ }
81
+ }
82
+ return $accept;
83
+ }
84
+ endif;
85
+ /* i592995 */
86
+
87
+ if (! function_exists('hasUserGivenPermissionFor')) {
88
 
89
+ function hasUserGivenPermissionFor($slug)
90
+ {
91
+ //error_log('hasUserGivenPermissionFor: '.$slug);
92
+ $user = wp_get_current_user();
93
 
94
+ if ($slug === 'cookies') {
95
+ $cnAccepted = sp_dsgvo_cn_cookies_accepted();
96
 
97
+ if ($user instanceof WP_User && $user->ID) {
98
+ $userPermissions = get_user_meta($user->ID, 'sp_dsgvo_user_permissions', TRUE);
99
+ } else {
100
+ $userPermissions = @$_COOKIE['sp_dsgvo_user_permissions'];
101
+ $userPermissions = unserialize(stripslashes($userPermissions));
102
+ }
103
 
104
+ if (isset($userPermissions['cookies'])) {
105
+ return $userPermissions['cookies'] == '1' || $cnAccepted;
106
+ }
107
 
108
+ // error_log('hasUserGivenPermissionFor: '.$slug .': '. 'NULL');
109
+ return $cnAccepted; // at last its false -> opt-in
110
+ }
111
 
112
+ if ($user instanceof WP_User && $user->ID) {
 
113
 
114
+ $userPermissions = get_user_meta($user->ID, 'sp_dsgvo_user_permissions', TRUE);
115
+ } else {
 
 
 
 
 
 
 
116
 
117
+ $userPermissions = @$_COOKIE['sp_dsgvo_user_permissions'];
 
 
 
 
 
118
 
119
+ $userPermissions = unserialize(stripslashes($userPermissions));
 
 
 
120
 
121
+ }
122
 
123
+ // error_log('$userPermissions');
124
+ // error_log(implode(',',$userPermissions));
125
 
126
+ if (isset($userPermissions[$slug])) {
127
+ // error_log('hasUserGivenPermissionFor: ' . $slug);
128
+ // error_log($userPermissions[$slug]);
129
+ // error_log($userPermissions[$slug] == '1');
130
+ return $userPermissions[$slug] == '1';
131
+ } else {
132
+ $defaults = SPDSGVOSettings::get('services');
133
 
134
+ if (isset($defaults[$slug])) {
135
+ error_log('hasUserGivenPermissionFor: ' . $slug . ': ' . @$defaults[$slug]['default'] === '1');
136
+ return @$defaults[$slug]['default'] === '1';
137
+ }
 
138
 
139
+ error_log('hasUserGivenPermissionFor: ' . $slug . ': ' . 'FALSE');
140
+ return FALSE;
141
+ }
142
+ }
143
+ }
144
 
145
+ if (! function_exists('isBlogEdition')) {
 
 
 
146
 
147
+ function isBlogEdition()
148
+ {
149
+ $license = SPDSGVOSettings::get('dsgvo_licence');
150
+ if ($license === '' || strlen($license) < 2) return false;
151
+
152
+ return substr( $license, 0, 2 ) === "PB";
153
+ }
154
  }
155
 
156
+ if (! function_exists('isPremiumEdition')) {
157
+
158
+ function isPremiumEdition()
159
+ {
160
+ $license = SPDSGVOSettings::get('dsgvo_licence');
161
+ if ($license === '' || strlen($license) < 2) return false;
162
+
163
+ return substr( $license, 0, 2 ) === "PR" //
164
+ || substr( $license, 0, 2 ) === "PP" // plus
165
+ || substr( $license, 0, 2 ) === "PD" // dev
166
+ || substr( $license, 0, 4 ) === "DEMO";
167
  }
168
  }
169
 
170
+ if (! function_exists('isLicenceValid')) {
171
+
172
+ function isLicenceValid()
173
+ {
174
+ if (isBlogEdition())
175
+ {
176
+ return SPDSGVOSettings::get('dsgvo_licence') !== '' &&
177
+ // && SPDSGVOSettings::get('license_key_error') === '0'
178
+ SPDSGVOSettings::get('license_activated') === '1';
179
+ } else
180
+ {
181
+ return SPDSGVOSettings::get('dsgvo_licence') !== '' &&
182
+ // && SPDSGVOSettings::get('license_key_error') === '0'
183
+ SPDSGVOSettings::get('license_activated') === '1'
184
+ && (strtotime('today') <= strtotime(SPDSGVOSettings::get('licence_valid_to')));
185
+ }
186
+
187
  }
188
  }
189
 
190
+ if (! function_exists('isValidBlogEdition')) {
191
+
192
+ function isValidBlogEdition()
193
+ {
194
+ return isLicenceValid() && isBlogEdition();
 
195
  }
196
  }
197
 
198
+ if (! function_exists('isValidPremiumEdition')) {
199
+
200
+ function isValidPremiumEdition()
201
+ {
202
+ return isLicenceValid() && isPremiumEdition();
203
  }
204
  }
205
 
206
+ if (! function_exists('createLog')) {
207
+
208
+ function createLog($content)
209
+ {
210
+ return SPDSGVOLog::insert($content);
211
  }
212
  }
213
 
214
+ if (! function_exists('spdsgvoUseWpml')) {
215
 
216
+ function spdsgvoUseWpml()
217
+ {
218
+ return SPDSGVOSettings::get('use_wpml_strings') === '1';
219
+ }
220
  }
221
 
222
+ if (! function_exists('convDeChars')) {
223
 
224
+ function convDeChars($content)
225
+ {
 
226
  $content = str_replace('ä', '�', $content);
227
  $content = str_replace('Ä', '�', $content);
228
  $content = str_replace('ü', '�', $content);
240
  $content = str_replace('�', '&Ouml;', $content);
241
  $content = str_replace('�', '&szlig;', $content);
242
  $content = str_replace('�', '$szlig;', $content);
243
+
244
  return $content;
245
  }
246
  }
247
 
248
+ /* i592995 */
249
+ if(!function_exists('popup_styling')) :
250
+ function popup_styling() {
251
+ $background = SPDSGVOSettings::get('popup_background');
252
+ if($background == '') {
253
+ $background = '#ffffff';
254
+ }
255
+ $separators = SPDSGVOSettings::get('separators_color');
256
+ if($separators == '') {
257
+ $separators = '#f1f1f1';
258
+ }
259
+ $text_color = SPDSGVOSettings::get('text_color');
260
+ if($text_color == '') {
261
+ $text_color = '#f1f1f1';
262
+ }
263
+ $links_color = SPDSGVOSettings::get('links_color');
264
+ if($links_color == '') {
265
+ $links_color = '#4285f4';
266
+ }
267
+ $links_color_hover = SPDSGVOSettings::get('links_color_hover');
268
+ if($links_color_hover == '') {
269
+ $links_color_hover = '#4285f4';
270
+ }
271
+ $accept_button_text_color = SPDSGVOSettings::get('accept_button_text_color');
272
+ if($accept_button_text_color == '') {
273
+ $accept_button_text_color = '#ffffff';
274
+ }
275
+ $accept_button_bg_color = SPDSGVOSettings::get('accept_button_bg_color');
276
+ if($accept_button_bg_color == '') {
277
+ $accept_button_bg_color = '#4285f4';
278
+ }
279
+ ?>
280
+ <style>
281
+ .dsgvo-privacy-popup {
282
+ background-color: <?php echo $background; ?>;
283
+ }
284
+ .dsgvo-privacy-popup .popup-bottom {
285
+ border-top: 1px solid <?php echo $separators; ?>;
286
+ background-color: <?php echo $background; ?>;
287
+ }
288
+ .dsgvo-privacy-popup .popup-top {
289
+ border-bottom: 1px solid <?php echo $separators; ?>;
290
+ }
291
+ .lang-active svg line,
292
+ .dsgvo-popup-close svg line {
293
+ stroke: <?php echo $text_color; ?>;
294
+ }
295
+ .dsgvo-privacy-popup span,
296
+ .accordion-top span,
297
+ .dsgvo-privacy-popup p,
298
+ .dsgvo-privacy-popup div,
299
+ .dsgvo-privacy-popup strong,
300
+ .dsgvo-privacy-popup h1,
301
+ .dsgvo-privacy-popup h2,
302
+ .dsgvo-privacy-popup h3,
303
+ .dsgvo-privacy-popup h4,
304
+ .dsgvo-privacy-popup h5,
305
+ .dsgvo-privacy-popup h6 {
306
+ color: <?php echo $text_color; ?>;
307
+ }
308
+ .dsgvo-privacy-popup a,
309
+ .dsgvo-privacy-popup a span {
310
+ color: <?php echo $links_color; ?>;
311
+ }
312
+ .dsgvo-privacy-popup a:hover,
313
+ .dsgvo-privacy-popup a:hover span {
314
+ color: <?php echo $links_color_hover; ?>;
315
+ }
316
+ .accept-button {
317
+ color: <?php echo $accept_button_text_color; ?> !important;
318
+ background-color: <?php echo $accept_button_bg_color; ?>;
319
+ }
320
+ .accept-button:hover {
321
+ color: <?php echo $accept_button_text_color; ?> !important;
322
+ }
323
+ .accept-button .accept-loader circle {
324
+ stroke: <?php echo $accept_button_text_color; ?>;
325
+ }
326
+ </style>
327
+ <?php
328
+ }
329
+ endif;
330
+ add_action('wp_head', 'popup_styling');
331
+ /* i592995 */
332
+
333
+ /* i592995 */
334
+ if(!function_exists('googleAnalyticsScript')) :
335
+ function googleAnalyticsScript($return = false) {
336
+ ob_start();
337
+ ?>
338
+
339
+ <!-- Google Analytics -->
340
+ <script>
341
+ window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
342
+ ga('create', '<?= SPDSGVOSettings::get('ga_tag_number') ?>', 'auto');
343
+ ga('set', 'anonymizeIp', true);
344
+ ga('send', 'pageview');
345
+ </script>
346
+ <script async src='https://www.google-analytics.com/analytics.js'></script>
347
+ <!-- End Google Analytics -->
348
+
349
+ <?php
350
+ $code = ob_get_clean();
351
+ if($return) {
352
+ return $code;
353
+ } else {
354
+ echo $code;
355
+ }
356
+ }
357
+ endif;
358
+
359
+ if(!function_exists('facebookPixelScript')) :
360
+ function facebookPixelScript($return = false) {
361
+ ob_start();
362
+ ?>
363
+
364
+ <!-- Facebook Pixel Code -->
365
+ <script>
366
+ !function(f,b,e,v,n,t,s)
367
+ {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
368
+ n.callMethod.apply(n,arguments):n.queue.push(arguments)};
369
+ if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
370
+ n.queue=[];t=b.createElement(e);t.async=!0;
371
+ t.src=v;s=b.getElementsByTagName(e)[0];
372
+ s.parentNode.insertBefore(t,s)}(window, document,'script',
373
+ 'https://connect.facebook.net/en_US/fbevents.js');
374
+ fbq('init', '<?= SPDSGVOSettings::get('fb_pixel_number') ?>');
375
+ fbq('track', 'PageView');
376
+ </script>
377
+ <noscript>
378
+ <img height="1" width="1" style="display: none"
379
+ src="https://www.facebook.com/tr?id=[pixel_number]&ev=PageView&noscript=1" />
380
+ </noscript>
381
+ <!-- End Facebook Pixel Code -->
382
+
383
+ <?php
384
+ $code = ob_get_clean();
385
+ if($return) {
386
+ return $code;
387
+ } else {
388
+ echo $code;
389
+ }
390
+ }
391
+ endif;
392
 
393
+ /* i592995 */
includes/html/index-footer.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+ <li class="clear-fix"></li>
4
+ <li class="pagination">
5
+ <p>
6
+ <?php _e('Downloaded from', 'shapepress-dsgvo'); ?> <a href="[home_url]">[home_url]</a> <?php _e('on', 'shapepress-dsgvo'); ?> [date_now]
7
+ </p>
8
+ </li>
9
+ </ul>
10
+ </div>
11
+ </main>
12
+ </body>
13
+ <script>
14
+ (function($){
15
+
16
+ $('.form-control').keyup(function(){
17
+ var search = $(this).val().toLowerCase();
18
+
19
+ if(search.length > 2){
20
+ $('.row').each(function(i, ele){
21
+ var title = $(ele).find('.grid-title').html().toLowerCase();
22
+ var data = $(ele).find('.grid-date').html().toLowerCase();
23
+
24
+ if(!title.includes(search) && !data.includes(search)){
25
+ $(ele).hide();
26
+ }else{
27
+ $(ele).show();
28
+ }
29
+ });
30
+ }else{
31
+ $('.row').show();
32
+ }
33
+ });
34
+
35
+ })(jQuery);
36
+ </script>
37
+ </html>
includes/html/index-header.php ADDED
@@ -0,0 +1,429 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title><?php _e('All data relating to', 'shapepress-dsgvo'); ?> [username]</title>
6
+ <link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/Reklino/munkey-icons/master/munkey.css">
7
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
8
+ <script>
9
+ /*! jQuery v3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector | (c) JS Foundation and other contributors | jquery.org/license */
10
+ !function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a);
11
+ }),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),"auto"===f&&(f=a["offset"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}}),r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var _a,ab=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?_a:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),_a={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ab[b]||r.find.attr;ab[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ab[g],ab[g]=e,e=null!=c(a,b,d)?g:null,ab[g]=f),e}});var bb=/^(?:input|select|textarea|button)$/i,cb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function db(a){var b=a.match(L)||[];return b.join(" ")}function eb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,eb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=eb(c),d=1===c.nodeType&&" "+db(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=db(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,eb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=eb(c),d=1===c.nodeType&&" "+db(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=db(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,eb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=eb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+db(eb(c))+" ").indexOf(b)>-1)return!0;return!1}});var fb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(fb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:db(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var gb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!gb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,gb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var hb=/\[\]$/,ib=/\r?\n/g,jb=/^(?:submit|button|image|reset|file)$/i,kb=/^(?:input|select|textarea|keygen)/i;function lb(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||hb.test(a)?d(a,e):lb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d);
12
+ });else if(c||"object"!==r.type(b))d(a,b);else for(e in b)lb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)lb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&kb.test(this.nodeName)&&!jb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ib,"\r\n")}}):{name:b.name,value:c.replace(ib,"\r\n")}}).get()}}),r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var mb=a.jQuery,nb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=nb),b&&a.jQuery===r&&(a.jQuery=mb),r},b||(a.jQuery=a.$=r),r});
13
+ </script>
14
+ <style>
15
+ @import url(https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,600,700);
16
+ .no-select, .grid-toggle, ul.grid.grid-list .grid-head ul li {
17
+ -webkit-user-select: none;
18
+ -moz-user-select: none;
19
+ -ms-user-select: none;
20
+ -o-user-select: none;
21
+ user-select: none;
22
+ }
23
+
24
+ ::-webkit-input-placeholder {
25
+ color: #5d7592;
26
+ }
27
+
28
+ :-moz-placeholder {
29
+ color: #5d7592;
30
+ }
31
+
32
+ ::-moz-placeholder {
33
+ color: #5d7592;
34
+ }
35
+
36
+ :-ms-input-placeholder {
37
+ color: #5d7592;
38
+ }
39
+
40
+ .m {
41
+ font-size: 28px;
42
+ }
43
+
44
+ body {
45
+ text-align: center;
46
+ background: #f9fcfe;
47
+ color: #38405e;
48
+ font-size: 16px;
49
+ font-family: 'Open Sans', sans-serif;
50
+ font-weight: 400;
51
+ -webkit-font-smoothing: antialiased;
52
+ -moz-osx-font-smoothing: grayscale;
53
+ text-rendering: optimizeLegibility;
54
+ }
55
+
56
+ header {
57
+ width: 100%;
58
+ background: #38405e;
59
+ padding: 3em 0;
60
+ color: white;
61
+ }
62
+ header h1 {
63
+ font-weight: 300;
64
+ font-size: 36px;
65
+ margin: 0.75em 0;
66
+ }
67
+ header h1 span {
68
+ font-size: 90%;
69
+ color: #1bbbef;
70
+ }
71
+
72
+ main {
73
+ padding: 1.5em 0 0;
74
+ }
75
+
76
+ footer, main {
77
+ max-width: 800px;
78
+ margin: 0 auto;
79
+ }
80
+ footer:after, main:after {
81
+ content: '';
82
+ display: block;
83
+ clear: both;
84
+ }
85
+
86
+ footer {
87
+ padding: 2em 0;
88
+ }
89
+ footer p {
90
+ color: #5d7592;
91
+ font-size: 14px;
92
+ }
93
+
94
+ .ctrls {
95
+ margin-bottom: 1em;
96
+ }
97
+ .ctrls:after {
98
+ content: '';
99
+ clear: both;
100
+ display: block;
101
+ }
102
+
103
+ .filter {
104
+ float: left;
105
+ width: 75%;
106
+ padding-left: 2.5em;
107
+ }
108
+ .filter .m {
109
+ color: #5d7592;
110
+ position: absolute;
111
+ margin-left: -1.25em;
112
+ }
113
+ .filter input {
114
+ width: 100%;
115
+ vertical-align: top;
116
+ height: 2em;
117
+ border: none;
118
+ background: #f9fcfe;
119
+ font-size: 16px;
120
+ font-weight: 300;
121
+ color: #5d7592;
122
+ outline: none;
123
+ padding: 0 0.5em;
124
+ }
125
+
126
+ .grid-toggle {
127
+ cursor: pointer;
128
+ float: right;
129
+ }
130
+ .grid-toggle a span {
131
+ color: #5d7592;
132
+ }
133
+ .grid-toggle a span:first-child {
134
+ color: #38405e;
135
+ margin-right: 12px;
136
+ }
137
+ .grid-toggle a.active span:first-child {
138
+ color: #5d7592;
139
+ }
140
+ .grid-toggle a.active span:last-child {
141
+ color: #38405e;
142
+ }
143
+
144
+ .btn {
145
+ text-decoration: none;
146
+ text-transform: uppercase;
147
+ font-weight: 600;
148
+ color: #5d7592;
149
+ }
150
+
151
+ ul.grid .grid-body ul li span {
152
+ display: inline-block;
153
+ line-height: normal;
154
+ vertical-align: middle;
155
+ }
156
+ ul.grid .grid-body ul li span.grid-icon {
157
+ color: #476283;
158
+ }
159
+ ul.grid .grid-body ul li span.grid-title a {
160
+ font-size: 16px;
161
+ font-weight: 500;
162
+ color: #38405e;
163
+ text-decoration: none;
164
+ }
165
+ ul.grid .grid-body ul li span.grid-title a:hover {
166
+ text-decoration: underline;
167
+ }
168
+ ul.grid .grid-body ul li span.grid-usericon {
169
+ margin-right: 12px;
170
+ font-size: 0;
171
+ width: 36px;
172
+ height: 36px;
173
+ line-height: 36px;
174
+ text-align: center;
175
+ background: #1bbbef;
176
+ -moz-border-radius: 100px;
177
+ -webkit-border-radius: 100px;
178
+ border-radius: 100px;
179
+ }
180
+ ul.grid .grid-body ul li span.grid-usericon:first-letter {
181
+ color: white;
182
+ font-size: 16px;
183
+ }
184
+ ul.grid .grid-body ul li span.grid-date, ul.grid .grid-body ul li span.grid-user {
185
+ color: #5d7592;
186
+ font-size: 14px;
187
+ }
188
+ ul.grid .grid-body ul li span a .m {
189
+ color: #5d7592;
190
+ }
191
+
192
+ ul.grid.grid-thumb:after {
193
+ content: '';
194
+ display: block;
195
+ clear: both;
196
+ }
197
+ ul.grid.grid-thumb .grid-head {
198
+ display: none;
199
+ }
200
+ ul.grid.grid-thumb .grid-body {
201
+ width: 50%;
202
+ float: left;
203
+ -moz-box-sizing: border-box;
204
+ -webkit-box-sizing: border-box;
205
+ box-sizing: border-box;
206
+ margin-bottom: 2em;
207
+ }
208
+ ul.grid.grid-thumb .grid-body:nth-child(even) {
209
+ padding-right: 1em;
210
+ }
211
+ ul.grid.grid-thumb .grid-body:nth-child(odd) {
212
+ padding-left: 1em;
213
+ }
214
+ ul.grid.grid-thumb .grid-body ul {
215
+ -moz-box-sizing: border-box;
216
+ -webkit-box-sizing: border-box;
217
+ box-sizing: border-box;
218
+ background: white;
219
+ border: 1px solid #dde8f0;
220
+ padding: 1em 1.5em .75em;
221
+ -moz-border-radius: 5px;
222
+ -webkit-border-radius: 5px;
223
+ border-radius: 5px;
224
+ float: left;
225
+ width: 100%;
226
+ }
227
+ ul.grid.grid-thumb .grid-body ul:after {
228
+ content: '';
229
+ display: block;
230
+ clear: both;
231
+ }
232
+ ul.grid.grid-thumb .grid-body ul li {
233
+ position: relative;
234
+ }
235
+ ul.grid.grid-thumb .grid-body ul li span.grid-icon {
236
+ display: block;
237
+ font-size: 56px;
238
+ margin: 0 0 12px;
239
+ }
240
+ ul.grid.grid-thumb .grid-body ul li span.grid-title {
241
+ display: block;
242
+ margin-bottom: 1em;
243
+ }
244
+ ul.grid.grid-thumb .grid-body ul li span.grid-user {
245
+ margin-bottom: 2px;
246
+ }
247
+ ul.grid.grid-thumb .grid-body ul li span.grid-user .grid-usericon {
248
+ position: absolute;
249
+ left: 0;
250
+ bottom: -37px;
251
+ }
252
+ ul.grid.grid-thumb .grid-body ul li span.grid-date {
253
+ display: block;
254
+ }
255
+ ul.grid.grid-thumb .grid-body ul li span.grid-options {
256
+ float: right;
257
+ }
258
+
259
+ ul.grid.grid-list {
260
+ background: white;
261
+ border: 1px solid #dde8f0;
262
+ padding: 0 2em;
263
+ -moz-border-radius: 5px;
264
+ -webkit-border-radius: 5px;
265
+ border-radius: 5px;
266
+ }
267
+ ul.grid.grid-list li.grid-body {
268
+ border-bottom: 1px solid #dde8f0;
269
+ }
270
+ ul.grid.grid-list li.grid-body:last-child, ul.grid.grid-list li.grid-body.last {
271
+ border-bottom: none;
272
+ }
273
+ ul.grid.grid-list .grid-head ul:after {
274
+ content: '';
275
+ display: block;
276
+ clear: both;
277
+ }
278
+ ul.grid.grid-list .grid-head ul li {
279
+ font-size: 16px;
280
+ border: none;
281
+ text-align: left;
282
+ padding: 2em 0 1em;
283
+ float: left;
284
+ }
285
+ ul.grid.grid-list .grid-head ul li a {
286
+ cursor: pointer;
287
+ color: #1bbbef;
288
+ font-weight: 600;
289
+ }
290
+ ul.grid.grid-list .grid-head ul li a:hover {
291
+ text-decoration: underline;
292
+ }
293
+ ul.grid.grid-list .grid-body ul:after {
294
+ content: '';
295
+ display: block;
296
+ clear: both;
297
+ }
298
+ ul.grid.grid-list .grid-body ul li {
299
+ border: none;
300
+ text-align: left;
301
+ height: 5em;
302
+ line-height: 5em;
303
+ padding: 0;
304
+ float: left;
305
+ }
306
+ ul.grid.grid-list .grid-body ul li:first-child {
307
+ text-align: left;
308
+ width: 40%;
309
+ }
310
+ ul.grid.grid-list .grid-body ul li:nth-child(2) {
311
+ width: 60%;
312
+ }
313
+ ul.grid.grid-list .grid-body ul li:last-child {
314
+ width: 25%;
315
+ }
316
+ ul.grid.grid-list .grid-body ul li span.grid-icon {
317
+ margin-right: 0.5em;
318
+ }
319
+ ul.grid.grid-list .grid-body ul li span.grid-username {
320
+ width: 100px;
321
+ }
322
+
323
+ li.clear-fix {
324
+ display: block;
325
+ clear: both;
326
+ }
327
+
328
+ li.pagination {
329
+ padding: 1em 0 2em;
330
+ }
331
+ li.pagination p {
332
+ font-size: 14px;
333
+ }
334
+ li.pagination ul.pager {
335
+ margin: 2em 0;
336
+ }
337
+ li.pagination ul.pager li {
338
+ display: inline;
339
+ }
340
+ li.pagination ul.pager li:first-child {
341
+ margin-right: 1em;
342
+ }
343
+ li.pagination ul.pager li a {
344
+ color: #1bbbef;
345
+ text-decoration: none;
346
+ padding: 0.5em 1.5em;
347
+ border: 1px solid #1bbbef;
348
+ -moz-border-radius: 100px;
349
+ -webkit-border-radius: 100px;
350
+ border-radius: 100px;
351
+ }
352
+
353
+ .animate-repeat {
354
+ list-style: none;
355
+ box-sizing: border-box;
356
+ overflow: hidden;
357
+ }
358
+
359
+ .animate-repeat.ng-move,
360
+ .animate-repeat.ng-enter,
361
+ .animate-repeat.ng-leave {
362
+ -webkit-transition: all ease-in-out 0.4s;
363
+ transition: all ease-in-out 0.4s;
364
+ }
365
+
366
+ .animate-repeat.ng-leave.ng-leave-active,
367
+ .animate-repeat.ng-move,
368
+ .animate-repeat.ng-enter {
369
+ opacity: 0;
370
+ }
371
+
372
+ .animate-repeat.ng-leave,
373
+ .animate-repeat.ng-move.ng-move-active,
374
+ .animate-repeat.ng-enter.ng-enter-active {
375
+ opacity: 1;
376
+ }
377
+
378
+ .grid-thumb .animate-repeat.ng-move,
379
+ .grid-thumb .animate-repeat.ng-enter,
380
+ .grid-thumb .animate-repeat.ng-leave {
381
+ -webkit-transition: none;
382
+ transition: none;
383
+ }
384
+
385
+ .grid-list .animate-repeat {
386
+ line-height: 5em;
387
+ }
388
+ .grid-list .animate-repeat.ng-leave.ng-leave-active,
389
+ .grid-list .animate-repeat.ng-move,
390
+ .grid-list .animate-repeat.ng-enter {
391
+ height: 0;
392
+ }
393
+ .grid-list .animate-repeat.ng-leave,
394
+ .grid-list .animate-repeat.ng-move.ng-move-active,
395
+ .grid-list .animate-repeat.ng-enter.ng-enter-active {
396
+ height: 5em;
397
+ }
398
+
399
+
400
+ .single-container{
401
+ background: white;
402
+ border: 1px solid #dde8f0;
403
+ padding: 2em 2em;
404
+ -moz-border-radius: 5px;
405
+ -webkit-border-radius: 5px;
406
+ border-radius: 5px;
407
+ }
408
+ </style>
409
+ </head>
410
+ <body>
411
+ <header>
412
+ <h1><?php _e('All data relating to', 'shapepress-dsgvo'); ?> <span>[username]</span></h1>
413
+ <p><?php _e('Objects', 'shapepress-dsgvo'); ?> [total]. <?php _e('Generated on', 'shapepress-dsgvo'); ?> [date_now]</p>
414
+ </header>
415
+ <main>
416
+ <div class="ctrls">
417
+ <div class="filter">
418
+ <span class="m m-search"></span>
419
+ <input type="text" class="form-control" placeholder="Filter">
420
+ </div>
421
+ </div>
422
+ <div class="container">
423
+ <ul class="grid grid-list">
424
+ <li class="grid-head">
425
+ <ul>
426
+ <li style="width:40%"><a><?php _e('Type', 'shapepress-dsgvo'); ?></a></li>
427
+ <li style="width:60%"><a><?php _e('Data', 'shapepress-dsgvo'); ?></a></li>
428
+ </ul>
429
+ </li>
includes/integrations/bbpress/BbpressIntegration.php ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SPDSGVOBbpressIntegration extends SPDSGVOIntegration
4
+ {
5
+
6
+ public $slug = 'bbp';
7
+
8
+ public $title = 'bbPress';
9
+
10
+ public function boot()
11
+ {
12
+ $this->isHidden = TRUE;
13
+ }
14
+
15
+ public function view()
16
+ {
17
+ include dirname(__FILE__) . '/page.php';
18
+ }
19
+
20
+ public function viewSubmit()
21
+ {
22
+ $this->redirectBack();
23
+ }
24
+
25
+ // -----------------------------------------------------
26
+ // Actions
27
+ // -----------------------------------------------------
28
+ public function onSuperUnsubscribe($email, $firstName = NULL, $lastName = NULL, $user = NULL)
29
+ {
30
+ if (isValidPremiumEdition() == false) return;
31
+
32
+ if (! class_exists('bbPress'))
33
+ return;
34
+
35
+ $bbpAction = SPDSGVOSettings::get('su_bbpress_data_action');
36
+
37
+ if ($bbpAction == 'ignore') return;
38
+
39
+ if ($user == NULL) {
40
+ $user = get_user_by('email', $email);
41
+ }
42
+
43
+ if ($user == NULL || ! is_a($user, 'WP_User')) {
44
+ //error_log('user null or not a wp_user');
45
+ return;
46
+ }
47
+
48
+
49
+ $args = array(
50
+ 'author' => $user->ID,
51
+ 'post_type' => array(
52
+ 'forum',
53
+ 'topic',
54
+ 'reply'
55
+ )
56
+ );
57
+
58
+ $userPosts = get_posts($args);
59
+
60
+ if ($userPosts) {
61
+ foreach ($userPosts as $post) {
62
+ //error_log('bbpAction: '.$bbpAction .'foreach ($userPosts: '.$post->ID);
63
+ if ($bbpAction == 'del')
64
+ {
65
+ wp_delete_post( $post->ID, FALSE );
66
+ //error_log('wp_delete_post: '.$post->ID);
67
+ } elseif ($bbpAction == 'pseudo') {
68
+
69
+ $post->post_content = __('Deleted content','shapepress-dsgvo');
70
+ $post->post_title = __('Deleted content','shapepress-dsgvo');
71
+ wp_update_post($post);
72
+ }
73
+ }
74
+ }
75
+ }
76
+
77
+ public function onSubjectAccessRequest($email, $firstName = NULL, $lastName = NULL, $user = NULL)
78
+ {
79
+ if (isValidPremiumEdition() == false) return;
80
+
81
+ if (! class_exists('bbPress')) {
82
+ // error_log('bbPress not active');
83
+ return;
84
+ }
85
+
86
+ if ($user == NULL) {
87
+ $user = get_user_by('email', $email);
88
+ }
89
+
90
+ if ($user == NULL || ! is_a($user, 'WP_User')) {
91
+ // error_log('user null or not a wp_user');
92
+ return;
93
+ }
94
+
95
+ $data = array();
96
+
97
+ $args = array(
98
+ 'author' => $user->ID,
99
+ 'post_type' => array(
100
+ 'forum',
101
+ 'topic',
102
+ 'reply'
103
+ )
104
+ );
105
+
106
+ $userPosts = get_posts($args);
107
+
108
+ if ($userPosts) {
109
+ foreach ($userPosts as $post) {
110
+ if ($post->post_type == 'forum') {
111
+ $data[] = __('Forum','shapepress-dsgvo')." '" . $post->post_title . "' " . __('on','shapepress-dsgvo')." ". date("d.m.Y H:i", strtotime($post->post_date));
112
+ } elseif ($post->post_type == 'topic') {
113
+ $data[] = __('Forum thread','shapepress-dsgvo'). " '" . $post->post_title . "' ". __('on','shapepress-dsgvo')." ". date("d.m.Y H:i", strtotime($post->post_date));
114
+ } elseif ($post->post_type == 'reply') {
115
+ $data[] = __('Forum entry','shapepress-dsgvo'). " ". __('on','shapepress-dsgvo')." ". date("d.m.Y H:i", strtotime($post->post_date));
116
+ }
117
+
118
+ $data[] = '<i>' . $post->post_content . '</i>';
119
+ }
120
+ }
121
+
122
+ return $data;
123
+ }
124
+ }
125
+
126
+ SPDSGVOBbpressIntegration::register();
includes/integrations/buddypress/BuddyPressIntegration.php ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SPDSGVOBuddypressIntegration extends SPDSGVOIntegration
4
+ {
5
+
6
+ public $slug = 'bbp';
7
+
8
+ public $title = 'buddyPress';
9
+
10
+ public function boot()
11
+ {
12
+ $this->isHidden = TRUE;
13
+ }
14
+
15
+ public function view()
16
+ {
17
+ include dirname(__FILE__) . '/page.php';
18
+ }
19
+
20
+ public function viewSubmit()
21
+ {
22
+ $this->redirectBack();
23
+ }
24
+
25
+ // -----------------------------------------------------
26
+ // Actions
27
+ // -----------------------------------------------------
28
+ public function onSuperUnsubscribe($email, $firstName = NULL, $lastName = NULL, $user = NULL)
29
+ {
30
+ global $wpdb;
31
+
32
+ if (isValidPremiumEdition() == false) return;
33
+
34
+ if (! class_exists('BuddyPress'))
35
+ return;
36
+
37
+ $buddypressAction = SPDSGVOSettings::get('su_buddypress_data_action');
38
+
39
+
40
+ if ($buddypressAction == 'ignore')
41
+ return;
42
+
43
+ if ($user == NULL) {
44
+ $user = get_user_by('email', $email);
45
+ }
46
+
47
+ if ($user == NULL || ! is_a($user, 'WP_User')) {
48
+ // error_log('user null or not a wp_user');
49
+ return;
50
+ }
51
+
52
+ if ($buddypressAction == 'del') {
53
+ bp_activity_remove_all_user_data($user->ID);
54
+ bp_core_delete_account($user->ID);
55
+ } elseif ($buddypressAction == 'pseudo') {
56
+ $wpdb->get_results($wpdb->prepare("
57
+ UPDATE {$wpdb->prefix}bp_messages_messages
58
+ SET
59
+ subject = '".__('Deleted content','shapepress-dsgvo')."',
60
+ message = '". __('Deleted content','shapepress-dsgvo')."'
61
+ WHERE sender_id = " . $user->ID));
62
+
63
+ $wpdb->get_results($wpdb->prepare("
64
+ UPDATE {$wpdb->prefix}bp_xprofile_data
65
+ SET
66
+ value = '".__('Deleted content','shapepress-dsgvo')."'
67
+ WHERE user_id = " . $user->ID));
68
+ }
69
+ }
70
+
71
+ public function onSubjectAccessRequest($email, $firstName = NULL, $lastName = NULL, $user = NULL)
72
+ {
73
+ if (isValidPremiumEdition() == false) return;
74
+
75
+ if (! class_exists('BuddyPress')) {
76
+ error_log('buddypress not active');
77
+ return;
78
+ }
79
+
80
+ if ($user == NULL) {
81
+ $user = get_user_by('email', $email);
82
+ }
83
+
84
+ if ($user == NULL || ! is_a($user, 'WP_User')) {
85
+ return;
86
+ }
87
+
88
+ $data = array();
89
+
90
+ // private messages
91
+ $aParams['user_id'] = $user->ID;
92
+ $aParams['max'] = FALSE;
93
+ $aParams['box'] = 'sentbox';
94
+ if (bp_has_message_threads($aParams)) {
95
+ while (bp_message_threads()) {
96
+ bp_message_thread();
97
+
98
+ // error_log('foreach ($allPns->messages ' . $pn->excerpt);
99
+ $data[] = __('PM between','shapepress-dsgvo') .' ' . bp_get_message_thread_to();
100
+ $data[] = __('Title:','shapepress-dsgvo'). ' ' . bp_get_message_thread_subject();
101
+ $data[] = __('Message: ','shapepress-dsgvo'). ' <i>' . bp_get_message_thread_excerpt() . '</i>';
102
+ }
103
+ }
104
+
105
+ // blogs
106
+ $blogParams['user_id'] = $user->ID;
107
+ if (bp_has_blogs($blogParams)) {
108
+ while (bp_blogs()) {
109
+ bp_the_blog();
110
+
111
+ // error_log('while blogs');
112
+ $data[] = __('Blog','shapepress-dsgvo'). ' ' . bp_blog_name();
113
+ }
114
+ }
115
+
116
+ // profile fields
117
+ // $profileParams['user_id'] = $user->ID;
118
+ // $profileParams['hide_empty_groups'] = FALSE;
119
+ // $profileParams['fetch_fields'] = TRUE;
120
+ // $profileParams['fetch_fields_data'] = TRUE;
121
+ // if ( bp_has_profile($profileParams) ) {
122
+
123
+ // $data[] = 'Erweiterte Profilfelder';
124
+ // while ( bp_profile_groups() )
125
+ // {
126
+ // bp_the_profile_group();
127
+ // if ( bp_profile_group_has_fields() ){
128
+
129
+ // bp_the_profile_group_name();
130
+ // while ( bp_profile_fields() ) {
131
+
132
+ // bp_the_profile_field();
133
+ // if ( bp_field_has_data() )
134
+ // {
135
+ // $data[] = bp_the_profile_field_name(). ':' .bp_the_profile_field_value();
136
+ // }
137
+ // }
138
+ // }
139
+ // }
140
+ // }
141
+
142
+ $data[] = __('Profildaten','shapepress-dsgvo');
143
+ $groups = bp_xprofile_get_groups(array(
144
+ 'user_id' => $user->ID,
145
+ 'hide_empty_groups' => true,
146
+ 'hide_empty_fields' => true,
147
+ 'fetch_fields' => true,
148
+ 'fetch_field_data' => true
149
+ ));
150
+ foreach ((array) $groups as $group) {
151
+ if (empty($group->fields)) {
152
+ continue;
153
+ }
154
+
155
+ foreach ((array) $group->fields as $field) {
156
+
157
+ $data[] = __('Field group','shapepress-dsgvo') .': ' . $group->name . ':' . $field->name . ':' . $field->data->value;
158
+ // $profile_data[ $field->name ] = array(
159
+ // 'field_group_id' => $group->id,
160
+ // 'field_group_name' => $group->name,
161
+ // 'field_id' => $field->id,
162
+ // 'field_type' => $field->type,
163
+ // 'field_data' => $field->data->value,
164
+ // );
165
+ }
166
+ }
167
+
168
+ return $data;
169
+ }
170
+
171
+ /**
172
+ * Returns an object with messages for the current user
173
+ *
174
+ * @return Object Messages
175
+ */
176
+ public function get_messages($user)
177
+ {
178
+ /*
179
+ * Possible parameters:
180
+ * String box: the box you the messages are in (possible values are 'inbox', 'sentbox', 'notices', default is 'inbox')
181
+ * int per_page: items to be displayed per page (default 10)
182
+ * boolean limit: maximum numbers of emtries (default no limit)
183
+ */
184
+ //error_log('buddyPress.get_messages of userid ' . $user->ID);
185
+
186
+ $messages = array();
187
+ $aParams['user_id'] = $user->ID;
188
+ $aParams['max'] = FALSE;
189
+ $aParams['box'] = 'sentbox';
190
+ if (bp_has_message_threads($aParams)) {
191
+ while (bp_message_threads()) {
192
+ bp_message_thread();
193
+ $aTemp = new stdClass();
194
+ $aTemp->id = bp_get_message_thread_id();
195
+ $aTemp->from = bp_get_message_thread_from();
196
+ $aTemp->to = bp_get_message_thread_to();
197
+ $aTemp->subject = bp_get_message_thread_subject();
198
+ $aTemp->excerpt = bp_get_message_thread_excerpt();
199
+ $aTemp->link = bp_get_message_thread_view_link();
200
+ $messages[] = $aTemp;
201
+ }
202
+ } else {
203
+ return $this->error('message');
204
+ }
205
+
206
+ return $messages;
207
+ }
208
+ }
209
+
210
+ SPDSGVOBuddypressIntegration::register();
includes/integrations/cf7/Cf7Integration.php CHANGED
@@ -1,142 +1,146 @@
1
- <?php
2
-
3
- class SPDSGVOCf7Integration extends SPDSGVOIntegration
4
- {
5
-
6
- public $slug = 'cf7';
7
-
8
- public $title = 'ContactForm7';
9
-
10
- public function boot()
11
- {
12
- $this->isHidden = TRUE;
13
- }
14
-
15
- public function view()
16
- {
17
- include dirname(__FILE__) . '/page.php';
18
- }
19
-
20
- public function viewSubmit()
21
- {
22
- $this->redirectBack();
23
- }
24
-
25
- // -----------------------------------------------------
26
- // Actions
27
- // -----------------------------------------------------
28
- public function onSuperUnsubscribe($email, $firstName = NULL, $lastName = NULL, $user = NULL)
29
- {
30
- if (! class_exists('WPCF7_ContactForm')) {
31
- // error_log('WPCF7_ContactForm not active');
32
- return;
33
- }
34
-
35
- $cf7Action = SPDSGVOSettings::get('su_cf7_data_action');
36
-
37
- if ($cf7Action == 'ignore') return;
38
-
39
- $args = array(
40
- 'title' => $email,
41
- 'post_type' => 'flamingo_contact'
42
- );
43
-
44
- $contacts = get_posts($args);
45
-
46
- // search contact
47
- $args = array(
48
- 'post_type' => 'flamingo_inbound'
49
- );
50
- $allInbounds = get_posts($args);
51
-
52
- $inbounds = array();
53
- foreach ($allInbounds as $post) {
54
-
55
- if (strpos($post->post_content, $email) !== false)
56
- {
57
- $inbounds[] = $post;
58
- }
59
- }
60
-
61
- $userPosts = array();
62
- $userPosts = array_merge($contacts, $inbounds);
63
-
64
- if ($userPosts) {
65
- foreach ($userPosts as $post) {
66
- //error_log('bbpAction: '.$bbpAction .'foreach ($userPosts: '.$post->ID);
67
- if ($cf7Action == 'del')
68
- {
69
- wp_delete_post( $post->ID, FALSE );
70
- } elseif ($cf7Action == 'pseudo') {
71
-
72
- $post->post_content = "Gel$ouml;schter Inhalt.";
73
- $post->post_title = "Gel$ouml;schter Inhalt.";
74
- $post->post_name = "Gel$ouml;schter Inhalt.";
75
- wp_update_post($post);
76
- }
77
- }
78
- }
79
-
80
- }
81
-
82
- public function onSubjectAccessRequest($email, $firstName = NULL, $lastName = NULL, $user = NULL)
83
- {
84
- if (! class_exists('WPCF7_ContactForm')) {
85
- // error_log('WPCF7_ContactForm not active');
86
- return;
87
- }
88
-
89
- // if ($user == NULL) {
90
- // $user = get_user_by('email', $email);
91
- // }
92
-
93
- // if ($user == NULL || ! is_a($user, 'WP_User')) {
94
- // // error_log('user null or not a wp_user');
95
- // return;
96
- // }
97
-
98
- $data = array();
99
-
100
- // search contacts
101
- //error_log(' search contacts with email '.$email);
102
- $args = array(
103
- 'title' => $email,
104
- 'post_type' => 'flamingo_contact'
105
- );
106
-
107
- $contacts = get_posts($args);
108
-
109
- // search contact
110
- $args = array(
111
- 'post_type' => 'flamingo_inbound'
112
- );
113
- $allInbounds = get_posts($args);
114
-
115
- $inbounds = array();
116
- foreach ($allInbounds as $post) {
117
-
118
- if (strpos($post->post_content, $email) !== false)
119
- {
120
- $inbounds[] = $post;
121
- }
122
- }
123
-
124
- $userPosts = array();
125
- $userPosts = array_merge($contacts, $inbounds);
126
-
127
- if ($userPosts) {
128
- foreach ($userPosts as $post) {
129
- if ($post->post_type == 'flamingo_contact') {
130
- $data[] = "Kontakteintrag '" . $post->post_title . "'" . ' am '. date("d.m.Y H:i", strtotime($post->post_date));
131
- } elseif ($post->post_type == 'flamingo_inbound') {
132
- $data[] = "Nachricht '" . $post->post_title . "'". ' am '. date("d.m.Y H:i", strtotime($post->post_date));
133
- $data[] = '<i>' . $post->post_content . '</i>';
134
- }
135
- }
136
- }
137
-
138
- return $data;
139
- }
140
- }
141
-
 
 
 
 
142
  SPDSGVOCf7Integration::register();
1
+ <?php
2
+
3
+ class SPDSGVOCf7Integration extends SPDSGVOIntegration
4
+ {
5
+
6
+ public $slug = 'cf7';
7
+
8
+ public $title = 'ContactForm7';
9
+
10
+ public function boot()
11
+ {
12
+ $this->isHidden = TRUE;
13
+ }
14
+
15
+ public function view()
16
+ {
17
+ include dirname(__FILE__) . '/page.php';
18
+ }
19
+
20
+ public function viewSubmit()
21
+ {
22
+ $this->redirectBack();
23
+ }
24
+
25
+ // -----------------------------------------------------
26
+ // Actions
27
+ // -----------------------------------------------------
28
+ public function onSuperUnsubscribe($email, $firstName = NULL, $lastName = NULL, $user = NULL)
29
+ {
30
+ if (isValidPremiumEdition() == false) return;
31
+
32
+ if (! class_exists('WPCF7_ContactForm')) {
33
+ // error_log('WPCF7_ContactForm not active');
34
+ return;
35
+ }
36
+
37
+ $cf7Action = SPDSGVOSettings::get('su_cf7_data_action');
38
+
39
+ if ($cf7Action == 'ignore') return;
40
+
41
+ $args = array(
42
+ 'title' => $email,
43
+ 'post_type' => 'flamingo_contact'
44
+ );
45
+
46
+ $contacts = get_posts($args);
47
+
48
+ // search contact
49
+ $args = array(
50
+ 'post_type' => 'flamingo_inbound'
51
+ );
52
+ $allInbounds = get_posts($args);
53
+
54
+ $inbounds = array();
55
+ foreach ($allInbounds as $post) {
56
+
57
+ if (strpos($post->post_content, $email) !== false)
58
+ {
59
+ $inbounds[] = $post;
60
+ }
61
+ }
62
+
63
+ $userPosts = array();
64
+ $userPosts = array_merge($contacts, $inbounds);
65
+
66
+ if ($userPosts) {
67
+ foreach ($userPosts as $post) {
68
+ //error_log('bbpAction: '.$bbpAction .'foreach ($userPosts: '.$post->ID);
69
+ if ($cf7Action == 'del')
70
+ {
71
+ wp_delete_post( $post->ID, FALSE );
72
+ } elseif ($cf7Action == 'pseudo') {
73
+
74
+ $post->post_content = __('Deleted content','shapepress-dsgvo');
75
+ $post->post_title = __('Deleted content','shapepress-dsgvo');
76
+ $post->post_name = __('Deleted content','shapepress-dsgvo');
77
+ wp_update_post($post);
78
+ }
79
+ }
80
+ }
81
+
82
+ }
83
+
84
+ public function onSubjectAccessRequest($email, $firstName = NULL, $lastName = NULL, $user = NULL)
85
+ {
86
+ if (isValidPremiumEdition() == false) return;
87
+
88
+ if (! class_exists('WPCF7_ContactForm')) {
89
+ // error_log('WPCF7_ContactForm not active');
90
+ return;
91
+ }
92
+
93
+ // if ($user == NULL) {
94
+ // $user = get_user_by('email', $email);
95
+ // }
96
+
97
+ // if ($user == NULL || ! is_a($user, 'WP_User')) {
98
+ // // error_log('user null or not a wp_user');
99
+ // return;
100
+ // }
101
+
102
+ $data = array();
103
+
104
+ // search contacts
105
+ //error_log(' search contacts with email '.$email);
106
+ $args = array(
107
+ 'title' => $email,
108
+ 'post_type' => 'flamingo_contact'
109
+ );
110
+
111
+ $contacts = get_posts($args);
112
+
113
+ // search contact
114
+ $args = array(
115
+ 'post_type' => 'flamingo_inbound'
116
+ );
117
+ $allInbounds = get_posts($args);
118
+
119
+ $inbounds = array();
120
+ foreach ($allInbounds as $post) {
121
+
122
+ if (strpos($post->post_content, $email) !== false)
123
+ {
124
+ $inbounds[] = $post;
125
+ }
126
+ }
127
+
128
+ $userPosts = array();
129
+ $userPosts = array_merge($contacts, $inbounds);
130
+
131
+ if ($userPosts) {
132
+ foreach ($userPosts as $post) {
133
+ if ($post->post_type == 'flamingo_contact') {
134
+ $data[] = __('Contact entry','shapepress-dsgvo'). " '" . $post->post_title . "'" . __('on','shapepress-dsgvo') . date("d.m.Y H:i", strtotime($post->post_date));
135
+ } elseif ($post->post_type == 'flamingo_inbound') {
136
+ $data[] = __('Message','shapepress-dsgvo') . " '" . $post->post_title . "'". __('on','shapepress-dsgvo'). date("d.m.Y H:i", strtotime($post->post_date));
137
+ $data[] = '<i>' . $post->post_content . '</i>';
138
+ }
139
+ }
140
+ }
141
+
142
+ return $data;
143
+ }
144
+ }
145
+
146
  SPDSGVOCf7Integration::register();
includes/integrations/mailchimp/MailchimpAPI.php ADDED
@@ -0,0 +1,445 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Super-simple, minimum abstraction MailChimp API v3 wrapper
5
+ * MailChimp API v3: http://developer.mailchimp.com
6
+ * This wrapper: https://github.com/drewm/mailchimp-api
7
+ *
8
+ * @author Drew McLellan <drew.mclellan@gmail.com>
9
+ * @version 2.2
10
+ */
11
+ class SPDSGVOMailChimp{
12
+
13
+ private $api_key;
14
+ private $api_endpoint = 'https://<dc>.api.mailchimp.com/3.0';
15
+
16
+ const TIMEOUT = 10;
17
+
18
+ /* SSL Verification
19
+ Read before disabling:
20
+ http://snippets.webaware.com.au/howto/stop-turning-off-curlopt_ssl_verifypeer-and-fix-your-php-config/
21
+ */
22
+ public $verify_ssl = true;
23
+
24
+ private $request_successful = false;
25
+ private $last_error = '';
26
+ private $last_response = array();
27
+ private $last_request = array();
28
+
29
+ /**
30
+ * Create a new instance
31
+ * @param string $api_key Your MailChimp API key
32
+ * @param string $api_endpoint Optional custom API endpoint
33
+ * @throws \Exception
34
+ */
35
+ public function __construct($api_key, $api_endpoint = null)
36
+ {
37
+ $this->api_key = $api_key;
38
+
39
+ if ($api_endpoint === null) {
40
+ if (strpos($this->api_key, '-') === false) {
41
+ throw new \Exception(__('Invalid MailChimp API key', 'shapepress-dsgvo') . "`{$api_key}`" . __('supplied.', 'shapepress-dsgvo'));
42
+ }
43
+ list(, $data_center) = explode('-', $this->api_key);
44
+ $this->api_endpoint = str_replace('<dc>', $data_center, $this->api_endpoint);
45
+ } else {
46
+ $this->api_endpoint = $api_endpoint;
47
+ }
48
+
49
+ $this->last_response = array('headers' => null, 'body' => null);
50
+ }
51
+
52
+ /**
53
+ * Create a new instance of a Batch request. Optionally with the ID of an existing batch.
54
+ * @param string $batch_id Optional ID of an existing batch, if you need to check its status for example.
55
+ * @return Batch New Batch object.
56
+ */
57
+ public function new_batch($batch_id = null)
58
+ {
59
+ return new Batch($this, $batch_id);
60
+ }
61
+
62
+ /**
63
+ * @return string The url to the API endpoint
64
+ */
65
+ public function getApiEndpoint()
66
+ {
67
+ return $this->api_endpoint;
68
+ }
69
+
70
+
71
+ /**
72
+ * Convert an email address into a 'subscriber hash' for identifying the subscriber in a method URL
73
+ * @param string $email The subscriber's email address
74
+ * @return string Hashed version of the input
75
+ */
76
+ public function subscriberHash($email)
77
+ {
78
+ return md5(strtolower($email));
79
+ }
80
+
81
+ /**
82
+ * Was the last request successful?
83
+ * @return bool True for success, false for failure
84
+ */
85
+ public function success()
86
+ {
87
+ return $this->request_successful;
88
+ }
89
+
90
+ /**
91
+ * Get the last error returned by either the network transport, or by the API.
92
+ * If something didn't work, this should contain the string describing the problem.
93
+ * @return string|false describing the error
94
+ */
95
+ public function getLastError()
96
+ {
97
+ return $this->last_error ?: false;
98
+ }
99
+
100
+ /**
101
+ * Get an array containing the HTTP headers and the body of the API response.
102
+ * @return array Assoc array with keys 'headers' and 'body'
103
+ */
104
+ public function getLastResponse()
105
+ {
106
+ return $this->last_response;
107
+ }
108
+
109
+ /**
110
+ * Get an array containing the HTTP headers and the body of the API request.
111
+ * @return array Assoc array
112
+ */
113
+ public function getLastRequest()
114
+ {
115
+ return $this->last_request;
116
+ }
117
+
118
+ /**
119
+ * Make an HTTP DELETE request - for deleting data
120
+ * @param string $method URL of the API request method
121
+ * @param array $args Assoc array of arguments (if any)
122
+ * @param int $timeout Timeout limit for request in seconds
123
+ * @return array|false Assoc array of API response, decoded from JSON
124
+ */
125
+ public function delete($method, $args = array(), $timeout = self::TIMEOUT)
126
+ {
127
+ return $this->makeRequest('delete', $method, $args, $timeout);
128
+ }
129
+
130
+ /**
131
+ * Make an HTTP GET request - for retrieving data
132
+ * @param string $method URL of the API request method
133
+ * @param array $args Assoc array of arguments (usually your data)
134
+ * @param int $timeout Timeout limit for request in seconds
135
+ * @return array|false Assoc array of API response, decoded from JSON
136
+ */
137
+ public function get($method, $args = array(), $timeout = self::TIMEOUT)
138
+ {
139
+ return $this->makeRequest('get', $method, $args, $timeout);
140
+ }
141
+
142
+ /**
143
+ * Make an HTTP PATCH request - for performing partial updates
144
+ * @param string $method URL of the API request method
145
+ * @param array $args Assoc array of arguments (usually your data)
146
+ * @param int $timeout Timeout limit for request in seconds
147
+ * @return array|false Assoc array of API response, decoded from JSON
148
+ */
149
+ public function patch($method, $args = array(), $timeout = self::TIMEOUT)
150
+ {
151
+ return $this->makeRequest('patch', $method, $args, $timeout);
152
+ }
153
+
154
+ /**
155
+ * Make an HTTP POST request - for creating and updating items
156
+ * @param string $method URL of the API request method
157
+ * @param array $args Assoc array of arguments (usually your data)
158
+ * @param int $timeout Timeout limit for request in seconds
159
+ * @return array|false Assoc array of API response, decoded from JSON
160
+ */
161
+ public function post($method, $args = array(), $timeout = self::TIMEOUT)
162
+ {
163
+ return $this->makeRequest('post', $method, $args, $timeout);
164
+ }
165
+
166
+ /**
167
+ * Make an HTTP PUT request - for creating new items
168
+ * @param string $method URL of the API request method
169
+ * @param array $args Assoc array of arguments (usually your data)
170
+ * @param int $timeout Timeout limit for request in seconds
171
+ * @return array|false Assoc array of API response, decoded from JSON
172
+ */
173
+ public function put($method, $args = array(), $timeout = self::TIMEOUT)
174
+ {
175
+ return $this->makeRequest('put', $method, $args, $timeout);
176
+ }
177
+
178
+ /**
179
+ * Performs the underlying HTTP request. Not very exciting.
180
+ * @param string $http_verb The HTTP verb to use: get, post, put, patch, delete
181
+ * @param string $method The API method to be called
182
+ * @param array $args Assoc array of parameters to be passed
183
+ * @param int $timeout
184
+ * @return array|false Assoc array of decoded result
185
+ * @throws \Exception
186
+ */
187
+ private function makeRequest($http_verb, $method, $args = array(), $timeout = self::TIMEOUT)
188
+ {
189
+ if (!function_exists('curl_init') || !function_exists('curl_setopt')) {
190
+ throw new \Exception(__("cURL support is required, but can't be found.", 'shapepress-dsgvo'));
191
+ }
192
+
193
+ $url = $this->api_endpoint . '/' . $method;
194
+
195
+ $response = $this->prepareStateForRequest($http_verb, $method, $url, $timeout);
196
+
197
+ $ch = curl_init();
198
+ curl_setopt($ch, CURLOPT_URL, $url);
199
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array(
200
+ 'Accept: application/vnd.api+json',
201
+ 'Content-Type: application/vnd.api+json',
202
+ 'Authorization: apikey ' . $this->api_key
203
+ ));
204
+ curl_setopt($ch, CURLOPT_USERAGENT, 'DrewM/MailChimp-API/3.0 (github.com/drewm/mailchimp-api)');
205
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
206
+ curl_setopt($ch, CURLOPT_VERBOSE, true);
207
+ curl_setopt($ch, CURLOPT_HEADER, true);
208
+ curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
209
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $this->verify_ssl);
210
+ curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
211
+ curl_setopt($ch, CURLOPT_ENCODING, '');
212
+ curl_setopt($ch, CURLINFO_HEADER_OUT, true);
213
+
214
+ switch ($http_verb) {
215
+ case 'post':
216
+ curl_setopt($ch, CURLOPT_POST, true);
217
+ $this->attachRequestPayload($ch, $args);
218
+ break;
219
+
220
+ case 'get':
221
+ $query = http_build_query($args, '', '&');
222
+ curl_setopt($ch, CURLOPT_URL, $url . '?' . $query);
223
+ break;
224
+
225
+ case 'delete':
226
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
227
+ break;
228
+
229
+ case 'patch':
230
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
231
+ $this->attachRequestPayload($ch, $args);
232
+ break;
233
+
234
+ case 'put':
235
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
236
+ $this->attachRequestPayload($ch, $args);
237
+ break;
238
+ }
239
+
240
+ $responseContent = curl_exec($ch);
241
+ $response['headers'] = curl_getinfo($ch);
242
+ $response = $this->setResponseState($response, $responseContent, $ch);
243
+ $formattedResponse = $this->formatResponse($response);
244
+
245
+ curl_close($ch);
246
+
247
+ $this->determineSuccess($response, $formattedResponse, $timeout);
248
+
249
+ return $formattedResponse;
250
+ }
251
+
252
+ /**
253
+ * @param string $http_verb
254
+ * @param string $method
255
+ * @param string $url
256
+ * @param integer $timeout
257
+ */
258
+ private function prepareStateForRequest($http_verb, $method, $url, $timeout)
259
+ {
260
+ $this->last_error = '';
261
+
262
+ $this->request_successful = false;
263
+
264
+ $this->last_response = array(
265
+ 'headers' => null, // array of details from curl_getinfo()
266
+ 'httpHeaders' => null, // array of HTTP headers
267
+ 'body' => null // content of the response
268
+ );
269
+
270
+ $this->last_request = array(
271
+ 'method' => $http_verb,
272
+ 'path' => $method,
273
+ 'url' => $url,
274
+ 'body' => '',
275
+ 'timeout' => $timeout,
276
+ );
277
+
278
+ return $this->last_response;
279
+ }
280
+
281
+ /**
282
+ * Get the HTTP headers as an array of header-name => header-value pairs.
283
+ *
284
+ * The "Link" header is parsed into an associative array based on the
285
+ * rel names it contains. The original value is available under
286
+ * the "_raw" key.
287
+ *
288
+ * @param string $headersAsString
289
+ * @return array
290
+ */
291
+ private function getHeadersAsArray($headersAsString)
292
+ {
293
+ $headers = array();
294
+
295
+ foreach (explode("\r\n", $headersAsString) as $i => $line) {
296
+ if ($i === 0) { // HTTP code
297
+ continue;
298
+ }
299
+
300
+ $line = trim($line);
301
+ if (empty($line)) {
302
+ continue;
303
+ }
304
+
305
+ list($key, $value) = explode(': ', $line);
306
+
307
+ if ($key == 'Link') {
308
+ $value = array_merge(
309
+ array('_raw' => $value),
310
+ $this->getLinkHeaderAsArray($value)
311
+ );
312
+ }
313
+
314
+ $headers[$key] = $value;
315
+ }
316
+
317
+ return $headers;
318
+ }
319
+
320
+ /**
321
+ * Extract all rel => URL pairs from the provided Link header value
322
+ *
323
+ * Mailchimp only implements the URI reference and relation type from
324
+ * RFC 5988, so the value of the header is something like this:
325
+ *
326
+ * 'https://us13.api.mailchimp.com/schema/3.0/Lists/Instance.json; rel="describedBy", <https://us13.admin.mailchimp.com/lists/members/?id=XXXX>; rel="dashboard"'
327
+ *
328
+ * @param string $linkHeaderAsString
329
+ * @return array
330
+ */
331
+ private function getLinkHeaderAsArray($linkHeaderAsString)
332
+ {
333
+ $urls = array();
334
+
335
+ if (preg_match_all('/<(.*?)>\s*;\s*rel="(.*?)"\s*/', $linkHeaderAsString, $matches)) {
336
+ foreach ($matches[2] as $i => $relName) {
337
+ $urls[$relName] = $matches[1][$i];
338
+ }
339
+ }
340
+
341
+ return $urls;
342
+ }
343
+
344
+ /**
345
+ * Encode the data and attach it to the request
346
+ * @param resource $ch cURL session handle, used by reference
347
+ * @param array $data Assoc array of data to attach
348
+ */
349
+ private function attachRequestPayload(&$ch, $data)
350
+ {
351
+ $encoded = json_encode($data);
352
+ $this->last_request['body'] = $encoded;
353
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded);
354
+ }
355
+
356
+ /**
357
+ * Decode the response and format any error messages for debugging
358
+ * @param array $response The response from the curl request
359
+ * @return array|false The JSON decoded into an array
360
+ */
361
+ private function formatResponse($response)
362
+ {
363
+ $this->last_response = $response;
364
+
365
+ if (!empty($response['body'])) {
366
+ return json_decode($response['body'], true);
367
+ }
368
+
369
+ return false;
370
+ }
371
+
372
+ /**
373
+ * Do post-request formatting and setting state from the response
374
+ * @param array $response The response from the curl request
375
+ * @param string $responseContent The body of the response from the curl request
376
+ * * @return array The modified response
377
+ */
378
+ private function setResponseState($response, $responseContent, $ch)
379
+ {
380
+ if ($responseContent === false) {
381
+ $this->last_error = curl_error($ch);
382
+ } else {
383
+
384
+ $headerSize = $response['headers']['header_size'];
385
+
386
+ $response['httpHeaders'] = $this->getHeadersAsArray(substr($responseContent, 0, $headerSize));
387
+ $response['body'] = substr($responseContent, $headerSize);
388
+
389
+ if (isset($response['headers']['request_header'])) {
390
+ $this->last_request['headers'] = $response['headers']['request_header'];
391
+ }
392
+ }
393
+
394
+ return $response;
395
+ }
396
+
397
+ /**
398
+ * Check if the response was successful or a failure. If it failed, store the error.
399
+ * @param array $response The response from the curl request
400
+ * @param array|false $formattedResponse The response body payload from the curl request
401
+ * @param int $timeout The timeout supplied to the curl request.
402
+ * @return bool If the request was successful
403
+ */
404
+ private function determineSuccess($response, $formattedResponse, $timeout)
405
+ {
406
+ $status = $this->findHTTPStatus($response, $formattedResponse);
407
+
408
+ if ($status >= 200 && $status <= 299) {
409
+ $this->request_successful = true;
410
+ return true;
411
+ }
412
+
413
+ if (isset($formattedResponse['detail'])) {
414
+ $this->last_error = sprintf('%d: %s', $formattedResponse['status'], $formattedResponse['detail']);
415
+ return false;
416
+ }
417
+
418
+ if( $timeout > 0 && $response['headers'] && $response['headers']['total_time'] >= $timeout ) {
419
+ $this->last_error = sprintf(__('Request timed out after', 'shapepress-dsgvo') . ' %f ' . __('seconds.', 'shapepress-dsgvo'), $response['headers']['total_time'] );
420
+ return false;
421
+ }
422
+
423
+ $this->last_error = __('Unknown error, call getLastResponse() to find out what happened.', 'shapepress-dsgvo');
424
+ return false;
425
+ }
426
+
427
+ /**
428
+ * Find the HTTP status code from the headers or API response body
429
+ * @param array $response The response from the curl request
430
+ * @param array|false $formattedResponse The response body payload from the curl request
431
+ * @return int HTTP status code
432
+ */
433
+ private function findHTTPStatus($response, $formattedResponse)
434
+ {
435
+ if (!empty($response['headers']) && isset($response['headers']['http_code'])) {
436
+ return (int) $response['headers']['http_code'];
437
+ }
438
+
439
+ if (!empty($response['body']) && isset($formattedResponse['status'])) {
440
+ return (int) $formattedResponse['status'];
441
+ }
442
+
443
+ return 418;
444
+ }
445
+ }
includes/integrations/mailchimp/MailchimpIntegration.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SPDSGVOMailchimpIntegration extends SPDSGVOIntegration{
4
+
5
+ public $slug = 'mailchimp';
6
+ public $title = 'Mailchimp';
7
+
8
+ public function boot(){
9
+ $this->isHidden = FALSE;
10
+
11
+ if(!class_exists('SPDSGVOMailChimp')){
12
+ require_once dirname(__FILE__) .'/MailchimpAPI.php';
13
+ }
14
+ }
15
+
16
+ public function view(){
17
+ include dirname(__FILE__) .'/page.php';
18
+ }
19
+
20
+ public function viewSubmit(){
21
+
22
+ if($this->has('mailchimp_api_token')){
23
+ update_option('mailchimp_api_token', $this->get('mailchimp_api_token'));
24
+ }
25
+
26
+ $this->redirectBack();
27
+ }
28
+
29
+
30
+ // -----------------------------------------------------
31
+ // Actions
32
+ // -----------------------------------------------------
33
+ public function onSuperUnsubscribe($email, $firstName = NULL, $lastName = NULL, $user = NULL){
34
+ $mailChimp = new SPDSGVOMailChimp(get_option('mailchimp_api_token'));
35
+ $lists = $mailChimp->get('lists');
36
+
37
+ if(is_array($lists['lists'])){
38
+ $hash = $mailChimp->subscriberHash($email);
39
+ foreach($lists['lists'] as $list){
40
+ $mailChimp->delete(
41
+ sprintf('lists/%s/members/%s', $list['id'], $hash)
42
+ );
43
+ }
44
+ }
45
+ }
46
+
47
+ public function onSubjectAccessRequest($email, $firstName = NULL, $lastName = NULL, $user = NULL){
48
+
49
+ // Your Code Here!
50
+
51
+ }
52
+ }
53
+
54
+ SPDSGVOMailchimpIntegration::register();
includes/integrations/mailchimp/page.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <form method="post" action="<?= SPDSGVOMailchimpIntegration::formURL() ?> ">
2
+ <input type="hidden" name="action" value="<?= SPDSGVOMailchimpIntegration::action() ?>">
3
+
4
+ <table class="form-table">
5
+ <tbody>
6
+ <tr>
7
+ <th scope="row"><label for="mailchimp_api_token"><?php _e('Mailchimp API Key','shapepress-dsgvo')?></label></th>
8
+ <td>
9
+ <input name="mailchimp_api_token" type="text" id="mailchimp_api_token" aria-describedby="admin-email-description" value="<?= get_option('mailchimp_api_token'); ?>" class="regular-text ltr">
10
+ <p class="description" id="admin-email-description">
11
+ <a href="https://kb.mailchimp.com/integrations/api-integrations/about-api-keys" target="_blank"><?php _e('Click here','shapepress-dsgvo')?> </a>
12
+ <?php _e('to get an API key','shapepress-dsgvo')?>
13
+ </p>
14
+ </td>
15
+ </tr>
16
+ </tbody>
17
+ </table>
18
+
19
+ <?php submit_button(); ?>
20
+ </form>
includes/integrations/woocommerce/WoocommerceIntegration.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class SPDSGVOWoocommerceIntegration extends SPDSGVOIntegration
4
+ {
5
+
6
+ public $slug = 'woocommerce';
7
+
8
+ public $title = 'WooCommerce';
9
+
10
+ public function boot()
11
+ {
12
+ $this->isHidden = TRUE;
13
+ }
14
+
15
+ public function view()
16
+ {
17
+ include dirname(__FILE__) . '/page.php';
18
+ }
19
+
20
+ public function viewSubmit()
21
+ {
22
+ $this->redirectBack();
23
+ }
24
+
25
+ // -----------------------------------------------------
26
+ // Actions
27
+ // -----------------------------------------------------
28
+ public function onSuperUnsubscribe($email, $firstName = NULL, $lastName = NULL, $user = NULL)
29
+ {
30
+ if (isValidPremiumEdition() == false) return;
31
+
32
+ if (!class_exists( 'WooCommerce' )) return;
33
+
34
+ error_log('Woo.onSuperUnsubscribe of email: '.$email);
35
+ // Get orders from the customer with email $email
36
+ $query = new WC_Order_Query();
37
+ $query->set('customer', $email);
38
+ $customer_orders = $query->get_orders();
39
+
40
+ $args = array(
41
+ 'billing_email' => $email,
42
+ );
43
+ $ordersByMail = wc_get_orders( $args );
44
+ $customer_orders = array_merge($customer_orders, $ordersByMail);
45
+
46
+ $wooAction = SPDSGVOSettings::get('su_woo_data_action');
47
+ error_log('Woo.onSuperUnsubscribe.$wooAction: '.$wooAction);
48
+
49
+ if ($wooAction != 'ignore') {
50
+
51
+ foreach ($customer_orders as $order) {
52
+
53
+ error_log('Woo.onSuperUnsubscribe.$order->ID'.$order->get_id() );
54
+
55
+ if ($wooAction == 'pseudo') {
56
+ error_log('Woo.onSuperUnsubscribe: setting values of $order->ID'.$order->get_id() );
57
+
58
+ $order->set_billing_first_name('User');
59
+ $order->set_billing_last_name('Deleted');
60
+ $order->set_billing_address_1('Street');
61
+ $order->set_billing_address_2('');
62
+ $order->set_billing_city('City');
63
+ $order->set_billing_address_2('');
64
+ $order->set_billing_email('email@deleteduser.at');
65
+
66
+ $order->set_customer_ip_address('');
67
+ $order->set_customer_user_agent('');
68
+
69
+ if ($order->has_shipping_address()) {
70
+ $order->set_shipping_first_name('User');
71
+ $order->set_shipping_last_name('Deleted');
72
+ $order->set_shipping_address_1('Street');
73
+ $order->set_shipping_address_2('');
74
+ $order->set_shipping_city('City');
75
+ $order->set_shipping_address_2('');
76
+ $order->set_shipping_email('email@deleteduser.at');
77
+ }
78
+
79
+ $order->save();
80
+
81
+ } else if ($wooAction == 'del') {
82
+
83
+ $order->delete(FALSE);
84
+ }
85
+ }
86
+ }
87
+ }
88
+
89
+ public function onSubjectAccessRequest($email, $firstName = NULL, $lastName = NULL, $user = NULL)
90
+ {
91
+ if (isValidPremiumEdition() == false) return;
92
+
93
+ if (!class_exists( 'WooCommerce' )) return;
94
+
95
+ $data = array();
96
+
97
+ // $customer_orders = get_posts( array(
98
+ // 'numberposts' => -1,
99
+ // 'meta_key' => '_customer_user',
100
+ // 'meta_value' => $user->ID,
101
+ // 'post_type' => wc_get_order_types(),
102
+ // 'post_status' => array_keys( wc_get_order_statuses() ),
103
+ // ) );
104
+
105
+ // Get orders from the customer with email $email
106
+ $query = new WC_Order_Query();
107
+ $query->set('customer', $email);
108
+ $customer_orders = $query->get_orders();
109
+
110
+ // Iterating through each Order
111
+ foreach ($customer_orders as $order) {
112
+
113
+ $orderData = array();
114
+ $orderData[] = __('Order','shapepress-dsgvo') .' ' . $order->get_order_number() . ' '.__('of','shapepress-dsgvo').' ' . wc_format_datetime($order->get_date_created());
115
+
116
+ // Going through each current customer order items
117
+ foreach ($order->get_items() as $item_id => $item_values) {
118
+ // $product_id = $item_values['product_id']; // product ID
119
+ $productName = $item_values['name'];
120
+
121
+ // Order Item meta data
122
+ // $item_meta_data = wc_get_order_item_meta($item_id);
123
+
124
+ $orderData[] = __('Product','shapepress-dsgvo') .": " . $productName;
125
+ }
126
+
127
+ $orderData[] = $order->get_formatted_billing_address();
128
+ if ($order->has_shipping_address()) {
129
+ $orderData[] = $order->get_formatted_shipping_address();
130
+ }
131
+
132
+ $orderData[] = ' ';
133
+
134
+ $data[] = $orderData;
135
+ }
136
+
137
+ return $data;
138
+ }
139
+ }
140
+
141
+ SPDSGVOWoocommerceIntegration::register();
includes/models/subject-access-request.php CHANGED
@@ -53,24 +53,24 @@ Class SPDSGVOSubjectAccessRequest extends SPDSGVOModel {
53
  }
54
  $breakdown .= implode(', ', $data);
55
  $breakdown .= '</p>';
56
-
57
  $i++;
58
  if($i > 5){
59
  break;
60
  }
61
  }
62
-
63
 
64
 
65
  // Send Email
66
  $email = SPDSGVOMail::init()
67
  ->from(SPDSGVOSettings::get('admin_email'))
68
  ->to($this->email)
69
- ->subject('Anfrage zum Datenauszug: '. parse_url(home_url(), PHP_URL_HOST))
70
- ->beforeTemplate(SPDSGVO::pluginDir('includes/emails/header.html'))
71
- ->afterTemplate( SPDSGVO::pluginDir('includes/emails/footer.html'))
72
- ->template(SPDSGVO::pluginDir('includes/emails/subject-access-request.html'), array(
73
- 'title' => 'Subject Access Request',
74
 
75
  'zip_link' => SPDSGVODownloadSubjectAccessRequestAction::url(array(
76
  'token' => $this->token,
@@ -79,7 +79,7 @@ Class SPDSGVOSubjectAccessRequest extends SPDSGVOModel {
79
 
80
  'count' => $dataCollecter->totalFound,
81
  'breakdown' => $breakdown,
82
-
83
  'home_url' => home_url(),
84
  'website' => home_url(),
85
  'admin_email' => SPDSGVOSettings::get('admin_email'),
@@ -91,7 +91,7 @@ Class SPDSGVOSubjectAccessRequest extends SPDSGVOModel {
91
  $this->pdf_path,
92
  ));
93
  }catch(Exception $e){
94
-
95
  }
96
 
97
 
@@ -131,7 +131,7 @@ Class SPDSGVOSubjectAccessRequest extends SPDSGVOModel {
131
  }
132
 
133
  public function _postFinderToken($results, $args){
134
- return @$results[0];
135
  }
136
 
137
  public function _finderPending($args){
@@ -158,7 +158,7 @@ Class SPDSGVOSubjectAccessRequest extends SPDSGVOModel {
158
  // Misc
159
  //======================================================================
160
  public function name(){
161
- return $this->first_name .' '. $this->last_name;
162
  }
163
 
164
  public function filename($extension){
@@ -178,10 +178,10 @@ Class SPDSGVOSubjectAccessRequest extends SPDSGVOModel {
178
  public function buildPDF(){
179
  $pdf = new SPDSGVOPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
180
  $pdf->SetCreator(PDF_CREATOR);
181
- $pdf->SetTitle('Alle Daten zu '. $this->name());
182
- $pdf->SetSubject('Alle Daten zu '. $this->name());
183
 
184
- $pdf->SetHeaderData('', PDF_HEADER_LOGO_WIDTH, "Alle Daten zu {$this->name()}", sprintf("Datum: %s \nQuelle: %s", date('j. F Y, G:i:s'), home_url()));
185
  $pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
186
  $pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
187
  $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
@@ -190,11 +190,11 @@ Class SPDSGVOSubjectAccessRequest extends SPDSGVOModel {
190
  $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
191
  $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
192
  $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
193
-
194
  $pdf->SetFont('helvetica', '', 12);
195
  $pdf->AddPage();
196
  $pdf->coloredTable($this->collectedData);
197
-
198
  $fileName = $this->filename('pdf');
199
  $upload = wp_upload_bits($fileName, NULL, $pdf->Output($path, 'S'));
200
  $this->pdf_path = $upload['file'];
@@ -218,4 +218,4 @@ SPDSGVOSubjectAccessRequest::register(array(
218
  'publicly_queryable' => FALSE,
219
  'exclude_from_search' => FALSE,
220
  'public' => FALSE,
221
- ));
53
  }
54
  $breakdown .= implode(', ', $data);
55
  $breakdown .= '</p>';
56
+
57
  $i++;
58
  if($i > 5){
59
  break;
60
  }
61
  }
62
+
63
 
64
 
65
  // Send Email
66
  $email = SPDSGVOMail::init()
67
  ->from(SPDSGVOSettings::get('admin_email'))
68
  ->to($this->email)
69
+ ->subject(__('Subject access request','shapepress-dsgvo'). ': '. parse_url(home_url(), PHP_URL_HOST))
70
+ ->beforeTemplate(SPDSGVO::pluginDir('/templates/'.get_locale().'/emails/header.php'))
71
+ ->afterTemplate( SPDSGVO::pluginDir('/templates/'.get_locale().'/emails/footer.php'))
72
+ ->template(SPDSGVO::pluginDir('/templates/'.get_locale().'/emails/subject-access-request.php'), array(
73
+ 'title' => __('Subject access request','shapepress-dsgvo'),
74
 
75
  'zip_link' => SPDSGVODownloadSubjectAccessRequestAction::url(array(
76
  'token' => $this->token,
79
 
80
  'count' => $dataCollecter->totalFound,
81
  'breakdown' => $breakdown,
82
+
83
  'home_url' => home_url(),
84
  'website' => home_url(),
85
  'admin_email' => SPDSGVOSettings::get('admin_email'),
91
  $this->pdf_path,
92
  ));
93
  }catch(Exception $e){
94
+
95
  }
96
 
97
 
131
  }
132
 
133
  public function _postFinderToken($results, $args){
134
+ return @$results[0];
135
  }
136
 
137
  public function _finderPending($args){
158
  // Misc
159
  //======================================================================
160
  public function name(){
161
+ return $this->first_name .' '. $this->last_name;
162
  }
163
 
164
  public function filename($extension){
178
  public function buildPDF(){
179
  $pdf = new SPDSGVOPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
180
  $pdf->SetCreator(PDF_CREATOR);
181
+ $pdf->SetTitle(__('All data of', 'shapepress-dsgvo') . ' '. $this->name());
182
+ $pdf->SetSubject(__('All data of', 'shapepress-dsgvo') . ' '. $this->name());
183
 
184
+ $pdf->SetHeaderData('', PDF_HEADER_LOGO_WIDTH, __('All data of', 'shapepress-dsgvo') . " {$this->name()}", sprintf(__('Date', 'shapepress-dsgvo') . ": %s \n" . __('Source', 'shapepress-dsgvo') . ": %s", date('j. F Y, G:i:s'), home_url()));
185
  $pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
186
  $pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
187
  $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
190
  $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
191
  $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
192
  $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
193
+
194
  $pdf->SetFont('helvetica', '', 12);
195
  $pdf->AddPage();
196
  $pdf->coloredTable($this->collectedData);
197
+
198
  $fileName = $this->filename('pdf');
199
  $upload = wp_upload_bits($fileName, NULL, $pdf->Output($path, 'S'));
200
  $this->pdf_path = $upload['file'];
218
  'publicly_queryable' => FALSE,
219
  'exclude_from_search' => FALSE,
220
  'public' => FALSE,
221
+ ));
includes/models/unsubscriber.php CHANGED
@@ -22,22 +22,21 @@ Class SPDSGVOUnsubscriber extends SPDSGVOModel {
22
  // doSuperUnsubscribe()
23
  //======================================================================
24
  public function doSuperUnsubscribe(){
25
-
26
  $user = get_user_by('email', $this->email);
27
  $ignored_roles = array('administrator');
28
-
29
-
30
  if( array_intersect($ignored_roles, $user->roles ))
31
  {
32
- error_log('doSuperUnsubscribe: user '.$this->email.' ignored because he has role of '.implode($user->roles));
33
  } else
34
  {
35
  $this->status = 'in-progress';
36
  $this->save();
37
-
38
  $dataCollecter = new SPDSGVODataCollecter($this->email, $this->first_name, $this->last_name);
39
  $dataCollecter->superUnsubscribe();
40
-
41
  $this->status = 'done';
42
  $this->save();
43
  }
@@ -45,7 +44,7 @@ Class SPDSGVOUnsubscriber extends SPDSGVOModel {
45
 
46
 
47
  public static function doByID($ID){
48
- $unsubscriber = self::find($ID);
49
  if(!is_null($unsubscriber)){
50
  $unsubscriber->doSuperUnsubscribe();
51
  return TRUE;
@@ -69,7 +68,7 @@ Class SPDSGVOUnsubscriber extends SPDSGVOModel {
69
  }
70
 
71
  public function _postFinderToken($results, $args){
72
- return @$results[0];
73
  }
74
 
75
  public function _finderStatus($args){
@@ -88,20 +87,20 @@ Class SPDSGVOUnsubscriber extends SPDSGVOModel {
88
  // Hooks
89
  //======================================================================
90
  public function inserting(){
91
- $this->token = self::randomString();
92
  }
93
 
94
- public function inserted()
95
- {
96
- if ($this->process_now === '1') return;
97
-
98
  $email = SPDSGVOMail::init()
99
- ->to($this->email)
100
  ->from(SPDSGVOSettings::get('admin_email'))
101
- ->subject('Bestätigung der Datenlöschung: '. parse_url(home_url(), PHP_URL_HOST))
102
- ->beforeTemplate(SPDSGVO::pluginDir('includes/emails/header.html'))
103
- ->afterTemplate( SPDSGVO::pluginDir('includes/emails/footer.html'))
104
- ->template(SPDSGVO::pluginDir('includes/emails/super-unsubscribe.html'), array(
 
105
  'website' => parse_url(home_url(), PHP_URL_HOST),
106
  'confirm_link' => SPDSGVOSuperUnsubscribeConfirmAction::url(array(
107
  'token' => $this->token
@@ -118,7 +117,7 @@ Class SPDSGVOUnsubscriber extends SPDSGVOModel {
118
  // Misc
119
  //======================================================================
120
  public function name(){
121
- return $this->first_name .' '. $this->last_name;
122
  }
123
 
124
  public static function randomString($len = 20){
@@ -144,4 +143,4 @@ function registerUnsubscriberDSGVOModel(){
144
  'public' => FALSE,
145
  ));
146
  }
147
- add_action('init', 'registerUnsubscriberDSGVOModel');
22
  // doSuperUnsubscribe()
23
  //======================================================================
24
  public function doSuperUnsubscribe(){
 
25
  $user = get_user_by('email', $this->email);
26
  $ignored_roles = array('administrator');
27
+
28
+
29
  if( array_intersect($ignored_roles, $user->roles ))
30
  {
31
+ //error_log('doSuperUnsubscribe: user '.$this->email.' ignored because he has role of '.implode($user->roles));
32
  } else
33
  {
34
  $this->status = 'in-progress';
35
  $this->save();
36
+
37
  $dataCollecter = new SPDSGVODataCollecter($this->email, $this->first_name, $this->last_name);
38
  $dataCollecter->superUnsubscribe();
39
+
40
  $this->status = 'done';
41
  $this->save();
42
  }
44
 
45
 
46
  public static function doByID($ID){
47
+ $unsubscriber = self::find($ID);
48
  if(!is_null($unsubscriber)){
49
  $unsubscriber->doSuperUnsubscribe();
50
  return TRUE;
68
  }
69
 
70
  public function _postFinderToken($results, $args){
71
+ return @$results[0];
72
  }
73
 
74
  public function _finderStatus($args){
87
  // Hooks
88
  //======================================================================
89
  public function inserting(){
90
+ $this->token = self::randomString();
91
  }
92
 
93
+ public function inserted(){
94
+
95
+ if ($this->process_now === '1') return;
96
+
97
  $email = SPDSGVOMail::init()
 
98
  ->from(SPDSGVOSettings::get('admin_email'))
99
+ ->to($this->email)
100
+ ->subject(__('Confirmation of delete request','shapepress-dsgvo'). ': '. parse_url(home_url(), PHP_URL_HOST))
101
+ ->beforeTemplate(SPDSGVO::pluginDir('/templates/'.get_locale().'/emails/header.php'))
102
+ ->afterTemplate( SPDSGVO::pluginDir('/templates/'.get_locale().'/emails/footer.php'))
103
+ ->template(SPDSGVO::pluginDir('/templates/'.get_locale().'/emails/super-unsubscribe.php'), array(
104
  'website' => parse_url(home_url(), PHP_URL_HOST),
105
  'confirm_link' => SPDSGVOSuperUnsubscribeConfirmAction::url(array(
106
  'token' => $this->token
117
  // Misc
118
  //======================================================================
119
  public function name(){
120
+ return $this->first_name .' '. $this->last_name;
121
  }
122
 
123
  public static function randomString($len = 20){
143
  'public' => FALSE,
144
  ));
145
  }
146
+ add_action('init', 'registerUnsubscriberDSGVOModel');
languages/shapepress-dsgvo-de_DE.mo ADDED
Binary file
languages/shapepress-dsgvo-de_DE.po ADDED
@@ -0,0 +1,2216 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: \n"
4
+ "POT-Creation-Date: 2018-08-16 15:54+0200\n"
5
+ "PO-Revision-Date: 2018-08-16 16:50+0200\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: \n"
8
+ "Language: de_DE\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 2.0.8\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
+ "X-Poedit-KeywordsList: __;_e\n"
16
+ "X-Poedit-SearchPath-0: .\n"
17
+ "X-Poedit-SearchPathExcluded-0: includes/lib/tcpdf\n"
18
+ "X-Poedit-SearchPathExcluded-1: includes/lib/plugin-update-checker\n"
19
+
20
+ #: admin/base.php:2
21
+ msgid "WP DSGVO Tools"
22
+ msgstr "WP DSGVO Tools"
23
+
24
+ #: admin/base.php:32
25
+ msgid "WP DSGVO Tools is not binding and does not replace expert advice"
26
+ msgstr "WP DSGVO Tools ist unverbindlich & ersetzt keine Expertenberatung"
27
+
28
+ #: admin/base.php:34
29
+ msgid "GDPR website self check"
30
+ msgstr "DSGVO Website Selbstcheck"
31
+
32
+ #: admin/base.php:35
33
+ msgid "Includes only your web presence!"
34
+ msgstr "Umfasst nur Ihren Webauftritt!"
35
+
36
+ #: admin/base.php:40
37
+ msgid "VdV (directory of processing times)"
38
+ msgstr "VdV (Verzeichnis der Verarbeitungstägkeiten)"
39
+
40
+ #: admin/base.php:40
41
+ msgid "downloaded"
42
+ msgstr "heruntergeladen"
43
+
44
+ #: admin/base.php:41
45
+ msgid "filled"
46
+ msgstr "ausgefüllt"
47
+
48
+ #: admin/base.php:47
49
+ msgid "WP DSGVO Tools plugin completely filled"
50
+ msgstr "WP DSGVO Tools Plugin vollständig ausgefüllt"
51
+
52
+ #: admin/base.php:52
53
+ msgid ""
54
+ "Monthly maintenance of the website (maintenance contract with the web "
55
+ "designer)"
56
+ msgstr "Monatliche Wartung der Website (Wartungsvertrag beim Webdesigner)"
57
+
58
+ #: admin/base.php:56
59
+ msgid "Security Precautions (strong passwords, who has access, ...)"
60
+ msgstr "Sicherheitsvorkehrungen (Starke Passwörter, wer hat Zugriff,...)"
61
+
62
+ #: admin/base.php:60
63
+ msgid "GDPR compliant and secure web hosting? Our recommendation:"
64
+ msgstr "DSGVO konformes und sicheres Web-Hosting? Unsere Empfehlung:"
65
+
66
+ #: admin/base.php:66
67
+ msgid "Check the security of unsupported plugins"
68
+ msgstr "Sicherheit von nicht unterstützten Plugins prüfen"
69
+
70
+ #: admin/base.php:71
71
+ msgid "Expert advice"
72
+ msgstr "Expertenberatung"
73
+
74
+ #: admin/base.php:71
75
+ msgid "requested"
76
+ msgstr "angefordert"
77
+
78
+ #: admin/base.php:75
79
+ msgid "Blog Edition"
80
+ msgstr "Blog Edition"
81
+
82
+ #: admin/base.php:77
83
+ msgid ""
84
+ "Stylish Cookie Notice: Customize the look & feel of your Wordpress Page!"
85
+ msgstr ""
86
+ "Stylebare Cookie Notice: Passe das Look & Feel deiner Wordpress Page an!"
87
+
88
+ #: admin/base.php:78
89
+ msgid "Texts customizable with comment checkbox"
90
+ msgstr "Texte bei Kommentarcheckbox anpassbar"
91
+
92
+ #: admin/base.php:82
93
+ msgid "Get the Blog Edition now"
94
+ msgstr "Jetzt die Blog Edition holen"
95
+
96
+ #: admin/base.php:86
97
+ msgid "Upgrade to Premium"
98
+ msgstr "Upgrade to Premium"
99
+
100
+ #: admin/base.php:88
101
+ msgid "Cookie Notice Popup"
102
+ msgstr "Cookie Notice Popup"
103
+
104
+ #: admin/base.php:89
105
+ msgid "Support & Community"
106
+ msgstr "Support & Community"
107
+
108
+ #: admin/base.php:90
109
+ msgid "More Integrations"
110
+ msgstr "Weitere Integrationen"
111
+
112
+ #: admin/base.php:91
113
+ msgid "Automatic user data reports"
114
+ msgstr "Automatische Userdaten Auszüge"
115
+
116
+ #: admin/base.php:92
117
+ msgid "Email notifications"
118
+ msgstr "Email Benachrichtigungen"
119
+
120
+ #: admin/base.php:93
121
+ msgid "Style & Customization (from Blog Edition)"
122
+ msgstr "Style & Farbanpassungen (Ab Blog Edition)"
123
+
124
+ #: admin/base.php:94
125
+ msgid "and much more"
126
+ msgstr "und viele mehr"
127
+
128
+ #: admin/base.php:98
129
+ msgid "Get Premium version now"
130
+ msgstr "Hol dir jetzt unser Premium Plugin"
131
+
132
+ #: admin/base.php:101
133
+ msgid "FAQ & checklists"
134
+ msgstr "FAQ & Checklisten"
135
+
136
+ #: admin/base.php:102
137
+ msgid "GDPR experts booking"
138
+ msgstr "DSGVO Experten buchen"
139
+
140
+ #: admin/base.php:103
141
+ msgid "Book legal advice"
142
+ msgstr "Rechtliche Beratung buchen"
143
+
144
+ #: admin/class-sp-dsgvo-admin.php:71 admin/tabs/privacy-policy/page.php:1
145
+ msgid "Privacy policy"
146
+ msgstr "Datenschutz"
147
+
148
+ #: admin/class-sp-dsgvo-admin.php:72
149
+ #: admin/tabs/imprint/class-sp-dsgvo-imprint-tab.php:11
150
+ #: admin/tabs/imprint/page.php:1
151
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:61
152
+ msgid "Imprint"
153
+ msgstr "Impressum"
154
+
155
+ #: admin/class-sp-dsgvo-admin.php:78
156
+ msgid "Experts Info"
157
+ msgstr "Experteninfo"
158
+
159
+ #: admin/class-sp-dsgvo-admin.php:79
160
+ msgid "Legal advice"
161
+ msgstr "Rechtsberatung"
162
+
163
+ #: admin/class-sp-dsgvo-admin.php:80
164
+ msgid "FAQ"
165
+ msgstr "FAQ"
166
+
167
+ #: admin/class-sp-dsgvo-admin.php:81
168
+ msgid "About WP DSGVO Tools"
169
+ msgstr "Über WP DSGVO Tools"
170
+
171
+ #: admin/class-sp-dsgvo-admin.php:125
172
+ msgid "Are you sure you want to dismiss this request?"
173
+ msgstr "Sind Sie Sicher dass Sie die Anfrage abbrechen wollen?"
174
+
175
+ #: admin/class-sp-dsgvo-admin.php:142
176
+ msgid "Privacy settings user page"
177
+ msgstr "Datenschutzeinstellungen Benutzer Seite"
178
+
179
+ #: admin/class-sp-dsgvo-admin.php:143
180
+ msgid "Delete request page"
181
+ msgstr "Löschanfrage Seite"
182
+
183
+ #: admin/class-sp-dsgvo-admin.php:144
184
+ msgid "Terms page"
185
+ msgstr "AGB Seite"
186
+
187
+ #: admin/class-sp-dsgvo-admin.php:145
188
+ msgid "Explicit permissions page"
189
+ msgstr "Explizite Berechtigungen Seite"
190
+
191
+ #: admin/class-sp-dsgvo-admin.php:146
192
+ msgid "Opt Out page"
193
+ msgstr "Opt Out Seite"
194
+
195
+ #: admin/class-sp-dsgvo-admin.php:147 admin/tabs/privacy-policy/page.php:12
196
+ msgid "Privacy policy page"
197
+ msgstr "Datenschutz Seite"
198
+
199
+ #: admin/class-sp-dsgvo-admin.php:148
200
+ msgid "Subject access request page"
201
+ msgstr "Datenauszug Seite"
202
+
203
+ #: admin/class-sp-dsgvo-admin.php:149
204
+ msgid "Imprint page"
205
+ msgstr "Impressum Seite"
206
+
207
+ #: admin/class-sp-dsgvo-admin.php:200
208
+ msgid "Privacy settings of the user"
209
+ msgstr "Datenschutzeinstellungen des Benutzers"
210
+
211
+ #: admin/class-sp-dsgvo-admin.php:205
212
+ msgid "Dienste"
213
+ msgstr "Dienste"
214
+
215
+ #: admin/tabs/common-settings/class-sp-dsgvo-common-settings-activate-action.php:28
216
+ #: admin/tabs/common-settings/class-sp-dsgvo-common-settings-activate-action.php:50
217
+ msgid "error during license activation: "
218
+ msgstr "Fehler während der Aktivierung: "
219
+
220
+ #: admin/tabs/common-settings/class-sp-dsgvo-common-settings-activate-action.php:77
221
+ msgid "error during license details: "
222
+ msgstr "Fehler während der Lizenzabfrage: "
223
+
224
+ #: admin/tabs/common-settings/class-sp-dsgvo-common-settings-tab.php:11
225
+ #: admin/tabs/common-settings/page.php:41
226
+ msgid "Common Settings"
227
+ msgstr "Allgemeine Einstellungen"
228
+
229
+ #: admin/tabs/common-settings/page.php:4
230
+ msgid "Activate Blog/Premium"
231
+ msgstr "Blog/Premium Edition freischalten"
232
+
233
+ #: admin/tabs/common-settings/page.php:8
234
+ msgid "License"
235
+ msgstr "Lizenz"
236
+
237
+ #: admin/tabs/common-settings/page.php:16
238
+ msgid "Premium version has been activated"
239
+ msgstr "Die Premium Edition ist aktiviert."
240
+
241
+ #: admin/tabs/common-settings/page.php:16
242
+ msgid "Invalid or expired license."
243
+ msgstr "Ungültige oder abgelaufene Lizenz."
244
+
245
+ #: admin/tabs/common-settings/page.php:19
246
+ msgid "Blog version has been activated"
247
+ msgstr "Die Blog Edition ist aktiviert."
248
+
249
+ #: admin/tabs/common-settings/page.php:19
250
+ msgid "Invalid license."
251
+ msgstr "Ungültige Lizenz."
252
+
253
+ #: admin/tabs/common-settings/page.php:23
254
+ msgid "Activated on:"
255
+ msgstr "Aktiviert am:"
256
+
257
+ #: admin/tabs/common-settings/page.php:24
258
+ msgid "Valid to:"
259
+ msgstr "Gültig bis:"
260
+
261
+ #: admin/tabs/common-settings/page.php:26
262
+ msgid "Deactivate license"
263
+ msgstr "Lizenz deaktivieren"
264
+
265
+ #: admin/tabs/common-settings/page.php:28
266
+ msgid "Activating the license unlocks more features."
267
+ msgstr "Aktivieren der Lizenz schaltet weitere Funktionen frei."
268
+
269
+ #: admin/tabs/common-settings/page.php:29
270
+ msgid "Activate license"
271
+ msgstr "Lizenz aktivieren"
272
+
273
+ #: admin/tabs/common-settings/page.php:45
274
+ msgid "Admin Email"
275
+ msgstr "Admin Email"
276
+
277
+ #: admin/tabs/common-settings/page.php:49
278
+ msgid "Used by sending emails."
279
+ msgstr "Wird bei Emails verwendet."
280
+
281
+ #: admin/tabs/common-settings/page.php:52
282
+ msgid "Use WPML Strings"
283
+ msgstr "WPML Strings verwenden"
284
+
285
+ #: admin/tabs/common-settings/page.php:57
286
+ msgid ""
287
+ "Use WPML String Translation for text inputs. (E.g. Checkbox for comments.)"
288
+ msgstr ""
289
+ "WPML String Übersetzungen für Eingabefelder verwenden. (z.B. bei der "
290
+ "Checkbox für Kommentare)"
291
+
292
+ #: admin/tabs/common-settings/page.php:62
293
+ #: admin/tabs/common-settings/page.php:64
294
+ msgid "Comments"
295
+ msgstr "Kommentare"
296
+
297
+ #: admin/tabs/common-settings/page.php:64
298
+ msgid "Customizing possible with Blog/Premium edition."
299
+ msgstr "Anpassung ab der Blog/Premium Edition möglich."
300
+
301
+ #: admin/tabs/common-settings/page.php:65
302
+ msgid "Click here to get a license."
303
+ msgstr "Hier klicken um eine Lizenz anzufordern."
304
+
305
+ #: admin/tabs/common-settings/page.php:70
306
+ msgid "Checkbox for comments:"
307
+ msgstr "Checkbox bei Kommentaren:"
308
+
309
+ #: admin/tabs/common-settings/page.php:75
310
+ msgid ""
311
+ "Displays at checkbox which requires confirmation when creating a comment."
312
+ msgstr ""
313
+ "Zeigt eine Checkbox bei Kommentaren an welche die Zustimmung zu den DSGVO "
314
+ "Bestimmungen fordert."
315
+
316
+ #: admin/tabs/common-settings/page.php:80
317
+ msgid "Replace CF7 Acceptance text"
318
+ msgstr "CF7 Acceptance Text ersetzen"
319
+
320
+ #: admin/tabs/common-settings/page.php:87
321
+ msgid ""
322
+ "Replaces the text of CF7 Acceptance Checkboxes with following text. (Add to "
323
+ "your form: [acceptance dsgvo] Text[/acceptance])"
324
+ msgstr ""
325
+ "Überschreibt den Text von Acceptance Checkboxen von CF7 mit dem "
326
+ "nachfolgendem Text. (Im Formular erg&auml;nzen: [acceptance dsgvo] Text[/"
327
+ "acceptance])"
328
+
329
+ #: admin/tabs/common-settings/page.php:91 admin/tabs/cookie-notice/page.php:583
330
+ msgid "Text"
331
+ msgstr "Text"
332
+
333
+ #: admin/tabs/common-settings/page.php:93
334
+ msgid "Message text:"
335
+ msgstr "Meldungstext:"
336
+
337
+ #: admin/tabs/common-settings/page.php:99
338
+ msgid "Info text:"
339
+ msgstr "Hinweistext:"
340
+
341
+ #: admin/tabs/common-settings/page.php:107
342
+ msgid "Confirmation text"
343
+ msgstr "Zustimmungstext"
344
+
345
+ #: admin/tabs/common-settings/page.php:118
346
+ msgid "Company data"
347
+ msgstr "Unternehmensdaten"
348
+
349
+ #: admin/tabs/common-settings/page.php:119
350
+ msgid ""
351
+ "The following input fields represent the basic data necessary for the "
352
+ "creation of GDPR compliant data protection regulations and an imprint.<br /"
353
+ ">All entries made here are automatically used in the privacy policy and "
354
+ "imprint generated by the WP DSGVO Tools Plugin."
355
+ msgstr ""
356
+ "Die nachfolgenden Eingabefelder stellen die grundlegenden Daten dar, die zum "
357
+ "Erzeugen DSGVO-konformer Datenschutzbestimmungen sowie ein Impressum "
358
+ "notwendig sind.<br />Alle Eingaben die sie hier t&auml;tigen werden "
359
+ "automatisch in das vom WP DSGVO Tools Plugin generierten "
360
+ "Datenschutzbestimmungen sowie Impressum verwendet."
361
+
362
+ #: admin/tabs/common-settings/page.php:123
363
+ msgid "Company name:"
364
+ msgstr "Name des Unternehmens:"
365
+
366
+ #: admin/tabs/common-settings/page.php:130
367
+ msgid "Street:"
368
+ msgstr "Straße:"
369
+
370
+ #: admin/tabs/common-settings/page.php:137
371
+ msgid "ZIP + Location:"
372
+ msgstr "PLZ + Ort:"
373
+
374
+ #: admin/tabs/common-settings/page.php:144
375
+ msgid "Commercial book no.:"
376
+ msgstr "Firmenbuch Nr.:"
377
+
378
+ #: admin/tabs/common-settings/page.php:151
379
+ msgid "§11 Place of Jurisdiction:"
380
+ msgstr "Gerichtsstand:"
381
+
382
+ #: admin/tabs/common-settings/page.php:158
383
+ msgid "VAT No.:"
384
+ msgstr "USt. Id:"
385
+
386
+ #: admin/tabs/common-settings/page.php:165
387
+ msgid "Legal representatives:"
388
+ msgstr "Gesetzlicher Vertreter:"
389
+
390
+ #: admin/tabs/common-settings/page.php:169
391
+ msgid "The person who legally represents the company."
392
+ msgstr "Die Person die das Unternehmen gesetzlich vertritt."
393
+
394
+ #: admin/tabs/common-settings/page.php:172
395
+ msgid "Shareholder"
396
+ msgstr "Gesellschafter"
397
+
398
+ #: admin/tabs/common-settings/page.php:176
399
+ msgid "In case of companies please contact all shareholders here."
400
+ msgstr ""
401
+ "Im Fall von Gesellschaften hier bitte alle Gesellschafter anf&uuml;hren."
402
+
403
+ #: admin/tabs/common-settings/page.php:179
404
+ msgid "Responsible for content:"
405
+ msgstr "Verantwortlicher für Inhalt:"
406
+
407
+ #: admin/tabs/common-settings/page.php:183
408
+ msgid "The person responsible for the content on this website."
409
+ msgstr ""
410
+ "Die Person die f&uuml;r den Inhalt auf dieser Website verantwortlich ist."
411
+
412
+ #: admin/tabs/common-settings/page.php:186
413
+ msgid "Phone:"
414
+ msgstr "Telefon:"
415
+
416
+ #: admin/tabs/common-settings/page.php:193
417
+ msgid "Email:"
418
+ msgstr "Email:"
419
+
420
+ #: admin/tabs/common-settings/page.php:200
421
+ msgid "Newsletter service:"
422
+ msgstr "Newsletter Service:"
423
+
424
+ #: admin/tabs/common-settings/page.php:204
425
+ msgid ""
426
+ "Name of the shipping service provider with which the newsletters will be "
427
+ "sent."
428
+ msgstr ""
429
+ "Name des Versanddienstleisters mit dem die Newsletter versendet werden."
430
+
431
+ #: admin/tabs/common-settings/page.php:207
432
+ msgid "URL Privacy Police of Newsletter Service:"
433
+ msgstr "URL Datenschutz Newsletter Service:"
434
+
435
+ #: admin/tabs/common-settings/page.php:211
436
+ msgid "The URL to the terms of the newsletter service."
437
+ msgstr "Die URL zu den AGB des Dienstes"
438
+
439
+ #: admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-tab.php:11
440
+ #: admin/tabs/cookie-notice/page.php:4 admin/tabs/cookie-notice/page.php:152
441
+ msgid "Cookie Notice"
442
+ msgstr "Cookie Notice"
443
+
444
+ #: admin/tabs/cookie-notice/page.php:8
445
+ msgid "Tracker initialization:"
446
+ msgstr "Tracker Initialisierung:"
447
+
448
+ #: admin/tabs/cookie-notice/page.php:13
449
+ msgid "When loading the page"
450
+ msgstr "Beim Laden der Seite"
451
+
452
+ #: admin/tabs/cookie-notice/page.php:14
453
+ msgid "After approval of the cookie"
454
+ msgstr "Nach Zustimmung des Cookies"
455
+
456
+ #: admin/tabs/cookie-notice/page.php:16
457
+ msgid ""
458
+ "Specifies when the trackers should be active. Whether before the consent of "
459
+ "the cookie or after clicking on Ok. For After approval Reload after approval "
460
+ "must be checked."
461
+ msgstr ""
462
+ "Gibt an wann die Tracker aktiv sein sollen. Ob vor Zustimmung des Cookies "
463
+ "oder nach dem Klick auf Ok. Bei \"Nach Zustimmung\" muss \"Neuladen nach "
464
+ "Zustimmung\" angehakt sein."
465
+
466
+ #: admin/tabs/cookie-notice/page.php:27
467
+ msgid "Google Analyics"
468
+ msgstr "Google Analytics"
469
+
470
+ #: admin/tabs/cookie-notice/page.php:35
471
+ msgid "GTAG number:"
472
+ msgstr "GTAG Nummer:"
473
+
474
+ #: admin/tabs/cookie-notice/page.php:43
475
+ msgid ""
476
+ "The IP address will be anonymously and visitors get the option refuse "
477
+ "tracking. <br />Tip: Country specific geodata will be further tracked even "
478
+ "with anonymization."
479
+ msgstr ""
480
+ "Die IP Adresse wird anonymisiert und die Besucher erhalten die Möglichkeit "
481
+ "das Tracking abzulehnen.<br /> Tipp: Länderspezfische Geodaten werden auch "
482
+ "bei Anonymisierung weitergetracked."
483
+
484
+ #: admin/tabs/cookie-notice/page.php:51
485
+ msgid "Facebook Pixel"
486
+ msgstr "Facebook Pixel"
487
+
488
+ #: admin/tabs/cookie-notice/page.php:58
489
+ msgid "FB Pixel Id:"
490
+ msgstr "FB Pixel Id:"
491
+
492
+ #: admin/tabs/cookie-notice/page.php:66
493
+ msgid "Visitors maintained the opportunity to reject the tracking."
494
+ msgstr "Besucher erhalten die Möglichkeit das Tracking abzulehnen."
495
+
496
+ #: admin/tabs/cookie-notice/page.php:76
497
+ msgid "Use your own Codes (at own risk)"
498
+ msgstr "Eigenen Tracker Code verwenden (auf eigenes Risiko)"
499
+
500
+ #: admin/tabs/cookie-notice/page.php:100
501
+ msgid "Google Analytics code:"
502
+ msgstr "Google Analytics Code:"
503
+
504
+ #: admin/tabs/cookie-notice/page.php:106
505
+ msgid "If left blank, the standard GA script will be used"
506
+ msgstr "Wenn leer gelassen wird das Standard GA Skript verwenden."
507
+
508
+ #: admin/tabs/cookie-notice/page.php:125
509
+ msgid "Facebook Pixel code:"
510
+ msgstr "Facebook Pixel Code:"
511
+
512
+ #: admin/tabs/cookie-notice/page.php:131
513
+ msgid ""
514
+ "If left blank, the standard FB Pixel script will be used. [pixel_number] "
515
+ "will be replaced with FB Pixel ID."
516
+ msgstr "Wenn leer gelassen wird das Standard Pixel Skript verwenden."
517
+
518
+ #: admin/tabs/cookie-notice/page.php:147
519
+ msgid "Notice type"
520
+ msgstr "Meldungsart:"
521
+
522
+ #: admin/tabs/cookie-notice/page.php:151
523
+ msgid "No notice"
524
+ msgstr "keine Cookie Notice"
525
+
526
+ #: admin/tabs/cookie-notice/page.php:154
527
+ msgid "Privacy Popup"
528
+ msgstr "Datenschutzvereinbarungen Popup"
529
+
530
+ #: admin/tabs/cookie-notice/page.php:164
531
+ msgid "Popup logo"
532
+ msgstr "Popup Logo"
533
+
534
+ #: admin/tabs/cookie-notice/page.php:182 admin/tabs/services/page.php:108
535
+ #: admin/tabs/services/page.php:184
536
+ msgid "Upload image"
537
+ msgstr "Bild uploaden"
538
+
539
+ #: admin/tabs/cookie-notice/page.php:189
540
+ msgid "Close button action"
541
+ msgstr "Schließen Button Aktion"
542
+
543
+ #: admin/tabs/cookie-notice/page.php:193
544
+ msgid "Close popup"
545
+ msgstr "Popup schließen"
546
+
547
+ #: admin/tabs/cookie-notice/page.php:194
548
+ msgid "Redirect to URL"
549
+ msgstr "Umleitung zur URL"
550
+
551
+ #: admin/tabs/cookie-notice/page.php:201
552
+ msgid "Close button URL"
553
+ msgstr "Schließen Button URL"
554
+
555
+ #: admin/tabs/cookie-notice/page.php:210
556
+ msgid "Accordion title text"
557
+ msgstr "Überschrift für Optionsansicht"
558
+
559
+ #: admin/tabs/cookie-notice/page.php:225
560
+ msgid "Popup background:"
561
+ msgstr "Popup Hintergrund:"
562
+
563
+ #: admin/tabs/cookie-notice/page.php:240
564
+ msgid "Separators color:"
565
+ msgstr "Farbe der Trenner"
566
+
567
+ #: admin/tabs/cookie-notice/page.php:255
568
+ msgid "Font color:"
569
+ msgstr "Schriftfarbe:"
570
+
571
+ #: admin/tabs/cookie-notice/page.php:270
572
+ msgid "Links color:"
573
+ msgstr "Farbe der Links"
574
+
575
+ #: admin/tabs/cookie-notice/page.php:285
576
+ msgid "Links color (hover):"
577
+ msgstr "Farbe der Links (hover)"
578
+
579
+ #: admin/tabs/cookie-notice/page.php:300
580
+ msgid "Accept button font color:"
581
+ msgstr "Farbe des Akzeptieren Buttons"
582
+
583
+ #: admin/tabs/cookie-notice/page.php:315
584
+ msgid "Accept button background color:"
585
+ msgstr "Hintergrundfarbe des Akzeptieren Buttons"
586
+
587
+ #: admin/tabs/cookie-notice/page.php:342
588
+ msgid "Notice text:"
589
+ msgstr "Meldungstext:"
590
+
591
+ #: admin/tabs/cookie-notice/page.php:344
592
+ msgid "Insert the text here"
593
+ msgstr "Text hier eingeben"
594
+
595
+ #: admin/tabs/cookie-notice/page.php:348
596
+ msgid "Validity:"
597
+ msgstr "Gültigkeit:"
598
+
599
+ #: admin/tabs/cookie-notice/page.php:354
600
+ msgid "Tag"
601
+ msgstr "Tag"
602
+
603
+ #: admin/tabs/cookie-notice/page.php:356
604
+ msgid "Woche"
605
+ msgstr "Woche"
606
+
607
+ #: admin/tabs/cookie-notice/page.php:358 admin/tabs/cookie-notice/page.php:360
608
+ #: admin/tabs/cookie-notice/page.php:362
609
+ msgid "Month"
610
+ msgstr "Monat"
611
+
612
+ #: admin/tabs/cookie-notice/page.php:364
613
+ msgid "Year"
614
+ msgstr "Jahr"
615
+
616
+ #: admin/tabs/cookie-notice/page.php:366
617
+ msgid "For this period, the cookie is navigation use validly."
618
+ msgstr "Für diesen Zeitraum ist der Cookie gültig."
619
+
620
+ #: admin/tabs/cookie-notice/page.php:375
621
+ msgid "Confirmation"
622
+ msgstr "Zustimmung"
623
+
624
+ #: admin/tabs/cookie-notice/page.php:380 admin/tabs/cookie-notice/page.php:417
625
+ #: admin/tabs/cookie-notice/page.php:465
626
+ msgid "Button text:"
627
+ msgstr "Buttontext:"
628
+
629
+ #: admin/tabs/cookie-notice/page.php:385
630
+ msgid "zB.: Ok"
631
+ msgstr "Ok"
632
+
633
+ #: admin/tabs/cookie-notice/page.php:386
634
+ msgid "The text to be displayed is to accept the note and hide the message."
635
+ msgstr ""
636
+ "Der Text der angezeigt werden soll um den Hinweis zu akzeptieren und die "
637
+ "Nachricht ausblendet."
638
+
639
+ #: admin/tabs/cookie-notice/page.php:391
640
+ msgid "Reload after confirm:"
641
+ msgstr "Neuladen nach Zustimmung:"
642
+
643
+ #: admin/tabs/cookie-notice/page.php:397
644
+ msgid "Enable this option to reload the page after accepting cookies."
645
+ msgstr ""
646
+ "Aktiviere diese Option, um die Seite neu zu laden, nachdem Cookies "
647
+ "akzeptiert wurden."
648
+
649
+ #: admin/tabs/cookie-notice/page.php:402 public/class-sp-dsgvo-public.php:184
650
+ msgid "Decline"
651
+ msgstr "Ablehnen"
652
+
653
+ #: admin/tabs/cookie-notice/page.php:407 admin/tabs/cookie-notice/page.php:454
654
+ msgid "Button active:"
655
+ msgstr "Button aktiv:"
656
+
657
+ #: admin/tabs/cookie-notice/page.php:423
658
+ msgid "eg.: Decline"
659
+ msgstr "zB.: Ablehnen"
660
+
661
+ #: admin/tabs/cookie-notice/page.php:424
662
+ msgid "The text of the option to decline cookies."
663
+ msgstr "Der Text der Option zum Ablehnen von Cookies."
664
+
665
+ #: admin/tabs/cookie-notice/page.php:429
666
+ msgid "Link target for rejection:"
667
+ msgstr "Linkziel bei Ablehnung:"
668
+
669
+ #: admin/tabs/cookie-notice/page.php:435
670
+ msgid "zb.: www.google.at"
671
+ msgstr "zb.: www.google.at"
672
+
673
+ #: admin/tabs/cookie-notice/page.php:436
674
+ msgid ""
675
+ "Specifies the destination where visitors who want to reject the message "
676
+ "should be forwarded."
677
+ msgstr ""
678
+ "Gibt das Ziel an wohin Besucher, die die Nachricht ablehnen weitergeleitet "
679
+ "werden sollen."
680
+
681
+ #: admin/tabs/cookie-notice/page.php:440
682
+ msgid "Do not set a cookie on forwarding:"
683
+ msgstr "Kein Cookie setzen bei Weiterleitung:"
684
+
685
+ #: admin/tabs/cookie-notice/page.php:445
686
+ msgid ""
687
+ "If active, the visitor refuses and returns to the page, the notice will "
688
+ "reappear."
689
+ msgstr ""
690
+ "Wenn aktiv, der Besucher ablehnt und erneut auf die Seite kommt wird ihm die "
691
+ "Notice wieder angezeigt."
692
+
693
+ #: admin/tabs/cookie-notice/page.php:449 public/class-sp-dsgvo-public.php:195
694
+ msgid "Read more"
695
+ msgstr "Weiterlesen"
696
+
697
+ #: admin/tabs/cookie-notice/page.php:471
698
+ msgid "zB.: Erfahre mehr"
699
+ msgstr "zB.: Erfahre mehr"
700
+
701
+ #: admin/tabs/cookie-notice/page.php:472
702
+ msgid "The text of the option to obtain more information"
703
+ msgstr "Der Text der Option zum Erhalten von mehr Informationen."
704
+
705
+ #: admin/tabs/cookie-notice/page.php:476
706
+ msgid "Link destination to read on:"
707
+ msgstr "Linkziel zum Weiterlesen:"
708
+
709
+ #: admin/tabs/cookie-notice/page.php:489
710
+ msgid ""
711
+ "Specifies the destination to where visitors will find more information about "
712
+ "cookies."
713
+ msgstr ""
714
+ "Gibt das Ziel an wohin Besucher weitere Informationen über Cookies finden."
715
+
716
+ #: admin/tabs/cookie-notice/page.php:495
717
+ msgid "Options for displaying the cookie notice."
718
+ msgstr "Optionen zur Darstellung der Cookie Notice"
719
+
720
+ #: admin/tabs/cookie-notice/page.php:499
721
+ msgid "Position:"
722
+ msgstr "Position:"
723
+
724
+ #: admin/tabs/cookie-notice/page.php:503
725
+ msgid "On top"
726
+ msgstr "Oben"
727
+
728
+ #: admin/tabs/cookie-notice/page.php:505
729
+ msgid "Bottom"
730
+ msgstr "Unten"
731
+
732
+ #: admin/tabs/cookie-notice/page.php:507
733
+ msgid "Specifies the location where the cookie notice should be displayed."
734
+ msgstr "Gibt die Position an wo die Cookie Notice angezeigt werden soll."
735
+
736
+ #: admin/tabs/cookie-notice/page.php:511
737
+ msgid "Animation"
738
+ msgstr "Animation"
739
+
740
+ #: admin/tabs/cookie-notice/page.php:516
741
+ msgid "None"
742
+ msgstr "Keine"
743
+
744
+ #: admin/tabs/cookie-notice/page.php:518
745
+ msgid "fade"
746
+ msgstr "Ausgleiten"
747
+
748
+ #: admin/tabs/cookie-notice/page.php:520
749
+ msgid "hide"
750
+ msgstr "Ausblenden"
751
+
752
+ #: admin/tabs/cookie-notice/page.php:522
753
+ msgid "Animation when accepting the cookie message."
754
+ msgstr "Animation beim Akzeptieren der Cookie-Nachricht."
755
+
756
+ #: admin/tabs/cookie-notice/page.php:533 admin/tabs/cookie-notice/page.php:535
757
+ msgid "Color adjustment"
758
+ msgstr "Farbliche Anpassung"
759
+
760
+ #: admin/tabs/cookie-notice/page.php:535
761
+ msgid "Possible with blog or premium edition"
762
+ msgstr "Anpassung ab der Blog/Premium Edition möglich."
763
+
764
+ #: admin/tabs/cookie-notice/page.php:536
765
+ msgid "Click here to get a license"
766
+ msgstr "Hier klicken um eine Lizenz zu erhalten."
767
+
768
+ #: admin/tabs/cookie-notice/page.php:541
769
+ msgid "Background:"
770
+ msgstr "Hintergrund:"
771
+
772
+ #: admin/tabs/cookie-notice/page.php:550
773
+ msgid "Text:"
774
+ msgstr "Text:"
775
+
776
+ #: admin/tabs/cookie-notice/page.php:558
777
+ msgid "Buttons"
778
+ msgstr "Buttons"
779
+
780
+ #: admin/tabs/cookie-notice/page.php:559
781
+ msgid "Background"
782
+ msgstr "Hintergrund"
783
+
784
+ #: admin/tabs/cookie-notice/page.php:564
785
+ msgid "Font:"
786
+ msgstr "Schrift:"
787
+
788
+ #: admin/tabs/cookie-notice/page.php:571
789
+ msgid "CSS Classes"
790
+ msgstr "CSS Klassen"
791
+
792
+ #: admin/tabs/cookie-notice/page.php:572
793
+ msgid ""
794
+ "The colors listed under \"Color Changes“ must be overwritten with !Important."
795
+ msgstr ""
796
+ "Die unter \"Farbliche Anpassung\" angeführten Farben müssen mit !important "
797
+ "überschrieben werden."
798
+
799
+ #: admin/tabs/cookie-notice/page.php:575
800
+ msgid "Cookie notice:"
801
+ msgstr "Cookie Notice:"
802
+
803
+ #: admin/tabs/cookie-notice/page.php:591
804
+ msgid "Buttons:"
805
+ msgstr "Buttons:"
806
+
807
+ #: admin/tabs/cookie-notice/page.php:599
808
+ msgid "Further display options"
809
+ msgstr "Weitere Darstellungsoptionen"
810
+
811
+ #: admin/tabs/cookie-notice/page.php:602
812
+ msgid "Font size"
813
+ msgstr "Textgröße"
814
+
815
+ #: admin/tabs/cookie-notice/page.php:609 admin/tabs/cookie-notice/page.php:632
816
+ #: admin/tabs/services/page.php:62 admin/tabs/services/page.php:128
817
+ #: admin/tabs/services/page.php:167
818
+ msgid "Default"
819
+ msgstr "Standard"
820
+
821
+ #: admin/tabs/cookie-notice/page.php:625
822
+ msgid "Height of cookie notice"
823
+ msgstr "Höhe der Cookie Notice"
824
+
825
+ #: admin/tabs/cookie-notice/page.php:647
826
+ msgid "Show icon:"
827
+ msgstr "Icon anzeigen:"
828
+
829
+ #: admin/tabs/cookie-notice/page.php:656
830
+ msgid "Use overlay"
831
+ msgstr "Overlay verwenden"
832
+
833
+ #: admin/tabs/cookie-notice/page.php:662
834
+ msgid ""
835
+ "Displays a gray background and prevents the visitor from interacting with "
836
+ "the site before making a choice."
837
+ msgstr ""
838
+ "Blendet einen grauen Hintergrund ein und verhindert das Besucher mit der "
839
+ "Site agieren bevor eine Wahl getroffen wurde."
840
+
841
+ #: admin/tabs/gravity-forms/class-sp-dsgvo-gravity-forms-tab.php:10
842
+ #: admin/tabs/gravity-forms/page.php:4
843
+ msgid "Gravity Forms"
844
+ msgstr "Gravity Forms"
845
+
846
+ #: admin/tabs/gravity-forms/page.php:6
847
+ msgid ""
848
+ "With these settings the saving behavior of Gravity Forms can be configured."
849
+ msgstr ""
850
+ "Mit diesen Einstellungen kann das Speicherverhalten von Gravity Forms "
851
+ "konfiguriert werden."
852
+
853
+ #: admin/tabs/gravity-forms/page.php:13
854
+ msgid "Do not save form data in the database"
855
+ msgstr "Keine Formulardaten in der Datenbank speichern"
856
+
857
+ #: admin/tabs/gravity-forms/page.php:17
858
+ msgid ""
859
+ "If activated, no data will be stored, but only sent by e-mail. (Note: This "
860
+ "option overrides form-specific settings).)."
861
+ msgstr ""
862
+ "Wenn aktiviert, werden keine Daten gespeichert, sonder nur per Email "
863
+ "versendet. (Anmerkung: Diese Option überschreibt formularspezfische "
864
+ "Einstellungen)."
865
+
866
+ #: admin/tabs/gravity-forms/page.php:20
867
+ msgid "Do not save IP address and user agent in database"
868
+ msgstr "Keine IP Addresse und User Agent speichern"
869
+
870
+ #: admin/tabs/gravity-forms/page.php:24
871
+ msgid ""
872
+ "By default, if this checkbox is checked, this will be prevented from saving "
873
+ "the IP address and user agent of the sender."
874
+ msgstr ""
875
+ "Standardmäßig speichert Gravity Forms die IP Adresse und den User Agent des "
876
+ "Absenders. Wenn diese Checkbox aktiviert ist, wird dies verhindert."
877
+
878
+ #: admin/tabs/gravity-forms/page.php:34
879
+ msgid "Specific form settings"
880
+ msgstr "Spezifische Formulareinstellungen"
881
+
882
+ #: admin/tabs/gravity-forms/page.php:35
883
+ msgid ""
884
+ "For each Gravity Forms form, it can be subsequently defined for each field "
885
+ "whether the data of the input field is stored in the database or not."
886
+ msgstr ""
887
+ "Für jedes Gravity Forms Formular kann nachfolgend pro Feld definiert werden, "
888
+ "ob die Daten des Eingabefeldes in der Datenbank gespeichert werden oder "
889
+ "nicht."
890
+
891
+ #: admin/tabs/gravity-forms/page.php:46
892
+ msgid "Nicht in der Datenbank speichern."
893
+ msgstr "Nicht in der Datenbank speichern."
894
+
895
+ #: admin/tabs/imprint/page.php:2
896
+ msgid ""
897
+ "With the shortcode <code>[imprint]</code> an inprint automatically gets "
898
+ "generated. The data will be taken from general settings."
899
+ msgstr ""
900
+ "Eine Seite erstellen die den Shortcode <code>[imprint]</code> verwendet."
901
+
902
+ #: admin/tabs/imprint/page.php:10
903
+ msgid "Imprint Page"
904
+ msgstr "Impressum Seite"
905
+
906
+ #: admin/tabs/imprint/page.php:14 admin/tabs/privacy-policy/page.php:15
907
+ #: admin/tabs/services/page.php:17
908
+ msgid "Page"
909
+ msgstr "Seite"
910
+
911
+ #: admin/tabs/imprint/page.php:16 admin/tabs/privacy-policy/page.php:17
912
+ #: admin/tabs/services/page.php:19
913
+ #: admin/tabs/subject-access-request/page.php:56
914
+ #: admin/tabs/super-unsubscribe/page.php:126
915
+ msgid "Select"
916
+ msgstr "Wählen"
917
+
918
+ #: admin/tabs/imprint/page.php:26
919
+ msgid "Create a page that uses the shortcode <code>[imprint]</code>."
920
+ msgstr ""
921
+ "Eine Seite erstellen die den Shortcode <code>[imprint]</code> verwendet."
922
+
923
+ #: admin/tabs/imprint/page.php:26 admin/tabs/services/page.php:37
924
+ #: admin/tabs/subject-access-request/page.php:71
925
+ #: admin/tabs/super-unsubscribe/page.php:140
926
+ msgid "Create page"
927
+ msgstr "Seite erstellen"
928
+
929
+ #: admin/tabs/imprint/page.php:28
930
+ msgid ""
931
+ "Attention: The shortcode <code>[imprint]</code> was not found on the page "
932
+ "you selected."
933
+ msgstr ""
934
+ "Achtung: Der Shortcode <code>[imprint]</code> wurde auf der von ihnen "
935
+ "gewählten Seite nicht gefunden."
936
+
937
+ #: admin/tabs/imprint/page.php:28 admin/tabs/imprint/page.php:30
938
+ #: admin/tabs/privacy-policy/page.php:27 admin/tabs/privacy-policy/page.php:29
939
+ #: admin/tabs/privacy-policy/page.php:31 admin/tabs/services/page.php:41
940
+ #: admin/tabs/services/page.php:43
941
+ #: admin/tabs/subject-access-request/page.php:76
942
+ #: admin/tabs/subject-access-request/page.php:79
943
+ #: admin/tabs/super-unsubscribe/page.php:145
944
+ #: admin/tabs/super-unsubscribe/page.php:148
945
+ msgid "Edit page"
946
+ msgstr "Seite bearbeiten"
947
+
948
+ #: admin/tabs/imprint/page.php:40 admin/tabs/privacy-policy/page.php:61
949
+ msgid ""
950
+ "Note: In order to be able to reset or reload the text (eg: after changing "
951
+ "the language), highlight the text, delete it and click save. Thus, the text "
952
+ "is reloaded."
953
+ msgstr ""
954
+ "Hinweis: Um den Text zurückzusetzen bzw. neuladen zu können (zB. nach Ändern "
955
+ "der Sprache), den Text markieren, löschen und auf speichern klicken. Somit "
956
+ "wird der Text neu geladen."
957
+
958
+ #: admin/tabs/integrations/class-sp-dsgvo-integrations-tab.php:10
959
+ #: admin/tabs/integrations/page.php:1
960
+ msgid "Integrations"
961
+ msgstr "Integrationen"
962
+
963
+ #: admin/tabs/integrations/page.php:14
964
+ msgid "No integrations installed"
965
+ msgstr "Keine Integrationen installiert"
966
+
967
+ #: admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-tab.php:11
968
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:51
969
+ msgid "Privacy Policy"
970
+ msgstr "Datenschutzvereinbarungen"
971
+
972
+ #: admin/tabs/privacy-policy/page.php:3
973
+ msgid ""
974
+ "The shortcode <code>[privacy_policy]</code> generates a privacy page from "
975
+ "the input made under General Settings."
976
+ msgstr ""
977
+ "Mit dem Shortcode <code>[privacy_policy]</code> wird eine Datenschutzseite "
978
+ "aus den unter Allgemeinen Einstellungen getätigten Eingaben generiert."
979
+
980
+ #: admin/tabs/privacy-policy/page.php:5
981
+ msgid ""
982
+ "Initially, this text is filled with a template. The text blocks in the "
983
+ "square brackets ([]) are filled with the values ​​that you entered in the "
984
+ "General Settings. You can customize the entire text to your requirements, as "
985
+ "well as delete passages if they do not apply to them."
986
+ msgstr ""
987
+ "Initial wird dieser Text mit einer Vorlage befüllt. Die Textbausteine in den "
988
+ "rechteckigen Klammern ([]) werden mit den Werten belegt, die sie in den "
989
+ "Allgemeinen Einstellungen eingegeben haben. Sie können den kompletten Text "
990
+ "ihren Anforderungen anpassen, sowie Textpassagen rauslöschen falls diese bei "
991
+ "ihnen nicht zutreffen."
992
+
993
+ #: admin/tabs/privacy-policy/page.php:27
994
+ msgid "Create a page that uses the shortcode <code>[privacy_policy]</code>."
995
+ msgstr ""
996
+ "Eine Seite erstellen die den Shortcode <code>[privacy_policy]</code> "
997
+ "verwendet."
998
+
999
+ #: admin/tabs/privacy-policy/page.php:29
1000
+ msgid ""
1001
+ "Attention: The shortcode <code>[privacy_policy]</code> was not found on the "
1002
+ "page you selected."
1003
+ msgstr ""
1004
+ "Achtung: Der Shortcode <code>[privacy_policy]</code> wurde auf der von ihnen "
1005
+ "gewählten Seite nicht gefunden."
1006
+
1007
+ #: admin/tabs/privacy-policy/page.php:36
1008
+ msgid "Show checkbox at WooCommerce checkout to confirm privacy policy"
1009
+ msgstr "Datenschutz Checkbox bei Woo Checkout anzeigen"
1010
+
1011
+ #: admin/tabs/privacy-policy/page.php:48
1012
+ msgid "I have read and accepted the Privacy Policy."
1013
+ msgstr "Ich habe die Datenschutzbestimmungen gelesen und akzeptiert."
1014
+
1015
+ #: admin/tabs/privacy-policy/page.php:51
1016
+ msgid "WooCommerce privacy policy text"
1017
+ msgstr "WooCommerce Datenschutz Text"
1018
+
1019
+ #: admin/tabs/services/class-sp-dsgvo-delete-service-action.php:22
1020
+ msgid "Third-party service deleted by"
1021
+ msgstr "Datenschutz Checkbox bei Woo Registrierung anzeigen"
1022
+
1023
+ #: admin/tabs/services/class-sp-dsgvo-services-tab.php:10
1024
+ msgid "Privacy policy & Plugins"
1025
+ msgstr "Datenschutz & Plugins"
1026
+
1027
+ #: admin/tabs/services/page.php:1
1028
+ msgid "Privacy: Settings and 3rd party plugins"
1029
+ msgstr "Datenschutz: Einstellungen und 3rd Party Plugins"
1030
+
1031
+ #: admin/tabs/services/page.php:2
1032
+ msgid ""
1033
+ "All 3rd Party Plugins (Google Analytics, Facebook Pixel, ..) can be listed "
1034
+ "here to give their users a selective opt-in / opt-out."
1035
+ msgstr ""
1036
+ "Hier können alle 3rd Party Plugins (Google Analytics, Facebook Pixel,..) "
1037
+ "aufgelistet werden um ihren Benutzern ein selektives Opt-In/Opt-Out zu "
1038
+ "ermöglichen."
1039
+
1040
+ #: admin/tabs/services/page.php:3
1041
+ msgid ""
1042
+ "With the shortcode <code>[display_services]</code> these services can then "
1043
+ "be displayed to the user."
1044
+ msgstr ""
1045
+ "Mit dem Shortcode <code>[display_services]</code> können diese Dienste dann "
1046
+ "dem User angezeigt werden."
1047
+
1048
+ #: admin/tabs/services/page.php:12
1049
+ msgid "Datenschutz Seite für ihre Benutzer"
1050
+ msgstr "Datenschutz Seite für ihre Benutzer"
1051
+
1052
+ #: admin/tabs/services/page.php:29
1053
+ msgid ""
1054
+ "Specifies the page where users have the option to customize their privacy "
1055
+ "settings (selective opt-in / opt-out)."
1056
+ msgstr ""
1057
+ "Gibt die Seite an auf der Benutzer die Möglichkeit haben ihre "
1058
+ "Datenschutzeinstellungen (selektivies Opt-In/Opt-out) anzupassen."
1059
+
1060
+ #: admin/tabs/services/page.php:35
1061
+ msgid ""
1062
+ "Create a page that uses the shortcode <code>[user_privacy_settings_form]</"
1063
+ "code>."
1064
+ msgstr ""
1065
+ "Eine Seite erstellen die den Shortcode <code>[user_privacy_settings_form]</"
1066
+ "code> verwendet."
1067
+
1068
+ #: admin/tabs/services/page.php:41
1069
+ msgid ""
1070
+ "Attention: The shortcode <code>[user_privacy_settings_form]</code> was not "
1071
+ "found on the selected page. The form will not be displayed."
1072
+ msgstr ""
1073
+ "Achtung: Der Shortcode <code>[user_privacy_settings_form]</code> wurde auf "
1074
+ "der gewählten Seite nicht gefunden. Das Formular wird somit nicht angezeigt."
1075
+
1076
+ #: admin/tabs/services/page.php:44
1077
+ msgid ""
1078
+ "The shortcode <code>[user_privacy_settings_form]</code> allows the user to "
1079
+ "activate or deactivate services on the selected page."
1080
+ msgstr ""
1081
+ "Mit dem Shortcode <code>[user_privacy_settings_form]</code> wird dem User "
1082
+ "auf der gewählten Seite ermöglicht Dienste zu aktivieren bzw deaktivieren."
1083
+
1084
+ #: admin/tabs/services/page.php:58 admin/tabs/services/page.php:124
1085
+ msgid "Slug"
1086
+ msgstr "Slug"
1087
+
1088
+ #: admin/tabs/services/page.php:59 admin/tabs/services/page.php:125
1089
+ #: admin/tabs/services/page.php:146
1090
+ #: includes/class-sp-dsgvo-data-collecter.php:66
1091
+ #: includes/class-sp-dsgvo-data-collecter.php:71
1092
+ #: includes/class-sp-dsgvo-data-collecter.php:78
1093
+ #: includes/class-sp-dsgvo-data-collecter.php:132
1094
+ #: includes/class-sp-dsgvo-data-collecter.php:146
1095
+ #: includes/class-sp-dsgvo-data-collecter.php:169
1096
+ msgid "Name"
1097
+ msgstr "Name"
1098
+
1099
+ #: admin/tabs/services/page.php:60 admin/tabs/services/page.php:126
1100
+ #: admin/tabs/services/page.php:153 templates/de_DE/emails/feedback.php:10
1101
+ #: templates/en_EN/emails/feedback.php:10
1102
+ #: templates/en_US/emails/feedback.php:10
1103
+ msgid "Reason"
1104
+ msgstr "Grund"
1105
+
1106
+ #: admin/tabs/services/page.php:61 admin/tabs/services/page.php:127
1107
+ #: admin/tabs/services/page.php:160
1108
+ msgid "Terms Url"
1109
+ msgstr "AGB URL"
1110
+
1111
+ #: admin/tabs/services/page.php:63 admin/tabs/services/page.php:178
1112
+ msgid "Image"
1113
+ msgstr "Bild"
1114
+
1115
+ #: admin/tabs/services/page.php:64 admin/tabs/services/page.php:114
1116
+ #: admin/tabs/services/page.php:129 admin/tabs/super-unsubscribe/page.php:73
1117
+ #: admin/tabs/super-unsubscribe/page.php:86
1118
+ #: admin/tabs/super-unsubscribe/page.php:99
1119
+ #: admin/tabs/super-unsubscribe/page.php:112
1120
+ msgid "Delete"
1121
+ msgstr "Löschen"
1122
+
1123
+ #: admin/tabs/services/page.php:85
1124
+ msgid "Terms & Conditions link"
1125
+ msgstr "AGB URL"
1126
+
1127
+ #: admin/tabs/services/page.php:89 admin/tabs/services/page.php:170
1128
+ #: public/shortcodes/privacy-settings-form.php:19
1129
+ msgid "Enabled"
1130
+ msgstr "Aktiviert"
1131
+
1132
+ #: admin/tabs/services/page.php:90 admin/tabs/services/page.php:171
1133
+ msgid "Disabled"
1134
+ msgstr "Deaktiviert"
1135
+
1136
+ #: admin/tabs/services/page.php:142 admin/tabs/services/page.php:193
1137
+ msgid "Add service"
1138
+ msgstr "Dienst hinzuf&uuml;gen"
1139
+
1140
+ #: admin/tabs/services/page.php:149
1141
+ msgid "Service name"
1142
+ msgstr "Dienstname"
1143
+
1144
+ #: admin/tabs/services/page.php:156
1145
+ #: public/shortcodes/privacy-settings-form.php:17
1146
+ msgid "Reason for use"
1147
+ msgstr "Grund der Nutzung"
1148
+
1149
+ #: admin/tabs/services/page.php:163
1150
+ msgid "The URL pointing to the terms of the service"
1151
+ msgstr "Die URL zu den AGB des Dienstes"
1152
+
1153
+ #: admin/tabs/services/page.php:173
1154
+ msgid "Indicates whether the service should be enabled by default or not."
1155
+ msgstr "Gibt an ob der Dienst standardmäßig aktiviert sein soll oder nicht."
1156
+
1157
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:18
1158
+ msgid "Plugin installed"
1159
+ msgstr "Plugin installiert"
1160
+
1161
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:36
1162
+ #: admin/tabs/subject-access-request/class-sp-dsgvo-subject-access-request-tab.php:10
1163
+ #: templates/de_DE/emails/subject-access-request.php:21
1164
+ #: templates/en_EN/emails/subject-access-request.php:21
1165
+ #: templates/en_US/emails/subject-access-request.php:21
1166
+ msgid "Subject Access Request"
1167
+ msgstr "Datenauszug"
1168
+
1169
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:41
1170
+ msgid "User privacy settings"
1171
+ msgstr "Datenschutzeinstellungen Benutzer Seite"
1172
+
1173
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:46
1174
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:67
1175
+ msgid "Terms & Conditions"
1176
+ msgstr "AGB"
1177
+
1178
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:56
1179
+ #: templates/de_DE/emails/super-unsubscribe.php:20
1180
+ #: templates/en_EN/emails/super-unsubscribe.php:20
1181
+ #: templates/en_US/emails/super-unsubscribe.php:20
1182
+ msgid "Delete Request"
1183
+ msgstr "L&ouml;schanfrage"
1184
+
1185
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:72
1186
+ msgid "Opt-out"
1187
+ msgstr "Opt-out"
1188
+
1189
+ #: admin/tabs/setup/class-sp-dsgvo-setup-tab.php:9 admin/tabs/setup/page.php:1
1190
+ msgid "Setup"
1191
+ msgstr "Setup"
1192
+
1193
+ #: admin/tabs/subject-access-request/page.php:1
1194
+ msgid "Subject Access Requests"
1195
+ msgstr "Datenauszugsanfrage"
1196
+
1197
+ #: admin/tabs/subject-access-request/page.php:2
1198
+ msgid ""
1199
+ "This feature allows users to request a digest of all data stored by you. "
1200
+ "<br> All data in your database is checked for confidential data and sent to "
1201
+ "the User by email."
1202
+ msgstr ""
1203
+ "Mit diesem Feature können User einen Auszug über alle von ihnen "
1204
+ "gespeicherten Daten anfordern. Alle Daten in ihrer Datenbank werden auf "
1205
+ "vertrauliche Daten überprüft und dem User per Email gesendet."
1206
+
1207
+ #: admin/tabs/subject-access-request/page.php:14
1208
+ #: admin/tabs/super-unsubscribe/page.php:14
1209
+ msgid "Automatic processing"
1210
+ msgstr "Automatisch Abarbeitung"
1211
+
1212
+ #: admin/tabs/subject-access-request/page.php:19
1213
+ #: admin/tabs/super-unsubscribe/page.php:52
1214
+ msgid "none"
1215
+ msgstr "keine"
1216
+
1217
+ #: admin/tabs/subject-access-request/page.php:20
1218
+ msgid "day"
1219
+ msgstr "Tag"
1220
+
1221
+ #: admin/tabs/subject-access-request/page.php:21
1222
+ #: admin/tabs/subject-access-request/page.php:22
1223
+ msgid "days"
1224
+ msgstr "Tage"
1225
+
1226
+ #: admin/tabs/subject-access-request/page.php:23
1227
+ msgid "weeks"
1228
+ msgstr "Wochen"
1229
+
1230
+ #: admin/tabs/subject-access-request/page.php:26
1231
+ msgid ""
1232
+ "Requests will be automatically processed after the set time and sent to the "
1233
+ "user."
1234
+ msgstr ""
1235
+ "Anfragen werden nach eingestellter Zeit automatisch bearbeitet und dem User "
1236
+ "gesendet."
1237
+
1238
+ #: admin/tabs/subject-access-request/page.php:30
1239
+ #: admin/tabs/super-unsubscribe/page.php:27
1240
+ msgid "Email for new application:"
1241
+ msgstr "Email bei Neuantrag:"
1242
+
1243
+ #: admin/tabs/subject-access-request/page.php:37
1244
+ #: admin/tabs/super-unsubscribe/page.php:34
1245
+ msgid "Send a notification for a new application to the admin email address."
1246
+ msgstr ""
1247
+ "Eine Benachrichtigung bei neuem Antrag an die Admin Emailadresse senden."
1248
+
1249
+ #: admin/tabs/subject-access-request/page.php:41
1250
+ msgid "GDPR consent text:"
1251
+ msgstr "DSGVO Zustimmungstext:"
1252
+
1253
+ #: admin/tabs/subject-access-request/page.php:46
1254
+ msgid "The text to be displayed in the GDPR checkbox for data storage."
1255
+ msgstr ""
1256
+ "Der Text der bei der Checkbox für die Datenspeicherung angezeigt werden soll"
1257
+
1258
+ #: admin/tabs/subject-access-request/page.php:51
1259
+ msgid "Request page:"
1260
+ msgstr "Seite zum Anfordern:"
1261
+
1262
+ #: admin/tabs/subject-access-request/page.php:65
1263
+ msgid ""
1264
+ "Specifies the page on which users have the option to request their data "
1265
+ "extract."
1266
+ msgstr ""
1267
+ "Gibt die Seite an auf der Benutzer die Möglichkeit haben ihren Datenauszug "
1268
+ "anzufordern."
1269
+
1270
+ #: admin/tabs/subject-access-request/page.php:69
1271
+ msgid "Create a page using the shortcode <code>[sar_form]</code>."
1272
+ msgstr ""
1273
+ "Eine Seite erstellen die den Shortcode <code>[sar_form]</code> verwendet."
1274
+
1275
+ #: admin/tabs/subject-access-request/page.php:75
1276
+ msgid ""
1277
+ "Attention: The shortcode <code>[sar_form]</code> of the selected page was "
1278
+ "not found. Thus, the user has no opportunity to request the data."
1279
+ msgstr ""
1280
+ "Achtung: Der Shortcode <code>[sar_form]</code> wurde auf der von ihnen "
1281
+ "gew&auml;hlten Seite nicht gefunden. Somit hat der User keine M&ouml;"
1282
+ "glichkeit zur Anforderung der Daten."
1283
+
1284
+ #: admin/tabs/subject-access-request/page.php:100
1285
+ #: admin/tabs/subject-access-request/page.php:161
1286
+ #: admin/tabs/super-unsubscribe/page.php:199
1287
+ #: admin/tabs/super-unsubscribe/page.php:278
1288
+ msgid "ID"
1289
+ msgstr "ID"
1290
+
1291
+ #: admin/tabs/subject-access-request/page.php:102
1292
+ #: admin/tabs/subject-access-request/page.php:162
1293
+ #: admin/tabs/subject-access-request/page.php:193
1294
+ #: admin/tabs/super-unsubscribe/page.php:201
1295
+ #: admin/tabs/super-unsubscribe/page.php:279
1296
+ #: admin/tabs/super-unsubscribe/page.php:312
1297
+ #: includes/class-sp-dsgvo-data-collecter.php:79
1298
+ #: includes/class-sp-dsgvo-data-collecter.php:133
1299
+ #: includes/class-sp-dsgvo-data-collecter.php:170
1300
+ #: includes/class-sp-dsgvo-data-collecter.php:376
1301
+ #: public/shortcodes/subject-access-request/subject-access-request.php:38
1302
+ #: public/shortcodes/subject-access-request/subject-access-request.php:39
1303
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:42
1304
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:43
1305
+ msgid "Email"
1306
+ msgstr "Email"
1307
+
1308
+ #: admin/tabs/subject-access-request/page.php:104
1309
+ #: admin/tabs/subject-access-request/page.php:163
1310
+ #: admin/tabs/subject-access-request/page.php:198
1311
+ #: admin/tabs/super-unsubscribe/page.php:203
1312
+ #: admin/tabs/super-unsubscribe/page.php:280
1313
+ #: admin/tabs/super-unsubscribe/page.php:317
1314
+ #: public/shortcodes/subject-access-request/subject-access-request.php:26
1315
+ #: public/shortcodes/subject-access-request/subject-access-request.php:27
1316
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:30
1317
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:31
1318
+ msgid "First name"
1319
+ msgstr "Vorname"
1320
+
1321
+ #: admin/tabs/subject-access-request/page.php:106
1322
+ #: admin/tabs/subject-access-request/page.php:164
1323
+ #: admin/tabs/subject-access-request/page.php:203
1324
+ #: admin/tabs/super-unsubscribe/page.php:205
1325
+ #: admin/tabs/super-unsubscribe/page.php:281
1326
+ #: admin/tabs/super-unsubscribe/page.php:322
1327
+ #: public/shortcodes/subject-access-request/subject-access-request.php:31
1328
+ #: public/shortcodes/subject-access-request/subject-access-request.php:32
1329
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:35
1330
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:36
1331
+ msgid "Last name"
1332
+ msgstr "Nachname"
1333
+
1334
+ #: admin/tabs/subject-access-request/page.php:108
1335
+ #: admin/tabs/subject-access-request/page.php:165
1336
+ #: admin/tabs/subject-access-request/page.php:208
1337
+ #: admin/tabs/super-unsubscribe/page.php:207
1338
+ #: admin/tabs/super-unsubscribe/page.php:282
1339
+ #: admin/tabs/super-unsubscribe/page.php:327
1340
+ msgid "GDPR approval"
1341
+ msgstr "DSGVO Zustimmung"
1342
+
1343
+ #: admin/tabs/subject-access-request/page.php:110
1344
+ #: admin/tabs/subject-access-request/page.php:138
1345
+ #: admin/tabs/subject-access-request/page.php:166
1346
+ msgid "Run"
1347
+ msgstr "Ausführen"
1348
+
1349
+ #: admin/tabs/subject-access-request/page.php:113
1350
+ #: admin/tabs/subject-access-request/page.php:168
1351
+ #: admin/tabs/super-unsubscribe/page.php:214
1352
+ #: admin/tabs/super-unsubscribe/page.php:286
1353
+ msgid "Dismiss"
1354
+ msgstr "Ablehnen"
1355
+
1356
+ #: admin/tabs/subject-access-request/page.php:152
1357
+ msgid "No open requests"
1358
+ msgstr "Keine offenen Anfragen vorhanden."
1359
+
1360
+ #: admin/tabs/subject-access-request/page.php:177
1361
+ msgid "Run all"
1362
+ msgstr "Alle ausführen"
1363
+
1364
+ #: admin/tabs/subject-access-request/page.php:189
1365
+ #: admin/tabs/super-unsubscribe/page.php:307
1366
+ msgid "Add entry"
1367
+ msgstr "Eintrag hinzufügen"
1368
+
1369
+ #: admin/tabs/subject-access-request/page.php:213
1370
+ msgid "Run now"
1371
+ msgstr "Sofort ausführen"
1372
+
1373
+ #: admin/tabs/subject-access-request/page.php:218
1374
+ msgid "Show email"
1375
+ msgstr "Email anzeigen"
1376
+
1377
+ #: admin/tabs/subject-access-request/page.php:225
1378
+ #: admin/tabs/super-unsubscribe/page.php:339
1379
+ msgid "Add"
1380
+ msgstr "Hinzufügen"
1381
+
1382
+ #: admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-tab.php:9
1383
+ msgid "Delete request"
1384
+ msgstr "Löschanfrage"
1385
+
1386
+ #: admin/tabs/super-unsubscribe/page.php:1
1387
+ msgid "Delete Requests"
1388
+ msgstr "Löschanfragen"
1389
+
1390
+ #: admin/tabs/super-unsubscribe/page.php:2
1391
+ msgid ""
1392
+ "Here you will find all deletion requests that users have made on their site. "
1393
+ "With a click on \"delete now \" you delete all stored data of the user on "
1394
+ "their side including Plugins."
1395
+ msgstr ""
1396
+ "Hier finden sie alle Löschanfragen die User ihrer Seite gestellt haben. Mit "
1397
+ "einem klick auf \"Jetzt löschen\" löschen sie alle gespeicherten Daten des "
1398
+ "Users auf ihrer Seite inklusive Plugins."
1399
+
1400
+ #: admin/tabs/super-unsubscribe/page.php:18
1401
+ msgid "Immediately on request"
1402
+ msgstr "Sofort bei Anfrage"
1403
+
1404
+ #: admin/tabs/super-unsubscribe/page.php:24
1405
+ msgid "If enabled, delete requests are performed immediately."
1406
+ msgstr "Wenn aktiviert, werden Löschanfragen sofort durchgeführt."
1407
+
1408
+ #: admin/tabs/super-unsubscribe/page.php:38
1409
+ msgid "GDPR confirmation text:"
1410
+ msgstr "DSGVO Zustimmungstext:"
1411
+
1412
+ #: admin/tabs/super-unsubscribe/page.php:43
1413
+ msgid "The text to be displayed in the GDPR checkbox for data deletion."
1414
+ msgstr ""
1415
+ "Der Text der bei der Checkbox für die DSGVO Checkbox angezeigt werden soll."
1416
+
1417
+ #: admin/tabs/super-unsubscribe/page.php:47
1418
+ msgid "After period"
1419
+ msgstr "Nach Zeit"
1420
+
1421
+ #: admin/tabs/super-unsubscribe/page.php:53
1422
+ msgid "month"
1423
+ msgstr "Monat"
1424
+
1425
+ #: admin/tabs/super-unsubscribe/page.php:54
1426
+ #: admin/tabs/super-unsubscribe/page.php:55
1427
+ msgid "months"
1428
+ msgstr "Monate"
1429
+
1430
+ #: admin/tabs/super-unsubscribe/page.php:56
1431
+ msgid "year"
1432
+ msgstr "Jahr"
1433
+
1434
+ #: admin/tabs/super-unsubscribe/page.php:57
1435
+ #: admin/tabs/super-unsubscribe/page.php:58
1436
+ msgid "years"
1437
+ msgstr "Jahre"
1438
+
1439
+ #: admin/tabs/super-unsubscribe/page.php:61
1440
+ msgid ""
1441
+ "Data is automatically deleted after the set time. Ensures the maximum "
1442
+ "retention time."
1443
+ msgstr ""
1444
+ "Daten werden nach eingestellter Zeit automatisch gelöscht. Stellt die "
1445
+ "maximale Aufbewahrungszeit sicher."
1446
+
1447
+ #: admin/tabs/super-unsubscribe/page.php:66
1448
+ msgid "WooCommerce Data"
1449
+ msgstr "WooCommerce Daten"
1450
+
1451
+ #: admin/tabs/super-unsubscribe/page.php:71
1452
+ #: admin/tabs/super-unsubscribe/page.php:84
1453
+ #: admin/tabs/super-unsubscribe/page.php:97
1454
+ #: admin/tabs/super-unsubscribe/page.php:110
1455
+ msgid "No action"
1456
+ msgstr "Keine Aktion"
1457
+
1458
+ #: admin/tabs/super-unsubscribe/page.php:72
1459
+ #: admin/tabs/super-unsubscribe/page.php:85
1460
+ #: admin/tabs/super-unsubscribe/page.php:98
1461
+ #: admin/tabs/super-unsubscribe/page.php:111
1462
+ msgid "Pseudonymise"
1463
+ msgstr "Pseudonymisieren"
1464
+
1465
+ #: admin/tabs/super-unsubscribe/page.php:76
1466
+ msgid "Specifies what should happen to personal data of orders."
1467
+ msgstr "Gibt an was mit persönlichen Daten von Bestellungen passieren soll."
1468
+
1469
+ #: admin/tabs/super-unsubscribe/page.php:79
1470
+ msgid "bbPress Data"
1471
+ msgstr "bbPress Daten"
1472
+
1473
+ #: admin/tabs/super-unsubscribe/page.php:89
1474
+ msgid "Specifies what should happen with forum entries."
1475
+ msgstr "Gibt an was mit Foreneinträge passieren soll."
1476
+
1477
+ #: admin/tabs/super-unsubscribe/page.php:92
1478
+ msgid "buddyPress Data"
1479
+ msgstr "buddyPress Daten"
1480
+
1481
+ #: admin/tabs/super-unsubscribe/page.php:102
1482
+ msgid "Specifies what should happen with PNs and extended profile fields."
1483
+ msgstr "Gibt an was mit PNs und erweiterten Profilfeldern passieren soll."
1484
+
1485
+ #: admin/tabs/super-unsubscribe/page.php:105
1486
+ msgid "CF7/Flamingo Data"
1487
+ msgstr "CF7/Flamingo Daten"
1488
+
1489
+ #: admin/tabs/super-unsubscribe/page.php:115
1490
+ msgid "Specifies what to do with contact entries and messages."
1491
+ msgstr "Gibt an was mit Kontakteinträgen und Nachrichten passieren soll."
1492
+
1493
+ #: admin/tabs/super-unsubscribe/page.php:120
1494
+ msgid "Page for deletion request:"
1495
+ msgstr "Seite für Löschanfrage:"
1496
+
1497
+ #: admin/tabs/super-unsubscribe/page.php:138
1498
+ msgid "Create a page using the shortcode <code>[unsubscribe_form]</code>."
1499
+ msgstr ""
1500
+ "Eine Seite erstellen die den Shortcode <code>[unsubscribe_form]</code> "
1501
+ "verwendet."
1502
+
1503
+ #: admin/tabs/super-unsubscribe/page.php:144
1504
+ msgid ""
1505
+ "Attention: The shortcode <code>[unsubscribe_form]</code> that should be on "
1506
+ "the selected page was not found. Thus, the user has no opportunity to ask a "
1507
+ "deletion request."
1508
+ msgstr ""
1509
+ "Achtung: Der Shortcode <code>[unsubscribe_form]</code> wurde auf der von "
1510
+ "ihnen gewählten Seite nicht gefunden. Somit hat der User keine Möglichkeit "
1511
+ "eine Löschanfrage zu stellen."
1512
+
1513
+ #: admin/tabs/super-unsubscribe/page.php:180
1514
+ msgid "Pending"
1515
+ msgstr "Ausstehend"
1516
+
1517
+ #: admin/tabs/super-unsubscribe/page.php:187
1518
+ msgid "Done"
1519
+ msgstr "Erledigt"
1520
+
1521
+ #: admin/tabs/super-unsubscribe/page.php:209
1522
+ #: admin/tabs/super-unsubscribe/page.php:283
1523
+ msgid "State"
1524
+ msgstr "Status"
1525
+
1526
+ #: admin/tabs/super-unsubscribe/page.php:211
1527
+ #: admin/tabs/super-unsubscribe/page.php:244
1528
+ #: admin/tabs/super-unsubscribe/page.php:247
1529
+ #: admin/tabs/super-unsubscribe/page.php:284
1530
+ msgid "Delete now"
1531
+ msgstr "Jetzt l&ouml;schen"
1532
+
1533
+ #: admin/tabs/super-unsubscribe/page.php:265
1534
+ msgid "No requests done"
1535
+ msgstr "Es wurden noch keine Löschanfragen durchgeführt."
1536
+
1537
+ #: admin/tabs/super-unsubscribe/page.php:267
1538
+ msgid "No pending requests"
1539
+ msgstr "Keine Löschanfragen vorhanden"
1540
+
1541
+ #: admin/tabs/super-unsubscribe/page.php:295
1542
+ msgid "Delete all"
1543
+ msgstr "Alle löschen"
1544
+
1545
+ #: admin/tabs/super-unsubscribe/page.php:308
1546
+ msgid ""
1547
+ "ATTENTION: Executing this action deletes the account (except administrators)."
1548
+ msgstr ""
1549
+ "ACHTUNG: Mit Ausführen dieser Aktion wird der Account gelöscht "
1550
+ "(Administratoren ausgenommen)."
1551
+
1552
+ #: admin/tabs/super-unsubscribe/page.php:332
1553
+ msgid "Run without user confirmation"
1554
+ msgstr "Ohne Benutzerbestätigung ausführen"
1555
+
1556
+ #: includes/class-sp-dsgvo-ajax-action.php:93
1557
+ msgid "Public property $action not provied"
1558
+ msgstr "Eigenschaft $action nicht mitgesendet"
1559
+
1560
+ #: includes/class-sp-dsgvo-cron.php:66
1561
+ msgid "All"
1562
+ msgstr "Alle"
1563
+
1564
+ #: includes/class-sp-dsgvo-cron.php:66
1565
+ msgid "Minutes"
1566
+ msgstr "Minuten"
1567
+
1568
+ #: includes/class-sp-dsgvo-data-collecter.php:77
1569
+ msgid "Login"
1570
+ msgstr "Login"
1571
+
1572
+ #: includes/class-sp-dsgvo-data-collecter.php:80
1573
+ #: includes/class-sp-dsgvo-data-collecter.php:82
1574
+ #: includes/class-sp-dsgvo-data-collecter.php:134
1575
+ #: includes/class-sp-dsgvo-data-collecter.php:147
1576
+ #: includes/class-sp-dsgvo-data-collecter.php:171
1577
+ #: includes/class-sp-dsgvo-data-collecter.php:399
1578
+ msgid "Url"
1579
+ msgstr "URL"
1580
+
1581
+ #: includes/class-sp-dsgvo-data-collecter.php:81
1582
+ msgid "Display Name"
1583
+ msgstr "Anzeigename"
1584
+
1585
+ #: includes/class-sp-dsgvo-data-collecter.php:107
1586
+ msgid "Advanced"
1587
+ msgstr "Erweitert"
1588
+
1589
+ #: includes/class-sp-dsgvo-data-collecter.php:135
1590
+ #: includes/class-sp-dsgvo-data-collecter.php:172
1591
+ msgid "IP Address"
1592
+ msgstr "IP Adresse"
1593
+
1594
+ #: includes/class-sp-dsgvo-data-collecter.php:136
1595
+ #: includes/class-sp-dsgvo-data-collecter.php:173
1596
+ msgid "Comment"
1597
+ msgstr "Kommentar"
1598
+
1599
+ #: includes/class-sp-dsgvo-data-collecter.php:145
1600
+ msgid "User name"
1601
+ msgstr "Benutzername"
1602
+
1603
+ #: includes/class-sp-dsgvo-data-collecter.php:148
1604
+ msgid "Display name"
1605
+ msgstr "Anzeigename"
1606
+
1607
+ #: includes/class-sp-dsgvo-data-collecter.php:382
1608
+ msgid "ZIP Code"
1609
+ msgstr "PLZ"
1610
+
1611
+ #: includes/class-sp-dsgvo-data-collecter.php:389
1612
+ msgid "Phone number"
1613
+ msgstr "Telefonnummer"
1614
+
1615
+ #: includes/class-sp-dsgvo-data-collecter.php:407
1616
+ msgid "Address"
1617
+ msgstr "Adresse"
1618
+
1619
+ #: includes/class-sp-dsgvo-mail.php:198 includes/class-sp-dsgvo-mail.php:205
1620
+ msgid "Attachment not found at"
1621
+ msgstr "Anhang nicht gefunden"
1622
+
1623
+ #: includes/class-sp-dsgvo-mail.php:223 includes/class-sp-dsgvo-mail.php:265
1624
+ msgid "Template file not found"
1625
+ msgstr "Template nicht gefunden"
1626
+
1627
+ #: includes/class-sp-dsgvo-mail.php:377
1628
+ msgid "You must set at least 1 recipient"
1629
+ msgstr "Es muss min. 1 Empfänger angegeben werden."
1630
+
1631
+ #: includes/class-sp-dsgvo-mail.php:381
1632
+ msgid "You must set a template"
1633
+ msgstr "Ein Template muss ausgewählt werden."
1634
+
1635
+ #: includes/class-sp-dsgvo-settings.php:43 public/class-sp-dsgvo-public.php:443
1636
+ msgid "I confirm"
1637
+ msgstr "Ich akzeptiere"
1638
+
1639
+ #: includes/class-sp-dsgvo-settings.php:44 public/class-sp-dsgvo-public.php:441
1640
+ msgid "The confirmation to GDPR is mandatory."
1641
+ msgstr ""
1642
+ "Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend."
1643
+
1644
+ #: includes/class-sp-dsgvo-settings.php:45 public/class-sp-dsgvo-public.php:442
1645
+ msgid ""
1646
+ "This form stores your name, email address and content so that we can "
1647
+ "evaluate the comments on our site. For more information, visit our Privacy "
1648
+ "Policy page."
1649
+ msgstr ""
1650
+ "Dieses Formular speichert Ihren Namen, Ihre Email Adresse sowie den Inhalt, "
1651
+ "damit wir die Kommentare auf unsere Seite auswerten können. Weitere "
1652
+ "Informationen finden Sie auf unserer Seite der Datenschutzbestimmungen."
1653
+
1654
+ #: includes/class-sp-dsgvo-settings.php:70
1655
+ #: includes/class-sp-dsgvo-settings.php:112
1656
+ #: public/shortcodes/subject-access-request/subject-access-request.php:46
1657
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:50
1658
+ msgid ""
1659
+ "I agree to the storage of the data for processing within the meaning of the "
1660
+ "GDPR."
1661
+ msgstr ""
1662
+ "Ich stimme der Speicherung der Daten zur Verarbeitung im Sinne der DSGVO zu."
1663
+
1664
+ #: includes/class-sp-dsgvo-settings.php:81
1665
+ #: includes/class-sp-dsgvo-settings.php:236
1666
+ msgid "We use cookies to analyze visitor behavior."
1667
+ msgstr "Wir benutzen Cookies um das Besucherverhalten zu analysieren."
1668
+
1669
+ #: includes/class-sp-dsgvo-settings.php:88
1670
+ #: includes/class-sp-dsgvo-settings.php:243
1671
+ msgid "Google Analytics is used to analyze website traffic."
1672
+ msgstr "Google Analytics wird zum Anlayiseren des Websitetraffics verwendet."
1673
+
1674
+ #: includes/class-sp-dsgvo-settings.php:95
1675
+ #: includes/class-sp-dsgvo-settings.php:250
1676
+ msgid "Facebook Pixel is used to analyze visitor behavior."
1677
+ msgstr "Facebook Pixel wird zum Analysieren des Besucherverhaltens verwendet."
1678
+
1679
+ #: includes/class-sp-dsgvo-settings.php:119
1680
+ msgid ""
1681
+ "This website uses cookies. By clicking 'accept' you are providing consent to "
1682
+ "us using cookies on this browser."
1683
+ msgstr ""
1684
+ "Wir verwenden Cookies, um Ihnen das beste Nutzererlebnis bieten zu können. "
1685
+ "Wenn Sie fortfahren, diese Seite zu verwenden, nehmen wir an, dass Sie damit "
1686
+ "einverstanden sind."
1687
+
1688
+ #: includes/class-sp-dsgvo-settings.php:127
1689
+ #: public/class-sp-dsgvo-public.php:171
1690
+ msgid ""
1691
+ "We use cookies to give you the best user experience. If you continue to use "
1692
+ "this site, we assume that you agree."
1693
+ msgstr ""
1694
+ "Wir verwenden Cookies, um Ihnen das beste Nutzererlebnis bieten zu können. "
1695
+ "Wenn Sie fortfahren, diese Seite zu verwenden, nehmen wir an, dass Sie damit "
1696
+ "einverstanden sind."
1697
+
1698
+ #: includes/class-sp-dsgvo-settings.php:129
1699
+ msgid "OK"
1700
+ msgstr "OK"
1701
+
1702
+ #: includes/class-sp-dsgvo-settings.php:132
1703
+ msgid "Deny"
1704
+ msgstr "Ablehnen"
1705
+
1706
+ #: includes/class-sp-dsgvo-settings.php:135
1707
+ msgid "More information"
1708
+ msgstr "Mehr Information"
1709
+
1710
+ #: includes/cron/do-delete-data-request.php:15
1711
+ msgid "DoDSGVODeleteDataRequest with days:"
1712
+ msgstr "DoDSGVODeleteDataRequest with days:"
1713
+
1714
+ #: includes/cron/do-delete-data-request.php:15
1715
+ msgid "and intval:"
1716
+ msgstr "and intval:"
1717
+
1718
+ #: includes/cron/do-delete-data-request.php:20
1719
+ msgid "doing sar"
1720
+ msgstr "doing sar"
1721
+
1722
+ #: includes/cron/do-delete-data-request.php:20
1723
+ msgid "with intval"
1724
+ msgstr "with intval"
1725
+
1726
+ #: includes/cron/do-delete-data-request.php:27
1727
+ msgid "sar"
1728
+ msgstr "sar"
1729
+
1730
+ #: includes/cron/do-delete-data-request.php:27
1731
+ msgid "has not the date to process"
1732
+ msgstr "has not the date to process"
1733
+
1734
+ #: includes/html/index-footer.php:6
1735
+ msgid "Downloaded from"
1736
+ msgstr "Heruntergeladen von"
1737
+
1738
+ #: includes/html/index-footer.php:6
1739
+ #: includes/integrations/bbpress/BbpressIntegration.php:111
1740
+ #: includes/integrations/bbpress/BbpressIntegration.php:113
1741
+ #: includes/integrations/bbpress/BbpressIntegration.php:115
1742
+ #: includes/integrations/cf7/Cf7Integration.php:134
1743
+ #: includes/integrations/cf7/Cf7Integration.php:136
1744
+ msgid "on"
1745
+ msgstr "am"
1746
+
1747
+ #: includes/html/index-header.php:5 includes/html/index-header.php:412
1748
+ msgid "All data relating to"
1749
+ msgstr "Alle Daten von"
1750
+
1751
+ #: includes/html/index-header.php:413
1752
+ msgid "Objects"
1753
+ msgstr "Objekte"
1754
+
1755
+ #: includes/html/index-header.php:413
1756
+ msgid "Generated on"
1757
+ msgstr "Erstellt am"
1758
+
1759
+ #: includes/html/index-header.php:426
1760
+ msgid "Type"
1761
+ msgstr "Type"
1762
+
1763
+ #: includes/html/index-header.php:427
1764
+ msgid "Data"
1765
+ msgstr "Daten"
1766
+
1767
+ #: includes/integrations/bbpress/BbpressIntegration.php:69
1768
+ #: includes/integrations/bbpress/BbpressIntegration.php:70
1769
+ #: includes/integrations/buddypress/BuddyPressIntegration.php:59
1770
+ #: includes/integrations/buddypress/BuddyPressIntegration.php:60
1771
+ #: includes/integrations/buddypress/BuddyPressIntegration.php:66
1772
+ #: includes/integrations/cf7/Cf7Integration.php:74
1773
+ #: includes/integrations/cf7/Cf7Integration.php:75
1774
+ #: includes/integrations/cf7/Cf7Integration.php:76
1775
+ msgid "Deleted content"
1776
+ msgstr "Gelöschter Inhalt"
1777
+
1778
+ #: includes/integrations/bbpress/BbpressIntegration.php:111
1779
+ msgid "Forum"
1780
+ msgstr "Forum"
1781
+
1782
+ #: includes/integrations/bbpress/BbpressIntegration.php:113
1783
+ msgid "Forum thread"
1784
+ msgstr "Forum Thread"
1785
+
1786
+ #: includes/integrations/bbpress/BbpressIntegration.php:115
1787
+ msgid "Forum entry"
1788
+ msgstr "Forum Eintrag"
1789
+
1790
+ #: includes/integrations/buddypress/BuddyPressIntegration.php:99
1791
+ msgid "PM between"
1792
+ msgstr "PN zwischen"
1793
+
1794
+ #: includes/integrations/buddypress/BuddyPressIntegration.php:100
1795
+ msgid "Title:"
1796
+ msgstr "Titel:"
1797
+
1798
+ #: includes/integrations/buddypress/BuddyPressIntegration.php:101
1799
+ msgid "Message: "
1800
+ msgstr "Nachricht: "
1801
+
1802
+ #: includes/integrations/buddypress/BuddyPressIntegration.php:112
1803
+ msgid "Blog"
1804
+ msgstr "Blog"
1805
+
1806
+ #: includes/integrations/buddypress/BuddyPressIntegration.php:142
1807
+ msgid "Profildaten"
1808
+ msgstr "Profildaten"
1809
+
1810
+ #: includes/integrations/buddypress/BuddyPressIntegration.php:157
1811
+ msgid "Field group"
1812
+ msgstr "Feldgruppe"
1813
+
1814
+ #: includes/integrations/cf7/Cf7Integration.php:134
1815
+ msgid "Contact entry"
1816
+ msgstr "Kontakteintrag"
1817
+
1818
+ #: includes/integrations/cf7/Cf7Integration.php:136
1819
+ #: templates/de_DE/emails/feedback.php:15
1820
+ #: templates/en_EN/emails/feedback.php:15
1821
+ #: templates/en_US/emails/feedback.php:15
1822
+ msgid "Message"
1823
+ msgstr "Nachricht"
1824
+
1825
+ #: includes/integrations/mailchimp/MailchimpAPI.php:41
1826
+ msgid "Invalid MailChimp API key"
1827
+ msgstr "Ungültiger MailChimp API Key"
1828
+
1829
+ #: includes/integrations/mailchimp/MailchimpAPI.php:41
1830
+ msgid "supplied."
1831
+ msgstr "angegeben"
1832
+
1833
+ #: includes/integrations/mailchimp/MailchimpAPI.php:190
1834
+ msgid "cURL support is required, but can't be found."
1835
+ msgstr "cURL support is required, but can't be found."
1836
+
1837
+ #: includes/integrations/mailchimp/MailchimpAPI.php:419
1838
+ msgid "Request timed out after"
1839
+ msgstr "Request timed out after"
1840
+
1841
+ #: includes/integrations/mailchimp/MailchimpAPI.php:419
1842
+ msgid "seconds."
1843
+ msgstr "seconds."
1844
+
1845
+ #: includes/integrations/mailchimp/MailchimpAPI.php:423
1846
+ msgid "Unknown error, call getLastResponse() to find out what happened."
1847
+ msgstr "Unknown error, call getLastResponse() to find out what happened."
1848
+
1849
+ #: includes/integrations/mailchimp/page.php:7
1850
+ msgid "Mailchimp API Key"
1851
+ msgstr "MailChimp API key"
1852
+
1853
+ #: includes/integrations/mailchimp/page.php:11
1854
+ msgid "Click here"
1855
+ msgstr "Hier klicken"
1856
+
1857
+ #: includes/integrations/mailchimp/page.php:12
1858
+ msgid "to get an API key"
1859
+ msgstr "um einen API Key zu erhalten."
1860
+
1861
+ #: includes/integrations/woocommerce/WoocommerceIntegration.php:114
1862
+ msgid "Order"
1863
+ msgstr "Bestellung"
1864
+
1865
+ #: includes/integrations/woocommerce/WoocommerceIntegration.php:114
1866
+ msgid "of"
1867
+ msgstr "von"
1868
+
1869
+ #: includes/integrations/woocommerce/WoocommerceIntegration.php:124
1870
+ msgid "Product"
1871
+ msgstr "Produkt"
1872
+
1873
+ #: includes/models/subject-access-request.php:69
1874
+ #: includes/models/subject-access-request.php:73
1875
+ msgid "Subject access request"
1876
+ msgstr "Datenauszug"
1877
+
1878
+ #: includes/models/subject-access-request.php:181
1879
+ #: includes/models/subject-access-request.php:182
1880
+ #: includes/models/subject-access-request.php:184
1881
+ msgid "All data of"
1882
+ msgstr "Alle Daten zu"
1883
+
1884
+ #: includes/models/subject-access-request.php:184
1885
+ msgid "Date"
1886
+ msgstr "Datum"
1887
+
1888
+ #: includes/models/subject-access-request.php:184
1889
+ msgid "Source"
1890
+ msgstr "Quelle"
1891
+
1892
+ #: includes/models/unsubscriber.php:100
1893
+ msgid "Confirmation of delete request"
1894
+ msgstr "Bestätigung der Datenlöschung"
1895
+
1896
+ #: public/actions/user-permissions.php:37
1897
+ msgid "updated their user permissions"
1898
+ msgstr "hat die Berechtigungen geändert"
1899
+
1900
+ #: public/class-sp-dsgvo-public.php:177
1901
+ msgid "Ok"
1902
+ msgstr "Ok"
1903
+
1904
+ #: public/class-sp-dsgvo-public.php:293 public/class-sp-dsgvo-public.php:316
1905
+ msgid "More options"
1906
+ msgstr "Mehr Optionen"
1907
+
1908
+ #: public/class-sp-dsgvo-public.php:318
1909
+ msgid "Accept"
1910
+ msgstr "Akzeptieren"
1911
+
1912
+ #: public/class-sp-dsgvo-public.php:507
1913
+ msgid "Privacy Policy: "
1914
+ msgstr "Datenschutzvereinbarungen"
1915
+
1916
+ #: public/class-sp-dsgvo-public.php:550
1917
+ msgid "Consent to the privacy policy is mandatory."
1918
+ msgstr "Die Zustimmung zu den Datenschutzbestimmungen ist zwingend."
1919
+
1920
+ #: public/class-sp-dsgvo-public.php:556
1921
+ msgid "Privacy Policy accepted"
1922
+ msgstr "Datenschutzbestimmungen akzeptiert"
1923
+
1924
+ #: public/js/simplebar.js:11
1925
+ msgid "entries"
1926
+ msgstr "Einträge"
1927
+
1928
+ #: public/js/simplebar.js:11
1929
+ msgid "values"
1930
+ msgstr "Werte"
1931
+
1932
+ #: public/js/simplebar.js:11
1933
+ msgid "keys"
1934
+ msgstr "Schlüssel"
1935
+
1936
+ #: public/shortcodes/decline-permission.php:5
1937
+ msgid "Decline Terms & Conditions"
1938
+ msgstr "Datenschutzbestimmungen ablehnen"
1939
+
1940
+ #: public/shortcodes/display-services.php:13
1941
+ msgid "Open Terms of service"
1942
+ msgstr "AGB des Dienstes aufrufen"
1943
+
1944
+ #: public/shortcodes/explicit-permission.php:6
1945
+ msgid "Accepted"
1946
+ msgstr "Akzeptiert"
1947
+
1948
+ #: public/shortcodes/explicit-permission.php:7
1949
+ msgid "Declined"
1950
+ msgstr "Abgelehnt"
1951
+
1952
+ #: public/shortcodes/privacy-settings-form-alt.php:43
1953
+ #: public/shortcodes/privacy-settings-form-alt.php:45
1954
+ #: public/shortcodes/privacy-settings-form.php:18
1955
+ #: public/shortcodes/privacy-settings-form.php:28
1956
+ msgid "Terms"
1957
+ msgstr "AGB"
1958
+
1959
+ #: public/shortcodes/privacy-settings-form-alt.php:65
1960
+ #: public/shortcodes/privacy-settings-form.php:34
1961
+ msgid "Yes"
1962
+ msgstr "Ja"
1963
+
1964
+ #: public/shortcodes/privacy-settings-form-alt.php:68
1965
+ #: public/shortcodes/privacy-settings-form.php:37
1966
+ msgid "No"
1967
+ msgstr "Nein"
1968
+
1969
+ #: public/shortcodes/privacy-settings-form-alt.php:78
1970
+ #: public/shortcodes/privacy-settings-form.php:46
1971
+ msgid ""
1972
+ "Since you are not logged in we save these settings in a cookie. These "
1973
+ "settings are thus only active on this PC."
1974
+ msgstr ""
1975
+ "Da Sie nicht eingeloggt sind speichern wir diese Einstellungen in einem "
1976
+ "Cookie. Diese Einstellungen sind somit nur auf diesem PC aktiv."
1977
+
1978
+ #: public/shortcodes/privacy-settings-form.php:16
1979
+ msgid "Service"
1980
+ msgstr "Dienst"
1981
+
1982
+ #: public/shortcodes/privacy-settings-form.php:50
1983
+ msgid "Save"
1984
+ msgstr "Speichern"
1985
+
1986
+ #: public/shortcodes/subject-access-request/download-subject-access-request.php:11
1987
+ #: public/shortcodes/super-unsubscribe/unsubscribe-confirm-action.php:10
1988
+ msgid "No token provided."
1989
+ msgstr "Kein Token vorhanden"
1990
+
1991
+ #: public/shortcodes/subject-access-request/download-subject-access-request.php:19
1992
+ msgid "Bad token provided."
1993
+ msgstr "Fehlerhaftes Token"
1994
+
1995
+ #: public/shortcodes/subject-access-request/download-subject-access-request.php:71
1996
+ msgid "Error"
1997
+ msgstr "Fehler"
1998
+
1999
+ #: public/shortcodes/subject-access-request/subject-access-request-action.php:9
2000
+ msgid "Please enter an email address"
2001
+ msgstr "Bitte eine Email Adresse angeben."
2002
+
2003
+ #: public/shortcodes/subject-access-request/subject-access-request-action.php:13
2004
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form-action.php:13
2005
+ msgid "The GDPR approval is mandatory."
2006
+ msgstr "Die DSGVO Zustimmung ist zwingend."
2007
+
2008
+ #: public/shortcodes/subject-access-request/subject-access-request-action.php:28
2009
+ msgid "New subject access request"
2010
+ msgstr "Neue Anfrage zum Datenauszug"
2011
+
2012
+ #: public/shortcodes/subject-access-request/subject-access-request-action.php:29
2013
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form-action.php:31
2014
+ msgid "A new subject access request from "
2015
+ msgstr "Es ist eine neue Anfrage zu einem Datenauszug von "
2016
+
2017
+ #: public/shortcodes/subject-access-request/subject-access-request.php:18
2018
+ msgid "Your request has been created"
2019
+ msgstr "Ihr Antrag wurde eingereicht."
2020
+
2021
+ #: public/shortcodes/subject-access-request/subject-access-request.php:18
2022
+ msgid ""
2023
+ "You will receive an email from us with a current extract of your data stored "
2024
+ "with us."
2025
+ msgstr ""
2026
+ "Sie erhalten eine Email von uns mit einem aktuellen Auszug Ihrer bei uns "
2027
+ "gespeicherten Daten."
2028
+
2029
+ #: public/shortcodes/subject-access-request/subject-access-request.php:51
2030
+ msgid "Create request"
2031
+ msgstr "Anfrage absenden"
2032
+
2033
+ #: public/shortcodes/super-unsubscribe/unsubscribe-confirm-action.php:18
2034
+ msgid "Bad token provided"
2035
+ msgstr "Bad token provided."
2036
+
2037
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form-action.php:9
2038
+ msgid "Please enter an email address."
2039
+ msgstr "Bitte eine Email Adresse angeben."
2040
+
2041
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form-action.php:30
2042
+ msgid "New delete request"
2043
+ msgstr "Neue Löschanfrage"
2044
+
2045
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:19
2046
+ msgid "Request sent successfully. You will receive an email in a few minutes."
2047
+ msgstr ""
2048
+ "Anfrage erfolgreich gesendet. Sie erhalten in wenigen Minuten eine Email."
2049
+
2050
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:23
2051
+ msgid "Request successfully completed. Your data has been completely deleted."
2052
+ msgstr ""
2053
+ "Anfrage erfolgreich abgeschlossen. Ihre Daten wurden vollständig gelöscht."
2054
+
2055
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:55
2056
+ msgid "Create delete request"
2057
+ msgstr "Löschanfrage senden"
2058
+
2059
+ #: templates/de_DE/emails/feedback.php:1 templates/en_EN/emails/feedback.php:1
2060
+ #: templates/en_US/emails/feedback.php:1
2061
+ msgid "WP DSGVO Tools Feedback"
2062
+ msgstr "WP DSGVO Tools Feedback"
2063
+
2064
+ #: templates/de_DE/emails/feedback.php:4 templates/en_EN/emails/feedback.php:4
2065
+ #: templates/en_US/emails/feedback.php:4
2066
+ msgid "From"
2067
+ msgstr "Von"
2068
+
2069
+ #: templates/de_DE/emails/subject-access-request.php:46
2070
+ #: templates/en_EN/emails/subject-access-request.php:46
2071
+ #: templates/en_US/emails/subject-access-request.php:46
2072
+ msgid ""
2073
+ "We have received your subject access request. A PDF document containing all "
2074
+ "the data we have stored about you is attached.\n"
2075
+ "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t Amount of personal data found"
2076
+ msgstr ""
2077
+ "Wir haben soeben Ihre Anfrage f&uuml;r einen Datenauszug erhalten. Ein PDF "
2078
+ "mit einer Erkl&auml;rung, welche Daten wir von Ihnen besitzen, ist "
2079
+ "beigef&uuml;gt. Anzahl gefundener pers&ouml;nlichen Daten:"
2080
+
2081
+ #: templates/de_DE/emails/subject-access-request.php:49
2082
+ #: templates/en_EN/emails/subject-access-request.php:49
2083
+ #: templates/en_US/emails/subject-access-request.php:49
2084
+ msgid "Here you see a summary about this data"
2085
+ msgstr "Hier ist ein &Uuml;berblick welche Daten gefunden wurden:"
2086
+
2087
+ #: templates/de_DE/emails/subject-access-request.php:52
2088
+ #: templates/en_EN/emails/subject-access-request.php:52
2089
+ #: templates/en_US/emails/subject-access-request.php:52
2090
+ msgid "Download your archive"
2091
+ msgstr "Archiv runterladen"
2092
+
2093
+ #: templates/de_DE/emails/subject-access-request.php:54
2094
+ #: templates/en_EN/emails/subject-access-request.php:54
2095
+ #: templates/en_US/emails/subject-access-request.php:54
2096
+ msgid ""
2097
+ "Following this link you can download a PDF and a JSON file dump of your data."
2098
+ msgstr ""
2099
+ "Sie k&ouml;nnen auch einen vollst&auml;ndiges Auszug Ihres Archives als PDF "
2100
+ "und ein JSON dump herunterladen."
2101
+
2102
+ #: templates/de_DE/emails/subject-access-request.php:56
2103
+ #: templates/en_EN/emails/subject-access-request.php:56
2104
+ #: templates/en_US/emails/subject-access-request.php:56
2105
+ msgid "Download archive"
2106
+ msgstr "Archiv jetzt runterladen"
2107
+
2108
+ #: templates/de_DE/emails/subject-access-request.php:94
2109
+ #: templates/de_DE/emails/super-unsubscribe.php:84
2110
+ #: templates/en_EN/emails/subject-access-request.php:94
2111
+ #: templates/en_EN/emails/super-unsubscribe.php:84
2112
+ #: templates/en_US/emails/subject-access-request.php:94
2113
+ #: templates/en_US/emails/super-unsubscribe.php:84
2114
+ msgid "Sent from"
2115
+ msgstr "Gesendet von"
2116
+
2117
+ #: templates/de_DE/emails/subject-access-request.php:98
2118
+ #: templates/de_DE/emails/super-unsubscribe.php:88
2119
+ #: templates/en_EN/emails/subject-access-request.php:98
2120
+ #: templates/en_EN/emails/super-unsubscribe.php:88
2121
+ #: templates/en_US/emails/subject-access-request.php:98
2122
+ #: templates/en_US/emails/super-unsubscribe.php:88
2123
+ msgid "Contact"
2124
+ msgstr "Kontakt"
2125
+
2126
+ #: templates/de_DE/emails/super-unsubscribe.php:45
2127
+ #: templates/en_EN/emails/super-unsubscribe.php:45
2128
+ #: templates/en_US/emails/super-unsubscribe.php:45
2129
+ msgid "We have received your delete request."
2130
+ msgstr "Wir haben soeben Ihre Anfrage zur Datenl&ouml;schung erhalten."
2131
+
2132
+ #: templates/de_DE/emails/super-unsubscribe.php:46
2133
+ #: templates/en_EN/emails/super-unsubscribe.php:46
2134
+ #: templates/en_US/emails/super-unsubscribe.php:46
2135
+ msgid ""
2136
+ "If you confirm the following link, all your data stored at\n"
2137
+ "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{website}} gets deleted."
2138
+ msgstr ""
2139
+ "Wenn Sie auf die &quot;Best&auml;tige Datenl&ouml;schung&quot; Schaltfl&auml;"
2140
+ "che klicken werden all Ihre pers&ouml;nlichen Daten von {{website}} gel&ouml;"
2141
+ "scht."
2142
+
2143
+ #: templates/de_DE/emails/super-unsubscribe.php:51
2144
+ #: templates/en_EN/emails/super-unsubscribe.php:51
2145
+ #: templates/en_US/emails/super-unsubscribe.php:51
2146
+ msgid "Confirm Delete"
2147
+ msgstr "Löschung bestätigen"
2148
+
2149
+ #: templates/de_DE/emails/super-unsubscribe.php:53
2150
+ #: templates/en_EN/emails/super-unsubscribe.php:53
2151
+ #: templates/en_US/emails/super-unsubscribe.php:53
2152
+ msgid "If you don't want do delete your data just ignore this email."
2153
+ msgstr ""
2154
+ "Wenn Sie dies nicht durchf&uuml;hren m&ouml;chten, k&ouml;nnen Sie dieses E-"
2155
+ "Mail gnorieren."
2156
+
2157
+ #~ msgid "Allgemeine Einstellungen"
2158
+ #~ msgstr "Common Settings"
2159
+
2160
+ #~ msgid "Woocommerce Integration"
2161
+ #~ msgstr "Woocommerce Integration"
2162
+
2163
+ #~ msgid "Texts customizable with comment checkbox (from Blog Edition)"
2164
+ #~ msgstr "Texte bei Kommentarcheckbox anpassbar (Ab Blog Edition)"
2165
+
2166
+ #~ msgid "In der Blog oder Premium Edition möglich"
2167
+ #~ msgstr "In der Blog oder Premium Edition möglich"
2168
+
2169
+ #~ msgid "Gültig bis:"
2170
+ #~ msgstr "Gültig bis:"
2171
+
2172
+ #~ msgid "I have read and accepted the PrivacyPolicyPlaceholder."
2173
+ #~ msgstr "Ich habe die PrivacyPolicyPlaceholder gelesen und akzeptiert."
2174
+
2175
+ #~ msgid "imprint_text"
2176
+ #~ msgstr ""
2177
+ #~ "[company_name]\n"
2178
+ #~ "Inhaber: [company_owner]\n"
2179
+ #~ "[adress_street]\n"
2180
+ #~ "[adress_zip_location]\n"
2181
+ #~ "\n"
2182
+ #~ "Geschäftsführung: [company_management]\n"
2183
+ #~ "\n"
2184
+ #~ "Telefonnummer: [comm_phone]\n"
2185
+ #~ "E-Mailadresse: [comm_email]\n"
2186
+ #~ "\n"
2187
+ #~ "Registergericht & Registernummer: [company_register_court] ,"
2188
+ #~ "[company_register_nr]\n"
2189
+ #~ "\n"
2190
+ #~ "Umsatzsteuer-Identifikationsnummer: [company_uid]\n"
2191
+ #~ "\n"
2192
+ #~ "Inhaltlich verantwortlich: [content_responsible]\n"
2193
+ #~ "\n"
2194
+ #~ "Plattform der Europäischen Kommission zur Online-Streitbeilegung (OS) für "
2195
+ #~ "Verbraucher: https://ec.europa.eu/consumers/odr/. Wir sind nicht bereit "
2196
+ #~ "und nicht verpflichtet an einem Streitbeilegungsverfahren vor einer "
2197
+ #~ "Verbraucherschlichtungsstelle teilzunehmen."
2198
+
2199
+ #~ msgid "License Key"
2200
+ #~ msgstr "Lizenz"
2201
+
2202
+ #~ msgid "Datenauszug"
2203
+ #~ msgstr "Subject Access Request"
2204
+
2205
+ #~ msgid "Datenschutzeinstellungen Benutzer"
2206
+ #~ msgstr "Datenschutzeinstellungen Benutzer"
2207
+
2208
+ #~ msgid "Datenschutz"
2209
+ #~ msgstr "Privacy Policy"
2210
+
2211
+ #~ msgid ""
2212
+ #~ "Die URL zu den Datenschutzbestimmungen des Versanddienstleisters mit dem "
2213
+ #~ "die Newsletter versendet werden."
2214
+ #~ msgstr ""
2215
+ #~ "Die URL zu den Datenschutzbestimmungen des Versanddienstleisters mit dem "
2216
+ #~ "die Newsletter versendet werden."
languages/shapepress-dsgvo-en_EN.mo ADDED
Binary file
languages/shapepress-dsgvo-en_EN.po ADDED
@@ -0,0 +1,1967 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: shapepress-dsgvo-de_DE\n"
4
+ "POT-Creation-Date: 2018-07-09 15:24+0200\n"
5
+ "PO-Revision-Date: 2018-07-09 15:24+0200\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: \n"
8
+ "Language: en\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 2.0.8\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
+ "X-Poedit-KeywordsList: __;_e\n"
16
+ "X-Poedit-SearchPath-0: .\n"
17
+ "X-Poedit-SearchPathExcluded-0: .git\n"
18
+ "X-Poedit-SearchPathExcluded-1: .settings\n"
19
+ "X-Poedit-SearchPathExcluded-2: includes/integrations\n"
20
+
21
+ #: admin/base.php:2
22
+ msgid "WP DSGVO Tools"
23
+ msgstr ""
24
+
25
+ #: admin/base.php:32
26
+ msgid "WP DSGVO Tools is not binding and does not replace expert advice"
27
+ msgstr ""
28
+
29
+ #: admin/base.php:34
30
+ msgid "GDPR website self check"
31
+ msgstr ""
32
+
33
+ #: admin/base.php:35
34
+ msgid "Includes only your web presence!"
35
+ msgstr ""
36
+
37
+ #: admin/base.php:40
38
+ msgid "VdV (directory of processing times)"
39
+ msgstr ""
40
+
41
+ #: admin/base.php:40
42
+ msgid "downloaded"
43
+ msgstr ""
44
+
45
+ #: admin/base.php:41
46
+ msgid "filled"
47
+ msgstr ""
48
+
49
+ #: admin/base.php:47
50
+ msgid "WP DSGVO Tools plugin completely filled"
51
+ msgstr ""
52
+
53
+ #: admin/base.php:52
54
+ msgid ""
55
+ "Monthly maintenance of the website (maintenance contract with the web "
56
+ "designer)"
57
+ msgstr ""
58
+
59
+ #: admin/base.php:56
60
+ msgid "Security Precautions (strong passwords, who has access, ...)"
61
+ msgstr ""
62
+
63
+ #: admin/base.php:60
64
+ msgid "GDPR compliant and secure web hosting? Our recommendation:"
65
+ msgstr ""
66
+
67
+ #: admin/base.php:66
68
+ msgid "Check the security of unsupported plugins"
69
+ msgstr ""
70
+
71
+ #: admin/base.php:71
72
+ msgid "Expert advice"
73
+ msgstr ""
74
+
75
+ #: admin/base.php:71
76
+ msgid "requested"
77
+ msgstr ""
78
+
79
+ #: admin/base.php:75
80
+ msgid "Blog Edition"
81
+ msgstr ""
82
+
83
+ #: admin/base.php:77
84
+ msgid ""
85
+ "Stylish Cookie Notice: Customize the look & feel of your Wordpress Page!"
86
+ msgstr ""
87
+
88
+ #: admin/base.php:78
89
+ msgid "Texts customizable with comment checkbox"
90
+ msgstr ""
91
+
92
+ #: admin/base.php:82
93
+ msgid "Get the Blog Edition now"
94
+ msgstr ""
95
+
96
+ #: admin/base.php:84
97
+ msgid "Upgrade to Premium"
98
+ msgstr ""
99
+
100
+ #: admin/base.php:86
101
+ msgid "Support & Community"
102
+ msgstr ""
103
+
104
+ #: admin/base.php:87
105
+ msgid "Woocommerce Integration"
106
+ msgstr ""
107
+
108
+ #: admin/base.php:88
109
+ msgid "Automatic user data reports"
110
+ msgstr ""
111
+
112
+ #: admin/base.php:89
113
+ msgid "Email notifications"
114
+ msgstr ""
115
+
116
+ #: admin/base.php:90
117
+ msgid "Style & Customization (from Blog Edition)"
118
+ msgstr ""
119
+
120
+ #: admin/base.php:91
121
+ msgid "Texts customizable with comment checkbox (from Blog Edition)"
122
+ msgstr ""
123
+
124
+ #: admin/base.php:95
125
+ msgid "Get Premium version now"
126
+ msgstr ""
127
+
128
+ #: admin/base.php:98
129
+ msgid "FAQ & checklists"
130
+ msgstr ""
131
+
132
+ #: admin/base.php:99
133
+ msgid "GDPR experts booking"
134
+ msgstr ""
135
+
136
+ #: admin/base.php:100
137
+ msgid "Book legal advice"
138
+ msgstr ""
139
+
140
+ #: admin/class-sp-dsgvo-admin.php:71 admin/tabs/privacy-policy/page.php:1
141
+ #: public/class-sp-dsgvo-public.php:397 public/class-sp-dsgvo-public.php:400
142
+ msgid "Privacy policy"
143
+ msgstr ""
144
+
145
+ #: admin/class-sp-dsgvo-admin.php:72
146
+ #: admin/tabs/imprint/class-sp-dsgvo-imprint-tab.php:11
147
+ #: admin/tabs/imprint/page.php:1
148
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:61
149
+ msgid "Imprint"
150
+ msgstr ""
151
+
152
+ #: admin/class-sp-dsgvo-admin.php:78
153
+ msgid "Experts Info"
154
+ msgstr ""
155
+
156
+ #: admin/class-sp-dsgvo-admin.php:79
157
+ msgid "Legal advice"
158
+ msgstr ""
159
+
160
+ #: admin/class-sp-dsgvo-admin.php:80
161
+ msgid "FAQ"
162
+ msgstr ""
163
+
164
+ #: admin/class-sp-dsgvo-admin.php:81
165
+ msgid "About WP DSGVO Tools"
166
+ msgstr ""
167
+
168
+ #: admin/class-sp-dsgvo-admin.php:131
169
+ msgid "Privacy settings user page"
170
+ msgstr ""
171
+
172
+ #: admin/class-sp-dsgvo-admin.php:132
173
+ msgid "Delete request page"
174
+ msgstr ""
175
+
176
+ #: admin/class-sp-dsgvo-admin.php:133
177
+ msgid "Terms page"
178
+ msgstr ""
179
+
180
+ #: admin/class-sp-dsgvo-admin.php:134
181
+ msgid "Explicit permissions page"
182
+ msgstr ""
183
+
184
+ #: admin/class-sp-dsgvo-admin.php:135
185
+ msgid "Opt Out page"
186
+ msgstr ""
187
+
188
+ #: admin/class-sp-dsgvo-admin.php:136 admin/tabs/privacy-policy/page.php:12
189
+ msgid "Privacy policy page"
190
+ msgstr ""
191
+
192
+ #: admin/class-sp-dsgvo-admin.php:137
193
+ msgid "Subject access request page"
194
+ msgstr ""
195
+
196
+ #: admin/class-sp-dsgvo-admin.php:138
197
+ msgid "Imprint page"
198
+ msgstr ""
199
+
200
+ #: admin/class-sp-dsgvo-admin.php:189
201
+ msgid "Privacy settings of the user"
202
+ msgstr ""
203
+
204
+ #: admin/class-sp-dsgvo-admin.php:194
205
+ msgid "Dienste"
206
+ msgstr ""
207
+
208
+ #: admin/tabs/common-settings/class-sp-dsgvo-common-settings-activate-action.php:28
209
+ #: admin/tabs/common-settings/class-sp-dsgvo-common-settings-activate-action.php:50
210
+ msgid "error during license activation: "
211
+ msgstr ""
212
+
213
+ #: admin/tabs/common-settings/class-sp-dsgvo-common-settings-activate-action.php:77
214
+ msgid "error during license details: "
215
+ msgstr ""
216
+
217
+ #: admin/tabs/common-settings/class-sp-dsgvo-common-settings-tab.php:11
218
+ msgid "Common Settings"
219
+ msgstr ""
220
+
221
+ #: admin/tabs/common-settings/page.php:4
222
+ msgid "Activate Premium"
223
+ msgstr ""
224
+
225
+ #: admin/tabs/common-settings/page.php:8
226
+ msgid "License"
227
+ msgstr ""
228
+
229
+ #: admin/tabs/common-settings/page.php:15
230
+ msgid "Premium version has been activated"
231
+ msgstr ""
232
+
233
+ #: admin/tabs/common-settings/page.php:15
234
+ msgid "Invalid or expired license."
235
+ msgstr ""
236
+
237
+ #: admin/tabs/common-settings/page.php:18
238
+ msgid "Activated on:"
239
+ msgstr ""
240
+
241
+ #: admin/tabs/common-settings/page.php:18
242
+ msgid "Gültig bis:"
243
+ msgstr ""
244
+
245
+ #: admin/tabs/common-settings/page.php:20
246
+ msgid "Deactivate license"
247
+ msgstr ""
248
+
249
+ #: admin/tabs/common-settings/page.php:22
250
+ msgid "Activating the license unlocks premium features."
251
+ msgstr ""
252
+
253
+ #: admin/tabs/common-settings/page.php:23
254
+ msgid "Activate license"
255
+ msgstr ""
256
+
257
+ #: admin/tabs/common-settings/page.php:35
258
+ msgid "Allgemeine Einstellungen"
259
+ msgstr ""
260
+
261
+ #: admin/tabs/common-settings/page.php:39
262
+ msgid "Admin Email"
263
+ msgstr ""
264
+
265
+ #: admin/tabs/common-settings/page.php:43
266
+ msgid "Used by sending emails."
267
+ msgstr ""
268
+
269
+ #: admin/tabs/common-settings/page.php:46
270
+ msgid "Use WPML Strings"
271
+ msgstr ""
272
+
273
+ #: admin/tabs/common-settings/page.php:51
274
+ msgid "Use WPML String Translation for text inputs."
275
+ msgstr ""
276
+
277
+ #: admin/tabs/common-settings/page.php:56
278
+ #: admin/tabs/common-settings/page.php:58
279
+ msgid "Comments"
280
+ msgstr ""
281
+
282
+ #: admin/tabs/common-settings/page.php:58
283
+ msgid "Customizing possible with Blog/Premium edition."
284
+ msgstr ""
285
+
286
+ #: admin/tabs/common-settings/page.php:59
287
+ msgid "Click here to get a license."
288
+ msgstr ""
289
+
290
+ #: admin/tabs/common-settings/page.php:64
291
+ msgid "Checkbox for comments:"
292
+ msgstr ""
293
+
294
+ #: admin/tabs/common-settings/page.php:69
295
+ msgid ""
296
+ "Displays at checkbox which requires confirmation when creating a comment."
297
+ msgstr ""
298
+
299
+ #: admin/tabs/common-settings/page.php:73
300
+ msgid "Replace CF7 Acceptance text"
301
+ msgstr ""
302
+
303
+ #: admin/tabs/common-settings/page.php:78
304
+ msgid ""
305
+ "Replaces the text of CF7 Acceptance Checkboxes with following text. (Add to "
306
+ "your form: [acceptance dsgvo] Text[/acceptance])"
307
+ msgstr ""
308
+
309
+ #: admin/tabs/common-settings/page.php:82 admin/tabs/cookie-notice/page.php:326
310
+ msgid "Text"
311
+ msgstr ""
312
+
313
+ #: admin/tabs/common-settings/page.php:84
314
+ msgid "Message text:"
315
+ msgstr ""
316
+
317
+ #: admin/tabs/common-settings/page.php:90
318
+ msgid "Info text:"
319
+ msgstr ""
320
+
321
+ #: admin/tabs/common-settings/page.php:98
322
+ msgid "Confirmation text"
323
+ msgstr ""
324
+
325
+ #: admin/tabs/common-settings/page.php:109
326
+ msgid "Company data"
327
+ msgstr ""
328
+
329
+ #: admin/tabs/common-settings/page.php:110
330
+ msgid ""
331
+ "The following input fields represent the basic data necessary for the "
332
+ "creation of GDPR compliant data protection regulations and an imprint.<br /"
333
+ ">All entries made here are automatically used in the privacy policy and "
334
+ "imprint generated by the WP DSGVO Tools Plugin."
335
+ msgstr ""
336
+
337
+ #: admin/tabs/common-settings/page.php:114
338
+ msgid "Company name:"
339
+ msgstr ""
340
+
341
+ #: admin/tabs/common-settings/page.php:121
342
+ msgid "Street:"
343
+ msgstr ""
344
+
345
+ #: admin/tabs/common-settings/page.php:128
346
+ msgid "ZIP + Location:"
347
+ msgstr ""
348
+
349
+ #: admin/tabs/common-settings/page.php:135
350
+ msgid "Commercial book no.:"
351
+ msgstr ""
352
+
353
+ #: admin/tabs/common-settings/page.php:142
354
+ msgid "§11 Place of Jurisdiction:"
355
+ msgstr ""
356
+
357
+ #: admin/tabs/common-settings/page.php:149
358
+ msgid "VAT No.:"
359
+ msgstr ""
360
+
361
+ #: admin/tabs/common-settings/page.php:156
362
+ msgid "Legal representatives:"
363
+ msgstr ""
364
+
365
+ #: admin/tabs/common-settings/page.php:160
366
+ msgid "The person who legally represents the company."
367
+ msgstr ""
368
+
369
+ #: admin/tabs/common-settings/page.php:163
370
+ msgid "Shareholder"
371
+ msgstr ""
372
+
373
+ #: admin/tabs/common-settings/page.php:167
374
+ msgid "In case of companies please contact all shareholders here."
375
+ msgstr ""
376
+
377
+ #: admin/tabs/common-settings/page.php:170
378
+ msgid "Responsible for content:"
379
+ msgstr ""
380
+
381
+ #: admin/tabs/common-settings/page.php:174
382
+ msgid "The person responsible for the content on this website."
383
+ msgstr ""
384
+
385
+ #: admin/tabs/common-settings/page.php:177
386
+ msgid "Phone:"
387
+ msgstr ""
388
+
389
+ #: admin/tabs/common-settings/page.php:184
390
+ msgid "Email:"
391
+ msgstr ""
392
+
393
+ #: admin/tabs/common-settings/page.php:191
394
+ msgid "Newsletter service:"
395
+ msgstr ""
396
+
397
+ #: admin/tabs/common-settings/page.php:195
398
+ msgid ""
399
+ "Name of the shipping service provider with which the newsletters will be "
400
+ "sent."
401
+ msgstr ""
402
+
403
+ #: admin/tabs/common-settings/page.php:198
404
+ msgid "URL Privacy Police of Newsletter Service:"
405
+ msgstr ""
406
+
407
+ #: admin/tabs/common-settings/page.php:202
408
+ msgid "The URL to the terms of the newsletter service."
409
+ msgstr ""
410
+
411
+ #: admin/tabs/cookie-notice/class-sp-dsgvo-cookie-notice-tab.php:11
412
+ #: admin/tabs/cookie-notice/page.php:4 admin/tabs/cookie-notice/page.php:76
413
+ msgid "Cookie Notice"
414
+ msgstr ""
415
+
416
+ #: admin/tabs/cookie-notice/page.php:8
417
+ msgid "Tracker initialization:"
418
+ msgstr ""
419
+
420
+ #: admin/tabs/cookie-notice/page.php:13
421
+ msgid "When loading the page"
422
+ msgstr ""
423
+
424
+ #: admin/tabs/cookie-notice/page.php:14
425
+ msgid "After approval of the cookie"
426
+ msgstr ""
427
+
428
+ #: admin/tabs/cookie-notice/page.php:16
429
+ msgid ""
430
+ "Specifies when the trackers should be active. Whether before the consent of "
431
+ "the cookie or after clicking on Ok. For After approval Reload after approval "
432
+ "must be checked."
433
+ msgstr ""
434
+
435
+ #: admin/tabs/cookie-notice/page.php:27
436
+ msgid "Google Analyics"
437
+ msgstr ""
438
+
439
+ #: admin/tabs/cookie-notice/page.php:35
440
+ msgid "GTAG number:"
441
+ msgstr ""
442
+
443
+ #: admin/tabs/cookie-notice/page.php:42
444
+ msgid ""
445
+ "The IP address will be anonymously and visitors get the option refuse "
446
+ "tracking. <br />Tip: Country specific geodata will be further tracked even "
447
+ "with anonymization."
448
+ msgstr ""
449
+
450
+ #: admin/tabs/cookie-notice/page.php:50
451
+ msgid "Facebook Pixel"
452
+ msgstr ""
453
+
454
+ #: admin/tabs/cookie-notice/page.php:57
455
+ msgid "FB Pixel Id:"
456
+ msgstr ""
457
+
458
+ #: admin/tabs/cookie-notice/page.php:64
459
+ msgid "Visitors maintained the opportunity to reject the tracking."
460
+ msgstr ""
461
+
462
+ #: admin/tabs/cookie-notice/page.php:84
463
+ msgid "Notice text:"
464
+ msgstr ""
465
+
466
+ #: admin/tabs/cookie-notice/page.php:86
467
+ msgid "Insert the text here"
468
+ msgstr ""
469
+
470
+ #: admin/tabs/cookie-notice/page.php:90
471
+ msgid "Validity:"
472
+ msgstr ""
473
+
474
+ #: admin/tabs/cookie-notice/page.php:96
475
+ msgid "Tag"
476
+ msgstr ""
477
+
478
+ #: admin/tabs/cookie-notice/page.php:98
479
+ msgid "Woche"
480
+ msgstr ""
481
+
482
+ #: admin/tabs/cookie-notice/page.php:100 admin/tabs/cookie-notice/page.php:102
483
+ #: admin/tabs/cookie-notice/page.php:104
484
+ msgid "Month"
485
+ msgstr ""
486
+
487
+ #: admin/tabs/cookie-notice/page.php:106
488
+ msgid "Year"
489
+ msgstr ""
490
+
491
+ #: admin/tabs/cookie-notice/page.php:108
492
+ msgid "For this period, the cookie is navigation use validly."
493
+ msgstr ""
494
+
495
+ #: admin/tabs/cookie-notice/page.php:117
496
+ msgid "Confirmation"
497
+ msgstr ""
498
+
499
+ #: admin/tabs/cookie-notice/page.php:122 admin/tabs/cookie-notice/page.php:159
500
+ #: admin/tabs/cookie-notice/page.php:207
501
+ msgid "Button text:"
502
+ msgstr ""
503
+
504
+ #: admin/tabs/cookie-notice/page.php:127
505
+ msgid "zB.: Ok"
506
+ msgstr ""
507
+
508
+ #: admin/tabs/cookie-notice/page.php:128
509
+ msgid "The text to be displayed is to accept the note and hide the message."
510
+ msgstr ""
511
+
512
+ #: admin/tabs/cookie-notice/page.php:133
513
+ msgid "Reload after confirm:"
514
+ msgstr ""
515
+
516
+ #: admin/tabs/cookie-notice/page.php:139
517
+ msgid "Enable this option to reload the page after accepting cookies."
518
+ msgstr ""
519
+
520
+ #: admin/tabs/cookie-notice/page.php:144 public/class-sp-dsgvo-public.php:172
521
+ msgid "Decline"
522
+ msgstr ""
523
+
524
+ #: admin/tabs/cookie-notice/page.php:149 admin/tabs/cookie-notice/page.php:196
525
+ msgid "Button active:"
526
+ msgstr ""
527
+
528
+ #: admin/tabs/cookie-notice/page.php:165
529
+ msgid "eg.: Decline"
530
+ msgstr ""
531
+
532
+ #: admin/tabs/cookie-notice/page.php:166
533
+ msgid "The text of the option to decline cookies."
534
+ msgstr ""
535
+
536
+ #: admin/tabs/cookie-notice/page.php:171
537
+ msgid "Link target for rejection:"
538
+ msgstr ""
539
+
540
+ #: admin/tabs/cookie-notice/page.php:177
541
+ msgid "zb.: www.google.at"
542
+ msgstr ""
543
+
544
+ #: admin/tabs/cookie-notice/page.php:178
545
+ msgid ""
546
+ "Specifies the destination where visitors who want to reject the message "
547
+ "should be forwarded."
548
+ msgstr ""
549
+
550
+ #: admin/tabs/cookie-notice/page.php:182
551
+ msgid "Do not set a cookie on forwarding:"
552
+ msgstr ""
553
+
554
+ #: admin/tabs/cookie-notice/page.php:187
555
+ msgid ""
556
+ "If active, the visitor refuses and returns to the page, the notice will "
557
+ "reappear."
558
+ msgstr ""
559
+
560
+ #: admin/tabs/cookie-notice/page.php:191 public/class-sp-dsgvo-public.php:183
561
+ msgid "Read more"
562
+ msgstr ""
563
+
564
+ #: admin/tabs/cookie-notice/page.php:213
565
+ msgid "zB.: Erfahre mehr"
566
+ msgstr ""
567
+
568
+ #: admin/tabs/cookie-notice/page.php:214
569
+ msgid "The text of the option to obtain more information"
570
+ msgstr ""
571
+
572
+ #: admin/tabs/cookie-notice/page.php:218
573
+ msgid "Link destination to read on:"
574
+ msgstr ""
575
+
576
+ #: admin/tabs/cookie-notice/page.php:231
577
+ msgid ""
578
+ "Specifies the destination to where visitors will find more information about "
579
+ "cookies."
580
+ msgstr ""
581
+
582
+ #: admin/tabs/cookie-notice/page.php:237
583
+ msgid "Options for displaying the cookie notice."
584
+ msgstr ""
585
+
586
+ #: admin/tabs/cookie-notice/page.php:241
587
+ msgid "Position:"
588
+ msgstr ""
589
+
590
+ #: admin/tabs/cookie-notice/page.php:245
591
+ msgid "On top"
592
+ msgstr ""
593
+
594
+ #: admin/tabs/cookie-notice/page.php:247
595
+ msgid "Bottom"
596
+ msgstr ""
597
+
598
+ #: admin/tabs/cookie-notice/page.php:249
599
+ msgid "Specifies the location where the cookie notice should be displayed."
600
+ msgstr ""
601
+
602
+ #: admin/tabs/cookie-notice/page.php:253
603
+ msgid "Animation"
604
+ msgstr ""
605
+
606
+ #: admin/tabs/cookie-notice/page.php:258
607
+ msgid "None"
608
+ msgstr ""
609
+
610
+ #: admin/tabs/cookie-notice/page.php:260
611
+ msgid "fade"
612
+ msgstr ""
613
+
614
+ #: admin/tabs/cookie-notice/page.php:262
615
+ msgid "hide"
616
+ msgstr ""
617
+
618
+ #: admin/tabs/cookie-notice/page.php:264
619
+ msgid "Animation when accepting the cookie message."
620
+ msgstr ""
621
+
622
+ #: admin/tabs/cookie-notice/page.php:276 admin/tabs/cookie-notice/page.php:278
623
+ msgid "Color adjustment"
624
+ msgstr ""
625
+
626
+ #: admin/tabs/cookie-notice/page.php:278
627
+ msgid "In der Blog oder Premium Edition möglich"
628
+ msgstr ""
629
+
630
+ #: admin/tabs/cookie-notice/page.php:279
631
+ msgid "Click here to get a license"
632
+ msgstr ""
633
+
634
+ #: admin/tabs/cookie-notice/page.php:284
635
+ msgid "Background:"
636
+ msgstr ""
637
+
638
+ #: admin/tabs/cookie-notice/page.php:293
639
+ msgid "Text:"
640
+ msgstr ""
641
+
642
+ #: admin/tabs/cookie-notice/page.php:301
643
+ msgid "Buttons"
644
+ msgstr ""
645
+
646
+ #: admin/tabs/cookie-notice/page.php:302
647
+ msgid "Background"
648
+ msgstr ""
649
+
650
+ #: admin/tabs/cookie-notice/page.php:307
651
+ msgid "Font:"
652
+ msgstr ""
653
+
654
+ #: admin/tabs/cookie-notice/page.php:314
655
+ msgid "CSS Classes"
656
+ msgstr ""
657
+
658
+ #: admin/tabs/cookie-notice/page.php:315
659
+ msgid ""
660
+ "The colors listed under \"Color Changes“ must be overwritten with !Important."
661
+ msgstr ""
662
+
663
+ #: admin/tabs/cookie-notice/page.php:318
664
+ msgid "Cookie notice:"
665
+ msgstr ""
666
+
667
+ #: admin/tabs/cookie-notice/page.php:334
668
+ msgid "Buttons:"
669
+ msgstr ""
670
+
671
+ #: admin/tabs/cookie-notice/page.php:342
672
+ msgid "Further display options"
673
+ msgstr ""
674
+
675
+ #: admin/tabs/cookie-notice/page.php:345
676
+ msgid "Font size"
677
+ msgstr ""
678
+
679
+ #: admin/tabs/cookie-notice/page.php:352 admin/tabs/cookie-notice/page.php:375
680
+ #: admin/tabs/services/page.php:62 admin/tabs/services/page.php:107
681
+ #: admin/tabs/services/page.php:146
682
+ msgid "Default"
683
+ msgstr ""
684
+
685
+ #: admin/tabs/cookie-notice/page.php:368
686
+ msgid "Height of cookie notice"
687
+ msgstr ""
688
+
689
+ #: admin/tabs/cookie-notice/page.php:390
690
+ msgid "Show icon:"
691
+ msgstr ""
692
+
693
+ #: admin/tabs/cookie-notice/page.php:399
694
+ msgid "Use overlay"
695
+ msgstr ""
696
+
697
+ #: admin/tabs/cookie-notice/page.php:405
698
+ msgid ""
699
+ "Displays a gray background and prevents the visitor from interacting with "
700
+ "the site before making a choice."
701
+ msgstr ""
702
+
703
+ #: admin/tabs/gravity-forms/class-sp-dsgvo-gravity-forms-tab.php:10
704
+ #: admin/tabs/gravity-forms/page.php:4
705
+ msgid "Gravity Forms"
706
+ msgstr ""
707
+
708
+ #: admin/tabs/gravity-forms/page.php:6
709
+ msgid ""
710
+ "With these settings the saving behavior of Gravity Forms can be configured."
711
+ msgstr ""
712
+
713
+ #: admin/tabs/gravity-forms/page.php:13
714
+ msgid "Do not save form data in the database"
715
+ msgstr ""
716
+
717
+ #: admin/tabs/gravity-forms/page.php:17
718
+ msgid ""
719
+ "If activated, no data will be stored, but only sent by e-mail. (Note: This "
720
+ "option overrides form-specific settings).)."
721
+ msgstr ""
722
+
723
+ #: admin/tabs/gravity-forms/page.php:20
724
+ msgid "Do not save IP address and user agent in database"
725
+ msgstr ""
726
+
727
+ #: admin/tabs/gravity-forms/page.php:24
728
+ msgid ""
729
+ "By default, if this checkbox is checked, this will be prevented from saving "
730
+ "the IP address and user agent of the sender."
731
+ msgstr ""
732
+
733
+ #: admin/tabs/gravity-forms/page.php:34
734
+ msgid "Specific form settings"
735
+ msgstr ""
736
+
737
+ #: admin/tabs/gravity-forms/page.php:35
738
+ msgid ""
739
+ "For each Gravity Forms form, it can be subsequently defined for each field "
740
+ "whether the data of the input field is stored in the database or not."
741
+ msgstr ""
742
+
743
+ #: admin/tabs/gravity-forms/page.php:46
744
+ msgid "Nicht in der Datenbank speichern."
745
+ msgstr ""
746
+
747
+ #: admin/tabs/imprint/page.php:2
748
+ msgid ""
749
+ "With the shortcode <code>[imprint]</code> an inprint automatically gets "
750
+ "generated. The data will be taken from general settings."
751
+ msgstr ""
752
+
753
+ #: admin/tabs/imprint/page.php:10
754
+ msgid "Imprint Page"
755
+ msgstr ""
756
+
757
+ #: admin/tabs/imprint/page.php:14 admin/tabs/privacy-policy/page.php:15
758
+ #: admin/tabs/services/page.php:17
759
+ msgid "Page"
760
+ msgstr ""
761
+
762
+ #: admin/tabs/imprint/page.php:16 admin/tabs/privacy-policy/page.php:17
763
+ #: admin/tabs/services/page.php:19
764
+ #: admin/tabs/subject-access-request/page.php:53
765
+ #: admin/tabs/super-unsubscribe/page.php:124
766
+ msgid "Select"
767
+ msgstr ""
768
+
769
+ #: admin/tabs/imprint/page.php:26
770
+ msgid "Create a page that uses the shortcode <code>[imprint]</code>."
771
+ msgstr ""
772
+
773
+ #: admin/tabs/imprint/page.php:26 admin/tabs/services/page.php:37
774
+ #: admin/tabs/subject-access-request/page.php:68
775
+ #: admin/tabs/super-unsubscribe/page.php:138
776
+ msgid "Create page"
777
+ msgstr ""
778
+
779
+ #: admin/tabs/imprint/page.php:28
780
+ msgid ""
781
+ "Attention: The shortcode <code>[imprint]</code> was not found on the page "
782
+ "you selected."
783
+ msgstr ""
784
+
785
+ #: admin/tabs/imprint/page.php:28 admin/tabs/imprint/page.php:30
786
+ #: admin/tabs/privacy-policy/page.php:27 admin/tabs/privacy-policy/page.php:29
787
+ #: admin/tabs/privacy-policy/page.php:31 admin/tabs/services/page.php:41
788
+ #: admin/tabs/services/page.php:43
789
+ #: admin/tabs/subject-access-request/page.php:73
790
+ #: admin/tabs/subject-access-request/page.php:76
791
+ #: admin/tabs/super-unsubscribe/page.php:143
792
+ #: admin/tabs/super-unsubscribe/page.php:146
793
+ msgid "Edit page"
794
+ msgstr ""
795
+
796
+ #: admin/tabs/imprint/page.php:40 admin/tabs/privacy-policy/page.php:47
797
+ msgid ""
798
+ "Note: In order to be able to reset or reload the text (eg: after changing "
799
+ "the language), highlight the text, delete it and click save. Thus, the text "
800
+ "is reloaded."
801
+ msgstr ""
802
+
803
+ #: admin/tabs/integrations/class-sp-dsgvo-integrations-tab.php:10
804
+ #: admin/tabs/integrations/page.php:1
805
+ msgid "Integrations"
806
+ msgstr ""
807
+
808
+ #: admin/tabs/integrations/page.php:14
809
+ msgid "No integrations installed"
810
+ msgstr ""
811
+
812
+ #: admin/tabs/privacy-policy/class-sp-dsgvo-privacy-policy-tab.php:11
813
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:51
814
+ msgid "Privacy Policy"
815
+ msgstr ""
816
+
817
+ #: admin/tabs/privacy-policy/page.php:3
818
+ msgid ""
819
+ "The shortcode <code>[privacy_policy]</code> generates a privacy page from "
820
+ "the input made under General Settings."
821
+ msgstr ""
822
+
823
+ #: admin/tabs/privacy-policy/page.php:5
824
+ msgid ""
825
+ "Initially, this text is filled with a template. The text blocks in the "
826
+ "square brackets ([]) are filled with the values ​​that you entered in the "
827
+ "General Settings. You can customize the entire text to your requirements, as "
828
+ "well as delete passages if they do not apply to them."
829
+ msgstr ""
830
+
831
+ #: admin/tabs/privacy-policy/page.php:27
832
+ msgid "Create a page that uses the shortcode <code>[privacy_policy]</code>."
833
+ msgstr ""
834
+
835
+ #: admin/tabs/privacy-policy/page.php:29
836
+ msgid ""
837
+ "Attention: The shortcode <code>[privacy_policy]</code> was not found on the "
838
+ "page you selected."
839
+ msgstr ""
840
+
841
+ #: admin/tabs/privacy-policy/page.php:36
842
+ msgid "Show checkbox at WooCommerce checkout to confirm privacy policy"
843
+ msgstr ""
844
+
845
+ #: admin/tabs/services/class-sp-dsgvo-delete-service-action.php:22
846
+ msgid "Third-party service deleted by"
847
+ msgstr ""
848
+
849
+ #: admin/tabs/services/class-sp-dsgvo-services-tab.php:10
850
+ msgid "Privacy policy & Plugins"
851
+ msgstr ""
852
+
853
+ #: admin/tabs/services/page.php:1
854
+ msgid "Privacy: Settings and 3rd party plugins"
855
+ msgstr ""
856
+
857
+ #: admin/tabs/services/page.php:2
858
+ msgid ""
859
+ "All 3rd Party Plugins (Google Analytics, Facebook Pixel, ..) can be listed "
860
+ "here to give their users a selective opt-in / opt-out."
861
+ msgstr ""
862
+
863
+ #: admin/tabs/services/page.php:3
864
+ msgid ""
865
+ "With the shortcode <code>[display_services]</code> these services can then "
866
+ "be displayed to the user."
867
+ msgstr ""
868
+
869
+ #: admin/tabs/services/page.php:12
870
+ msgid "Datenschutz Seite für ihre Benutzer"
871
+ msgstr ""
872
+
873
+ #: admin/tabs/services/page.php:29
874
+ msgid ""
875
+ "Specifies the page where users have the option to customize their privacy "
876
+ "settings (selective opt-in / opt-out)."
877
+ msgstr ""
878
+
879
+ #: admin/tabs/services/page.php:35
880
+ msgid ""
881
+ "Create a page that uses the shortcode <code>[user_privacy_settings_form]</"
882
+ "code>."
883
+ msgstr ""
884
+
885
+ #: admin/tabs/services/page.php:41
886
+ msgid ""
887
+ "Attention: The shortcode <code>[user_privacy_settings_form]</code> was not "
888
+ "found on the selected page. The form will not be displayed."
889
+ msgstr ""
890
+
891
+ #: admin/tabs/services/page.php:44
892
+ msgid ""
893
+ "The shortcode <code>[user_privacy_settings_form]</code> allows the user to "
894
+ "activate or deactivate services on the selected page."
895
+ msgstr ""
896
+
897
+ #: admin/tabs/services/page.php:58 admin/tabs/services/page.php:103
898
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:41
899
+ msgid "Slug"
900
+ msgstr ""
901
+
902
+ #: admin/tabs/services/page.php:59 admin/tabs/services/page.php:104
903
+ #: admin/tabs/services/page.php:125
904
+ #: includes/class-sp-dsgvo-data-collecter.php:66
905
+ #: includes/class-sp-dsgvo-data-collecter.php:71
906
+ #: includes/class-sp-dsgvo-data-collecter.php:78
907
+ #: includes/class-sp-dsgvo-data-collecter.php:129
908
+ #: includes/class-sp-dsgvo-data-collecter.php:143
909
+ #: includes/class-sp-dsgvo-data-collecter.php:166
910
+ msgid "Name"
911
+ msgstr ""
912
+
913
+ #: admin/tabs/services/page.php:60 admin/tabs/services/page.php:105
914
+ #: admin/tabs/services/page.php:132 templates/de_DE/emails/feedback.php:10
915
+ #: templates/en_EN/emails/feedback.php:10
916
+ #: templates/en_US/emails/feedback.php:10
917
+ msgid "Reason"
918
+ msgstr ""
919
+
920
+ #: admin/tabs/services/page.php:61 admin/tabs/services/page.php:106
921
+ #: admin/tabs/services/page.php:139
922
+ msgid "Terms Url"
923
+ msgstr ""
924
+
925
+ #: admin/tabs/services/page.php:63 admin/tabs/services/page.php:93
926
+ #: admin/tabs/services/page.php:108 admin/tabs/super-unsubscribe/page.php:71
927
+ #: admin/tabs/super-unsubscribe/page.php:84
928
+ #: admin/tabs/super-unsubscribe/page.php:97
929
+ #: admin/tabs/super-unsubscribe/page.php:110
930
+ msgid "Delete"
931
+ msgstr ""
932
+
933
+ #: admin/tabs/services/page.php:84
934
+ msgid "Terms & Conditions link"
935
+ msgstr ""
936
+
937
+ #: admin/tabs/services/page.php:88 admin/tabs/services/page.php:149
938
+ #: public/shortcodes/privacy-settings-form.php:19
939
+ msgid "Enabled"
940
+ msgstr ""
941
+
942
+ #: admin/tabs/services/page.php:89 admin/tabs/services/page.php:150
943
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:51
944
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:65
945
+ msgid "Disabled"
946
+ msgstr ""
947
+
948
+ #: admin/tabs/services/page.php:121 admin/tabs/services/page.php:158
949
+ msgid "Add service"
950
+ msgstr ""
951
+
952
+ #: admin/tabs/services/page.php:128
953
+ msgid "Service name"
954
+ msgstr ""
955
+
956
+ #: admin/tabs/services/page.php:135
957
+ #: public/shortcodes/privacy-settings-form.php:17
958
+ msgid "Reason for use"
959
+ msgstr ""
960
+
961
+ #: admin/tabs/services/page.php:142
962
+ msgid "The URL pointing to the terms of the service"
963
+ msgstr ""
964
+
965
+ #: admin/tabs/services/page.php:152
966
+ msgid "Indicates whether the service should be enabled by default or not."
967
+ msgstr ""
968
+
969
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:18
970
+ msgid "Plugin installed"
971
+ msgstr ""
972
+
973
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:36
974
+ #: admin/tabs/subject-access-request/class-sp-dsgvo-subject-access-request-tab.php:10
975
+ #: templates/de_DE/emails/subject-access-request.php:21
976
+ #: templates/en_EN/emails/subject-access-request.php:21
977
+ #: templates/en_US/emails/subject-access-request.php:21
978
+ msgid "Subject Access Request"
979
+ msgstr ""
980
+
981
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:41
982
+ msgid "User privacy settings"
983
+ msgstr ""
984
+
985
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:46
986
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:67
987
+ msgid "Terms & Conditions"
988
+ msgstr ""
989
+
990
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:56
991
+ #: templates/de_DE/emails/super-unsubscribe.php:20
992
+ #: templates/en_EN/emails/super-unsubscribe.php:20
993
+ #: templates/en_US/emails/super-unsubscribe.php:20
994
+ msgid "Delete Request"
995
+ msgstr ""
996
+
997
+ #: admin/tabs/setup/class-sp-dsgvo-create-page-action.php:72
998
+ msgid "Opt-out"
999
+ msgstr ""
1000
+
1001
+ #: admin/tabs/setup/class-sp-dsgvo-setup-tab.php:9 admin/tabs/setup/page.php:1
1002
+ msgid "Setup"
1003
+ msgstr ""
1004
+
1005
+ #: admin/tabs/subject-access-request/page.php:1
1006
+ msgid "Subject Access Requests"
1007
+ msgstr ""
1008
+
1009
+ #: admin/tabs/subject-access-request/page.php:2
1010
+ msgid ""
1011
+ "This feature allows users to request a digest of all data stored by you. "
1012
+ "<br> All data in your database is checked for confidential data and sent to "
1013
+ "the User by email."
1014
+ msgstr ""
1015
+
1016
+ #: admin/tabs/subject-access-request/page.php:12
1017
+ #: admin/tabs/super-unsubscribe/page.php:13
1018
+ msgid "Automatic processing"
1019
+ msgstr ""
1020
+
1021
+ #: admin/tabs/subject-access-request/page.php:17
1022
+ #: admin/tabs/super-unsubscribe/page.php:50
1023
+ msgid "none"
1024
+ msgstr ""
1025
+
1026
+ #: admin/tabs/subject-access-request/page.php:18
1027
+ msgid "day"
1028
+ msgstr ""
1029
+
1030
+ #: admin/tabs/subject-access-request/page.php:19
1031
+ #: admin/tabs/subject-access-request/page.php:20
1032
+ msgid "days"
1033
+ msgstr ""
1034
+
1035
+ #: admin/tabs/subject-access-request/page.php:21
1036
+ msgid "weeks"
1037
+ msgstr ""
1038
+
1039
+ #: admin/tabs/subject-access-request/page.php:24
1040
+ msgid ""
1041
+ "Requests will be automatically processed after the set time and sent to the "
1042
+ "user."
1043
+ msgstr ""
1044
+
1045
+ #: admin/tabs/subject-access-request/page.php:28
1046
+ #: admin/tabs/super-unsubscribe/page.php:26
1047
+ msgid "Email for new application:"
1048
+ msgstr ""
1049
+
1050
+ #: admin/tabs/subject-access-request/page.php:34
1051
+ #: admin/tabs/super-unsubscribe/page.php:32
1052
+ msgid "Send a notification for a new application to the admin email address."
1053
+ msgstr ""
1054
+
1055
+ #: admin/tabs/subject-access-request/page.php:38
1056
+ msgid "GDPR consent text:"
1057
+ msgstr ""
1058
+
1059
+ #: admin/tabs/subject-access-request/page.php:43
1060
+ msgid "The text to be displayed in the GDPR checkbox for data storage."
1061
+ msgstr ""
1062
+
1063
+ #: admin/tabs/subject-access-request/page.php:48
1064
+ msgid "Request page:"
1065
+ msgstr ""
1066
+
1067
+ #: admin/tabs/subject-access-request/page.php:62
1068
+ msgid ""
1069
+ "Specifies the page on which users have the option to request their data "
1070
+ "extract."
1071
+ msgstr ""
1072
+
1073
+ #: admin/tabs/subject-access-request/page.php:66
1074
+ msgid "Create a page using the shortcode <code>[sar_form]</code>."
1075
+ msgstr ""
1076
+
1077
+ #: admin/tabs/subject-access-request/page.php:72
1078
+ msgid ""
1079
+ "Attention: The shortcode <code>[sar_form]</code> of the selected page was "
1080
+ "not found. Thus, the user has no opportunity to request the data."
1081
+ msgstr ""
1082
+
1083
+ #: admin/tabs/subject-access-request/page.php:97
1084
+ #: admin/tabs/subject-access-request/page.php:146
1085
+ #: admin/tabs/super-unsubscribe/page.php:197
1086
+ #: admin/tabs/super-unsubscribe/page.php:264
1087
+ msgid "ID"
1088
+ msgstr ""
1089
+
1090
+ #: admin/tabs/subject-access-request/page.php:99
1091
+ #: admin/tabs/subject-access-request/page.php:147
1092
+ #: admin/tabs/subject-access-request/page.php:175
1093
+ #: admin/tabs/super-unsubscribe/page.php:199
1094
+ #: admin/tabs/super-unsubscribe/page.php:265
1095
+ #: admin/tabs/super-unsubscribe/page.php:295
1096
+ #: includes/class-sp-dsgvo-data-collecter.php:79
1097
+ #: includes/class-sp-dsgvo-data-collecter.php:130
1098
+ #: includes/class-sp-dsgvo-data-collecter.php:167
1099
+ #: includes/class-sp-dsgvo-data-collecter.php:370
1100
+ #: public/shortcodes/subject-access-request/subject-access-request.php:38
1101
+ #: public/shortcodes/subject-access-request/subject-access-request.php:39
1102
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:42
1103
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:43
1104
+ msgid "Email"
1105
+ msgstr ""
1106
+
1107
+ #: admin/tabs/subject-access-request/page.php:101
1108
+ #: admin/tabs/subject-access-request/page.php:148
1109
+ #: admin/tabs/subject-access-request/page.php:180
1110
+ #: admin/tabs/super-unsubscribe/page.php:201
1111
+ #: admin/tabs/super-unsubscribe/page.php:266
1112
+ #: admin/tabs/super-unsubscribe/page.php:300
1113
+ #: public/shortcodes/subject-access-request/subject-access-request.php:26
1114
+ #: public/shortcodes/subject-access-request/subject-access-request.php:27
1115
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:30
1116
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:31
1117
+ msgid "First name"
1118
+ msgstr ""
1119
+
1120
+ #: admin/tabs/subject-access-request/page.php:103
1121
+ #: admin/tabs/subject-access-request/page.php:149
1122
+ #: admin/tabs/subject-access-request/page.php:185
1123
+ #: admin/tabs/super-unsubscribe/page.php:203
1124
+ #: admin/tabs/super-unsubscribe/page.php:267
1125
+ #: admin/tabs/super-unsubscribe/page.php:305
1126
+ #: public/shortcodes/subject-access-request/subject-access-request.php:31
1127
+ #: public/shortcodes/subject-access-request/subject-access-request.php:32
1128
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:35
1129
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:36
1130
+ msgid "Last name"
1131
+ msgstr ""
1132
+
1133
+ #: admin/tabs/subject-access-request/page.php:105
1134
+ #: admin/tabs/subject-access-request/page.php:150
1135
+ #: admin/tabs/subject-access-request/page.php:190
1136
+ #: admin/tabs/super-unsubscribe/page.php:205
1137
+ #: admin/tabs/super-unsubscribe/page.php:268
1138
+ #: admin/tabs/super-unsubscribe/page.php:310
1139
+ msgid "GDPR approval"
1140
+ msgstr ""
1141
+
1142
+ #: admin/tabs/subject-access-request/page.php:107
1143
+ #: admin/tabs/subject-access-request/page.php:131
1144
+ #: admin/tabs/subject-access-request/page.php:151
1145
+ msgid "Run"
1146
+ msgstr ""
1147
+
1148
+ #: admin/tabs/subject-access-request/page.php:137
1149
+ msgid "No open requests"
1150
+ msgstr ""
1151
+
1152
+ #: admin/tabs/subject-access-request/page.php:159
1153
+ msgid "Run all"
1154
+ msgstr ""
1155
+
1156
+ #: admin/tabs/subject-access-request/page.php:171
1157
+ #: admin/tabs/super-unsubscribe/page.php:290
1158
+ msgid "Add entry"
1159
+ msgstr ""
1160
+
1161
+ #: admin/tabs/subject-access-request/page.php:195
1162
+ msgid "Run now"
1163
+ msgstr ""
1164
+
1165
+ #: admin/tabs/subject-access-request/page.php:200
1166
+ msgid "Show email"
1167
+ msgstr ""
1168
+
1169
+ #: admin/tabs/subject-access-request/page.php:207
1170
+ #: admin/tabs/super-unsubscribe/page.php:322
1171
+ msgid "Add"
1172
+ msgstr ""
1173
+
1174
+ #: admin/tabs/super-unsubscribe/class-sp-dsgvo-super-unsubscribe-tab.php:9
1175
+ msgid "Delete request"
1176
+ msgstr ""
1177
+
1178
+ #: admin/tabs/super-unsubscribe/page.php:1
1179
+ msgid "Delete Requests"
1180
+ msgstr ""
1181
+
1182
+ #: admin/tabs/super-unsubscribe/page.php:2
1183
+ msgid ""
1184
+ "Here you will find all deletion requests that users have made on their site. "
1185
+ "With a click on \"delete now \" you delete all stored data of the user on "
1186
+ "their side including Plugins."
1187
+ msgstr ""
1188
+
1189
+ #: admin/tabs/super-unsubscribe/page.php:17
1190
+ msgid "Immediately on request"
1191
+ msgstr ""
1192
+
1193
+ #: admin/tabs/super-unsubscribe/page.php:23
1194
+ msgid "If enabled, delete requests are performed immediately."
1195
+ msgstr ""
1196
+
1197
+ #: admin/tabs/super-unsubscribe/page.php:36
1198
+ msgid "GDPR confirmation text:"
1199
+ msgstr ""
1200
+
1201
+ #: admin/tabs/super-unsubscribe/page.php:41
1202
+ msgid "The text to be displayed in the GDPR checkbox for data deletion."
1203
+ msgstr ""
1204
+
1205
+ #: admin/tabs/super-unsubscribe/page.php:45
1206
+ msgid "After period"
1207
+ msgstr ""
1208
+
1209
+ #: admin/tabs/super-unsubscribe/page.php:51
1210
+ msgid "month"
1211
+ msgstr ""
1212
+
1213
+ #: admin/tabs/super-unsubscribe/page.php:52
1214
+ #: admin/tabs/super-unsubscribe/page.php:53
1215
+ msgid "months"
1216
+ msgstr ""
1217
+
1218
+ #: admin/tabs/super-unsubscribe/page.php:54
1219
+ msgid "year"
1220
+ msgstr ""
1221
+
1222
+ #: admin/tabs/super-unsubscribe/page.php:55
1223
+ #: admin/tabs/super-unsubscribe/page.php:56
1224
+ msgid "years"
1225
+ msgstr ""
1226
+
1227
+ #: admin/tabs/super-unsubscribe/page.php:59
1228
+ msgid ""
1229
+ "Data is automatically deleted after the set time. Ensures the maximum "
1230
+ "retention time."
1231
+ msgstr ""
1232
+
1233
+ #: admin/tabs/super-unsubscribe/page.php:64
1234
+ msgid "WooCommerce Data"
1235
+ msgstr ""
1236
+
1237
+ #: admin/tabs/super-unsubscribe/page.php:69
1238
+ #: admin/tabs/super-unsubscribe/page.php:82
1239
+ #: admin/tabs/super-unsubscribe/page.php:95
1240
+ #: admin/tabs/super-unsubscribe/page.php:108
1241
+ msgid "No action"
1242
+ msgstr ""
1243
+
1244
+ #: admin/tabs/super-unsubscribe/page.php:70
1245
+ #: admin/tabs/super-unsubscribe/page.php:83
1246
+ #: admin/tabs/super-unsubscribe/page.php:96
1247
+ #: admin/tabs/super-unsubscribe/page.php:109
1248
+ msgid "Pseudonymise"
1249
+ msgstr ""
1250
+
1251
+ #: admin/tabs/super-unsubscribe/page.php:74
1252
+ msgid "Specifies what should happen to personal data of orders."
1253
+ msgstr ""
1254
+
1255
+ #: admin/tabs/super-unsubscribe/page.php:77
1256
+ msgid "bbPress Data"
1257
+ msgstr ""
1258
+
1259
+ #: admin/tabs/super-unsubscribe/page.php:87
1260
+ msgid "Specifies what should happen with forum entries."
1261
+ msgstr ""
1262
+
1263
+ #: admin/tabs/super-unsubscribe/page.php:90
1264
+ msgid "buddyPress Data"
1265
+ msgstr ""
1266
+
1267
+ #: admin/tabs/super-unsubscribe/page.php:100
1268
+ msgid "Specifies what should happen with PNs and extended profile fields."
1269
+ msgstr ""
1270
+
1271
+ #: admin/tabs/super-unsubscribe/page.php:103
1272
+ msgid "CF7/Flamingo Data"
1273
+ msgstr ""
1274
+
1275
+ #: admin/tabs/super-unsubscribe/page.php:113
1276
+ msgid "Specifies what to do with contact entries and messages."
1277
+ msgstr ""
1278
+
1279
+ #: admin/tabs/super-unsubscribe/page.php:118
1280
+ msgid "Page for deletion request:"
1281
+ msgstr ""
1282
+
1283
+ #: admin/tabs/super-unsubscribe/page.php:136
1284
+ msgid "Create a page using the shortcode <code>[unsubscribe_form]</code>."
1285
+ msgstr ""
1286
+
1287
+ #: admin/tabs/super-unsubscribe/page.php:142
1288
+ msgid ""
1289
+ "Attention: The shortcode <code>[unsubscribe_form]</code> that should be on "
1290
+ "the selected page was not found. Thus, the user has no opportunity to ask a "
1291
+ "deletion request."
1292
+ msgstr ""
1293
+
1294
+ #: admin/tabs/super-unsubscribe/page.php:178
1295
+ msgid "Pending"
1296
+ msgstr ""
1297
+
1298
+ #: admin/tabs/super-unsubscribe/page.php:185
1299
+ msgid "Done"
1300
+ msgstr ""
1301
+
1302
+ #: admin/tabs/super-unsubscribe/page.php:207
1303
+ #: admin/tabs/super-unsubscribe/page.php:269
1304
+ msgid "State"
1305
+ msgstr ""
1306
+
1307
+ #: admin/tabs/super-unsubscribe/page.php:209
1308
+ #: admin/tabs/super-unsubscribe/page.php:238
1309
+ #: admin/tabs/super-unsubscribe/page.php:241
1310
+ #: admin/tabs/super-unsubscribe/page.php:270
1311
+ msgid "Delete now"
1312
+ msgstr ""
1313
+
1314
+ #: admin/tabs/super-unsubscribe/page.php:251
1315
+ msgid "No requests done"
1316
+ msgstr ""
1317
+
1318
+ #: admin/tabs/super-unsubscribe/page.php:253
1319
+ msgid "No pending requests"
1320
+ msgstr ""
1321
+
1322
+ #: admin/tabs/super-unsubscribe/page.php:278
1323
+ msgid "Delete all"
1324
+ msgstr ""
1325
+
1326
+ #: admin/tabs/super-unsubscribe/page.php:291
1327
+ msgid ""
1328
+ "ATTENTION: Executing this action deletes the account (except administrators)."
1329
+ msgstr ""
1330
+
1331
+ #: admin/tabs/super-unsubscribe/page.php:315
1332
+ msgid "Run without user confirmation"
1333
+ msgstr ""
1334
+
1335
+ #: includes/class-sp-dsgvo-ajax-action.php:93
1336
+ msgid "Public property $action not provied"
1337
+ msgstr ""
1338
+
1339
+ #: includes/class-sp-dsgvo-cron.php:66
1340
+ msgid "All"
1341
+ msgstr ""
1342
+
1343
+ #: includes/class-sp-dsgvo-cron.php:66
1344
+ msgid "Minutes"
1345
+ msgstr ""
1346
+
1347
+ #: includes/class-sp-dsgvo-data-collecter.php:77
1348
+ msgid "Login"
1349
+ msgstr ""
1350
+
1351
+ #: includes/class-sp-dsgvo-data-collecter.php:80
1352
+ #: includes/class-sp-dsgvo-data-collecter.php:82
1353
+ #: includes/class-sp-dsgvo-data-collecter.php:131
1354
+ #: includes/class-sp-dsgvo-data-collecter.php:144
1355
+ #: includes/class-sp-dsgvo-data-collecter.php:168
1356
+ #: includes/class-sp-dsgvo-data-collecter.php:393
1357
+ msgid "Url"
1358
+ msgstr ""
1359
+
1360
+ #: includes/class-sp-dsgvo-data-collecter.php:81
1361
+ msgid "Display Name"
1362
+ msgstr ""
1363
+
1364
+ #: includes/class-sp-dsgvo-data-collecter.php:105
1365
+ msgid "Advanced"
1366
+ msgstr ""
1367
+
1368
+ #: includes/class-sp-dsgvo-data-collecter.php:132
1369
+ #: includes/class-sp-dsgvo-data-collecter.php:169
1370
+ msgid "IP Address"
1371
+ msgstr ""
1372
+
1373
+ #: includes/class-sp-dsgvo-data-collecter.php:133
1374
+ #: includes/class-sp-dsgvo-data-collecter.php:170
1375
+ msgid "Comment"
1376
+ msgstr ""
1377
+
1378
+ #: includes/class-sp-dsgvo-data-collecter.php:142
1379
+ msgid "User name"
1380
+ msgstr ""
1381
+
1382
+ #: includes/class-sp-dsgvo-data-collecter.php:145
1383
+ msgid "Display name"
1384
+ msgstr ""
1385
+
1386
+ #: includes/class-sp-dsgvo-data-collecter.php:376
1387
+ msgid "ZIP Code"
1388
+ msgstr ""
1389
+
1390
+ #: includes/class-sp-dsgvo-data-collecter.php:383
1391
+ msgid "Phone number"
1392
+ msgstr ""
1393
+
1394
+ #: includes/class-sp-dsgvo-data-collecter.php:401
1395
+ msgid "Address"
1396
+ msgstr ""
1397
+
1398
+ #: includes/class-sp-dsgvo-mail.php:198 includes/class-sp-dsgvo-mail.php:205
1399
+ msgid "Attachment not found at"
1400
+ msgstr ""
1401
+
1402
+ #: includes/class-sp-dsgvo-mail.php:223 includes/class-sp-dsgvo-mail.php:265
1403
+ msgid "Template file not found"
1404
+ msgstr ""
1405
+
1406
+ #: includes/class-sp-dsgvo-mail.php:377
1407
+ msgid "You must set at least 1 recipient"
1408
+ msgstr ""
1409
+
1410
+ #: includes/class-sp-dsgvo-mail.php:381
1411
+ msgid "You must set a template"
1412
+ msgstr ""
1413
+
1414
+ #: includes/class-sp-dsgvo-settings.php:43 public/class-sp-dsgvo-public.php:323
1415
+ msgid "I confirm"
1416
+ msgstr ""
1417
+
1418
+ #: includes/class-sp-dsgvo-settings.php:44 public/class-sp-dsgvo-public.php:321
1419
+ msgid "The confirmation to GDPR is mandatory."
1420
+ msgstr ""
1421
+
1422
+ #: includes/class-sp-dsgvo-settings.php:45 public/class-sp-dsgvo-public.php:322
1423
+ msgid ""
1424
+ "This form stores your name, email address and content so that we can "
1425
+ "evaluate the comments on our site. For more information, visit our Privacy "
1426
+ "Policy page."
1427
+ msgstr ""
1428
+
1429
+ #: includes/class-sp-dsgvo-settings.php:70
1430
+ #: includes/class-sp-dsgvo-settings.php:112
1431
+ #: public/shortcodes/subject-access-request/subject-access-request.php:46
1432
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:50
1433
+ msgid ""
1434
+ "I agree to the storage of the data for processing within the meaning of the "
1435
+ "GDPR."
1436
+ msgstr ""
1437
+
1438
+ #: includes/class-sp-dsgvo-settings.php:81
1439
+ #: includes/class-sp-dsgvo-settings.php:236
1440
+ msgid "We use cookies to analyze visitor behavior."
1441
+ msgstr ""
1442
+
1443
+ #: includes/class-sp-dsgvo-settings.php:88
1444
+ #: includes/class-sp-dsgvo-settings.php:243
1445
+ msgid "Google Analytics is used to analyze website traffic."
1446
+ msgstr ""
1447
+
1448
+ #: includes/class-sp-dsgvo-settings.php:95
1449
+ #: includes/class-sp-dsgvo-settings.php:250
1450
+ msgid "Facebook Pixel is used to analyze visitor behavior."
1451
+ msgstr ""
1452
+
1453
+ #: includes/class-sp-dsgvo-settings.php:119
1454
+ msgid ""
1455
+ "This website uses cookies. By clicking 'accept' you are providing consent to "
1456
+ "us using cookies on this browser."
1457
+ msgstr ""
1458
+
1459
+ #: includes/class-sp-dsgvo-settings.php:127
1460
+ #: public/class-sp-dsgvo-public.php:159
1461
+ msgid ""
1462
+ "We use cookies to give you the best user experience. If you continue to use "
1463
+ "this site, we assume that you agree."
1464
+ msgstr ""
1465
+
1466
+ #: includes/class-sp-dsgvo-settings.php:129
1467
+ msgid "OK"
1468
+ msgstr ""
1469
+
1470
+ #: includes/class-sp-dsgvo-settings.php:132
1471
+ msgid "Deny"
1472
+ msgstr ""
1473
+
1474
+ #: includes/class-sp-dsgvo-settings.php:135
1475
+ msgid "More information"
1476
+ msgstr ""
1477
+
1478
+ #: includes/cron/do-delete-data-request.php:15
1479
+ msgid "DoDSGVODeleteDataRequest with days:"
1480
+ msgstr ""
1481
+
1482
+ #: includes/cron/do-delete-data-request.php:15
1483
+ msgid "and intval:"
1484
+ msgstr ""
1485
+
1486
+ #: includes/cron/do-delete-data-request.php:20
1487
+ msgid "doing sar"
1488
+ msgstr ""
1489
+
1490
+ #: includes/cron/do-delete-data-request.php:20
1491
+ msgid "with intval"
1492
+ msgstr ""
1493
+
1494
+ #: includes/cron/do-delete-data-request.php:27
1495
+ msgid "sar"
1496
+ msgstr ""
1497
+
1498
+ #: includes/cron/do-delete-data-request.php:27
1499
+ msgid "has not the date to process"
1500
+ msgstr ""
1501
+
1502
+ #: includes/html/index-footer.php:6
1503
+ msgid "Downloaded from"
1504
+ msgstr ""
1505
+
1506
+ #: includes/html/index-footer.php:6
1507
+ msgid "on"
1508
+ msgstr ""
1509
+
1510
+ #: includes/html/index-header.php:5 includes/html/index-header.php:412
1511
+ msgid "All data relating to"
1512
+ msgstr ""
1513
+
1514
+ #: includes/html/index-header.php:413
1515
+ msgid "Objects"
1516
+ msgstr ""
1517
+
1518
+ #: includes/html/index-header.php:413
1519
+ msgid "Generated on"
1520
+ msgstr ""
1521
+
1522
+ #: includes/html/index-header.php:426
1523
+ msgid "Type"
1524
+ msgstr ""
1525
+
1526
+ #: includes/html/index-header.php:427
1527
+ msgid "Data"
1528
+ msgstr ""
1529
+
1530
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Extension.php:64
1531
+ msgid "An update is available:"
1532
+ msgstr ""
1533
+
1534
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Extension.php:67
1535
+ msgid "No updates found."
1536
+ msgstr ""
1537
+
1538
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Extension.php:77
1539
+ msgid "Access denied"
1540
+ msgstr ""
1541
+
1542
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:38
1543
+ msgid "Configuration"
1544
+ msgstr ""
1545
+
1546
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:42
1547
+ msgid "DB option"
1548
+ msgstr ""
1549
+
1550
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:45
1551
+ msgid "Metadata URL"
1552
+ msgstr ""
1553
+
1554
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:49
1555
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:51
1556
+ msgid "Automatic checks"
1557
+ msgstr ""
1558
+
1559
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:49
1560
+ msgid "Every"
1561
+ msgstr ""
1562
+
1563
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:49
1564
+ msgid "hours"
1565
+ msgstr ""
1566
+
1567
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:57
1568
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:65
1569
+ msgid "Throttling"
1570
+ msgstr ""
1571
+
1572
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:59
1573
+ #, php-format
1574
+ msgid ""
1575
+ "Enabled. If an update is already available, check for updates every %1$d "
1576
+ "hours instead of every %2$d hours."
1577
+ msgstr ""
1578
+
1579
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:83
1580
+ msgid "Status"
1581
+ msgstr ""
1582
+
1583
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:89
1584
+ msgid "Check Now"
1585
+ msgstr ""
1586
+
1587
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:98
1588
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:100
1589
+ msgid "Last check"
1590
+ msgstr ""
1591
+
1592
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:104
1593
+ msgid "Next automatic check"
1594
+ msgstr ""
1595
+
1596
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:107
1597
+ msgid "Checked version"
1598
+ msgstr ""
1599
+
1600
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:108
1601
+ msgid "Cached update"
1602
+ msgstr ""
1603
+
1604
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:110
1605
+ msgid "Update checker class"
1606
+ msgstr ""
1607
+
1608
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:117
1609
+ msgid "An Update Is Available"
1610
+ msgstr ""
1611
+
1612
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:127
1613
+ msgid "No updates currently available"
1614
+ msgstr ""
1615
+
1616
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/Panel.php:137
1617
+ msgid "Never"
1618
+ msgstr ""
1619
+
1620
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/PluginExtension.php:24
1621
+ msgid "Successfully retrieved plugin info from the metadata URL:"
1622
+ msgstr ""
1623
+
1624
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/PluginExtension.php:27
1625
+ msgid "Failed to retrieve plugin info from the metadata URL."
1626
+ msgstr ""
1627
+
1628
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/PluginPanel.php:20
1629
+ msgid "Request Info"
1630
+ msgstr ""
1631
+
1632
+ #: includes/lib/plugin-update-checker/Puc/v4p3/DebugBar/ThemePanel.php:12
1633
+ msgid "Theme directory"
1634
+ msgstr ""
1635
+
1636
+ #: includes/lib/plugin-update-checker/Puc/v4p3/Plugin/Info.php:74
1637
+ msgid ""
1638
+ "The plugin metadata file does not contain the required 'name' and/or "
1639
+ "'version' keys."
1640
+ msgstr ""
1641
+
1642
+ #: includes/lib/plugin-update-checker/Puc/v4p3/Plugin/UpdateChecker.php:47
1643
+ #, php-format
1644
+ msgid "Plugin slug \"%s\" is already in use by %s. Slugs must be unique."
1645
+ msgstr ""
1646
+
1647
+ #: includes/lib/plugin-update-checker/Puc/v4p3/Plugin/UpdateChecker.php:189
1648
+ #, php-format
1649
+ msgid ""
1650
+ "Can't to read the Version header for '%s'. The filename is incorrect or is "
1651
+ "not a plugin."
1652
+ msgstr ""
1653
+
1654
+ #: includes/lib/plugin-update-checker/Puc/v4p3/Plugin/UpdateChecker.php:208
1655
+ #, php-format
1656
+ msgid "Can't to read the plugin header for '%s'. The file does not exist."
1657
+ msgstr ""
1658
+
1659
+ #: includes/lib/plugin-update-checker/Puc/v4p3/Plugin/UpdateChecker.php:392
1660
+ msgid "Check for updates"
1661
+ msgstr ""
1662
+
1663
+ #: includes/lib/plugin-update-checker/Puc/v4p3/Plugin/UpdateChecker.php:429
1664
+ msgid "View details"
1665
+ msgstr ""
1666
+
1667
+ #: includes/lib/plugin-update-checker/Puc/v4p3/Plugin/UpdateChecker.php:452
1668
+ #, php-format
1669
+ msgid "More information about %s"
1670
+ msgstr ""
1671
+
1672
+ #: includes/lib/plugin-update-checker/Puc/v4p3/Plugin/UpdateChecker.php:518
1673
+ #, php-format
1674
+ msgid "Unknown update checker status \"%s\""
1675
+ msgstr ""
1676
+
1677
+ #: includes/lib/plugin-update-checker/Puc/v4p3/Theme/Update.php:68
1678
+ #, php-format
1679
+ msgid "The theme metadata is missing the required \"%s\" key."
1680
+ msgstr ""
1681
+
1682
+ #: includes/lib/plugin-update-checker/Puc/v4p3/Vcs/PluginUpdateChecker.php:86
1683
+ msgid "There is no changelog available."
1684
+ msgstr ""
1685
+
1686
+ #: includes/models/subject-access-request.php:69
1687
+ #: includes/models/subject-access-request.php:73
1688
+ msgid "Subject access request"
1689
+ msgstr ""
1690
+
1691
+ #: includes/models/subject-access-request.php:181
1692
+ #: includes/models/subject-access-request.php:182
1693
+ #: includes/models/subject-access-request.php:184
1694
+ msgid "All data of"
1695
+ msgstr ""
1696
+
1697
+ #: includes/models/subject-access-request.php:184
1698
+ msgid "Date"
1699
+ msgstr ""
1700
+
1701
+ #: includes/models/subject-access-request.php:184
1702
+ msgid "Source"
1703
+ msgstr ""
1704
+
1705
+ #: includes/models/unsubscriber.php:100
1706
+ msgid "Confirmation of delete request"
1707
+ msgstr ""
1708
+
1709
+ #: public/actions/user-permissions.php:24
1710
+ msgid "updated their user permissions"
1711
+ msgstr ""
1712
+
1713
+ #: public/class-sp-dsgvo-public.php:165
1714
+ msgid "Ok"
1715
+ msgstr ""
1716
+
1717
+ #: public/class-sp-dsgvo-public.php:387
1718
+ msgid "Privacy Policy: "
1719
+ msgstr ""
1720
+
1721
+ #: public/class-sp-dsgvo-public.php:391
1722
+ msgid "I have read and accepted the PrivacyPolicyPlaceholder."
1723
+ msgstr ""
1724
+
1725
+ #: public/class-sp-dsgvo-public.php:405
1726
+ msgid "I have read and accepted the Privacy Policy."
1727
+ msgstr ""
1728
+
1729
+ #: public/class-sp-dsgvo-public.php:424
1730
+ msgid "Consent to the privacy policy is mandatory."
1731
+ msgstr ""
1732
+
1733
+ #: public/class-sp-dsgvo-public.php:430
1734
+ msgid "Privacy Policy accepted"
1735
+ msgstr ""
1736
+
1737
+ #: public/shortcodes/decline-permission.php:5
1738
+ msgid "Decline Terms & Conditions"
1739
+ msgstr ""
1740
+
1741
+ #: public/shortcodes/display-services.php:13
1742
+ msgid "Open Terms of service"
1743
+ msgstr ""
1744
+
1745
+ #: public/shortcodes/explicit-permission.php:6
1746
+ msgid "Accepted"
1747
+ msgstr ""
1748
+
1749
+ #: public/shortcodes/explicit-permission.php:7
1750
+ msgid "Declined"
1751
+ msgstr ""
1752
+
1753
+ #: public/shortcodes/imprint.php:10
1754
+ msgid "imprint_text"
1755
+ msgstr ""
1756
+ "[company_name]\n"
1757
+ "Owner: [company_owner]\n"
1758
+ "[adress_street]\n"
1759
+ "[adress_zip_location]\n"
1760
+ "\n"
1761
+ "Management: [company_law_person]\n"
1762
+ "Stockholder: [company_management]\n"
1763
+ "\n"
1764
+ "Telephone number: [comm_phone]\n"
1765
+ "E-Mail address: [comm_email]\n"
1766
+ "\n"
1767
+ "Register Court & Register Number: [company_register_court], "
1768
+ "[company_register_nr]\n"
1769
+ "\n"
1770
+ "Sales tax identification number: [company_uid]\n"
1771
+ "\n"
1772
+ "Responsible for content: [content_responsible]\n"
1773
+ "\n"
1774
+ "European Commission Online Dispute Resolution (OS) platform for consumers: "
1775
+ "<a href\"https://ec.europa.eu/consumers/odr/\" target=\"_blank\">https://ec."
1776
+ "europa.eu/consumers/odr/</a>. We are not willing and obliged to participate "
1777
+ "in a dispute settlement procedure before a consumer arbitration board."
1778
+
1779
+ #: public/shortcodes/privacy-settings-form.php:16
1780
+ msgid "Service"
1781
+ msgstr ""
1782
+
1783
+ #: public/shortcodes/privacy-settings-form.php:18
1784
+ #: public/shortcodes/privacy-settings-form.php:26
1785
+ msgid "Terms"
1786
+ msgstr ""
1787
+
1788
+ #: public/shortcodes/privacy-settings-form.php:30
1789
+ msgid "Yes"
1790
+ msgstr ""
1791
+
1792
+ #: public/shortcodes/privacy-settings-form.php:33
1793
+ msgid "No"
1794
+ msgstr ""
1795
+
1796
+ #: public/shortcodes/privacy-settings-form.php:42
1797
+ msgid ""
1798
+ "Since you are not logged in we save these settings in a cookie. These "
1799
+ "settings are thus only active on this PC."
1800
+ msgstr ""
1801
+
1802
+ #: public/shortcodes/privacy-settings-form.php:46
1803
+ msgid "Save"
1804
+ msgstr ""
1805
+
1806
+ #: public/shortcodes/subject-access-request/download-subject-access-request.php:11
1807
+ #: public/shortcodes/super-unsubscribe/unsubscribe-confirm-action.php:10
1808
+ msgid "No token provided."
1809
+ msgstr ""
1810
+
1811
+ #: public/shortcodes/subject-access-request/download-subject-access-request.php:19
1812
+ msgid "Bad token provided."
1813
+ msgstr ""
1814
+
1815
+ #: public/shortcodes/subject-access-request/download-subject-access-request.php:71
1816
+ msgid "Error"
1817
+ msgstr ""
1818
+
1819
+ #: public/shortcodes/subject-access-request/subject-access-request-action.php:9
1820
+ msgid "Please enter an email address"
1821
+ msgstr ""
1822
+
1823
+ #: public/shortcodes/subject-access-request/subject-access-request-action.php:13
1824
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form-action.php:13
1825
+ msgid "The GDPR approval is mandatory."
1826
+ msgstr ""
1827
+
1828
+ #: public/shortcodes/subject-access-request/subject-access-request-action.php:28
1829
+ msgid "New subject access request"
1830
+ msgstr ""
1831
+
1832
+ #: public/shortcodes/subject-access-request/subject-access-request-action.php:29
1833
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form-action.php:31
1834
+ msgid "A new subject access request from "
1835
+ msgstr ""
1836
+
1837
+ #: public/shortcodes/subject-access-request/subject-access-request.php:18
1838
+ msgid "Your request has been created"
1839
+ msgstr ""
1840
+
1841
+ #: public/shortcodes/subject-access-request/subject-access-request.php:18
1842
+ msgid ""
1843
+ "You will receive an email from us with a current extract of your data stored "
1844
+ "with us."
1845
+ msgstr ""
1846
+
1847
+ #: public/shortcodes/subject-access-request/subject-access-request.php:51
1848
+ msgid "Create request"
1849
+ msgstr ""
1850
+
1851
+ #: public/shortcodes/super-unsubscribe/unsubscribe-confirm-action.php:18
1852
+ msgid "Bad token provided"
1853
+ msgstr ""
1854
+
1855
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form-action.php:9
1856
+ msgid "Please enter an email address."
1857
+ msgstr ""
1858
+
1859
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form-action.php:30
1860
+ msgid "New delete request"
1861
+ msgstr ""
1862
+
1863
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:19
1864
+ msgid "Request sent successfully. You will receive an email in a few minutes."
1865
+ msgstr ""
1866
+
1867
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:23
1868
+ msgid "Request successfully completed. Your data has been completely deleted."
1869
+ msgstr ""
1870
+
1871
+ #: public/shortcodes/super-unsubscribe/unsubscribe-form.php:55
1872
+ msgid "Create delete request"
1873
+ msgstr ""
1874
+
1875
+ #: templates/de_DE/emails/feedback.php:1 templates/en_EN/emails/feedback.php:1
1876
+ #: templates/en_US/emails/feedback.php:1
1877
+ msgid "WP DSGVO Tools Feedback"
1878
+ msgstr ""
1879
+
1880
+ #: templates/de_DE/emails/feedback.php:4 templates/en_EN/emails/feedback.php:4
1881
+ #: templates/en_US/emails/feedback.php:4
1882
+ msgid "From"
1883
+ msgstr ""
1884
+
1885
+ #: templates/de_DE/emails/feedback.php:15
1886
+ #: templates/en_EN/emails/feedback.php:15
1887
+ #: templates/en_US/emails/feedback.php:15
1888
+ msgid "Message"
1889
+ msgstr ""
1890
+
1891
+ #: templates/de_DE/emails/subject-access-request.php:46
1892
+ #: templates/en_EN/emails/subject-access-request.php:46
1893
+ #: templates/en_US/emails/subject-access-request.php:46
1894
+ msgid ""
1895
+ "We have received your subject access request. A PDF document containing all "
1896
+ "the data we have stored about you is attached.\n"
1897
+ "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t Amount of personal data found"
1898
+ msgstr ""
1899
+
1900
+ #: templates/de_DE/emails/subject-access-request.php:49
1901
+ #: templates/en_EN/emails/subject-access-request.php:49
1902
+ #: templates/en_US/emails/subject-access-request.php:49
1903
+ msgid "Here you see a summary about this data"
1904
+ msgstr ""
1905
+
1906
+ #: templates/de_DE/emails/subject-access-request.php:52
1907
+ #: templates/en_EN/emails/subject-access-request.php:52
1908
+ #: templates/en_US/emails/subject-access-request.php:52
1909
+ msgid "Download your archive"
1910
+ msgstr ""
1911
+
1912
+ #: templates/de_DE/emails/subject-access-request.php:54
1913
+ #: templates/en_EN/emails/subject-access-request.php:54
1914
+ #: templates/en_US/emails/subject-access-request.php:54
1915
+ msgid ""
1916
+ "Following this link you can download a PDF and a JSON file dump of your data."
1917
+ msgstr ""
1918
+
1919
+ #: templates/de_DE/emails/subject-access-request.php:56
1920
+ #: templates/en_EN/emails/subject-access-request.php:56
1921
+ #: templates/en_US/emails/subject-access-request.php:56
1922
+ msgid "Download archive"
1923
+ msgstr ""
1924
+
1925
+ #: templates/de_DE/emails/subject-access-request.php:94
1926
+ #: templates/de_DE/emails/super-unsubscribe.php:84
1927
+ #: templates/en_EN/emails/subject-access-request.php:94
1928
+ #: templates/en_EN/emails/super-unsubscribe.php:84
1929
+ #: templates/en_US/emails/subject-access-request.php:94
1930
+ #: templates/en_US/emails/super-unsubscribe.php:84
1931
+ msgid "Sent from"
1932
+ msgstr ""
1933
+
1934
+ #: templates/de_DE/emails/subject-access-request.php:98
1935
+ #: templates/de_DE/emails/super-unsubscribe.php:88
1936
+ #: templates/en_EN/emails/subject-access-request.php:98
1937
+ #: templates/en_EN/emails/super-unsubscribe.php:88
1938
+ #: templates/en_US/emails/subject-access-request.php:98
1939
+ #: templates/en_US/emails/super-unsubscribe.php:88
1940
+ msgid "Contact"
1941
+ msgstr ""
1942
+
1943
+ #: templates/de_DE/emails/super-unsubscribe.php:45
1944
+ #: templates/en_EN/emails/super-unsubscribe.php:45
1945
+ #: templates/en_US/emails/super-unsubscribe.php:45
1946
+ msgid "We have received your delete request."
1947
+ msgstr ""
1948
+
1949
+ #: templates/de_DE/emails/super-unsubscribe.php:46
1950
+ #: templates/en_EN/emails/super-unsubscribe.php:46
1951
+ #: templates/en_US/emails/super-unsubscribe.php:46
1952
+ msgid ""
1953
+ "If you confirm the following link, all your data stored at\n"
1954
+ "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{website}} gets deleted."
1955
+ msgstr ""
1956
+
1957
+ #: templates/de_DE/emails/super-unsubscribe.php:51
1958
+ #: templates/en_EN/emails/super-unsubscribe.php:51
1959
+ #: templates/en_US/emails/super-unsubscribe.php:51
1960
+ msgid "Confirm Delete"
1961
+ msgstr ""
1962
+
1963
+ #: templates/de_DE/emails/super-unsubscribe.php:53
1964
+ #: templates/en_EN/emails/super-unsubscribe.php:53
1965
+ #: templates/en_US/emails/super-unsubscribe.php:53
1966
+ msgid "If you don't want do delete your data just ignore this email."
1967
+ msgstr ""
public/actions/popup-accept.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* i592995 */
3
+ Class SPDSGVOUserPopupAccept extends SPDSGVOAjaxAction{
4
+
5
+ protected $action = 'popup-accept';
6
+
7
+ protected function run(){
8
+ $user = wp_get_current_user();
9
+ if($user->ID != 0) {
10
+ $meta = get_user_meta($user->ID, 'sp_dsgvo_popup', TRUE);
11
+ update_user_meta( $user->ID, 'sp_dsgvo_popup', '1' );
12
+ }
13
+ setcookie('sp_dsgvo_popup', '1', (time()+(365*24*60*60)), '/');
14
+ die;
15
+ }
16
+ }
17
+
18
+ SPDSGVOUserPopupAccept::listen();
19
+ /* i592995 */
public/actions/user-permissions.php CHANGED
@@ -6,26 +6,43 @@ Class SPDSGVOUserPermissionsAction extends SPDSGVOAjaxAction{
6
 
7
  protected function run(){
8
 
 
9
  $meta = array();
10
- $services = $this->get('services', NULL, FALSE);
11
-
12
  //error_log('SPDSGVOUserPermissionsAction: updating settings');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  if(is_array($services)){
 
14
  foreach($services as $slug => $service){
15
  $meta[$slug] = ($service == '1')? '1' : '0';
 
 
16
  }
17
  }
18
 
19
  if($this->user){
20
  update_user_meta($this->user->ID, 'sp_dsgvo_user_permissions', $meta);
21
- createLog("{$this->user->user_email} updated their user permissions");
22
  }
23
 
24
  setcookie('sp_dsgvo_user_permissions', serialize($meta), (time()+(365*24*60*60)), '/');
25
 
26
- header('Location: '. $_SERVER['HTTP_REFERER']);
 
27
  die;
28
  }
29
  }
30
 
31
- SPDSGVOUserPermissionsAction::listen();
6
 
7
  protected function run(){
8
 
9
+ /* i592995 */
10
  $meta = array();
 
 
11
  //error_log('SPDSGVOUserPermissionsAction: updating settings');
12
+ $version = $this->get('version', NULL, FALSE);
13
+
14
+ if($version == 'alt') {
15
+ $services_alt = $this->get('services', NULL, FALSE);
16
+ $services = array();
17
+ foreach($services_alt as $serv) {
18
+ $services[$serv['name']] = $serv['value'];
19
+ }
20
+ } else {
21
+ $services = $this->get('services', NULL, FALSE);
22
+ }
23
+
24
+ /* i592995 */
25
+
26
  if(is_array($services)){
27
+ error_log('services: '.implode(',', $services));
28
  foreach($services as $slug => $service){
29
  $meta[$slug] = ($service == '1')? '1' : '0';
30
+ // error_log($slug);
31
+ // error_log(($service == '1')? '1' : '0');
32
  }
33
  }
34
 
35
  if($this->user){
36
  update_user_meta($this->user->ID, 'sp_dsgvo_user_permissions', $meta);
37
+ createLog("{$this->user->user_email} " . __('updated their user permissions', 'shapepress-dsgvo'));
38
  }
39
 
40
  setcookie('sp_dsgvo_user_permissions', serialize($meta), (time()+(365*24*60*60)), '/');
41
 
42
+ //header('Location: '. $_SERVER['HTTP_REFERER'] .'?v='.time());
43
+ header('Location: '. get_page_link(SPDSGVOSettings::get('user_permissions_page')) .'?v='.time());
44
  die;
45
  }
46
  }
47
 
48
+ SPDSGVOUserPermissionsAction::listen();
public/class-sp-dsgvo-public.php CHANGED
@@ -1,436 +1,617 @@
1
- <?php
2
-
3
- /**
4
- * The public-facing functionality of the plugin.
5
- *
6
- * @link https://wp-dsgvo.eu
7
- * @since 1.0.0
8
- *
9
- * @package WP DSGVO Tools
10
- * @subpackage WP DSGVO Tools/public
11
- */
12
-
13
- /**
14
- * The public-facing functionality of the plugin.
15
- *
16
- * Defines the plugin name, version, and two examples hooks for how to
17
- * enqueue the public-facing stylesheet and JavaScript.
18
- *
19
- * @package WP DSGVO Tools
20
- * @subpackage WP DSGVO Tools/public
21
- * @author Shapepress eU
22
- */
23
- class SPDSGVOPublic
24
- {
25
-
26
- /**
27
- * Initialize the class and set its properties.
28
- *
29
- * @since 1.0.0
30
- * @param string $sp_dsgvo
31
- * The name of the plugin.
32
- * @param string $version
33
- * The version of this plugin.
34
- */
35
- public function __construct()
36
- {}
37
-
38
- private static $cookie = array(
39
- 'name' => 'sp_dsgvo_cn_accepted',
40
- 'value' => 'TRUE'
41
- );
42
-
43
- /**
44
- * Register the stylesheets for the public-facing side of the site.
45
- *
46
- * @since 1.0.0
47
- */
48
- public function enqueue_styles()
49
- {
50
- wp_enqueue_style(sp_dsgvo_NAME, plugin_dir_url(__FILE__) . 'css/sp-dsgvo-public.css', array(), sp_dsgvo_VERSION, 'all');
51
- }
52
-
53
- /**
54
- * Register the JavaScript for the public-facing side of the site.
55
- *
56
- * @since 1.0.0
57
- */
58
- public function enqueue_scripts()
59
- {
60
- wp_enqueue_script(sp_dsgvo_NAME, plugin_dir_url(__FILE__) . 'js/sp-dsgvo-public.js', array(
61
- 'jquery'
62
- ), sp_dsgvo_VERSION, FALSE);
63
-
64
- wp_localize_script(sp_dsgvo_NAME, 'cnArgs', array(
65
- 'ajaxurl' => admin_url('admin-ajax.php'),
66
- 'hideEffect' => SPDSGVOSettings::get('cn_animation'),
67
- 'onScroll' => false,
68
- 'onScrollOffset' => 100,
69
- 'cookieName' => self::$cookie['name'],
70
- 'cookieValue' => self::$cookie['value'],
71
- 'cookieTime' => SPDSGVOSettings::get('cn_cookie_validity'),
72
- 'cookiePath' => (defined('COOKIEPATH') ? COOKIEPATH : ''),
73
- 'cookieDomain' => (defined('COOKIE_DOMAIN') ? COOKIE_DOMAIN : ''),
74
- 'redirection' => SPDSGVOSettings::get('cn_reload_on_confirm'),
75
- 'reloadOnConfirm' => SPDSGVOSettings::get('cn_reload_on_confirm'),
76
- 'trackerInitMoment' => SPDSGVOSettings::get('cn_tracker_init'),
77
- 'gaTagNumber' => SPDSGVOSettings::get('ga_tag_number'),
78
- 'cache' => defined('WP_CACHE') && WP_CACHE,
79
- 'declineTargetUrl' => SPDSGVOSettings::get('cn_decline_target_url'),
80
- 'declineNoCookie' => SPDSGVOSettings::get('cn_decline_no_cookie'),
81
- 'commentsCb'=> SPDSGVOSettings::get('sp_dsgvo_comments_checkbox'),
82
- 'cf7AccReplace' => SPDSGVOSettings::get('sp_dsgvo_cf7_acceptance_replace'),
83
- 'cf7AccText' => SPDSGVOSettings::get('spdsgvo_comments_checkbox_text')
84
- ));
85
- }
86
-
87
- /**
88
- * Print scripts for GA, FB Pixel,..
89
- * if enabled
90
- *
91
- * @return mixed
92
- */
93
- public function wp_print_footer_scripts()
94
- {
95
- // $allowed_html = apply_filters( 'cn_refuse_code_allowed_html', array_merge( wp_kses_allowed_html( 'post' ), array(
96
- // 'script' => array(
97
- // 'type' => array(),
98
- // 'src' => array(),
99
- // 'charset' => array(),
100
- // 'async' => array()
101
- // ),
102
- // 'noscript' => array()
103
- // ) ) );
104
-
105
- // $scripts = apply_filters( 'cn_refuse_code_scripts_html', html_entity_decode( trim( wp_kses( $this->options['general']['refuse_code'], $allowed_html ) ) ) );
106
- $scripts = ''; // 'place_for_scripts';
107
-
108
- if ($this->cookies_accepted() && ! empty($scripts)) {
109
- echo $scripts;
110
- }
111
- }
112
-
113
- /**
114
- * Checks if cookie is setted
115
- *
116
- * @return bool
117
- */
118
- public function cookies_set()
119
- {
120
- return apply_filters('cn_is_cookie_set', isset($_COOKIE[self::$cookie['name']]));
121
- }
122
-
123
- /**
124
- * Checks if third party non functional cookies are accepted
125
- *
126
- * @return bool
127
- */
128
- public static function cookies_accepted()
129
- {
130
- return apply_filters('cn_is_cookie_accepted', isset($_COOKIE[self::$cookie['name']]) && strtoupper($_COOKIE[self::$cookie['name']]) === self::$cookie['value']);
131
- }
132
-
133
- public function cookieNotice()
134
- {
135
- if (SPDSGVOSettings::get('display_cookie_notice') === '1') :
136
- if (hasUserGivenPermissionFor('cookies') === FALSE) :
137
- ?>
138
-
139
- <?php if (SPDSGVOSettings::get('cn_use_overlay') === '1') : ?>
140
- <div id="cookie-notice-blocker"></div>
141
- <?php endif; ?>
142
-
143
- <div id="cookie-notice" role="banner"
144
- class="cn-<?= SPDSGVOSettings::get('cn_position') ?> <?= SPDSGVOSettings::get('cn_custom_css_container') !== '' ? SPDSGVOSettings::get('cn_custom_css_container'):'' ?>"
145
- style="background-color: <?= SPDSGVOSettings::get('cn_background_color') ?> !important;
146
- color: <?= SPDSGVOSettings::get('cn_text_color') ?> !important;
147
- height: <?= SPDSGVOSettings::get('cn_height_container') ?> !important;">
148
- <div class="cookie-notice-container">
149
-
150
- <?php if (SPDSGVOSettings::get('cn_show_dsgvo_icon') === '1') : ?>
151
- <span id="cn-notice-icon"><a
152
- href="https://wp-dsgvo.eu" target="_blank"><img id="cn-notice-icon"
153
- src="<?= plugin_dir_url(__FILE__) . 'images/cookie-icon.png' ?>"
154
- alt="DSGVO Logo" style="display:block !important;" /></a></span>
155
- <?php endif; ?>
156
-
157
- <span id="cn-notice-text" class="<?= SPDSGVOSettings::get('cn_custom_css_text') !== '' ? SPDSGVOSettings::get('cn_custom_css_text'):'' ?>"
158
- style="font-size:<?= SPDSGVOSettings::get('cn_size_text') ?>;"
159
- ><?= convDeChars(SPDSGVOSettings::get('cookie_notice_custom_text')) ?></span>
160
-
161
- <a href="#" id="cn-accept-cookie" data-cookie-set="accept"
162
- class="cn-set-cookie button wp-default <?= SPDSGVOSettings::get('cn_custom_css_buttons') !== '' ? SPDSGVOSettings::get('cn_custom_css_buttons'):'' ?>"
163
- style="background-color: <?= SPDSGVOSettings::get('cn_background_color_button') ?>;
164
- color: <?= SPDSGVOSettings::get('cn_text_color_button') ?>"
165
- ><?= SPDSGVOSettings::get('cn_button_text_ok') ?></a>
166
-
167
- <?php if(SPDSGVOSettings::get('cn_activate_cancel_btn') != '0'): ?>
168
- <a href="#" id="cn-refuse-cookie"
169
- data-cookie-set="refuse" class="cn-set-cookie button wp-default <?= SPDSGVOSettings::get('cn_custom_css_buttons') !== '' ? SPDSGVOSettings::get('cn_custom_css_buttons'):'' ?>"
170
- style="background-color: <?= SPDSGVOSettings::get('cn_background_color_button') ?>;
171
- color: <?= SPDSGVOSettings::get('cn_text_color_button') ?>;"
172
- ><?= SPDSGVOSettings::get('cn_button_text_cancel') ?></a>
173
- <?php endif; ?>
174
-
175
- <?php if(SPDSGVOSettings::get('cn_activate_more_btn') != '0'): ?>
176
- <a
177
- href="<?= get_permalink(SPDSGVOSettings::get('cn_read_more_page')) ?>"
178
- id="cn-more-info"
179
- target="<?= SPDSGVOSettings::get('cn_decline_target_url') ?>"
180
- class="cn-more-info button wp-default <?= SPDSGVOSettings::get('cn_custom_css_buttons') !== '' ? SPDSGVOSettings::get('cn_custom_css_buttons'):'' ?>"
181
- style="background-color: <?= SPDSGVOSettings::get('cn_background_color_button') ?>;
182
- color: <?= SPDSGVOSettings::get('cn_text_color_button') ?>;"
183
- ><?= SPDSGVOSettings::get('cn_button_text_more') ?></a>
184
- <?php endif; ?>
185
-
186
- </div>
187
- </div>
188
-
189
-
190
- <?php
191
- endif;
192
- endif;
193
-
194
-
195
- }
196
-
197
- public function writeHeaderScripts()
198
- {
199
- //error_log('cn_tracker_init: '. SPDSGVOSettings::get('cn_tracker_init'));
200
- if (SPDSGVOSettings::get('cn_tracker_init') === 'on_load') {
201
- //error_log('google-analytics: '. hasUserGivenPermissionFor('google-analytics'));
202
- //error_log('google-analytics permission: '. hasUserGivenPermissionFor('google-analytics') ? 'true': 'false');
203
- if (hasUserGivenPermissionFor('google-analytics')) {
204
- $this->writeGoogleAnalyticsOptOut();
205
- $this->writeGoogleAnalytics();
206
- }
207
-
208
- if (hasUserGivenPermissionFor('facebook-pixel')) {
209
- $this->writeFbPixelCode();
210
- }
211
-
212
- } else if (SPDSGVOSettings::get('cn_tracker_init') === 'after_confirm'
213
- && ($this->cookies_accepted() || hasUserGivenPermissionFor('cookies'))) {
214
-
215
- if (hasUserGivenPermissionFor('google-analytics')) {
216
- $this->writeGoogleAnalyticsOptOut();
217
- $this->writeGoogleAnalytics();
218
- }
219
-
220
- if (hasUserGivenPermissionFor('facebook-pixel')) {
221
- $this->writeFbPixelCode();
222
- }
223
- }
224
- }
225
-
226
- public function writeGoogleAnalytics()
227
- {
228
- if (SPDSGVOSettings::get('ga_enable_analytics') === '1') :
229
- ?>
230
-
231
- <!-- Google Analytics -->
232
- <script>
233
- window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
234
- ga('create', '<?= SPDSGVOSettings::get('ga_tag_number') ?>', 'auto');
235
- ga('set', 'anonymizeIp', true);
236
- ga('send', 'pageview');
237
- </script>
238
- <script async src='https://www.google-analytics.com/analytics.js'></script>
239
- <!-- End Google Analytics -->
240
-
241
- <?php
242
- endif;
243
-
244
- }
245
-
246
- public function writeGoogleAnalyticsOptOut()
247
- {
248
- // google analytics
249
- //if (SPDSGVOSettings::get('ga_enable_analytics') === '1') :
250
- if ($this->cookies_accepted()) :
251
- ?>
252
-
253
- <script>
254
- // cookie accepted, enable analtics
255
- window['ga-disable-<?= SPDSGVOSettings::get('ga_tag_number') ?>'] = false;
256
- </script>
257
-
258
- <?php
259
- else :
260
- ?>
261
- <script>
262
- // cookie dismissed, disable analtics
263
- window['ga-disable-<?= SPDSGVOSettings::get('ga_tag_number') ?>'] = true;
264
- </script>
265
- <?php
266
- endif;
267
- //endif;
268
-
269
- }
270
-
271
- public function writeFbPixelCode()
272
- {
273
- if (SPDSGVOSettings::get('fb_enable_pixel') === '1') :
274
- ?>
275
-
276
- <!-- Facebook Pixel Code -->
277
- <script>
278
- !function(f,b,e,v,n,t,s)
279
- {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
280
- n.callMethod.apply(n,arguments):n.queue.push(arguments)};
281
- if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
282
- n.queue=[];t=b.createElement(e);t.async=!0;
283
- t.src=v;s=b.getElementsByTagName(e)[0];
284
- s.parentNode.insertBefore(t,s)}(window, document,'script',
285
- 'https://connect.facebook.net/en_US/fbevents.js');
286
- fbq('init', '<?= SPDSGVOSettings::get('fb_pixel_number') ?>');
287
- fbq('track', 'PageView');
288
- </script>
289
- <noscript>
290
- <img height="1" width="1" style="display: none"
291
- src="https://www.facebook.com/tr?id=<?= SPDSGVOSettings::get('fb_pixel_number') ?>&ev=PageView&noscript=1" />
292
- </noscript>
293
- <!-- End Facebook Pixel Code -->
294
-
295
- <?php
296
- endif;
297
-
298
- }
299
-
300
- public function writeFooterScripts()
301
- {
302
- $this->cookieNotice();
303
- }
304
-
305
- public function addCommentsCheckBoxForDSGVO()
306
- {
307
- if (SPDSGVOSettings::get('sp_dsgvo_comments_checkbox') === '0') {} else {
308
-
309
- $validLicence = isLicenceValid();
310
- $infoText = $validLicence ? htmlentities(SPDSGVOSettings::get('spdsgvo_comments_checkbox_info'), ENT_IGNORE, 'UTF-8') : htmlentities(SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_info'), ENT_IGNORE, 'UTF-8');
311
- $checkboxText = $validLicence ? htmlentities(SPDSGVOSettings::get('spdsgvo_comments_checkbox_text'), ENT_IGNORE, 'UTF-8') : htmlentities(SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_text'), ENT_IGNORE, 'UTF-8');
312
- $confirmText = $validLicence ? htmlentities(SPDSGVOSettings::get('spdsgvo_comments_checkbox_confirm'), ENT_IGNORE, 'UTF-8') : htmlentities(SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_confirm'), ENT_IGNORE, 'UTF-8');
313
-
314
- $privacy_policy_string = '';
315
-
316
- $privacy_policy_string .= '<p class="gdpr-cb-info-text"><small>* '.convDeChars($infoText).'</small></p>';
317
-
318
- $privacy_policy_string .= '<div class="info-text"></div><label for="gdpr-cb">'.convDeChars($checkboxText).'</label>';
319
-
320
- $privacy_policy_string .= '<p class="comment-form-gdpr"><input required="required" id="gdpr-cb" name="gdpr-cb" type="checkbox" />';
321
- $privacy_policy_string .= convDeChars($confirmText);
322
- $privacy_policy_string .= '</p>';
323
-
324
- echo $privacy_policy_string;
325
- }
326
- }
327
-
328
- public function loadSpecificPlugins($plugins)
329
- {
330
- error_log('loadSpecificPlugins: '.$_SERVER['REQUEST_URI']);
331
- if (strpos(strtolower($_SERVER['REQUEST_URI']),'wp-admin') === FALSE) {
332
- error_log('loadSpecificPlugins');
333
- foreach(SPDSGVOSettings::get('services') as $slug => $service) {
334
-
335
- if ($slug === 'cookies') continue;
336
- if ($slug === 'google-analytics') continue;
337
- if ($slug === 'facebook-pixel') continue;
338
-
339
- if (! hasUserGivenPermissionFor($slug) ) {
340
- $key = array_search( $slug, $plugins );
341
- error_log('disabling plugin '.$slug);
342
- //unset( $plugins[ $key ] );
343
- } else
344
- {
345
- error_log('active plugin '.$slug);
346
- }
347
-
348
- }
349
- } else
350
- {
351
- error_log('loadSpecificPlugins in admin');
352
- }
353
-
354
- return $plugins;
355
- }
356
-
357
- public function newUserRegistered($userID)
358
- {
359
- update_user_meta($userID, 'SPDSGVO_settings', json_encode('{}'));
360
- }
361
-
362
- public function allowJSON($mime_types)
363
- {
364
- $mime_types['json'] = 'application/json';
365
- return $mime_types;
366
- }
367
-
368
- public function autoDeleteUnsubscribers()
369
- {
370
- if (SPDSGVOSettings::get('auto_delete_erasure_requests') === '1') {
371
- if (SPDSGVOSettings::get('last_auto_delete_cron') !== date('z')) {
372
- foreach (SPDSGVOUnsubscriber::all() as $unsubscriber) {
373
- if ($unsubscriber->delete_on < time()) {
374
- $unsubscriber->unsubscribe();
375
- }
376
- }
377
- SPDSGVOSettings::set('last_auto_delete_cron', date('z'));
378
- }
379
- }
380
- }
381
-
382
- public function forcePermisson()
383
- {
384
- $page = SPDSGVOSettings::get('explicit_permission_page');
385
-
386
- if (hasUserDeclinedTerms()) {
387
- return;
388
- }
389
-
390
- if ($page == '0') {
391
- return;
392
- }
393
-
394
- if (get_post($page) instanceof WP_Post) {
395
- return;
396
- }
397
-
398
- if (strpos(get_post($page)->post_content, 'explicit_permission_form') === FALSE) {
399
- return;
400
- }
401
-
402
- if (SPDSGVOSettings::get('force_explicit_permission_authenticated') == '1' && is_user_logged_in()) {
403
-
404
- if (! SPDSGVO::isAjax() && ! hasUserAgreedToTerms()) {
405
- if (get_the_ID() != $page) {
406
- $url = get_permalink($page);
407
- if (! is_admin()) {
408
- wp_redirect($url);
409
- exit();
410
- }
411
- }
412
- }
413
- } elseif (SPDSGVOSettings::get('force_explicit_permission_public') == '1' && ! is_user_logged_in()) {
414
-
415
- if (! SPDSGVO::isAjax() && ! hasUserAgreedToTerms()) {
416
- if (get_the_ID() != $page) {
417
- $url = get_permalink($page);
418
- if (! is_admin()) {
419
- wp_redirect($url);
420
- exit();
421
- }
422
- }
423
- }
424
- }
425
- }
426
- }
427
-
428
- /**
429
- * Get the cookie notice status
430
- *
431
- * @return boolean
432
- */
433
- function sp_dsgvo_cn_cookies_accepted()
434
- {
435
- return (bool) SPDSGVOPublic::cookies_accepted();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
436
  }
1
+ <?php
2
+
3
+ /**
4
+ * The public-facing functionality of the plugin.
5
+ *
6
+ * @link https://wp-dsgvo.eu
7
+ * @since 1.0.0
8
+ *
9
+ * @package WP DSGVO Tools
10
+ * @subpackage WP DSGVO Tools/public
11
+ */
12
+
13
+ /**
14
+ * The public-facing functionality of the plugin.
15
+ *
16
+ * Defines the plugin name, version, and two examples hooks for how to
17
+ * enqueue the public-facing stylesheet and JavaScript.
18
+ *
19
+ * @package WP DSGVO Tools
20
+ * @subpackage WP DSGVO Tools/public
21
+ * @author Shapepress eU
22
+ */
23
+ class SPDSGVOPublic
24
+ {
25
+
26
+ /**
27
+ * Initialize the class and set its properties.
28
+ *
29
+ * @since 1.0.0
30
+ * @param string $sp_dsgvo
31
+ * The name of the plugin.
32
+ * @param string $version
33
+ * The version of this plugin.
34
+ */
35
+ public function __construct()
36
+ {
37
+ }
38
+
39
+ private static $cookie = array(
40
+ 'name' => 'sp_dsgvo_cn_accepted',
41
+ 'value' => 'TRUE'
42
+ );
43
+
44
+ /**
45
+ * Register the stylesheets for the public-facing side of the site.
46
+ *
47
+ * @since 1.0.0
48
+ */
49
+ public function enqueue_styles()
50
+ {
51
+ wp_enqueue_style(sp_dsgvo_NAME, plugin_dir_url(__FILE__) . 'css/sp-dsgvo-public.css', array(), sp_dsgvo_VERSION, 'all');
52
+ /* i592995 */
53
+ wp_enqueue_style('simplebar', plugin_dir_url(__FILE__) . 'css/simplebar.css');
54
+ /* i592995 */
55
+ }
56
+
57
+ /**
58
+ * Register the JavaScript for the public-facing side of the site.
59
+ *
60
+ * @since 1.0.0
61
+ */
62
+ public function enqueue_scripts()
63
+ {
64
+ wp_enqueue_script(sp_dsgvo_NAME, plugin_dir_url(__FILE__) . 'js/sp-dsgvo-public.js', array(
65
+ 'jquery'
66
+ ), sp_dsgvo_VERSION, FALSE);
67
+
68
+ wp_localize_script(sp_dsgvo_NAME, 'cnArgs', array(
69
+ 'ajaxurl' => admin_url('admin-ajax.php'),
70
+ 'hideEffect' => SPDSGVOSettings::get('cn_animation'),
71
+ 'onScroll' => false,
72
+ 'onScrollOffset' => 100,
73
+ 'cookieName' => self::$cookie['name'],
74
+ 'cookieValue' => self::$cookie['value'],
75
+ 'cookieTime' => SPDSGVOSettings::get('cn_cookie_validity'),
76
+ 'cookiePath' => (defined('COOKIEPATH') ? COOKIEPATH : ''),
77
+ 'cookieDomain' => (defined('COOKIE_DOMAIN') ? COOKIE_DOMAIN : ''),
78
+ 'redirection' => SPDSGVOSettings::get('cn_reload_on_confirm'),
79
+ 'reloadOnConfirm' => SPDSGVOSettings::get('cn_reload_on_confirm'),
80
+ 'trackerInitMoment' => SPDSGVOSettings::get('cn_tracker_init'),
81
+ 'gaTagNumber' => SPDSGVOSettings::get('ga_tag_number'),
82
+ 'cache' => defined('WP_CACHE') && WP_CACHE,
83
+ 'declineTargetUrl' => SPDSGVOSettings::get('cn_decline_target_url'),
84
+ 'declineNoCookie' => SPDSGVOSettings::get('cn_decline_no_cookie'),
85
+ 'commentsCb'=> SPDSGVOSettings::get('sp_dsgvo_comments_checkbox'),
86
+ 'cf7AccReplace' => SPDSGVOSettings::get('sp_dsgvo_cf7_acceptance_replace'),
87
+ 'cf7AccText' => SPDSGVOSettings::get('spdsgvo_comments_checkbox_text'),
88
+ ));
89
+
90
+ /* i592995 */
91
+ wp_enqueue_script('simplebar', plugin_dir_url(__FILE__) . 'js/simplebar.js', array(
92
+ 'jquery'
93
+ ), null, true);
94
+ /* i592995 */
95
+ }
96
+
97
+ /**
98
+ * Print scripts for GA, FB Pixel,..
99
+ * if enabled
100
+ *
101
+ * @return mixed
102
+ */
103
+ public function wp_print_footer_scripts()
104
+ {
105
+ // $allowed_html = apply_filters( 'cn_refuse_code_allowed_html', array_merge( wp_kses_allowed_html( 'post' ), array(
106
+ // 'script' => array(
107
+ // 'type' => array(),
108
+ // 'src' => array(),
109
+ // 'charset' => array(),
110
+ // 'async' => array()
111
+ // ),
112
+ // 'noscript' => array()
113
+ // ) ) );
114
+
115
+ // $scripts = apply_filters( 'cn_refuse_code_scripts_html', html_entity_decode( trim( wp_kses( $this->options['general']['refuse_code'], $allowed_html ) ) ) );
116
+ $scripts = ''; // 'place_for_scripts';
117
+
118
+ if ($this->cookies_accepted() && ! empty($scripts)) {
119
+ echo $scripts;
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Checks if cookie is setted
125
+ *
126
+ * @return bool
127
+ */
128
+ public function cookies_set()
129
+ {
130
+ return apply_filters('cn_is_cookie_set', isset($_COOKIE[self::$cookie['name']]));
131
+ }
132
+
133
+ /**
134
+ * Checks if third party non functional cookies are accepted
135
+ *
136
+ * @return bool
137
+ */
138
+ public static function cookies_accepted()
139
+ {
140
+ return apply_filters('cn_is_cookie_accepted', isset($_COOKIE[self::$cookie['name']]) && strtoupper($_COOKIE[self::$cookie['name']]) === self::$cookie['value']);
141
+ }
142
+
143
+ public function cookieNotice()
144
+ {
145
+ /* i592995 */
146
+ if (SPDSGVOSettings::get('cookie_notice_display') == 'cookie_notice') :
147
+ /* i592995 */
148
+ if (hasUserGivenPermissionFor('cookies') === FALSE) :
149
+ ?>
150
+
151
+ <?php if (SPDSGVOSettings::get('cn_use_overlay') === '1') : ?>
152
+ <div id="cookie-notice-blocker"></div>
153
+ <?php endif; ?>
154
+
155
+ <div id="cookie-notice" role="banner"
156
+ class="cn-<?= SPDSGVOSettings::get('cn_position') ?> <?= SPDSGVOSettings::get('cn_custom_css_container') !== '' ? SPDSGVOSettings::get('cn_custom_css_container'):'' ?>"
157
+ style="background-color: <?= SPDSGVOSettings::get('cn_background_color') ?>;
158
+ color: <?= SPDSGVOSettings::get('cn_text_color') ?>;
159
+ height: <?= SPDSGVOSettings::get('cn_height_container') ?>;">
160
+ <div class="cookie-notice-container">
161
+
162
+ <?php if (SPDSGVOSettings::get('cn_show_dsgvo_icon') === '1') : ?>
163
+ <span id="cn-notice-icon"><a
164
+ href="https://wp-dsgvo.eu" target="_blank"><img id="cn-notice-icon"
165
+ src="<?= plugin_dir_url(__FILE__) . 'images/cookie-icon.png' ?>"
166
+ alt="DSGVO Logo" style="display:block !important;" /></a></span>
167
+ <?php endif; ?>
168
+
169
+ <span id="cn-notice-text" class="<?= SPDSGVOSettings::get('cn_custom_css_text') !== '' ? SPDSGVOSettings::get('cn_custom_css_text'):'' ?>"
170
+ style="font-size:<?= SPDSGVOSettings::get('cn_size_text') ?>;"
171
+ ><?= spdsgvoUseWpml() ? __('We use cookies to give you the best user experience. If you continue to use this site, we assume that you agree.','shapepress-dsgvo') : convDeChars(SPDSGVOSettings::get('cookie_notice_custom_text')) ?></span>
172
+
173
+ <a href="#" id="cn-accept-cookie" data-cookie-set="accept"
174
+ class="cn-set-cookie button wp-default <?= SPDSGVOSettings::get('cn_custom_css_buttons') !== '' ? SPDSGVOSettings::get('cn_custom_css_buttons'):'' ?>"
175
+ style="background-color: <?= SPDSGVOSettings::get('cn_background_color_button') ?>;
176
+ color: <?= SPDSGVOSettings::get('cn_text_color_button') ?>;"
177
+ ><?= spdsgvoUseWpml() ? __('Ok','shapepress-dsgvo') : SPDSGVOSettings::get('cn_button_text_ok') ?></a>
178
+
179
+ <?php if(SPDSGVOSettings::get('cn_activate_cancel_btn') != '0'): ?>
180
+ <a href="#" id="cn-refuse-cookie"
181
+ data-cookie-set="refuse" class="cn-set-cookie button wp-default <?= SPDSGVOSettings::get('cn_custom_css_buttons') !== '' ? SPDSGVOSettings::get('cn_custom_css_buttons'):'' ?>"
182
+ style="background-color: <?= SPDSGVOSettings::get('cn_background_color_button') ?>;
183
+ color: <?= SPDSGVOSettings::get('cn_text_color_button') ?>;"
184
+ ><?= spdsgvoUseWpml() ? __('Decline','shapepress-dsgvo') : SPDSGVOSettings::get('cn_button_text_cancel') ?></a>
185
+ <?php endif; ?>
186
+
187
+ <?php if(SPDSGVOSettings::get('cn_activate_more_btn') != '0'): ?>
188
+ <a
189
+ href="<?= get_permalink(SPDSGVOSettings::get('cn_read_more_page')) ?>"
190
+ id="cn-more-info"
191
+ target="<?= SPDSGVOSettings::get('cn_decline_target_url') ?>"
192
+ class="cn-more-info button wp-default <?= SPDSGVOSettings::get('cn_custom_css_buttons') !== '' ? SPDSGVOSettings::get('cn_custom_css_buttons'):'' ?>"
193
+ style="background-color: <?= SPDSGVOSettings::get('cn_background_color_button') ?> !important;
194
+ color: <?= SPDSGVOSettings::get('cn_text_color_button') ?> !important;"
195
+ ><?= spdsgvoUseWpml() ? __('Read more','shapepress-dsgvo') : SPDSGVOSettings::get('cn_button_text_more') ?></a>
196
+ <?php endif; ?>
197
+
198
+ </div>
199
+ </div>
200
+
201
+
202
+ <?php
203
+ endif;
204
+ endif;
205
+
206
+
207
+ }
208
+
209
+ /**
210
+ * This function renders the privacy policy popup [i592995]
211
+ */
212
+ public function policyPopup()
213
+ {
214
+ if (SPDSGVOSettings::get('cookie_notice_display') == 'policy_popup' && !hasUserAcceptedPopup()) :
215
+ ?>
216
+ <div class="dsgvo-popup-overlay sp-dsgvo-framework">
217
+ <div class="dsgvo-privacy-popup">
218
+
219
+ <div class="popup-top">
220
+ <div class="logo-wrapper">
221
+ <?php
222
+ $src = sp_dsgvo_URL . 'public/images/logo-md.png';
223
+ $img_id = SPDSGVOSettings::get('logo_image_id', '');
224
+ if($img_id != '') {
225
+ $src = wp_get_attachment_url(intval($img_id));
226
+ }
227
+ ?>
228
+ <img src="<?php echo $src; ?>" class="popup-logo" />
229
+ </div><!-- .logo-wrapper -->
230
+
231
+ <div class="lang-wrapper">
232
+ <?php if(function_exists('icl_get_languages')) : ?>
233
+ <?php $langs = icl_get_languages('skip_missing=1'); ?>
234
+ <?php if(count($langs) > 0) : ?>
235
+ <div class="popup-language-switcher">
236
+
237
+ <?php foreach($langs as $lang) : ?>
238
+ <?php if($lang['active'] == 1) : ?>
239
+ <span class="lang-active">
240
+ <img src="<?php echo $lang['country_flag_url']; ?>" />
241
+ <span><?php echo $lang['native_name']; ?></span>
242
+ <svg width="10" height="6">
243
+ <line x1="0" y1="0" x2="5" y2="5" />
244
+ <line x1="5" y1="5" x2="10" y2="0" />
245
+ </svg>
246
+ </span>
247
+ <?php break; ?>
248
+ <?php endif; ?>
249
+ <?php endforeach; ?>
250
+
251
+ <div class="lang-dropdown">
252
+ <?php foreach($langs as $lang) : ?>
253
+ <a href="<?php echo $lang['url']; ?>">
254
+ <img src="<?php echo $lang['country_flag_url']; ?>" />
255
+ <span><?php echo $lang['native_name']; ?></span>
256
+ </a>
257
+ <?php endforeach; ?>
258
+ </div><!-- .lang-dropdown -->
259
+
260
+ </div><!-- .popup-language-switcher -->
261
+ <?php endif; ?>
262
+ <?php endif; ?>
263
+ </div><!-- .lang-wrapper -->
264
+
265
+ <?php
266
+ $url = SPDSGVOSettings::get('close_button_url', '#');
267
+ $action = SPDSGVOSettings::get('close_button_action', '0');
268
+ $additional_class = '';
269
+ if($url == '' || $action == '' || $action == '0') {
270
+ $url = '#';
271
+ $additional_class = 'close';
272
+ }
273
+ ?>
274
+
275
+ <a href="<?php echo $url; ?>" id="dsgvo_popup_close" class="dsgvo-popup-close <?php echo $additional_class; ?>">
276
+ <svg width="10" height="10">
277
+ <line x1="0" y1="0" x2="10" y2="10" />
278
+ <line x1="0" y1="10" x2="10" y2="0" />
279
+ </svg><!-- #dsgvo_popup_close -->
280
+ </a>
281
+
282
+ </div><!-- .popup-top -->
283
+
284
+ <div class="dsgvo-privacy-content">
285
+ <div class="privacy-inner">
286
+ <?php echo do_shortcode('[privacy_policy]'); ?>
287
+ <div class="popup-accordion" id="popup_accordion">
288
+
289
+ <div class="accordion-top">
290
+ <?php
291
+ $accordion_top = SPDSGVOSettings::get('accordion_top', '');
292
+ if($accordion_top == '') {
293
+ $accordion_top = __('More options', 'shapepress-dsgvo');
294
+ }
295
+ ?>
296
+ <span><?php echo $accordion_top; ?></span>
297
+ <div class="toggle">
298
+ <svg width="14" height="8">
299
+ <line x1="0" y1="0" x2="7" y2="6" />
300
+ <line x1="7" y1="6" x2="14" y2="0" />
301
+ </svg>
302
+ </div><!-- .toggle -->
303
+ </div><!-- .accordion-top -->
304
+
305
+ <div class="accordion-wrapper">
306
+ <div class="accordion-inner">
307
+ <?php echo do_shortcode('[user_privacy_settings_form_alt]'); ?>
308
+ </div><!-- .accordion-inner -->
309
+ </div><!-- .accordion-wrapper -->
310
+
311
+ </div><!-- .popup-accordion -->
312
+ </div><!-- .privacy-inner -->
313
+ </div><!-- .dsgvo-privacy-content -->
314
+
315
+ <div class="popup-bottom">
316
+ <a href="#" id="more_options_button" class="more-options-button"><?php _e('More options', 'shapepress-dsgvo'); ?></a>
317
+ <a href="#" id="popup_accept_button" class="accept-button">
318
+ <?php _e('Accept', 'shapepress-dsgvo'); ?>
319
+ <svg class="accept-loader" width="30" height="30">
320
+ <circle cx="15" cy="15" r="10" />
321
+ </svg><!-- .accept-loader -->
322
+ </a><!-- #popup_accept_button -->
323
+ </div><!-- .popup-bottom -->
324
+
325
+ </div><!-- .dsgvo-privacy-popup -->
326
+ </div><!-- .dsgvo-popup-overlay -->
327
+ <?php
328
+ endif;
329
+ }
330
+
331
+ public function writeHeaderScripts()
332
+ {
333
+ //error_log('cn_tracker_init: '. SPDSGVOSettings::get('cn_tracker_init'));
334
+ if (SPDSGVOSettings::get('cn_tracker_init') === 'on_load') {
335
+ // error_log('google-analytics: '. hasUserGivenPermissionFor('google-analytics'));
336
+ // error_log('google-analytics permission: '. hasUserGivenPermissionFor('google-analytics') ? 'true': 'false');
337
+ if (hasUserGivenPermissionFor('google-analytics')) {
338
+ $this->writeGoogleAnalyticsOptOut();
339
+ $this->writeGoogleAnalytics();
340
+ }
341
+
342
+ if (hasUserGivenPermissionFor('facebook-pixel')) {
343
+ $this->writeFbPixelCode();
344
+ }
345
+
346
+ } else if (SPDSGVOSettings::get('cn_tracker_init') === 'after_confirm'
347
+ && ($this->cookies_accepted() || hasUserGivenPermissionFor('cookies'))) {
348
+
349
+ // error_log('after_confirm logic');
350
+ // error_log('google-analytics: '. hasUserGivenPermissionFor('google-analytics'));
351
+ // error_log('google-analytics permission: '. hasUserGivenPermissionFor('google-analytics') ? 'true': 'false');
352
+
353
+ if (hasUserGivenPermissionFor('google-analytics')) {
354
+ //error_log('after_confirm: user has given go to analytis, write it');
355
+ $this->writeGoogleAnalyticsOptOut();
356
+ $this->writeGoogleAnalytics();
357
+ }
358
+
359
+ if (hasUserGivenPermissionFor('facebook-pixel')) {
360
+ $this->writeFbPixelCode();
361
+ }
362
+ }
363
+ }
364
+
365
+ public function writeGoogleAnalytics()
366
+ {
367
+ //error_log('writeGoogleAnalytics: '.SPDSGVOSettings::get('ga_enable_analytics'));
368
+ if (SPDSGVOSettings::get('ga_enable_analytics') === '1') :
369
+ /* i592995 */
370
+
371
+ $ga_code = SPDSGVOSettings::get('ga_code', '');
372
+ if($ga_code == '' || SPDSGVOSettings::get('own_code') !== '1') {
373
+ $ga_code = googleAnalyticsScript(true);
374
+ }
375
+ echo $ga_code;
376
+
377
+ /* i592995 */
378
+ endif;
379
+
380
+ }
381
+
382
+ public function writeGoogleAnalyticsOptOut()
383
+ {
384
+ // google analytics
385
+ //if (SPDSGVOSettings::get('ga_enable_analytics') === '1') :
386
+ if ($this->cookies_accepted() || hasUserGivenPermissionFor('google-analytics')) :
387
+ ?>
388
+
389
+ <script>
390
+ window['ga-disable-<?= SPDSGVOSettings::get('ga_tag_number') ?>'] = false;
391
+ </script>
392
+
393
+ <?php
394
+ else :
395
+ ?>
396
+ <script>
397
+ window['ga-disable-<?= SPDSGVOSettings::get('ga_tag_number') ?>'] = true;
398
+ </script>
399
+ <?php
400
+ endif;
401
+ //endif;
402
+
403
+ }
404
+
405
+ public function writeFbPixelCode()
406
+ {
407
+ if (SPDSGVOSettings::get('fb_enable_pixel') === '1') :
408
+
409
+ /* i592995 */
410
+ $code = SPDSGVOSettings::get('fb_pixel_code', '');
411
+ if($code == '' || SPDSGVOSettings::get('own_code') !== '1') {
412
+ $code = facebookPixelScript(true);
413
+ }
414
+ $code = str_replace('[pixel_number]', SPDSGVOSettings::get('fb_pixel_number'), $code);
415
+ echo $code;
416
+ /* i592995 */
417
+
418
+ endif;
419
+
420
+ }
421
+
422
+ public function writeFooterScripts()
423
+ {
424
+ $this->cookieNotice();
425
+ /* i592995 */
426
+ $this->policyPopup();
427
+ /* i592995 */
428
+ }
429
+
430
+ public function addCommentsCheckBoxForDSGVO()
431
+ {
432
+ if (SPDSGVOSettings::get('sp_dsgvo_comments_checkbox') === '0') {} else {
433
+
434
+ $validLicence = isValidBlogEdition() || isValidPremiumEdition();
435
+ $infoText = $validLicence ? SPDSGVOSettings::get('spdsgvo_comments_checkbox_info') : htmlentities(SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_info'), ENT_IGNORE, 'UTF-8');
436
+ $checkboxText = $validLicence ? SPDSGVOSettings::get('spdsgvo_comments_checkbox_text') : htmlentities(SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_text'), ENT_IGNORE, 'UTF-8');
437
+ $confirmText = $validLicence ? SPDSGVOSettings::get('spdsgvo_comments_checkbox_confirm') : htmlentities(SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_confirm'), ENT_IGNORE, 'UTF-8');
438
+
439
+ if (spdsgvoUseWpml())
440
+ {
441
+ $infoText = __('The confirmation to GDPR is mandatory.','shapepress-dsgvo');
442
+ $checkboxText = __('This form stores your name, email address and content so that we can evaluate the comments on our site. For more information, visit our Privacy Policy page.','shapepress-dsgvo');
443
+ $confirmText = __('I confirm','shapepress-dsgvo');
444
+ }
445
+
446
+ $privacy_policy_string = '';
447
+
448
+ $privacy_policy_string .= "<p class='gdpr-cb-info-text'><small>* ".convDeChars($infoText)."</small></p>";
449
+
450
+ $privacy_policy_string .= '<div class="info-text"><label for="gdpr-cb">'.convDeChars($checkboxText).'</label></div>';
451
+
452
+ $privacy_policy_string .= '<p class="comment-form-gdpr"><input required="required" id="gdpr-cb" name="gdpr-cb" type="checkbox" />';
453
+ $privacy_policy_string .= convDeChars($confirmText);
454
+ $privacy_policy_string .= "</p>";
455
+
456
+ echo $privacy_policy_string;
457
+
458
+ }
459
+ }
460
+
461
+ public function wpcf7AddDsgvoTag()
462
+ {
463
+ error_log('wpcf7AddDsgvoTag');
464
+ wpcf7_add_form_tag( array('dsgvo','dsgvo*'), 'dsgvoTextTagHandler', true );
465
+ }
466
+
467
+ public function dsgvoTextTagHandler( $tag ) {
468
+
469
+ $dsgvoText = $validLicence ? htmlentities(SPDSGVOSettings::get('spdsgvo_comments_checkbox_text'), ENT_IGNORE, 'UTF-8') : htmlentities(SPDSGVOSettings::getDefault('spdsgvo_comments_checkbox_text'), ENT_IGNORE, 'UTF-8');
470
+ return $dsgvoText;
471
+ }
472
+
473
+ public function newUserRegistered($userID)
474
+ {
475
+ update_user_meta($userID, 'SPDSGVO_settings', json_encode('{}'));
476
+ }
477
+
478
+ public function allowJSON($mime_types)
479
+ {
480
+ $mime_types['json'] = 'application/json';
481
+ return $mime_types;
482
+ }
483
+
484
+ public function publicInit()
485
+ {
486
+ load_plugin_textdomain( 'shapepress-dsgvo', false, 'shapepress-dsgvo/languages' );
487
+
488
+ if (SPDSGVOSettings::get('auto_delete_erasure_requests') === '1') {
489
+ if (SPDSGVOSettings::get('last_auto_delete_cron') !== date('z')) {
490
+ foreach (SPDSGVOUnsubscriber::all() as $unsubscriber) {
491
+ if ($unsubscriber->delete_on < time()) {
492
+ $unsubscriber->unsubscribe();
493
+ }
494
+ }
495
+ SPDSGVOSettings::set('last_auto_delete_cron', date('z'));
496
+ }
497
+ }
498
+ }
499
+
500
+ public function adminInit()
501
+ {
502
+ load_plugin_textdomain( 'shapepress-dsgvo', false, 'shapepress-dsgvo/languages' );
503
+ }
504
+
505
+ public function wooAddCustomFields( $checkout)
506
+ {
507
+ if (SPDSGVOSettings::get('woo_show_privacy_checkbox') === '1') {
508
+ echo '<div id="cb-spdsgvo-privacy-policy"><h3>'.__('Privacy Policy: ','shapepress-dsgvo').'</h3>';
509
+
510
+
511
+ $privacyPolicyPage = SPDSGVOSettings::get('privacy_policy_page');
512
+ /* i592995 */
513
+ /*
514
+ $cbLabel = __('I have read and accepted the PrivacyPolicyPlaceholder.','shapepress-dsgvo');
515
+ if ($privacyPolicyPage > 0)
516
+ {
517
+ $ppUrl = get_post_permalink($privacyPolicyPage);
518
+
519
+
520
+ $cbLabel = str_replace('PrivacyPolicyPlaceholder', '<a href="'.$ppUrl.'">'.__('Privacy policy','shapepress-dsgvo').'</a>', $cbLabel);
521
+ } else
522
+ {
523
+ $cbLabel = str_replace('PrivacyPolicyPlaceholder', __('Privacy policy','shapepress-dsgvo'), $cbLabel);
524
+ }
525
+
526
+ if (spdsgvoUseWpml())
527
+ {
528
+ $cbLabel = __('I have read and accepted the Privacy Policy.','shapepress-dsgvo');
529
+ }
530
+ */
531
+ $cbLabel = SPDSGVOSettings::get('woo_privacy_text', '');
532
+
533
+ /* i592995 */
534
+
535
+ woocommerce_form_field( 'cb-spdsgvo-privacy-policy', array(
536
+ 'type' => 'checkbox',
537
+ 'class' => array('input-checkbox'),
538
+ 'label' => $cbLabel,
539
+ 'required' => true,
540
+ ), $checkout->get_value( 'cb-spdsgvo-privacy-policy' ));
541
+
542
+ echo '</div>';
543
+ }
544
+ }
545
+
546
+ function wooAddCustomCheckout() {
547
+
548
+
549
+ // Check if set, if its not set add an error.
550
+ if (SPDSGVOSettings::get('woo_show_privacy_checkbox') === '1' && !$_POST['cb-spdsgvo-privacy-policy'])
551
+ wc_add_notice( __('Consent to the privacy policy is mandatory.','shapepress-dsgvo'),'error' );
552
+ }
553
+
554
+ function wooUpdateOrderMeta($order_id)
555
+ {
556
+ if (SPDSGVOSettings::get('woo_show_privacy_checkbox') === '1') {
557
+ if ($_POST['cb-spdsgvo-privacy-policy']) update_post_meta( $order_id, __('Privacy Policy accepted','shapepress-dsgvo'), esc_attr($_POST['cb-spdsgvo-privacy-policy']));
558
+ }
559
+ }
560
+
561
+
562
+ public function forcePermisson()
563
+ {
564
+ $page = SPDSGVOSettings::get('explicit_permission_page');
565
+
566
+ if (hasUserDeclinedTerms()) {
567
+ return;
568
+ }
569
+
570
+ if ($page == '0') {
571
+ return;
572
+ }
573
+
574
+ if (get_post($page) instanceof WP_Post) {
575
+ return;
576
+ }
577
+
578
+ if (strpos(get_post($page)->post_content, 'explicit_permission_form') === FALSE) {
579
+ return;
580
+ }
581
+
582
+ if (SPDSGVOSettings::get('force_explicit_permission_authenticated') == '1' && is_user_logged_in()) {
583
+
584
+ if (! SPDSGVO::isAjax() && ! hasUserAgreedToTerms()) {
585
+ if (get_the_ID() != $page) {
586
+ $url = get_permalink($page);
587
+ if (! is_admin()) {
588
+ wp_redirect($url);
589
+ exit();
590
+ }
591
+ }
592
+ }
593
+ } elseif (SPDSGVOSettings::get('force_explicit_permission_public') == '1' && ! is_user_logged_in()) {
594
+
595
+ if (! SPDSGVO::isAjax() && ! hasUserAgreedToTerms()) {
596
+ if (get_the_ID() != $page) {
597
+ $url = get_permalink($page);
598
+ if (! is_admin()) {
599
+ wp_redirect($url);
600
+ exit();
601
+ }
602
+ }
603
+ }
604
+ }
605
+ }
606
+
607
+ }
608
+
609
+ /**
610
+ * Get the cookie notice status
611
+ *
612
+ * @return boolean
613
+ */
614
+ function sp_dsgvo_cn_cookies_accepted()
615
+ {
616
+ return (bool) SPDSGVOPublic::cookies_accepted();
617
  }
public/css/simplebar.css ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ *
3
+ * SimpleBar.js - v2.6.1
4
+ * Scrollbars, simpler.
5
+ * https://grsmto.github.io/simplebar/
6
+ *
7
+ * Made by Adrien Grsmto from a fork by Jonathan Nicol
8
+ * Under MIT License
9
+ *
10
+ */
11
+ [data-simplebar] {
12
+ position: relative;
13
+ z-index: 0;
14
+ overflow: hidden!important;
15
+ max-height: inherit;
16
+ -webkit-overflow-scrolling: touch; /* Trigger native scrolling for mobile, if not supported, plugin is used. */
17
+ }
18
+
19
+ [data-simplebar="init"] {
20
+ display: -webkit-box;
21
+ display: -ms-flexbox;
22
+ display: flex;
23
+ }
24
+
25
+ .simplebar-scroll-content {
26
+ overflow-x: hidden!important;
27
+ overflow-y: scroll;
28
+ min-width: 100%!important;
29
+ max-height: inherit!important;
30
+ -webkit-box-sizing: content-box!important;
31
+ box-sizing: content-box!important;
32
+ }
33
+
34
+ .simplebar-content {
35
+ overflow-y: hidden!important;
36
+ overflow-x: scroll;
37
+ -webkit-box-sizing: border-box!important;
38
+ box-sizing: border-box!important;
39
+ min-height: 100%!important;
40
+ }
41
+
42
+ .simplebar-track {
43
+ z-index: 1;
44
+ position: absolute;
45
+ right: 0;
46
+ bottom: 0;
47
+ width: 11px;
48
+ }
49
+
50
+ .simplebar-scrollbar {
51
+ position: absolute;
52
+ right: 2px;
53
+ width: 7px;
54
+ min-height: 10px;
55
+ }
56
+
57
+ .simplebar-scrollbar:before {
58
+ position: absolute;
59
+ content: "";
60
+ background: black;
61
+ border-radius: 7px;
62
+ left: 0;
63
+ right: 0;
64
+ opacity: 0;
65
+ -webkit-transition: opacity 0.2s linear;
66
+ transition: opacity 0.2s linear;
67
+ }
68
+
69
+ .simplebar-track:hover .simplebar-scrollbar:before,
70
+ .simplebar-track .simplebar-scrollbar.visible:before {
71
+ /* When hovered, remove all transitions from drag handle */
72
+ opacity: 0.5;
73
+ -webkit-transition: opacity 0 linear;
74
+ transition: opacity 0 linear;
75
+ }
76
+
77
+ .simplebar-track.vertical {
78
+ top: 0;
79
+ }
80
+
81
+ .simplebar-track.vertical .simplebar-scrollbar:before {
82
+ top: 2px;
83
+ bottom: 2px;
84
+ }
85
+
86
+ .simplebar-track.horizontal {
87
+ left: 0;
88
+ width: auto;
89
+ height: 11px;
90
+ }
91
+
92
+ .simplebar-track.horizontal .simplebar-scrollbar:before {
93
+ height: 100%;
94
+ left: 2px;
95
+ right: 2px;
96
+ }
97
+
98
+ .horizontal.simplebar-track .simplebar-scrollbar {
99
+ right: auto;
100
+ top: 2px;
101
+ height: 7px;
102
+ min-height: 0;
103
+ min-width: 10px;
104
+ width: auto;
105
+ }
public/css/sp-dsgvo-public.css CHANGED
@@ -408,7 +408,7 @@ to {
408
  .sp-dsgvo-framework fieldset, .sp-dsgvo-framework input,
409
  .sp-dsgvo-framework select, .sp-dsgvo-framework textarea {
410
  /* margin-bottom: 1.5rem */
411
-
412
  }
413
 
414
  .sp-dsgvo-framework blockquote, .sp-dsgvo-framework dl,
@@ -507,16 +507,17 @@ to {
507
 
508
  #cookie-notice-blocker
509
  {
510
- position: fixed;
511
- display: block;
512
- width: 100%;
513
  height: 100%;
514
- top: 0;
515
  left: 0;
516
  right: 0;
517
  bottom: 0;
518
- background-color: rgba(0,0,0,0.5);
519
- z-index: 9999;
 
520
  }
521
 
522
  #cookie-notice {
@@ -558,13 +559,13 @@ to {
558
  #cookie-notice .button.wp-default {
559
  font-family: sans-serif;
560
  line-height: 18px;
561
- padding: 2px 12px !important;
562
  /* background: linear-gradient(to bottom, #FEFEFE, #F4F4F4) repeat scroll 0
563
  0 #F3F3F3 !important; */
564
  background-image: none;
565
  border-color: #BBB;
566
  color: #333;
567
- /* text-shadow: 0 1px 0 #FFF; */
568
  -moz-box-sizing: border-box;
569
  border-radius: 3px 3px 3px 3px;
570
  border-style: solid;
@@ -617,4 +618,296 @@ this is class for submit button in new comment form when checkbox is not checked
617
  */
618
  .gdpr-disabled {
619
  background-color: #c1c1c1 !important;
620
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
408
  .sp-dsgvo-framework fieldset, .sp-dsgvo-framework input,
409
  .sp-dsgvo-framework select, .sp-dsgvo-framework textarea {
410
  /* margin-bottom: 1.5rem */
411
+
412
  }
413
 
414
  .sp-dsgvo-framework blockquote, .sp-dsgvo-framework dl,
507
 
508
  #cookie-notice-blocker
509
  {
510
+ position: fixed;
511
+ display: block;
512
+ width: 100%;
513
  height: 100%;
514
+ top: 0;
515
  left: 0;
516
  right: 0;
517
  bottom: 0;
518
+ background-color: rgba(0,0,0,0.5);
519
+ z-index: 9999;
520
+
521
  }
522
 
523
  #cookie-notice {
559
  #cookie-notice .button.wp-default {
560
  font-family: sans-serif;
561
  line-height: 18px;
562
+ padding: 2px 12px;
563
  /* background: linear-gradient(to bottom, #FEFEFE, #F4F4F4) repeat scroll 0
564
  0 #F3F3F3 !important; */
565
  background-image: none;
566
  border-color: #BBB;
567
  color: #333;
568
+ /* text-shadow: 0 1px 0 #FFF; */
569
  -moz-box-sizing: border-box;
570
  border-radius: 3px 3px 3px 3px;
571
  border-style: solid;
618
  */
619
  .gdpr-disabled {
620
  background-color: #c1c1c1 !important;
621
+ }
622
+
623
+ /* i592995 */
624
+
625
+ .dsgvo-popup-overlay {
626
+ position: fixed;
627
+ left: 0;
628
+ top: 0;
629
+ width: 100%;
630
+ height: 100%;
631
+ background-color: rgba(34, 34, 34, .8);
632
+ z-index: 9999999;
633
+ }
634
+
635
+ .dsgvo-privacy-popup {
636
+ position: absolute;
637
+ left: 50%;
638
+ top: 50%;
639
+ transform: translate(-50%, -50%);
640
+ width: 100%;
641
+ max-width: 600px;
642
+ height: calc(100% - 100px);
643
+ }
644
+
645
+ .dsgvo-popup-close {
646
+ margin-left: 25px;
647
+ height: 10px;
648
+ }
649
+
650
+ .dsgvo-popup-close svg {
651
+ vertical-align: top;
652
+ }
653
+
654
+ .dsgvo-popup-close svg line {
655
+ stroke-width: 2px;
656
+ }
657
+
658
+ .dsgvo-privacy-popup .popup-top {
659
+ padding: 20px;
660
+ display: flex;
661
+ height: 85px;
662
+ box-sizing: border-box;
663
+ }
664
+
665
+ .dsgvo-privacy-popup .logo-wrapper {
666
+ width: calc(100% - 140px);
667
+ }
668
+
669
+ .dsgvo-privacy-popup .logo-wrapper img {
670
+ max-height: 45px;
671
+ max-width: 250px;
672
+ position: relative;
673
+ top: 50%;
674
+ transform: translateY(-50%);
675
+ }
676
+
677
+ @media (max-width: 480px) {
678
+
679
+ .dsgvo-privacy-popup .logo-wrapper img {
680
+ max-width: 100px;
681
+ }
682
+
683
+ }
684
+
685
+ .dsgvo-privacy-popup .lang-dropdown {
686
+ display: none;
687
+ position: absolute;
688
+ left: 0;
689
+ top: calc(100% + 10px);
690
+ width: 100%;
691
+ border: 1px solid #f1f1f1;
692
+ background-color: #ffffff;
693
+ border-radius: 5px;
694
+ z-index: 10;
695
+ }
696
+
697
+ .dsgvo-privacy-popup .lang-wrapper {
698
+ width: 100px;
699
+ }
700
+
701
+ .dsgvo-privacy-popup .lang-active {
702
+ cursor: pointer;
703
+ font-size: 12px;
704
+ font-weight: 600;
705
+ display: flex;
706
+ align-items: flex-start;
707
+ }
708
+
709
+ .dsgvo-privacy-popup .lang-active span {
710
+ width: calc(100% - 38px);
711
+ line-height: 12px;
712
+ }
713
+
714
+ .dsgvo-privacy-popup .popup-language-switcher {
715
+ position: relative;
716
+ }
717
+
718
+ .dsgvo-privacy-popup .lang-active img {
719
+ margin-right: 5px;
720
+ }
721
+
722
+ .dsgvo-privacy-popup .lang-active svg {
723
+ margin-left: 5px;
724
+ margin-top: 3px;
725
+ }
726
+
727
+ .dsgvo-privacy-popup .lang-active svg line {
728
+ stroke-width: 2px;
729
+ }
730
+
731
+ .dsgvo-privacy-popup .lang-dropdown.active {
732
+ display: block;
733
+ }
734
+
735
+ .dsgvo-privacy-popup .lang-dropdown a {
736
+ display: block;
737
+ width: 100%;
738
+ font-size: 12px;
739
+ font-weight: 600;
740
+ display: flex;
741
+ align-items: center;
742
+ line-height: 12px;
743
+ padding: 10px;
744
+ }
745
+
746
+ .dsgvo-privacy-popup .lang-dropdown a img {
747
+ margin-right: 5px;
748
+ }
749
+
750
+ .dsgvo-privacy-content {
751
+ height: calc(100% - 145px);
752
+ }
753
+
754
+ .dsgvo-privacy-popup .privacy-inner {
755
+ padding: 20px;
756
+ }
757
+
758
+ .dsgvo-privacy-popup .privacy-inner p,
759
+ .dsgvo-privacy-popup .privacy-inner span {
760
+ font-size: 14px;
761
+ line-height: 20px;
762
+ }
763
+
764
+ .dsgvo-privacy-popup .privacy-inner h1,
765
+ .dsgvo-privacy-popup .privacy-inner h2,
766
+ .dsgvo-privacy-popup .privacy-inner h3,
767
+ .dsgvo-privacy-popup .privacy-inner h4,
768
+ .dsgvo-privacy-popup .privacy-inner h5,
769
+ .dsgvo-privacy-popup .privacy-inner h6 {
770
+ font-size: 18px;
771
+ }
772
+
773
+ .dsgvo-privacy-popup .popup-bottom {
774
+ text-align: right;
775
+ padding: 10px 20px;
776
+ }
777
+
778
+ .dsgvo-privacy-popup .more-options-button {
779
+ text-transform: uppercase;
780
+ font-size: 14px;
781
+ font-weight: 600;
782
+ }
783
+
784
+ .dsgvo-privacy-popup .accept-button {
785
+ text-transform: uppercase;
786
+ font-size: 14px;
787
+ font-weight: 600;
788
+ position: relative;
789
+ padding: 10px;
790
+ display: inline-block;
791
+ margin-left: 10px;
792
+ position: relative;
793
+ }
794
+
795
+ .dsgvo-privacy-popup .accept-button.sent {
796
+ color: transparent !important;
797
+ }
798
+
799
+ .dsgvo-privacy-popup .accept-loader {
800
+ position: absolute;
801
+ display: none;
802
+ animation-name: accept-load;
803
+ animation-duration: 1s;
804
+ animation-iteration-count: infinite;
805
+ top: 50%;
806
+ left: 50%;
807
+ transform: translate(-50%, -50%);
808
+ }
809
+
810
+ .dsgvo-privacy-popup .accept-loader circle {
811
+ fill: transparent;
812
+ stroke-width: 2px;
813
+ stroke-dasharray: 50%;
814
+ }
815
+
816
+ @keyframes accept-load {
817
+ from {
818
+ transform: translate(-50%, -50%) rotate(0);
819
+ }
820
+ to {
821
+ transform: translate(-50%, -50%) rotate(360deg);
822
+ }
823
+ }
824
+
825
+ .dsgvo-privacy-popup .sent .accept-loader {
826
+ display: block;
827
+ }
828
+
829
+ .popup-accordion .accordion-wrapper {
830
+ display: none;
831
+ }
832
+
833
+ .popup-accordion .accordion-top {
834
+ position: relative;
835
+ cursor: pointer;
836
+ padding-right: 50px;
837
+ }
838
+
839
+ .popup-accordion .accordion-top span {
840
+ font-size: 18px;
841
+ font-weight: 600;
842
+ line-height: 20px;
843
+ display: block;
844
+ }
845
+
846
+ .popup-accordion .accordion-top .toggle {
847
+ position: absolute;
848
+ top: 50%;
849
+ right: 10px;
850
+ transform: translateY(-50%);
851
+ background-color: #f1f1f1;
852
+ border-radius: 50%;
853
+ width: 30px;
854
+ height: 30px;
855
+ transition: all .4s;
856
+ }
857
+
858
+ .popup-accordion .accordion-top .toggle svg {
859
+ position: absolute;
860
+ top: calc(50% + 2px);
861
+ left: 50%;
862
+ transform: translate(-50%, -50%);
863
+ }
864
+
865
+ .popup-accordion .accordion-top .toggle svg line {
866
+ stroke: #444444;
867
+ stroke-width: 2px;
868
+ }
869
+
870
+ .popup-accordion.open .accordion-top .toggle {
871
+ transform: translateY(-50%) rotate(180deg);
872
+ }
873
+
874
+ .popup-accordion.open .accordion-wrapper {
875
+ display: block;
876
+ }
877
+
878
+ .popup-accordion.open .accordion-wrapper .row {
879
+ flex-wrap: wrap;
880
+ }
881
+
882
+ .popup-accordion.open .accordion-wrapper .row {
883
+ padding-top: 10px;
884
+ padding-bottom: 10px;
885
+ }
886
+
887
+ .popup-accordion.open .accordion-wrapper h5 {
888
+ font-size: 18px;
889
+ font-weight: 600;
890
+ margin-bottom: 10px;
891
+ }
892
+
893
+ .popup-accordion.open .accordion-wrapper p {
894
+ margin-bottom: 15px;
895
+ }
896
+
897
+ .popup-accordion.open .accordion-wrapper select {
898
+ font-size: 14px;
899
+ }
900
+
901
+ .popup-accordion.open .accordion-wrapper hr {
902
+ margin: 15px 0;
903
+ }
904
+
905
+ .dsgvo-terms-content {
906
+ font-size: 14px;
907
+ line-height: 16px;
908
+ display: none;
909
+ }
910
+
911
+ .dsgvo-terms-content.active {
912
+ display: block;
913
+ }
public/images/logo-md.png ADDED
Binary file
public/js/simplebar.js ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*!
2
+ *
3
+ * SimpleBar.js - v2.6.1
4
+ * Scrollbars, simpler.
5
+ * https://grsmto.github.io/simplebar/
6
+ *
7
+ * Made by Adrien Grsmto from a fork by Jonathan Nicol
8
+ * Under MIT License
9
+ *
10
+ */
11
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.SimpleBar=e():t.SimpleBar=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=27)}([function(t,e,n){var r=n(23)("wks"),i=n(12),o=n(1).Symbol,s="function"==typeof o;(t.exports=function(t){return r[t]||(r[t]=s&&o[t]||(s?o:i)("Symbol."+t))}).store=r},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e){var n=t.exports={version:"2.5.1"};"number"==typeof __e&&(__e=n)},function(t,e,n){var r=n(5),i=n(11);t.exports=n(7)?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(6),i=n(33),o=n(34),s=Object.defineProperty;e.f=n(7)?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return s(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(10);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,e,n){t.exports=!n(16)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e){t.exports={}},function(t,e,n){var r=n(23)("keys"),i=n(12);t.exports=function(t){return r[t]||(r[t]=i(t))}},function(t,e,n){var r=n(1),i=n(3),o=n(4),s=n(18),c=n(19),a=function(t,e,n){var u,l,f,h,d=t&a.F,p=t&a.G,v=t&a.S,b=t&a.P,y=t&a.B,m=p?r:v?r[e]||(r[e]={}):(r[e]||{}).prototype,g=p?i:i[e]||(i[e]={}),E=g.prototype||(g.prototype={});p&&(n=e);for(u in n)l=!d&&m&&void 0!==m[u],f=(l?m:n)[u],h=y&&l?c(f,r):b&&"function"==typeof f?c(Function.call,f):f,m&&s(m,u,f,t&a.U),g[u]!=f&&o(g,u,h),b&&E[u]!=f&&(E[u]=f)};r.core=i,a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var r=n(10),i=n(1).document,o=r(i)&&r(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,n){var r=n(1),i=n(4),o=n(2),s=n(12)("src"),c=Function.toString,a=(""+c).split("toString");n(3).inspectSource=function(t){return c.call(t)},(t.exports=function(t,e,n,c){var u="function"==typeof n;u&&(o(n,"name")||i(n,"name",e)),t[e]!==n&&(u&&(o(n,s)||i(n,s,t[e]?""+t[e]:a.join(String(e)))),t===r?t[e]=n:c?t[e]?t[e]=n:i(t,e,n):(delete t[e],i(t,e,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[s]||c.call(this)})},function(t,e,n){var r=n(35);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){var r=n(41),i=n(9);t.exports=function(t){return r(i(t))}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){var r=n(8),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e,n){var r=n(1),i=r["__core-js_shared__"]||(r["__core-js_shared__"]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){var r=n(5).f,i=n(2),o=n(0)("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},function(t,e,n){var r=n(9);t.exports=function(t){return Object(r(t))}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,n(28);var c=r(n(53)),a=r(n(54)),u=r(n(56));n(57),Object.assign=n(58);var l=function(){function t(e,n){i(this,t),this.el=e,this.flashTimeout,this.contentEl,this.scrollContentEl,this.dragOffset={x:0,y:0},this.isVisible={x:!0,y:!0},this.scrollOffsetAttr={x:"scrollLeft",y:"scrollTop"},this.sizeAttr={x:"offsetWidth",y:"offsetHeight"},this.scrollSizeAttr={x:"scrollWidth",y:"scrollHeight"},this.offsetAttr={x:"left",y:"top"},this.globalObserver,this.mutationObserver,this.resizeObserver,this.currentAxis,this.isRtl,this.options=Object.assign({},t.defaultOptions,n),this.classNames=this.options.classNames,this.scrollbarWidth=(0,c.default)(),this.offsetSize=20,this.flashScrollbar=this.flashScrollbar.bind(this),this.onDragY=this.onDragY.bind(this),this.onDragX=this.onDragX.bind(this),this.onScrollY=this.onScrollY.bind(this),this.onScrollX=this.onScrollX.bind(this),this.drag=this.drag.bind(this),this.onEndDrag=this.onEndDrag.bind(this),this.onMouseEnter=this.onMouseEnter.bind(this),this.recalculate=(0,a.default)(this.recalculate,100,{leading:!0}),this.init()}return s(t,[{key:"init",value:function(){this.el.SimpleBar=this,this.initDOM(),this.scrollbarX=this.trackX.querySelector(".".concat(this.classNames.scrollbar)),this.scrollbarY=this.trackY.querySelector(".".concat(this.classNames.scrollbar)),this.isRtl="rtl"===getComputedStyle(this.contentEl).direction,this.scrollContentEl.style[this.isRtl?"paddingLeft":"paddingRight"]="".concat(this.scrollbarWidth||this.offsetSize,"px"),this.scrollContentEl.style.marginBottom="-".concat(2*this.scrollbarWidth||this.offsetSize,"px"),this.contentEl.style.paddingBottom="".concat(this.scrollbarWidth||this.offsetSize,"px"),0!==this.scrollbarWidth&&(this.contentEl.style[this.isRtl?"marginLeft":"marginRight"]="-".concat(this.scrollbarWidth,"px")),this.recalculate(),this.initListeners()}},{key:"initDOM",value:function(){var t=this;if(Array.from(this.el.children).filter(function(e){return e.classList.contains(t.classNames.scrollContent)}).length)this.trackX=this.el.querySelector(".".concat(this.classNames.track,".horizontal")),this.trackY=this.el.querySelector(".".concat(this.classNames.track,".vertical")),this.scrollContentEl=this.el.querySelector(".".concat(this.classNames.scrollContent)),this.contentEl=this.el.querySelector(".".concat(this.classNames.content));else{for(this.scrollContentEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.scrollContentEl.classList.add(this.classNames.scrollContent),this.contentEl.classList.add(this.classNames.content);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.scrollContentEl.appendChild(this.contentEl),this.el.appendChild(this.scrollContentEl)}if(!this.trackX||!this.trackY){var e=document.createElement("div"),n=document.createElement("div");e.classList.add(this.classNames.track),n.classList.add(this.classNames.scrollbar),e.appendChild(n),this.trackX=e.cloneNode(!0),this.trackX.classList.add("horizontal"),this.trackY=e.cloneNode(!0),this.trackY.classList.add("vertical"),this.el.insertBefore(this.trackX,this.el.firstChild),this.el.insertBefore(this.trackY,this.el.firstChild)}this.el.setAttribute("data-simplebar","init")}},{key:"initListeners",value:function(){var t=this;this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),this.scrollbarY.addEventListener("mousedown",this.onDragY),this.scrollbarX.addEventListener("mousedown",this.onDragX),this.scrollContentEl.addEventListener("scroll",this.onScrollY),this.contentEl.addEventListener("scroll",this.onScrollX),"undefined"!=typeof MutationObserver&&(this.mutationObserver=new MutationObserver(function(e){e.forEach(function(e){(t.isChildNode(e.target)||e.addedNodes.length)&&t.recalculate()})}),this.mutationObserver.observe(this.el,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),this.resizeObserver=new u.default(this.recalculate.bind(this)),this.resizeObserver.observe(this.el)}},{key:"removeListeners",value:function(){this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),this.scrollbarX.removeEventListener("mousedown",this.onDragX),this.scrollbarY.removeEventListener("mousedown",this.onDragY),this.scrollContentEl.removeEventListener("scroll",this.onScrollY),this.contentEl.removeEventListener("scroll",this.onScrollX),this.mutationObserver.disconnect(),this.resizeObserver.disconnect()}},{key:"onDragX",value:function(t){this.onDrag(t,"x")}},{key:"onDragY",value:function(t){this.onDrag(t,"y")}},{key:"onDrag",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"y";t.preventDefault();var n="y"===e?this.scrollbarY:this.scrollbarX,r="y"===e?t.pageY:t.pageX;this.dragOffset[e]=r-n.getBoundingClientRect()[this.offsetAttr[e]],this.currentAxis=e,document.addEventListener("mousemove",this.drag),document.addEventListener("mouseup",this.onEndDrag)}},{key:"drag",value:function(t){var e,n,r;t.preventDefault(),"y"===this.currentAxis?(e=t.pageY,n=this.trackY,r=this.scrollContentEl):(e=t.pageX,n=this.trackX,r=this.contentEl);var i=e-n.getBoundingClientRect()[this.offsetAttr[this.currentAxis]]-this.dragOffset[this.currentAxis],o=i/n[this.sizeAttr[this.currentAxis]],s=o*this.contentEl[this.scrollSizeAttr[this.currentAxis]];r[this.scrollOffsetAttr[this.currentAxis]]=s}},{key:"onEndDrag",value:function(){document.removeEventListener("mousemove",this.drag),document.removeEventListener("mouseup",this.onEndDrag)}},{key:"resizeScrollbar",value:function(){var t,e,n,r,i,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"y";"x"===o?(t=this.trackX,e=this.scrollbarX,n=this.contentEl[this.scrollOffsetAttr[o]],r=this.contentSizeX,i=this.scrollbarXSize):(t=this.trackY,e=this.scrollbarY,n=this.scrollContentEl[this.scrollOffsetAttr[o]],r=this.contentSizeY,i=this.scrollbarYSize);var s=i/r,c=n/(r-i),a=Math.max(~~(s*i),this.options.scrollbarMinSize),u=~~((i-a)*c);this.isVisible[o]=i<r,this.isVisible[o]||this.options.forceVisible?(t.style.visibility="visible",this.options.forceVisible?e.style.visibility="hidden":e.style.visibility="visible","x"===o?(e.style.left="".concat(u,"px"),e.style.width="".concat(a,"px")):(e.style.top="".concat(u,"px"),e.style.height="".concat(a,"px"))):t.style.visibility="hidden"}},{key:"onScrollX",value:function(){this.flashScrollbar("x")}},{key:"onScrollY",value:function(){this.flashScrollbar("y")}},{key:"onMouseEnter",value:function(){this.flashScrollbar("x"),this.flashScrollbar("y")}},{key:"flashScrollbar",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"y";this.resizeScrollbar(t),this.showScrollbar(t)}},{key:"showScrollbar",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"y";this.isVisible[t]&&("x"===t?this.scrollbarX.classList.add("visible"):this.scrollbarY.classList.add("visible"),this.options.autoHide&&("number"==typeof this.flashTimeout&&window.clearTimeout(this.flashTimeout),this.flashTimeout=window.setTimeout(this.hideScrollbar.bind(this),1e3)))}},{key:"hideScrollbar",value:function(){this.scrollbarX.classList.remove("visible"),this.scrollbarY.classList.remove("visible"),"number"==typeof this.flashTimeout&&window.clearTimeout(this.flashTimeout)}},{key:"recalculate",value:function(){this.contentSizeX=this.contentEl[this.scrollSizeAttr.x],this.contentSizeY=this.contentEl[this.scrollSizeAttr.y]-(this.scrollbarWidth||this.offsetSize),this.scrollbarXSize=this.trackX[this.sizeAttr.x],this.scrollbarYSize=this.trackY[this.sizeAttr.y],this.resizeScrollbar("x"),this.resizeScrollbar("y"),this.options.autoHide||(this.showScrollbar("x"),this.showScrollbar("y"))}},{key:"getScrollElement",value:function(){return"y"===(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"y")?this.scrollContentEl:this.contentEl}},{key:"getContentElement",value:function(){return this.contentEl}},{key:"unMount",value:function(){this.removeListeners(),this.el.SimpleBar=null}},{key:"isChildNode",value:function(t){return null!==t&&(t===this.el||this.isChildNode(t.parentNode))}}],[{key:"initHtmlApi",value:function(){this.initDOMLoadedElements=this.initDOMLoadedElements.bind(this),"undefined"!=typeof MutationObserver&&(this.globalObserver=new MutationObserver(function(e){e.forEach(function(e){Array.from(e.addedNodes).forEach(function(e){1===e.nodeType&&(e.hasAttribute("data-simplebar")?!e.SimpleBar&&new t(e,t.getElOptions(e)):Array.from(e.querySelectorAll("[data-simplebar]")).forEach(function(e){!e.SimpleBar&&new t(e,t.getElOptions(e))}))}),Array.from(e.removedNodes).forEach(function(t){1===t.nodeType&&(t.hasAttribute("data-simplebar")?t.SimpleBar&&t.SimpleBar.unMount():Array.from(t.querySelectorAll("[data-simplebar]")).forEach(function(t){t.SimpleBar&&t.SimpleBar.unMount()}))})})}),this.globalObserver.observe(document,{childList:!0,subtree:!0})),"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?window.setTimeout(this.initDOMLoadedElements.bind(this)):(document.addEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.addEventListener("load",this.initDOMLoadedElements))}},{key:"getElOptions",value:function(e){return Object.keys(t.htmlAttributes).reduce(function(n,r){var i=t.htmlAttributes[r];return e.hasAttribute(i)&&(n[r]=JSON.parse(e.getAttribute(i)||!0)),n},{})}},{key:"removeObserver",value:function(){this.globalObserver.disconnect()}},{key:"initDOMLoadedElements",value:function(){document.removeEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.removeEventListener("load",this.initDOMLoadedElements),Array.from(document.querySelectorAll("[data-simplebar]")).forEach(function(e){e.SimpleBar||new t(e,t.getElOptions(e))})}},{key:"defaultOptions",get:function(){return{autoHide:!0,forceVisible:!1,classNames:{content:"simplebar-content",scrollContent:"simplebar-scroll-content",scrollbar:"simplebar-scrollbar",track:"simplebar-track"},scrollbarMinSize:25}}},{key:"htmlAttributes",get:function(){return{autoHide:"data-simplebar-auto-hide",forceVisible:"data-simplebar-force-visible",scrollbarMinSize:"data-simplebar-scrollbar-min-size"}}}]),t}();e.default=l,l.initHtmlApi()},function(t,e,n){n(29),n(46),t.exports=n(3).Array.from},function(t,e,n){"use strict";var r=n(30)(!0);n(31)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){var r=n(8),i=n(9);t.exports=function(t){return function(e,n){var o,s,c=String(i(e)),a=r(n),u=c.length;return a<0||a>=u?t?"":void 0:(o=c.charCodeAt(a),o<55296||o>56319||a+1===u||(s=c.charCodeAt(a+1))<56320||s>57343?t?c.charAt(a):o:t?c.slice(a,a+2):s-56320+(o-55296<<10)+65536)}}},function(t,e,n){"use strict";var r=n(32),i=n(15),o=n(18),s=n(4),c=n(2),a=n(13),u=n(36),l=n(25),f=n(45),h=n(0)("iterator"),d=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,e,n,v,b,y,m){u(n,e,v);var g,E,O,_=function(t){if(!d&&t in A)return A[t];switch(t){case"keys":case"values":return function(){return new n(this,t)}}return function(){return new n(this,t)}},x=e+" Iterator",w="values"==b,S=!1,A=t.prototype,k=A[h]||A["@@iterator"]||b&&A[b],j=k||_(b),M=b?w?_("entries"):j:void 0,L="Array"==e?A.entries||k:k;if(L&&(O=f(L.call(new t)))!==Object.prototype&&O.next&&(l(O,x,!0),r||c(O,h)||s(O,h,p)),w&&k&&"values"!==k.name&&(S=!0,j=function(){return k.call(this)}),r&&!m||!d&&!S&&A[h]||s(A,h,j),a[e]=j,a[x]=p,b)if(g={values:w?j:_("values"),keys:y?j:_("keys"),entries:M},m)for(E in g)E in A||o(A,E,g[E]);else i(i.P+i.F*(d||S),e,g);return g}},function(t,e){t.exports=!1},function(t,e,n){t.exports=!n(7)&&!n(16)(function(){return 7!=Object.defineProperty(n(17)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){var r=n(10);t.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,n){"use strict";var r=n(37),i=n(11),o=n(25),s={};n(4)(s,n(0)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(s,{next:i(1,n)}),o(t,e+" Iterator")}},function(t,e,n){var r=n(6),i=n(38),o=n(24),s=n(14)("IE_PROTO"),c=function(){},a=function(){var t,e=n(17)("iframe"),r=o.length;for(e.style.display="none",n(44).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("<script>document.F=Object<\/script>"),t.close(),a=t.F;r--;)delete a.prototype[o[r]];return a()};t.exports=Object.create||function(t,e){var n;return null!==t?(c.prototype=r(t),n=new c,c.prototype=null,n[s]=t):n=a(),void 0===e?n:i(n,e)}},function(t,e,n){var r=n(5),i=n(6),o=n(39);t.exports=n(7)?Object.defineProperties:function(t,e){i(t);for(var n,s=o(e),c=s.length,a=0;c>a;)r.f(t,n=s[a++],e[n]);return t}},function(t,e,n){var r=n(40),i=n(24);t.exports=Object.keys||function(t){return r(t,i)}},function(t,e,n){var r=n(2),i=n(20),o=n(42)(!1),s=n(14)("IE_PROTO");t.exports=function(t,e){var n,c=i(t),a=0,u=[];for(n in c)n!=s&&r(c,n)&&u.push(n);for(;e.length>a;)r(c,n=e[a++])&&(~o(u,n)||u.push(n));return u}},function(t,e,n){var r=n(21);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,e,n){var r=n(20),i=n(22),o=n(43);t.exports=function(t){return function(e,n,s){var c,a=r(e),u=i(a.length),l=o(s,u);if(t&&n!=n){for(;u>l;)if((c=a[l++])!=c)return!0}else for(;u>l;l++)if((t||l in a)&&a[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){var r=n(8),i=Math.max,o=Math.min;t.exports=function(t,e){return t=r(t),t<0?i(t+e,0):o(t,e)}},function(t,e,n){var r=n(1).document;t.exports=r&&r.documentElement},function(t,e,n){var r=n(2),i=n(26),o=n(14)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e,n){"use strict";var r=n(19),i=n(15),o=n(26),s=n(47),c=n(48),a=n(22),u=n(49),l=n(50);i(i.S+i.F*!n(52)(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,i,f,h=o(t),d="function"==typeof this?this:Array,p=arguments.length,v=p>1?arguments[1]:void 0,b=void 0!==v,y=0,m=l(h);if(b&&(v=r(v,p>2?arguments[2]:void 0,2)),void 0==m||d==Array&&c(m))for(e=a(h.length),n=new d(e);e>y;y++)u(n,y,b?v(h[y],y):h[y]);else for(f=m.call(h),n=new d;!(i=f.next()).done;y++)u(n,y,b?s(f,v,[i.value,y],!0):i.value);return n.length=y,n}})},function(t,e,n){var r=n(6);t.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(e){var o=t.return;throw void 0!==o&&r(o.call(t)),e}}},function(t,e,n){var r=n(13),i=n(0)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||o[i]===t)}},function(t,e,n){"use strict";var r=n(5),i=n(11);t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},function(t,e,n){var r=n(51),i=n(0)("iterator"),o=n(13);t.exports=n(3).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[r(t)]}},function(t,e,n){var r=n(21),i=n(0)("toStringTag"),o="Arguments"==r(function(){return arguments}()),s=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,c;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=s(e=Object(t),i))?n:o?r(e):"Object"==(c=r(e))&&"function"==typeof e.callee?"Arguments":c}},function(t,e,n){var r=n(0)("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},t(o)}catch(t){}return n}},function(t,e,n){var r,i,o;/*! scrollbarWidth.js v0.1.3 | felixexter | MIT | https://github.com/felixexter/scrollbarWidth */
12
+ !function(n,s){i=[],r=s,void 0!==(o="function"==typeof r?r.apply(e,i):r)&&(t.exports=o)}(0,function(){"use strict";function t(){if("undefined"==typeof document)return 0;var t,e=document.body,n=document.createElement("div"),r=n.style;return r.position="absolute",r.top=r.left="-9999px",r.width=r.height="100px",r.overflow="scroll",e.appendChild(n),t=n.offsetWidth-n.clientWidth,e.removeChild(n),t}return t})},function(t,e,n){(function(e){function n(t,e,n){function i(e){var n=v,r=b;return v=b=void 0,w=e,m=t.apply(r,n)}function o(t){return w=t,g=setTimeout(l,e),S?i(t):m}function a(t){var n=t-x,r=t-w,i=e-n;return A?O(i,y-r):i}function u(t){var n=t-x,r=t-w;return void 0===x||n>=e||n<0||A&&r>=y}function l(){var t=_();if(u(t))return f(t);g=setTimeout(l,a(t))}function f(t){return g=void 0,k&&v?i(t):(v=b=void 0,m)}function h(){void 0!==g&&clearTimeout(g),w=0,v=x=b=g=void 0}function d(){return void 0===g?m:f(_())}function p(){var t=_(),n=u(t);if(v=arguments,b=this,x=t,n){if(void 0===g)return o(x);if(A)return g=setTimeout(l,e),i(x)}return void 0===g&&(g=setTimeout(l,e)),m}var v,b,y,m,g,x,w=0,S=!1,A=!1,k=!0;if("function"!=typeof t)throw new TypeError(c);return e=s(e)||0,r(n)&&(S=!!n.leading,A="maxWait"in n,y=A?E(s(n.maxWait)||0,e):y,k="trailing"in n?!!n.trailing:k),p.cancel=h,p.flush=d,p}function r(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function i(t){return!!t&&"object"==typeof t}function o(t){return"symbol"==typeof t||i(t)&&g.call(t)==u}function s(t){if("number"==typeof t)return t;if(o(t))return a;if(r(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=r(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(l,"");var n=h.test(t);return n||d.test(t)?p(t.slice(2),n?2:8):f.test(t)?a:+t}var c="Expected a function",a=NaN,u="[object Symbol]",l=/^\s+|\s+$/g,f=/^[-+]0x[0-9a-f]+$/i,h=/^0b[01]+$/i,d=/^0o[0-7]+$/i,p=parseInt,v="object"==typeof e&&e&&e.Object===Object&&e,b="object"==typeof self&&self&&self.Object===Object&&self,y=v||b||Function("return this")(),m=Object.prototype,g=m.toString,E=Math.max,O=Math.min,_=function(){return y.Date.now()};t.exports=n}).call(e,n(55))},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";function r(t){return parseFloat(t)||0}function i(t){return Array.prototype.slice.call(arguments,1).reduce(function(e,n){return e+r(t["border-"+n+"-width"])},0)}function o(t){for(var e=["top","right","bottom","left"],n={},i=0,o=e;i<o.length;i+=1){var s=o[i],c=t["padding-"+s];n[s]=r(c)}return n}function s(t){var e=t.getBBox();return f(0,0,e.width,e.height)}function c(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return _;var s=getComputedStyle(t),c=o(s),u=c.left+c.right,l=c.top+c.bottom,h=r(s.width),d=r(s.height);if("border-box"===s.boxSizing&&(Math.round(h+u)!==e&&(h-=i(s,"left","right")+u),Math.round(d+l)!==n&&(d-=i(s,"top","bottom")+l)),!a(t)){var p=Math.round(h+u)-e,v=Math.round(d+l)-n;1!==Math.abs(p)&&(h-=p),1!==Math.abs(v)&&(d-=v)}return f(c.left,c.top,h,d)}function a(t){return t===document.documentElement}function u(t){return d?x(t)?s(t):c(t):_}function l(t){var e=t.x,n=t.y,r=t.width,i=t.height,o="undefined"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,s=Object.create(o.prototype);return O(s,{x:e,y:n,width:r,height:i,top:n,right:e+r,bottom:i+n,left:e}),s}function f(t,e,n,r){return{x:t,y:e,width:n,height:r}}Object.defineProperty(e,"__esModule",{value:!0});var h=function(){function t(t,e){var n=-1;return t.some(function(t,r){return t[0]===e&&(n=r,!0)}),n}return"undefined"!=typeof Map?Map:function(){function e(){this.__entries__=[]}var n={size:{}};return n.size.get=function(){return this.__entries__.length},e.prototype.get=function(e){var n=t(this.__entries__,e),r=this.__entries__[n];return r&&r[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,r=this.__entries__;n<r.length;n+=1){var i=r[n];t.call(e,i[1],i[0])}},Object.defineProperties(e.prototype,n),e}()}(),d="undefined"!=typeof window&&"undefined"!=typeof document&&window.document===document,p=function(){return"function"==typeof requestAnimationFrame?requestAnimationFrame:function(t){return setTimeout(function(){return t(Date.now())},1e3/60)}}(),v=2,b=function(t,e){function n(){o&&(o=!1,t()),s&&i()}function r(){p(n)}function i(){var t=Date.now();if(o){if(t-c<v)return;s=!0}else o=!0,s=!1,setTimeout(r,e);c=t}var o=!1,s=!1,c=0;return i},y=["top","right","bottom","left","width","height","size","weight"],m="undefined"!=typeof navigator&&/Trident\/.*rv:11/.test(navigator.userAgent),g="undefined"!=typeof MutationObserver&&!m,E=function(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=b(this.refresh.bind(this),20)};E.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},E.prototype.removeObserver=function(t){var e=this.observers_,n=e.indexOf(t);~n&&e.splice(n,1),!e.length&&this.connected_&&this.disconnect_()},E.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},E.prototype.updateObservers_=function(){var t=this.observers_.filter(function(t){return t.gatherActive(),t.hasActive()});return t.forEach(function(t){return t.broadcastActive()}),t.length>0},E.prototype.connect_=function(){d&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),g?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},E.prototype.disconnect_=function(){d&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},E.prototype.onTransitionEnd_=function(t){var e=t.propertyName;y.some(function(t){return!!~e.indexOf(t)})&&this.refresh()},E.getInstance=function(){return this.instance_||(this.instance_=new E),this.instance_},E.instance_=null;var O=function(t,e){for(var n=0,r=Object.keys(e);n<r.length;n+=1){var i=r[n];Object.defineProperty(t,i,{value:e[i],enumerable:!1,writable:!1,configurable:!0})}return t},_=f(0,0,0,0),x=function(){return"undefined"!=typeof SVGGraphicsElement?function(t){return t instanceof SVGGraphicsElement}:function(t){return t instanceof SVGElement&&"function"==typeof t.getBBox}}(),w=function(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=f(0,0,0,0),this.target=t};w.prototype.isActive=function(){var t=u(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},w.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t};var S=function(t,e){var n=l(e);O(this,{target:t,contentRect:n})},A=function(t,e,n){if("function"!=typeof t)throw new TypeError("The callback provided as parameter 1 is not a function.");this.activeObservations_=[],this.observations_=new h,this.callback_=t,this.controller_=e,this.callbackCtx_=n};A.prototype.observe=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)||(e.set(t,new w(t)),this.controller_.addObserver(this),this.controller_.refresh())}},A.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if("undefined"!=typeof Element&&Element instanceof Object){if(!(t instanceof Element))throw new TypeError('parameter 1 is not of type "Element".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},A.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},A.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(e){e.isActive()&&t.activeObservations_.push(e)})},A.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map(function(t){return new S(t.target,t.broadcastRect())});this.callback_.call(t,e,t),this.clearActive()}},A.prototype.clearActive=function(){this.activeObservations_.splice(0)},A.prototype.hasActive=function(){return this.activeObservations_.length>0};var k="undefined"!=typeof WeakMap?new WeakMap:new h,j=function(t){if(!(this instanceof j))throw new TypeError("Cannot call a class as a function");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var e=E.getInstance(),n=new A(t,e,this);k.set(this,n)};["observe","unobserve","disconnect"].forEach(function(t){j.prototype[t]=function(){return(e=k.get(this))[t].apply(e,arguments);var e}});var M=function(){return"undefined"!=typeof ResizeObserver?ResizeObserver:j}();e.default=M},function(t,e){},function(t,e,n){"use strict";function r(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}/*
13
+ object-assign
14
+ (c) Sindre Sorhus
15
+ @license MIT
16
+ */
17
+ var i=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(t){r[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var n,c,a=r(t),u=1;u<arguments.length;u++){n=Object(arguments[u]);for(var l in n)o.call(n,l)&&(a[l]=n[l]);if(i){c=i(n);for(var f=0;f<c.length;f++)s.call(n,c[f])&&(a[c[f]]=n[c[f]])}}return a}}]).default});
public/js/sp-dsgvo-public.js CHANGED
@@ -1,184 +1,349 @@
1
- function getCookieValue(a) {
2
- var b = document.cookie.match('(^|;)\\s*' + a + '\\s*=\\s*([^;]+)');
3
- return b ? b.pop() : '';
4
- }
5
-
6
- ( function ( $ ) {
7
-
8
- // set Cookie Notice
9
- $.fn.setCookieNotice = function ( cookie_value ) {
10
- if ( cnArgs.onScroll === 'yes' ) {
11
- $( window ).off( 'scroll', cnHandleScroll );
12
- }
13
-
14
- var cnTime = new Date(),
15
- cnLater = new Date(),
16
- cnDomNode = $( '#cookie-notice' ),
17
- cnSelf = this;
18
-
19
- // set expiry time in seconds
20
- cnLater.setTime( parseInt( cnTime.getTime() ) + parseInt( cnArgs.cookieTime ) * 1000 );
21
-
22
- // set cookie
23
- cookie_value = cookie_value === 'accept' ? true : false;
24
-
25
- if (cookie_value == false && cnArgs.declineNoCookie === '1') {
26
- // nothing to do here, user should see notice again
27
- }
28
- else {
29
- document.cookie = cnArgs.cookieName + '=' + cookie_value + ';expires=' + cnLater.toGMTString() + ';' + ( cnArgs.cookieDomain !== undefined && cnArgs.cookieDomain !== '' ? 'domain=' + cnArgs.cookieDomain + ';' : '' ) + ( cnArgs.cookiePath !== undefined && cnArgs.cookiePath !== '' ? 'path=' + cnArgs.cookiePath + ';' : '' );
30
- }
31
-
32
- // trigger custom event
33
- $.event.trigger( {
34
- type: 'setCookieNotice',
35
- value: cookie_value,
36
- time: cnTime,
37
- expires: cnLater
38
- } );
39
-
40
- // hide message container
41
- if ( cnArgs.hideEffect === 'fade' ) {
42
- cnDomNode.fadeOut( 300, function () {
43
- cnSelf.removeCookieNotice();
44
- } );
45
- } else if ( cnArgs.hideEffect === 'slide' ) {
46
- cnDomNode.slideUp( 300, function () {
47
- cnSelf.removeCookieNotice();
48
- } );
49
- } else {
50
- cnSelf.removeCookieNotice();
51
- }
52
-
53
- if (cookie_value)
54
- {
55
- window['ga-disable-'+cnArgs.gaTagNumber] = false;
56
- } else
57
- {
58
- window['ga-disable-'+cnArgs.gaTagNumber] = true;
59
- }
60
-
61
- if ( cookie_value && cnArgs.redirection === '1' ) {
62
- var url = window.location.protocol + '//',
63
- hostname = window.location.host + '/' + window.location.pathname;
64
-
65
- if ( cnArgs.cache === '1' ) {
66
- url = url + hostname.replace( '//', '/' ) + ( window.location.search === '' ? '?' : window.location.search + '&' ) + 'cn-reloaded=1' + window.location.hash;
67
-
68
- window.location.href = url;
69
- } else {
70
- url = url + hostname.replace( '//', '/' ) + window.location.search + window.location.hash;
71
-
72
- window.location.reload( true );
73
- }
74
-
75
- return;
76
- }else if(cookie_value == false && cnArgs.declineTargetUrl !== '') {
77
- window.location = cnArgs.declineTargetUrl;
78
- }
79
- };
80
-
81
- // remove Cookie Notice
82
- $.fn.removeCookieNotice = function ( cookie_value ) {
83
- $( '#cookie-notice' ).remove();
84
- $( '#cookie-notice-blocker' ).remove();
85
- $( 'body' ).removeClass( 'cookies-not-accepted' );
86
- };
87
-
88
- $( document ).ready( function () {
89
- var cnDomNode = $( '#cookie-notice' );
90
-
91
- // handle on scroll
92
- if ( cnArgs.onScroll === 'yes' ) {
93
- cnHandleScroll = function () {
94
- var win = $( this );
95
-
96
- if ( win.scrollTop() > parseInt( cnArgs.onScrollOffset ) ) {
97
- // accept cookie
98
- win.setCookieNotice( 'accept' );
99
-
100
- // remove itself after cookie accept
101
- win.off( 'scroll', cnHandleScroll );
102
- }
103
- };
104
- }
105
-
106
- // handle set-cookie button click
107
- $( document ).on( 'click', '.cn-set-cookie', function ( e ) {
108
- e.preventDefault();
109
-
110
- $( this ).setCookieNotice( $( this ).data( 'cookie-set' ) );
111
- } );
112
-
113
- // display cookie notice
114
- if ( document.cookie.indexOf( cnArgs.cookieName ) === -1 ) {
115
- // handle on scroll
116
- if ( cnArgs.onScroll === 'yes' ) {
117
- $( window ).on( 'scroll', cnHandleScroll );
118
- }
119
-
120
- if ( cnArgs.hideEffect === 'fade' ) {
121
- cnDomNode.fadeIn( 300 );
122
- } else if ( cnArgs.hideEffect === 'slide' ) {
123
- cnDomNode.slideDown( 300 );
124
- } else {
125
- cnDomNode.show();
126
- }
127
-
128
- $( 'body' ).addClass( 'cookies-not-accepted' );
129
- } else {
130
- cnDomNode.removeCookieNotice();
131
- }
132
-
133
- // set the correct state of the ga opt-out tracker
134
- if (cnArgs.trackerInitMoment == 'on_load') {
135
- // it tracks until user denies cn
136
- window['ga-disable-'+cnArgs.gaTagNumber] = getCookieValue(cnArgs.cookieName) == 'false';
137
- } else if (cnArgs.trackerInitMoment == 'after_confirm') {
138
- // it only tracks if user confirms
139
- window['ga-disable-'+cnArgs.gaTagNumber] = getCookieValue(cnArgs.cookieName) != 'true';
140
- }
141
-
142
- // find checkbox
143
- // on document change dissable submit button when checkbox is not
144
- // checked
145
- if ( cnArgs.commentsCb === '1' ) {
146
- var gdpr_checkbox = $('input#gdpr-cb');
147
- var errorText = $('.gdpr-cb-info-text');
148
- var comments_submit_button = $('#commentform').find(':submit');
149
- //var comments_submit_button = $('#send_comment');
150
- // on document load disable button to add comments
151
- comments_submit_button.prop('disabled', true);
152
- comments_submit_button.addClass('gdpr-disabled');
153
-
154
- $(document).on('change', function (e) {
155
- if (gdpr_checkbox.prop('checked') === true) {
156
- comments_submit_button.prop('disabled', false);
157
- comments_submit_button.removeClass('gdpr-disabled');
158
- errorText.css('display', 'none');
159
-
160
- }else{
161
- comments_submit_button.prop('disabled', true);
162
- comments_submit_button.addClass('gdpr-disabled');
163
- errorText.css('display', 'inline-block');
164
- }
165
- // TODO add event listenter for disabled button
166
- // when is clicked and has class disabled
167
- // show info that user has to check checkbox to submit comment
168
- });
169
- }
170
-
171
- if ( cnArgs.cf7AccReplace === '1' ) {
172
- var acceptanceLabel = $('.wpcf7-acceptance .wpcf7-list-item-label');
173
- if (acceptanceLabel != null) {
174
- acceptanceLabel.html(cnArgs.cf7AccText);
175
- }
176
- }
177
-
178
- } );
179
-
180
-
181
-
182
-
183
-
184
- } )( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function getCookieValue(a) {
2
+ var b = document.cookie.match('(^|;)\\s*' + a + '\\s*=\\s*([^;]+)');
3
+ return b ? b.pop() : '';
4
+ }
5
+
6
+ ( function ( $ ) {
7
+
8
+ // set Cookie Notice
9
+ $.fn.setCookieNotice = function ( cookie_value ) {
10
+ if ( cnArgs.onScroll === 'yes' ) {
11
+ $( window ).off( 'scroll', cnHandleScroll );
12
+ }
13
+
14
+ var cnTime = new Date(),
15
+ cnLater = new Date(),
16
+ cnDomNode = $( '#cookie-notice' ),
17
+ cnSelf = this;
18
+
19
+ // set expiry time in seconds
20
+ cnLater.setTime( parseInt( cnTime.getTime() ) + parseInt( cnArgs.cookieTime ) * 1000 );
21
+
22
+ // set cookie
23
+ cookie_value = cookie_value === 'accept' ? true : false;
24
+
25
+ if (cookie_value == false && cnArgs.declineNoCookie === '1') {
26
+ // nothing to do here, user should see notice again
27
+ }
28
+ else {
29
+ document.cookie = cnArgs.cookieName + '=' + cookie_value + ';expires=' + cnLater.toGMTString() + ';' + ( cnArgs.cookieDomain !== undefined && cnArgs.cookieDomain !== '' ? 'domain=' + cnArgs.cookieDomain + ';' : '' ) + ( cnArgs.cookiePath !== undefined && cnArgs.cookiePath !== '' ? 'path=' + cnArgs.cookiePath + ';' : '' );
30
+ }
31
+
32
+
33
+ // trigger custom event
34
+ $.event.trigger( {
35
+ type: 'setCookieNotice',
36
+ value: cookie_value,
37
+ time: cnTime,
38
+ expires: cnLater
39
+ } );
40
+
41
+ // hide message container
42
+ if ( cnArgs.hideEffect === 'fade' ) {
43
+ cnDomNode.fadeOut( 300, function () {
44
+ cnSelf.removeCookieNotice();
45
+ } );
46
+ } else if ( cnArgs.hideEffect === 'slide' ) {
47
+ cnDomNode.slideUp( 300, function () {
48
+ cnSelf.removeCookieNotice();
49
+ } );
50
+ } else {
51
+ cnSelf.removeCookieNotice();
52
+ }
53
+
54
+ if (cookie_value)
55
+ {
56
+ window['ga-disable-'+cnArgs.gaTagNumber] = false;
57
+ } else
58
+ {
59
+ window['ga-disable-'+cnArgs.gaTagNumber] = true;
60
+ }
61
+
62
+ if ( cookie_value && cnArgs.redirection === '1' ) {
63
+ var url = window.location.protocol + '//',
64
+ hostname = window.location.host + '/' + window.location.pathname;
65
+
66
+ if ( cnArgs.cache === '1' ) {
67
+ url = url + hostname.replace( '//', '/' ) + ( window.location.search === '' ? '?' : window.location.search + '&' ) + 'cn-reloaded=1' + window.location.hash;
68
+
69
+ window.location.href = url;
70
+ } else {
71
+ url = url + hostname.replace( '//', '/' ) + window.location.search + window.location.hash;
72
+
73
+ window.location.reload( true );
74
+ }
75
+
76
+ return;
77
+ } else if(cookie_value == false && cnArgs.declineTargetUrl !== '') {
78
+ window.location = cnArgs.declineTargetUrl;
79
+ }
80
+ };
81
+
82
+ // remove Cookie Notice
83
+ $.fn.removeCookieNotice = function ( cookie_value ) {
84
+ $( '#cookie-notice' ).remove();
85
+ $( '#cookie-notice-blocker' ).remove();
86
+ $( 'body' ).removeClass( 'cookies-not-accepted' );
87
+ };
88
+
89
+ $( document ).ready( function () {
90
+ var cnDomNode = $( '#cookie-notice' );
91
+
92
+ // handle on scroll
93
+ if ( cnArgs.onScroll === 'yes' ) {
94
+ cnHandleScroll = function () {
95
+ var win = $( this );
96
+
97
+ if ( win.scrollTop() > parseInt( cnArgs.onScrollOffset ) ) {
98
+ // accept cookie
99
+ win.setCookieNotice( 'accept' );
100
+
101
+ // remove itself after cookie accept
102
+ win.off( 'scroll', cnHandleScroll );
103
+ }
104
+ };
105
+ }
106
+
107
+ // handle set-cookie button click
108
+ $( document ).on( 'click', '.cn-set-cookie', function ( e ) {
109
+ e.preventDefault();
110
+
111
+ $( this ).setCookieNotice( $( this ).data( 'cookie-set' ) );
112
+ } );
113
+
114
+ // display cookie notice
115
+ if ( document.cookie.indexOf( cnArgs.cookieName ) === -1 ) {
116
+ // handle on scroll
117
+ if ( cnArgs.onScroll === 'yes' ) {
118
+ $( window ).on( 'scroll', cnHandleScroll );
119
+ }
120
+
121
+ if ( cnArgs.hideEffect === 'fade' ) {
122
+ cnDomNode.fadeIn( 300 );
123
+ } else if ( cnArgs.hideEffect === 'slide' ) {
124
+ cnDomNode.slideDown( 300 );
125
+ } else {
126
+ cnDomNode.show();
127
+ }
128
+
129
+ $( 'body' ).addClass( 'cookies-not-accepted' );
130
+ } else {
131
+ cnDomNode.removeCookieNotice();
132
+ }
133
+
134
+ // set the correct state of the ga opt-out tracker
135
+ if (cnArgs.trackerInitMoment == 'on_load') {
136
+ // it tracks until user denies cn
137
+ window['ga-disable-'+cnArgs.gaTagNumber] = getCookieValue(cnArgs.cookieName) == 'false';
138
+ } else if (cnArgs.trackerInitMoment == 'after_confirm') {
139
+ // it only tracks if user confirms
140
+ window['ga-disable-'+cnArgs.gaTagNumber] = getCookieValue(cnArgs.cookieName) != 'true';
141
+ }
142
+
143
+
144
+ // find checkbox
145
+ // on document change dissable submit button when checkbox is not
146
+ // checked
147
+ if ( cnArgs.commentsCb === '1' ) {
148
+ var gdpr_checkbox = $('input#gdpr-cb');
149
+ var errorText = $('.gdpr-cb-info-text');
150
+ var comments_submit_button = $('#commentform').find(':submit');
151
+ //var comments_submit_button = $('#send_comment');
152
+ // on document load disable button to add comments
153
+ comments_submit_button.prop('disabled', true);
154
+ comments_submit_button.addClass('gdpr-disabled');
155
+
156
+ $(document).on('change', function (e) {
157
+ if (gdpr_checkbox.prop('checked') === true) {
158
+ comments_submit_button.prop('disabled', false);
159
+ comments_submit_button.removeClass('gdpr-disabled');
160
+ errorText.css('display', 'none');
161
+
162
+ }else{
163
+ comments_submit_button.prop('disabled', true);
164
+ comments_submit_button.addClass('gdpr-disabled');
165
+ errorText.css('display', 'inline-block');
166
+ }
167
+ // TODO add event listenter for disabled button
168
+ // when is clicked and has class disabled
169
+ // show info that user has to check checkbox to submit comment
170
+ });
171
+ }
172
+
173
+ if ( cnArgs.cf7AccReplace === '1' ) {
174
+ var acceptanceLabel = $('.wpcf7-acceptance .wpcf7-list-item-label');
175
+ if (acceptanceLabel != null) {
176
+ acceptanceLabel.html(cnArgs.cf7AccText);
177
+ }
178
+ }
179
+ } );
180
+
181
+
182
+
183
+
184
+
185
+ } )( jQuery );
186
+
187
+ /* i592995 */
188
+
189
+ (function( $ ) {
190
+ 'use strict';
191
+
192
+ var scrollBar = null;
193
+
194
+ /**
195
+ * Popup close button (if no url provided)
196
+ */
197
+ function preparePopupClose() {
198
+ var $popupClose = $('#dsgvo_popup_close'),
199
+ $overlay = $('.dsgvo-popup-overlay');
200
+
201
+ if($popupClose.hasClass('close')) {
202
+ $popupClose.on('click tap', function(event) {
203
+ event.preventDefault();
204
+ event.stopPropagation();
205
+
206
+ $overlay.remove();
207
+ });
208
+ }
209
+ }
210
+
211
+ /**
212
+ * Language switcher click (expand/collapse)
213
+ */
214
+ function preparePopupLangSwitcher() {
215
+ var $active = $('.lang-active'),
216
+ $dropdown = $('.lang-dropdown'),
217
+ $switcher = $('.popup-language-switcher');
218
+
219
+ $active.on('click tap', function() {
220
+ $dropdown.toggleClass('active');
221
+ });
222
+
223
+ $(document).on('click tap', function(e) {
224
+ if (!$switcher.is(e.target) && $switcher.has(e.target).length === 0) {
225
+ $dropdown.removeClass('active');
226
+ }
227
+ });
228
+ }
229
+
230
+ /**
231
+ * Popup accordion expand/collapse
232
+ */
233
+ function preparePopupAccordion() {
234
+ var $accordion = $('.popup-accordion'),
235
+ $top = $accordion.find('.accordion-top'),
236
+ $wrapper = $accordion.find('.accordion-wrapper');
237
+
238
+ $top.on('click tap', function() {
239
+ var $inner = $wrapper.children('.accordion-inner');
240
+ $accordion.toggleClass('open');
241
+ if($accordion.hasClass('open')) {
242
+ $wrapper.css('height', $inner.outerHeight() + 'px');
243
+ } else {
244
+ $wrapper.css('height', '0');
245
+ }
246
+ });
247
+
248
+ $(window).resize(function() {
249
+ if($accordion.hasClass('open')) {
250
+ $wrapper.css('height', $wrapper.children('.accordion-inner').outerHeight() + 'px');
251
+ }
252
+ });
253
+ }
254
+
255
+ /**
256
+ * Adds Simplebar js scrollbar
257
+ */
258
+ function prepareScrolling() {
259
+ var $moreButton = $('#more_options_button'),
260
+ $accordion = $('#popup_accordion'),
261
+ $content = $('.dsgvo-privacy-content');
262
+
263
+ if($content.length > 0) {
264
+ scrollBar = new SimpleBar($('.dsgvo-privacy-content')[0], {
265
+ autoHide: false
266
+ });
267
+ }
268
+
269
+ $moreButton.on('click tap', function(event) {
270
+ event.preventDefault();
271
+ event.stopPropagation();
272
+
273
+ if(!$accordion.hasClass('open')) {
274
+ $accordion.addClass('open');
275
+ $accordion.find('.accordion-wrapper').css('height', $accordion.find('.accordion-inner').outerHeight() + 'px');
276
+ }
277
+ scrollBar.getScrollElement().scrollTop += $accordion.position().top;
278
+ });
279
+ }
280
+
281
+ /**
282
+ * Adds ajax action for popup Accept button
283
+ */
284
+ function prepareAcceptButton() {
285
+ $('#popup_accept_button').on('click tap', function(event) {
286
+ event.preventDefault();
287
+ event.stopPropagation();
288
+
289
+ var $this = $(this),
290
+ $form = $('.privacy-settings-form'),
291
+ $selects = $form.find('select'),
292
+ values = new Array();
293
+
294
+ $this.addClass('sent');
295
+
296
+ $selects.each(function() {
297
+ var $this = $(this);
298
+ var service = new Object();
299
+ service.name = $this.attr('name');
300
+ service.value = $this.val();
301
+ values.push(service);
302
+ });
303
+
304
+ $.post( cnArgs.ajaxurl, {
305
+ action: 'user-permissions',
306
+ version: 'alt',
307
+ services: JSON.parse(JSON.stringify(values)),
308
+ },
309
+ function( data ) {
310
+ $.post( cnArgs.ajaxurl, {
311
+ action: 'popup-accept',
312
+ },
313
+ function( data ) {
314
+ $('.dsgvo-popup-overlay').remove();
315
+ } );
316
+ } );
317
+ });
318
+
319
+ }
320
+
321
+ /**
322
+ * Adds click event to terms links
323
+ */
324
+ function prepareTermsLinks() {
325
+ var $links = $('.dsgvo-terms-toggle');
326
+
327
+ $links.on('click tap', function(event) {
328
+ event.preventDefault();
329
+ event.stopPropagation();
330
+
331
+ var $this = $(this),
332
+ $content = $('#terms_content_' + $this.attr('data-id'));
333
+
334
+ $content.addClass('active');
335
+ scrollBar.recalculate();
336
+ $(window).resize();
337
+ });
338
+ }
339
+
340
+ $(document).ready(function() {
341
+ preparePopupClose();
342
+ preparePopupLangSwitcher();
343
+ preparePopupAccordion();
344
+ prepareScrolling();
345
+ prepareAcceptButton();
346
+ prepareTermsLinks();
347
+ });
348
+
349
+ })( jQuery );
public/shortcodes/decline-permission.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  function SPDSGVODeclinePermissionShortcode($atts){
4
  $atts = shortcode_atts(array(
5
- 'button_text' => 'Decline Terms & Conditions',
6
  ), $atts);
7
 
8
  return '<span class="sp-dsgvo-framework"><a class="button" href="'. SPDSGVOExplicitPermissionAction::url(array('permission' => 'declined')) .'">'. $atts['button_text'] .'</a></span>';
2
 
3
  function SPDSGVODeclinePermissionShortcode($atts){
4
  $atts = shortcode_atts(array(
5
+ 'button_text' => __('Decline Terms & Conditions', 'shapepress-dsgvo'),
6
  ), $atts);
7
 
8
  return '<span class="sp-dsgvo-framework"><a class="button" href="'. SPDSGVOExplicitPermissionAction::url(array('permission' => 'declined')) .'">'. $atts['button_text'] .'</a></span>';
public/shortcodes/display-services.php CHANGED
@@ -10,7 +10,7 @@ function SPDSGVODisplayServicesShortcode(){
10
  <?= $service['reason'] ?>
11
 
12
  <?php if($service['link']): ?>
13
- <a href="<?= $service['link'] ?>">AGB des Dienstes aufrufen</a>
14
  <?php endif; ?>
15
  </li>
16
  <?php endforeach; ?>
10
  <?= $service['reason'] ?>
11
 
12
  <?php if($service['link']): ?>
13
+ <a href="<?= $service['link'] ?>"><?php _e('Open Terms of service','shapepress-dsgvo')?></a>
14
  <?php endif; ?>
15
  </li>
16
  <?php endforeach; ?>
public/shortcodes/explicit-permission.php CHANGED
@@ -3,8 +3,8 @@
3
  function SPDSGVOExplicitPermissionShortcode($atts){
4
 
5
  $content = '<div style="display:block; width:100%;">';
6
- $content .= '<a class="sp-dsgvo-btn" href="'. SPDSGVOExplicitPermissionAction::url(['permission' => 'granted']) .'">Accept</a>';
7
- $content .= '<a class="sp-dsgvo-btn sp-dsgvo-btn-red" href="'. SPDSGVOExplicitPermissionAction::url(['permission' => 'declined']) .'">Decline</a>';
8
  $content .= '<div/>';
9
 
10
  $content .= '<br/>';
3
  function SPDSGVOExplicitPermissionShortcode($atts){
4
 
5
  $content = '<div style="display:block; width:100%;">';
6
+ $content .= '<a class="sp-dsgvo-btn" href="'. SPDSGVOExplicitPermissionAction::url(['permission' => 'granted']) .'">'.__('Accepted','shapepress-dsgvo').'</a>';
7
+ $content .= '<a class="sp-dsgvo-btn sp-dsgvo-btn-red" href="'. SPDSGVOExplicitPermissionAction::url(['permission' => 'declined']) .'">'.__('Declined','shapepress-dsgvo').'</a>';
8
  $content .= '<div/>';
9
 
10
  $content .= '<br/>';
public/shortcodes/imprint.php CHANGED
@@ -2,8 +2,14 @@
2
 
3
  function SPDSGVOImprintShortcode(){
4
 
 
5
  $imprint = SPDSGVOSettings::get('imprint');
6
 
 
 
 
 
 
7
  $imprint = str_replace('[company_name]', SPDSGVOSettings::get('spdsgvo_company_info_name'), $imprint);
8
  $imprint = str_replace('[company_owner]', SPDSGVOSettings::get('spdsgvo_company_law_person'), $imprint);
9
  $imprint = str_replace('[adress_street]', SPDSGVOSettings::get('spdsgvo_company_info_street'), $imprint);
2
 
3
  function SPDSGVOImprintShortcode(){
4
 
5
+
6
  $imprint = SPDSGVOSettings::get('imprint');
7
 
8
+ if (spdsgvoUseWpml())
9
+ {
10
+ $imprint = file_get_contents(SPDSGVO::pluginDir('/templates/'.get_locale().'/imprint.txt'));
11
+ }
12
+
13
  $imprint = str_replace('[company_name]', SPDSGVOSettings::get('spdsgvo_company_info_name'), $imprint);
14
  $imprint = str_replace('[company_owner]', SPDSGVOSettings::get('spdsgvo_company_law_person'), $imprint);
15
  $imprint = str_replace('[adress_street]', SPDSGVOSettings::get('spdsgvo_company_info_street'), $imprint);
public/shortcodes/privacy-policy.php CHANGED
@@ -3,7 +3,7 @@
3
  /*
4
  * params to replace
5
  *
6
- * [Einsetzen: DemoShop e.K., Inhaber: Max Muster Demostra�e 1, 12345 Demostadt]
7
  * [BITTE DATUM DER LETZTEN AKTUALISIERUNG EINTRAGEN]
8
  *
9
  */
@@ -12,6 +12,11 @@ function SPDSGVOPrivacyPolicyShortcode(){
12
 
13
  $privacyPolicy = SPDSGVOSettings::get('privacy_policy');
14
 
 
 
 
 
 
15
  $privacyPolicy = str_replace('[company_name]', SPDSGVOSettings::get('spdsgvo_company_info_name'), $privacyPolicy);
16
  $privacyPolicy = str_replace('[company_owner]', SPDSGVOSettings::get('spdsgvo_company_law_person'), $privacyPolicy);
17
  $privacyPolicy = str_replace('[adress_street]', SPDSGVOSettings::get('spdsgvo_company_info_street'), $privacyPolicy);
3
  /*
4
  * params to replace
5
  *
6
+ * [Einsetzen: DemoShop e.K., Inhaber: Max Muster Demostraße 1, 12345 Demostadt]
7
  * [BITTE DATUM DER LETZTEN AKTUALISIERUNG EINTRAGEN]
8
  *
9
  */
12
 
13
  $privacyPolicy = SPDSGVOSettings::get('privacy_policy');
14
 
15
+ if (spdsgvoUseWpml())
16
+ {
17
+ $privacyPolicy = file_get_contents(SPDSGVO::pluginDir('/templates/'.get_locale().'/privacy-policy.txt'));
18
+ }
19
+
20
  $privacyPolicy = str_replace('[company_name]', SPDSGVOSettings::get('spdsgvo_company_info_name'), $privacyPolicy);
21
  $privacyPolicy = str_replace('[company_owner]', SPDSGVOSettings::get('spdsgvo_company_law_person'), $privacyPolicy);
22
  $privacyPolicy = str_replace('[adress_street]', SPDSGVOSettings::get('spdsgvo_company_info_street'), $privacyPolicy);
public/shortcodes/privacy-settings-form-alt.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* i592995 */
3
+ /**
4
+ * Adds alternative version of privacy settings shortcode (visual changes)
5
+ */
6
+ function SPDSGVOUserPrivacySettingsFormShortcodeAlt($atts)
7
+ {
8
+ $atts = shortcode_atts(array(
9
+ ), $atts);
10
+
11
+ ob_start();
12
+ global $post;
13
+ ?>
14
+
15
+ <form method="post" class="privacy-settings-form" action="<?= admin_url('/admin-ajax.php'); ?>"
16
+ class="sp-dsgvo-framework">
17
+ <input type="hidden" name="action" value="user-permissions">
18
+ <div class="container container-no-padding">
19
+
20
+ <?php foreach(SPDSGVOSettings::get('services') as $slug => $service): ?>
21
+ <div class="row">
22
+ <div class="column column-25"></div>
23
+ <div class="column column-75">
24
+ <h5><?= $service['name'] ?></h5>
25
+ </div>
26
+ <div class="column column-25">
27
+ <?php if(isset($service['image'])) : ?>
28
+ <img src="<?php echo wp_get_attachment_url(intval($service['image'])); ?>" />
29
+ <?php endif; ?>
30
+ </div>
31
+ <div class="column column-75">
32
+ <?php
33
+ if($service['link'] == get_home_url()) {
34
+ $page_id = (int) get_option( 'page_on_front' );
35
+ } else {
36
+ $page_id = url_to_postid($service['link']);
37
+ }
38
+ ?>
39
+ <p>
40
+ <?= $service['reason'] ?>
41
+ <?php if ($service['name'] !== 'Cookies'):?>
42
+ <?php if($page_id == 0) : ?>
43
+ (<a href="<?= @$service['link'] ?>" target="_blank"><?php _e('Terms','shapepress-dsgvo')?></a>)
44
+ <?php else: ?>
45
+ (<a href="#" class="dsgvo-terms-toggle" data-id="<?php echo $page_id; ?>"><?php _e('Terms','shapepress-dsgvo')?></a>)
46
+ <?php
47
+ $page = get_post($page_id);
48
+ $temp = $post;
49
+ $post = $page;
50
+ setup_postdata($post);
51
+ ?>
52
+ <div class="dsgvo-terms-content" id="terms_content_<?php echo $page_id; ?>">
53
+ <?php the_content(); ?>
54
+ </div><!-- .dsgvo-terms-content -->
55
+ <?php
56
+ $post = $temp;
57
+ setup_postdata($post);
58
+ ?>
59
+ <?php endif; ?>
60
+ <?php endif; ?>
61
+ </p>
62
+ <select name="<?= $slug ?>">
63
+ <option
64
+ <?= (hasUserGivenPermissionFor($service['slug']))? ' selected ' : '' ?>
65
+ value="1"><?php _e('Yes','shapepress-dsgvo')?></option>
66
+ <option
67
+ <?= (hasUserGivenPermissionFor($service['slug']))? '' : ' selected ' ?>
68
+ value="0"><?php _e('No','shapepress-dsgvo')?></option>
69
+ </select>
70
+ </div>
71
+ </div>
72
+ <hr />
73
+ <?php endforeach; ?>
74
+ </div>
75
+
76
+ <?php if(!is_user_logged_in()): ?>
77
+ <p>
78
+ <small><?php _e('Since you are not logged in we save these settings in a cookie. These settings are thus only active on this PC.','shapepress-dsgvo')?></small>
79
+ </p>
80
+ <?php endif; ?>
81
+
82
+ </form>
83
+
84
+ <?php
85
+ return ob_get_clean();
86
+ }
87
+
88
+ add_shortcode('user_privacy_settings_form_alt', 'SPDSGVOUserPrivacySettingsFormShortcodeAlt');
89
+ /* i592995 */
public/shortcodes/privacy-settings-form.php CHANGED
@@ -1,55 +1,57 @@
1
- <?php
2
-
3
- function SPDSGVOUserPrivacySettingsFormShortcode($atts)
4
- {
5
- $atts = shortcode_atts(array(
6
- ), $atts);
7
-
8
- ob_start();
9
  ?>
10
 
11
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>"
12
  class="sp-dsgvo-framework">
13
  <input type="hidden" name="action" value="user-permissions">
14
- <div class="container container-no-padding">
15
- <div class="row">
16
- <div class="column strong">Dienst</div>
17
- <div class="column column-50 strong">Grund der Nutzung</div>
18
- <div class="column strong">AGB</div>
19
- <div class="column strong">Aktiviert</div>
20
- </div>
21
- <hr />
22
- <?php foreach(SPDSGVOSettings::get('services') as $slug => $service): ?>
23
- <div class="row">
24
- <div class="column"><?= $service['name'] ?></div>
25
- <div class="column column-50"><?= $service['reason'] ?></div>
26
- <div class="column"><a href="<?= @$service['link'] ?>" target="_blank">AGB</a></div>
27
- <div class="column"><select name="services[<?= $slug ?>]">
28
- <option
29
- <?= (hasUserGivenPermissionFor($service['slug']))? ' selected ' : '' ?>
30
- value="1">Ja</option>
31
- <option
32
- <?= (hasUserGivenPermissionFor($service['slug']))? '' : ' selected ' ?>
33
- value="0">Nein</option>
34
- </select></div>
35
- </div>
36
- <hr />
37
- <?php endforeach; ?>
 
 
 
 
38
  </div>
39
 
40
  <?php if(!is_user_logged_in()): ?>
41
  <p>
42
- <small>Da Sie nicht eingeloggt sind speichern wir diese Einstellungen
43
- in einem Cookie. Diese Einstellungen sind somit nur auf diesem PC
44
- aktiv.</small>
45
  </p>
46
  <?php endif; ?>
47
 
48
- <input type="submit" value="Speichern">
49
  </form>
50
 
51
- <?php
52
- return ob_get_clean();
53
- }
54
-
55
  add_shortcode('user_privacy_settings_form', 'SPDSGVOUserPrivacySettingsFormShortcode');
1
+ <?php
2
+
3
+ function SPDSGVOUserPrivacySettingsFormShortcode($atts)
4
+ {
5
+ $atts = shortcode_atts(array(
6
+ ), $atts);
7
+
8
+ ob_start();
9
  ?>
10
 
11
  <form method="post" action="<?= admin_url('/admin-ajax.php'); ?>"
12
  class="sp-dsgvo-framework">
13
  <input type="hidden" name="action" value="user-permissions">
14
+ <div class="container container-no-padding">
15
+ <div class="row">
16
+ <div class="column strong"><?php _e('Service','shapepress-dsgvo')?></div>
17
+ <div class="column column-50 strong"><?php _e('Reason for use','shapepress-dsgvo')?></div>
18
+ <div class="column strong"><?php _e('Terms','shapepress-dsgvo')?></div>
19
+ <div class="column strong"><?php _e('Enabled','shapepress-dsgvo')?></div>
20
+ </div>
21
+ <hr />
22
+ <?php foreach(SPDSGVOSettings::get('services') as $slug => $service): ?>
23
+ <div class="row">
24
+ <div class="column"><?= $service['name'] ?></div>
25
+ <div class="column column-50"><?= $service['reason'] ?></div>
26
+ <div class="column">
27
+ <?php if ($service['name'] !== 'Cookies'):?>
28
+ <a href="<?= @$service['link'] ?>" target="_blank"><?php _e('Terms','shapepress-dsgvo')?></a>
29
+ <?php endif;?>
30
+ </div>
31
+ <div class="column"><select name="services[<?= $slug ?>]">
32
+ <option
33
+ <?= (hasUserGivenPermissionFor($service['slug']))? ' selected ' : '' ?>
34
+ value="1"><?php _e('Yes','shapepress-dsgvo')?></option>
35
+ <option
36
+ <?= (hasUserGivenPermissionFor($service['slug']))? '' : ' selected ' ?>
37
+ value="0"><?php _e('No','shapepress-dsgvo')?></option>
38
+ </select></div>
39
+ </div>
40
+ <hr />
41
+ <?php endforeach; ?>
42
  </div>
43
 
44
  <?php if(!is_user_logged_in()): ?>
45
  <p>
46
+ <small><?php _e('Since you are not logged in we save these settings in a cookie. These settings are thus only active on this PC.','shapepress-dsgvo')?></small>
 
 
47
  </p>
48
  <?php endif; ?>
49
 
50
+ <input type="submit" value="<?php _e('Save','shapepress-dsgvo')?>">
51
  </form>
52
 
53
+ <?php
54
+ return ob_get_clean();
55
+ }
56
+
57
  add_shortcode('user_privacy_settings_form', 'SPDSGVOUserPrivacySettingsFormShortcode');
public/shortcodes/subject-access-request/download-subject-access-request.php CHANGED
@@ -8,7 +8,7 @@ Class SPDSGVODownloadSubjectAccessRequestAction extends SPDSGVOAjaxAction{
8
 
9
  public function run(){
10
  if(!$this->has('token')){
11
- $this->error('No token provided.');
12
  }
13
 
14
  $this->sar = SPDSGVOSubjectAccessRequest::finder('token', array(
@@ -16,7 +16,7 @@ Class SPDSGVODownloadSubjectAccessRequestAction extends SPDSGVOAjaxAction{
16
  ));
17
 
18
  if(is_null($this->sar)){
19
- $this->error('Bad token provided.');
20
  }
21
 
22
  switch($this->get('file', 'zip')){
@@ -68,10 +68,10 @@ Class SPDSGVODownloadSubjectAccessRequestAction extends SPDSGVOAjaxAction{
68
 
69
  public function download($path){
70
  if(!file_exists($path)){
71
- echo 'Error';
72
  die();
73
  }
74
-
75
  header('Content-Description: File Transfer');
76
  header('Content-Type: application/octet-stream');
77
  header('Content-Disposition: attachment; filename='. basename($path));
8
 
9
  public function run(){
10
  if(!$this->has('token')){
11
+ $this->error(__('No token provided.', 'shapepress-dsgvo'));
12
  }
13
 
14
  $this->sar = SPDSGVOSubjectAccessRequest::finder('token', array(
16
  ));
17
 
18
  if(is_null($this->sar)){
19
+ $this->error(__('Bad token provided.', 'shapepress-dsgvo'));
20
  }
21
 
22
  switch($this->get('file', 'zip')){
68
 
69
  public function download($path){
70
  if(!file_exists($path)){
71
+ echo __('Error', 'shapepress-dsgvo');
72
  die();
73
  }
74
+
75
  header('Content-Description: File Transfer');
76
  header('Content-Type: application/octet-stream');
77
  header('Content-Disposition: attachment; filename='. basename($path));
public/shortcodes/subject-access-request/subject-access-request-action.php CHANGED
@@ -6,11 +6,11 @@ Class SPDSGVOSubjectAccessRequestAction extends SPDSGVOAjaxAction{
6
 
7
  public function run(){
8
  if(!$this->has('email') || empty($this->get('email'))){
9
- $this->error('Bitte eine Email Adresse angeben.');
10
  }
11
 
12
  if(!$this->has('dsgvo_checkbox') || $this->get('dsgvo_checkbox') !== '1'){
13
- $this->error('Die DSGVO Zustimmung ist zwingend.');
14
  }
15
 
16
  $sar = SPDSGVOSubjectAccessRequest::insert(array(
@@ -20,6 +20,14 @@ Class SPDSGVOSubjectAccessRequestAction extends SPDSGVOAjaxAction{
20
  'dsgvo_accepted' => $this->get('dsgvo_checkbox')
21
  ));
22
 
 
 
 
 
 
 
 
 
23
 
24
  if($this->has('process_now')){
25
  $displayEmail = ($this->get('display_email', '0') == '1');
6
 
7
  public function run(){
8
  if(!$this->has('email') || empty($this->get('email'))){
9
+ $this->error(__('Please enter an email address','shapepress-dsgvo'));
10
  }
11
 
12
  if(!$this->has('dsgvo_checkbox') || $this->get('dsgvo_checkbox') !== '1'){
13
+ $this->error(__('The GDPR approval is mandatory.','shapepress-dsgvo'));
14
  }
15
 
16
  $sar = SPDSGVOSubjectAccessRequest::insert(array(
20
  'dsgvo_accepted' => $this->get('dsgvo_checkbox')
21
  ));
22
 
23
+ if (SPDSGVOSettings::get('sar_email_notification') === '1'
24
+ && SPDSGVOSettings::get('admin_email') !== ''
25
+ && $this->has('process_now') == false) {
26
+ // Send Email
27
+ wp_mail(SPDSGVOSettings::get('admin_email'),
28
+ __('New subject access request','shapepress-dsgvo').': '. parse_url(home_url(), PHP_URL_HOST),
29
+ __('A new subject access request from ','shapepress-dsgvo') .' '.$this->get('email')."' was made.");
30
+ }
31
 
32
  if($this->has('process_now')){
33
  $displayEmail = ($this->get('display_email', '0') == '1');
public/shortcodes/subject-access-request/subject-access-request.php CHANGED
@@ -15,7 +15,7 @@ function SPDSGVODownloadMyDataShortcode($atts){
15
  ?>
16
  <?php if(isset($_REQUEST['result']) && $_REQUEST['result'] === 'success'): ?>
17
 
18
- <p>Ihr Antrag wurde eingereicht. <br> Sie erhalten eine Email von uns mit einem aktuellen Auszug Ihrer bei uns gespeicherten Daten.</p>
19
 
20
  <?php else: ?>
21
  <form method="post" action="<?= SPDSGVOSubjectAccessRequestAction::url() ?>" class="sp-dsgvo-framework">
@@ -23,32 +23,32 @@ function SPDSGVODownloadMyDataShortcode($atts){
23
 
24
  <div class="row">
25
  <div class="column">
26
- <label for="email-field">Vorname</label>
27
- <input required type="text" id="first-name-field" name="first_name" value="<?= $firstName ?>" placeholder="Vorname" spellcheck="false" />
28
  </div>
29
 
30
  <div class="column">
31
- <label for="email-field">Nachname</label>
32
- <input required type="text" id="last-name-field" name="last_name" value="<?= $lastName ?>" placeholder="Nachname" spellcheck="false" />
33
  </div>
34
  </div>
35
 
36
- <div class="row">
37
  <div class="column">
38
- <label for="email-field">Email</label>
39
- <input required type="email" id="email-field" name="email" value="<?= $email ?>" placeholder="Email" spellcheck="false" />
40
  </div>
41
  </div>
42
  <div class="row">
43
  <div class="column">
44
  <label for="dsgvo-checkbox">
45
  <input required type="checkbox" id="dsgvo-checkbox" name="dsgvo_checkbox" value="1" />
46
- <span style="font-weight:normal"><?= convDeChars(SPDSGVOSettings::get('sar_dsgvo_accepted_text')); ?></span>
47
  </label>
48
  </div>
49
  </div>
50
  <br>
51
- <input type="submit" value="Anfrage absenden" />
52
  </fieldset>
53
  </form>
54
  <?php endif; ?>
15
  ?>
16
  <?php if(isset($_REQUEST['result']) && $_REQUEST['result'] === 'success'): ?>
17
 
18
+ <p><?php _e('Your request has been created','shapepress-dsgvo')?> <br> <?php _e('You will receive an email from us with a current extract of your data stored with us.','shapepress-dsgvo')?></p>
19
 
20
  <?php else: ?>
21
  <form method="post" action="<?= SPDSGVOSubjectAccessRequestAction::url() ?>" class="sp-dsgvo-framework">
23
 
24
  <div class="row">
25
  <div class="column">
26
+ <label for="email-field"><?php _e('First name','shapepress-dsgvo')?></label>
27
+ <input required type="text" id="first-name-field" name="first_name" value="<?= $firstName ?>" placeholder="<?php _e('First name','shapepress-dsgvo')?>" spellcheck="false" />
28
  </div>
29
 
30
  <div class="column">
31
+ <label for="email-field"><?php _e('Last name','shapepress-dsgvo')?></label>
32
+ <input required type="text" id="last-name-field" name="last_name" value="<?= $lastName ?>" placeholder="<?php _e('Last name','shapepress-dsgvo')?>" spellcheck="false" />
33
  </div>
34
  </div>
35
 
36
+ <div class="row">
37
  <div class="column">
38
+ <label for="email-field"><?php _e('Email','shapepress-dsgvo')?></label>
39
+ <input required type="email" id="email-field" name="email" value="<?= $email ?>" placeholder="<?php _e('Email','shapepress-dsgvo')?>" spellcheck="false" />
40
  </div>
41
  </div>
42
  <div class="row">
43
  <div class="column">
44
  <label for="dsgvo-checkbox">
45
  <input required type="checkbox" id="dsgvo-checkbox" name="dsgvo_checkbox" value="1" />
46
+ <span style="font-weight:normal"><?= spdsgvoUseWpml() ? __('I agree to the storage of the data for processing within the meaning of the GDPR.','shapepress-dsgvo') : convDeChars(SPDSGVOSettings::get('sar_dsgvo_accepted_text')); ?></span>
47
  </label>
48
  </div>
49
  </div>
50
  <br>
51
+ <input type="submit" value="<?php _e('Create request','shapepress-dsgvo')?>" />
52
  </fieldset>
53
  </form>
54
  <?php endif; ?>
public/shortcodes/super-unsubscribe/unsubscribe-confirm-action.php CHANGED
@@ -7,7 +7,7 @@ Class SPDSGVOSuperUnsubscribeConfirmAction extends SPDSGVOAjaxAction{
7
  public function run(){
8
 
9
  if(!$this->has('token')){
10
- $this->error('No token provided.');
11
  }
12
 
13
  $unsubscriber = SPDSGVOUnsubscriber::finder('token', array(
@@ -15,7 +15,7 @@ Class SPDSGVOSuperUnsubscribeConfirmAction extends SPDSGVOAjaxAction{
15
  ));
16
 
17
  if(is_null($unsubscriber)){
18
- $this->error('Bad token provided.');
19
  }
20
 
21
  if(SPDSGVOSettings::get('unsubscribe_auto_delete') == '1'){
7
  public function run(){
8
 
9
  if(!$this->has('token')){
10
+ $this->error(__('No token provided.','shapepress-dsgvo'));
11
  }
12
 
13
  $unsubscriber = SPDSGVOUnsubscriber::finder('token', array(
15
  ));
16
 
17
  if(is_null($unsubscriber)){
18
+ $this->error(__('Bad token provided','shapepress-dsgvo'));
19
  }
20
 
21
  if(SPDSGVOSettings::get('unsubscribe_auto_delete') == '1'){
public/shortcodes/super-unsubscribe/unsubscribe-form-action.php CHANGED
@@ -6,21 +6,31 @@ Class SPDSGVOSuperUnsubscribeFormAction extends SPDSGVOAjaxAction{
6
 
7
  public function run(){
8
  if(!$this->has('email') || empty($this->get('email'))){
9
- $this->error('Bitte eine Email Adresse angeben.');
10
  }
11
 
12
  if(!$this->has('dsgvo_checkbox') || $this->get('dsgvo_checkbox') !== '1'){
13
- $this->error('Die DSGVO Zustimmung ist zwingend.');
14
  }
15
 
16
  $unsubscriber = SPDSGVOUnsubscriber::insert(array(
17
  'first_name' => $this->get('first_name'),
18
  'last_name' => $this->get('last_name'),
19
  'email' => $this->get('email'),
20
- 'dsgvo_accepted' => $this->get('dsgvo_checkbox'),
21
- 'process_now'=> $this->get('process_now')
22
  ));
23
 
 
 
 
 
 
 
 
 
 
 
24
  if($this->has('process_now')){
25
  $unsubscriber->doSuperUnsubscribe();
26
  }
6
 
7
  public function run(){
8
  if(!$this->has('email') || empty($this->get('email'))){
9
+ $this->error(__('Please enter an email address.','shapepress-dsgvo'));
10
  }
11
 
12
  if(!$this->has('dsgvo_checkbox') || $this->get('dsgvo_checkbox') !== '1'){
13
+ $this->error(__('The GDPR approval is mandatory.','shapepress-dsgvo'));
14
  }
15
 
16
  $unsubscriber = SPDSGVOUnsubscriber::insert(array(
17
  'first_name' => $this->get('first_name'),
18
  'last_name' => $this->get('last_name'),
19
  'email' => $this->get('email'),
20
+ 'process_now'=> $this->get('process_now'),
21
+ 'dsgvo_accepted' => $this->get('dsgvo_checkbox')
22
  ));
23
 
24
+ if (SPDSGVOSettings::get('su_email_notification') === '1'
25
+ && SPDSGVOSettings::get('admin_email') !== ''
26
+ && $this->has('process_now') == false)
27
+ {
28
+ // Send Email
29
+ wp_mail(SPDSGVOSettings::get('admin_email'),
30
+ __('New delete request','shapepress-dsgvo').': '. parse_url(home_url(), PHP_URL_HOST),
31
+ __('A new subject access request from ','shapepress-dsgvo') .' '.$this->get('email')."' was made.");
32
+ }
33
+
34
  if($this->has('process_now')){
35
  $unsubscriber->doSuperUnsubscribe();
36
  }
public/shortcodes/super-unsubscribe/unsubscribe-form.php CHANGED
@@ -16,43 +16,43 @@ function SPDSGVOUnsubscribeShortcode($atts){
16
  ?>
17
  <?php if(isset($_REQUEST['result']) && $_REQUEST['result'] === 'success'): ?>
18
 
19
- <p>Anfrage erfolgreich gesendet. Sie erhalten in wenigen Minuten eine Email.</p>
20
 
21
  <?php elseif(isset($_REQUEST['result']) && $_REQUEST['result'] === 'confirmed'): ?>
22
 
23
- <p>Anfrage erfolgreich abgeschlossen. Ihre Daten wurden vollst&auml;ndig gel&ouml;scht.</p>
24
 
25
  <?php else: ?>
26
  <form method="post" action="<?= SPDSGVOSuperUnsubscribeFormAction::url() ?>" class="sp-dsgvo-framework">
27
  <fieldset>
28
  <div class="row">
29
  <div class="column">
30
- <label for="email-field">Vorname</label>
31
- <input required type="text" id="first-name-field" name="first_name" value="<?= $firstName ?>" placeholder="Vorname" spellcheck="false" />
32
  </div>
33
 
34
  <div class="column">
35
- <label for="email-field">Nachname</label>
36
- <input required type="text" id="last-name-field" name="last_name" value="<?= $lastName ?>" placeholder="Nachname" spellcheck="false" />
37
  </div>
38
  </div>
39
 
40
- <div class="row">
41
  <div class="column">
42
- <label for="email-field">Email</label>
43
- <input required type="email" id="email-field" name="email" value="<?= $email ?>" placeholder="Email" spellcheck="false" />
44
  </div>
45
  </div>
46
  <div class="row">
47
  <div class="column">
48
  <label for="dsgvo-checkbox">
49
  <input required type="checkbox" id="dsgvo-checkbox" name="dsgvo_checkbox" value="1" />
50
- <span style="font-weight:normal"><?= convDeChars(SPDSGVOSettings::get('su_dsgvo_accepted_text')); ?></span>
51
  </label>
52
  </div>
53
  </div>
54
  <br>
55
- <input type="submit" value="L&ouml;schanfrage senden" />
56
  </fieldset>
57
  </form>
58
  <?php endif; ?>
16
  ?>
17
  <?php if(isset($_REQUEST['result']) && $_REQUEST['result'] === 'success'): ?>
18
 
19
+ <p><?php _e('Request sent successfully. You will receive an email in a few minutes.','shapepress-dsgvo')?></p>
20
 
21
  <?php elseif(isset($_REQUEST['result']) && $_REQUEST['result'] === 'confirmed'): ?>
22
 
23
+ <p><?php _e('Request successfully completed. Your data has been completely deleted.','shapepress-dsgvo')?></p>
24
 
25
  <?php else: ?>
26
  <form method="post" action="<?= SPDSGVOSuperUnsubscribeFormAction::url() ?>" class="sp-dsgvo-framework">
27
  <fieldset>
28
  <div class="row">
29
  <div class="column">
30
+ <label for="email-field"><?php _e('First name','shapepress-dsgvo')?></label>
31
+ <input required type="text" id="first-name-field" name="first_name" value="<?= $firstName ?>" placeholder="<?php _e('First name','shapepress-dsgvo')?>" spellcheck="false" />
32
  </div>
33
 
34
  <div class="column">
35
+ <label for="email-field"><?php _e('Last name','shapepress-dsgvo')?></label>
36
+ <input required type="text" id="last-name-field" name="last_name" value="<?= $lastName ?>" placeholder="<?php _e('Last name','shapepress-dsgvo')?>" spellcheck="false" />
37
  </div>
38
  </div>
39
 
40
+ <div class="row">
41
  <div class="column">
42
+ <label for="email-field"><?php _e('Email','shapepress-dsgvo')?></label>
43
+ <input required type="email" id="email-field" name="email" value="<?= $email ?>" placeholder="<?php _e('Email','shapepress-dsgvo')?>" spellcheck="false" />
44
  </div>
45
  </div>
46
  <div class="row">
47
  <div class="column">
48
  <label for="dsgvo-checkbox">
49
  <input required type="checkbox" id="dsgvo-checkbox" name="dsgvo_checkbox" value="1" />
50
+ <span style="font-weight:normal"><?= spdsgvoUseWpml() ? __('I agree to the storage of the data for processing within the meaning of the GDPR.','shapepress-dsgvo') : convDeChars(SPDSGVOSettings::get('su_dsgvo_accepted_text')); ?></span>
51
  </label>
52
  </div>
53
  </div>
54
  <br>
55
+ <input type="submit" value="<?php _e('Create delete request','shapepress-dsgvo')?>" />
56
  </fieldset>
57
  </form>
58
  <?php endif; ?>
sp-dsgvo.php CHANGED
@@ -1,78 +1,81 @@
1
- <?php
2
-
3
- /**
4
- * The plugin bootstrap file
5
- *
6
- * This file is read by WordPress to generate the plugin information in the plugin
7
- * admin area. This file also includes all of the dependencies used by the plugin,
8
- * registers the activation and deactivation functions, and defines a function
9
- * that starts the plugin.
10
- *
11
- * @link https://wp-dsgvo.eu
12
- * @since 1.0.0
13
- * @package WP DSGVO Tools
14
- *
15
- * @wordpress-plugin
16
- * Plugin Name: WP DSGVO Tools
17
- * Plugin URI: https://wp-dsgvo.eu
18
- * Description: WP DSGVO Tools helfen beim Erf&uuml;llen der Richtlinien der Datenschutzgrundverordnung (<a target="_blank" href="https://ico.org.uk/for-organisations/data-protection-reform/overview-of-the-gdpr/">DSGVO</a>), spezialisiert auf &Ouml;sterreich und Deutschland.
19
- * Version: 1.5.6
20
- * Author: Shapepress eU
21
- * Author URI: https://www.shapepress.com
22
- * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
23
- * Text Domain: shapepress-dsgvo
24
- */
25
-
26
- // If this file is called directly, abort.
27
- if (! defined('WPINC')) {
28
- die();
29
- }
30
-
31
- define('sp_dsgvo_VERSION', '1.5.6');
32
- define('sp_dsgvo_NAME', 'sp-dsgvo');
33
-
34
- /**
35
- * The code that runs during plugin activation.
36
- * This action is documented in includes/class-sp-dsgvo-activator.php
37
- */
38
- function activate_sp_dsgvo()
39
- {
40
- require_once plugin_dir_path(__FILE__) . 'includes/class-sp-dsgvo-activator.php';
41
- SPDSGVOActivator::activate();
42
- }
43
-
44
- /**
45
- * The code that runs during plugin deactivation.
46
- * This action is documented in includes/class-sp-dsgvo-deactivator.php
47
- */
48
- function deactivate_sp_dsgvo()
49
- {
50
- require_once plugin_dir_path(__FILE__) . 'includes/class-sp-dsgvo-deactivator.php';
51
- SPDSGVODeactivator::deactivate();
52
- }
53
-
54
- register_activation_hook(__FILE__, 'activate_sp_dsgvo');
55
- register_deactivation_hook(__FILE__, 'deactivate_sp_dsgvo');
56
-
57
- /**
58
- * The core plugin class that is used to define internationalization,
59
- * admin-specific hooks, and public-facing site hooks.
60
- */
61
- require plugin_dir_path(__FILE__) . 'includes/class-sp-dsgvo.php';
62
-
63
-
64
- /**
65
- * Begins execution of the plugin.
66
- *
67
- * Since everything within the plugin is registered via hooks,
68
- * then kicking off the plugin from this point in the file does
69
- * not affect the page life cycle.
70
- *
71
- * @since 1.0.0
72
- */
73
- function run_sp_dsgvo()
74
- {
75
- $plugin = SPDSGVO::instance();
76
- $plugin->run();
77
- }
 
 
 
78
  add_action('init', 'run_sp_dsgvo');
1
+ <?php
2
+
3
+ /**
4
+ * The plugin bootstrap file
5
+ *
6
+ * This file is read by WordPress to generate the plugin information in the plugin
7
+ * admin area. This file also includes all of the dependencies used by the plugin,
8
+ * registers the activation and deactivation functions, and defines a function
9
+ * that starts the plugin.
10
+ *
11
+ * @link https://wp-dsgvo.eu
12
+ * @since 1.0.0
13
+ * @package WP DSGVO Tools
14
+ *
15
+ * @wordpress-plugin
16
+ * Plugin Name: WP DSGVO Tools
17
+ * Plugin URI: https://wp-dsgvo.eu
18
+ * Description: WP DSGVO Tools helfen beim Erf&uuml;llen der Richtlinien der Datenschutzgrundverordnung (<a target="_blank" href="https://ico.org.uk/for-organisations/data-protection-reform/overview-of-the-gdpr/">DSGVO</a>), spezialisiert auf &Ouml;sterreich und Deutschland.
19
+ * Version: 2.0.0
20
+ * Author: Shapepress eU
21
+ * Author URI: https://www.shapepress.com
22
+ * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
23
+ * Text Domain: shapepress-dsgvo
24
+ */
25
+
26
+ // If this file is called directly, abort.
27
+ if (! defined('WPINC')) {
28
+ die();
29
+ }
30
+
31
+ define('sp_dsgvo_VERSION', '2.0.0');
32
+ define('sp_dsgvo_NAME', 'sp-dsgvo');
33
+ /* i592995 */
34
+ define('sp_dsgvo_URL', plugin_dir_url( __FILE__ ));
35
+ /* i592995 */
36
+
37
+ /**
38
+ * The code that runs during plugin activation.
39
+ * This action is documented in includes/class-sp-dsgvo-activator.php
40
+ */
41
+ function activate_sp_dsgvo()
42
+ {
43
+ require_once plugin_dir_path(__FILE__) . 'includes/class-sp-dsgvo-activator.php';
44
+ SPDSGVOActivator::activate();
45
+ }
46
+
47
+ /**
48
+ * The code that runs during plugin deactivation.
49
+ * This action is documented in includes/class-sp-dsgvo-deactivator.php
50
+ */
51
+ function deactivate_sp_dsgvo()
52
+ {
53
+ require_once plugin_dir_path(__FILE__) . 'includes/class-sp-dsgvo-deactivator.php';
54
+ SPDSGVODeactivator::deactivate();
55
+ }
56
+
57
+ register_activation_hook(__FILE__, 'activate_sp_dsgvo');
58
+ register_deactivation_hook(__FILE__, 'deactivate_sp_dsgvo');
59
+
60
+ /**
61
+ * The core plugin class that is used to define internationalization,
62
+ * admin-specific hooks, and public-facing site hooks.
63
+ */
64
+ require plugin_dir_path(__FILE__) . 'includes/class-sp-dsgvo.php';
65
+
66
+ /**
67
+ * Begins execution of the plugin.
68
+ *
69
+ * Since everything within the plugin is registered via hooks,
70
+ * then kicking off the plugin from this point in the file does
71
+ * not affect the page life cycle.
72
+ *
73
+ * @since 1.0.0
74
+ */
75
+ function run_sp_dsgvo()
76
+ {
77
+ load_plugin_textdomain('shapepress-dsgvo', false, 'shapepress-dsgvo/languages');
78
+ $plugin = SPDSGVO::instance();
79
+ $plugin->run();
80
+ }
81
  add_action('init', 'run_sp_dsgvo');
templates/de_DE/emails/feedback.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h1><?php _e('WP DSGVO Tools Feedback', 'shapepress-dsgvo'); ?></h1>
2
+
3
+ <p>
4
+ <strong><?php _e('From', 'shapepress-dsgvo'); ?>:</strong><br>
5
+ {{home_url}} <br>
6
+ {{user}}
7
+ </p>
8
+
9
+ <p>
10
+ <strong><?php _e('Reason', 'shapepress-dsgvo'); ?>:</strong><br>
11
+ {{reason}}
12
+ </p>
13
+
14
+ <p>
15
+ <strong><?php _e('Message', 'shapepress-dsgvo'); ?>:</strong><br>
16
+ {{message}}
17
+ </p>
templates/de_DE/emails/footer.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ </table>
2
+ </td>
3
+ </tr>
4
+ </tbody>
5
+ </table>
6
+ </td>
7
+ </tr>
8
+ </tbody>
9
+ </table>
10
+ </body>
11
+ </html>
templates/de_DE/emails/header.php ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <title>WP DSGVO Tools</title>
6
+ <style type="text/css">
7
+ body {
8
+ padding-top: 0 !important;
9
+ padding-bottom: 0 !important;
10
+ padding-top: 0 !important;
11
+ padding-bottom: 0 !important;
12
+ margin:0 !important;
13
+ width: 100% !important;
14
+ -webkit-text-size-adjust: 100% !important;
15
+ -ms-text-size-adjust: 100% !important;
16
+ -webkit-font-smoothing: antialiased !important;
17
+ }
18
+ .tableContent img {
19
+ border: 0 !important;
20
+ display: block !important;
21
+ outline: none !important;
22
+ }
23
+ a{
24
+ color:#382F2E;
25
+ }
26
+ p, h1,h2,ul,ol,li,div{
27
+ margin:0;
28
+ padding:0;
29
+ }
30
+ h1,h2{
31
+ font-weight: normal;
32
+ background:transparent !important;
33
+ border:none !important;
34
+ }
35
+ @media only screen and (max-width:480px)
36
+ {
37
+ table[class="MainContainer"], td[class="cell"]
38
+ {
39
+ width: 100% !important;
40
+ height:auto !important;
41
+ }
42
+ td[class="specbundle"]
43
+ {
44
+ width: 100% !important;
45
+ float:left !important;
46
+ font-size:13px !important;
47
+ line-height:17px !important;
48
+ display:block !important;
49
+ padding-bottom:15px !important;
50
+ }
51
+ td[class="specbundle2"]
52
+ {
53
+ width:80% !important;
54
+ float:left !important;
55
+ font-size:13px !important;
56
+ line-height:17px !important;
57
+ display:block !important;
58
+ padding-bottom:10px !important;
59
+ padding-left:10% !important;
60
+ padding-right:10% !important;
61
+ }
62
+ td[class="spechide"]
63
+ {
64
+ display:none !important;
65
+ }
66
+ img[class="banner"]
67
+ {
68
+ width: 100% !important;
69
+ height: auto !important;
70
+ }
71
+ td[class="left_pad"]
72
+ {
73
+ padding-left:15px !important;
74
+ padding-right:15px !important;
75
+ }
76
+ }
77
+ @media only screen and (max-width:540px)
78
+ {
79
+ table[class="MainContainer"], td[class="cell"]
80
+ {
81
+ width: 100% !important;
82
+ height:auto !important;
83
+ }
84
+ td[class="specbundle"]
85
+ {
86
+ width: 100% !important;
87
+ float:left !important;
88
+ font-size:13px !important;
89
+ line-height:17px !important;
90
+ display:block !important;
91
+ padding-bottom:15px !important;
92
+ }
93
+ td[class="specbundle2"]
94
+ {
95
+ width:80% !important;
96
+ float:left !important;
97
+ font-size:13px !important;
98
+ line-height:17px !important;
99
+ display:block !important;
100
+ padding-bottom:10px !important;
101
+ padding-left:10% !important;
102
+ padding-right:10% !important;
103
+ }
104
+ td[class="spechide"]
105
+ {
106
+ display:none !important;
107
+ }
108
+ img[class="banner"]
109
+ {
110
+ width: 100% !important;
111
+ height: auto !important;
112
+ }
113
+ td[class="left_pad"]
114
+ {
115
+ padding-left:15px !important;
116
+ padding-right:15px !important;
117
+ }
118
+ }
119
+ .contentEditable h2.big,.contentEditable h1.big{
120
+ font-size: 26px !important;
121
+ }
122
+ .contentEditable h2.bigger,.contentEditable h1.bigger{
123
+ font-size: 37px !important;
124
+ }
125
+ td,table{
126
+ vertical-align: top;
127
+ }
128
+ td.middle{
129
+ vertical-align: middle;
130
+ }
131
+ a.link1{
132
+ font-size:13px;
133
+ color:#27A1E5;
134
+ line-height: 24px;
135
+ text-decoration:none;
136
+ }
137
+ a{
138
+ text-decoration: none;
139
+ }
140
+ .link2{
141
+ color:#ffffff;
142
+ border-top:10px solid #27A1E5;
143
+ border-bottom:10px solid #27A1E5;
144
+ border-left:18px solid #27A1E5;
145
+ border-right:18px solid #27A1E5;
146
+ border-radius:3px;
147
+ -moz-border-radius:3px;
148
+ -webkit-border-radius:3px;
149
+ background:#27A1E5;
150
+ }
151
+ .link3{
152
+ color:#555555;
153
+ border:1px solid #cccccc;
154
+ padding:10px 18px;
155
+ border-radius:3px;
156
+ -moz-border-radius:3px;
157
+ -webkit-border-radius:3px;
158
+ background:#ffffff;
159
+ }
160
+ .link4{
161
+ color:#27A1E5;
162
+ line-height: 24px;
163
+ }
164
+ h2,h1{
165
+ line-height: 20px;
166
+ }
167
+ p{
168
+ font-size: 14px;
169
+ line-height: 21px;
170
+ color:#AAAAAA;
171
+ }
172
+ .contentEditable li{
173
+ }
174
+ .appart p{
175
+ }
176
+ .bgItem{
177
+ background: #ffffff;
178
+ }
179
+ .bgBody{
180
+ background: #ffffff;
181
+ }
182
+ img {
183
+ outline:none;
184
+ text-decoration:none;
185
+ -ms-interpolation-mode: bicubic;
186
+ width: auto;
187
+ max-width: 100%;
188
+ clear: both;
189
+ display: block;
190
+ float: none;
191
+ }
192
+
193
+ ul ul{
194
+ margin-left: 15px;
195
+ }
196
+ ul li{
197
+ color:#444444;
198
+ }
199
+ </style>
200
+ <script type="colorScheme" class="swatch active">
201
+ {
202
+ "name":"Default",
203
+ "bgBody":"ffffff",
204
+ "link":"27A1E5",
205
+ "color":"AAAAAA",
206
+ "bgItem":"ffffff",
207
+ "title":"444444"
208
+ }
209
+ </script>
210
+ </head>
211
+ <body paddingwidth="0" paddingheight="0" bgcolor="#d1d3d4" style="padding-top: 0; padding-bottom: 0; padding-top: 0; padding-bottom: 0; background-repeat: repeat; width: 100% !important; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -webkit-font-smoothing: antialiased;" offset="0" toppadding="0" leftpadding="0">
212
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
213
+ <tbody>
214
+ <tr>
215
+ <td>
216
+ <table width="600" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#ffffff" style="font-family:helvetica, sans-serif;" class="MainContainer">
217
+ <tbody>
218
+ <tr>
219
+ <td>
220
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
templates/de_DE/emails/subject-access-request.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <tbody>
2
+ <tr>
3
+ <td align="center" valign="top"><table border="0" cellpadding="0"
4
+ cellspacing="0" width="600" id="template_container"
5
+ style="box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1) !important; background-color: #fdfdfd; border: 1px solid #dcdcdc; border-radius: 3px !important;">
6
+ <tbody>
7
+ <tr>
8
+ <td align="center" valign="top">
9
+ <!-- Header -->
10
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
11
+ id="template_header"
12
+ style="background-color: #ccc; border-radius: 3px 3px 0 0 !important; color: #202020; border-bottom: 0; font-weight: bold; line-height: 100%; vertical-align: middle; font-family: &amp; quot;Helvetica Neue&amp;quot;, Helvetica, Roboto, Arial, sans-serif;">
13
+ <tbody>
14
+ <tr>
15
+ <td id="header_wrapper"
16
+ style="padding: 36px 48px; display: block;">
17
+ <h1
18
+ style="color: #202020; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 30px; font-weight: 300; line-height: 150%; margin: 0; text-align: left; text-shadow: 0 1px 0 #202020;">
19
+ <a target='_blank' href="[CLIENTS.WEBSITE]"
20
+ style='color: #202020'>{{website}}</a><br>
21
+ <?php _e('Subject Access Request', 'shapepress-dsgvo'); ?>
22
+ </h1>
23
+ </td>
24
+ </tr>
25
+ </tbody>
26
+ </table> <!-- End Header -->
27
+ </td>
28
+ </tr>
29
+ <tr>
30
+ <td align="center" valign="top">
31
+ <!-- Body -->
32
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
33
+ id="template_body">
34
+ <tbody>
35
+ <tr>
36
+ <td valign="top" id="body_content"
37
+ style="background-color: #fdfdfd;">
38
+ <!-- Content -->
39
+ <table border="0" cellpadding="20" cellspacing="0"
40
+ width="100%">
41
+ <tbody>
42
+ <tr>
43
+ <td valign="top" style="padding: 48px 48px 0;">
44
+ <div id="body_content_inner"
45
+ style="color: #4d4c53; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; line-height: 150%; text-align: left;">
46
+ <p style="margin: 0 0 16px;"><?php _e('We have received your subject access request. A PDF document containing all the data we have stored about you is attached.
47
+ Amount of personal data found', 'shapepress-dsgvo'); ?> {{count}}</p>
48
+ <p style="margin: 0 0 16px;">
49
+ <?php _e('Here you see a summary about this data', 'shapepress-dsgvo'); ?>:<br>
50
+ {{breakdown}}
51
+ </p>
52
+ <h2 style="font-size: 20px;"><?php _e('Download your archive', 'shapepress-dsgvo'); ?></h2>
53
+ <br>
54
+ <p><?php _e('Following this link you can download a PDF and a JSON file dump of your data.', 'shapepress-dsgvo'); ?><br>
55
+ <br> <a target='_blank' href="{{zip_link}}"
56
+ class='link2' style='color: #202020'><?php _e('Download archive', 'shapepress-dsgvo'); ?></a>
57
+ </p>
58
+ <h2
59
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 18px; font-weight: bold; line-height: 130%; margin: 0 0 18px; text-align: center;">
60
+ <a color: #202020 target='_blank'
61
+ href="{{confirm_link}}"></a>
62
+ </h2>
63
+ <p style="margin: 0 0 16px;">&nbsp;</p>
64
+ </div>
65
+ </td>
66
+ </tr>
67
+ </tbody>
68
+ </table> <!-- End Content -->
69
+ </td>
70
+ </tr>
71
+ </tbody>
72
+ </table> <!-- End Body -->
73
+ </td>
74
+ </tr>
75
+ <tr>
76
+ <td align="center" valign="top">
77
+ <!-- Footer -->
78
+ <table border="0" cellpadding="10" cellspacing="0" width="600"
79
+ id="template_footer">
80
+ <tbody>
81
+ <tr>
82
+ <td valign="top"
83
+ style="padding: 0; -webkit-border-radius: 6px;">
84
+ <table border="0" cellpadding="10" cellspacing="0"
85
+ width="100%">
86
+ <tbody>
87
+ <tr>
88
+ <td colspan="2" valign="middle" id="credit"
89
+ style="padding: 0 48px 48px 48px; -webkit-border-radius: 6px; border: 0; color: #ffdd66; font-family: Arial; font-size: 12px; line-height: 125%; text-align: center;">
90
+ <div class="wgm-wrap-email-appendixes"
91
+ style="text-align: left; color: #737373; font-size: 14px; line-height: 150%;">
92
+ <div style="float: left; width: 100%;">
93
+ <h3
94
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Sent from', 'shapepress-dsgvo'); ?> {{home_url}}</h3>
95
+ </div>
96
+ <div style="float: left; width: 100%;">
97
+ <h3
98
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Contact', 'shapepress-dsgvo'); ?>
99
+ {{admin_email}}</h3>
100
+
101
+ </div>
102
+ </div>
103
+ </td>
104
+ </tr>
105
+ </tbody>
106
+ </table>
107
+ </td>
108
+ </tr>
109
+ </tbody>
110
+ </table> <!-- End Footer -->
111
+ </td>
112
+ </tr>
113
+ </tbody>
114
+ </table></td>
115
+ </tr>
116
+ </tbody>
templates/de_DE/emails/super-unsubscribe.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <tbody>
2
+ <tr>
3
+ <td align="center" valign="top"><table border="0" cellpadding="0"
4
+ cellspacing="0" width="600" id="template_container"
5
+ style="box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1) !important; background-color: #fdfdfd; border: 1px solid #dcdcdc; border-radius: 3px !important;">
6
+ <tbody>
7
+ <tr>
8
+ <td align="center" valign="top">
9
+ <!-- Header -->
10
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
11
+ id="template_header"
12
+ style="background-color: #ccc; border-radius: 3px 3px 0 0 !important; color: #202020; border-bottom: 0; font-weight: bold; line-height: 100%; vertical-align: middle; font-family: &amp; quot;Helvetica Neue&amp;quot;, Helvetica, Roboto, Arial, sans-serif;">
13
+ <tbody>
14
+ <tr>
15
+ <td id="header_wrapper"
16
+ style="padding: 36px 48px; display: block;">
17
+ <h1
18
+ style="color: #202020; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 30px; font-weight: 300; line-height: 150%; margin: 0; text-align: left; text-shadow: 0 1px 0 #202020;">
19
+ <a target='_blank' href="[CLIENTS.WEBSITE]"
20
+ style='color: #202020'>{{website}}</a><br><?php _e('Delete Request', 'shapepress-dsgvo'); ?>
21
+ </h1>
22
+ </td>
23
+ </tr>
24
+ </tbody>
25
+ </table> <!-- End Header -->
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <td align="center" valign="top">
30
+ <!-- Body -->
31
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
32
+ id="template_body">
33
+ <tbody>
34
+ <tr>
35
+ <td valign="top" id="body_content"
36
+ style="background-color: #fdfdfd;">
37
+ <!-- Content -->
38
+ <table border="0" cellpadding="20" cellspacing="0"
39
+ width="100%">
40
+ <tbody>
41
+ <tr>
42
+ <td valign="top" style="padding: 48px 48px 0;">
43
+ <div id="body_content_inner"
44
+ style="color: #4d4c53; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; line-height: 150%; text-align: left;">
45
+ <p style="margin: 0 0 16px;"><?php _e('We have received your delete request.', 'shapepress-dsgvo'); ?></p>
46
+ <p style="margin: 0 0 16px;"><?php _e('If you confirm the following link, all your data stored at
47
+ {{website}} gets deleted.', 'shapepress-dsgvo'); ?></p>
48
+ <h2
49
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 18px; font-weight: bold; line-height: 130%; margin: 0 0 18px; text-align: center;">
50
+ <a color: #ffc600 target='_blank'
51
+ href="{{confirm_link}}"><?php _e('Confirm Delete', 'shapepress-dsgvo'); ?></a>
52
+ </h2>
53
+ <p style="margin: 0 0 16px;"><?php _e("If you don't want do delete your data just ignore this email.", 'shapepress-dsgvo'); ?></p>
54
+ </div>
55
+ </td>
56
+ </tr>
57
+ </tbody>
58
+ </table> <!-- End Content -->
59
+ </td>
60
+ </tr>
61
+ </tbody>
62
+ </table> <!-- End Body -->
63
+ </td>
64
+ </tr>
65
+ <tr>
66
+ <td align="center" valign="top">
67
+ <!-- Footer -->
68
+ <table border="0" cellpadding="10" cellspacing="0" width="600"
69
+ id="template_footer">
70
+ <tbody>
71
+ <tr>
72
+ <td valign="top"
73
+ style="padding: 0; -webkit-border-radius: 6px;">
74
+ <table border="0" cellpadding="10" cellspacing="0"
75
+ width="100%">
76
+ <tbody>
77
+ <tr>
78
+ <td colspan="2" valign="middle" id="credit"
79
+ style="padding: 0 48px 48px 48px; -webkit-border-radius: 6px; border: 0; color: #ffdd66; font-family: Arial; font-size: 12px; line-height: 125%; text-align: center;">
80
+ <div class="wgm-wrap-email-appendixes"
81
+ style="text-align: left; color: #737373; font-size: 14px; line-height: 150%;">
82
+ <div style="float: left; width: 100%;">
83
+ <h3
84
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Sent from', 'shapepress-dsgvo'); ?> {{home_url}}</h3>
85
+ </div>
86
+ <div style="float: left; width: 100%;">
87
+ <h3
88
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Contact', 'shapepress-dsgvo'); ?>
89
+ {{admin_email}}</h3>
90
+
91
+ </div>
92
+ </div>
93
+ </td>
94
+ </tr>
95
+ </tbody>
96
+ </table>
97
+ </td>
98
+ </tr>
99
+ </tbody>
100
+ </table> <!-- End Footer -->
101
+ </td>
102
+ </tr>
103
+ </tbody>
104
+ </table></td>
105
+ </tr>
106
+ </tbody>
templates/de_DE/imprint.txt ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [company_name]
2
+ Inhaber: [company_owner]
3
+ [adress_street]
4
+ [adress_zip_location]
5
+
6
+ Gesch&auml;ftsf&uuml;hrung: [company_law_person]
7
+ Gesellschafter: [company_management]
8
+
9
+ Telefonnummer: [comm_phone]
10
+ E-Mailadresse: [comm_email]
11
+
12
+ Registergericht &amp; Registernummer: [company_register_court], [company_register_nr]
13
+
14
+ Umsatzsteuer-Identifikationsnummer: [company_uid]
15
+
16
+ Inhaltlich verantwortlich: [content_responsible]
17
+
18
+ Plattform der Europ&auml;ischen Kommission zur Online-Streitbeilegung (OS) f&uuml;r Verbraucher: <a href"https://ec.europa.eu/consumers/odr/" target="_blank">https://ec.europa.eu/consumers/odr/</a>. Wir sind nicht bereit und nicht verpflichtet an einem Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.
templates/de_DE/privacy-policy.txt ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h1>Datenschutzerkl&auml;rung und Einwilligungen</h1>
2
+
3
+ Inhaltsverzeichnis
4
+ 1. Zielsetzung und verantwortliche Stelle
5
+ 2. Grunds&auml;tzliche Angaben zur Datenverarbeitung
6
+ 3. Verarbeitung personenbezogener Daten
7
+ 4. Erhebung von Zugriffsdaten
8
+ 5. Cookies &amp; Reichweitenmessung
9
+ 6. Google Analytics
10
+ 7. Google-Re/Marketing-Services
11
+ 8. Facebook Social Plugins
12
+ 9. Facebook Remarketing
13
+ 10. Newsletter
14
+ 11. Einbindung von Diensten und Inhalten Dritter
15
+ 12. Rechte der Nutzer und L&ouml;schung
16
+ 13. &Auml;nderungen der Datenschutzerkl&auml;rung
17
+
18
+ <h2>1. Zielsetzung und verantwortliche Stelle</h2>
19
+
20
+ Diese Datenschutzerkl&auml;rung kl&auml;rt &uuml;ber die Art, den Umfang und Zweck der Verarbeitung (u.a. Erhebung, Verarbeitung und Nutzung sowie Einholung von Einwilligungen) von personenbezogenen Daten innerhalb unseres Onlineangebotes und der mit ihm verbundenen Webseiten, Funktionen und Inhalte (nachfolgend gemeinsam bezeichnet als "Onlineangebot" oder "Website") auf. Die Datenschutzerkl&auml;rung gilt unabh&auml;ngig von den verwendeten Domains, Systemen, Plattformen und Ger&auml;ten (z.B. Desktop oder Mobile) auf denen das Onlineangebot ausgef&uuml;hrt wird.
21
+
22
+ Anbieter des Onlineangebotes und die datenschutzrechtlich verantwortliche Stelle ist [company_name], Inhaber: [company_owner], [adress_street], [adress_zip_location] (nachfolgend bezeichnet als "AnbieterIn", "wir" oder "uns"). F&uuml;r die Kontaktm&ouml;glichkeiten verweisen wir auf unser Impressum
23
+
24
+ Der Begriff "Nutzer" umfasst alle Kunden und Besucher unseres Onlineangebotes. Die verwendeten Begrifflichkeiten, wie z.B. "Nutzer" sind geschlechtsneutral zu verstehen.
25
+
26
+ <h2>2. Grunds&auml;tzliche Angaben zur Datenverarbeitung</h2>
27
+
28
+ Wir verarbeiten personenbezogene Daten der Nutzer nur unter Einhaltung der einschl&auml;gigen Datenschutzbestimmungen entsprechend den Geboten der Datensparsamkeit- und Datenvermeidung. Das bedeutet die Daten der Nutzer werden nur beim Vorliegen einer gesetzlichen Erlaubnis, insbesondere wenn die Daten zur Erbringung unserer vertraglichen Leistungen sowie Online-Services erforderlich, bzw. gesetzlich vorgeschrieben sind oder beim Vorliegen einer Einwilligung verarbeitet.
29
+
30
+ Wir treffen organisatorische, vertragliche und technische Sicherheitsma&szlig;nahmen entsprechend dem Stand der Technik, um sicher zu stellen, dass die Vorschriften der Datenschutzgesetze eingehalten werden und um damit die durch uns verarbeiteten Daten gegen zuf&auml;llige oder vors&auml;tzliche Manipulationen, Verlust, Zerst&ouml;rung oder gegen den Zugriff unberechtigter Personen zu sch&uuml;tzen.
31
+
32
+ Sofern im Rahmen dieser Datenschutzerkl&auml;rung Inhalte, Werkzeuge oder sonstige Mittel von anderen Anbietern (nachfolgend gemeinsam bezeichnet als "Dritt-Anbieter") eingesetzt werden und deren genannter Sitz im Ausland ist, ist davon auszugehen, dass ein Datentransfer in die Sitzstaaten der Dritt-Anbieter stattfindet. Die &Uuml;bermittlung von Daten in Drittstaaten erfolgt entweder auf Grundlage einer gesetzlichen Erlaubnis, einer Einwilligung der Nutzer oder spezieller Vertragsklauseln, die eine gesetzlich vorausgesetzte Sicherheit der Daten gew&auml;hrleisten.
33
+
34
+ <h2>3. Verarbeitung personenbezogener Daten</h2>
35
+
36
+ Die personenbezogenen Daten werden, neben den ausdr&uuml;cklich in dieser Datenschutzerkl&auml;rung genannten Verwendung, f&uuml;r die folgenden Zwecke auf Grundlage gesetzlicher Erlaubnisse oder Einwilligungen der Nutzer verarbeitet:
37
+ - Die Zurverf&uuml;gungstellung, Ausf&uuml;hrung, Pflege, Optimierung und Sicherung unserer Dienste-, Service- und Nutzerleistungen;
38
+ - Die Gew&auml;hrleistung eines effektiven Kundendienstes und technischen Supports.
39
+
40
+ Wir &uuml;bermitteln die Daten der Nutzer an Dritte nur, wenn dies f&uuml;r Abrechnungszwecke notwendig ist (z.B. an einen Zahlungsdienstleister) oder f&uuml;r andere Zwecke, wenn diese notwendig sind, um unsere vertraglichen Verpflichtungen gegen&uuml;ber den Nutzern zu erf&uuml;llen (z.B. Adressmitteilung an Lieferanten).
41
+
42
+ Bei der Kontaktaufnahme mit uns (per Kontaktformular oder Email) werden die Angaben des Nutzers zwecks Bearbeitung der Anfrage sowie f&uuml;r den Fall, dass Anschlussfragen entstehen, gespeichert.
43
+ Personenbezogene Daten werden gel&ouml;scht, sofern sie ihren Verwendungszweck erf&uuml;llt haben und der L&ouml;schung keine Aufbewahrungspflichten entgegenstehen.
44
+
45
+ <h2>4. Erhebung von Zugriffsdaten</h2>
46
+
47
+ Wir erheben Daten &uuml;ber jeden Zugriff auf den Server, auf dem sich dieser Dienst befindet (so genannte Serverlogfiles). Zu den Zugriffsdaten geh&ouml;ren Name der abgerufenen Webseite, Datei, Datum und Uhrzeit des Abrufs, &uuml;bertragene Datenmenge, Meldung &uuml;ber erfolgreichen Abruf, Browsertyp nebst Version, das Betriebssystem des Nutzers, Referrer URL (die zuvor besuchte Seite), IP-Adresse und der anfragende Provider.
48
+
49
+ Wir verwenden die Protokolldaten ohne Zuordnung zur Person des Nutzers oder sonstiger Profilerstellung entsprechend den gesetzlichen Bestimmungen nur f&uuml;r statistische Auswertungen zum Zweck des Betriebs, der Sicherheit und der Optimierung unseres Onlineangebotes. Wir behalten uns jedoch vor, die Protokolldaten nachtr&auml;glich zu &uuml;berpr&uuml;fen, wenn aufgrund konkreter Anhaltspunkte der berechtigte Verdacht einer rechtswidrigen Nutzung besteht.
50
+
51
+ <h2>5. Cookies &amp; Reichweitenmessung</h2>
52
+
53
+ Cookies sind Informationen, die von unserem Webserver oder Webservern Dritter an die Web-Browser der Nutzer &uuml;bertragen und dort f&uuml;r einen sp&auml;teren Abruf gespeichert werden. &Uuml;ber den Einsatz von Cookies im Rahmen pseudonymer Reichweitenmessung werden die Nutzer im Rahmen dieser Datenschutzerkl&auml;rung informiert.
54
+
55
+ Die Betrachtung dieses Onlineangebotes ist auch unter Ausschluss von Cookies m&ouml;glich. Falls die Nutzer nicht m&ouml;chten, dass Cookies auf ihrem Rechner gespeichert werden, werden sie gebeten die entsprechende Option in den Systemeinstellungen ihres Browsers zu deaktivieren. Gespeicherte Cookies k&ouml;nnen in den Systemeinstellungen des Browsers gel&ouml;scht werden. Der Ausschluss von Cookies kann zu Funktionseinschr&auml;nkungen dieses Onlineangebotes f&uuml;hren.
56
+
57
+ Es besteht die M&ouml;glichkeit, viele Online-Anzeigen-Cookies von Unternehmen &uuml;ber die US-amerikanische Seite <a href="http://www.aboutads.info/choices" target="_blank">http://www.aboutads.info/choices</a> oder die EU-Seite <a href="http://www.youronlinechoices.com/uk/your-ad-choices/" target="_blank">http://www.youronlinechoices.com/uk/your-ad-choices/</a> zu verwalten.
58
+
59
+ <h2>6. Google Analytics</h2>
60
+
61
+ Wir setzen Google Analytics, einen Webanalysedienst der Google Inc. ("Google") ein. Google verwendet Cookies. Die durch das Cookie erzeugten Informationen &uuml;ber Benutzung des Onlineangebotes durch die Nutzer werden in der Regel an einen Server von Google in den USA &uuml;bertragen und dort gespeichert.
62
+
63
+ Google wird diese Informationen in unserem Auftrag benutzen, um die Nutzung unseres Onlineangebotes durch die Nutzer auszuwerten, um Reports &uuml;ber die Aktivit&auml;ten innerhalb dieses Onlineangebotes zusammenzustellen und um weitere mit der Nutzung dieses Onlineangebotes und der Internetnutzung verbundene Dienstleistungen uns gegen&uuml;ber zu erbringen. Dabei k&ouml;nnen aus den verarbeiteten Daten pseudonyme Nutzungsprofile der Nutzer erstellt werden.
64
+
65
+ Wir setzen Google Analytics nur mit aktivierter IP-Anonymisierung ein. Das bedeutet, die IP-Adresse der Nutzer wird von Google innerhalb von Mitgliedstaaten der Europ&auml;ischen Union oder in anderen Vertragsstaaten des Abkommens &uuml;ber den Europ&auml;ischen Wirtschaftsraum gek&uuml;rzt. Nur in Ausnahmef&auml;llen wird die volle IP-Adresse an einen Server von Google in den USA &uuml;bertragen und dort gek&uuml;rzt.
66
+
67
+ Die von dem Browser des Nutzers &uuml;bermittelte IP-Adresse wird nicht mit anderen Daten von Google zusammengef&uuml;hrt. Die Nutzer k&ouml;nnen die Speicherung der Cookies durch eine entsprechende Einstellung ihrer Browser-Software verhindern; die Nutzer k&ouml;nnen dar&uuml;ber hinaus die Erfassung der durch das Cookie erzeugten und auf ihre Nutzung des Onlineangebotes bezogenen Daten an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem sie das unter dem folgenden Link verf&uuml;gbare Browser-Plugin herunterladen und installieren: <a href="http://tools.google.com/dlpage/gaoptout?hl=de" target="_blank">http://tools.google.com/dlpage/gaoptout?hl=de</a>.
68
+
69
+ Weitere Informationen zur Datennutzung zu Werbezwecken durch Google, Einstellungs- und Widerspruchsm&ouml;glichkeiten erfahren Sie auf den Webseiten von Google: <a href="https://www.google.com/intl/de/policies/privacy/partners" target="_blank">https://www.google.com/intl/de/policies/privacy/partners</a> ("Datennutzung durch Google bei Ihrer Nutzung von Websites oder Apps unserer Partner"), <a href="http://www.google.com/policies/technologies/ads" target="_blank">http://www.google.com/policies/technologies/ads</a> ("Datennutzung zu Werbezwecken"), <a href="http://www.google.de/settings/ads" target="_blank">http://www.google.de/settings/ads</a> ("Informationen verwalten, die Google verwendet, um Ihnen Werbung einzublenden") und <a href="http://www.google.com/ads/preferences" target="_blank">http://www.google.com/ads/preferences</a> ("Bestimmen Sie, welche Werbung Google Ihnen zeigt").
70
+
71
+ <h2>7. Google-Re/Marketing-Services</h2>
72
+
73
+ Wir nutzen die Marketing- und Remarketing-Dienste (kurz "Google-Marketing-Services") der Google Inc., 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA, ("Google").
74
+
75
+ Die Google-Marketing-Services erlauben uns Werbeanzeigen f&uuml;r und auf unserer Website gezielter anzuzeigen, um Nutzern nur Anzeigen zu pr&auml;sentieren, die potentiell deren Interessen entsprechen. Falls Nutzer z.B. Anzeigen f&uuml;r Produkte angezeigt werden, f&uuml;r die er sich auf anderen Webseiten interessiert hat, spricht man hierbei vom "Remarketing". Zu diesen Zwecken wird bei Aufruf unserer und anderer Webseiten, auf denen Google-Marketing-Services aktiv sind, unmittelbar durch Google ein Code von Google ausgef&uuml;hrt und es werden in die Website sog. (Re)marketing-Tags (unsichtbare Grafiken oder Code, auch als "Web Beacons" bezeichnet) in die Webseite eingebunden. Mit deren Hilfe wird auf dem Ger&auml;t der Nutzer ein individuelles Cookie, d.h. eine kleine Datei abgespeichert (statt Cookies k&ouml;nnen auch vergleichbare Technologien verwendet werden). Die Cookies k&ouml;nnen von verschiedenen Domains gesetzt werden, unter anderem von google.com, doubleclick.net, invitemedia.com, admeld.com, googlesyndication.com oder googleadservices.com. In dieser Datei wird vermerkt, welche Webseiten der Nutzer aufgesucht, f&uuml;r welche Inhalte er sich interessiert und welche Angebote er geklickt hat, ferner technische Informationen zum Browser und Betriebssystem, verweisende Webseiten, Besuchszeit sowie weitere Angaben zur Nutzung des Onlineangebotes. Es wird ebenfalls die IP-Adresse der Nutzer erfasst, wobei wir im Rahmen von Google-Analytics mitteilen, dass die IP-Adresse innerhalb von Mitgliedstaaten der Europ&auml;ischen Union oder in anderen Vertragsstaaten des Abkommens &uuml;ber den Europ&auml;ischen Wirtschaftsraum gek&uuml;rzt und nur in Ausnahmef&auml;llen ganz an einen Server von Google in den USA &uuml;bertragen und dort gek&uuml;rzt wird. Die IP-Adresse wird nicht mit Daten des Nutzers innerhalb von anderen Angeboten von Google zusammengef&uuml;hrt. Diese vorstehend genannten Informationen k&ouml;nnen auch mit solchen Informationen aus anderen Quellen verbunden werden. Wenn der Nutzer anschlie&szlig;end andere Webseiten besucht, k&ouml;nnen ihm entsprechend seiner Interessen die auf ihn abgestimmten Anzeigen angezeigt werden.
76
+
77
+ Die Daten der Nutzer werden im Rahmen der Google-Marketing-Services pseudonym verarbeitet. D.h. Google speichert und verarbeitet z.B. nicht den Namen oder E-Mailadresse der Nutzer, sondern verarbeitet die relevanten Daten Cookie-bezogen innerhalb pseudonymer Nutzer-Profile. D.h. aus der Sicht von Google werden die Anzeigen nicht f&uuml;r eine konkret identifizierte Person verwaltet und angezeigt, sondern f&uuml;r den Cookie-Inhaber, unabh&auml;ngig davon wer dieser Cookie-Inhaber ist. Dies gilt nicht, wenn ein Nutzer Google ausdr&uuml;cklich erlaubt hat, die Daten ohne diese Pseudonymisierung zu verarbeiten. Die von "DoubleClick" &uuml;ber die Nutzer gesammelten Informationen werden an Google &uuml;bermittelt und auf Googles Servern in den USA gespeichert.
78
+
79
+ Zu den von uns eingesetzten Google-Marketing-Services geh&ouml;rt u.a. das Online-Werbeprogramm "Google AdWords". Im Fall von Google AdWords, erh&auml;lt jeder AdWords-Kunde ein anderes "Conversion-Cookie". Cookies k&ouml;nnen somit nicht &uuml;ber die Websites von AdWords-Kunden nachverfolgt werden. Die mit Hilfe des Cookies eingeholten Informationen dienen dazu, Conversion-Statistiken f&uuml;r AdWords-Kunden zu erstellen, die sich f&uuml;r Conversion-Tracking entschieden haben. Die AdWords-Kunden erfahren die Gesamtanzahl der Nutzer, die auf ihre Anzeige geklickt haben und zu einer mit einem Conversion-Tracking-Tag versehenen Seite weitergeleitet wurden. Sie erhalten jedoch keine Informationen, mit denen sich Nutzer pers&ouml;nlich identifizieren lassen.
80
+
81
+ Wir binden auf Grundlage des Google-Marketing-Services "DoubleClick" Werbeanzeigen Dritter ein. DoubleClick verwendet Cookies, mit dem Google und seinen Partner-Websites, die Schaltung von Anzeigen auf Basis der Besuche von Nutzern auf dieser Website bzw. anderen Websites im Internet erm&ouml;glicht wird.
82
+
83
+ Wir binden ferner auf Grundlage des Google-Marketing-Services "AdSense" Werbeanzeigen Dritter ein. AdSense verwendet Cookies, mit dem Google und seinen Partner-Websites, die Schaltung von Anzeigen auf Basis der Besuche von Nutzern auf dieser Website bzw. anderen Websites im Internet erm&ouml;glicht wird.
84
+
85
+ Ein weiterer von uns genutzter Google-Marketing-Service ist der "Google Tag Manager", mit dessen Hilfe weitere Google Analyse- und Marketing-Dienste in unsere Website eingebunden werden k&ouml;nnen (z.B. "AdWords", "DoubleClick" oder "Google Analytics").
86
+
87
+ Weitere Informationen zur Datennutzung zu Marketingzwecken durch Google, erfahren Sie auf der &Uuml;bersichtsseite: <a href="https://www.google.com/policies/technologies/ads" target="_blank">https://www.google.com/policies/technologies/ads</a>, die Datenschutzerkl&auml;rung von Google ist unter <a href="https://www.google.com/policies/privacy" target="_blank">https://www.google.com/policies/privacy</a> abrufbar.
88
+
89
+ Wenn Sie der Erfassung durch Google-Marketing-Services widersprechen m&ouml;chten, k&ouml;nnen Sie die von Google gestellten Einstellungs- und Opt-Out-M&ouml;glichkeiten nutzen: <a href="http://www.google.com/ads/preferences" target="_blank">http://www.google.com/ads/preferences</a>.
90
+
91
+ <h2>8. Facebook Social Plugins</h2>
92
+
93
+ Unser Onlineangebot verwendet Social Plugins ("Plugins") des sozialen Netzwerkes facebook.com, welches von der Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbour, Dublin 2, Irland betrieben wird ("Facebook"). Die Plugins sind an einem der Facebook Logos erkennbar (wei&szlig;es "f" auf blauer Kachel, den Begriffen "Like", "Gef&auml;llt mir" oder einem "Daumen hoch"-Zeichen) oder sind mit dem Zusatz "Facebook Social Plugin" gekennzeichnet. Die Liste und das Aussehen der Facebook Social Plugins kann hier eingesehen werden: <a href="https://developers.facebook.com/docs/plugins/" target="_blank">https://developers.facebook.com/docs/plugins/</a>.
94
+
95
+ Wenn ein Nutzer eine Funktion dieses Onlineangebotes aufruft, die ein solches Plugin enth&auml;lt, baut sein Ger&auml;t eine direkte Verbindung mit den Servern von Facebook auf. Der Inhalt des Plugins wird von Facebook direkt an das Ger&auml;t des Nutzers &uuml;bermittelt und von diesem in das Onlineangebot eingebunden. Dabei k&ouml;nnen aus den verarbeiteten Daten Nutzungsprofile der Nutzer erstellt werden. Wir haben daher keinen Einfluss auf den Umfang der Daten, die Facebook mit Hilfe dieses Plugins erhebt und informiert die Nutzer daher entsprechend unserem Kenntnisstand.
96
+
97
+ Durch die Einbindung der Plugins erh&auml;lt Facebook die Information, dass ein Nutzer die entsprechende Seite des Onlineangebotes aufgerufen hat. Ist der Nutzer bei Facebook eingeloggt, kann Facebook den Besuch seinem Facebook-Konto zuordnen. Wenn Nutzer mit den Plugins interagieren, zum Beispiel den Like Button bet&auml;tigen oder einen Kommentar abgeben, wird die entsprechende Information von Ihrem Ger&auml;t direkt an Facebook &uuml;bermittelt und dort gespeichert. Falls ein Nutzer kein Mitglied von Facebook ist, besteht trotzdem die M&ouml;glichkeit, dass Facebook seine IP-Adresse in Erfahrung bringt und speichert. Laut Facebook wird in Deutschland nur eine anonymisierte IP-Adresse gespeichert.
98
+
99
+ Zweck und Umfang der Datenerhebung und die weitere Verarbeitung und Nutzung der Daten durch Facebook sowie die diesbez&uuml;glichen Rechte und Einstellungsm&ouml;glichkeiten zum Schutz der Privatsph&auml;re der Nutzer, k&ouml;nnen diese den Datenschutzhinweisen von Facebook entnehmen: <a href="https://www.facebook.com/about/privacy/" target="_blank">https://www.facebook.com/about/privacy/</a>.
100
+
101
+ Wenn ein Nutzer Facebookmitglied ist und nicht m&ouml;chte, dass Facebook &uuml;ber dieses Onlineangebot Daten &uuml;ber ihn sammelt und mit seinen bei Facebook gespeicherten Mitgliedsdaten verkn&uuml;pft, muss er sich vor der Nutzung unseres Onlineangebotes bei Facebook ausloggen und seine Cookies l&ouml;schen. Weitere Einstellungen und Widerspr&uuml;che zur Nutzung von Daten f&uuml;r Werbezwecke, sind innerhalb der Facebook-Profileinstellungen m&ouml;glich: <a href="https://www.facebook.com/settings?tab=ads" target="_blank">https://www.facebook.com/settings?tab=ads</a> oder &uuml;ber die US-amerikanische Seite <a href="http://www.aboutads.info/choices/" target="_blank">http://www.aboutads.info/choices/</a> oder die EU-Seite <a href="http://www.youronlinechoices.com/" target="_blank">http://www.youronlinechoices.com/</a>. Die Einstellungen erfolgen plattformunabh&auml;ngig, d.h. sie werden f&uuml;r alle Ger&auml;te, wie Desktopcomputer oder mobile Ger&auml;te &uuml;bernommen.
102
+
103
+ <h2>9. Facebook Remarketing</h2>
104
+
105
+ Innerhalb unseres Onlineangebotes werden sog. "Facebook-Pixel" des sozialen Netzwerkes Facebook, welches von der Facebook Inc., 1 Hacker Way, Menlo Park, CA 94025, USA, bzw. falls Sie in der EU ans&auml;ssig sind, Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbour, Dublin 2, Irland betrieben wird ("Facebook"), eingesetzt. Mit Hilfe des Facebook-Pixels ist es Facebook m&ouml;glich, die Besucher unseres Angebotes als Zielgruppe f&uuml;r die Darstellung von Anzeigen, sog. "Facebook-Ads" zu bestimmen. Dementsprechend setzen wir das Facebook -Pixel ein, um die durch uns geschalteten Facebook-Ads nur solchen Facebook-Nutzern anzuzeigen, die auch ein Interesse an unserem Internetangebot gezeigt haben. Das hei&szlig;t, mit Hilfe des Facebook -Pixels m&ouml;chten wir sicherstellen, dass unsere Facebook-Ads dem potentiellen Interesse der Nutzer entsprechen und nicht bel&auml;stigend wirken. Mit Hilfe des Facebook-Pixels k&ouml;nnen wir ferner die Wirksamkeit der Facebook-Werbeanzeigen f&uuml;r statistische und Marktforschungszwecke nachvollziehen, in dem wir sehen ob Nutzer nachdem Klick auf eine Facebook-Werbeanzeige auf unsere Website weitergeleitet wurden.
106
+
107
+ Der Facebook-Pixel wird beim Aufruf unserer Webseiten unmittelbar durch Facebook eingebunden und k&ouml;nnen auf Ihrem Ger&auml;t ein sog. Cookie, d.h. eine kleine Datei abspeichern. Wenn Sie sich anschlie&szlig;end bei Facebook einloggen oder im eingeloggten Zustand Facebook besuchen, wird der Besuch unseres Angebotes in Ihrem Profil vermerkt. Die &uuml;ber Sie erhobenen Daten sind f&uuml;r uns anonym, bieten uns also keine R&uuml;ckschl&uuml;sse auf die Identit&auml;t der Nutzer. Allerdings werden die Daten von Facebook gespeichert und verarbeitet, sodass eine Verbindung zum jeweiligen Nutzerprofil m&ouml;glich ist. Die Verarbeitung der Daten durch Facebook erfolgt im Rahmen von Facebooks Datenverwendungsrichtlinie. Dementsprechend erhalten Sie weitere Informationen zur Funktionsweise des Remarketing-Pixels und generell zur Darstellung von Facebook-Ads, in der Datenverwendungsrichtlinie von Facebook: <a href="https://www.facebook.com/policy.php" target="_blank">https://www.facebook.com/policy.php</a>.
108
+
109
+ Sie k&ouml;nnen der Erfassung durch den Facebook-Pixel und Verwendung Ihrer Daten zur Darstellung von Facebook-Ads widersprechen. Hierzu k&ouml;nnen Sie die von Facebook eingerichtete Seite aufrufen und dort die Hinweise zu den Einstellungen nutzungsbasierter Werbung befolgen: <a href="https://www.facebook.com/settings?tab=ads" target="_blank">https://www.facebook.com/settings?tab=ads</a> oder den Widerspruch &uuml;ber die US-amerikanische Seite <a href="http://www.aboutads.info/choices/" target="_blank">http://www.aboutads.info/choices/</a> oder die EU-Seite <a href="http://www.youronlinechoices.com/" target="_blank">http://www.youronlinechoices.com/</a> erkl&auml;ren. Die Einstellungen erfolgen plattformunabh&auml;ngig, d.h. sie werden f&uuml;r alle Ger&auml;te, wie Desktopcomputer oder mobile Ger&auml;te &uuml;bernommen.
110
+
111
+ <h2>10. Newsletter</h2>
112
+
113
+ Mit den nachfolgenden Hinweisen kl&auml;ren wir Sie &uuml;ber die Inhalte unseres Newsletters sowie das Anmelde-, Versand- und das statistische Auswertungsverfahren sowie Ihre Widerspruchsrechte auf. Indem Sie unseren Newsletter abonnieren, erkl&auml;ren Sie sich mit dem Empfang und den beschriebenen Verfahren einverstanden.
114
+
115
+ Inhalt des Newsletters: Wir versenden Newsletter, E-Mails und weitere elektronische Benachrichtigungen mit werblichen Informationen (nachfolgend "Newsletter") nur mit der Einwilligung der Empf&auml;nger oder einer gesetzlichen Erlaubnis. Sofern im Rahmen einer Anmeldung zum Newsletter dessen Inhalte konkret umschrieben werden, sind sie f&uuml;r die Einwilligung der Nutzer ma&szlig;geblich. Im &Uuml;brigen enthalten unsere Newsletter folgende Informationen: unsere Produkte, Angebote, Aktionen und unser Unternehmen.
116
+
117
+ Double-Opt-In und Protokollierung: Die Anmeldung zu unserem Newsletter erfolgt in einem sog. Double-Opt-In-Verfahren. D.h. Sie erhalten nach der Anmeldung eine E-Mail, in der Sie um die Best&auml;tigung Ihrer Anmeldung gebeten werden. Diese Best&auml;tigung ist notwendig, damit sich niemand mit fremden E-Mailadressen anmelden kann. Die Anmeldungen zum Newsletter werden protokolliert, um den Anmeldeprozess entsprechend den rechtlichen Anforderungen nachweisen zu k&ouml;nnen. Hierzu geh&ouml;rt die Speicherung des Anmelde- und des Best&auml;tigungszeitpunkts, als auch der IP-Adresse. Ebenso werden die &Auml;nderungen Ihrer bei dem Versanddienstleister gespeicherten Daten protokolliert.
118
+
119
+ Versanddienstleister: Der Versand der Newsletter erfolgt mittels von "[newsletter_service]" (nachfolgend bezeichnet als "Versanddienstleister"). Die Datenschutzbestimmungen des Versanddienstleisters k&ouml;nnen Sie hier einsehen: [newsletter_service_privacy_policy].
120
+
121
+ Die E-Mail-Adressen unserer Newsletterempf&auml;nger, als auch deren weitere, im Rahmen dieser Hinweise beschriebenen Daten, werden auf den Servern des Versanddienstleisters gespeichert. Der Versanddienstleister verwendet diese Informationen zum Versand und zur Auswertung der Newsletter in unserem Auftrag. Des Weiteren kann der Versanddienstleister nach eigenen Informationen diese Daten zur Optimierung oder Verbesserung der eigenen Services nutzen, z.B. zur technischen Optimierung des Versandes und der Darstellung der Newsletter oder f&uuml;r wirtschaftliche Zwecke, um zu bestimmen aus welchen L&auml;ndern die Empf&auml;nger kommen. Der Versanddienstleister nutzt die Daten unserer Newsletterempf&auml;nger jedoch nicht, um diese selbst anzuschreiben oder an Dritte weiterzugeben.
122
+
123
+ Anmeldedaten: Um sich f&uuml;r den Newsletter anzumelden, reicht es aus, wenn Sie Ihre E-Mailadresse angeben.
124
+
125
+ Statistische Erhebung und Analysen - Die Newsletter enthalten einen sog. "web-beacon", d.h. eine pixelgro&szlig;e Datei, die beim &Ouml;ffnen des Newsletters von dem Server des Versanddienstleisters abgerufen wird. Im Rahmen dieses Abrufs werden zun&auml;chst technische Informationen, wie Informationen zum Browser und Ihrem System, als auch Ihre IP-Adresse und Zeitpunkt des Abrufs erhoben. Diese Informationen werden zur technischen Verbesserung der Services anhand der technischen Daten oder der Zielgruppen und ihres Leseverhaltens anhand derer Abruforte (die mit Hilfe der IP-Adresse bestimmbar sind) oder der Zugriffszeiten genutzt. Zu den statistischen Erhebungen geh&ouml;rt ebenfalls die Feststellung, ob die Newsletter ge&ouml;ffnet werden, wann sie ge&ouml;ffnet werden und welche Links geklickt werden. Diese Informationen k&ouml;nnen aus technischen Gr&uuml;nden zwar den einzelnen Newsletterempf&auml;ngern zugeordnet werden. Es ist jedoch weder unser Bestreben, noch das des Versanddienstleisters, einzelne Nutzer zu beobachten. Die Auswertungen dienen uns viel mehr dazu, die Lesegewohnheiten unserer Nutzer zu erkennen und unsere Inhalte auf sie anzupassen oder unterschiedliche Inhalte entsprechend den Interessen unserer Nutzer zu versenden.
126
+
127
+ K&uuml;ndigung/Widerruf - Sie k&ouml;nnen den Empfang unseres Newsletters jederzeit k&uuml;ndigen, d.h. Ihre Einwilligungen widerrufen. Damit erl&ouml;schen gleichzeitig Ihre Einwilligungen in dessen Versand durch den Versanddienstleister und die statistischen Analysen. Ein getrennter Widerruf des Versandes durch den Versanddienstleister oder die statistische Auswertung ist leider nicht m&ouml;glich. Einen Link zur K&uuml;ndigung des Newsletters finden Sie am Ende eines jeden Newsletters.
128
+
129
+ <h2>11. Einbindung von Diensten und Inhalten Dritter</h2>
130
+
131
+ Es kann vorkommen, dass innerhalb unseres Onlineangebotes Inhalte oder Dienste von Dritt-Anbietern, wie zum Beispiel Stadtpl&auml;ne oder Schriftarten von anderen Webseiten eingebunden werden. Die Einbindung von Inhalten der Dritt-Anbieter setzt immer voraus, dass die Dritt-Anbieter die IP-Adresse der Nutzer wahrnehmen, da sie ohne die IP-Adresse die Inhalte nicht an den Browser der Nutzer senden k&ouml;nnten. Die IP-Adresse ist damit f&uuml;r die Darstellung dieser Inhalte erforderlich. Des Weiteren k&ouml;nnen die Anbieter der Dritt-Inhalte eigene Cookies setzen und die Daten der Nutzer f&uuml;r eigene Zwecke verarbeiten. Dabei k&ouml;nnen aus den verarbeiteten Daten Nutzungsprofile der Nutzer erstellt werden. Wir werden diese Inhalte m&ouml;glichst datensparsam und datenvermeidend einsetzen sowie im Hinblick auf die Datensicherheit zuverl&auml;ssige Dritt-Anbieter w&auml;hlen.
132
+
133
+ Die nachfolgende Darstellung bietet eine &Uuml;bersicht von Dritt-Anbietern sowie ihrer Inhalte, nebst Links zu deren Datenschutzerkl&auml;rungen, welche weitere Hinweise zur Verarbeitung von Daten und, z.T. bereits hier genannt, Widerspruchsm&ouml;glichkeiten (sog. Opt-Out) enthalten:
134
+
135
+ - Externe Schriftarten von Google, Inc., <a href="https://www.google.com/fonts" target="_blank">https://www.google.com/fonts</a> ("Google Fonts"). Die Einbindung der Google Fonts erfolgt durch einen Serveraufruf bei Google (in der Regel in den USA). Datenschutzerkl&auml;rung: <a href="https://www.google.com/policies/privacy/" target="_blank">https://www.google.com/policies/privacy/</a>, Opt-Out: <a href="https://www.google.com/settings/ads/" target="_blank">https://www.google.com/settings/ads/</a>.
136
+
137
+ - Landkarten des Dienstes "Google Maps" des Dritt-Anbieters Google Inc., 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA, gestellt. Datenschutzerkl&auml;rung: <a href="https://www.google.com/policies/privacy/" target="_blank">https://www.google.com/policies/privacy/</a>, Opt-Out: <a href="https://www.google.com/settings/ads/" target="_blank">https://www.google.com/settings/ads/</a>.
138
+
139
+ - Videos der Plattform "YouTube" des Dritt-Anbieters Google Inc., 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA. Datenschutzerkl&auml;rung: <a href="https://www.google.com/policies/privacy/" target="_blank">https://www.google.com/policies/privacy/</a>, Opt-Out: <a href="https://www.google.com/settings/ads/" target="_blank">https://www.google.com/settings/ads/</a>.
140
+
141
+ <h2>12. Rechte der Nutzer und L&ouml;schung von Daten</h2>
142
+
143
+ Nutzer haben das Recht, auf Antrag unentgeltlich Auskunft zu erhalten &uuml;ber die personenbezogenen Daten, die von uns &uuml;ber sie gespeichert wurden.
144
+ Zus&auml;tzlich haben die Nutzer das Recht auf Berichtigung unrichtiger Daten, Widerruf von Einwilligungen, Sperrung und L&ouml;schung ihrer personenbezogenen Daten sowie das Recht, im Fall der Annahme einer unrechtm&auml;&szlig;igen Datenverarbeitung eine Beschwerde bei der zust&auml;ndigen Aufsichtsbeh&ouml;rde einzureichen.
145
+
146
+ Die bei uns gespeicherten Daten werden gel&ouml;scht, sobald sie f&uuml;r ihre Zweckbestimmung nicht mehr erforderlich sind und der L&ouml;schung keine gesetzlichen Aufbewahrungspflichten entgegenstehen.
147
+
148
+ <h2>13. &Auml;nderungen der Datenschutzerkl&auml;rung</h2>
149
+
150
+ Wir behalten uns vor, die Datenschutzerkl&auml;rung zu &auml;ndern, um sie an ge&auml;nderte Rechtslagen, oder bei &Auml;nderungen des Dienstes sowie der Datenverarbeitung anzupassen. Dies gilt jedoch nur im Hinblick auf Erkl&auml;rungen zur Datenverarbeitung. Sofern Einwilligungen der Nutzer erforderlich sind oder Bestandteile der Datenschutzerkl&auml;rung Regelungen des Vertragsverh&auml;ltnisses mit den Nutzern enthalten, erfolgen die &Auml;nderungen nur mit Zustimmung der Nutzer.
151
+ Die Nutzer werden gebeten sich regelm&auml;&szlig;ig &uuml;ber den Inhalt der Datenschutzerkl&auml;rung zu informieren.
152
+
153
+ Stand: [save_date]
templates/en_EN/emails/feedback.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h1><?php _e('WP DSGVO Tools Feedback', 'shapepress-dsgvo'); ?></h1>
2
+
3
+ <p>
4
+ <strong><?php _e('From', 'shapepress-dsgvo'); ?>:</strong><br>
5
+ {{home_url}} <br>
6
+ {{user}}
7
+ </p>
8
+
9
+ <p>
10
+ <strong><?php _e('Reason', 'shapepress-dsgvo'); ?>:</strong><br>
11
+ {{reason}}
12
+ </p>
13
+
14
+ <p>
15
+ <strong><?php _e('Message', 'shapepress-dsgvo'); ?>:</strong><br>
16
+ {{message}}
17
+ </p>
templates/en_EN/emails/footer.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ </table>
2
+ </td>
3
+ </tr>
4
+ </tbody>
5
+ </table>
6
+ </td>
7
+ </tr>
8
+ </tbody>
9
+ </table>
10
+ </body>
11
+ </html>
templates/en_EN/emails/header.php ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <title>WP DSGVO Tools</title>
6
+ <style type="text/css">
7
+ body {
8
+ padding-top: 0 !important;
9
+ padding-bottom: 0 !important;
10
+ padding-top: 0 !important;
11
+ padding-bottom: 0 !important;
12
+ margin:0 !important;
13
+ width: 100% !important;
14
+ -webkit-text-size-adjust: 100% !important;
15
+ -ms-text-size-adjust: 100% !important;
16
+ -webkit-font-smoothing: antialiased !important;
17
+ }
18
+ .tableContent img {
19
+ border: 0 !important;
20
+ display: block !important;
21
+ outline: none !important;
22
+ }
23
+ a{
24
+ color:#382F2E;
25
+ }
26
+ p, h1,h2,ul,ol,li,div{
27
+ margin:0;
28
+ padding:0;
29
+ }
30
+ h1,h2{
31
+ font-weight: normal;
32
+ background:transparent !important;
33
+ border:none !important;
34
+ }
35
+ @media only screen and (max-width:480px)
36
+ {
37
+ table[class="MainContainer"], td[class="cell"]
38
+ {
39
+ width: 100% !important;
40
+ height:auto !important;
41
+ }
42
+ td[class="specbundle"]
43
+ {
44
+ width: 100% !important;
45
+ float:left !important;
46
+ font-size:13px !important;
47
+ line-height:17px !important;
48
+ display:block !important;
49
+ padding-bottom:15px !important;
50
+ }
51
+ td[class="specbundle2"]
52
+ {
53
+ width:80% !important;
54
+ float:left !important;
55
+ font-size:13px !important;
56
+ line-height:17px !important;
57
+ display:block !important;
58
+ padding-bottom:10px !important;
59
+ padding-left:10% !important;
60
+ padding-right:10% !important;
61
+ }
62
+ td[class="spechide"]
63
+ {
64
+ display:none !important;
65
+ }
66
+ img[class="banner"]
67
+ {
68
+ width: 100% !important;
69
+ height: auto !important;
70
+ }
71
+ td[class="left_pad"]
72
+ {
73
+ padding-left:15px !important;
74
+ padding-right:15px !important;
75
+ }
76
+ }
77
+ @media only screen and (max-width:540px)
78
+ {
79
+ table[class="MainContainer"], td[class="cell"]
80
+ {
81
+ width: 100% !important;
82
+ height:auto !important;
83
+ }
84
+ td[class="specbundle"]
85
+ {
86
+ width: 100% !important;
87
+ float:left !important;
88
+ font-size:13px !important;
89
+ line-height:17px !important;
90
+ display:block !important;
91
+ padding-bottom:15px !important;
92
+ }
93
+ td[class="specbundle2"]
94
+ {
95
+ width:80% !important;
96
+ float:left !important;
97
+ font-size:13px !important;
98
+ line-height:17px !important;
99
+ display:block !important;
100
+ padding-bottom:10px !important;
101
+ padding-left:10% !important;
102
+ padding-right:10% !important;
103
+ }
104
+ td[class="spechide"]
105
+ {
106
+ display:none !important;
107
+ }
108
+ img[class="banner"]
109
+ {
110
+ width: 100% !important;
111
+ height: auto !important;
112
+ }
113
+ td[class="left_pad"]
114
+ {
115
+ padding-left:15px !important;
116
+ padding-right:15px !important;
117
+ }
118
+ }
119
+ .contentEditable h2.big,.contentEditable h1.big{
120
+ font-size: 26px !important;
121
+ }
122
+ .contentEditable h2.bigger,.contentEditable h1.bigger{
123
+ font-size: 37px !important;
124
+ }
125
+ td,table{
126
+ vertical-align: top;
127
+ }
128
+ td.middle{
129
+ vertical-align: middle;
130
+ }
131
+ a.link1{
132
+ font-size:13px;
133
+ color:#27A1E5;
134
+ line-height: 24px;
135
+ text-decoration:none;
136
+ }
137
+ a{
138
+ text-decoration: none;
139
+ }
140
+ .link2{
141
+ color:#ffffff;
142
+ border-top:10px solid #27A1E5;
143
+ border-bottom:10px solid #27A1E5;
144
+ border-left:18px solid #27A1E5;
145
+ border-right:18px solid #27A1E5;
146
+ border-radius:3px;
147
+ -moz-border-radius:3px;
148
+ -webkit-border-radius:3px;
149
+ background:#27A1E5;
150
+ }
151
+ .link3{
152
+ color:#555555;
153
+ border:1px solid #cccccc;
154
+ padding:10px 18px;
155
+ border-radius:3px;
156
+ -moz-border-radius:3px;
157
+ -webkit-border-radius:3px;
158
+ background:#ffffff;
159
+ }
160
+ .link4{
161
+ color:#27A1E5;
162
+ line-height: 24px;
163
+ }
164
+ h2,h1{
165
+ line-height: 20px;
166
+ }
167
+ p{
168
+ font-size: 14px;
169
+ line-height: 21px;
170
+ color:#AAAAAA;
171
+ }
172
+ .contentEditable li{
173
+ }
174
+ .appart p{
175
+ }
176
+ .bgItem{
177
+ background: #ffffff;
178
+ }
179
+ .bgBody{
180
+ background: #ffffff;
181
+ }
182
+ img {
183
+ outline:none;
184
+ text-decoration:none;
185
+ -ms-interpolation-mode: bicubic;
186
+ width: auto;
187
+ max-width: 100%;
188
+ clear: both;
189
+ display: block;
190
+ float: none;
191
+ }
192
+
193
+ ul ul{
194
+ margin-left: 15px;
195
+ }
196
+ ul li{
197
+ color:#444444;
198
+ }
199
+ </style>
200
+ <script type="colorScheme" class="swatch active">
201
+ {
202
+ "name":"Default",
203
+ "bgBody":"ffffff",
204
+ "link":"27A1E5",
205
+ "color":"AAAAAA",
206
+ "bgItem":"ffffff",
207
+ "title":"444444"
208
+ }
209
+ </script>
210
+ </head>
211
+ <body paddingwidth="0" paddingheight="0" bgcolor="#d1d3d4" style="padding-top: 0; padding-bottom: 0; padding-top: 0; padding-bottom: 0; background-repeat: repeat; width: 100% !important; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -webkit-font-smoothing: antialiased;" offset="0" toppadding="0" leftpadding="0">
212
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
213
+ <tbody>
214
+ <tr>
215
+ <td>
216
+ <table width="600" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#ffffff" style="font-family:helvetica, sans-serif;" class="MainContainer">
217
+ <tbody>
218
+ <tr>
219
+ <td>
220
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
templates/en_EN/emails/subject-access-request.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <tbody>
2
+ <tr>
3
+ <td align="center" valign="top"><table border="0" cellpadding="0"
4
+ cellspacing="0" width="600" id="template_container"
5
+ style="box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1) !important; background-color: #fdfdfd; border: 1px solid #dcdcdc; border-radius: 3px !important;">
6
+ <tbody>
7
+ <tr>
8
+ <td align="center" valign="top">
9
+ <!-- Header -->
10
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
11
+ id="template_header"
12
+ style="background-color: #ccc; border-radius: 3px 3px 0 0 !important; color: #202020; border-bottom: 0; font-weight: bold; line-height: 100%; vertical-align: middle; font-family: &amp; quot;Helvetica Neue&amp;quot;, Helvetica, Roboto, Arial, sans-serif;">
13
+ <tbody>
14
+ <tr>
15
+ <td id="header_wrapper"
16
+ style="padding: 36px 48px; display: block;">
17
+ <h1
18
+ style="color: #202020; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 30px; font-weight: 300; line-height: 150%; margin: 0; text-align: left; text-shadow: 0 1px 0 #202020;">
19
+ <a target='_blank' href="[CLIENTS.WEBSITE]"
20
+ style='color: #202020'>{{website}}</a><br>
21
+ <?php _e('Subject Access Request', 'shapepress-dsgvo'); ?>
22
+ </h1>
23
+ </td>
24
+ </tr>
25
+ </tbody>
26
+ </table> <!-- End Header -->
27
+ </td>
28
+ </tr>
29
+ <tr>
30
+ <td align="center" valign="top">
31
+ <!-- Body -->
32
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
33
+ id="template_body">
34
+ <tbody>
35
+ <tr>
36
+ <td valign="top" id="body_content"
37
+ style="background-color: #fdfdfd;">
38
+ <!-- Content -->
39
+ <table border="0" cellpadding="20" cellspacing="0"
40
+ width="100%">
41
+ <tbody>
42
+ <tr>
43
+ <td valign="top" style="padding: 48px 48px 0;">
44
+ <div id="body_content_inner"
45
+ style="color: #4d4c53; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; line-height: 150%; text-align: left;">
46
+ <p style="margin: 0 0 16px;"><?php _e('We have received your subject access request. A PDF document containing all the data we have stored about you is attached.
47
+ Amount of personal data found', 'shapepress-dsgvo'); ?> {{count}}</p>
48
+ <p style="margin: 0 0 16px;">
49
+ <?php _e('Here you see a summary about this data', 'shapepress-dsgvo'); ?>:<br>
50
+ {{breakdown}}
51
+ </p>
52
+ <h2 style="font-size: 20px;"><?php _e('Download your archive', 'shapepress-dsgvo'); ?></h2>
53
+ <br>
54
+ <p><?php _e('Following this link you can download a PDF and a JSON file dump of your data.', 'shapepress-dsgvo'); ?><br>
55
+ <br> <a target='_blank' href="{{zip_link}}"
56
+ class='link2' style='color: #202020'><?php _e('Download archive', 'shapepress-dsgvo'); ?></a>
57
+ </p>
58
+ <h2
59
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 18px; font-weight: bold; line-height: 130%; margin: 0 0 18px; text-align: center;">
60
+ <a color: #202020 target='_blank'
61
+ href="{{confirm_link}}"></a>
62
+ </h2>
63
+ <p style="margin: 0 0 16px;">&nbsp;</p>
64
+ </div>
65
+ </td>
66
+ </tr>
67
+ </tbody>
68
+ </table> <!-- End Content -->
69
+ </td>
70
+ </tr>
71
+ </tbody>
72
+ </table> <!-- End Body -->
73
+ </td>
74
+ </tr>
75
+ <tr>
76
+ <td align="center" valign="top">
77
+ <!-- Footer -->
78
+ <table border="0" cellpadding="10" cellspacing="0" width="600"
79
+ id="template_footer">
80
+ <tbody>
81
+ <tr>
82
+ <td valign="top"
83
+ style="padding: 0; -webkit-border-radius: 6px;">
84
+ <table border="0" cellpadding="10" cellspacing="0"
85
+ width="100%">
86
+ <tbody>
87
+ <tr>
88
+ <td colspan="2" valign="middle" id="credit"
89
+ style="padding: 0 48px 48px 48px; -webkit-border-radius: 6px; border: 0; color: #ffdd66; font-family: Arial; font-size: 12px; line-height: 125%; text-align: center;">
90
+ <div class="wgm-wrap-email-appendixes"
91
+ style="text-align: left; color: #737373; font-size: 14px; line-height: 150%;">
92
+ <div style="float: left; width: 100%;">
93
+ <h3
94
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Sent from', 'shapepress-dsgvo'); ?> {{home_url}}</h3>
95
+ </div>
96
+ <div style="float: left; width: 100%;">
97
+ <h3
98
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Contact', 'shapepress-dsgvo'); ?>
99
+ {{admin_email}}</h3>
100
+
101
+ </div>
102
+ </div>
103
+ </td>
104
+ </tr>
105
+ </tbody>
106
+ </table>
107
+ </td>
108
+ </tr>
109
+ </tbody>
110
+ </table> <!-- End Footer -->
111
+ </td>
112
+ </tr>
113
+ </tbody>
114
+ </table></td>
115
+ </tr>
116
+ </tbody>
templates/en_EN/emails/super-unsubscribe.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <tbody>
2
+ <tr>
3
+ <td align="center" valign="top"><table border="0" cellpadding="0"
4
+ cellspacing="0" width="600" id="template_container"
5
+ style="box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1) !important; background-color: #fdfdfd; border: 1px solid #dcdcdc; border-radius: 3px !important;">
6
+ <tbody>
7
+ <tr>
8
+ <td align="center" valign="top">
9
+ <!-- Header -->
10
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
11
+ id="template_header"
12
+ style="background-color: #ccc; border-radius: 3px 3px 0 0 !important; color: #202020; border-bottom: 0; font-weight: bold; line-height: 100%; vertical-align: middle; font-family: &amp; quot;Helvetica Neue&amp;quot;, Helvetica, Roboto, Arial, sans-serif;">
13
+ <tbody>
14
+ <tr>
15
+ <td id="header_wrapper"
16
+ style="padding: 36px 48px; display: block;">
17
+ <h1
18
+ style="color: #202020; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 30px; font-weight: 300; line-height: 150%; margin: 0; text-align: left; text-shadow: 0 1px 0 #202020;">
19
+ <a target='_blank' href="[CLIENTS.WEBSITE]"
20
+ style='color: #202020'>{{website}}</a><br><?php _e('Delete Request', 'shapepress-dsgvo'); ?>
21
+ </h1>
22
+ </td>
23
+ </tr>
24
+ </tbody>
25
+ </table> <!-- End Header -->
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <td align="center" valign="top">
30
+ <!-- Body -->
31
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
32
+ id="template_body">
33
+ <tbody>
34
+ <tr>
35
+ <td valign="top" id="body_content"
36
+ style="background-color: #fdfdfd;">
37
+ <!-- Content -->
38
+ <table border="0" cellpadding="20" cellspacing="0"
39
+ width="100%">
40
+ <tbody>
41
+ <tr>
42
+ <td valign="top" style="padding: 48px 48px 0;">
43
+ <div id="body_content_inner"
44
+ style="color: #4d4c53; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; line-height: 150%; text-align: left;">
45
+ <p style="margin: 0 0 16px;"><?php _e('We have received your delete request.', 'shapepress-dsgvo'); ?></p>
46
+ <p style="margin: 0 0 16px;"><?php _e('If you confirm the following link, all your data stored at
47
+ {{website}} gets deleted.', 'shapepress-dsgvo'); ?></p>
48
+ <h2
49
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 18px; font-weight: bold; line-height: 130%; margin: 0 0 18px; text-align: center;">
50
+ <a color: #ffc600 target='_blank'
51
+ href="{{confirm_link}}"><?php _e('Confirm Delete', 'shapepress-dsgvo'); ?></a>
52
+ </h2>
53
+ <p style="margin: 0 0 16px;"><?php _e("If you don't want do delete your data just ignore this email.", 'shapepress-dsgvo'); ?></p>
54
+ </div>
55
+ </td>
56
+ </tr>
57
+ </tbody>
58
+ </table> <!-- End Content -->
59
+ </td>
60
+ </tr>
61
+ </tbody>
62
+ </table> <!-- End Body -->
63
+ </td>
64
+ </tr>
65
+ <tr>
66
+ <td align="center" valign="top">
67
+ <!-- Footer -->
68
+ <table border="0" cellpadding="10" cellspacing="0" width="600"
69
+ id="template_footer">
70
+ <tbody>
71
+ <tr>
72
+ <td valign="top"
73
+ style="padding: 0; -webkit-border-radius: 6px;">
74
+ <table border="0" cellpadding="10" cellspacing="0"
75
+ width="100%">
76
+ <tbody>
77
+ <tr>
78
+ <td colspan="2" valign="middle" id="credit"
79
+ style="padding: 0 48px 48px 48px; -webkit-border-radius: 6px; border: 0; color: #ffdd66; font-family: Arial; font-size: 12px; line-height: 125%; text-align: center;">
80
+ <div class="wgm-wrap-email-appendixes"
81
+ style="text-align: left; color: #737373; font-size: 14px; line-height: 150%;">
82
+ <div style="float: left; width: 100%;">
83
+ <h3
84
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Sent from', 'shapepress-dsgvo'); ?> {{home_url}}</h3>
85
+ </div>
86
+ <div style="float: left; width: 100%;">
87
+ <h3
88
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Contact', 'shapepress-dsgvo'); ?>
89
+ {{admin_email}}</h3>
90
+
91
+ </div>
92
+ </div>
93
+ </td>
94
+ </tr>
95
+ </tbody>
96
+ </table>
97
+ </td>
98
+ </tr>
99
+ </tbody>
100
+ </table> <!-- End Footer -->
101
+ </td>
102
+ </tr>
103
+ </tbody>
104
+ </table></td>
105
+ </tr>
106
+ </tbody>
templates/en_EN/imprint.txt ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [company_name]
2
+ Owner: [company_owner]
3
+ [adress_street]
4
+ [adress_zip_location]
5
+
6
+ Management: [company_law_person]
7
+ Stockholder: [company_management]
8
+
9
+ Telephone number: [comm_phone]
10
+ E-Mail address: [comm_email]
11
+
12
+ Register Court & Register Number: [company_register_court], [company_register_nr]
13
+
14
+ Sales tax identification number: [company_uid]
15
+
16
+ Responsible for content: [content_responsible]
17
+
18
+ European Commission Online Dispute Resolution (OS) platform for consumers: <a href"https://ec.europa.eu/consumers/odr/" target="_blank">https://ec.europa.eu/consumers/odr/</a>. We are not willing and obliged to participate in a dispute settlement procedure before a consumer arbitration board.
templates/en_EN/privacy-policy.txt ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h1>General Privacy Policy</h1>
2
+ The protection of your data is very important to us. We only process data on a legally compliant basis and consider it our duty to protect your data from any misuse. We use your data only for purposes to which you have authorized us.
3
+
4
+ Table of Contents
5
+ 1. Objective and responsible body
6
+ 2. Basic information on data processing
7
+ 3. Processing of personal data
8
+ 4. Collection of access data
9
+ 5. Cookies & reach measurement
10
+ 6. Google Analytics
11
+ 7. Google Re-/Marketing Services
12
+ 8. Facebook social plugins
13
+ 9. Facebook remarketing
14
+ 10. Newsletter
15
+ 11. Integration of services and content of third parties
16
+ 12. User rights and deletion
17
+ 13. Changes to the privacy policy
18
+
19
+ <h2>1. Objective and responsible body</h2>
20
+ This Privacy Policy clarifies the nature, scope and purpose of the processing (including collection, processing, use and consent) of personal information contained in our online offering and the related websites, features and content (collectively referred to as "online offer" or "Website"). The privacy policy applies regardless of the domains, systems, platforms, and devices (such as desktop or mobile) on which the online offering is being run.
21
+
22
+ Provider of the online offer and responsible for the data protection law is [company_name], owner: [company_owner], [adress_street], [adress_zip_location] (hereinafter referred to as "provider", "we" or "us"). For the contact possibilities we refer to our imprint.
23
+
24
+ The term "user" includes all customers and visitors of our online offer. The terms used, such as "Users" are to be understood gender-neutral.
25
+
26
+ <´h2>2. Basic information on data processing</h2>
27
+ We only process users' personal data in compliance with the relevant data protection regulations in accordance with the requirements of data minimization and purpose limitation (see Processing Principles: EU GDPR Article 5). This means that the data of the users are processed only in the presence of a legal permit or obligation, for the fulfillment of contractual obligations (which are necessary, for example, for the provision of the services offered) or in the presence of your consent.
28
+
29
+ We take organizational, contractual and technical security measures in accordance with the state of the art to ensure that the provisions of the data protection laws are complied with and in order to protect the data processed by us against accidental or intentional manipulation, loss, destruction or against access by unauthorized persons.
30
+
31
+ Insofar as data transmission to third parties is necessary for the fulfillment of legal requirements, the fulfillment of the services to be provided within the framework of contractual obligations or on the basis of your explicit consent, we always ensure that this is done safely and in accordance with data protection regulations and in accordance with EU GDPR Article 5.
32
+
33
+ (Webshop, if applicable): A transfer of data to third parties does not take place, with the exception of the transmission of credit card data to the involved bank institutes / payment service providers for the purpose of debiting the purchase price, to the transport company / shipping company commissioned by us for the delivery of the goods as well as to our tax consultant Fulfillment of our tax obligations.
34
+
35
+ <h2>3. Processing of personal data</h2>
36
+ The personal data are, in addition to the use expressly mentioned in this privacy policy, processed for the following purposes on the basis of statutory requirements, to fulfill the contract or your express consent:
37
+ - The provision, execution, maintenance, optimization and security of our services, services and user services;
38
+ - Ensuring effective customer service and technical support.
39
+
40
+ Insofar as data transmission to third parties is necessary for the fulfillment of legal requirements, the fulfillment of the services to be provided within the framework of contractual obligations or on the basis of your express consent, we always ensure that this is done safely and in accordance with data protection regulations in accordance with EU GDPR Article 5.
41
+
42
+ (Webshop, if applicable): A transfer of data to third parties does not take place, with the exception of the transmission of credit card data to the involved bank institutes / payment service providers for the purpose of debiting the purchase price, to the transport company / shipping company commissioned by us for the delivery of the goods as well as to our tax consultant Fulfillment of our tax obligations.
43
+
44
+ When contacting us (via contact form or e-mail), the details of the user are stored for the purpose of processing the request as well as in the event that follow-up questions arise.
45
+ Personal data will be deleted if they have fulfilled their purpose and deletion does not conflict with any retention requirements.
46
+
47
+ <h2>4. Collection of access data</h2>
48
+ We collect data about every access to the server where this service is located (so-called server log files). The access data includes name of the retrieved web page, file, date and time of retrieval, amount of data transferred, message about successful retrieval, browser type and version, the user's operating system, referrer URL (the previously visited page), IP address and the requesting provider.
49
+
50
+ We use the log data without linking it to the specific person of a user or other profiling according to the statutory provisions only for statistical evaluations for the purpose of operation, security and optimization of our online offer. However, we reserve the right to retrospectively check the log data if, on the basis of concrete evidence, the legitimate suspicion of unlawful use exists.
51
+
52
+ <h2>5. Cookies & reach measurement</h2>
53
+ Cookies are information transmitted from our web server or third-party web servers to users' web browsers and are stored there for later retrieval. The use of cookies in the context of pseudonymous range measurement is described in this privacy policy.
54
+ The usage of this online offer is also possible with the exclusion of cookies. If users do not want cookies stored on their computer, they are asked to disable the option in their browser's system settings. Saved cookies can be deleted in the system settings of the browser. The exclusion of cookies can lead to functional restrictions of this online offer.
55
+ There is a possibility to manage many companies' online advertising cookies via the US website <a href="http://www.aboutads.info/choices" target="_blank">http://www.aboutads.info/choices</a> or the EU page <a href="http://www.youronlinechoices.com/uk/your-ad-choices/" target="_blank">http://www.youronlinechoices.com/uk/your-ad-choices/</a>.
56
+
57
+ <h2>6. Google Analytics</h2>
58
+ We use Google Analytics, a web analytics service provided by Google Inc. ("Google"). Google uses cookies. The information generated by the cookie about the use of the online offer by the users are usually transmitted to a Google server in the USA and stored there.
59
+
60
+ Google will use this information on our behalf to evaluate the use of our online offering by users, to compile reports on the activities within this online offering and to provide us with other services related to the use of this online offer and internet usage. In this case, pseudonymous usage profiles of the users can be created from the processed data.
61
+
62
+ We only use Google Analytics with activated IP anonymization. This means that the IP address of users will be shortened by Google within member states of the European Union or in other contracting states of the Agreement on the European Economic Area. Only in exceptional cases the full IP address will be sent to a Google server in the US and shortened there.
63
+
64
+ The IP address submitted by the user's browser will not be merged with other data provided by Google. Users can prevent the storage of cookies by setting their browser software accordingly; users may also prevent data collection by Google of data which is generated by the cookie and related to their use of the online offer as well as the processing of such data by Google by downloading and installing the browser plug-in available under the following link: <a href="http://tools.google.com/dlpage/gaoptout?hl=de" target="_blank">http://tools.google.com/dlpage/gaoptout?hl=de</a>.
65
+
66
+ For more information about Google's use of data, settings and opt-out options, please visit Google's websites: <a href="https://www.google.com/intl/en/policies/privacy/partners" target="_blank">https://www.google.com/intl/en/policies/privacy/partners</a> ("Google's use of your data when you use websites or our partners' apps "), <a href="http://www.google.com/policies/technologies/ads" target="_blank">http://www.google.com/policies/technologies/ads</a> (" Use of data for promotional purposes "), <a href="http://www.google.com/settings/ads" target="_blank">http://www.google.com/settings/ads</a> (" Managing information provided by Google used to show you ads ") and <a href="http://www.google.com/ads/preferences" target="_blank">http://www.google.com/ads/preferences</a> (" Determine which ads Google shows you ").
67
+
68
+ <h2>7. Google Re-/Marketing Services</h2>
69
+ We use the Google Inc. Marketing and Remarketing Services ("Google Marketing Services"), 1600 Amphitheater Parkway, Mountain View, CA 94043, USA, ("Google").
70
+ Google Marketing Services allows us to better target advertisements for and on our website so that we only present ads to users that potentially match their interests. E.g.: It is called remarketing if users are also shown ads for products they are interested in on other websites.
71
+
72
+ For these purposes, when Google and our other websites that are running Google Marketing Services are activated, Google runs a code and so-called (re) marketing tags (invisible graphics or code, etc., also named “web beacons”) are added and incorporated into the website. With their help, the user is provided with an individual cookie, viz. a small file is saved (instead of cookies, comparable technologies can also be used).
73
+
74
+
75
+ The cookies can be set by different domains, including google.com, doubleclick.net, invitemedia.com, admeld.com, googlesyndication.com or googleadservices.com. In this file it is noted which web pages users visited, what content they are interested in and what offers they have clicked, as well as technical information about the browser and operating system, referring web pages, visit time and other information about the use of the online offer.
76
+
77
+ The IP address of the users is also recorded, whereby in the context of Google Analytics the IP address is shortened within member states of the European Union or other contracting states of the Agreement on the European Economic Area. Only in exceptional cases data is transmitted to a Google server in the US and shortened there. The IP address will not be merged with data of the user within other offers from Google. The information mentioned above may also be associated with information from other sources. So that ads according to the interests of the users can be displayed when they visit other websites.
78
+
79
+ The data of the users are pseudonymised processed in the context of the Google marketing services. That means Google stores and processes e.g. not the name or e-mail address of the users, but processes the relevant data cookie-related within pseudonymous user profiles. From the perspective of Google, the ads are not managed and displayed to a specifically identifiable person, but to the cookie owner, regardless of who that cookie owner is. This does not apply if users have explicitly allowed Google to process their data without this pseudonymization. The information collected about users by "DoubleClick" is transmitted to Google and stored on Google's servers in the United States.
80
+
81
+ Among the Google marketing services we use is amongst others the online advertising program "Google AdWords". In the case of Google AdWords, each advertiser receives a different "conversion cookie". Cookies cannot be tracked through AdWords advertisers' websites. The information collected through the cookie is used to generate conversion statistics for AdWords advertisers who have opted for conversion tracking. Advertisers will see the total number of users who clicked on their ad and were redirected to a conversion tracking tag page. However, they do not receive information that personally identifies users.
82
+
83
+ We embed third-party ads based on Google's DoubleClick marketing service. DoubleClick uses cookies, which allow Google and its affiliate websites to serve ads based on users' visits to this site or other sites on the Internet.
84
+ We also engage third-party ads based on the Google AdSense marketing service. AdSense uses cookies, which allow Google and its affiliate websites to serve ads based on users' visits to this site or other sites on the Internet.
85
+
86
+ Another Google marketing service we use is the Google Tag Manager, which allows additional Google analytics and marketing services to be integrated into our website (e.g. AdWords, DoubleClick, or Google Analytics).
87
+ For more information about Google's data usage for marketing, see their overview page: <a href="https://www.google.com/policies/technologies/ads" target="_blank">https://www.google.com/policies/technologies/ads</a>, Google's Privacy Policy is available at <a href="https://www.google.com/policies/privacy" target="_blank">https://www.google.com/policies/privacy</a>.
88
+ If you wish to opt-out of Google Marketing Services, you may take advantage of Google's settings and opt-out options: <a href="http://www.google.com/ads/preferences" target="_blank">http://www.google.com/ads/preferences</a>.
89
+
90
+ <h2>8. Facebook social plugins</h2>
91
+ Our online offering uses social plugins ("plugins") from the social network facebook.com operated by Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbor, Dublin 2, Ireland ("Facebook"). The plugins are recognizable by one of the Facebook logos (white "f" on blue tile, the terms "Like" or a "thumbs up" sign) or are marked with the addition "Facebook Social Plugin". The list and appearance of Facebook Social Plugins can be viewed here: <a href="https://developers.facebook.com/docs/plugins/" target="_blank">https://developers.facebook.com/docs/plugins/</a>.
92
+
93
+ When a user invokes a feature of this online offering that includes such a plugin, their device establishes a direct connection to the Facebook servers. The content of the plugin is transmitted by Facebook directly to the device of the user and incorporated into the online offer. In the process, user profiles can be created from the processed data. We therefore have no influence on the amount of data that Facebook collects with the help of this plugin and therefore informs the users according to our knowledge.
94
+
95
+ By integrating plugins, Facebook receives the information that a user has accessed the corresponding page of the online offer. If the user is logged in to Facebook, Facebook can assign the visit to his Facebook account. If users interact with the plugins, for example, press the Like button or leave a comment, the information is transmitted from your device directly to Facebook and stored there. If a user is not a member of Facebook, there is still the possibility that Facebook will find out and save their IP address. According to Facebook, only an anonymous IP address is stored in Germany.
96
+
97
+ The purpose and scope of the data collection and the further processing and use of the data by Facebook, as well as the related rights and setting options for protecting the privacy of users, can be found in Facebook's privacy policy: <a href="https://www.facebook.com/about/privacy/" target="_blank">https://www.facebook.com/about/privacy/</a>.
98
+
99
+ If a user is a Facebook member and does not want Facebook to collect data about him via this online offer and link it to his member data stored on Facebook, he must log out of Facebook and delete his cookies before using our online offer. Other settings and possible revocations regarding the use of data for advertising purposes are possible within the Facebook profile settings: <a href="https://www.facebook.com/settings?tab=ads" target="_blank">https://www.facebook.com/settings?tab=ads</a> or via the US-American site <a href="http://www.aboutads.info/choices/" target="_blank">http://www.aboutads.info/choices/</a> or the EU page <a href="http://www.youronlinechoices.com/" target="_blank">http://www.youronlinechoices.com/</a>. The settings are platform independent, which means that they are adopted for all devices, such as desktop computers or mobile devices.
100
+
101
+ <h2>9. Facebook remarketing</h2>
102
+ Within our on-line offer so-called "Facebook pixels" of the social network Facebook, which are operated by Facebook Inc., 1 Hacker Way, Menlo Park, CA 94025, USA, or if you are based in the EU, Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbor, Dublin 2, Ireland ("Facebook").
103
+
104
+ With the help of the Facebook pixel, Facebook is able to designate the visitors of our offer as a target group for the presentation of advertisements, so-called "Facebook Ads". Accordingly, we use Facebook pixel to display Facebook ads only to those Facebook users who have also shown an interest in our website. In other words, with the help of the Facebook pixel, we want to make sure that our Facebook ads are in line with the potential interest of users and are not annoying. With the help of the Facebook pixel, we can also understand the effectiveness of the Facebook ads for statistical and market research purposes by seeing if users were redirected to our site after clicking on a Facebook ad.
105
+
106
+ Facebook pixel is directly integrated by Facebook when calling our website and can save a so-called cookie (a small file) on your device.
107
+
108
+ If you log in to Facebook or visit Facebook in a logged-in state, the visit of our offer is noted in your profile. The data collected about you are anonymous to us, so they do not give us any indications about the identity of the users. However, the data is stored and processed by Facebook, so that a connection to the respective user profile is possible. The processing of the data by Facebook is part of Facebook's data usage policy. Accordingly, you will learn more about how the remarketing pixel works and more generally about how Facebook ads are displayed in Facebook's Data Usage Policy: <a href="https://www.facebook.com/policy.php" target="_blank">https://www.facebook.com/policy.php</a>.
109
+
110
+ You may object to the data collection and use of your data by Facebook Pixel to display Facebook Ads. To do this, you can visit the page set up by Facebook and follow the instructions for the usage-based advertising settings: <a href="https://www.facebook.com/settings?tab=ads" target="_blank">https://www.facebook.com/settings?tab=ads</a> or the contradiction on the US-American site <a href="http://www.aboutads.info/choices/" target="_blank">http://www.aboutads.info/choices/</a> or the EU page <a href="http://www.youronlinechoices.com/" target="_blank">http://www.youronlinechoices.com/</a>. The settings are platform independent, that means they are adopted for all devices, such as desktop computers or mobile devices.
111
+
112
+ <h2>10. Newsletter</h2>
113
+ With the following information, we will explain the contents of our newsletter, the registration, sending and statistical evaluation procedures as well as your right of objection. By subscribing to our newsletter, you agree to the receipt and the procedures described.
114
+
115
+ Content of the newsletter: We send newsletters, e-mails and other electronic notifications with advertising information (hereinafter "newsletter") only with the consent of the recipient or a legal permission. Insofar as the contents of a newsletter are concretely described, they are authoritative for the consent of the users. In general our newsletters contain the following information: our products, offers, promotions and our company.
116
+
117
+ Double opt-in and logging: Registration for our newsletter is done in a so-called double-opt-in procedure. After registration, you will receive an e-mail asking you to confirm your registration. This confirmation is necessary so that nobody can register with an invalid or not owned e-mail addresses. The registration for the newsletter will be logged in order to prove the registration process according to the legal requirements. This includes the storage of the login and the confirmation time, as well as the IP address. Likewise, changes to your data stored by the newsletter service provider will be logged.
118
+
119
+ Newsletter service provider: The newsletter is sent by means of "[newsletter_service]" (hereinafter referred to as "newsletter service provider"). The privacy policy of the newsletter service provider can be found here: [newsletter_service_privacy_policy].
120
+
121
+ The e-mail addresses of our Newsletter recipients, as well as their other data described in the context of these notes, are stored on the servers of the newsletter service provider. The newsletter service provider uses this information to send and evaluate the newsletter on our behalf.
122
+
123
+ Furthermore, the newsletter service provider may, according to their information, use this data to optimize or improve its own services, e.g. for the technical optimization of the sending and the presentation of the newsletter or for economic purposes, to determine from which countries the recipients come. However, the newsletter service provider does not use the data of our newsletter recipients to contact them for their purposes or to pass these contacts on to third parties.
124
+
125
+ Credentials: To subscribe to the newsletter, it is sufficient to provide your e-mail address.
126
+
127
+ Statistical Survey and Analysis - The newsletters contain a so-called "web-beacon", a pixel-sized file that is retrieved from the server of the newsletter service provider when the newsletter is opened. This request will initially collect technical information, such as information about the browser and your system, as well as your IP address and time of retrieval. This information is used to improve the technical performance of services based on their specifications or audience and their reading habits, based on their locations (which can be determined using the IP address) or access times.
128
+
129
+ Statistical surveys also include determining if the newsletters are opened, when they are opened and which links are clicked. For technical reasons, this information can be assigned to individual newsletter recipients. However, it is neither our endeavor nor that of the newsletter service provider to observe individual users. The evaluations serve us much more to recognize the reading habits of our users and to adapt our content accordingly or to send different content according to the interests of our users.
130
+
131
+ Termination / Revocation - You may terminate the receipt of our newsletter at any time, that means revoking your consent. At the same time, your consent for receiving any emails from the newsletter service provider and the statistical analyzes expire. A separate revocation of receiving emails from the newsletter service provider or the statistical evaluation is unfortunately not possible. A link to cancel the newsletter can be found at the end of each newsletter.
132
+
133
+ <h2>11. Integration of services and content of third parties</h2>
134
+ It may occur that contents or services of third-party providers, such as maps or fonts from other websites, are included in our online offer. The inclusion of content from third-party providers always requires that third-party providers perceive the IP address of the users, since they could not send the content to the users' browser without the IP address.
135
+
136
+ The IP address is therefore required for the presentation of this content. Furthermore, providers of third-party content can set their own cookies and process users' data for their own purposes. In the process, user profiles can be created from the processed data. We do our best to use this content in a data-saving and data-avoiding manner as far as possible and select reliable third-party providers with regard to data security.
137
+
138
+ The following presentation provides an overview of third-party providers as well as their contents and links to their privacy statements, with further details on the processing of data and partly revocation possibilities (so-called opt-out):
139
+
140
+ - External fonts from Google, Inc., <a href="https://www.google.com/fonts" target="_blank">https://www.google.com/fonts</a> ("Google Fonts"). The integration of Google fonts is done by a server call on Google (usually in the US). Privacy Policy: <a href="https://www.google.com/policies/privacy/" target="_blank">https://www.google.com/policies/privacy/</a>, opt-out: <a href="https://www.google.com/settings/ads/" target="_blank">https://www.google.com/settings/ads/</a>.
141
+ - Maps of the "Google Maps" service provided by the third-party Google Inc., 1600 Amphitheater Parkway, Mountain View, CA 94043, USA. Privacy Policy: <a href="https://www.google.com/policies/privacy/ target="_blank">https://www.google.com/policies/privacy/</a>, opt-out: <a href="https://www.google.com/settings/ads/" target="_blank">https://www.google.com/settings/ads/</a>.
142
+ - Third-party Google Inc.'s YouTube Platforms, 1600 Amphitheater Parkway, Mountain View, CA 94043, USA. Privacy Policy: <a href="https://www.google.com/policies/privacy/" target="_blank">https://www.google.com/policies/privacy/</a>, opt-out: <a href="https://www.google.com/settings/ads/" target="_blank">https://www.google.com/settings/ads/</a>.
143
+
144
+ <h2>12. User rights and deletion</h2>
145
+ Users have the right, upon request, to receive information free of charge about the personal data that we have stored about them.
146
+ In addition, users have the right to correct inaccurate data, revoke consent, block the processing and delete their personal information if justifiable and to file a complaint with the responsible regulatory authority in the event of unlawful processing.
147
+
148
+ The data stored with us are deleted as soon as they are no longer necessary for their purpose and the deletion does not conflict with any statutory storage requirements.
149
+
150
+ <h2>13. Changes to the privacy policy</h2>
151
+ We reserve the right to change the privacy policy in order to adapt it to changed legal situations, or to changes in the service and data processing. However, this only applies to declarations of data processing. If users' consent is required or elements of the privacy policy contain provisions of the contractual relationship with the users, the changes will only be made with the consent of the users.
152
+ Users are requested to inform themselves regularly about the content of the privacy policy.
153
+
154
+ Status: [save_date]
155
+
156
+
templates/en_US/emails/feedback.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h1><?php _e('WP DSGVO Tools Feedback', 'shapepress-dsgvo'); ?></h1>
2
+
3
+ <p>
4
+ <strong><?php _e('From', 'shapepress-dsgvo'); ?>:</strong><br>
5
+ {{home_url}} <br>
6
+ {{user}}
7
+ </p>
8
+
9
+ <p>
10
+ <strong><?php _e('Reason', 'shapepress-dsgvo'); ?>:</strong><br>
11
+ {{reason}}
12
+ </p>
13
+
14
+ <p>
15
+ <strong><?php _e('Message', 'shapepress-dsgvo'); ?>:</strong><br>
16
+ {{message}}
17
+ </p>
templates/en_US/emails/footer.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ </table>
2
+ </td>
3
+ </tr>
4
+ </tbody>
5
+ </table>
6
+ </td>
7
+ </tr>
8
+ </tbody>
9
+ </table>
10
+ </body>
11
+ </html>
templates/en_US/emails/header.php ADDED
@@ -0,0 +1,220 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <title>WP DSGVO Tools</title>
6
+ <style type="text/css">
7
+ body {
8
+ padding-top: 0 !important;
9
+ padding-bottom: 0 !important;
10
+ padding-top: 0 !important;
11
+ padding-bottom: 0 !important;
12
+ margin:0 !important;
13
+ width: 100% !important;
14
+ -webkit-text-size-adjust: 100% !important;
15
+ -ms-text-size-adjust: 100% !important;
16
+ -webkit-font-smoothing: antialiased !important;
17
+ }
18
+ .tableContent img {
19
+ border: 0 !important;
20
+ display: block !important;
21
+ outline: none !important;
22
+ }
23
+ a{
24
+ color:#382F2E;
25
+ }
26
+ p, h1,h2,ul,ol,li,div{
27
+ margin:0;
28
+ padding:0;
29
+ }
30
+ h1,h2{
31
+ font-weight: normal;
32
+ background:transparent !important;
33
+ border:none !important;
34
+ }
35
+ @media only screen and (max-width:480px)
36
+ {
37
+ table[class="MainContainer"], td[class="cell"]
38
+ {
39
+ width: 100% !important;
40
+ height:auto !important;
41
+ }
42
+ td[class="specbundle"]
43
+ {
44
+ width: 100% !important;
45
+ float:left !important;
46
+ font-size:13px !important;
47
+ line-height:17px !important;
48
+ display:block !important;
49
+ padding-bottom:15px !important;
50
+ }
51
+ td[class="specbundle2"]
52
+ {
53
+ width:80% !important;
54
+ float:left !important;
55
+ font-size:13px !important;
56
+ line-height:17px !important;
57
+ display:block !important;
58
+ padding-bottom:10px !important;
59
+ padding-left:10% !important;
60
+ padding-right:10% !important;
61
+ }
62
+ td[class="spechide"]
63
+ {
64
+ display:none !important;
65
+ }
66
+ img[class="banner"]
67
+ {
68
+ width: 100% !important;
69
+ height: auto !important;
70
+ }
71
+ td[class="left_pad"]
72
+ {
73
+ padding-left:15px !important;
74
+ padding-right:15px !important;
75
+ }
76
+ }
77
+ @media only screen and (max-width:540px)
78
+ {
79
+ table[class="MainContainer"], td[class="cell"]
80
+ {
81
+ width: 100% !important;
82
+ height:auto !important;
83
+ }
84
+ td[class="specbundle"]
85
+ {
86
+ width: 100% !important;
87
+ float:left !important;
88
+ font-size:13px !important;
89
+ line-height:17px !important;
90
+ display:block !important;
91
+ padding-bottom:15px !important;
92
+ }
93
+ td[class="specbundle2"]
94
+ {
95
+ width:80% !important;
96
+ float:left !important;
97
+ font-size:13px !important;
98
+ line-height:17px !important;
99
+ display:block !important;
100
+ padding-bottom:10px !important;
101
+ padding-left:10% !important;
102
+ padding-right:10% !important;
103
+ }
104
+ td[class="spechide"]
105
+ {
106
+ display:none !important;
107
+ }
108
+ img[class="banner"]
109
+ {
110
+ width: 100% !important;
111
+ height: auto !important;
112
+ }
113
+ td[class="left_pad"]
114
+ {
115
+ padding-left:15px !important;
116
+ padding-right:15px !important;
117
+ }
118
+ }
119
+ .contentEditable h2.big,.contentEditable h1.big{
120
+ font-size: 26px !important;
121
+ }
122
+ .contentEditable h2.bigger,.contentEditable h1.bigger{
123
+ font-size: 37px !important;
124
+ }
125
+ td,table{
126
+ vertical-align: top;
127
+ }
128
+ td.middle{
129
+ vertical-align: middle;
130
+ }
131
+ a.link1{
132
+ font-size:13px;
133
+ color:#27A1E5;
134
+ line-height: 24px;
135
+ text-decoration:none;
136
+ }
137
+ a{
138
+ text-decoration: none;
139
+ }
140
+ .link2{
141
+ color:#ffffff;
142
+ border-top:10px solid #27A1E5;
143
+ border-bottom:10px solid #27A1E5;
144
+ border-left:18px solid #27A1E5;
145
+ border-right:18px solid #27A1E5;
146
+ border-radius:3px;
147
+ -moz-border-radius:3px;
148
+ -webkit-border-radius:3px;
149
+ background:#27A1E5;
150
+ }
151
+ .link3{
152
+ color:#555555;
153
+ border:1px solid #cccccc;
154
+ padding:10px 18px;
155
+ border-radius:3px;
156
+ -moz-border-radius:3px;
157
+ -webkit-border-radius:3px;
158
+ background:#ffffff;
159
+ }
160
+ .link4{
161
+ color:#27A1E5;
162
+ line-height: 24px;
163
+ }
164
+ h2,h1{
165
+ line-height: 20px;
166
+ }
167
+ p{
168
+ font-size: 14px;
169
+ line-height: 21px;
170
+ color:#AAAAAA;
171
+ }
172
+ .contentEditable li{
173
+ }
174
+ .appart p{
175
+ }
176
+ .bgItem{
177
+ background: #ffffff;
178
+ }
179
+ .bgBody{
180
+ background: #ffffff;
181
+ }
182
+ img {
183
+ outline:none;
184
+ text-decoration:none;
185
+ -ms-interpolation-mode: bicubic;
186
+ width: auto;
187
+ max-width: 100%;
188
+ clear: both;
189
+ display: block;
190
+ float: none;
191
+ }
192
+
193
+ ul ul{
194
+ margin-left: 15px;
195
+ }
196
+ ul li{
197
+ color:#444444;
198
+ }
199
+ </style>
200
+ <script type="colorScheme" class="swatch active">
201
+ {
202
+ "name":"Default",
203
+ "bgBody":"ffffff",
204
+ "link":"27A1E5",
205
+ "color":"AAAAAA",
206
+ "bgItem":"ffffff",
207
+ "title":"444444"
208
+ }
209
+ </script>
210
+ </head>
211
+ <body paddingwidth="0" paddingheight="0" bgcolor="#d1d3d4" style="padding-top: 0; padding-bottom: 0; padding-top: 0; padding-bottom: 0; background-repeat: repeat; width: 100% !important; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; -webkit-font-smoothing: antialiased;" offset="0" toppadding="0" leftpadding="0">
212
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
213
+ <tbody>
214
+ <tr>
215
+ <td>
216
+ <table width="600" border="0" cellspacing="0" cellpadding="0" align="center" bgcolor="#ffffff" style="font-family:helvetica, sans-serif;" class="MainContainer">
217
+ <tbody>
218
+ <tr>
219
+ <td>
220
+ <table width="100%" border="0" cellspacing="0" cellpadding="0">
templates/en_US/emails/subject-access-request.php ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <tbody>
2
+ <tr>
3
+ <td align="center" valign="top"><table border="0" cellpadding="0"
4
+ cellspacing="0" width="600" id="template_container"
5
+ style="box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1) !important; background-color: #fdfdfd; border: 1px solid #dcdcdc; border-radius: 3px !important;">
6
+ <tbody>
7
+ <tr>
8
+ <td align="center" valign="top">
9
+ <!-- Header -->
10
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
11
+ id="template_header"
12
+ style="background-color: #ccc; border-radius: 3px 3px 0 0 !important; color: #202020; border-bottom: 0; font-weight: bold; line-height: 100%; vertical-align: middle; font-family: &amp; quot;Helvetica Neue&amp;quot;, Helvetica, Roboto, Arial, sans-serif;">
13
+ <tbody>
14
+ <tr>
15
+ <td id="header_wrapper"
16
+ style="padding: 36px 48px; display: block;">
17
+ <h1
18
+ style="color: #202020; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 30px; font-weight: 300; line-height: 150%; margin: 0; text-align: left; text-shadow: 0 1px 0 #202020;">
19
+ <a target='_blank' href="[CLIENTS.WEBSITE]"
20
+ style='color: #202020'>{{website}}</a><br>
21
+ <?php _e('Subject Access Request', 'shapepress-dsgvo'); ?>
22
+ </h1>
23
+ </td>
24
+ </tr>
25
+ </tbody>
26
+ </table> <!-- End Header -->
27
+ </td>
28
+ </tr>
29
+ <tr>
30
+ <td align="center" valign="top">
31
+ <!-- Body -->
32
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
33
+ id="template_body">
34
+ <tbody>
35
+ <tr>
36
+ <td valign="top" id="body_content"
37
+ style="background-color: #fdfdfd;">
38
+ <!-- Content -->
39
+ <table border="0" cellpadding="20" cellspacing="0"
40
+ width="100%">
41
+ <tbody>
42
+ <tr>
43
+ <td valign="top" style="padding: 48px 48px 0;">
44
+ <div id="body_content_inner"
45
+ style="color: #4d4c53; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; line-height: 150%; text-align: left;">
46
+ <p style="margin: 0 0 16px;"><?php _e('We have received your subject access request. A PDF document containing all the data we have stored about you is attached.
47
+ Amount of personal data found', 'shapepress-dsgvo'); ?> {{count}}</p>
48
+ <p style="margin: 0 0 16px;">
49
+ <?php _e('Here you see a summary about this data', 'shapepress-dsgvo'); ?>:<br>
50
+ {{breakdown}}
51
+ </p>
52
+ <h2 style="font-size: 20px;"><?php _e('Download your archive', 'shapepress-dsgvo'); ?></h2>
53
+ <br>
54
+ <p><?php _e('Following this link you can download a PDF and a JSON file dump of your data.', 'shapepress-dsgvo'); ?><br>
55
+ <br> <a target='_blank' href="{{zip_link}}"
56
+ class='link2' style='color: #202020'><?php _e('Download archive', 'shapepress-dsgvo'); ?></a>
57
+ </p>
58
+ <h2
59
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 18px; font-weight: bold; line-height: 130%; margin: 0 0 18px; text-align: center;">
60
+ <a color: #202020 target='_blank'
61
+ href="{{confirm_link}}"></a>
62
+ </h2>
63
+ <p style="margin: 0 0 16px;">&nbsp;</p>
64
+ </div>
65
+ </td>
66
+ </tr>
67
+ </tbody>
68
+ </table> <!-- End Content -->
69
+ </td>
70
+ </tr>
71
+ </tbody>
72
+ </table> <!-- End Body -->
73
+ </td>
74
+ </tr>
75
+ <tr>
76
+ <td align="center" valign="top">
77
+ <!-- Footer -->
78
+ <table border="0" cellpadding="10" cellspacing="0" width="600"
79
+ id="template_footer">
80
+ <tbody>
81
+ <tr>
82
+ <td valign="top"
83
+ style="padding: 0; -webkit-border-radius: 6px;">
84
+ <table border="0" cellpadding="10" cellspacing="0"
85
+ width="100%">
86
+ <tbody>
87
+ <tr>
88
+ <td colspan="2" valign="middle" id="credit"
89
+ style="padding: 0 48px 48px 48px; -webkit-border-radius: 6px; border: 0; color: #ffdd66; font-family: Arial; font-size: 12px; line-height: 125%; text-align: center;">
90
+ <div class="wgm-wrap-email-appendixes"
91
+ style="text-align: left; color: #737373; font-size: 14px; line-height: 150%;">
92
+ <div style="float: left; width: 100%;">
93
+ <h3
94
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Sent from', 'shapepress-dsgvo'); ?> {{home_url}}</h3>
95
+ </div>
96
+ <div style="float: left; width: 100%;">
97
+ <h3
98
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Contact', 'shapepress-dsgvo'); ?>
99
+ {{admin_email}}</h3>
100
+
101
+ </div>
102
+ </div>
103
+ </td>
104
+ </tr>
105
+ </tbody>
106
+ </table>
107
+ </td>
108
+ </tr>
109
+ </tbody>
110
+ </table> <!-- End Footer -->
111
+ </td>
112
+ </tr>
113
+ </tbody>
114
+ </table></td>
115
+ </tr>
116
+ </tbody>
templates/en_US/emails/super-unsubscribe.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <tbody>
2
+ <tr>
3
+ <td align="center" valign="top"><table border="0" cellpadding="0"
4
+ cellspacing="0" width="600" id="template_container"
5
+ style="box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1) !important; background-color: #fdfdfd; border: 1px solid #dcdcdc; border-radius: 3px !important;">
6
+ <tbody>
7
+ <tr>
8
+ <td align="center" valign="top">
9
+ <!-- Header -->
10
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
11
+ id="template_header"
12
+ style="background-color: #ccc; border-radius: 3px 3px 0 0 !important; color: #202020; border-bottom: 0; font-weight: bold; line-height: 100%; vertical-align: middle; font-family: &amp; quot;Helvetica Neue&amp;quot;, Helvetica, Roboto, Arial, sans-serif;">
13
+ <tbody>
14
+ <tr>
15
+ <td id="header_wrapper"
16
+ style="padding: 36px 48px; display: block;">
17
+ <h1
18
+ style="color: #202020; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 30px; font-weight: 300; line-height: 150%; margin: 0; text-align: left; text-shadow: 0 1px 0 #202020;">
19
+ <a target='_blank' href="[CLIENTS.WEBSITE]"
20
+ style='color: #202020'>{{website}}</a><br><?php _e('Delete Request', 'shapepress-dsgvo'); ?>
21
+ </h1>
22
+ </td>
23
+ </tr>
24
+ </tbody>
25
+ </table> <!-- End Header -->
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <td align="center" valign="top">
30
+ <!-- Body -->
31
+ <table border="0" cellpadding="0" cellspacing="0" width="600"
32
+ id="template_body">
33
+ <tbody>
34
+ <tr>
35
+ <td valign="top" id="body_content"
36
+ style="background-color: #fdfdfd;">
37
+ <!-- Content -->
38
+ <table border="0" cellpadding="20" cellspacing="0"
39
+ width="100%">
40
+ <tbody>
41
+ <tr>
42
+ <td valign="top" style="padding: 48px 48px 0;">
43
+ <div id="body_content_inner"
44
+ style="color: #4d4c53; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; line-height: 150%; text-align: left;">
45
+ <p style="margin: 0 0 16px;"><?php _e('We have received your delete request.', 'shapepress-dsgvo'); ?></p>
46
+ <p style="margin: 0 0 16px;"><?php _e('If you confirm the following link, all your data stored at
47
+ {{website}} gets deleted.', 'shapepress-dsgvo'); ?></p>
48
+ <h2
49
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 18px; font-weight: bold; line-height: 130%; margin: 0 0 18px; text-align: center;">
50
+ <a color: #ffc600 target='_blank'
51
+ href="{{confirm_link}}"><?php _e('Confirm Delete', 'shapepress-dsgvo'); ?></a>
52
+ </h2>
53
+ <p style="margin: 0 0 16px;"><?php _e("If you don't want do delete your data just ignore this email.", 'shapepress-dsgvo'); ?></p>
54
+ </div>
55
+ </td>
56
+ </tr>
57
+ </tbody>
58
+ </table> <!-- End Content -->
59
+ </td>
60
+ </tr>
61
+ </tbody>
62
+ </table> <!-- End Body -->
63
+ </td>
64
+ </tr>
65
+ <tr>
66
+ <td align="center" valign="top">
67
+ <!-- Footer -->
68
+ <table border="0" cellpadding="10" cellspacing="0" width="600"
69
+ id="template_footer">
70
+ <tbody>
71
+ <tr>
72
+ <td valign="top"
73
+ style="padding: 0; -webkit-border-radius: 6px;">
74
+ <table border="0" cellpadding="10" cellspacing="0"
75
+ width="100%">
76
+ <tbody>
77
+ <tr>
78
+ <td colspan="2" valign="middle" id="credit"
79
+ style="padding: 0 48px 48px 48px; -webkit-border-radius: 6px; border: 0; color: #ffdd66; font-family: Arial; font-size: 12px; line-height: 125%; text-align: center;">
80
+ <div class="wgm-wrap-email-appendixes"
81
+ style="text-align: left; color: #737373; font-size: 14px; line-height: 150%;">
82
+ <div style="float: left; width: 100%;">
83
+ <h3
84
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Sent from', 'shapepress-dsgvo'); ?> {{home_url}}</h3>
85
+ </div>
86
+ <div style="float: left; width: 100%;">
87
+ <h3
88
+ style="color: #202020; display: block; font-family: &amp; quot; Helvetica Neue&amp;quot; , Helvetica , Roboto, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 130%; margin: 16px 0 8px; text-align: center;"><?php _e('Contact', 'shapepress-dsgvo'); ?>
89
+ {{admin_email}}</h3>
90
+
91
+ </div>
92
+ </div>
93
+ </td>
94
+ </tr>
95
+ </tbody>
96
+ </table>
97
+ </td>
98
+ </tr>
99
+ </tbody>
100
+ </table> <!-- End Footer -->
101
+ </td>
102
+ </tr>
103
+ </tbody>
104
+ </table></td>
105
+ </tr>
106
+ </tbody>
templates/en_US/imprint.txt ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [company_name]
2
+ Owner: [company_owner]
3
+ [adress_street]
4
+ [adress_zip_location]
5
+
6
+ Management: [company_law_person]
7
+ Stockholder: [company_management]
8
+
9
+ Telephone number: [comm_phone]
10
+ E-Mail address: [comm_email]
11
+
12
+ Register Court & Register Number: [company_register_court], [company_register_nr]
13
+
14
+ Sales tax identification number: [company_uid]
15
+
16
+ Responsible for content: [content_responsible]
17
+
18
+ European Commission Online Dispute Resolution (OS) platform for consumers: <a href"https://ec.europa.eu/consumers/odr/" target="_blank">https://ec.europa.eu/consumers/odr/</a>. We are not willing and obliged to participate in a dispute settlement procedure before a consumer arbitration board.
templates/en_US/privacy-policy.txt ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h1>General Privacy Policy</h1>
2
+ The protection of your data is very important to us. We only process data on a legally compliant basis and consider it our duty to protect your data from any misuse. We use your data only for purposes to which you have authorized us.
3
+
4
+ Table of Contents
5
+ 1. Objective and responsible body
6
+ 2. Basic information on data processing
7
+ 3. Processing of personal data
8
+ 4. Collection of access data
9
+ 5. Cookies & reach measurement
10
+ 6. Google Analytics
11
+ 7. Google Re-/Marketing Services
12
+ 8. Facebook social plugins
13
+ 9. Facebook remarketing
14
+ 10. Newsletter
15
+ 11. Integration of services and content of third parties
16
+ 12. User rights and deletion
17
+ 13. Changes to the privacy policy
18
+
19
+ <h2>1. Objective and responsible body</h2>
20
+ This Privacy Policy clarifies the nature, scope and purpose of the processing (including collection, processing, use and consent) of personal information contained in our online offering and the related websites, features and content (collectively referred to as "online offer" or "Website"). The privacy policy applies regardless of the domains, systems, platforms, and devices (such as desktop or mobile) on which the online offering is being run.
21
+
22
+ Provider of the online offer and responsible for the data protection law is [company_name], owner: [company_owner], [adress_street], [adress_zip_location] (hereinafter referred to as "provider", "we" or "us"). For the contact possibilities we refer to our imprint.
23
+
24
+ The term "user" includes all customers and visitors of our online offer. The terms used, such as "Users" are to be understood gender-neutral.
25
+
26
+ <´h2>2. Basic information on data processing</h2>
27
+ We only process users' personal data in compliance with the relevant data protection regulations in accordance with the requirements of data minimization and purpose limitation (see Processing Principles: EU GDPR Article 5). This means that the data of the users are processed only in the presence of a legal permit or obligation, for the fulfillment of contractual obligations (which are necessary, for example, for the provision of the services offered) or in the presence of your consent.
28
+
29
+ We take organizational, contractual and technical security measures in accordance with the state of the art to ensure that the provisions of the data protection laws are complied with and in order to protect the data processed by us against accidental or intentional manipulation, loss, destruction or against access by unauthorized persons.
30
+
31
+ Insofar as data transmission to third parties is necessary for the fulfillment of legal requirements, the fulfillment of the services to be provided within the framework of contractual obligations or on the basis of your explicit consent, we always ensure that this is done safely and in accordance with data protection regulations and in accordance with EU GDPR Article 5.
32
+
33
+ (Webshop, if applicable): A transfer of data to third parties does not take place, with the exception of the transmission of credit card data to the involved bank institutes / payment service providers for the purpose of debiting the purchase price, to the transport company / shipping company commissioned by us for the delivery of the goods as well as to our tax consultant Fulfillment of our tax obligations.
34
+
35
+ <h2>3. Processing of personal data</h2>
36
+ The personal data are, in addition to the use expressly mentioned in this privacy policy, processed for the following purposes on the basis of statutory requirements, to fulfill the contract or your express consent:
37
+ - The provision, execution, maintenance, optimization and security of our services, services and user services;
38
+ - Ensuring effective customer service and technical support.
39
+
40
+ Insofar as data transmission to third parties is necessary for the fulfillment of legal requirements, the fulfillment of the services to be provided within the framework of contractual obligations or on the basis of your express consent, we always ensure that this is done safely and in accordance with data protection regulations in accordance with EU GDPR Article 5.
41
+
42
+ (Webshop, if applicable): A transfer of data to third parties does not take place, with the exception of the transmission of credit card data to the involved bank institutes / payment service providers for the purpose of debiting the purchase price, to the transport company / shipping company commissioned by us for the delivery of the goods as well as to our tax consultant Fulfillment of our tax obligations.
43
+
44
+ When contacting us (via contact form or e-mail), the details of the user are stored for the purpose of processing the request as well as in the event that follow-up questions arise.
45
+ Personal data will be deleted if they have fulfilled their purpose and deletion does not conflict with any retention requirements.
46
+
47
+ <h2>4. Collection of access data</h2>
48
+ We collect data about every access to the server where this service is located (so-called server log files). The access data includes name of the retrieved web page, file, date and time of retrieval, amount of data transferred, message about successful retrieval, browser type and version, the user's operating system, referrer URL (the previously visited page), IP address and the requesting provider.
49
+
50
+ We use the log data without linking it to the specific person of a user or other profiling according to the statutory provisions only for statistical evaluations for the purpose of operation, security and optimization of our online offer. However, we reserve the right to retrospectively check the log data if, on the basis of concrete evidence, the legitimate suspicion of unlawful use exists.
51
+
52
+ <h2>5. Cookies & reach measurement</h2>
53
+ Cookies are information transmitted from our web server or third-party web servers to users' web browsers and are stored there for later retrieval. The use of cookies in the context of pseudonymous range measurement is described in this privacy policy.
54
+ The usage of this online offer is also possible with the exclusion of cookies. If users do not want cookies stored on their computer, they are asked to disable the option in their browser's system settings. Saved cookies can be deleted in the system settings of the browser. The exclusion of cookies can lead to functional restrictions of this online offer.
55
+ There is a possibility to manage many companies' online advertising cookies via the US website <a href="http://www.aboutads.info/choices" target="_blank">http://www.aboutads.info/choices</a> or the EU page <a href="http://www.youronlinechoices.com/uk/your-ad-choices/" target="_blank">http://www.youronlinechoices.com/uk/your-ad-choices/</a>.
56
+
57
+ <h2>6. Google Analytics</h2>
58
+ We use Google Analytics, a web analytics service provided by Google Inc. ("Google"). Google uses cookies. The information generated by the cookie about the use of the online offer by the users are usually transmitted to a Google server in the USA and stored there.
59
+
60
+ Google will use this information on our behalf to evaluate the use of our online offering by users, to compile reports on the activities within this online offering and to provide us with other services related to the use of this online offer and internet usage. In this case, pseudonymous usage profiles of the users can be created from the processed data.
61
+
62
+ We only use Google Analytics with activated IP anonymization. This means that the IP address of users will be shortened by Google within member states of the European Union or in other contracting states of the Agreement on the European Economic Area. Only in exceptional cases the full IP address will be sent to a Google server in the US and shortened there.
63
+
64
+ The IP address submitted by the user's browser will not be merged with other data provided by Google. Users can prevent the storage of cookies by setting their browser software accordingly; users may also prevent data collection by Google of data which is generated by the cookie and related to their use of the online offer as well as the processing of such data by Google by downloading and installing the browser plug-in available under the following link: <a href="http://tools.google.com/dlpage/gaoptout?hl=de" target="_blank">http://tools.google.com/dlpage/gaoptout?hl=de</a>.
65
+
66
+ For more information about Google's use of data, settings and opt-out options, please visit Google's websites: <a href="https://www.google.com/intl/en/policies/privacy/partners" target="_blank">https://www.google.com/intl/en/policies/privacy/partners</a> ("Google's use of your data when you use websites or our partners' apps "), <a href="http://www.google.com/policies/technologies/ads" target="_blank">http://www.google.com/policies/technologies/ads</a> (" Use of data for promotional purposes "), <a href="http://www.google.com/settings/ads" target="_blank">http://www.google.com/settings/ads</a> (" Managing information provided by Google used to show you ads ") and <a href="http://www.google.com/ads/preferences" target="_blank">http://www.google.com/ads/preferences</a> (" Determine which ads Google shows you ").
67
+
68
+ <h2>7. Google Re-/Marketing Services</h2>
69
+ We use the Google Inc. Marketing and Remarketing Services ("Google Marketing Services"), 1600 Amphitheater Parkway, Mountain View, CA 94043, USA, ("Google").
70
+ Google Marketing Services allows us to better target advertisements for and on our website so that we only present ads to users that potentially match their interests. E.g.: It is called remarketing if users are also shown ads for products they are interested in on other websites.
71
+
72
+ For these purposes, when Google and our other websites that are running Google Marketing Services are activated, Google runs a code and so-called (re) marketing tags (invisible graphics or code, etc., also named “web beacons”) are added and incorporated into the website. With their help, the user is provided with an individual cookie, viz. a small file is saved (instead of cookies, comparable technologies can also be used).
73
+
74
+
75
+ The cookies can be set by different domains, including google.com, doubleclick.net, invitemedia.com, admeld.com, googlesyndication.com or googleadservices.com. In this file it is noted which web pages users visited, what content they are interested in and what offers they have clicked, as well as technical information about the browser and operating system, referring web pages, visit time and other information about the use of the online offer.
76
+
77
+ The IP address of the users is also recorded, whereby in the context of Google Analytics the IP address is shortened within member states of the European Union or other contracting states of the Agreement on the European Economic Area. Only in exceptional cases data is transmitted to a Google server in the US and shortened there. The IP address will not be merged with data of the user within other offers from Google. The information mentioned above may also be associated with information from other sources. So that ads according to the interests of the users can be displayed when they visit other websites.
78
+
79
+ The data of the users are pseudonymised processed in the context of the Google marketing services. That means Google stores and processes e.g. not the name or e-mail address of the users, but processes the relevant data cookie-related within pseudonymous user profiles. From the perspective of Google, the ads are not managed and displayed to a specifically identifiable person, but to the cookie owner, regardless of who that cookie owner is. This does not apply if users have explicitly allowed Google to process their data without this pseudonymization. The information collected about users by "DoubleClick" is transmitted to Google and stored on Google's servers in the United States.
80
+
81
+ Among the Google marketing services we use is amongst others the online advertising program "Google AdWords". In the case of Google AdWords, each advertiser receives a different "conversion cookie". Cookies cannot be tracked through AdWords advertisers' websites. The information collected through the cookie is used to generate conversion statistics for AdWords advertisers who have opted for conversion tracking. Advertisers will see the total number of users who clicked on their ad and were redirected to a conversion tracking tag page. However, they do not receive information that personally identifies users.
82
+
83
+ We embed third-party ads based on Google's DoubleClick marketing service. DoubleClick uses cookies, which allow Google and its affiliate websites to serve ads based on users' visits to this site or other sites on the Internet.
84
+ We also engage third-party ads based on the Google AdSense marketing service. AdSense uses cookies, which allow Google and its affiliate websites to serve ads based on users' visits to this site or other sites on the Internet.
85
+
86
+ Another Google marketing service we use is the Google Tag Manager, which allows additional Google analytics and marketing services to be integrated into our website (e.g. AdWords, DoubleClick, or Google Analytics).
87
+ For more information about Google's data usage for marketing, see their overview page: <a href="https://www.google.com/policies/technologies/ads" target="_blank">https://www.google.com/policies/technologies/ads</a>, Google's Privacy Policy is available at <a href="https://www.google.com/policies/privacy" target="_blank">https://www.google.com/policies/privacy</a>.
88
+ If you wish to opt-out of Google Marketing Services, you may take advantage of Google's settings and opt-out options: <a href="http://www.google.com/ads/preferences" target="_blank">http://www.google.com/ads/preferences</a>.
89
+
90
+ <h2>8. Facebook social plugins</h2>
91
+ Our online offering uses social plugins ("plugins") from the social network facebook.com operated by Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbor, Dublin 2, Ireland ("Facebook"). The plugins are recognizable by one of the Facebook logos (white "f" on blue tile, the terms "Like" or a "thumbs up" sign) or are marked with the addition "Facebook Social Plugin". The list and appearance of Facebook Social Plugins can be viewed here: <a href="https://developers.facebook.com/docs/plugins/" target="_blank">https://developers.facebook.com/docs/plugins/</a>.
92
+
93
+ When a user invokes a feature of this online offering that includes such a plugin, their device establishes a direct connection to the Facebook servers. The content of the plugin is transmitted by Facebook directly to the device of the user and incorporated into the online offer. In the process, user profiles can be created from the processed data. We therefore have no influence on the amount of data that Facebook collects with the help of this plugin and therefore informs the users according to our knowledge.
94
+
95
+ By integrating plugins, Facebook receives the information that a user has accessed the corresponding page of the online offer. If the user is logged in to Facebook, Facebook can assign the visit to his Facebook account. If users interact with the plugins, for example, press the Like button or leave a comment, the information is transmitted from your device directly to Facebook and stored there. If a user is not a member of Facebook, there is still the possibility that Facebook will find out and save their IP address. According to Facebook, only an anonymous IP address is stored in Germany.
96
+
97
+ The purpose and scope of the data collection and the further processing and use of the data by Facebook, as well as the related rights and setting options for protecting the privacy of users, can be found in Facebook's privacy policy: <a href="https://www.facebook.com/about/privacy/" target="_blank">https://www.facebook.com/about/privacy/</a>.
98
+
99
+ If a user is a Facebook member and does not want Facebook to collect data about him via this online offer and link it to his member data stored on Facebook, he must log out of Facebook and delete his cookies before using our online offer. Other settings and possible revocations regarding the use of data for advertising purposes are possible within the Facebook profile settings: <a href="https://www.facebook.com/settings?tab=ads" target="_blank">https://www.facebook.com/settings?tab=ads</a> or via the US-American site <a href="http://www.aboutads.info/choices/" target="_blank">http://www.aboutads.info/choices/</a> or the EU page <a href="http://www.youronlinechoices.com/" target="_blank">http://www.youronlinechoices.com/</a>. The settings are platform independent, which means that they are adopted for all devices, such as desktop computers or mobile devices.
100
+
101
+ <h2>9. Facebook remarketing</h2>
102
+ Within our on-line offer so-called "Facebook pixels" of the social network Facebook, which are operated by Facebook Inc., 1 Hacker Way, Menlo Park, CA 94025, USA, or if you are based in the EU, Facebook Ireland Ltd., 4 Grand Canal Square, Grand Canal Harbor, Dublin 2, Ireland ("Facebook").
103
+
104
+ With the help of the Facebook pixel, Facebook is able to designate the visitors of our offer as a target group for the presentation of advertisements, so-called "Facebook Ads". Accordingly, we use Facebook pixel to display Facebook ads only to those Facebook users who have also shown an interest in our website. In other words, with the help of the Facebook pixel, we want to make sure that our Facebook ads are in line with the potential interest of users and are not annoying. With the help of the Facebook pixel, we can also understand the effectiveness of the Facebook ads for statistical and market research purposes by seeing if users were redirected to our site after clicking on a Facebook ad.
105
+
106
+ Facebook pixel is directly integrated by Facebook when calling our website and can save a so-called cookie (a small file) on your device.
107
+
108
+ If you log in to Facebook or visit Facebook in a logged-in state, the visit of our offer is noted in your profile. The data collected about you are anonymous to us, so they do not give us any indications about the identity of the users. However, the data is stored and processed by Facebook, so that a connection to the respective user profile is possible. The processing of the data by Facebook is part of Facebook's data usage policy. Accordingly, you will learn more about how the remarketing pixel works and more generally about how Facebook ads are displayed in Facebook's Data Usage Policy: <a href="https://www.facebook.com/policy.php" target="_blank">https://www.facebook.com/policy.php</a>.
109
+
110
+ You may object to the data collection and use of your data by Facebook Pixel to display Facebook Ads. To do this, you can visit the page set up by Facebook and follow the instructions for the usage-based advertising settings: <a href="https://www.facebook.com/settings?tab=ads" target="_blank">https://www.facebook.com/settings?tab=ads</a> or the contradiction on the US-American site <a href="http://www.aboutads.info/choices/" target="_blank">http://www.aboutads.info/choices/</a> or the EU page <a href="http://www.youronlinechoices.com/" target="_blank">http://www.youronlinechoices.com/</a>. The settings are platform independent, that means they are adopted for all devices, such as desktop computers or mobile devices.
111
+
112
+ <h2>10. Newsletter</h2>
113
+ With the following information, we will explain the contents of our newsletter, the registration, sending and statistical evaluation procedures as well as your right of objection. By subscribing to our newsletter, you agree to the receipt and the procedures described.
114
+
115
+ Content of the newsletter: We send newsletters, e-mails and other electronic notifications with advertising information (hereinafter "newsletter") only with the consent of the recipient or a legal permission. Insofar as the contents of a newsletter are concretely described, they are authoritative for the consent of the users. In general our newsletters contain the following information: our products, offers, promotions and our company.
116
+
117
+ Double opt-in and logging: Registration for our newsletter is done in a so-called double-opt-in procedure. After registration, you will receive an e-mail asking you to confirm your registration. This confirmation is necessary so that nobody can register with an invalid or not owned e-mail addresses. The registration for the newsletter will be logged in order to prove the registration process according to the legal requirements. This includes the storage of the login and the confirmation time, as well as the IP address. Likewise, changes to your data stored by the newsletter service provider will be logged.
118
+
119
+ Newsletter service provider: The newsletter is sent by means of "[newsletter_service]" (hereinafter referred to as "newsletter service provider"). The privacy policy of the newsletter service provider can be found here: [newsletter_service_privacy_policy].
120
+
121
+ The e-mail addresses of our Newsletter recipients, as well as their other data described in the context of these notes, are stored on the servers of the newsletter service provider. The newsletter service provider uses this information to send and evaluate the newsletter on our behalf.
122
+
123
+ Furthermore, the newsletter service provider may, according to their information, use this data to optimize or improve its own services, e.g. for the technical optimization of the sending and the presentation of the newsletter or for economic purposes, to determine from which countries the recipients come. However, the newsletter service provider does not use the data of our newsletter recipients to contact them for their purposes or to pass these contacts on to third parties.
124
+
125
+ Credentials: To subscribe to the newsletter, it is sufficient to provide your e-mail address.
126
+
127
+ Statistical Survey and Analysis - The newsletters contain a so-called "web-beacon", a pixel-sized file that is retrieved from the server of the newsletter service provider when the newsletter is opened. This request will initially collect technical information, such as information about the browser and your system, as well as your IP address and time of retrieval. This information is used to improve the technical performance of services based on their specifications or audience and their reading habits, based on their locations (which can be determined using the IP address) or access times.
128
+
129
+ Statistical surveys also include determining if the newsletters are opened, when they are opened and which links are clicked. For technical reasons, this information can be assigned to individual newsletter recipients. However, it is neither our endeavor nor that of the newsletter service provider to observe individual users. The evaluations serve us much more to recognize the reading habits of our users and to adapt our content accordingly or to send different content according to the interests of our users.
130
+
131
+ Termination / Revocation - You may terminate the receipt of our newsletter at any time, that means revoking your consent. At the same time, your consent for receiving any emails from the newsletter service provider and the statistical analyzes expire. A separate revocation of receiving emails from the newsletter service provider or the statistical evaluation is unfortunately not possible. A link to cancel the newsletter can be found at the end of each newsletter.
132
+
133
+ <h2>11. Integration of services and content of third parties</h2>
134
+ It may occur that contents or services of third-party providers, such as maps or fonts from other websites, are included in our online offer. The inclusion of content from third-party providers always requires that third-party providers perceive the IP address of the users, since they could not send the content to the users' browser without the IP address.
135
+
136
+ The IP address is therefore required for the presentation of this content. Furthermore, providers of third-party content can set their own cookies and process users' data for their own purposes. In the process, user profiles can be created from the processed data. We do our best to use this content in a data-saving and data-avoiding manner as far as possible and select reliable third-party providers with regard to data security.
137
+
138
+ The following presentation provides an overview of third-party providers as well as their contents and links to their privacy statements, with further details on the processing of data and partly revocation possibilities (so-called opt-out):
139
+
140
+ - External fonts from Google, Inc., <a href="https://www.google.com/fonts" target="_blank">https://www.google.com/fonts</a> ("Google Fonts"). The integration of Google fonts is done by a server call on Google (usually in the US). Privacy Policy: <a href="https://www.google.com/policies/privacy/" target="_blank">https://www.google.com/policies/privacy/</a>, opt-out: <a href="https://www.google.com/settings/ads/" target="_blank">https://www.google.com/settings/ads/</a>.
141
+ - Maps of the "Google Maps" service provided by the third-party Google Inc., 1600 Amphitheater Parkway, Mountain View, CA 94043, USA. Privacy Policy: <a href="https://www.google.com/policies/privacy/ target="_blank">https://www.google.com/policies/privacy/</a>, opt-out: <a href="https://www.google.com/settings/ads/" target="_blank">https://www.google.com/settings/ads/</a>.
142
+ - Third-party Google Inc.'s YouTube Platforms, 1600 Amphitheater Parkway, Mountain View, CA 94043, USA. Privacy Policy: <a href="https://www.google.com/policies/privacy/" target="_blank">https://www.google.com/policies/privacy/</a>, opt-out: <a href="https://www.google.com/settings/ads/" target="_blank">https://www.google.com/settings/ads/</a>.
143
+
144
+ <h2>12. User rights and deletion</h2>
145
+ Users have the right, upon request, to receive information free of charge about the personal data that we have stored about them.
146
+ In addition, users have the right to correct inaccurate data, revoke consent, block the processing and delete their personal information if justifiable and to file a complaint with the responsible regulatory authority in the event of unlawful processing.
147
+
148
+ The data stored with us are deleted as soon as they are no longer necessary for their purpose and the deletion does not conflict with any statutory storage requirements.
149
+
150
+ <h2>13. Changes to the privacy policy</h2>
151
+ We reserve the right to change the privacy policy in order to adapt it to changed legal situations, or to changes in the service and data processing. However, this only applies to declarations of data processing. If users' consent is required or elements of the privacy policy contain provisions of the contractual relationship with the users, the changes will only be made with the consent of the users.
152
+ Users are requested to inform themselves regularly about the content of the privacy policy.
153
+
154
+ Status: [save_date]
155
+
156
+