Version Description
- Changing some texts to be consistent.
- Cleaned up code with VIP Code Standard.
- Improved security.
- Fix internet explorer bug.
- Fix JS function with wrong variable name when an AJAX error happened.
- Fix Warning on woocommerce consent checkboxes.
- Renaming buttons and translating placeholders.
- Added another parameter to the request forms function and shortcode to allow users to customize the button text.
- Fix a bug in the privacy preferences center when you moved to a different page without accepting cookies it would uncheck fields that should continue being checked.
- Fix settings tooltips z-index to sit on top of other elements.
Download this release
Release Info
Developer | fclaussen |
Plugin | GDPR |
Version | 2.0.7 |
Comparing to | |
See all releases |
Code changes from version 2.0.6 to 2.0.7
- README.txt +13 -1
- admin/class-gdpr-admin.php +194 -170
- admin/class-gdpr-requests-admin.php +75 -68
- admin/class-gdpr-telemetry.php +72 -69
- admin/partials/requests.php +93 -83
- admin/partials/settings.php +88 -85
- admin/partials/templates/tmpl-consents.php +2 -2
- admin/partials/templates/tmpl-cookies.php +18 -18
- admin/partials/templates/tmpl-tools.php +6 -6
- admin/partials/tools.php +20 -22
- assets/css/gdpr-admin.css +1 -1
- assets/css/gdpr-public.css +1 -1
- assets/js/gdpr-public.js +1 -1
- gdpr.php +2 -2
- includes/class-gdpr-activator.php +28 -26
- includes/class-gdpr-audit-log.php +22 -22
- includes/class-gdpr-deactivator.php +1 -1
- includes/class-gdpr-email.php +50 -42
- includes/class-gdpr-help.php +93 -67
- includes/class-gdpr-requests.php +68 -39
- includes/class-gdpr.php +62 -58
- includes/helper-functions.php +32 -24
- languages/gdpr.pot +256 -264
- public/class-gdpr-public.php +81 -65
- public/class-gdpr-requests-public.php +127 -79
- public/partials/complaint-form.php +4 -4
- public/partials/confirmation-screens.php +10 -13
- public/partials/delete-form.php +3 -3
- public/partials/export-data-form.php +3 -3
- public/partials/privacy-bar.php +1 -1
- public/partials/privacy-preferences-modal.php +18 -16
- public/partials/reconsent-bar.php +2 -2
- public/partials/rectify-form.php +4 -4
- templates/email/complaint-request.php +8 -8
- templates/email/data-breach-notification.php +5 -6
- templates/email/data-breach-request.php +6 -7
- templates/email/delete-request.php +6 -6
- templates/email/delete-resolved.php +2 -2
- templates/email/export-data-request.php +8 -8
- templates/email/new-request.php +3 -3
- templates/email/rectify-request.php +8 -8
README.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: gdpr, compliance, privacy, law, general data protection regulation
|
|
5 |
Requires at least: 4.7
|
6 |
Requires PHP: 5.6
|
7 |
Tested up to: 4.9
|
8 |
-
Stable tag: 2.0.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
@@ -206,6 +206,18 @@ Activating this plugin does not guarantee that an organisation is successfully m
|
|
206 |
|
207 |
== Changelog ==
|
208 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
209 |
= 2.0.6 =
|
210 |
* Fix XML export error.
|
211 |
|
5 |
Requires at least: 4.7
|
6 |
Requires PHP: 5.6
|
7 |
Tested up to: 4.9
|
8 |
+
Stable tag: 2.0.7
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
206 |
|
207 |
== Changelog ==
|
208 |
|
209 |
+
= 2.0.7 =
|
210 |
+
* Changing some texts to be consistent.
|
211 |
+
* Cleaned up code with VIP Code Standard.
|
212 |
+
* Improved security.
|
213 |
+
* Fix internet explorer bug.
|
214 |
+
* Fix JS function with wrong variable name when an AJAX error happened.
|
215 |
+
* Fix Warning on woocommerce consent checkboxes.
|
216 |
+
* Renaming buttons and translating placeholders.
|
217 |
+
* Added another parameter to the request forms function and shortcode to allow users to customize the button text.
|
218 |
+
* Fix a bug in the privacy preferences center when you moved to a different page without accepting cookies it would uncheck fields that should continue being checked.
|
219 |
+
* Fix settings tooltips z-index to sit on top of other elements.
|
220 |
+
|
221 |
= 2.0.6 =
|
222 |
* Fix XML export error.
|
223 |
|
admin/class-gdpr-admin.php
CHANGED
@@ -62,8 +62,8 @@ class GDPR_Admin {
|
|
62 |
$this->version = $version;
|
63 |
$this->allowed_html = array(
|
64 |
'a' => array(
|
65 |
-
'href'
|
66 |
-
'title'
|
67 |
'target' => true,
|
68 |
),
|
69 |
);
|
@@ -103,14 +103,16 @@ class GDPR_Admin {
|
|
103 |
$function = array( $this, 'requests_page_template' );
|
104 |
$icon_url = 'dashicons-id';
|
105 |
|
106 |
-
$requests
|
107 |
-
$confirmed_requests = array_filter(
|
108 |
-
|
109 |
-
|
|
|
|
|
110 |
|
111 |
-
$menu_title
|
112 |
if ( count( $confirmed_requests ) ) {
|
113 |
-
$menu_title
|
114 |
}
|
115 |
|
116 |
add_menu_page( $page_title, $menu_title, $capability, $parent_slug, $function, $icon_url );
|
@@ -133,21 +135,19 @@ class GDPR_Admin {
|
|
133 |
|
134 |
$settings_hook = add_submenu_page( $parent_slug, $menu_title, $menu_title, $capability, $menu_slug, $function );
|
135 |
|
|
|
136 |
|
137 |
-
$
|
138 |
-
|
139 |
-
$cpt = 'telemetry';
|
140 |
$cpt_obj = get_post_type_object( $cpt );
|
141 |
|
142 |
if ( $cpt_obj ) {
|
143 |
add_submenu_page( $parent_slug, $cpt_obj->labels->name, $cpt_obj->labels->menu_name, $capability, $menu_slug );
|
144 |
}
|
145 |
|
146 |
-
|
147 |
add_action( "load-{$requests_hook}", array( 'GDPR_Help', 'add_requests_help' ) );
|
148 |
add_action( "load-{$tools_hook}", array( 'GDPR_Help', 'add_tools_help' ) );
|
149 |
add_action( "load-{$settings_hook}", array( 'GDPR_Help', 'add_settings_help' ) );
|
150 |
-
add_action(
|
151 |
}
|
152 |
|
153 |
/**
|
@@ -165,13 +165,13 @@ class GDPR_Admin {
|
|
165 |
}
|
166 |
|
167 |
foreach ( $cookie_categories as $key => $props ) {
|
168 |
-
$key
|
169 |
$output[ $key ] = array(
|
170 |
-
'name'
|
171 |
-
'status'
|
172 |
'cookies_used' => isset( $props['cookies_used'] ) ? sanitize_text_field( wp_unslash( $props['cookies_used'] ) ) : '',
|
173 |
-
'how_we_use'
|
174 |
-
'hosts'
|
175 |
);
|
176 |
if ( isset( $props['hosts'] ) ) {
|
177 |
foreach ( $props['hosts'] as $domain_key => $domain ) {
|
@@ -179,7 +179,7 @@ class GDPR_Admin {
|
|
179 |
|
180 |
$output[ $key ]['hosts'][ $domain_key ] = array(
|
181 |
'cookies_used' => isset( $domain['cookies_used'] ) ? sanitize_text_field( $domain['cookies_used'] ) : '',
|
182 |
-
'optout'
|
183 |
);
|
184 |
}
|
185 |
}
|
@@ -196,7 +196,7 @@ class GDPR_Admin {
|
|
196 |
$settings = array(
|
197 |
'gdpr_cookie_banner_content' => array( $this, 'sanitize_with_links' ),
|
198 |
'gdpr_cookie_privacy_excerpt' => 'sanitize_textarea_field',
|
199 |
-
'gdpr_cookie_popup_content'
|
200 |
'gdpr_email_limit' => 'intval',
|
201 |
'gdpr_consent_types' => array( $this, 'sanitize_consents' ),
|
202 |
'gdpr_deletion_needs_review' => 'boolval',
|
@@ -263,7 +263,7 @@ class GDPR_Admin {
|
|
263 |
*/
|
264 |
public function settings_page_template() {
|
265 |
$registered_cookies = get_option( 'gdpr_cookie_popup_content', array() );
|
266 |
-
$consent_types
|
267 |
|
268 |
$pages = get_pages();
|
269 |
|
@@ -280,7 +280,7 @@ class GDPR_Admin {
|
|
280 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
281 |
*/
|
282 |
public function requests_page_template() {
|
283 |
-
$requests = (
|
284 |
|
285 |
if ( ! empty( $requests ) ) {
|
286 |
foreach ( $requests as $index => $request ) {
|
@@ -292,16 +292,16 @@ class GDPR_Admin {
|
|
292 |
}
|
293 |
|
294 |
$tabs = array(
|
295 |
-
'rectify'
|
296 |
-
'name'
|
297 |
'count' => isset( $rectify ) ? count( $rectify ) : 0,
|
298 |
),
|
299 |
'complaint' => array(
|
300 |
-
'name'
|
301 |
'count' => isset( $complaint ) ? count( $complaint ) : 0,
|
302 |
),
|
303 |
-
'delete'
|
304 |
-
'name'
|
305 |
'count' => isset( $delete ) ? count( $delete ) : 0,
|
306 |
),
|
307 |
);
|
@@ -318,9 +318,9 @@ class GDPR_Admin {
|
|
318 |
public function tools_page_template() {
|
319 |
|
320 |
$tabs = array(
|
321 |
-
'access'
|
322 |
'data-breach' => esc_html__( 'Data Breach', 'gdpr' ),
|
323 |
-
'audit-log'
|
324 |
);
|
325 |
|
326 |
include plugin_dir_path( __FILE__ ) . 'partials/tools.php';
|
@@ -332,26 +332,28 @@ class GDPR_Admin {
|
|
332 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
333 |
*/
|
334 |
public function access_data() {
|
335 |
-
if ( ! isset( $_POST['nonce'], $_POST['email'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'gdpr-access-data' ) ) {
|
336 |
wp_send_json_error();
|
337 |
}
|
338 |
|
339 |
-
$email = sanitize_email( $_POST['email'] );
|
340 |
-
$user
|
341 |
|
342 |
if ( ! $user instanceof WP_User ) {
|
343 |
wp_send_json_error();
|
344 |
}
|
345 |
|
346 |
-
$usermeta
|
347 |
-
$comments = get_comments(
|
348 |
-
|
349 |
-
|
350 |
-
|
|
|
|
|
351 |
$user_consents = get_user_meta( $user->ID, 'gdpr_consents' );
|
352 |
|
353 |
ob_start();
|
354 |
-
echo '<h2>' . $user->display_name . '<span>( ' . $email . ' )</span></h2>';
|
355 |
echo '<table class="widefat">
|
356 |
<tr>
|
357 |
<td class="row-title">Username</td>
|
@@ -462,14 +464,14 @@ class GDPR_Admin {
|
|
462 |
echo '<tr>';
|
463 |
echo '<td class="row-title">' . esc_html( $k ) . '</td>';
|
464 |
echo '<td>';
|
465 |
-
|
466 |
-
|
467 |
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
}
|
472 |
}
|
|
|
473 |
echo '</td>';
|
474 |
echo '</tr>';
|
475 |
}
|
@@ -480,7 +482,12 @@ class GDPR_Admin {
|
|
480 |
do_action( 'admin_access_data_extra_tables', $email );
|
481 |
|
482 |
$result = ob_get_clean();
|
483 |
-
wp_send_json_success(
|
|
|
|
|
|
|
|
|
|
|
484 |
|
485 |
}
|
486 |
|
@@ -490,15 +497,15 @@ class GDPR_Admin {
|
|
490 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
491 |
*/
|
492 |
public function audit_log() {
|
493 |
-
if ( ! isset( $_POST['nonce'], $_POST['email'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'gdpr-audit-log' ) ) {
|
494 |
wp_send_json_error();
|
495 |
}
|
496 |
|
497 |
-
$email = sanitize_email( $_POST['email'] );
|
498 |
$token = null;
|
499 |
|
500 |
-
if ( isset( $_POST['token'] ) ) {
|
501 |
-
$token = sanitize_text_field( wp_unslash( $_POST['token'] ) );
|
502 |
}
|
503 |
|
504 |
$log = GDPR_Audit_log::get_log( $email, $token );
|
@@ -517,26 +524,26 @@ class GDPR_Admin {
|
|
517 |
<div class="notice notice-warning review-after-v2-required is-dismissible">
|
518 |
<h2><?php esc_html_e( 'GDPR' ); ?></h2>
|
519 |
<p><strong><?php esc_html_e( 'Review your settings', 'gdpr' ); ?></strong></p>
|
520 |
-
<p><?php esc_html_e( 'We have added a few new options which must be reviewed before continuing to use the plugin.', 'gdpr'); ?></p>
|
521 |
<p><?php esc_html_e( 'For cookies, we have added a status which allows you to set them as ON, OFF or Required. For consents, we moved the policy selector into each consent. All policies can now be tracked through this.', 'gdpr' ); ?></p>
|
522 |
<p><?php esc_html_e( 'Please keep in mind the plugin might not work as intended until these settings are reviewed.', 'gdpr' ); ?></p>
|
523 |
</div>
|
524 |
<?php
|
525 |
-
|
526 |
}
|
527 |
}
|
528 |
|
529 |
function upgrade_completed( $upgrader_object, $options ) {
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
}
|
541 |
|
542 |
/**
|
@@ -554,9 +561,9 @@ class GDPR_Admin {
|
|
554 |
?>
|
555 |
<div class="notice notice-warning policy-page-updated-notice">
|
556 |
<?php /* translators: Name of the page that was updated. */ ?>
|
557 |
-
<strong><?php echo sprintf( esc_html__( 'Your %s page has been updated.', 'gdpr'), $policy ); ?></strong>
|
558 |
<span>
|
559 |
-
<?php esc_html_e( 'In case this was not a small typo fix, you must ask users for explicit consent again.'
|
560 |
</span>
|
561 |
<span class="spinner"></span>
|
562 |
<form method="post" class="frm-policy-updated">
|
@@ -588,62 +595,65 @@ class GDPR_Admin {
|
|
588 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
589 |
*/
|
590 |
public function send_data_breach_confirmation_email() {
|
591 |
-
if ( ! isset( $_POST['gdpr_data_breach_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST[
|
592 |
wp_die( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
|
593 |
}
|
594 |
|
595 |
if (
|
596 |
! isset(
|
597 |
-
$_POST['gdpr-data-breach-email-content'],
|
598 |
-
$_POST['gdpr-data-breach-nature'],
|
599 |
-
$_POST['gdpr-name-contact-details-protection-officer'],
|
600 |
-
$_POST['gdpr-likely-consequences'],
|
601 |
-
$_POST['gdpr-measures-taken']
|
602 |
)
|
603 |
) {
|
604 |
wp_die( esc_html__( 'One or more required fields are missing. Please try again.', 'gdpr' ) );
|
605 |
}
|
606 |
|
607 |
-
$email
|
608 |
-
$user
|
609 |
-
$content
|
610 |
-
$nature
|
611 |
-
$office_contact = sanitize_textarea_field( wp_unslash( $_POST['gdpr-name-contact-details-protection-officer'] ) );
|
612 |
-
$consequences
|
613 |
-
$measures
|
614 |
|
615 |
$key = wp_generate_password( 20, false );
|
616 |
-
update_option(
|
617 |
-
'
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
|
|
|
|
624 |
|
625 |
$confirm_url = add_query_arg(
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
);
|
632 |
|
633 |
GDPR_Email::send(
|
634 |
$email,
|
635 |
'data-breach-request',
|
636 |
array(
|
637 |
-
'requester'
|
638 |
-
'nature'=> $nature,
|
639 |
'office_contact' => $office_contact,
|
640 |
-
'consequences'
|
641 |
-
'measures'
|
642 |
-
'confirm_url'
|
643 |
)
|
644 |
);
|
645 |
|
646 |
-
|
|
|
647 |
wp_unschedule_event( $time, 'clean_gdpr_data_breach_request' );
|
648 |
}
|
649 |
wp_schedule_single_event( time() + 2 * DAY_IN_SECONDS, 'clean_gdpr_data_breach_request' );
|
@@ -654,7 +664,7 @@ class GDPR_Admin {
|
|
654 |
esc_url_raw(
|
655 |
add_query_arg(
|
656 |
array(
|
657 |
-
'settings-updated' => true
|
658 |
),
|
659 |
wp_get_referer() . '#data-breach'
|
660 |
)
|
@@ -679,9 +689,9 @@ class GDPR_Admin {
|
|
679 |
*/
|
680 |
public function telemetry_cleanup() {
|
681 |
$args = array(
|
682 |
-
'post_type'
|
683 |
'posts_per_page' => -1,
|
684 |
-
'fields'
|
685 |
);
|
686 |
|
687 |
$telemetry_posts = get_posts( $args );
|
@@ -692,7 +702,7 @@ class GDPR_Admin {
|
|
692 |
}
|
693 |
|
694 |
/**
|
695 |
-
* Sanitizes the consents during
|
696 |
* @since 1.0.0
|
697 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
698 |
* @param WP_Error $errors The error object.
|
@@ -701,24 +711,26 @@ class GDPR_Admin {
|
|
701 |
* @return WP_Error WP_Error object with added errors or not.
|
702 |
*/
|
703 |
public function registration_errors( $errors, $sanitized_user_login, $user_email ) {
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
|
|
|
|
722 |
}
|
723 |
|
724 |
/**
|
@@ -727,20 +739,22 @@ class GDPR_Admin {
|
|
727 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
728 |
*/
|
729 |
public function seek_consent() {
|
730 |
-
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'gdpr-seek-consent' ) ) {
|
731 |
wp_send_json_error( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
|
732 |
}
|
733 |
|
734 |
-
$policy_id
|
735 |
-
$policy_name
|
736 |
$policies_updated = get_option( 'gdpr_policies_updated', array() );
|
737 |
|
738 |
unset( $policies_updated[ $policy_id ] );
|
739 |
update_option( 'gdpr_policies_updated', $policies_updated );
|
740 |
|
741 |
-
$users = get_users(
|
742 |
-
|
743 |
-
|
|
|
|
|
744 |
|
745 |
foreach ( $users as $user ) {
|
746 |
$usermeta = get_user_meta( $user->ID, 'gdpr_consents' );
|
@@ -758,23 +772,27 @@ class GDPR_Admin {
|
|
758 |
* Check if the privacy policy page content has been updated or not.
|
759 |
* @since 1.0.0
|
760 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
761 |
-
* @param int $
|
762 |
* @param WP_Post $post The post object.
|
763 |
*/
|
764 |
-
public function policy_updated( $
|
765 |
-
$policies_updated
|
766 |
-
$consents
|
767 |
-
$required_consents = array_filter(
|
768 |
-
|
769 |
-
|
|
|
|
|
770 |
|
771 |
if ( ! empty( $required_consents ) ) {
|
772 |
foreach ( $required_consents as $consent_id => $consent ) {
|
773 |
-
if ( $
|
774 |
-
$revisions = wp_get_post_revisions( $
|
775 |
-
$revisions = array_filter(
|
776 |
-
|
777 |
-
|
|
|
|
|
778 |
|
779 |
reset( $revisions );
|
780 |
if ( current( $revisions )->post_content !== $post->post_content ) {
|
@@ -792,11 +810,11 @@ class GDPR_Admin {
|
|
792 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
793 |
*/
|
794 |
public function ignore_policy_update() {
|
795 |
-
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'gdpr-ignore-update' ) ) {
|
796 |
wp_send_json_error( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
|
797 |
}
|
798 |
|
799 |
-
$policy
|
800 |
$policies_updated = get_option( 'gdpr_policies_updated', array() );
|
801 |
unset( $policies_updated[ $policy ] );
|
802 |
update_option( 'gdpr_policies_updated', $policies_updated );
|
@@ -816,26 +834,26 @@ class GDPR_Admin {
|
|
816 |
return;
|
817 |
}
|
818 |
?>
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
|
840 |
<?php
|
841 |
}
|
@@ -847,11 +865,11 @@ class GDPR_Admin {
|
|
847 |
* @param int $user_id The user ID.
|
848 |
*/
|
849 |
public function user_profile_update( $user_id ) {
|
850 |
-
if ( ! isset( $_POST['user_consents'] ) ) {
|
851 |
return;
|
852 |
}
|
853 |
|
854 |
-
$consents = array_map( 'sanitize_text_field', (array) $_POST['user_consents'] );
|
855 |
|
856 |
GDPR_Audit_Log::log( $user_id, esc_html__( 'Profile Updated. These are the user consents after the save:', 'gdpr' ) );
|
857 |
|
@@ -863,7 +881,7 @@ class GDPR_Admin {
|
|
863 |
GDPR_Audit_Log::log( $user_id, $consent );
|
864 |
}
|
865 |
|
866 |
-
setcookie(
|
867 |
}
|
868 |
|
869 |
/**
|
@@ -875,13 +893,17 @@ class GDPR_Admin {
|
|
875 |
public function woocommerce_consent_checkboxes( $fields ) {
|
876 |
$consent_types = get_option( 'gdpr_consent_types', array() );
|
877 |
|
|
|
|
|
|
|
|
|
878 |
foreach ( $consent_types as $key => $consent ) {
|
879 |
$required = ( isset( $consent['policy-page'] ) && $consent['policy-page'] ) ? 'required' : '';
|
880 |
|
881 |
-
$fields['account']['user_consents_' . esc_attr( $key ) ] = array(
|
882 |
-
'type'
|
883 |
-
'label'
|
884 |
-
'required'
|
885 |
);
|
886 |
}
|
887 |
return $fields;
|
@@ -895,10 +917,12 @@ class GDPR_Admin {
|
|
895 |
* @param array $data All data submitted during checkout.
|
896 |
*/
|
897 |
public function woocommerce_checkout_save_consent( $customer_id, $data ) {
|
898 |
-
$data
|
899 |
-
$consent_arr = array_filter(
|
900 |
-
|
901 |
-
|
|
|
|
|
902 |
|
903 |
foreach ( $consent_arr as $key => $value ) {
|
904 |
$consent = str_replace( 'user_consents_', '', $value );
|
@@ -919,10 +943,10 @@ class GDPR_Admin {
|
|
919 |
public function add_consents_to_consents_column( $val, $column_name, $user_id ) {
|
920 |
if ( 'consents' === $column_name ) {
|
921 |
$user_consents = get_user_meta( $user_id, 'gdpr_consents' );
|
922 |
-
return implode(', ', $user_consents );
|
923 |
}
|
924 |
|
925 |
-
|
926 |
}
|
927 |
|
928 |
public function add_consents_column_to_user_table( $column_headers ) {
|
62 |
$this->version = $version;
|
63 |
$this->allowed_html = array(
|
64 |
'a' => array(
|
65 |
+
'href' => true,
|
66 |
+
'title' => true,
|
67 |
'target' => true,
|
68 |
),
|
69 |
);
|
103 |
$function = array( $this, 'requests_page_template' );
|
104 |
$icon_url = 'dashicons-id';
|
105 |
|
106 |
+
$requests = get_option( 'gdpr_requests', array() );
|
107 |
+
$confirmed_requests = array_filter(
|
108 |
+
$requests, function( $item ) {
|
109 |
+
return true === $item['confirmed'];
|
110 |
+
}
|
111 |
+
);
|
112 |
|
113 |
+
$menu_title = esc_html__( 'GDPR', 'gdpr' );
|
114 |
if ( count( $confirmed_requests ) ) {
|
115 |
+
$menu_title = sprintf( esc_html( 'GDPR %s' ), '<span class="awaiting-mod">' . count( $confirmed_requests ) . '</span>' );
|
116 |
}
|
117 |
|
118 |
add_menu_page( $page_title, $menu_title, $capability, $parent_slug, $function, $icon_url );
|
135 |
|
136 |
$settings_hook = add_submenu_page( $parent_slug, $menu_title, $menu_title, $capability, $menu_slug, $function );
|
137 |
|
138 |
+
$menu_slug = 'edit.php?post_type=telemetry';
|
139 |
|
140 |
+
$cpt = 'telemetry';
|
|
|
|
|
141 |
$cpt_obj = get_post_type_object( $cpt );
|
142 |
|
143 |
if ( $cpt_obj ) {
|
144 |
add_submenu_page( $parent_slug, $cpt_obj->labels->name, $cpt_obj->labels->menu_name, $capability, $menu_slug );
|
145 |
}
|
146 |
|
|
|
147 |
add_action( "load-{$requests_hook}", array( 'GDPR_Help', 'add_requests_help' ) );
|
148 |
add_action( "load-{$tools_hook}", array( 'GDPR_Help', 'add_tools_help' ) );
|
149 |
add_action( "load-{$settings_hook}", array( 'GDPR_Help', 'add_settings_help' ) );
|
150 |
+
add_action( 'load-edit.php', array( 'GDPR_Help', 'add_telemetry_help' ) );
|
151 |
}
|
152 |
|
153 |
/**
|
165 |
}
|
166 |
|
167 |
foreach ( $cookie_categories as $key => $props ) {
|
168 |
+
$key = sanitize_text_field( $key );
|
169 |
$output[ $key ] = array(
|
170 |
+
'name' => isset( $props['name'] ) ? sanitize_text_field( $props['name'] ) : '',
|
171 |
+
'status' => isset( $props['status'] ) ? sanitize_text_field( $props['status'] ) : '',
|
172 |
'cookies_used' => isset( $props['cookies_used'] ) ? sanitize_text_field( wp_unslash( $props['cookies_used'] ) ) : '',
|
173 |
+
'how_we_use' => isset( $props['how_we_use'] ) ? wp_kses_post( $props['how_we_use'] ) : '',
|
174 |
+
'hosts' => array(),
|
175 |
);
|
176 |
if ( isset( $props['hosts'] ) ) {
|
177 |
foreach ( $props['hosts'] as $domain_key => $domain ) {
|
179 |
|
180 |
$output[ $key ]['hosts'][ $domain_key ] = array(
|
181 |
'cookies_used' => isset( $domain['cookies_used'] ) ? sanitize_text_field( $domain['cookies_used'] ) : '',
|
182 |
+
'optout' => isset( $domain['optout'] ) ? esc_url_raw( $domain['optout'] ) : '',
|
183 |
);
|
184 |
}
|
185 |
}
|
196 |
$settings = array(
|
197 |
'gdpr_cookie_banner_content' => array( $this, 'sanitize_with_links' ),
|
198 |
'gdpr_cookie_privacy_excerpt' => 'sanitize_textarea_field',
|
199 |
+
'gdpr_cookie_popup_content' => array( $this, 'sanitize_cookie_categories' ),
|
200 |
'gdpr_email_limit' => 'intval',
|
201 |
'gdpr_consent_types' => array( $this, 'sanitize_consents' ),
|
202 |
'gdpr_deletion_needs_review' => 'boolval',
|
263 |
*/
|
264 |
public function settings_page_template() {
|
265 |
$registered_cookies = get_option( 'gdpr_cookie_popup_content', array() );
|
266 |
+
$consent_types = get_option( 'gdpr_consent_types', array() );
|
267 |
|
268 |
$pages = get_pages();
|
269 |
|
280 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
281 |
*/
|
282 |
public function requests_page_template() {
|
283 |
+
$requests = (array) get_option( 'gdpr_requests', array() );
|
284 |
|
285 |
if ( ! empty( $requests ) ) {
|
286 |
foreach ( $requests as $index => $request ) {
|
292 |
}
|
293 |
|
294 |
$tabs = array(
|
295 |
+
'rectify' => array(
|
296 |
+
'name' => __( 'Rectify Data', 'gdpr' ),
|
297 |
'count' => isset( $rectify ) ? count( $rectify ) : 0,
|
298 |
),
|
299 |
'complaint' => array(
|
300 |
+
'name' => __( 'Complaint', 'gdpr' ),
|
301 |
'count' => isset( $complaint ) ? count( $complaint ) : 0,
|
302 |
),
|
303 |
+
'delete' => array(
|
304 |
+
'name' => __( 'Erasure', 'gdpr' ),
|
305 |
'count' => isset( $delete ) ? count( $delete ) : 0,
|
306 |
),
|
307 |
);
|
318 |
public function tools_page_template() {
|
319 |
|
320 |
$tabs = array(
|
321 |
+
'access' => esc_html__( 'Access Data', 'gdpr' ),
|
322 |
'data-breach' => esc_html__( 'Data Breach', 'gdpr' ),
|
323 |
+
'audit-log' => esc_html__( 'Audit Log', 'gdpr' ),
|
324 |
);
|
325 |
|
326 |
include plugin_dir_path( __FILE__ ) . 'partials/tools.php';
|
332 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
333 |
*/
|
334 |
public function access_data() {
|
335 |
+
if ( ! isset( $_POST['nonce'], $_POST['email'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'gdpr-access-data' ) ) { // WPCS: Input var ok.
|
336 |
wp_send_json_error();
|
337 |
}
|
338 |
|
339 |
+
$email = sanitize_email( wp_unslash( $_POST['email'] ) ); // WPCS: Input var ok.
|
340 |
+
$user = get_user_by( 'email', $email );
|
341 |
|
342 |
if ( ! $user instanceof WP_User ) {
|
343 |
wp_send_json_error();
|
344 |
}
|
345 |
|
346 |
+
$usermeta = GDPR::get_user_meta( $user->ID );
|
347 |
+
$comments = get_comments(
|
348 |
+
array(
|
349 |
+
'author_email' => $user->user_email,
|
350 |
+
'include_unapproved' => true,
|
351 |
+
)
|
352 |
+
);
|
353 |
$user_consents = get_user_meta( $user->ID, 'gdpr_consents' );
|
354 |
|
355 |
ob_start();
|
356 |
+
echo '<h2>' . esc_html( $user->display_name ) . '<span>( ' . esc_html( $email ) . ' )</span></h2>';
|
357 |
echo '<table class="widefat">
|
358 |
<tr>
|
359 |
<td class="row-title">Username</td>
|
464 |
echo '<tr>';
|
465 |
echo '<td class="row-title">' . esc_html( $k ) . '</td>';
|
466 |
echo '<td>';
|
467 |
+
foreach ( $v as $value ) {
|
468 |
+
if ( is_serialized( $value ) ) {
|
469 |
|
470 |
+
echo '<pre>' . esc_html( print_r( maybe_unserialize( $value ), true ) ) . '</pre><br />';
|
471 |
+
} else {
|
472 |
+
echo esc_html( print_r( $value, true ) ) . '<br />';
|
|
|
473 |
}
|
474 |
+
}
|
475 |
echo '</td>';
|
476 |
echo '</tr>';
|
477 |
}
|
482 |
do_action( 'admin_access_data_extra_tables', $email );
|
483 |
|
484 |
$result = ob_get_clean();
|
485 |
+
wp_send_json_success(
|
486 |
+
array(
|
487 |
+
'user_email' => $email,
|
488 |
+
'result' => $result,
|
489 |
+
)
|
490 |
+
);
|
491 |
|
492 |
}
|
493 |
|
497 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
498 |
*/
|
499 |
public function audit_log() {
|
500 |
+
if ( ! isset( $_POST['nonce'], $_POST['email'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'gdpr-audit-log' ) ) { // WPCS: Input var ok.
|
501 |
wp_send_json_error();
|
502 |
}
|
503 |
|
504 |
+
$email = sanitize_email( wp_unslash( $_POST['email'] ) ); // WPCS: Input var ok.
|
505 |
$token = null;
|
506 |
|
507 |
+
if ( isset( $_POST['token'] ) ) { // WPCS: Input var ok.
|
508 |
+
$token = sanitize_text_field( wp_unslash( $_POST['token'] ) ); // WPCS: Input var ok.
|
509 |
}
|
510 |
|
511 |
$log = GDPR_Audit_log::get_log( $email, $token );
|
524 |
<div class="notice notice-warning review-after-v2-required is-dismissible">
|
525 |
<h2><?php esc_html_e( 'GDPR' ); ?></h2>
|
526 |
<p><strong><?php esc_html_e( 'Review your settings', 'gdpr' ); ?></strong></p>
|
527 |
+
<p><?php esc_html_e( 'We have added a few new options which must be reviewed before continuing to use the plugin.', 'gdpr' ); ?></p>
|
528 |
<p><?php esc_html_e( 'For cookies, we have added a status which allows you to set them as ON, OFF or Required. For consents, we moved the policy selector into each consent. All policies can now be tracked through this.', 'gdpr' ); ?></p>
|
529 |
<p><?php esc_html_e( 'Please keep in mind the plugin might not work as intended until these settings are reviewed.', 'gdpr' ); ?></p>
|
530 |
</div>
|
531 |
<?php
|
532 |
+
delete_transient( 'gdpr_updated' );
|
533 |
}
|
534 |
}
|
535 |
|
536 |
function upgrade_completed( $upgrader_object, $options ) {
|
537 |
+
// If an update has taken place and the updated type is plugins and the plugins element exists
|
538 |
+
if ( 'update' === $options['action'] && 'plugin' === $options['type'] && isset( $options['plugins'] ) ) {
|
539 |
+
// Iterate through the plugins being updated and check if ours is there
|
540 |
+
foreach ( $options['plugins'] as $plugin ) {
|
541 |
+
if ( 'gdpr/gdpr.php' === $plugin ) {
|
542 |
+
// Set a transient to record that our plugin has just been updated
|
543 |
+
set_transient( 'gdpr_updated', 1 );
|
544 |
+
}
|
545 |
+
}
|
546 |
+
}
|
547 |
}
|
548 |
|
549 |
/**
|
561 |
?>
|
562 |
<div class="notice notice-warning policy-page-updated-notice">
|
563 |
<?php /* translators: Name of the page that was updated. */ ?>
|
564 |
+
<strong><?php echo sprintf( esc_html__( 'Your %s page has been updated.', 'gdpr' ), esc_html( $policy ) ); ?></strong>
|
565 |
<span>
|
566 |
+
<?php esc_html_e( 'In case this was not a small typo fix, you must ask users for explicit consent again.', 'gdpr' ); ?>
|
567 |
</span>
|
568 |
<span class="spinner"></span>
|
569 |
<form method="post" class="frm-policy-updated">
|
595 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
596 |
*/
|
597 |
public function send_data_breach_confirmation_email() {
|
598 |
+
if ( ! isset( $_POST['gdpr_data_breach_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['gdpr_data_breach_nonce'] ), 'gdpr-data-breach' ) ) { // WPCS: Input var ok.
|
599 |
wp_die( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
|
600 |
}
|
601 |
|
602 |
if (
|
603 |
! isset(
|
604 |
+
$_POST['gdpr-data-breach-email-content'], // WPCS: Input var ok.
|
605 |
+
$_POST['gdpr-data-breach-nature'], // WPCS: Input var ok.
|
606 |
+
$_POST['gdpr-name-contact-details-protection-officer'], // WPCS: Input var ok.
|
607 |
+
$_POST['gdpr-likely-consequences'], // WPCS: Input var ok.
|
608 |
+
$_POST['gdpr-measures-taken'] // WPCS: Input var ok.
|
609 |
)
|
610 |
) {
|
611 |
wp_die( esc_html__( 'One or more required fields are missing. Please try again.', 'gdpr' ) );
|
612 |
}
|
613 |
|
614 |
+
$email = get_bloginfo( 'admin_email' );
|
615 |
+
$user = wp_get_current_user();
|
616 |
+
$content = sanitize_textarea_field( wp_unslash( $_POST['gdpr-data-breach-email-content'] ) ); // WPCS: Input var ok.
|
617 |
+
$nature = sanitize_textarea_field( wp_unslash( $_POST['gdpr-data-breach-nature'] ) ); // WPCS: Input var ok.
|
618 |
+
$office_contact = sanitize_textarea_field( wp_unslash( $_POST['gdpr-name-contact-details-protection-officer'] ) ); // WPCS: Input var ok.
|
619 |
+
$consequences = sanitize_textarea_field( wp_unslash( $_POST['gdpr-likely-consequences'] ) ); // WPCS: Input var ok.
|
620 |
+
$measures = sanitize_textarea_field( wp_unslash( $_POST['gdpr-measures-taken'] ) ); // WPCS: Input var ok.
|
621 |
|
622 |
$key = wp_generate_password( 20, false );
|
623 |
+
update_option(
|
624 |
+
'gdpr_data_breach_initiated', array(
|
625 |
+
'key' => $key,
|
626 |
+
'content' => $content,
|
627 |
+
'nature' => $nature,
|
628 |
+
'office_contact' => $office_contact,
|
629 |
+
'consequences' => $consequences,
|
630 |
+
'measures' => $measures,
|
631 |
+
)
|
632 |
+
);
|
633 |
|
634 |
$confirm_url = add_query_arg(
|
635 |
+
array(
|
636 |
+
'type' => 'data-breach-confirmed',
|
637 |
+
'key' => $key,
|
638 |
+
),
|
639 |
+
get_home_url() . wp_get_referer() . '#data-breach'
|
640 |
);
|
641 |
|
642 |
GDPR_Email::send(
|
643 |
$email,
|
644 |
'data-breach-request',
|
645 |
array(
|
646 |
+
'requester' => $user->user_email,
|
647 |
+
'nature' => $nature,
|
648 |
'office_contact' => $office_contact,
|
649 |
+
'consequences' => $consequences,
|
650 |
+
'measures' => $measures,
|
651 |
+
'confirm_url' => $confirm_url,
|
652 |
)
|
653 |
);
|
654 |
|
655 |
+
$time = wp_next_scheduled( 'clean_gdpr_data_breach_request' );
|
656 |
+
if ( $time ) {
|
657 |
wp_unschedule_event( $time, 'clean_gdpr_data_breach_request' );
|
658 |
}
|
659 |
wp_schedule_single_event( time() + 2 * DAY_IN_SECONDS, 'clean_gdpr_data_breach_request' );
|
664 |
esc_url_raw(
|
665 |
add_query_arg(
|
666 |
array(
|
667 |
+
'settings-updated' => true,
|
668 |
),
|
669 |
wp_get_referer() . '#data-breach'
|
670 |
)
|
689 |
*/
|
690 |
public function telemetry_cleanup() {
|
691 |
$args = array(
|
692 |
+
'post_type' => 'telemetry',
|
693 |
'posts_per_page' => -1,
|
694 |
+
'fields' => 'ids',
|
695 |
);
|
696 |
|
697 |
$telemetry_posts = get_posts( $args );
|
702 |
}
|
703 |
|
704 |
/**
|
705 |
+
* Sanitizes the consents during WordPress registration.
|
706 |
* @since 1.0.0
|
707 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
708 |
* @param WP_Error $errors The error object.
|
711 |
* @return WP_Error WP_Error object with added errors or not.
|
712 |
*/
|
713 |
public function registration_errors( $errors, $sanitized_user_login, $user_email ) {
|
714 |
+
$consent_types = get_option( 'gdpr_consent_types', array() );
|
715 |
+
if ( empty( $consent_types ) ) {
|
716 |
+
return $errors;
|
717 |
+
}
|
718 |
+
|
719 |
+
foreach ( $consent_types as $key => $consent ) {
|
720 |
+
if ( $consent['policy-page'] ) {
|
721 |
+
if ( ! isset( $_POST['user_consents'][ $key ] ) ) { // WPCS: Input var ok, CSRF ok.
|
722 |
+
$errors->add(
|
723 |
+
'missing_required_consents', sprintf(
|
724 |
+
'<strong>%s</strong>: %s %s.',
|
725 |
+
__( 'ERROR', 'gdpr' ),
|
726 |
+
$consent['name'],
|
727 |
+
__( 'is a required consent', 'gdpr' )
|
728 |
+
)
|
729 |
+
);
|
730 |
+
}
|
731 |
+
}
|
732 |
+
}
|
733 |
+
return $errors;
|
734 |
}
|
735 |
|
736 |
/**
|
739 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
740 |
*/
|
741 |
public function seek_consent() {
|
742 |
+
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'gdpr-seek-consent' ) ) { // WPCS: Input var ok.
|
743 |
wp_send_json_error( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
|
744 |
}
|
745 |
|
746 |
+
$policy_id = isset( $_POST['policy_id'] ) ? sanitize_text_field( wp_unslash( $_POST['policy_id'] ) ) : ''; // WPCS: Input var ok.
|
747 |
+
$policy_name = isset( $_POST['policy_name'] ) ? sanitize_text_field( wp_unslash( $_POST['policy_name'] ) ) : ''; // WPCS: Input var ok.
|
748 |
$policies_updated = get_option( 'gdpr_policies_updated', array() );
|
749 |
|
750 |
unset( $policies_updated[ $policy_id ] );
|
751 |
update_option( 'gdpr_policies_updated', $policies_updated );
|
752 |
|
753 |
+
$users = get_users(
|
754 |
+
array(
|
755 |
+
'fields' => 'all_with_meta',
|
756 |
+
)
|
757 |
+
);
|
758 |
|
759 |
foreach ( $users as $user ) {
|
760 |
$usermeta = get_user_meta( $user->ID, 'gdpr_consents' );
|
772 |
* Check if the privacy policy page content has been updated or not.
|
773 |
* @since 1.0.0
|
774 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
775 |
+
* @param int $id The page ID.
|
776 |
* @param WP_Post $post The post object.
|
777 |
*/
|
778 |
+
public function policy_updated( $id, $post ) {
|
779 |
+
$policies_updated = get_option( 'gdpr_policies_updated', array() );
|
780 |
+
$consents = get_option( 'gdpr_consent_types', array() );
|
781 |
+
$required_consents = array_filter(
|
782 |
+
$consents, function( $consent ) {
|
783 |
+
return ! empty( $consent['policy-page'] );
|
784 |
+
}
|
785 |
+
);
|
786 |
|
787 |
if ( ! empty( $required_consents ) ) {
|
788 |
foreach ( $required_consents as $consent_id => $consent ) {
|
789 |
+
if ( $id === $consent['policy-page'] ) {
|
790 |
+
$revisions = wp_get_post_revisions( $id );
|
791 |
+
$revisions = array_filter(
|
792 |
+
$revisions, function( $rev ) {
|
793 |
+
return strpos( $rev->post_name, 'autosave' ) === false;
|
794 |
+
}
|
795 |
+
);
|
796 |
|
797 |
reset( $revisions );
|
798 |
if ( current( $revisions )->post_content !== $post->post_content ) {
|
810 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
811 |
*/
|
812 |
public function ignore_policy_update() {
|
813 |
+
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'gdpr-ignore-update' ) ) { // WPCS: Input var ok.
|
814 |
wp_send_json_error( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
|
815 |
}
|
816 |
|
817 |
+
$policy = isset( $_POST['policy_id'] ) ? sanitize_text_field( wp_unslash( $_POST['policy_id'] ) ) : ''; // WPCS: Input var ok.
|
818 |
$policies_updated = get_option( 'gdpr_policies_updated', array() );
|
819 |
unset( $policies_updated[ $policy ] );
|
820 |
update_option( 'gdpr_policies_updated', $policies_updated );
|
834 |
return;
|
835 |
}
|
836 |
?>
|
837 |
+
<h3><?php esc_html_e( 'Consent Management', 'gdpr' ); ?></h3>
|
838 |
+
|
839 |
+
<table class="form-table">
|
840 |
+
<?php foreach ( $consent_types as $consent_key => $consent ) : ?>
|
841 |
+
<tr>
|
842 |
+
<th>
|
843 |
+
<label><?php echo esc_html( $consent['name'] ); ?></label>
|
844 |
+
</th>
|
845 |
+
<td>
|
846 |
+
<?php if ( $consent['required'] ) : ?>
|
847 |
+
<input type="checkbox" name="user_consents[]" value="<?php echo esc_attr( $consent_key ); ?>" disabled checked>
|
848 |
+
<input type="hidden" name="user_consents[]" value="<?php echo esc_attr( $consent_key ); ?>">
|
849 |
+
<?php else : ?>
|
850 |
+
<input type="checkbox" name="user_consents[]" value="<?php echo esc_attr( $consent_key ); ?>" <?php echo ! empty( $user_consents ) ? checked( in_array( $consent_key, $user_consents, true ), 1, false ) : ''; ?>>
|
851 |
+
<?php endif ?>
|
852 |
+
<span class="description"><?php echo wp_kses( $consent['description'], $this->allowed_html ); ?></span>
|
853 |
+
</td>
|
854 |
+
</tr>
|
855 |
+
<?php endforeach ?>
|
856 |
+
</table>
|
857 |
|
858 |
<?php
|
859 |
}
|
865 |
* @param int $user_id The user ID.
|
866 |
*/
|
867 |
public function user_profile_update( $user_id ) {
|
868 |
+
if ( ! isset( $_POST['user_consents'] ) ) { // WPCS: Input var ok, CSRF ok.
|
869 |
return;
|
870 |
}
|
871 |
|
872 |
+
$consents = array_map( 'sanitize_text_field', (array) wp_unslash( $_POST['user_consents'] ) ); // WPCS: Input var ok, CSRF ok.
|
873 |
|
874 |
GDPR_Audit_Log::log( $user_id, esc_html__( 'Profile Updated. These are the user consents after the save:', 'gdpr' ) );
|
875 |
|
881 |
GDPR_Audit_Log::log( $user_id, $consent );
|
882 |
}
|
883 |
|
884 |
+
setcookie( 'gdpr[consent_types]', json_encode( $consents ), time() + YEAR_IN_SECONDS, '/' );
|
885 |
}
|
886 |
|
887 |
/**
|
893 |
public function woocommerce_consent_checkboxes( $fields ) {
|
894 |
$consent_types = get_option( 'gdpr_consent_types', array() );
|
895 |
|
896 |
+
if ( empty( $consent_types ) ) {
|
897 |
+
return $fields;
|
898 |
+
}
|
899 |
+
|
900 |
foreach ( $consent_types as $key => $consent ) {
|
901 |
$required = ( isset( $consent['policy-page'] ) && $consent['policy-page'] ) ? 'required' : '';
|
902 |
|
903 |
+
$fields['account'][ 'user_consents_' . esc_attr( $key ) ] = array(
|
904 |
+
'type' => 'checkbox',
|
905 |
+
'label' => wp_kses( $consent['registration'], $this->allowed_html ),
|
906 |
+
'required' => $required,
|
907 |
);
|
908 |
}
|
909 |
return $fields;
|
917 |
* @param array $data All data submitted during checkout.
|
918 |
*/
|
919 |
public function woocommerce_checkout_save_consent( $customer_id, $data ) {
|
920 |
+
$data = array_filter( $data );
|
921 |
+
$consent_arr = array_filter(
|
922 |
+
array_keys( $data ), function( $item ) {
|
923 |
+
return false !== strpos( $item, 'user_consents_' );
|
924 |
+
}
|
925 |
+
);
|
926 |
|
927 |
foreach ( $consent_arr as $key => $value ) {
|
928 |
$consent = str_replace( 'user_consents_', '', $value );
|
943 |
public function add_consents_to_consents_column( $val, $column_name, $user_id ) {
|
944 |
if ( 'consents' === $column_name ) {
|
945 |
$user_consents = get_user_meta( $user_id, 'gdpr_consents' );
|
946 |
+
return implode( ', ', $user_consents );
|
947 |
}
|
948 |
|
949 |
+
return $val;
|
950 |
}
|
951 |
|
952 |
public function add_consents_column_to_user_table( $column_headers ) {
|
admin/class-gdpr-requests-admin.php
CHANGED
@@ -26,12 +26,12 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
26 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
27 |
*/
|
28 |
public function add_to_deletion_requests() {
|
29 |
-
if ( ! isset( $_POST['gdpr_deletion_requests_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['gdpr_deletion_requests_nonce'] ), 'gdpr-add-to-deletion-requests' ) ) {
|
30 |
wp_die( esc_html__( 'We could not verify the user email or the security token. Please try again.', 'gdpr' ) );
|
31 |
}
|
32 |
|
33 |
-
$email = sanitize_email( $_POST['user_email'] );
|
34 |
-
$user
|
35 |
|
36 |
if ( ! $user instanceof WP_User ) {
|
37 |
add_settings_error( 'gdpr-requests', 'invalid-user', esc_html__( 'User not found.', 'gdpr' ), 'error' );
|
@@ -40,7 +40,7 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
40 |
esc_url_raw(
|
41 |
add_query_arg(
|
42 |
array(
|
43 |
-
'settings-updated' => true
|
44 |
),
|
45 |
wp_get_referer() . '#delete'
|
46 |
)
|
@@ -48,10 +48,12 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
48 |
);
|
49 |
exit;
|
50 |
} else {
|
51 |
-
if ( in_array( 'administrator', $user->roles ) ) {
|
52 |
-
$admins_query = new WP_User_Query(
|
53 |
-
|
54 |
-
|
|
|
|
|
55 |
if ( 1 === $admins_query->get_total() ) {
|
56 |
/* translators: User email */
|
57 |
add_settings_error( 'gdpr-requests', 'invalid-request', sprintf( esc_html__( 'User %s is the only admin of the site. It cannot be deleted.', 'gdpr' ), $email ), 'error' );
|
@@ -60,7 +62,7 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
60 |
esc_url_raw(
|
61 |
add_query_arg(
|
62 |
array(
|
63 |
-
'settings-updated' => true
|
64 |
),
|
65 |
wp_get_referer() . '#delete'
|
66 |
)
|
@@ -71,7 +73,7 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
71 |
}
|
72 |
}
|
73 |
|
74 |
-
$requests = (
|
75 |
|
76 |
if ( empty( $requests ) ) {
|
77 |
parent::add_to_requests( $email, 'delete', null, true );
|
@@ -83,7 +85,7 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
83 |
esc_url_raw(
|
84 |
add_query_arg(
|
85 |
array(
|
86 |
-
'settings-updated' => true
|
87 |
),
|
88 |
wp_get_referer() . '#delete'
|
89 |
)
|
@@ -92,10 +94,12 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
92 |
exit;
|
93 |
}
|
94 |
|
95 |
-
$deletion_requests = array_filter(
|
96 |
-
|
97 |
-
|
98 |
-
|
|
|
|
|
99 |
|
100 |
if ( false !== $user_has_already_requested ) {
|
101 |
add_settings_error( 'gdpr-requests', 'invalid-user', esc_html__( 'User already placed a deletion request.', 'gdpr' ), 'error' );
|
@@ -104,7 +108,7 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
104 |
esc_url_raw(
|
105 |
add_query_arg(
|
106 |
array(
|
107 |
-
'settings-updated' => true
|
108 |
),
|
109 |
wp_get_referer() . '#delete'
|
110 |
)
|
@@ -122,7 +126,7 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
122 |
esc_url_raw(
|
123 |
add_query_arg(
|
124 |
array(
|
125 |
-
'settings-updated' => true
|
126 |
),
|
127 |
wp_get_referer() . '#delete'
|
128 |
)
|
@@ -137,26 +141,26 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
137 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
138 |
*/
|
139 |
public function cancel_request() {
|
140 |
-
if ( ! isset( $_POST['type'] ) ) {
|
141 |
wp_die( esc_html__( 'We could not verify the type of request you want to cancel.', 'gdpr' ) );
|
142 |
}
|
143 |
|
144 |
-
$type
|
145 |
$allowed_types = parent::get_allowed_types();
|
146 |
|
147 |
-
if ( ! in_array( $type, $allowed_types ) ) {
|
148 |
/* translators: The type of request */
|
149 |
-
wp_die( sprintf( esc_html__( 'Type of request \'%s\' is not an allowed type.', 'gdpr' ), $type ) );
|
150 |
}
|
151 |
|
152 |
$nonce_field = 'gdpr_cancel_' . $type . '_nonce';
|
153 |
|
154 |
-
if ( ! isset( $_POST[ $nonce_field ], $_POST['user_email'], $_POST['index'] ) || ! wp_verify_nonce( sanitize_key( $_POST[ $nonce_field ] ), 'gdpr-request-nonce' ) ) {
|
155 |
wp_die( esc_html__( 'We could not verify the user email or the security token. Please try again.', 'gdpr' ) );
|
156 |
}
|
157 |
|
158 |
-
$email = sanitize_email( $_POST['user_email'] );
|
159 |
-
$index = sanitize_text_field( wp_unslash( $_POST['index'] ) );
|
160 |
|
161 |
parent::remove_from_requests( $index );
|
162 |
$user = get_user_by( 'email', $email );
|
@@ -170,7 +174,7 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
170 |
esc_url_raw(
|
171 |
add_query_arg(
|
172 |
array(
|
173 |
-
'settings-updated' => true
|
174 |
),
|
175 |
wp_get_referer() . '#' . $type
|
176 |
)
|
@@ -185,27 +189,26 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
185 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
186 |
*/
|
187 |
public function mark_resolved() {
|
188 |
-
if ( ! isset( $_POST['type'] ) ) {
|
189 |
wp_die( esc_html__( 'We could not verify the type of request you want to cancel.', 'gdpr' ) );
|
190 |
}
|
191 |
|
192 |
-
$type
|
193 |
$allowed_types = parent::get_allowed_types();
|
194 |
|
195 |
-
if ( ! in_array( $type, $allowed_types ) ) {
|
196 |
/* translators: The type of request i.e. 'delete' */
|
197 |
-
wp_die( sprintf( esc_html__( 'Type of request \'%s\' is not an allowed type.', 'gdpr' ), $type ) );
|
198 |
}
|
199 |
|
200 |
$nonce_field = 'gdpr_' . $type . '_mark_resolved_nonce';
|
201 |
|
202 |
-
if ( ! isset( $_POST[ $nonce_field ], $_POST['user_email'], $_POST['index'] ) || ! wp_verify_nonce( sanitize_key( $_POST[ $nonce_field ] ), 'gdpr-mark-as-resolved' ) ) {
|
203 |
wp_die( esc_html__( 'We could not verify the user email or the security token. Please try again.', 'gdpr' ) );
|
204 |
}
|
205 |
|
206 |
-
$email = sanitize_email( $_POST['user_email'] );
|
207 |
-
$index = sanitize_text_field( $_POST['index'] );
|
208 |
-
|
209 |
|
210 |
parent::remove_from_requests( $index );
|
211 |
|
@@ -221,7 +224,7 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
221 |
esc_url_raw(
|
222 |
add_query_arg(
|
223 |
array(
|
224 |
-
'settings-updated' => true
|
225 |
),
|
226 |
wp_get_referer() . '#' . $type
|
227 |
)
|
@@ -236,19 +239,19 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
236 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
237 |
*/
|
238 |
public function delete_user() {
|
239 |
-
if ( ! isset( $_POST['gdpr_delete_user'], $_POST['user_email'], $_POST['index'] ) || ! wp_verify_nonce( $_POST['gdpr_delete_user'], 'gdpr-request-delete-user' ) ) {
|
240 |
wp_die( esc_html__( 'We could not verify the user email or the security token. Please try again.', 'gdpr' ) );
|
241 |
}
|
242 |
|
243 |
-
$email = sanitize_email( $_POST['user_email'] );
|
244 |
-
$user
|
245 |
-
$index = sanitize_text_field( $_POST['index'] );
|
246 |
parent::remove_from_requests( $index );
|
247 |
|
248 |
$token = GDPR::generate_pin();
|
249 |
GDPR_Email::send( $user->user_email, 'delete-resolved', array( 'token' => $token ) );
|
250 |
|
251 |
-
GDPR_Audit_Log::log( $user->ID, esc_html__( 'User was removed from the site.', 'gdpr') );
|
252 |
GDPR_Audit_Log::export_log( $user->ID, $token );
|
253 |
wp_delete_user( $user->ID );
|
254 |
|
@@ -259,7 +262,7 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
259 |
esc_url_raw(
|
260 |
add_query_arg(
|
261 |
array(
|
262 |
-
'settings-updated' => true
|
263 |
),
|
264 |
wp_get_referer() . '#delete'
|
265 |
)
|
@@ -274,33 +277,35 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
274 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
275 |
*/
|
276 |
public function anonymize_comments() {
|
277 |
-
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'gdpr-anonymize-comments-action' ) ) {
|
278 |
wp_send_json_error( esc_html__( 'We could not verify the security token. Please try again.', 'gdpr' ) );
|
279 |
}
|
280 |
|
281 |
-
$email
|
282 |
-
$comment_count = (
|
283 |
|
284 |
$user = get_user_by( 'email', $email );
|
285 |
if ( ! $user instanceof WP_User ) {
|
286 |
wp_send_json_error( esc_html__( 'User not found.', 'gdpr' ) );
|
287 |
}
|
288 |
|
289 |
-
$comments = get_comments(
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
|
|
|
|
294 |
|
295 |
foreach ( $comments as $comment ) {
|
296 |
-
$new_comment
|
297 |
-
$new_comment['comment_ID']
|
298 |
-
$new_comment['comment_author_IP']
|
299 |
$new_comment['comment_author_email'] = '';
|
300 |
-
$new_comment['comment_author_url']
|
301 |
-
$new_comment['comment_agent']
|
302 |
-
$new_comment['comment_author']
|
303 |
-
$new_comment['user_id']
|
304 |
wp_update_comment( $new_comment );
|
305 |
}
|
306 |
GDPR_Audit_Log::log( $user->ID, esc_html__( 'User comments were anonymized.', 'gdpr' ) );
|
@@ -313,18 +318,18 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
313 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
314 |
*/
|
315 |
public function reassign_content() {
|
316 |
-
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'gdpr-reassign-content-action' ) ) {
|
317 |
wp_send_json_error( esc_html__( 'We could not verify the security token. Please try again.', 'gdpr' ) );
|
318 |
}
|
319 |
|
320 |
-
if ( ! isset( $_POST['user_email'], $_POST['reassign_to'], $_POST['post_type'], $_POST['post_count'] ) ) {
|
321 |
wp_send_json_error( esc_html__( 'Essential data missing. Please try again.', 'gdpr' ) );
|
322 |
}
|
323 |
|
324 |
-
$email
|
325 |
-
$reassign_to = (
|
326 |
-
$post_type
|
327 |
-
$post_count
|
328 |
|
329 |
$user = get_user_by( 'email', $email );
|
330 |
if ( ! $user instanceof WP_User ) {
|
@@ -332,8 +337,8 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
332 |
}
|
333 |
|
334 |
$args = array(
|
335 |
-
'author'
|
336 |
-
'post_type'
|
337 |
'posts_per_page' => $post_count,
|
338 |
);
|
339 |
|
@@ -341,15 +346,17 @@ class GDPR_Requests_Admin extends GDPR_Requests {
|
|
341 |
|
342 |
if ( ! empty( $posts ) ) {
|
343 |
foreach ( $posts as $post ) {
|
344 |
-
wp_update_post(
|
345 |
-
|
346 |
-
|
347 |
-
|
|
|
|
|
348 |
}
|
349 |
|
350 |
$reassign_to_user = get_user_by( 'ID', $reassign_to );
|
351 |
/* translators: 1: The post type, 2: The user the posts were reassigned to */
|
352 |
-
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'User %s were reassigned to %s.', 'gdpr' ), $post_type, $reassign_to_user->display_name ) );
|
353 |
wp_send_json_success();
|
354 |
}
|
355 |
|
26 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
27 |
*/
|
28 |
public function add_to_deletion_requests() {
|
29 |
+
if ( ! isset( $_POST['gdpr_deletion_requests_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['gdpr_deletion_requests_nonce'] ), 'gdpr-add-to-deletion-requests' ) ) { // WPCS: Input var ok.
|
30 |
wp_die( esc_html__( 'We could not verify the user email or the security token. Please try again.', 'gdpr' ) );
|
31 |
}
|
32 |
|
33 |
+
$email = isset( $_POST['user_email'] ) ? sanitize_email( wp_unslash( $_POST['user_email'] ) ) : ''; // WPCS: Input var ok.
|
34 |
+
$user = get_user_by( 'email', $email );
|
35 |
|
36 |
if ( ! $user instanceof WP_User ) {
|
37 |
add_settings_error( 'gdpr-requests', 'invalid-user', esc_html__( 'User not found.', 'gdpr' ), 'error' );
|
40 |
esc_url_raw(
|
41 |
add_query_arg(
|
42 |
array(
|
43 |
+
'settings-updated' => true,
|
44 |
),
|
45 |
wp_get_referer() . '#delete'
|
46 |
)
|
48 |
);
|
49 |
exit;
|
50 |
} else {
|
51 |
+
if ( in_array( 'administrator', $user->roles, true ) ) {
|
52 |
+
$admins_query = new WP_User_Query(
|
53 |
+
array(
|
54 |
+
'role' => 'Administrator',
|
55 |
+
)
|
56 |
+
);
|
57 |
if ( 1 === $admins_query->get_total() ) {
|
58 |
/* translators: User email */
|
59 |
add_settings_error( 'gdpr-requests', 'invalid-request', sprintf( esc_html__( 'User %s is the only admin of the site. It cannot be deleted.', 'gdpr' ), $email ), 'error' );
|
62 |
esc_url_raw(
|
63 |
add_query_arg(
|
64 |
array(
|
65 |
+
'settings-updated' => true,
|
66 |
),
|
67 |
wp_get_referer() . '#delete'
|
68 |
)
|
73 |
}
|
74 |
}
|
75 |
|
76 |
+
$requests = (array) get_option( 'gdpr_requests', array() );
|
77 |
|
78 |
if ( empty( $requests ) ) {
|
79 |
parent::add_to_requests( $email, 'delete', null, true );
|
85 |
esc_url_raw(
|
86 |
add_query_arg(
|
87 |
array(
|
88 |
+
'settings-updated' => true,
|
89 |
),
|
90 |
wp_get_referer() . '#delete'
|
91 |
)
|
94 |
exit;
|
95 |
}
|
96 |
|
97 |
+
$deletion_requests = array_filter(
|
98 |
+
$requests, function( $arr ) {
|
99 |
+
return 'delete' === $arr['type'];
|
100 |
+
}
|
101 |
+
);
|
102 |
+
$user_has_already_requested = array_search( $email, array_column( $deletion_requests, 'email' ), true );
|
103 |
|
104 |
if ( false !== $user_has_already_requested ) {
|
105 |
add_settings_error( 'gdpr-requests', 'invalid-user', esc_html__( 'User already placed a deletion request.', 'gdpr' ), 'error' );
|
108 |
esc_url_raw(
|
109 |
add_query_arg(
|
110 |
array(
|
111 |
+
'settings-updated' => true,
|
112 |
),
|
113 |
wp_get_referer() . '#delete'
|
114 |
)
|
126 |
esc_url_raw(
|
127 |
add_query_arg(
|
128 |
array(
|
129 |
+
'settings-updated' => true,
|
130 |
),
|
131 |
wp_get_referer() . '#delete'
|
132 |
)
|
141 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
142 |
*/
|
143 |
public function cancel_request() {
|
144 |
+
if ( ! isset( $_POST['type'] ) ) { // WPCS: Input var ok.
|
145 |
wp_die( esc_html__( 'We could not verify the type of request you want to cancel.', 'gdpr' ) );
|
146 |
}
|
147 |
|
148 |
+
$type = trim( strtolower( sanitize_text_field( wp_unslash( $_POST['type'] ) ) ) ); // WPCS: Input var ok, CSRF ok.
|
149 |
$allowed_types = parent::get_allowed_types();
|
150 |
|
151 |
+
if ( ! in_array( $type, $allowed_types, true ) ) {
|
152 |
/* translators: The type of request */
|
153 |
+
wp_die( sprintf( esc_html__( 'Type of request \'%s\' is not an allowed type.', 'gdpr' ), esc_html( $type ) ) );
|
154 |
}
|
155 |
|
156 |
$nonce_field = 'gdpr_cancel_' . $type . '_nonce';
|
157 |
|
158 |
+
if ( ! isset( $_POST[ $nonce_field ], $_POST['user_email'], $_POST['index'] ) || ! wp_verify_nonce( sanitize_key( $_POST[ $nonce_field ] ), 'gdpr-request-nonce' ) ) { // WPCS: Input var ok.
|
159 |
wp_die( esc_html__( 'We could not verify the user email or the security token. Please try again.', 'gdpr' ) );
|
160 |
}
|
161 |
|
162 |
+
$email = sanitize_email( wp_unslash( $_POST['user_email'] ) ); // WPCS: Input var ok.
|
163 |
+
$index = sanitize_text_field( wp_unslash( $_POST['index'] ) ); // WPCS: Input var ok.
|
164 |
|
165 |
parent::remove_from_requests( $index );
|
166 |
$user = get_user_by( 'email', $email );
|
174 |
esc_url_raw(
|
175 |
add_query_arg(
|
176 |
array(
|
177 |
+
'settings-updated' => true,
|
178 |
),
|
179 |
wp_get_referer() . '#' . $type
|
180 |
)
|
189 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
190 |
*/
|
191 |
public function mark_resolved() {
|
192 |
+
if ( ! isset( $_POST['type'] ) ) { // WPCS: Input var ok.
|
193 |
wp_die( esc_html__( 'We could not verify the type of request you want to cancel.', 'gdpr' ) );
|
194 |
}
|
195 |
|
196 |
+
$type = isset( $_POST['type'] ) ? trim( strtolower( sanitize_text_field( wp_unslash( $_POST['type'] ) ) ) ) : ''; // WPCS: Input var ok, CSRF ok.
|
197 |
$allowed_types = parent::get_allowed_types();
|
198 |
|
199 |
+
if ( ! in_array( $type, $allowed_types, true ) ) {
|
200 |
/* translators: The type of request i.e. 'delete' */
|
201 |
+
wp_die( sprintf( esc_html__( 'Type of request \'%s\' is not an allowed type.', 'gdpr' ), esc_html( $type ) ) );
|
202 |
}
|
203 |
|
204 |
$nonce_field = 'gdpr_' . $type . '_mark_resolved_nonce';
|
205 |
|
206 |
+
if ( ! isset( $_POST[ $nonce_field ], $_POST['user_email'], $_POST['index'] ) || ! wp_verify_nonce( sanitize_key( $_POST[ $nonce_field ] ), 'gdpr-mark-as-resolved' ) ) { // WPCS: Input var ok.
|
207 |
wp_die( esc_html__( 'We could not verify the user email or the security token. Please try again.', 'gdpr' ) );
|
208 |
}
|
209 |
|
210 |
+
$email = sanitize_email( wp_unslash( $_POST['user_email'] ) ); // WPCS: Input var ok.
|
211 |
+
$index = sanitize_text_field( wp_unslash( $_POST['index'] ) ); // WPCS: Input var ok.
|
|
|
212 |
|
213 |
parent::remove_from_requests( $index );
|
214 |
|
224 |
esc_url_raw(
|
225 |
add_query_arg(
|
226 |
array(
|
227 |
+
'settings-updated' => true,
|
228 |
),
|
229 |
wp_get_referer() . '#' . $type
|
230 |
)
|
239 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
240 |
*/
|
241 |
public function delete_user() {
|
242 |
+
if ( ! isset( $_POST['gdpr_delete_user'], $_POST['user_email'], $_POST['index'] ) || ! wp_verify_nonce( sanitize_key( $_POST['gdpr_delete_user'] ), 'gdpr-request-delete-user' ) ) { // WPCS: Input var ok.
|
243 |
wp_die( esc_html__( 'We could not verify the user email or the security token. Please try again.', 'gdpr' ) );
|
244 |
}
|
245 |
|
246 |
+
$email = sanitize_email( wp_unslash( $_POST['user_email'] ) ); // WPCS: Input var ok.
|
247 |
+
$user = get_user_by( 'email', $email );
|
248 |
+
$index = sanitize_text_field( wp_unslash( $_POST['index'] ) ); // WPCS: Input var ok.
|
249 |
parent::remove_from_requests( $index );
|
250 |
|
251 |
$token = GDPR::generate_pin();
|
252 |
GDPR_Email::send( $user->user_email, 'delete-resolved', array( 'token' => $token ) );
|
253 |
|
254 |
+
GDPR_Audit_Log::log( $user->ID, esc_html__( 'User was removed from the site.', 'gdpr' ) );
|
255 |
GDPR_Audit_Log::export_log( $user->ID, $token );
|
256 |
wp_delete_user( $user->ID );
|
257 |
|
262 |
esc_url_raw(
|
263 |
add_query_arg(
|
264 |
array(
|
265 |
+
'settings-updated' => true,
|
266 |
),
|
267 |
wp_get_referer() . '#delete'
|
268 |
)
|
277 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
278 |
*/
|
279 |
public function anonymize_comments() {
|
280 |
+
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'gdpr-anonymize-comments-action' ) ) { // WPCS: Input var ok.
|
281 |
wp_send_json_error( esc_html__( 'We could not verify the security token. Please try again.', 'gdpr' ) );
|
282 |
}
|
283 |
|
284 |
+
$email = isset( $_POST['user_email'] ) ? sanitize_email( wp_unslash( $_POST['user_email'] ) ) : ''; // WPCS: Input var ok.
|
285 |
+
$comment_count = isset( $_POST['comment_count'] ) ? (int) $_POST['comment_count'] : 0; // WPCS: Input var ok.
|
286 |
|
287 |
$user = get_user_by( 'email', $email );
|
288 |
if ( ! $user instanceof WP_User ) {
|
289 |
wp_send_json_error( esc_html__( 'User not found.', 'gdpr' ) );
|
290 |
}
|
291 |
|
292 |
+
$comments = get_comments(
|
293 |
+
array(
|
294 |
+
'author_email' => $user->user_email,
|
295 |
+
'include_unapproved' => true,
|
296 |
+
'number' => $comment_count,
|
297 |
+
)
|
298 |
+
);
|
299 |
|
300 |
foreach ( $comments as $comment ) {
|
301 |
+
$new_comment = array();
|
302 |
+
$new_comment['comment_ID'] = $comment->comment_ID;
|
303 |
+
$new_comment['comment_author_IP'] = '0.0.0.0';
|
304 |
$new_comment['comment_author_email'] = '';
|
305 |
+
$new_comment['comment_author_url'] = '';
|
306 |
+
$new_comment['comment_agent'] = '';
|
307 |
+
$new_comment['comment_author'] = esc_html__( 'Guest', 'gdpr' );
|
308 |
+
$new_comment['user_id'] = 0;
|
309 |
wp_update_comment( $new_comment );
|
310 |
}
|
311 |
GDPR_Audit_Log::log( $user->ID, esc_html__( 'User comments were anonymized.', 'gdpr' ) );
|
318 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
319 |
*/
|
320 |
public function reassign_content() {
|
321 |
+
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'gdpr-reassign-content-action' ) ) { // WPCS: Input var ok.
|
322 |
wp_send_json_error( esc_html__( 'We could not verify the security token. Please try again.', 'gdpr' ) );
|
323 |
}
|
324 |
|
325 |
+
if ( ! isset( $_POST['user_email'], $_POST['reassign_to'], $_POST['post_type'], $_POST['post_count'] ) ) { // WPCS: Input var ok.
|
326 |
wp_send_json_error( esc_html__( 'Essential data missing. Please try again.', 'gdpr' ) );
|
327 |
}
|
328 |
|
329 |
+
$email = sanitize_email( wp_unslash( $_POST['user_email'] ) ); // WPCS: Input var ok.
|
330 |
+
$reassign_to = (int) $_POST['reassign_to']; // WPCS: Input var ok.
|
331 |
+
$post_type = sanitize_text_field( wp_unslash( $_POST['post_type'] ) ); // WPCS: Input var ok.
|
332 |
+
$post_count = (int) $_POST['post_count']; // WPCS: Input var ok.
|
333 |
|
334 |
$user = get_user_by( 'email', $email );
|
335 |
if ( ! $user instanceof WP_User ) {
|
337 |
}
|
338 |
|
339 |
$args = array(
|
340 |
+
'author' => $user->ID,
|
341 |
+
'post_type' => $post_type,
|
342 |
'posts_per_page' => $post_count,
|
343 |
);
|
344 |
|
346 |
|
347 |
if ( ! empty( $posts ) ) {
|
348 |
foreach ( $posts as $post ) {
|
349 |
+
wp_update_post(
|
350 |
+
array(
|
351 |
+
'ID' => $post->ID,
|
352 |
+
'post_author' => $reassign_to,
|
353 |
+
)
|
354 |
+
);
|
355 |
}
|
356 |
|
357 |
$reassign_to_user = get_user_by( 'ID', $reassign_to );
|
358 |
/* translators: 1: The post type, 2: The user the posts were reassigned to */
|
359 |
+
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'User %1$s were reassigned to %2$s.', 'gdpr' ), $post_type, $reassign_to_user->display_name ) );
|
360 |
wp_send_json_success();
|
361 |
}
|
362 |
|
admin/class-gdpr-telemetry.php
CHANGED
@@ -44,21 +44,21 @@ class GDPR_Telemetry {
|
|
44 |
register_post_type(
|
45 |
'telemetry',
|
46 |
array(
|
47 |
-
'label'
|
48 |
-
'labels'
|
49 |
-
'not_found'
|
50 |
'not_found_in_trash' => esc_html__( 'No items found in trash.', 'gdpr' ),
|
51 |
-
'search_items'
|
52 |
),
|
53 |
-
'public'
|
54 |
-
'show_ui'
|
55 |
-
'show_in_menu'
|
56 |
-
'show_in_nav_menus'
|
57 |
-
'query_var'
|
58 |
-
'hierarchical'
|
59 |
-
'capability_type'
|
60 |
-
'publicly_queryable'
|
61 |
-
'exclude_from_search' => true
|
62 |
)
|
63 |
);
|
64 |
}
|
@@ -107,7 +107,7 @@ class GDPR_Telemetry {
|
|
107 |
|
108 |
/* Extract backtrace data */
|
109 |
$file = str_replace( ABSPATH, '', $backtrace['file'] );
|
110 |
-
$line = (
|
111 |
|
112 |
/* Response code */
|
113 |
$code = ( is_wp_error( $response ) ? -1 : wp_remote_retrieve_response_code( $response ) );
|
@@ -119,15 +119,17 @@ class GDPR_Telemetry {
|
|
119 |
}
|
120 |
|
121 |
/* Insert CPT */
|
122 |
-
$this->insert_post(
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
|
|
|
|
131 |
}
|
132 |
|
133 |
/**
|
@@ -147,13 +149,13 @@ class GDPR_Telemetry {
|
|
147 |
$post_id = wp_insert_post(
|
148 |
array(
|
149 |
'post_status' => 'publish',
|
150 |
-
'post_type' => 'telemetry'
|
151 |
)
|
152 |
);
|
153 |
|
154 |
/* Add meta values */
|
155 |
-
foreach( (array) $meta as $key => $value ) {
|
156 |
-
add_post_meta( $post_id, '_gdpr_telemetry_'
|
157 |
}
|
158 |
|
159 |
return $post_id;
|
@@ -173,16 +175,16 @@ class GDPR_Telemetry {
|
|
173 |
$url = wp_nonce_url(
|
174 |
add_query_arg(
|
175 |
array(
|
176 |
-
'action'
|
177 |
-
'post_type'
|
178 |
-
'post_status' => 'publish'
|
179 |
),
|
180 |
-
admin_url('edit.php')
|
181 |
),
|
182 |
'bulk-posts'
|
183 |
);
|
184 |
?>
|
185 |
-
<a href="<?php echo esc_url( $url ); ?>" class="button"><?php echo esc_html__('Delete all', 'gdpr'); ?></a>
|
186 |
<?php
|
187 |
}
|
188 |
|
@@ -198,7 +200,7 @@ class GDPR_Telemetry {
|
|
198 |
'file' => esc_html__( 'File', 'gdpr' ),
|
199 |
'code' => esc_html__( 'Code', 'gdpr' ),
|
200 |
'created' => esc_html__( 'Time', 'gdpr' ),
|
201 |
-
'postdata' => esc_html__( 'Data', 'gdpr')
|
202 |
);
|
203 |
}
|
204 |
|
@@ -216,7 +218,7 @@ class GDPR_Telemetry {
|
|
216 |
'file' => array( __CLASS__, '_html_file' ),
|
217 |
'code' => array( __CLASS__, '_html_code' ),
|
218 |
'created' => array( __CLASS__, '_html_created' ),
|
219 |
-
'postdata' => array( __CLASS__, '_html_postdata' )
|
220 |
);
|
221 |
|
222 |
/* If type exists */
|
@@ -240,14 +242,14 @@ class GDPR_Telemetry {
|
|
240 |
*/
|
241 |
private static function _html_url( $post_id ) {
|
242 |
/* Init data */
|
243 |
-
$url
|
244 |
$host = self::_get_post_meta( $post_id, 'host' );
|
245 |
|
246 |
/* Print output */
|
247 |
echo sprintf(
|
248 |
'<div>%s</div>',
|
249 |
-
str_replace( $host, '<code>'
|
250 |
-
);
|
251 |
}
|
252 |
|
253 |
/**
|
@@ -265,10 +267,10 @@ class GDPR_Telemetry {
|
|
265 |
/* Print output */
|
266 |
echo sprintf(
|
267 |
'<div>%s: %s<br /><code>/%s:%d</code></div>',
|
268 |
-
$meta['type'],
|
269 |
-
$meta['name'],
|
270 |
-
$file,
|
271 |
-
$line
|
272 |
);
|
273 |
}
|
274 |
|
@@ -280,7 +282,7 @@ class GDPR_Telemetry {
|
|
280 |
* @param int $post_id The post ID.
|
281 |
*/
|
282 |
private static function _html_code( $post_id ) {
|
283 |
-
echo self::_get_post_meta( $post_id, 'code' );
|
284 |
}
|
285 |
|
286 |
/**
|
@@ -294,7 +296,7 @@ class GDPR_Telemetry {
|
|
294 |
/* translators: Amount of time */
|
295 |
echo sprintf(
|
296 |
esc_html__( '%s ago' ),
|
297 |
-
human_time_diff( get_post_time( 'G', true, $post_id ) )
|
298 |
);
|
299 |
}
|
300 |
|
@@ -327,7 +329,7 @@ class GDPR_Telemetry {
|
|
327 |
/* Thickbox content start */
|
328 |
echo sprintf(
|
329 |
'<div id="gdpr-telemetry-thickbox-%d" class="gdpr-hidden"><pre>',
|
330 |
-
$post_id
|
331 |
);
|
332 |
|
333 |
/* POST data */
|
@@ -339,7 +341,7 @@ class GDPR_Telemetry {
|
|
339 |
/* Thickbox button */
|
340 |
echo sprintf(
|
341 |
'<a href="#TB_inline?width=400&height=300&inlineId=gdpr-telemetry-thickbox-%d" class="button thickbox">%s</a>',
|
342 |
-
$post_id,
|
343 |
esc_html__( 'Show', 'gdpr' )
|
344 |
);
|
345 |
}
|
@@ -354,7 +356,8 @@ class GDPR_Telemetry {
|
|
354 |
* @return mixed The post meta.
|
355 |
*/
|
356 |
private static function _get_post_meta( $post_id, $key ) {
|
357 |
-
|
|
|
358 |
return $value;
|
359 |
}
|
360 |
|
@@ -373,19 +376,19 @@ class GDPR_Telemetry {
|
|
373 |
$trace = array_reverse( debug_backtrace() );
|
374 |
|
375 |
/* Loop items */
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
}
|
390 |
|
391 |
/**
|
@@ -400,7 +403,7 @@ class GDPR_Telemetry {
|
|
400 |
/* Default */
|
401 |
$meta = array(
|
402 |
'type' => 'WordPress',
|
403 |
-
'name' => 'Core'
|
404 |
);
|
405 |
|
406 |
/* Empty path */
|
@@ -409,17 +412,17 @@ class GDPR_Telemetry {
|
|
409 |
}
|
410 |
|
411 |
/* Search for plugin */
|
412 |
-
if (
|
413 |
return array(
|
414 |
'type' => 'Plugin',
|
415 |
-
'name' => $
|
416 |
);
|
417 |
|
418 |
-
|
419 |
-
}
|
420 |
return array(
|
421 |
'type' => 'Theme',
|
422 |
-
'name' => $
|
423 |
);
|
424 |
}
|
425 |
|
@@ -448,14 +451,14 @@ class GDPR_Telemetry {
|
|
448 |
|
449 |
/* Frontend */
|
450 |
if ( ! function_exists( 'get_plugins' ) ) {
|
451 |
-
require_once( ABSPATH. 'wp-admin/includes/plugin.php' );
|
452 |
}
|
453 |
|
454 |
/* All active plugins */
|
455 |
$plugins = get_plugins();
|
456 |
|
457 |
/* Loop plugins */
|
458 |
-
foreach( $plugins as $path => $plugin ) {
|
459 |
if ( 0 === strpos( $path, $folder ) ) {
|
460 |
return $plugin;
|
461 |
}
|
@@ -503,13 +506,13 @@ class GDPR_Telemetry {
|
|
503 |
*/
|
504 |
private static function _get_postdata( $args ) {
|
505 |
/* No POST data? */
|
506 |
-
if ( empty( $args['method'] )
|
507 |
-
return
|
508 |
}
|
509 |
|
510 |
/* No body data? */
|
511 |
if ( empty( $args['body'] ) ) {
|
512 |
-
return
|
513 |
}
|
514 |
|
515 |
return $args['body'];
|
44 |
register_post_type(
|
45 |
'telemetry',
|
46 |
array(
|
47 |
+
'label' => esc_html__( 'Telemetry', 'gdpr' ),
|
48 |
+
'labels' => array(
|
49 |
+
'not_found' => esc_html__( 'No items found. Future connections will be shown at this place.', 'gdpr' ),
|
50 |
'not_found_in_trash' => esc_html__( 'No items found in trash.', 'gdpr' ),
|
51 |
+
'search_items' => esc_html__( 'Search in destination', 'gdpr' ),
|
52 |
),
|
53 |
+
'public' => false,
|
54 |
+
'show_ui' => true,
|
55 |
+
'show_in_menu' => false,
|
56 |
+
'show_in_nav_menus' => false,
|
57 |
+
'query_var' => true, // try setting to false
|
58 |
+
'hierarchical' => false,
|
59 |
+
'capability_type' => 'post',
|
60 |
+
'publicly_queryable' => false,
|
61 |
+
'exclude_from_search' => true,
|
62 |
)
|
63 |
);
|
64 |
}
|
107 |
|
108 |
/* Extract backtrace data */
|
109 |
$file = str_replace( ABSPATH, '', $backtrace['file'] );
|
110 |
+
$line = (int) $backtrace['line'];
|
111 |
|
112 |
/* Response code */
|
113 |
$code = ( is_wp_error( $response ) ? -1 : wp_remote_retrieve_response_code( $response ) );
|
119 |
}
|
120 |
|
121 |
/* Insert CPT */
|
122 |
+
$this->insert_post(
|
123 |
+
array(
|
124 |
+
'url' => esc_url_raw( $url ),
|
125 |
+
'code' => $code,
|
126 |
+
'host' => $host,
|
127 |
+
'file' => $file,
|
128 |
+
'line' => $line,
|
129 |
+
'meta' => $meta,
|
130 |
+
'postdata' => $postdata,
|
131 |
+
)
|
132 |
+
);
|
133 |
}
|
134 |
|
135 |
/**
|
149 |
$post_id = wp_insert_post(
|
150 |
array(
|
151 |
'post_status' => 'publish',
|
152 |
+
'post_type' => 'telemetry',
|
153 |
)
|
154 |
);
|
155 |
|
156 |
/* Add meta values */
|
157 |
+
foreach ( (array) $meta as $key => $value ) {
|
158 |
+
add_post_meta( $post_id, '_gdpr_telemetry_' . $key, $value, true );
|
159 |
}
|
160 |
|
161 |
return $post_id;
|
175 |
$url = wp_nonce_url(
|
176 |
add_query_arg(
|
177 |
array(
|
178 |
+
'action' => 'delete_all',
|
179 |
+
'post_type' => 'telemetry',
|
180 |
+
'post_status' => 'publish',
|
181 |
),
|
182 |
+
admin_url( 'edit.php' )
|
183 |
),
|
184 |
'bulk-posts'
|
185 |
);
|
186 |
?>
|
187 |
+
<a href="<?php echo esc_url( $url ); ?>" class="button"><?php echo esc_html__( 'Delete all', 'gdpr' ); ?></a>
|
188 |
<?php
|
189 |
}
|
190 |
|
200 |
'file' => esc_html__( 'File', 'gdpr' ),
|
201 |
'code' => esc_html__( 'Code', 'gdpr' ),
|
202 |
'created' => esc_html__( 'Time', 'gdpr' ),
|
203 |
+
'postdata' => esc_html__( 'Data', 'gdpr' ),
|
204 |
);
|
205 |
}
|
206 |
|
218 |
'file' => array( __CLASS__, '_html_file' ),
|
219 |
'code' => array( __CLASS__, '_html_code' ),
|
220 |
'created' => array( __CLASS__, '_html_created' ),
|
221 |
+
'postdata' => array( __CLASS__, '_html_postdata' ),
|
222 |
);
|
223 |
|
224 |
/* If type exists */
|
242 |
*/
|
243 |
private static function _html_url( $post_id ) {
|
244 |
/* Init data */
|
245 |
+
$url = self::_get_post_meta( $post_id, 'url' );
|
246 |
$host = self::_get_post_meta( $post_id, 'host' );
|
247 |
|
248 |
/* Print output */
|
249 |
echo sprintf(
|
250 |
'<div>%s</div>',
|
251 |
+
str_replace( $host, '<code>' . $host . '</code>', esc_url( $url ) )
|
252 |
+
); // WPCS: XSS ok.
|
253 |
}
|
254 |
|
255 |
/**
|
267 |
/* Print output */
|
268 |
echo sprintf(
|
269 |
'<div>%s: %s<br /><code>/%s:%d</code></div>',
|
270 |
+
esc_html( $meta['type'] ),
|
271 |
+
esc_html( $meta['name'] ),
|
272 |
+
esc_html( $file ),
|
273 |
+
esc_html( $line )
|
274 |
);
|
275 |
}
|
276 |
|
282 |
* @param int $post_id The post ID.
|
283 |
*/
|
284 |
private static function _html_code( $post_id ) {
|
285 |
+
echo esc_html( self::_get_post_meta( $post_id, 'code' ) );
|
286 |
}
|
287 |
|
288 |
/**
|
296 |
/* translators: Amount of time */
|
297 |
echo sprintf(
|
298 |
esc_html__( '%s ago' ),
|
299 |
+
esc_html( human_time_diff( get_post_time( 'G', true, $post_id ) ) )
|
300 |
);
|
301 |
}
|
302 |
|
329 |
/* Thickbox content start */
|
330 |
echo sprintf(
|
331 |
'<div id="gdpr-telemetry-thickbox-%d" class="gdpr-hidden"><pre>',
|
332 |
+
absint( $post_id )
|
333 |
);
|
334 |
|
335 |
/* POST data */
|
341 |
/* Thickbox button */
|
342 |
echo sprintf(
|
343 |
'<a href="#TB_inline?width=400&height=300&inlineId=gdpr-telemetry-thickbox-%d" class="button thickbox">%s</a>',
|
344 |
+
absint( $post_id ),
|
345 |
esc_html__( 'Show', 'gdpr' )
|
346 |
);
|
347 |
}
|
356 |
* @return mixed The post meta.
|
357 |
*/
|
358 |
private static function _get_post_meta( $post_id, $key ) {
|
359 |
+
$value = get_post_meta( $post_id, '_gdpr_telemetry_' . $key, true );
|
360 |
+
if ( $value ) {
|
361 |
return $value;
|
362 |
}
|
363 |
|
376 |
$trace = array_reverse( debug_backtrace() );
|
377 |
|
378 |
/* Loop items */
|
379 |
+
foreach ( $trace as $index => $item ) {
|
380 |
+
if ( ! empty( $item['function'] ) && strpos( $item['function'], 'wp_remote_' ) !== false ) {
|
381 |
+
/* Use prev item */
|
382 |
+
if ( empty( $item['file'] ) ) {
|
383 |
+
$item = $trace[ -- $index ];
|
384 |
+
}
|
385 |
+
|
386 |
+
/* Get file and line */
|
387 |
+
if ( ! empty( $item['file'] ) && ! empty( $item['line'] ) ) {
|
388 |
+
return $item;
|
389 |
+
}
|
390 |
+
}
|
391 |
+
}
|
392 |
}
|
393 |
|
394 |
/**
|
403 |
/* Default */
|
404 |
$meta = array(
|
405 |
'type' => 'WordPress',
|
406 |
+
'name' => 'Core',
|
407 |
);
|
408 |
|
409 |
/* Empty path */
|
412 |
}
|
413 |
|
414 |
/* Search for plugin */
|
415 |
+
if ( self::_localize_plugin( $path ) ) {
|
416 |
return array(
|
417 |
'type' => 'Plugin',
|
418 |
+
'name' => self::_localize_plugin( $path )['Name'],
|
419 |
);
|
420 |
|
421 |
+
/* Search for theme */
|
422 |
+
} elseif ( self::_localize_theme( $path ) ) {
|
423 |
return array(
|
424 |
'type' => 'Theme',
|
425 |
+
'name' => self::_localize_theme( $path )->get( 'Name' ),
|
426 |
);
|
427 |
}
|
428 |
|
451 |
|
452 |
/* Frontend */
|
453 |
if ( ! function_exists( 'get_plugins' ) ) {
|
454 |
+
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
455 |
}
|
456 |
|
457 |
/* All active plugins */
|
458 |
$plugins = get_plugins();
|
459 |
|
460 |
/* Loop plugins */
|
461 |
+
foreach ( $plugins as $path => $plugin ) {
|
462 |
if ( 0 === strpos( $path, $folder ) ) {
|
463 |
return $plugin;
|
464 |
}
|
506 |
*/
|
507 |
private static function _get_postdata( $args ) {
|
508 |
/* No POST data? */
|
509 |
+
if ( empty( $args['method'] ) or 'POST' !== $args['method'] ) {
|
510 |
+
return null;
|
511 |
}
|
512 |
|
513 |
/* No body data? */
|
514 |
if ( empty( $args['body'] ) ) {
|
515 |
+
return null;
|
516 |
}
|
517 |
|
518 |
return $args['body'];
|
admin/partials/requests.php
CHANGED
@@ -19,9 +19,9 @@
|
|
19 |
<?php settings_errors(); ?>
|
20 |
<div class="nav-tab-wrapper">
|
21 |
<?php foreach ( $tabs as $key => $value ) : ?>
|
22 |
-
<a href="<?php echo '#' . $key; ?>" class="nav-tab">
|
23 |
<?php echo esc_html( $value['name'] ); ?>
|
24 |
-
<?php if ( $value['count'] ): ?>
|
25 |
<span class="gdpr-pending-requests-badge"><?php echo esc_html( $value['count'] ); ?></span>
|
26 |
<?php endif ?>
|
27 |
</a>
|
@@ -29,7 +29,7 @@
|
|
29 |
</div>
|
30 |
|
31 |
<div class="gdpr-tab hidden" data-id="rectify">
|
32 |
-
<h2><?php esc_html_e( 'Rectify Data', 'gdpr' ) ?></h2>
|
33 |
<table class="widefat gdpr-request-table">
|
34 |
<thead>
|
35 |
<tr>
|
@@ -40,33 +40,42 @@
|
|
40 |
</tr>
|
41 |
</thead>
|
42 |
<tbody>
|
43 |
-
<?php if ( isset( $rectify ) && ! empty( $rectify ) ): ?>
|
44 |
-
<?php foreach ( $rectify as $i => $request ): ?>
|
45 |
<tr>
|
46 |
<td class="row-title"><?php echo esc_html( $request['email'] ); ?></td>
|
47 |
<td class="text-center"><?php echo esc_html( $request['date'] ); ?></td>
|
48 |
-
<td class="text-center"><?php echo wp_kses( wpautop( wp_unslash( $request['data'] ) ), array( 'p' => true, 'br' => true ) ); ?></td>
|
49 |
<td class="text-center">
|
50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
<?php wp_nonce_field( 'gdpr-request-nonce', 'gdpr_cancel_rectify_nonce' ); ?>
|
52 |
<input type="hidden" name="action" value="gdpr_cancel_request">
|
53 |
<input type="hidden" name="type" value="rectify">
|
54 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
55 |
-
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ) ?>">
|
56 |
-
<?php submit_button( esc_html__( 'Cancel Request', 'gdpr' ), 'delete', '', false ) ?>
|
57 |
</form>
|
58 |
-
<form class="frm-process-rectification" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
|
59 |
<?php wp_nonce_field( 'gdpr-mark-as-resolved', 'gdpr_rectify_mark_resolved_nonce' ); ?>
|
60 |
<input type="hidden" name="action" value="gdpr_mark_resolved">
|
61 |
<input type="hidden" name="type" value="rectify">
|
62 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
63 |
-
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ) ?>">
|
64 |
-
<?php submit_button( esc_html__( 'Mark as Resolved', 'gdpr' ), 'primary', '', false ) ?>
|
65 |
</form>
|
66 |
</td>
|
67 |
</tr>
|
68 |
<?php endforeach ?>
|
69 |
-
<?php else: ?>
|
70 |
<tr>
|
71 |
<td colspan="4" class="text-center">
|
72 |
<?php esc_html_e( 'No pending requests', 'gdpr' ); ?>
|
@@ -86,7 +95,7 @@
|
|
86 |
</div>
|
87 |
|
88 |
<div class="gdpr-tab hidden" data-id="complaint">
|
89 |
-
<h2><?php esc_html_e( 'Complaints', 'gdpr' ) ?></h2>
|
90 |
<table class="widefat gdpr-request-table">
|
91 |
<thead>
|
92 |
<tr>
|
@@ -97,33 +106,33 @@
|
|
97 |
</tr>
|
98 |
</thead>
|
99 |
<tbody>
|
100 |
-
<?php if ( isset( $complaint ) && ! empty( $complaint ) ): ?>
|
101 |
-
<?php foreach ( $complaint as $i => $request ): ?>
|
102 |
<tr>
|
103 |
<td class="row-title"><?php echo esc_html( $request['email'] ); ?></td>
|
104 |
<td class="text-center"><?php echo esc_html( $request['date'] ); ?></td>
|
105 |
<td class="text-center"><?php echo esc_html( wp_unslash( $request['data'] ) ); ?></td>
|
106 |
<td class="text-center">
|
107 |
-
<form class="frm-process-complaint" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
|
108 |
<?php wp_nonce_field( 'gdpr-request-nonce', 'gdpr_cancel_complaint_nonce' ); ?>
|
109 |
<input type="hidden" name="action" value="gdpr_cancel_request">
|
110 |
<input type="hidden" name="type" value="complaint">
|
111 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
112 |
-
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ) ?>">
|
113 |
-
<?php submit_button( esc_html__( 'Cancel Request', 'gdpr' ), 'delete', '', false ) ?>
|
114 |
</form>
|
115 |
-
<form class="frm-process-complaint" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
|
116 |
<?php wp_nonce_field( 'gdpr-mark-as-resolved', 'gdpr_complaint_mark_resolved_nonce' ); ?>
|
117 |
<input type="hidden" name="action" value="gdpr_mark_resolved">
|
118 |
<input type="hidden" name="type" value="complaint">
|
119 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
120 |
-
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ) ?>">
|
121 |
-
<?php submit_button( esc_html__( 'Mark as Resolved', 'gdpr' ), 'primary', '', false ) ?>
|
122 |
</form>
|
123 |
</td>
|
124 |
</tr>
|
125 |
<?php endforeach ?>
|
126 |
-
<?php else: ?>
|
127 |
<tr>
|
128 |
<td colspan="4" class="text-center">
|
129 |
<?php esc_html_e( 'No pending requests', 'gdpr' ); ?>
|
@@ -143,9 +152,9 @@
|
|
143 |
</div>
|
144 |
|
145 |
<div class="gdpr-tab hidden" data-id="delete">
|
146 |
-
<h2><?php esc_html_e( 'Right to erasure', 'gdpr' ) ?></h2>
|
147 |
<div class="postbox not-full">
|
148 |
-
<form class="gdpr-manual-email-lookup" method="post" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>">
|
149 |
<div class="inside">
|
150 |
<input type="hidden" name="action" value="gdpr_add_to_deletion_requests">
|
151 |
<?php wp_nonce_field( 'gdpr-add-to-deletion-requests', 'gdpr_deletion_requests_nonce' ); ?>
|
@@ -167,11 +176,11 @@
|
|
167 |
</tr>
|
168 |
</thead>
|
169 |
<tbody>
|
170 |
-
<?php if ( isset( $delete ) && ! empty( $delete ) ): ?>
|
171 |
<?php $index = 0; ?>
|
172 |
-
<?php foreach ( $delete as $i => $request ): ?>
|
173 |
-
<?php $user = get_user_by( 'email', $request['email'] ) ?>
|
174 |
-
<tr class="<?php echo ( $index % 2
|
175 |
<td class="row-title"><?php echo esc_html( $request['email'] ); ?></td>
|
176 |
<td class="text-center"><?php echo esc_html( $request['date'] ); ?></td>
|
177 |
<td class="text-center">
|
@@ -182,30 +191,29 @@
|
|
182 |
esc_html_e( 'No content to review', 'gdpr' );
|
183 |
}
|
184 |
?>
|
185 |
-
<?php if ( GDPR_Requests::user_has_content( $user ) ): ?>
|
186 |
-
<?php else: ?>
|
187 |
-
|
188 |
-
<?php endif; ?>
|
189 |
</td>
|
190 |
<td class="text-center">
|
191 |
-
<form class="frm-process-user-deletion" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
|
192 |
<?php wp_nonce_field( 'gdpr-request-nonce', 'gdpr_cancel_delete_nonce' ); ?>
|
193 |
<input type="hidden" name="action" value="gdpr_cancel_request">
|
194 |
<input type="hidden" name="type" value="delete">
|
195 |
-
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ) ?>">
|
196 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
197 |
-
<?php submit_button( esc_html__( 'Cancel Request', 'gdpr' ), 'delete', '', false ) ?>
|
198 |
</form>
|
199 |
-
<form class="frm-process-user-deletion" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
|
200 |
<?php wp_nonce_field( 'gdpr-request-delete-user', 'gdpr_delete_user' ); ?>
|
201 |
<input type="hidden" name="action" value="gdpr_delete_user">
|
202 |
-
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ) ?>">
|
203 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
204 |
-
<?php submit_button( esc_html__( 'Delete User', 'gdpr' ), 'primary', '', false ) ?>
|
205 |
</form>
|
206 |
</td>
|
207 |
</tr>
|
208 |
-
<?php if ( GDPR_Requests::user_has_content( $user ) ): ?>
|
209 |
<tr class="review" data-index="<?php echo esc_attr( $index ); ?>">
|
210 |
<td colspan="4">
|
211 |
<div class="hidden">
|
@@ -213,44 +221,44 @@
|
|
213 |
<thead>
|
214 |
<tr>
|
215 |
<th><?php esc_html_e( 'Content Type', 'gdpr' ); ?></th>
|
216 |
-
<th class="text-center"><?php
|
217 |
-
<th class="text-center"><?php
|
218 |
-
<th class="text-center"><?php
|
219 |
-
<th class="text-center"><?php
|
220 |
</tr>
|
221 |
</thead>
|
222 |
<tbody>
|
223 |
<?php $post_types = get_post_types( array( 'public' => true ), 'objects' ); ?>
|
224 |
-
<?php foreach ( $post_types as $pt ): ?>
|
225 |
<?php
|
226 |
$uid = get_user_by( 'email', $request['email'] );
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
$count = count_user_posts( $uid, $pt->name );
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
?>
|
235 |
<tr>
|
236 |
-
<td class="row-title"><?php echo esc_attr( $pt->label ) ?></td>
|
237 |
-
<td class="text-center"><?php echo esc_attr( $count ) ?></td>
|
238 |
<td class="text-center">
|
239 |
-
<a href="<?php echo admin_url('edit.php?post_type=' . $pt->name . '&author=' . $uid); ?>" target="_blank" class="button"><?php echo esc_html( $pt->labels->view_items ); ?></a>
|
240 |
</td>
|
241 |
<td class="text-center">
|
242 |
<select name="reassign" class="gdpr-reassign">
|
243 |
<option value="0"></option>
|
244 |
<?php $admins = get_users( array( 'role' => 'administrator' ) ); ?>
|
245 |
-
<?php foreach ( $admins as $admin ): ?>
|
246 |
-
<option value="<?php echo esc_attr( $admin->ID ) ?>"><?php echo esc_html( $admin->display_name ) ?></option>
|
247 |
<?php endforeach; ?>
|
248 |
</select>
|
249 |
</td>
|
250 |
<td class="text-center">
|
251 |
<form method="post" class="gdpr-reassign-content">
|
252 |
-
<?php wp_nonce_field( 'gdpr-reassign-content-action', 'gdpr_reassign_content_nonce' ) ?>
|
253 |
-
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ) ?>">
|
254 |
<input type="hidden" name="reassign_to" value="">
|
255 |
<input type="hidden" name="post_type" value="<?php echo esc_attr( $pt->name ); ?>">
|
256 |
<input type="hidden" name="post_count" value="<?php echo esc_attr( $count ); ?>">
|
@@ -263,32 +271,34 @@
|
|
263 |
</tr>
|
264 |
<?php endforeach; ?>
|
265 |
<?php
|
266 |
-
$comment_count = get_comments(
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
|
|
|
|
271 |
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
<?php
|
291 |
-
|
292 |
?>
|
293 |
</tbody>
|
294 |
<tr>
|
@@ -300,7 +310,7 @@
|
|
300 |
<?php endif ?>
|
301 |
<?php $index++; ?>
|
302 |
<?php endforeach; ?>
|
303 |
-
<?php else: ?>
|
304 |
<tr>
|
305 |
<td colspan="4" class="text-center">
|
306 |
<?php esc_html_e( 'No pending requests', 'gdpr' ); ?>
|
19 |
<?php settings_errors(); ?>
|
20 |
<div class="nav-tab-wrapper">
|
21 |
<?php foreach ( $tabs as $key => $value ) : ?>
|
22 |
+
<a href="<?php echo esc_html( '#' . $key ); ?>" class="nav-tab">
|
23 |
<?php echo esc_html( $value['name'] ); ?>
|
24 |
+
<?php if ( $value['count'] ) : ?>
|
25 |
<span class="gdpr-pending-requests-badge"><?php echo esc_html( $value['count'] ); ?></span>
|
26 |
<?php endif ?>
|
27 |
</a>
|
29 |
</div>
|
30 |
|
31 |
<div class="gdpr-tab hidden" data-id="rectify">
|
32 |
+
<h2><?php esc_html_e( 'Rectify Data', 'gdpr' ); ?></h2>
|
33 |
<table class="widefat gdpr-request-table">
|
34 |
<thead>
|
35 |
<tr>
|
40 |
</tr>
|
41 |
</thead>
|
42 |
<tbody>
|
43 |
+
<?php if ( isset( $rectify ) && ! empty( $rectify ) ) : ?>
|
44 |
+
<?php foreach ( $rectify as $i => $request ) : ?>
|
45 |
<tr>
|
46 |
<td class="row-title"><?php echo esc_html( $request['email'] ); ?></td>
|
47 |
<td class="text-center"><?php echo esc_html( $request['date'] ); ?></td>
|
|
|
48 |
<td class="text-center">
|
49 |
+
<?php
|
50 |
+
echo wp_kses(
|
51 |
+
wpautop( wp_unslash( $request['data'] ) ), array(
|
52 |
+
'p' => true,
|
53 |
+
'br' => true,
|
54 |
+
)
|
55 |
+
);
|
56 |
+
?>
|
57 |
+
</td>
|
58 |
+
<td class="text-center">
|
59 |
+
<form class="frm-process-rectification" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post">
|
60 |
<?php wp_nonce_field( 'gdpr-request-nonce', 'gdpr_cancel_rectify_nonce' ); ?>
|
61 |
<input type="hidden" name="action" value="gdpr_cancel_request">
|
62 |
<input type="hidden" name="type" value="rectify">
|
63 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
64 |
+
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ); ?>">
|
65 |
+
<?php submit_button( esc_html__( 'Cancel Request', 'gdpr' ), 'delete', '', false ); ?>
|
66 |
</form>
|
67 |
+
<form class="frm-process-rectification" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post">
|
68 |
<?php wp_nonce_field( 'gdpr-mark-as-resolved', 'gdpr_rectify_mark_resolved_nonce' ); ?>
|
69 |
<input type="hidden" name="action" value="gdpr_mark_resolved">
|
70 |
<input type="hidden" name="type" value="rectify">
|
71 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
72 |
+
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ); ?>">
|
73 |
+
<?php submit_button( esc_html__( 'Mark as Resolved', 'gdpr' ), 'primary', '', false ); ?>
|
74 |
</form>
|
75 |
</td>
|
76 |
</tr>
|
77 |
<?php endforeach ?>
|
78 |
+
<?php else : ?>
|
79 |
<tr>
|
80 |
<td colspan="4" class="text-center">
|
81 |
<?php esc_html_e( 'No pending requests', 'gdpr' ); ?>
|
95 |
</div>
|
96 |
|
97 |
<div class="gdpr-tab hidden" data-id="complaint">
|
98 |
+
<h2><?php esc_html_e( 'Complaints', 'gdpr' ); ?></h2>
|
99 |
<table class="widefat gdpr-request-table">
|
100 |
<thead>
|
101 |
<tr>
|
106 |
</tr>
|
107 |
</thead>
|
108 |
<tbody>
|
109 |
+
<?php if ( isset( $complaint ) && ! empty( $complaint ) ) : ?>
|
110 |
+
<?php foreach ( $complaint as $i => $request ) : ?>
|
111 |
<tr>
|
112 |
<td class="row-title"><?php echo esc_html( $request['email'] ); ?></td>
|
113 |
<td class="text-center"><?php echo esc_html( $request['date'] ); ?></td>
|
114 |
<td class="text-center"><?php echo esc_html( wp_unslash( $request['data'] ) ); ?></td>
|
115 |
<td class="text-center">
|
116 |
+
<form class="frm-process-complaint" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post">
|
117 |
<?php wp_nonce_field( 'gdpr-request-nonce', 'gdpr_cancel_complaint_nonce' ); ?>
|
118 |
<input type="hidden" name="action" value="gdpr_cancel_request">
|
119 |
<input type="hidden" name="type" value="complaint">
|
120 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
121 |
+
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ); ?>">
|
122 |
+
<?php submit_button( esc_html__( 'Cancel Request', 'gdpr' ), 'delete', '', false ); ?>
|
123 |
</form>
|
124 |
+
<form class="frm-process-complaint" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post">
|
125 |
<?php wp_nonce_field( 'gdpr-mark-as-resolved', 'gdpr_complaint_mark_resolved_nonce' ); ?>
|
126 |
<input type="hidden" name="action" value="gdpr_mark_resolved">
|
127 |
<input type="hidden" name="type" value="complaint">
|
128 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
129 |
+
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ); ?>">
|
130 |
+
<?php submit_button( esc_html__( 'Mark as Resolved', 'gdpr' ), 'primary', '', false ); ?>
|
131 |
</form>
|
132 |
</td>
|
133 |
</tr>
|
134 |
<?php endforeach ?>
|
135 |
+
<?php else : ?>
|
136 |
<tr>
|
137 |
<td colspan="4" class="text-center">
|
138 |
<?php esc_html_e( 'No pending requests', 'gdpr' ); ?>
|
152 |
</div>
|
153 |
|
154 |
<div class="gdpr-tab hidden" data-id="delete">
|
155 |
+
<h2><?php esc_html_e( 'Right to erasure', 'gdpr' ); ?></h2>
|
156 |
<div class="postbox not-full">
|
157 |
+
<form class="gdpr-manual-email-lookup" method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
|
158 |
<div class="inside">
|
159 |
<input type="hidden" name="action" value="gdpr_add_to_deletion_requests">
|
160 |
<?php wp_nonce_field( 'gdpr-add-to-deletion-requests', 'gdpr_deletion_requests_nonce' ); ?>
|
176 |
</tr>
|
177 |
</thead>
|
178 |
<tbody>
|
179 |
+
<?php if ( isset( $delete ) && ! empty( $delete ) ) : ?>
|
180 |
<?php $index = 0; ?>
|
181 |
+
<?php foreach ( $delete as $i => $request ) : ?>
|
182 |
+
<?php $user = get_user_by( 'email', $request['email'] ); ?>
|
183 |
+
<tr class="<?php echo ( 0 === $index % 2 ? '' : 'alternate' ); ?>">
|
184 |
<td class="row-title"><?php echo esc_html( $request['email'] ); ?></td>
|
185 |
<td class="text-center"><?php echo esc_html( $request['date'] ); ?></td>
|
186 |
<td class="text-center">
|
191 |
esc_html_e( 'No content to review', 'gdpr' );
|
192 |
}
|
193 |
?>
|
194 |
+
<?php if ( GDPR_Requests::user_has_content( $user ) ) : ?>
|
195 |
+
<?php else : ?>
|
196 |
+
<?php endif; ?>
|
|
|
197 |
</td>
|
198 |
<td class="text-center">
|
199 |
+
<form class="frm-process-user-deletion" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post">
|
200 |
<?php wp_nonce_field( 'gdpr-request-nonce', 'gdpr_cancel_delete_nonce' ); ?>
|
201 |
<input type="hidden" name="action" value="gdpr_cancel_request">
|
202 |
<input type="hidden" name="type" value="delete">
|
203 |
+
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ); ?>">
|
204 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
205 |
+
<?php submit_button( esc_html__( 'Cancel Request', 'gdpr' ), 'delete', '', false ); ?>
|
206 |
</form>
|
207 |
+
<form class="frm-process-user-deletion" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="post">
|
208 |
<?php wp_nonce_field( 'gdpr-request-delete-user', 'gdpr_delete_user' ); ?>
|
209 |
<input type="hidden" name="action" value="gdpr_delete_user">
|
210 |
+
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ); ?>">
|
211 |
<input type="hidden" name="index" value="<?php echo esc_attr( $i ); ?>">
|
212 |
+
<?php submit_button( esc_html__( 'Delete User', 'gdpr' ), 'primary', '', false ); ?>
|
213 |
</form>
|
214 |
</td>
|
215 |
</tr>
|
216 |
+
<?php if ( GDPR_Requests::user_has_content( $user ) ) : ?>
|
217 |
<tr class="review" data-index="<?php echo esc_attr( $index ); ?>">
|
218 |
<td colspan="4">
|
219 |
<div class="hidden">
|
221 |
<thead>
|
222 |
<tr>
|
223 |
<th><?php esc_html_e( 'Content Type', 'gdpr' ); ?></th>
|
224 |
+
<th class="text-center"><?php esc_html_e( 'Count', 'gdpr' ); ?></th>
|
225 |
+
<th class="text-center"><?php esc_html_e( 'Review', 'gdpr' ); ?></th>
|
226 |
+
<th class="text-center"><?php esc_html_e( 'Reassign', 'gdpr' ); ?></th>
|
227 |
+
<th class="text-center"><?php esc_html_e( 'Action', 'gdpr' ); ?></th>
|
228 |
</tr>
|
229 |
</thead>
|
230 |
<tbody>
|
231 |
<?php $post_types = get_post_types( array( 'public' => true ), 'objects' ); ?>
|
232 |
+
<?php foreach ( $post_types as $pt ) : ?>
|
233 |
<?php
|
234 |
$uid = get_user_by( 'email', $request['email'] );
|
235 |
+
if ( $uid && $uid instanceof WP_User ) {
|
236 |
+
$uid = $uid->ID;
|
237 |
+
}
|
238 |
$count = count_user_posts( $uid, $pt->name );
|
239 |
+
if ( '0' === $count ) {
|
240 |
+
continue;
|
241 |
+
}
|
242 |
?>
|
243 |
<tr>
|
244 |
+
<td class="row-title"><?php echo esc_attr( $pt->label ); ?></td>
|
245 |
+
<td class="text-center"><?php echo esc_attr( $count ); ?></td>
|
246 |
<td class="text-center">
|
247 |
+
<a href="<?php echo esc_url( admin_url( 'edit.php?post_type=' . $pt->name . '&author=' . $uid ) ); ?>" target="_blank" class="button"><?php echo esc_html( $pt->labels->view_items ); ?></a>
|
248 |
</td>
|
249 |
<td class="text-center">
|
250 |
<select name="reassign" class="gdpr-reassign">
|
251 |
<option value="0"></option>
|
252 |
<?php $admins = get_users( array( 'role' => 'administrator' ) ); ?>
|
253 |
+
<?php foreach ( $admins as $admin ) : ?>
|
254 |
+
<option value="<?php echo esc_attr( $admin->ID ); ?>"><?php echo esc_html( $admin->display_name ); ?></option>
|
255 |
<?php endforeach; ?>
|
256 |
</select>
|
257 |
</td>
|
258 |
<td class="text-center">
|
259 |
<form method="post" class="gdpr-reassign-content">
|
260 |
+
<?php wp_nonce_field( 'gdpr-reassign-content-action', 'gdpr_reassign_content_nonce' ); ?>
|
261 |
+
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ); ?>">
|
262 |
<input type="hidden" name="reassign_to" value="">
|
263 |
<input type="hidden" name="post_type" value="<?php echo esc_attr( $pt->name ); ?>">
|
264 |
<input type="hidden" name="post_count" value="<?php echo esc_attr( $count ); ?>">
|
271 |
</tr>
|
272 |
<?php endforeach; ?>
|
273 |
<?php
|
274 |
+
$comment_count = get_comments(
|
275 |
+
array(
|
276 |
+
'author_email' => $request['email'],
|
277 |
+
'include_unapproved' => true,
|
278 |
+
'count' => true,
|
279 |
+
)
|
280 |
+
);
|
281 |
|
282 |
+
if ( $comment_count ) {
|
283 |
+
?>
|
284 |
+
<tr>
|
285 |
+
<td class="row-title"><?php esc_html_e( 'Comments', 'gdpr' ); ?></td>
|
286 |
+
<td class="text-center"><?php echo esc_html( $comment_count ); ?></td>
|
287 |
+
<td class="text-center"><a href="<?php echo esc_url( admin_url( 'edit-comments.php?comment_status=all&s=' . rawurlencode( $request['email'] ) ) ); ?>" target="_blank" class="button"><?php esc_html_e( 'View Comments', 'gdpr' ); ?></a></td>
|
288 |
+
<td></td>
|
289 |
+
<td class="text-center">
|
290 |
+
<form method="post" class="gdpr-anonymize-comments">
|
291 |
+
<?php wp_nonce_field( 'gdpr-anonymize-comments-action', 'gdpr_anonymize_comments_nonce' ); ?>
|
292 |
+
<input type="hidden" name="user_email" value="<?php echo esc_attr( $request['email'] ); ?>">
|
293 |
+
<input type="hidden" name="comment_count" value="<?php echo esc_attr( $comment_count ); ?>">
|
294 |
+
<?php submit_button( esc_html__( 'Anonymize', 'gdpr' ), 'primary', '', false ); ?>
|
295 |
+
<span class="spinner"></span>
|
296 |
+
<p class="hidden"><strong><?php esc_html_e( 'Resolved', 'gdpr' ); ?></strong></p>
|
297 |
+
</form>
|
298 |
+
</td>
|
299 |
+
</tr>
|
300 |
<?php
|
301 |
+
}
|
302 |
?>
|
303 |
</tbody>
|
304 |
<tr>
|
310 |
<?php endif ?>
|
311 |
<?php $index++; ?>
|
312 |
<?php endforeach; ?>
|
313 |
+
<?php else : ?>
|
314 |
<tr>
|
315 |
<td colspan="4" class="text-center">
|
316 |
<?php esc_html_e( 'No pending requests', 'gdpr' ); ?>
|
admin/partials/settings.php
CHANGED
@@ -11,7 +11,7 @@
|
|
11 |
<tbody>
|
12 |
<tr>
|
13 |
<th scope="row">
|
14 |
-
<label for="gdpr_email_limit"><?php esc_html_e( 'Outgoing email limit', 'gdpr' ) ?>:</label>
|
15 |
<span class="screen-reader-text"><?php esc_attr_e( 'This is the hourly outgoing email limit set by your server.', 'gdpr' ); ?></span>
|
16 |
<span data-tooltip="<?php esc_attr_e( 'This is the hourly outgoing email limit set by your server.', 'gdpr' ); ?>">
|
17 |
<span class="dashicons dashicons-info"></span>
|
@@ -25,7 +25,7 @@
|
|
25 |
</tr>
|
26 |
<tr>
|
27 |
<th scope="row">
|
28 |
-
<label for="gdpr_deletion_needs_review"><?php esc_html_e( 'User deletion', 'gdpr' ) ?>:</label>
|
29 |
<span class="screen-reader-text"><?php esc_attr_e( 'Useful if you need to remove the user from third-party services.', 'gdpr' ); ?></span>
|
30 |
<span data-tooltip="<?php esc_attr_e( 'Useful if you need to remove the user from third-party services.', 'gdpr' ); ?>">
|
31 |
<span class="dashicons dashicons-info"></span>
|
@@ -38,7 +38,7 @@
|
|
38 |
</tr>
|
39 |
<tr>
|
40 |
<th scope="row">
|
41 |
-
<label for="gdpr_refresh_after_preferences_update"><?php esc_html_e( 'Refresh page after updating preferences', 'gdpr' ) ?>:</label>
|
42 |
</th>
|
43 |
<td>
|
44 |
<?php $refresh_page = get_option( 'gdpr_refresh_after_preferences_update', false ); ?>
|
@@ -48,7 +48,7 @@
|
|
48 |
</tr>
|
49 |
<tr>
|
50 |
<th scope="row">
|
51 |
-
<label for="gdpr_disable_css"><?php esc_html_e( 'Disable CSS', 'gdpr' ) ?>:</label>
|
52 |
</th>
|
53 |
<td>
|
54 |
<?php $disable_css = get_option( 'gdpr_disable_css', false ); ?>
|
@@ -57,7 +57,7 @@
|
|
57 |
</tr>
|
58 |
<tr>
|
59 |
<th scope="row">
|
60 |
-
<label for="gdpr_enable_telemetry_tracker"><?php esc_html_e( 'Enable the Telemetry Tracker', 'gdpr' ) ?>:</label>
|
61 |
<span class="screen-reader-text"><?php esc_attr_e( 'This tracks data that is being sent to outside servers.', 'gdpr' ); ?></span>
|
62 |
<span data-tooltip="<?php esc_attr_e( 'This tracks data that is being sent to outside servers.', 'gdpr' ); ?>">
|
63 |
<span class="dashicons dashicons-info"></span>
|
@@ -73,13 +73,13 @@
|
|
73 |
<hr>
|
74 |
<h2 class="title"><?php esc_html_e( 'Privacy Center', 'gdpr' ); ?></h2>
|
75 |
<p>
|
76 |
-
<?php esc_html_e( 'This section handles the privacy bar and some of the privacy preferences window.', 'gdpr' ) ?><br>
|
77 |
-
<strong><?php esc_html_e( 'Important:', 'gdpr' ); ?></strong> <?php esc_html_e( 'If the privacy banner text is not filled out, the privacy banner will not show up. Even if you registered your cookies.', 'gdpr' ) ?></p>
|
78 |
<table class="form-table">
|
79 |
<tbody>
|
80 |
<tr>
|
81 |
<th scope="row">
|
82 |
-
<label for="gdpr_enable_privacy_bar"><?php esc_html_e( 'Enable the Privacy Bar', 'gdpr' ) ?>:</label>
|
83 |
</th>
|
84 |
<td>
|
85 |
<?php $enable_privacy_bar = get_option( 'gdpr_enable_privacy_bar', true ); ?>
|
@@ -88,7 +88,7 @@
|
|
88 |
</tr>
|
89 |
<tr>
|
90 |
<th scope="row">
|
91 |
-
<label for="gdpr_display_cookie_categories_in_bar"><?php esc_html_e( 'Display the cookie categories in the privacy bar', 'gdpr' ) ?>:</label>
|
92 |
</th>
|
93 |
<td>
|
94 |
<?php $display_cookie_cat_checkboxes = get_option( 'gdpr_display_cookie_categories_in_bar', false ); ?>
|
@@ -97,7 +97,7 @@
|
|
97 |
</tr>
|
98 |
<tr>
|
99 |
<th scope="row">
|
100 |
-
<label for="gdpr_cookie_banner_content"><?php esc_html_e( 'Privacy Bar Content', 'gdpr' ) ?>:</label>
|
101 |
<span class="screen-reader-text"><?php esc_attr_e( 'This is required if you want the privacy bar to show up.', 'gdpr' ); ?></span>
|
102 |
<span data-tooltip="<?php esc_attr_e( 'This is required if you want the privacy bar to show up.', 'gdpr' ); ?>">
|
103 |
<span class="dashicons dashicons-info"></span>
|
@@ -110,7 +110,7 @@
|
|
110 |
</tr>
|
111 |
<tr>
|
112 |
<th scope="row">
|
113 |
-
<label for="gdpr_cookie_privacy_excerpt"><?php esc_html_e( 'Privacy Excerpt', 'gdpr' ) ?>:</label>
|
114 |
<span class="screen-reader-text"><?php esc_attr_e( 'This show up in the privacy preferences window.', 'gdpr' ); ?></span>
|
115 |
<span data-tooltip="<?php esc_attr_e( 'This show up in the privacy preferences window.', 'gdpr' ); ?>">
|
116 |
<span class="dashicons dashicons-info"></span>
|
@@ -128,16 +128,19 @@
|
|
128 |
<h2 class="title"><?php esc_html_e( 'Request Forms reCAPTCHA', 'gdpr' ); ?></h2>
|
129 |
<p><?php esc_html_e( 'To prevent spam attacks, you have the option to enable reCAPTCHA. Configure below your keys to make it work with our request forms.', 'gdpr' ); ?></p>
|
130 |
<p>
|
131 |
-
<?php
|
|
|
132 |
/* translators: External link with instructions on how to proceed. */
|
133 |
esc_html__( 'You can find the necessary information %s.', 'gdpr' ),
|
134 |
'<a href="https://www.google.com/recaptcha/admin" target="_blank">' . esc_html__( 'here', 'gdpr' ) . '</a>'
|
135 |
-
)
|
|
|
|
|
136 |
<table class="form-table">
|
137 |
<tbody>
|
138 |
<tr>
|
139 |
<th scope="row">
|
140 |
-
<label for="gdpr_use_recaptcha"><?php esc_html_e( 'Enable reCAPTCHA', 'gdpr' ) ?>:</label>
|
141 |
</th>
|
142 |
<td>
|
143 |
<?php $use_recaptcha = get_option( 'gdpr_use_recaptcha', false ); ?>
|
@@ -146,7 +149,7 @@
|
|
146 |
</tr>
|
147 |
<tr>
|
148 |
<th scope="row">
|
149 |
-
<label for="gdpr_recaptcha_site_key"><?php esc_html_e( 'Site Key', 'gdpr' ) ?>:</label>
|
150 |
</th>
|
151 |
<td>
|
152 |
<?php $site_key = get_option( 'gdpr_recaptcha_site_key', '' ); ?>
|
@@ -155,7 +158,7 @@
|
|
155 |
</tr>
|
156 |
<tr>
|
157 |
<th scope="row">
|
158 |
-
<label for="gdpr_recaptcha_secret_key"><?php esc_html_e( 'Secret Key', 'gdpr' ) ?>:</label>
|
159 |
</th>
|
160 |
<td>
|
161 |
<?php $secret_key = get_option( 'gdpr_recaptcha_secret_key', '' ); ?>
|
@@ -164,14 +167,14 @@
|
|
164 |
</tr>
|
165 |
</tbody>
|
166 |
</table>
|
167 |
-
<?php if ( class_exists( 'WooCommerce' ) ): ?>
|
168 |
<hr>
|
169 |
<h2 class="title"><?php esc_html_e( 'WooCommerce', 'gdpr' ); ?></h2>
|
170 |
<table class="form-table">
|
171 |
<tbody>
|
172 |
<tr>
|
173 |
<th scope="row">
|
174 |
-
<label for="gdpr_add_consent_checkboxes_registration"><?php esc_html_e( 'Add consent checkboxes to the registration page', 'gdpr' ) ?>:</label>
|
175 |
</th>
|
176 |
<td>
|
177 |
<?php $add_checkboxes_to_registration = get_option( 'gdpr_add_consent_checkboxes_registration', false ); ?>
|
@@ -180,7 +183,7 @@
|
|
180 |
</tr>
|
181 |
<tr>
|
182 |
<th scope="row">
|
183 |
-
<label for="gdpr_add_consent_checkboxes_checkout"><?php esc_html_e( 'Add consent checkboxes to the checkout registration form', 'gdpr' ) ?>:</label>
|
184 |
</th>
|
185 |
<td>
|
186 |
<?php $add_checkboxes_to_checkout = get_option( 'gdpr_add_consent_checkboxes_checkout', false ); ?>
|
@@ -192,13 +195,13 @@
|
|
192 |
<?php endif ?>
|
193 |
|
194 |
<hr>
|
195 |
-
<h2><?php esc_html_e( 'Cookies', 'gdpr' ) ?></h2>
|
196 |
<input type="text" id="cookie-tabs" class="regular-text" placeholder="<?php esc_attr_e( 'Category name', 'gdpr' ); ?>">
|
197 |
-
<button class="button button-primary add-tab"><?php esc_html_e( 'Add
|
198 |
<div id="gdpr-cookie-categories">
|
199 |
-
<?php foreach ( $registered_cookies as $cat_id => $cookie_cat ): ?>
|
200 |
<div class="postbox" id="cookie-tab-content-<?php echo esc_attr( $cat_id ); ?>">
|
201 |
-
<h2 class="hndle"><?php echo esc_html( $cookie_cat['name'] ) ?><button class="notice-dismiss" type="button"><span class="screen-reader-text"><?php esc_html_e( 'Remove this tab.', 'gdpr' ); ?></span></button></h2>
|
202 |
<div class="inside">
|
203 |
<table class="form-table">
|
204 |
<tr>
|
@@ -263,80 +266,80 @@
|
|
263 |
<td><textarea name="gdpr_cookie_popup_content[<?php echo esc_attr( $cat_id ); ?>][how_we_use]" id="tab-how-we-use-<?php echo esc_attr( $cat_id ); ?>" cols="53" rows="3"><?php echo esc_html( $registered_cookies[ $cat_id ]['how_we_use'] ); ?></textarea></td>
|
264 |
</tr>
|
265 |
<tr>
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
</table>
|
283 |
<div class="tab-hosts" data-tabid="<?php echo esc_attr( $cat_id ); ?>">
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
</div><!-- .inside -->
|
327 |
</div><!-- .postbox -->
|
328 |
<?php endforeach; ?>
|
329 |
</div>
|
330 |
|
331 |
<hr>
|
332 |
-
<h2><?php esc_html_e( 'Consents', 'gdpr' ) ?></h2>
|
333 |
<input type="text" id="type-of-consent" class="regular-text" placeholder="<?php esc_attr_e( 'E.g. Privacy Policy or Cookie Policy', 'gdpr' ); ?>">
|
334 |
<button class="button button-primary add-consent"><?php esc_html_e( 'Add consent', 'gdpr' ); ?></button>
|
335 |
<div id="consent-tabs">
|
336 |
<?php if ( ! empty( $consent_types ) ) : ?>
|
337 |
<?php foreach ( $consent_types as $consent_id => $consent ) : ?>
|
338 |
<div class="postbox" id="consent-type-content-<?php echo esc_attr( $consent_id ); ?>">
|
339 |
-
<h2 class="hndle"><?php echo esc_html( $consent['name'] ); ?> <span>(id: <?php echo esc_html( $consent_id ); ?>)</span><button class="notice-dismiss" type="button" aria-label="<?php esc_attr_e( 'Unregister this consent.', 'gdpr' ) ?>"></button></h2>
|
340 |
<input type="hidden" name="gdpr_consent_types[<?php echo esc_attr( $consent_id ); ?>][name]" value="<?php echo esc_attr( $consent['name'] ); ?>">
|
341 |
<div class="inside">
|
342 |
<table class="form-table">
|
@@ -353,8 +356,8 @@
|
|
353 |
<td>
|
354 |
<select name="gdpr_consent_types[<?php echo esc_attr( $consent_id ); ?>][policy-page]" id="consent-policy-page-<?php echo esc_attr( $consent_id ); ?>">
|
355 |
<option value=""></option>
|
356 |
-
<?php foreach ( $pages as $page ): ?>
|
357 |
-
<option value="<?php echo esc_attr( $page->ID ) ?>" <?php selected( $consent['policy-page'], $page->ID ); ?>><?php echo esc_html( $page->post_title ); ?></option>
|
358 |
<?php endforeach ?>
|
359 |
</select>
|
360 |
</td>
|
11 |
<tbody>
|
12 |
<tr>
|
13 |
<th scope="row">
|
14 |
+
<label for="gdpr_email_limit"><?php esc_html_e( 'Outgoing email limit', 'gdpr' ); ?>:</label>
|
15 |
<span class="screen-reader-text"><?php esc_attr_e( 'This is the hourly outgoing email limit set by your server.', 'gdpr' ); ?></span>
|
16 |
<span data-tooltip="<?php esc_attr_e( 'This is the hourly outgoing email limit set by your server.', 'gdpr' ); ?>">
|
17 |
<span class="dashicons dashicons-info"></span>
|
25 |
</tr>
|
26 |
<tr>
|
27 |
<th scope="row">
|
28 |
+
<label for="gdpr_deletion_needs_review"><?php esc_html_e( 'User deletion', 'gdpr' ); ?>:</label>
|
29 |
<span class="screen-reader-text"><?php esc_attr_e( 'Useful if you need to remove the user from third-party services.', 'gdpr' ); ?></span>
|
30 |
<span data-tooltip="<?php esc_attr_e( 'Useful if you need to remove the user from third-party services.', 'gdpr' ); ?>">
|
31 |
<span class="dashicons dashicons-info"></span>
|
38 |
</tr>
|
39 |
<tr>
|
40 |
<th scope="row">
|
41 |
+
<label for="gdpr_refresh_after_preferences_update"><?php esc_html_e( 'Refresh page after updating preferences', 'gdpr' ); ?>:</label>
|
42 |
</th>
|
43 |
<td>
|
44 |
<?php $refresh_page = get_option( 'gdpr_refresh_after_preferences_update', false ); ?>
|
48 |
</tr>
|
49 |
<tr>
|
50 |
<th scope="row">
|
51 |
+
<label for="gdpr_disable_css"><?php esc_html_e( 'Disable CSS', 'gdpr' ); ?>:</label>
|
52 |
</th>
|
53 |
<td>
|
54 |
<?php $disable_css = get_option( 'gdpr_disable_css', false ); ?>
|
57 |
</tr>
|
58 |
<tr>
|
59 |
<th scope="row">
|
60 |
+
<label for="gdpr_enable_telemetry_tracker"><?php esc_html_e( 'Enable the Telemetry Tracker', 'gdpr' ); ?>:</label>
|
61 |
<span class="screen-reader-text"><?php esc_attr_e( 'This tracks data that is being sent to outside servers.', 'gdpr' ); ?></span>
|
62 |
<span data-tooltip="<?php esc_attr_e( 'This tracks data that is being sent to outside servers.', 'gdpr' ); ?>">
|
63 |
<span class="dashicons dashicons-info"></span>
|
73 |
<hr>
|
74 |
<h2 class="title"><?php esc_html_e( 'Privacy Center', 'gdpr' ); ?></h2>
|
75 |
<p>
|
76 |
+
<?php esc_html_e( 'This section handles the privacy bar and some of the privacy preferences window.', 'gdpr' ); ?><br>
|
77 |
+
<strong><?php esc_html_e( 'Important:', 'gdpr' ); ?></strong> <?php esc_html_e( 'If the privacy banner text is not filled out, the privacy banner will not show up. Even if you registered your cookies.', 'gdpr' ); ?></p>
|
78 |
<table class="form-table">
|
79 |
<tbody>
|
80 |
<tr>
|
81 |
<th scope="row">
|
82 |
+
<label for="gdpr_enable_privacy_bar"><?php esc_html_e( 'Enable the Privacy Bar', 'gdpr' ); ?>:</label>
|
83 |
</th>
|
84 |
<td>
|
85 |
<?php $enable_privacy_bar = get_option( 'gdpr_enable_privacy_bar', true ); ?>
|
88 |
</tr>
|
89 |
<tr>
|
90 |
<th scope="row">
|
91 |
+
<label for="gdpr_display_cookie_categories_in_bar"><?php esc_html_e( 'Display the cookie categories in the privacy bar', 'gdpr' ); ?>:</label>
|
92 |
</th>
|
93 |
<td>
|
94 |
<?php $display_cookie_cat_checkboxes = get_option( 'gdpr_display_cookie_categories_in_bar', false ); ?>
|
97 |
</tr>
|
98 |
<tr>
|
99 |
<th scope="row">
|
100 |
+
<label for="gdpr_cookie_banner_content"><?php esc_html_e( 'Privacy Bar Content', 'gdpr' ); ?>:</label>
|
101 |
<span class="screen-reader-text"><?php esc_attr_e( 'This is required if you want the privacy bar to show up.', 'gdpr' ); ?></span>
|
102 |
<span data-tooltip="<?php esc_attr_e( 'This is required if you want the privacy bar to show up.', 'gdpr' ); ?>">
|
103 |
<span class="dashicons dashicons-info"></span>
|
110 |
</tr>
|
111 |
<tr>
|
112 |
<th scope="row">
|
113 |
+
<label for="gdpr_cookie_privacy_excerpt"><?php esc_html_e( 'Privacy Excerpt', 'gdpr' ); ?>:</label>
|
114 |
<span class="screen-reader-text"><?php esc_attr_e( 'This show up in the privacy preferences window.', 'gdpr' ); ?></span>
|
115 |
<span data-tooltip="<?php esc_attr_e( 'This show up in the privacy preferences window.', 'gdpr' ); ?>">
|
116 |
<span class="dashicons dashicons-info"></span>
|
128 |
<h2 class="title"><?php esc_html_e( 'Request Forms reCAPTCHA', 'gdpr' ); ?></h2>
|
129 |
<p><?php esc_html_e( 'To prevent spam attacks, you have the option to enable reCAPTCHA. Configure below your keys to make it work with our request forms.', 'gdpr' ); ?></p>
|
130 |
<p>
|
131 |
+
<?php
|
132 |
+
echo sprintf(
|
133 |
/* translators: External link with instructions on how to proceed. */
|
134 |
esc_html__( 'You can find the necessary information %s.', 'gdpr' ),
|
135 |
'<a href="https://www.google.com/recaptcha/admin" target="_blank">' . esc_html__( 'here', 'gdpr' ) . '</a>'
|
136 |
+
)
|
137 |
+
?>
|
138 |
+
</p>
|
139 |
<table class="form-table">
|
140 |
<tbody>
|
141 |
<tr>
|
142 |
<th scope="row">
|
143 |
+
<label for="gdpr_use_recaptcha"><?php esc_html_e( 'Enable reCAPTCHA', 'gdpr' ); ?>:</label>
|
144 |
</th>
|
145 |
<td>
|
146 |
<?php $use_recaptcha = get_option( 'gdpr_use_recaptcha', false ); ?>
|
149 |
</tr>
|
150 |
<tr>
|
151 |
<th scope="row">
|
152 |
+
<label for="gdpr_recaptcha_site_key"><?php esc_html_e( 'Site Key', 'gdpr' ); ?>:</label>
|
153 |
</th>
|
154 |
<td>
|
155 |
<?php $site_key = get_option( 'gdpr_recaptcha_site_key', '' ); ?>
|
158 |
</tr>
|
159 |
<tr>
|
160 |
<th scope="row">
|
161 |
+
<label for="gdpr_recaptcha_secret_key"><?php esc_html_e( 'Secret Key', 'gdpr' ); ?>:</label>
|
162 |
</th>
|
163 |
<td>
|
164 |
<?php $secret_key = get_option( 'gdpr_recaptcha_secret_key', '' ); ?>
|
167 |
</tr>
|
168 |
</tbody>
|
169 |
</table>
|
170 |
+
<?php if ( class_exists( 'WooCommerce' ) ) : ?>
|
171 |
<hr>
|
172 |
<h2 class="title"><?php esc_html_e( 'WooCommerce', 'gdpr' ); ?></h2>
|
173 |
<table class="form-table">
|
174 |
<tbody>
|
175 |
<tr>
|
176 |
<th scope="row">
|
177 |
+
<label for="gdpr_add_consent_checkboxes_registration"><?php esc_html_e( 'Add consent checkboxes to the registration page', 'gdpr' ); ?>:</label>
|
178 |
</th>
|
179 |
<td>
|
180 |
<?php $add_checkboxes_to_registration = get_option( 'gdpr_add_consent_checkboxes_registration', false ); ?>
|
183 |
</tr>
|
184 |
<tr>
|
185 |
<th scope="row">
|
186 |
+
<label for="gdpr_add_consent_checkboxes_checkout"><?php esc_html_e( 'Add consent checkboxes to the checkout registration form', 'gdpr' ); ?>:</label>
|
187 |
</th>
|
188 |
<td>
|
189 |
<?php $add_checkboxes_to_checkout = get_option( 'gdpr_add_consent_checkboxes_checkout', false ); ?>
|
195 |
<?php endif ?>
|
196 |
|
197 |
<hr>
|
198 |
+
<h2><?php esc_html_e( 'Cookies', 'gdpr' ); ?></h2>
|
199 |
<input type="text" id="cookie-tabs" class="regular-text" placeholder="<?php esc_attr_e( 'Category name', 'gdpr' ); ?>">
|
200 |
+
<button class="button button-primary add-tab"><?php esc_html_e( 'Add cookie category', 'gdpr' ); ?></button>
|
201 |
<div id="gdpr-cookie-categories">
|
202 |
+
<?php foreach ( $registered_cookies as $cat_id => $cookie_cat ) : ?>
|
203 |
<div class="postbox" id="cookie-tab-content-<?php echo esc_attr( $cat_id ); ?>">
|
204 |
+
<h2 class="hndle"><?php echo esc_html( $cookie_cat['name'] ); ?><button class="notice-dismiss" type="button"><span class="screen-reader-text"><?php esc_html_e( 'Remove this tab.', 'gdpr' ); ?></span></button></h2>
|
205 |
<div class="inside">
|
206 |
<table class="form-table">
|
207 |
<tr>
|
266 |
<td><textarea name="gdpr_cookie_popup_content[<?php echo esc_attr( $cat_id ); ?>][how_we_use]" id="tab-how-we-use-<?php echo esc_attr( $cat_id ); ?>" cols="53" rows="3"><?php echo esc_html( $registered_cookies[ $cat_id ]['how_we_use'] ); ?></textarea></td>
|
267 |
</tr>
|
268 |
<tr>
|
269 |
+
<th>
|
270 |
+
<label for="hosts-<?php echo esc_attr( $cat_id ); ?>">
|
271 |
+
<?php esc_html_e( 'Third party domain', 'gdpr' ); ?>:
|
272 |
+
<span class="screen-reader-text"><?php esc_attr_e( 'E.g. facebook.com', 'gdpr' ); ?></span>
|
273 |
+
<span data-tooltip="<?php esc_attr_e( 'E.g. facebook.com', 'gdpr' ); ?>">
|
274 |
+
<span class="dashicons dashicons-info"></span>
|
275 |
+
</span>
|
276 |
+
</label>
|
277 |
+
</th>
|
278 |
+
<td>
|
279 |
+
<input type="text" id="hosts-<?php echo esc_attr( $cat_id ); ?>" class="regular-text" placeholder="<?php esc_attr_e( 'domain.com', 'gdpr' ); ?>" />
|
280 |
+
<button class="button button-primary add-host" data-tabid="<?php echo esc_attr( $cat_id ); ?>"><?php esc_html_e( 'Add', 'gdpr' ); ?></button>
|
281 |
+
<br>
|
282 |
+
<span class="description"><?php esc_html_e( 'Cookies that are set by a third party, like facebook.com.', 'gdpr' ); ?></span>
|
283 |
+
</td>
|
284 |
+
</tr>
|
285 |
</table>
|
286 |
<div class="tab-hosts" data-tabid="<?php echo esc_attr( $cat_id ); ?>">
|
287 |
+
<?php if ( isset( $cookie_cat['hosts'] ) && $cookie_cat['hosts'] ) : ?>
|
288 |
+
<?php foreach ( $cookie_cat['hosts'] as $domain_id => $domain ) : ?>
|
289 |
+
<div class="postbox">
|
290 |
+
<h2 class="hndle"><?php echo esc_attr( $domain_id ); ?><button class="notice-dismiss" type="button" aria-label="<?php esc_attr_e( 'Remove this domain.', 'gdpr' ); ?>"></button></h2>
|
291 |
+
<div class="inside">
|
292 |
+
<table class="form-table">
|
293 |
+
<tr>
|
294 |
+
<th>
|
295 |
+
<label for="hosts-cookies-used-<?php echo esc_attr( $domain_id ); ?>">
|
296 |
+
<?php esc_html_e( 'Cookies used', 'gdpr' ); ?>:
|
297 |
+
<span class="screen-reader-text"><?php esc_attr_e( 'A comma separated list of cookies that your site is using from this third-party provider.', 'gdpr' ); ?></span>
|
298 |
+
<span data-tooltip="<?php esc_attr_e( 'A comma separated list of cookies that your site is using from this third-party provider.', 'gdpr' ); ?>">
|
299 |
+
<span class="dashicons dashicons-info"></span>
|
300 |
+
</span>
|
301 |
+
</label>
|
302 |
+
</th>
|
303 |
+
<td>
|
304 |
+
<textarea cols="53" rows="3" name="gdpr_cookie_popup_content[<?php echo esc_attr( $cat_id ); ?>][hosts][<?php echo esc_attr( $domain_id ); ?>][cookies_used]" id="hosts-cookies-used-<?php echo esc_attr( $domain_id ); ?>"><?php echo esc_attr( $domain['cookies_used'] ); ?></textarea>
|
305 |
+
</td>
|
306 |
+
</tr>
|
307 |
+
<tr>
|
308 |
+
<th>
|
309 |
+
<label for="hosts-cookies-optout-<?php echo esc_attr( $domain_id ); ?>">
|
310 |
+
<?php esc_html_e( 'Opt Out Link', 'gdpr' ); ?>:
|
311 |
+
<span class="screen-reader-text"><?php esc_attr_e( 'Add a link with the third-party instructions on how to opt out of their cookies.', 'gdpr' ); ?></span>
|
312 |
+
<span data-tooltip="<?php esc_attr_e( 'Add a link with the third-party instructions on how to opt out of their cookies.', 'gdpr' ); ?>">
|
313 |
+
<span class="dashicons dashicons-info"></span>
|
314 |
+
</span>
|
315 |
+
</label>
|
316 |
+
</th>
|
317 |
+
<td>
|
318 |
+
<input type="text" name="gdpr_cookie_popup_content[<?php echo esc_attr( $cat_id ); ?>][hosts][<?php echo esc_attr( $domain_id ); ?>][optout]" value="<?php echo esc_attr( $domain['optout'] ); ?>" id="hosts-cookies-optout-<?php echo esc_attr( $domain_id ); ?>" class="regular-text" />
|
319 |
+
<br>
|
320 |
+
<span class="description"><?php esc_html_e( 'Url with instructions on how to opt out.', 'gdpr' ); ?></span>
|
321 |
+
</td>
|
322 |
+
</tr>
|
323 |
+
</table>
|
324 |
+
</div>
|
325 |
+
</div>
|
326 |
+
<?php endforeach; ?>
|
327 |
+
<?php endif; ?>
|
328 |
+
</div>
|
329 |
</div><!-- .inside -->
|
330 |
</div><!-- .postbox -->
|
331 |
<?php endforeach; ?>
|
332 |
</div>
|
333 |
|
334 |
<hr>
|
335 |
+
<h2><?php esc_html_e( 'Consents', 'gdpr' ); ?></h2>
|
336 |
<input type="text" id="type-of-consent" class="regular-text" placeholder="<?php esc_attr_e( 'E.g. Privacy Policy or Cookie Policy', 'gdpr' ); ?>">
|
337 |
<button class="button button-primary add-consent"><?php esc_html_e( 'Add consent', 'gdpr' ); ?></button>
|
338 |
<div id="consent-tabs">
|
339 |
<?php if ( ! empty( $consent_types ) ) : ?>
|
340 |
<?php foreach ( $consent_types as $consent_id => $consent ) : ?>
|
341 |
<div class="postbox" id="consent-type-content-<?php echo esc_attr( $consent_id ); ?>">
|
342 |
+
<h2 class="hndle"><?php echo esc_html( $consent['name'] ); ?> <span>(id: <?php echo esc_html( $consent_id ); ?>)</span><button class="notice-dismiss" type="button" aria-label="<?php esc_attr_e( 'Unregister this consent.', 'gdpr' ); ?>"></button></h2>
|
343 |
<input type="hidden" name="gdpr_consent_types[<?php echo esc_attr( $consent_id ); ?>][name]" value="<?php echo esc_attr( $consent['name'] ); ?>">
|
344 |
<div class="inside">
|
345 |
<table class="form-table">
|
356 |
<td>
|
357 |
<select name="gdpr_consent_types[<?php echo esc_attr( $consent_id ); ?>][policy-page]" id="consent-policy-page-<?php echo esc_attr( $consent_id ); ?>">
|
358 |
<option value=""></option>
|
359 |
+
<?php foreach ( $pages as $page ) : ?>
|
360 |
+
<option value="<?php echo esc_attr( $page->ID ); ?>" <?php selected( $consent['policy-page'], $page->ID ); ?>><?php echo esc_html( $page->post_title ); ?></option>
|
361 |
<?php endforeach ?>
|
362 |
</select>
|
363 |
</td>
|
admin/partials/templates/tmpl-consents.php
CHANGED
@@ -17,8 +17,8 @@
|
|
17 |
<td>
|
18 |
<select name="gdpr_consent_types[{{data.key}}][policy-page]" id="consent-policy-page-{{data.key}}">
|
19 |
<option value=""></option>
|
20 |
-
<?php foreach ( $pages as $page ): ?>
|
21 |
-
<option value="<?php echo esc_attr( $page->ID ) ?>"><?php echo esc_html( $page->post_title ); ?></option>
|
22 |
<?php endforeach ?>
|
23 |
</select>
|
24 |
</td>
|
17 |
<td>
|
18 |
<select name="gdpr_consent_types[{{data.key}}][policy-page]" id="consent-policy-page-{{data.key}}">
|
19 |
<option value=""></option>
|
20 |
+
<?php foreach ( $pages as $page ) : ?>
|
21 |
+
<option value="<?php echo esc_attr( $page->ID ); ?>"><?php echo esc_html( $page->post_title ); ?></option>
|
22 |
<?php endforeach ?>
|
23 |
</select>
|
24 |
</td>
|
admin/partials/templates/tmpl-cookies.php
CHANGED
@@ -40,8 +40,8 @@
|
|
40 |
<th>
|
41 |
<label for="cookies-used-{{data.key}}">
|
42 |
<?php esc_html_e( 'Cookies used', 'gdpr' ); ?>:
|
43 |
-
<span class="screen-reader-text"><?php esc_attr_e( 'A comma
|
44 |
-
<span data-tooltip="<?php esc_attr_e( 'A comma
|
45 |
<span class="dashicons dashicons-info"></span>
|
46 |
</span>
|
47 |
</label>
|
@@ -65,22 +65,22 @@
|
|
65 |
<td><textarea name="gdpr_cookie_popup_content[{{data.key}}][how_we_use]" id="tab-how-we-use-{{data.key}}" cols="53" rows="3"></textarea></td>
|
66 |
</tr>
|
67 |
<tr>
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
</table>
|
85 |
<div class="tab-hosts" data-tabid="{{data.key}}">
|
86 |
|
40 |
<th>
|
41 |
<label for="cookies-used-{{data.key}}">
|
42 |
<?php esc_html_e( 'Cookies used', 'gdpr' ); ?>:
|
43 |
+
<span class="screen-reader-text"><?php esc_attr_e( 'A comma-separated list of cookies that your site is using that fit this category.', 'gdpr' ); ?></span>
|
44 |
+
<span data-tooltip="<?php esc_attr_e( 'A comma-separated list of cookies that your site is using that fit this category.', 'gdpr' ); ?>">
|
45 |
<span class="dashicons dashicons-info"></span>
|
46 |
</span>
|
47 |
</label>
|
65 |
<td><textarea name="gdpr_cookie_popup_content[{{data.key}}][how_we_use]" id="tab-how-we-use-{{data.key}}" cols="53" rows="3"></textarea></td>
|
66 |
</tr>
|
67 |
<tr>
|
68 |
+
<th>
|
69 |
+
<label for="hosts-{{data.key}}">
|
70 |
+
<?php esc_html_e( 'Third party domain', 'gdpr' ); ?>:
|
71 |
+
<span class="screen-reader-text"><?php esc_attr_e( 'E.g. youtube.com', 'gdpr' ); ?></span>
|
72 |
+
<span data-tooltip="<?php esc_attr_e( 'E.g. youtube.com', 'gdpr' ); ?>">
|
73 |
+
<span class="dashicons dashicons-info"></span>
|
74 |
+
</span>
|
75 |
+
</label>
|
76 |
+
</th>
|
77 |
+
<td>
|
78 |
+
<input type="text" id="hosts-{{data.key}}" class="regular-text" placeholder="<?php esc_attr_e( 'domain.com', 'gdpr' ); ?>" />
|
79 |
+
<button class="button button-primary add-host" data-tabid="{{data.key}}"><?php esc_html_e( 'Add', 'gdpr' ); ?></button>
|
80 |
+
<br>
|
81 |
+
<span class="description"><?php esc_html_e( 'Cookies that are set by a third party, like facebook.com.', 'gdpr' ); ?></span>
|
82 |
+
</td>
|
83 |
+
</tr>
|
84 |
</table>
|
85 |
<div class="tab-hosts" data-tabid="{{data.key}}">
|
86 |
|
admin/partials/templates/tmpl-tools.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<script type="text/html" id="tmpl-audit-log-result-success">
|
2 |
<div class="gdpr-audit-log-result">
|
3 |
-
<h2><?php echo
|
4 |
<div class="postbox">
|
5 |
<div class="inside">
|
6 |
<textarea readonly class="gdpr-audit-log-result large-text" rows="20">{{{data.result}}}</textarea>
|
@@ -11,7 +11,7 @@
|
|
11 |
|
12 |
<script type="text/html" id="tmpl-audit-log-result-error">
|
13 |
<div class="gdpr-audit-log-result">
|
14 |
-
<h2><?php echo
|
15 |
<div class="notice notice-error">
|
16 |
<p><?php esc_html_e( 'We could not find a any logs for that email and token combination.', 'gdpr' ); ?></p>
|
17 |
</div>
|
@@ -20,13 +20,13 @@
|
|
20 |
|
21 |
<script type="text/html" id="tmpl-access-data-result-success">
|
22 |
<div class="gdpr-access-data-result">
|
23 |
-
<h2><?php echo
|
24 |
<p>
|
25 |
<form method="post" class="frm-export-data">
|
26 |
<?php wp_nonce_field( 'gdpr-export-data', 'gdpr_export_data_nonce' ); ?>
|
27 |
<input type="hidden" name="user_email" value="{{data.user_email}}">
|
28 |
-
<?php submit_button( 'XML', 'primary', 'download-data-xml', false ) ?>
|
29 |
-
<?php submit_button( 'JSON', 'primary', 'download-data-json', false ) ?>
|
30 |
</form>
|
31 |
</p>
|
32 |
<div class="postbox">
|
@@ -41,7 +41,7 @@
|
|
41 |
|
42 |
<script type="text/html" id="tmpl-access-data-result-error">
|
43 |
<div class="gdpr-access-data-result">
|
44 |
-
<h2><?php echo
|
45 |
<div class="notice notice-error">
|
46 |
<p><?php esc_html_e( 'We could not find a user with that email.', 'gdpr' ); ?></p>
|
47 |
</div>
|
1 |
<script type="text/html" id="tmpl-audit-log-result-success">
|
2 |
<div class="gdpr-audit-log-result">
|
3 |
+
<h2><?php echo esc_html_e( 'Result', 'gdpr' ); ?></h2>
|
4 |
<div class="postbox">
|
5 |
<div class="inside">
|
6 |
<textarea readonly class="gdpr-audit-log-result large-text" rows="20">{{{data.result}}}</textarea>
|
11 |
|
12 |
<script type="text/html" id="tmpl-audit-log-result-error">
|
13 |
<div class="gdpr-audit-log-result">
|
14 |
+
<h2><?php echo esc_html_e( 'Error', 'gdpr' ); ?></h2>
|
15 |
<div class="notice notice-error">
|
16 |
<p><?php esc_html_e( 'We could not find a any logs for that email and token combination.', 'gdpr' ); ?></p>
|
17 |
</div>
|
20 |
|
21 |
<script type="text/html" id="tmpl-access-data-result-success">
|
22 |
<div class="gdpr-access-data-result">
|
23 |
+
<h2><?php echo esc_html_e( 'Result', 'gdpr' ); ?></h2>
|
24 |
<p>
|
25 |
<form method="post" class="frm-export-data">
|
26 |
<?php wp_nonce_field( 'gdpr-export-data', 'gdpr_export_data_nonce' ); ?>
|
27 |
<input type="hidden" name="user_email" value="{{data.user_email}}">
|
28 |
+
<?php submit_button( 'XML', 'primary', 'download-data-xml', false ); ?>
|
29 |
+
<?php submit_button( 'JSON', 'primary', 'download-data-json', false ); ?>
|
30 |
</form>
|
31 |
</p>
|
32 |
<div class="postbox">
|
41 |
|
42 |
<script type="text/html" id="tmpl-access-data-result-error">
|
43 |
<div class="gdpr-access-data-result">
|
44 |
+
<h2><?php echo esc_html_e( 'Error', 'gdpr' ); ?></h2>
|
45 |
<div class="notice notice-error">
|
46 |
<p><?php esc_html_e( 'We could not find a user with that email.', 'gdpr' ); ?></p>
|
47 |
</div>
|
admin/partials/tools.php
CHANGED
@@ -14,10 +14,10 @@
|
|
14 |
|
15 |
include_once plugin_dir_path( __FILE__ ) . 'templates/tmpl-tools.php';
|
16 |
|
17 |
-
if ( isset( $_GET['type'], $_GET['key'] ) ) {
|
18 |
|
19 |
-
if ( 'data-breach-confirmed' === $_GET['type'] ) {
|
20 |
-
$key = sanitize_text_field( wp_unslash( $_GET['key'] ) );
|
21 |
|
22 |
$data_breach = get_option( 'gdpr_data_breach_initiated', array( 'key' => '' ) );
|
23 |
if ( ! empty( $data_breach ) ) {
|
@@ -25,16 +25,14 @@ if ( isset( $_GET['type'], $_GET['key'] ) ) {
|
|
25 |
GDPR_Email::prepare_data_breach_emails( $key );
|
26 |
delete_option( 'gdpr_data_breach_initiated' );
|
27 |
|
28 |
-
|
|
|
29 |
wp_unschedule_event( $time, 'clean_gdpr_data_breach_request' );
|
30 |
}
|
31 |
|
32 |
add_settings_error( 'gdpr', 'resolved', esc_html__( 'Data Breach confirmed. Preparing bulk emails.', 'gdpr' ), 'updated' );
|
|
|
33 |
}
|
34 |
-
|
35 |
-
}
|
36 |
-
|
37 |
-
|
38 |
}
|
39 |
}
|
40 |
|
@@ -45,14 +43,14 @@ if ( isset( $_GET['type'], $_GET['key'] ) ) {
|
|
45 |
<?php settings_errors(); ?>
|
46 |
<div class="nav-tab-wrapper">
|
47 |
<?php foreach ( $tabs as $key => $value ) : ?>
|
48 |
-
<a href="<?php echo '#' . $key; ?>" class="nav-tab">
|
49 |
<?php echo esc_html( $value ); ?>
|
50 |
</a>
|
51 |
<?php endforeach; ?>
|
52 |
</div>
|
53 |
|
54 |
<div class="gdpr-tab hidden" data-id="access">
|
55 |
-
<h2><?php esc_html_e( 'Access Data', 'gdpr' ) ?></h2>
|
56 |
<div class="postbox not-full">
|
57 |
<form class="gdpr-access-data-lookup" method="post">
|
58 |
<div class="inside">
|
@@ -69,43 +67,43 @@ if ( isset( $_GET['type'], $_GET['key'] ) ) {
|
|
69 |
</div>
|
70 |
|
71 |
<div class="gdpr-tab hidden" data-id="data-breach">
|
72 |
-
<h2><?php esc_html_e( 'Data Breach', 'gdpr' ) ?></h2>
|
73 |
-
<form class="gdpr-data-breach-form" method="post" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>">
|
74 |
<?php wp_nonce_field( 'gdpr-data-breach', 'gdpr_data_breach_nonce' ); ?>
|
75 |
<input type="hidden" name="action" value="gdpr_data_breach">
|
76 |
<table class="form-table">
|
77 |
<tr>
|
78 |
-
<th><?php esc_html_e( 'Email content', 'gdpr' ) ?></th>
|
79 |
<td>
|
80 |
<textarea name="gdpr-data-breach-email-content" class="large-text" rows="5"></textarea>
|
81 |
-
<span class="description"><?php esc_html_e( 'The content that the end user will see before the below information.', 'gdpr' ) ?></span>
|
82 |
</td>
|
83 |
</tr>
|
84 |
<tr>
|
85 |
-
<th><?php esc_html_e( 'Nature of the personal data breach', 'gdpr' ) ?></th>
|
86 |
<td>
|
87 |
<textarea name="gdpr-data-breach-nature" class="large-text" rows="5" required></textarea>
|
88 |
-
<span class="description"><?php esc_html_e( 'Describe the nature of the personal data breach including where possible, the categories and the approximate number of data subjects concerned and the categories and the approximate number of personal data records concerned.', 'gdpr' ) ?></span>
|
89 |
</td>
|
90 |
</tr>
|
91 |
<tr>
|
92 |
-
<th><?php esc_html_e( 'Name and contact details of the data protection officer', 'gdpr' ) ?></th>
|
93 |
<td>
|
94 |
<textarea name="gdpr-name-contact-details-protection-officer" class="large-text" rows="5" required></textarea>
|
95 |
-
<span class="description"><?php esc_html_e( 'Communicate the name and contact details of the data protection officer or another point of contact where more information can be obtained.', 'gdpr' ) ?></span>
|
96 |
</td>
|
97 |
</tr>
|
98 |
<tr>
|
99 |
-
<th><?php esc_html_e( 'Likely consequences of the personal data breach', 'gdpr' ) ?></th>
|
100 |
<td>
|
101 |
<textarea name="gdpr-likely-consequences" class="large-text" rows="5" required></textarea>
|
102 |
</td>
|
103 |
</tr>
|
104 |
<tr>
|
105 |
-
<th><?php esc_html_e( 'Measures taken or proposed to be taken', 'gdpr' ) ?></th>
|
106 |
<td>
|
107 |
<textarea name="gdpr-measures-taken" class="large-text" rows="5" required></textarea>
|
108 |
-
<span class="description"><?php esc_html_e( 'Describe the measures taken or proposed to be taken by the controller to address the personal data breach, including, where appropriate, measures to mitigate its possible adverse effects.', 'gdpr' ) ?></span>
|
109 |
</td>
|
110 |
</tr>
|
111 |
</table>
|
@@ -114,7 +112,7 @@ if ( isset( $_GET['type'], $_GET['key'] ) ) {
|
|
114 |
</div>
|
115 |
|
116 |
<div class="gdpr-tab hidden" data-id="audit-log">
|
117 |
-
<h2><?php esc_html_e( 'Audit Log', 'gdpr' ) ?></h2>
|
118 |
<div class="postbox not-full">
|
119 |
<form class="gdpr-audit-log-lookup" method="post">
|
120 |
<div class="inside">
|
14 |
|
15 |
include_once plugin_dir_path( __FILE__ ) . 'templates/tmpl-tools.php';
|
16 |
|
17 |
+
if ( isset( $_GET['type'], $_GET['key'] ) ) { // WPCS: CSRF ok.
|
18 |
|
19 |
+
if ( 'data-breach-confirmed' === $_GET['type'] ) { // WPCS: CSRF ok.
|
20 |
+
$key = sanitize_text_field( wp_unslash( $_GET['key'] ) ); // WPCS: Input var ok, CSRF ok.
|
21 |
|
22 |
$data_breach = get_option( 'gdpr_data_breach_initiated', array( 'key' => '' ) );
|
23 |
if ( ! empty( $data_breach ) ) {
|
25 |
GDPR_Email::prepare_data_breach_emails( $key );
|
26 |
delete_option( 'gdpr_data_breach_initiated' );
|
27 |
|
28 |
+
$time = wp_next_scheduled( 'clean_gdpr_data_breach_request' );
|
29 |
+
if ( $time ) {
|
30 |
wp_unschedule_event( $time, 'clean_gdpr_data_breach_request' );
|
31 |
}
|
32 |
|
33 |
add_settings_error( 'gdpr', 'resolved', esc_html__( 'Data Breach confirmed. Preparing bulk emails.', 'gdpr' ), 'updated' );
|
34 |
+
}
|
35 |
}
|
|
|
|
|
|
|
|
|
36 |
}
|
37 |
}
|
38 |
|
43 |
<?php settings_errors(); ?>
|
44 |
<div class="nav-tab-wrapper">
|
45 |
<?php foreach ( $tabs as $key => $value ) : ?>
|
46 |
+
<a href="<?php echo esc_html( '#' . $key ); ?>" class="nav-tab">
|
47 |
<?php echo esc_html( $value ); ?>
|
48 |
</a>
|
49 |
<?php endforeach; ?>
|
50 |
</div>
|
51 |
|
52 |
<div class="gdpr-tab hidden" data-id="access">
|
53 |
+
<h2><?php esc_html_e( 'Access Data', 'gdpr' ); ?></h2>
|
54 |
<div class="postbox not-full">
|
55 |
<form class="gdpr-access-data-lookup" method="post">
|
56 |
<div class="inside">
|
67 |
</div>
|
68 |
|
69 |
<div class="gdpr-tab hidden" data-id="data-breach">
|
70 |
+
<h2><?php esc_html_e( 'Data Breach', 'gdpr' ); ?></h2>
|
71 |
+
<form class="gdpr-data-breach-form" method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
|
72 |
<?php wp_nonce_field( 'gdpr-data-breach', 'gdpr_data_breach_nonce' ); ?>
|
73 |
<input type="hidden" name="action" value="gdpr_data_breach">
|
74 |
<table class="form-table">
|
75 |
<tr>
|
76 |
+
<th><?php esc_html_e( 'Email content', 'gdpr' ); ?></th>
|
77 |
<td>
|
78 |
<textarea name="gdpr-data-breach-email-content" class="large-text" rows="5"></textarea>
|
79 |
+
<span class="description"><?php esc_html_e( 'The content that the end user will see before the below information.', 'gdpr' ); ?></span>
|
80 |
</td>
|
81 |
</tr>
|
82 |
<tr>
|
83 |
+
<th><?php esc_html_e( 'Nature of the personal data breach', 'gdpr' ); ?></th>
|
84 |
<td>
|
85 |
<textarea name="gdpr-data-breach-nature" class="large-text" rows="5" required></textarea>
|
86 |
+
<span class="description"><?php esc_html_e( 'Describe the nature of the personal data breach including where possible, the categories and the approximate number of data subjects concerned and the categories and the approximate number of personal data records concerned.', 'gdpr' ); ?></span>
|
87 |
</td>
|
88 |
</tr>
|
89 |
<tr>
|
90 |
+
<th><?php esc_html_e( 'Name and contact details of the data protection officer', 'gdpr' ); ?></th>
|
91 |
<td>
|
92 |
<textarea name="gdpr-name-contact-details-protection-officer" class="large-text" rows="5" required></textarea>
|
93 |
+
<span class="description"><?php esc_html_e( 'Communicate the name and contact details of the data protection officer or another point of contact where more information can be obtained.', 'gdpr' ); ?></span>
|
94 |
</td>
|
95 |
</tr>
|
96 |
<tr>
|
97 |
+
<th><?php esc_html_e( 'Likely consequences of the personal data breach', 'gdpr' ); ?></th>
|
98 |
<td>
|
99 |
<textarea name="gdpr-likely-consequences" class="large-text" rows="5" required></textarea>
|
100 |
</td>
|
101 |
</tr>
|
102 |
<tr>
|
103 |
+
<th><?php esc_html_e( 'Measures taken or proposed to be taken', 'gdpr' ); ?></th>
|
104 |
<td>
|
105 |
<textarea name="gdpr-measures-taken" class="large-text" rows="5" required></textarea>
|
106 |
+
<span class="description"><?php esc_html_e( 'Describe the measures taken or proposed to be taken by the controller to address the personal data breach, including, where appropriate, measures to mitigate its possible adverse effects.', 'gdpr' ); ?></span>
|
107 |
</td>
|
108 |
</tr>
|
109 |
</table>
|
112 |
</div>
|
113 |
|
114 |
<div class="gdpr-tab hidden" data-id="audit-log">
|
115 |
+
<h2><?php esc_html_e( 'Audit Log', 'gdpr' ); ?></h2>
|
116 |
<div class="postbox not-full">
|
117 |
<form class="gdpr-audit-log-lookup" method="post">
|
118 |
<div class="inside">
|
assets/css/gdpr-admin.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
[data-tooltip]{position:relative;z-index:
|
1 |
+
[data-tooltip]{position:relative;z-index:9999;cursor:pointer;display:inline-block;width:21px}[data-tooltip]:before,[data-tooltip]:after{visibility:hidden;opacity:0;pointer-events:none}[data-tooltip]:before{position:absolute;bottom:150%;left:50%;margin-bottom:5px;margin-left:-80px;padding:7px;width:160px;border-radius:3px;background-color:#000;background-color:rgba(51,51,51,0.9);color:#fff;content:attr(data-tooltip);text-align:center;font-size:14px;line-height:1.2}[data-tooltip]:after{position:absolute;bottom:150%;left:50%;margin-left:-5px;width:0;border-top:5px solid #000;border-top:5px solid rgba(51,51,51,0.9);border-right:5px solid transparent;border-left:5px solid transparent;content:" ";font-size:0;line-height:0}[data-tooltip]:hover:before,[data-tooltip]:hover:after,[data-tooltip]:focus:before,[data-tooltip]:focus:after{visibility:visible;opacity:1}.gdpr-required{color:#f00}.gdpr-settings-form #gdpr-cookie-categories,.gdpr-settings-form #consent-tabs{margin-top:20px}.gdpr-settings-form #gdpr-cookie-categories .hndle,.gdpr-settings-form #consent-tabs .hndle{font-size:16px;padding:8px 12px;margin:0;line-height:1.4}.gdpr-settings-form #gdpr-cookie-categories .hndle span,.gdpr-settings-form #consent-tabs .hndle span{font-size:12px}.policy-page-updated-notice .spinner{margin:13px 0}.policy-page-updated-notice form{display:inline-block}.policy-page-updated-notice form .button-secondary{vertical-align:baseline}.policy-page-updated-notice form .button-primary:active{vertical-align:baseline}.gdpr-pending-requests-badge{display:inline-block;vertical-align:text-bottom;margin:1px 0 0 2px;padding:0 5px;min-width:7px;height:17px;border-radius:11px;background-color:#ca4a1f;color:#fff;font-size:9px;line-height:17px;text-align:center}.gdpr-request-table .spinner,.gdpr-manual-email-lookup .spinner{float:none;display:none}.gdpr-manual-email-lookup .inside{margin-bottom:0}.gdpr-request-table td{vertical-align:middle}.gdpr-request-table form{display:inline-block}.gdpr-request-table .text-center{text-align:center}.gdpr-request-table tr.review>td{padding-top:0;padding-bottom:0}.gdpr-request-table tr.review table{margin-bottom:10px}.gdpr-switch{position:relative;display:inline-block;width:45px;height:24px}.gdpr-switch input{display:none}.gdpr-switch .gdpr-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.gdpr-switch .gdpr-slider:before{position:absolute;content:"";height:16px;width:16px;left:4px;bottom:4px;background-color:white;-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.gdpr-switch .gdpr-slider.round{border-radius:34px}.gdpr-switch .gdpr-slider.round:before{border-radius:50%}.gdpr-switch input:checked+.gdpr-slider{background-color:#00b9eb}.gdpr-switch input:checked+.gdpr-slider:before{-webkit-transform:translateX(21px);-ms-transform:translateX(21px);transform:translateX(21px)}.gdpr-switch input:focus+.gdpr-slider{-webkit-box-shadow:0 0 1px #00b9eb;box-shadow:0 0 1px #00b9eb}#TB_ajaxContent pre{white-space:pre-wrap;word-wrap:break-word}.gdpr-hidden{display:none}.post-type-telemetry .page-title-action{display:none}.post-type-telemetry .row-actions{display:none}.post-type-telemetry .search-box{display:none}.post-type-telemetry .actions #filter-by-date,.post-type-telemetry .actions #post-query-submit,.post-type-telemetry .actions.bulkactions{display:none}.gdpr .not-full{display:inline-block}.gdpr .spinner{display:none;visibility:visible}.gdpr .gdpr-access-data-result h2 span{font-size:16px}#gdpr-cookie-categories .postbox .inside{margin:0 !important;padding:0 20px 20px 20px}#gdpr-cookie-categories .postbox .inside .form-table{margin-top:0}#gdpr-cookie-categories .postbox .inside .tab-hosts .postbox .inside{padding-bottom:0;background-color:#f9f9f9}@media screen and (max-width: 1024px){.tab-hosts .postbox{margin-top:15px}.tab-hosts .postbox .inside{padding:10px 20px 20px 20px !important}.form-table td{padding-right:0}.form-table td .button{margin-top:5px;margin-bottom:10px}.type-telemetry *{word-wrap:break-word !important}}@media screen and (max-width: 640px){.postbox{width:100%}.postbox .notice-dismiss{padding:8px}.inside .regular-text{width:100%}.inside .button{margin-top:5px}}
|
assets/css/gdpr-public.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.gdpr-noscroll{overflow:hidden;position:fixed;width:100%}.gdpr-hidden{display:none}.gdpr-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);z-index:99999999;display:none}.gdpr *{font-family:Helvetica, Arial, sans-serif !important;text-transform:none !important;letter-spacing:0 !important;color:#455561;background:none;-webkit-box-shadow:none;box-shadow:none;text-shadow:none;outline:none;border:none;margin:0;padding:0}.gdpr .h5{font-size:18px;font-weight:bold;color:#fff}.gdpr button,.gdpr input[type="submit"]{color:#000;font-weight:normal;font-size:14px;margin:0;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);line-height:1.5;display:block;min-width:auto;max-width:auto;cursor:pointer}.gdpr button:before,.gdpr button:after,.gdpr input[type="submit"]:before,.gdpr input[type="submit"]:after{display:inline-block;margin:0;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);top:auto;right:auto;bottom:auto;left:auto;background:none}.gdpr button:hover,.gdpr button:active,.gdpr button:focus,.gdpr input[type="submit"]:hover,.gdpr input[type="submit"]:active,.gdpr input[type="submit"]:focus{margin:0;border:none;-webkit-box-shadow:none;box-shadow:none}.gdpr img{width:100% !important}.gdpr .gdpr-contained-wrapper{max-width:600px;margin:0 auto;padding:20px 40px;-webkit-box-sizing:border-box;box-sizing:border-box}@media screen and (max-width: 1024px){.gdpr .gdpr-contained-wrapper{padding:20px}}.gdpr.gdpr-privacy-bar,.gdpr.gdpr-reconsent-bar{position:fixed;bottom:0;left:0;background:rgba(0,0,0,0.9);width:100%;color:#fff;z-index:9999999}.gdpr.gdpr-privacy-bar .gdpr-wrapper,.gdpr.gdpr-reconsent-bar .gdpr-wrapper{padding:20px 40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;align-items:center}@media screen and (min-width: 1440px){.gdpr.gdpr-privacy-bar .gdpr-wrapper,.gdpr.gdpr-reconsent-bar .gdpr-wrapper{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.gdpr.gdpr-privacy-bar .gdpr-wrapper:after,.gdpr.gdpr-reconsent-bar .gdpr-wrapper:after{content:"";display:table;clear:both}.gdpr.gdpr-privacy-bar .gdpr-wrapper p,.gdpr.gdpr-reconsent-bar .gdpr-wrapper p{margin:0;font-size:14px;font-weight:normal}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 0 20px 0;text-align:center}@media screen and (min-width: 1440px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content{padding:0 100px 0 0;text-align:left}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content p,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content p{color:#ffffff;font-size:14px}@media screen and (max-width: 1024px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content{padding-right:0;padding-bottom:20px}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content .gdpr-policy-pages .gdpr-policy-pages-item:after,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content .gdpr-policy-pages .gdpr-policy-pages-item:after{content:',';margin-right:5px}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content .gdpr-policy-pages .gdpr-policy-pages-item:last-of-type:after,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content .gdpr-policy-pages .gdpr-policy-pages-item:last-of-type:after{content:'';margin-right:0}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@media screen and (max-width: 1024px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list{list-style:none;padding:0 20px 0 0;margin:0 20px 0 0;border-right:1px solid #808080}@media screen and (max-width: 1024px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list{padding:0 0 10px 0;margin:0 0 20px 0;border-right:none;border-bottom:1px solid #808080;text-align:center}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item{display:inline-block;margin:0 10px;padding-top:10px}@media screen and (max-width: 1024px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item{padding-top:0}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item *,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item *,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item *,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item *,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item *,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item *,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item *,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item *{float:left}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item input,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item input,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item input,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item input,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item input,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item input,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item input,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item input{margin-top:3px}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item label,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item label,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item label,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item label,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item label,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item label,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item label,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item label{color:#fff;margin:0 5px;font-size:14px}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item .gdpr-policy-link,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item .gdpr-policy-link,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item .gdpr-policy-link,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item .gdpr-policy-link,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item .gdpr-policy-link,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item .gdpr-policy-link,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item .gdpr-policy-link,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item .gdpr-policy-link{color:#fff;font-size:14px;text-decoration:underline}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories{margin-bottom:5px}}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button{white-space:nowrap}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences{margin-left:10px;margin-right:20px}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences{margin:0 0 10px 15px}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences:before,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences:before{left:-7px}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-agreement,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-agreement{margin:0 10px;-ms-flex-item-align:center;align-self:center}@media screen and (min-width: 1440px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-agreement,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-agreement{margin:0 0 0 10px}}.gdpr.gdpr-privacy-bar .gdpr-preferences,.gdpr.gdpr-reconsent-bar .gdpr-preferences{font-weight:normal;font-size:14px;text-decoration:underline;position:relative;margin-left:9px;color:#fff;float:left}.gdpr.gdpr-privacy-bar .gdpr-preferences:before,.gdpr.gdpr-reconsent-bar .gdpr-preferences:before{content:'\276F';font-size:1.1em;font-weight:normal;padding-right:5px;color:#fff;position:absolute;left:-7px;top:10px}.gdpr.gdpr-privacy-bar .gdpr-preferences:hover,.gdpr.gdpr-privacy-bar .gdpr-preferences:active,.gdpr.gdpr-privacy-bar .gdpr-preferences:focus,.gdpr.gdpr-privacy-bar .gdpr-preferences:focus-within,.gdpr.gdpr-privacy-bar .gdpr-preferences:visited,.gdpr.gdpr-reconsent-bar .gdpr-preferences:hover,.gdpr.gdpr-reconsent-bar .gdpr-preferences:active,.gdpr.gdpr-reconsent-bar .gdpr-preferences:focus,.gdpr.gdpr-reconsent-bar .gdpr-preferences:focus-within,.gdpr.gdpr-reconsent-bar .gdpr-preferences:visited{background:none}.gdpr.gdpr-privacy-bar button,.gdpr.gdpr-reconsent-bar button{margin:0 5px;padding:9px 10px}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar button,.gdpr.gdpr-reconsent-bar button{margin:0}}.gdpr.gdpr-privacy-bar .gdpr-agreement,.gdpr.gdpr-reconsent-bar .gdpr-agreement{position:relative;font-size:13px;font-weight:normal;padding:12px 36px 12px 76px;height:auto;line-height:1.4285714;white-space:normal;margin:0;border-width:1px;border-style:solid;border-radius:3px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#0085ba;border-color:#0073aa #006799 #006799;-webkit-box-shadow:0 1px 0 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar .gdpr-agreement,.gdpr.gdpr-reconsent-bar .gdpr-agreement{padding:7px 16px 7px 56px}}.gdpr.gdpr-privacy-bar .gdpr-agreement:hover,.gdpr.gdpr-reconsent-bar .gdpr-agreement:hover{background:#008ec2;border-color:#006799}.gdpr.gdpr-privacy-bar .gdpr-agreement:hover:before,.gdpr.gdpr-reconsent-bar .gdpr-agreement:hover:before{font-size:26px;background:#fafafa;color:#00b9eb}.gdpr.gdpr-privacy-bar .gdpr-agreement:active,.gdpr.gdpr-privacy-bar .gdpr-agreement:focus,.gdpr.gdpr-reconsent-bar .gdpr-agreement:active,.gdpr.gdpr-reconsent-bar .gdpr-agreement:focus{background:#0073aa;border-color:#006799;-webkit-box-shadow:inset 0 2px 0 #006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.gdpr.gdpr-privacy-bar .gdpr-agreement:active:before,.gdpr.gdpr-privacy-bar .gdpr-agreement:focus:before,.gdpr.gdpr-reconsent-bar .gdpr-agreement:active:before,.gdpr.gdpr-reconsent-bar .gdpr-agreement:focus:before{-webkit-box-shadow:inset 0 2px 0 #ccc;box-shadow:inset 0 2px 0 #ccc;vertical-align:top}.gdpr.gdpr-privacy-bar .gdpr-agreement:before,.gdpr.gdpr-reconsent-bar .gdpr-agreement:before{content:'\2713';top:-1px;bottom:-1px;left:-1px;position:absolute;width:42.5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:all 0.2s;-o-transition:all 0.2s;transition:all 0.2s;-webkit-transform:translateZ(0);transform:translateZ(0);text-shadow:none;text-decoration:none;font-size:13px;line-height:26px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-top-left-radius:3px;border-bottom-left-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;box-sizing:border-box;color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc;vertical-align:top;border-right:none}.gdpr.gdpr-privacy-preferences .gdpr-wrapper,.gdpr.gdpr-general-confirmation .gdpr-wrapper{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);z-index:999999999;width:100%;max-width:768px;height:100%;max-height:500px;overflow:hidden;display:none;border-radius:2.5px;padding:15px;-webkit-box-sizing:border-box;box-sizing:border-box}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form,.gdpr.gdpr-general-confirmation .gdpr-wrapper form{height:100%;position:relative}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header{display:-webkit-box;display:-ms-flexbox;display:flex;height:75px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .logo,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .logo{max-width:30%}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .logo a,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .logo a{padding:0;margin:0}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .logo a img,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .logo a img{display:block}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title{background:#23282d;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title h3,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title h3{margin:0 !important;padding:0 !important;text-align:center !important;color:#fff !important;font-weight:600 !important;font-size:22px !important}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title h3,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title h3{font-size:18px !important}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title .gdpr-close,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title .gdpr-close{color:#fff;position:absolute;top:0;right:0;cursor:pointer;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;padding:15px 15px;line-height:0}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title .gdpr-close:hover:before,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title .gdpr-close:hover:before{-webkit-transform:scale(1.5);-ms-transform:scale(1.5);transform:scale(1.5)}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title .gdpr-close:before,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title .gdpr-close:before{content:'\00D7';line-height:12.5px;font-size:25px;display:inline-block;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer{position:absolute;padding:0 20px 20px 20px;bottom:0;left:160px;right:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer{left:0;bottom:5px}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer input[type="submit"],.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer input[type="submit"]{font-size:13px;font-weight:normal;line-height:26px;height:28px;margin:0;padding:0 10px 1px;border-width:1px;border-style:solid;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;box-sizing:border-box;background:#0085ba;border-color:#0073aa #006799 #006799;-webkit-box-shadow:0 1px 0 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer input[type="submit"]:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer input[type="submit"]:hover{background:#008ec2;border-color:#006799}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer input[type="submit"]:active,.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer input[type="submit"].focus,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer input[type="submit"]:active,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer input[type="submit"].focus{background:#0073aa;border-color:#006799;-webkit-box-shadow:inset 0 2px 0 #006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer span,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer span{font-size:13px;line-height:20px;color:#555d66;font-style:italic}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer span a,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer span a{color:#0073aa;-webkit-transition-property:border,background,color;-o-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-o-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-o-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;text-decoration:underline}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer span a:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer span a:hover{color:#00a0d2}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu{display:none}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu{display:block}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu button,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu button{width:100%;background-color:#191e23;color:#fff;font-size:14px;text-align:left;padding:15px;border-radius:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:0}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu button:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu button:hover{color:#00b9eb}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu button:hover:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu button:hover:after{border-top-color:#00b9eb}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu button:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu button:after{content:'';width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:7.5px solid #fff;-webkit-transition:all 0.2s;-o-transition:all 0.2s;transition:all 0.2s;right:15px;top:12px;position:absolute}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu button.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu button.gdpr-active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content{display:-webkit-box;display:-ms-flexbox;display:flex;height:calc( 100% - 75px);background:#f1f1f1}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content{position:relative;height:calc( 100% - 119px)}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-policies li a,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-policies li a{font-style:italic;font-size:12px !important;color:#ababab !important}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs{border:none !important;min-width:160px;max-width:160px;padding:0;margin:0;overflow-y:auto;background-color:#23282d;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs{position:absolute;height:100%;width:100%;max-width:100%;display:none;z-index:1}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li{list-style:none}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a{display:block;width:100%;background:#23282d;color:#fff;font-size:14px;text-align:left;text-decoration:none;padding:8px;border-radius:0;position:relative}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a{padding:15px;line-height:1}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button:hover,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a:hover{background-color:#191e23;color:#00b9eb}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active{background-color:#0073aa}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:hover,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:hover{color:#fff}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:after,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:after{right:0;border:8px solid transparent;content:'';height:0;width:0;position:absolute;pointer-events:none;border-right-color:#f1f1f1;top:50%;margin-top:-8px}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:after,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:after{display:none}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs{position:relative;padding:8px 0;top:auto;left:auto;right:auto;bottom:auto;border:0;margin:0 0 0 0;-webkit-box-shadow:none;box-shadow:none;background-color:#32373c}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button{background-color:transparent;font-size:13px;line-height:18px;padding:5px 8px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button.gdpr-active,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button.gdpr-active{font-weight:600}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button.gdpr-active:after{border:none;content:''}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content{width:100%;margin-bottom:68px;overflow-y:auto}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div{display:none;padding:20px 20px 0 20px;overflow-y:auto;font-size:13px;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header h4,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header label,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header h4,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header label{margin:0}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header h4,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header h4{font-weight:600 !important;padding-right:10px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info{height:100%;overflow-y:auto;-webkit-box-flex:1;-ms-flex:1;flex:1;margin-top:20px;position:relative}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info>p,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info>p{margin-bottom:16px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info strong,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info strong{border-bottom:1px solid rgba(0,0,0,0.4);display:block}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used{font-family:Helvetica, Arial, sans-serif;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04);margin-bottom:10px;background-color:#fff;font-size:13px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used:first-of-type,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used:first-of-type{padding-top:0}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title{padding:10px;border-bottom:1px solid #e1e1e1;color:#32373c;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title p,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title p{margin:0;font-weight:600 !important}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title .gdpr-always-active,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title .gdpr-always-active{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:0 10px;min-height:24px;text-align:center;border-radius:50px;line-height:16px;background-color:#00b9eb;color:#fff;font-style:normal}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title a,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title a{color:#0073aa}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title a:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title a:hover{color:#00a0d2}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookies,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookies{color:#555;background-color:#f9f9f9;padding:10px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookies span,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookies span{font-style:italic}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content .gdpr-active,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content .gdpr-active{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.gdpr.gdpr-general-confirmation .gdpr-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;max-width:400px;min-height:250px}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header{display:-webkit-box;display:-ms-flexbox;display:flex;height:75px}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .logo{max-width:30%}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .logo a{padding:0;margin:0}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .logo a img{display:block}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title{background:#23282d;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title h3{margin:0 !important;padding:0 !important;text-align:center !important;color:#fff !important;font-weight:600 !important;font-size:22px !important}@media screen and (max-width: 640px){.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title h3{font-size:18px !important}}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title .gdpr-close{color:#fff;position:absolute;top:0;right:0;cursor:pointer;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;padding:15px 15px;line-height:0}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title .gdpr-close:hover:before{-webkit-transform:scale(1.5);-ms-transform:scale(1.5);transform:scale(1.5)}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title .gdpr-close:before{content:'\00D7';line-height:12.5px;font-size:25px;display:inline-block;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer{background:#f1f1f1;padding:20px}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button{font-size:13px;font-weight:normal;line-height:26px;height:28px;margin:0;padding:0 10px 1px;border-width:1px;border-style:solid;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;box-sizing:border-box;background:#0085ba;border-color:#0073aa #006799 #006799;-webkit-box-shadow:0 1px 0 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;display:inline}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button:hover{background:#008ec2;border-color:#006799}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button:active,.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button.focus{background:#0073aa;border-color:#006799;-webkit-box-shadow:inset 0 2px 0 #006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button.gdpr-cancel{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc;text-shadow:none}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button.gdpr-cancel:hover{background:#fafafa;border-color:#999;color:#23282d;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button.gdpr-cancel:active,.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button.gdpr-cancel:focus{background:#eee;border-color:#999;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5);-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px);color:#23282d}.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content{padding:20px 20px 0 20px;height:auto}.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content p{margin:0}.gdpr-switch{position:relative;display:inline-block;min-width:45px;height:24px;margin-bottom:0}.gdpr-switch input{position:absolute;left:-999em}.gdpr-switch .gdpr-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.gdpr-switch .gdpr-slider:before{position:absolute;content:"";height:16px;width:16px;left:4px;bottom:4px;background-color:white;-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.gdpr-switch .gdpr-slider.round{border-radius:34px}.gdpr-switch .gdpr-slider.round:before{border-radius:50%}.gdpr-switch input:checked+.gdpr-slider{background-color:#00b9eb}.gdpr-switch input:checked+.gdpr-slider:before{-webkit-transform:translateX(21px);-ms-transform:translateX(21px);transform:translateX(21px)}.gdpr-switch input:focus+.gdpr-slider{-webkit-box-shadow:0 0 1px #00b9eb;box-shadow:0 0 1px #00b9eb}
|
1 |
+
.gdpr-noscroll{overflow:hidden;position:fixed;width:100%}.gdpr-hidden{display:none}.gdpr-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);z-index:99999999;display:none}.gdpr *{font-family:Helvetica, Arial, sans-serif !important;text-transform:none !important;letter-spacing:0 !important;color:#455561;background:none;-webkit-box-shadow:none;box-shadow:none;text-shadow:none;outline:none;border:none;margin:0;padding:0}.gdpr .h5{font-size:18px;font-weight:bold;color:#fff}.gdpr button,.gdpr input[type="submit"]{color:#000;font-weight:normal;font-size:14px;margin:0;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);line-height:1.5;display:block;min-width:auto;max-width:auto;cursor:pointer}.gdpr button:before,.gdpr button:after,.gdpr input[type="submit"]:before,.gdpr input[type="submit"]:after{display:inline-block;margin:0;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1);top:auto;right:auto;bottom:auto;left:auto;background:none}.gdpr button:hover,.gdpr button:active,.gdpr button:focus,.gdpr input[type="submit"]:hover,.gdpr input[type="submit"]:active,.gdpr input[type="submit"]:focus{margin:0;border:none;-webkit-box-shadow:none;box-shadow:none}.gdpr img{width:100% !important}.gdpr .gdpr-contained-wrapper{max-width:600px;margin:0 auto;padding:20px 40px;-webkit-box-sizing:border-box;box-sizing:border-box}@media screen and (max-width: 1024px){.gdpr .gdpr-contained-wrapper{padding:20px}}.gdpr.gdpr-privacy-bar,.gdpr.gdpr-reconsent-bar{position:fixed;bottom:0;left:0;background:rgba(0,0,0,0.9);width:100%;color:#fff;z-index:9999999}.gdpr.gdpr-privacy-bar .gdpr-wrapper,.gdpr.gdpr-reconsent-bar .gdpr-wrapper{padding:20px 40px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;align-items:center}@media screen and (min-width: 1440px){.gdpr.gdpr-privacy-bar .gdpr-wrapper,.gdpr.gdpr-reconsent-bar .gdpr-wrapper{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}}.gdpr.gdpr-privacy-bar .gdpr-wrapper:after,.gdpr.gdpr-reconsent-bar .gdpr-wrapper:after{content:"";display:table;clear:both}.gdpr.gdpr-privacy-bar .gdpr-wrapper p,.gdpr.gdpr-reconsent-bar .gdpr-wrapper p{margin:0;font-size:14px;font-weight:normal}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content{width:100%;padding:0 0 20px 0;text-align:center}@media screen and (min-width: 1440px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 100px 0 0;text-align:left}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content p,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content p{color:#ffffff;font-size:14px}@media screen and (max-width: 1024px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content{padding-right:0;padding-bottom:20px}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content .gdpr-policy-pages .gdpr-policy-pages-item:after,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content .gdpr-policy-pages .gdpr-policy-pages-item:after{content:',';margin-right:5px}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content .gdpr-policy-pages .gdpr-policy-pages-item:last-of-type:after,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-content .gdpr-policy-pages .gdpr-policy-pages-item:last-of-type:after{content:'';margin-right:0}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}@media screen and (max-width: 1024px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list{list-style:none;padding:0 20px 0 0;margin:0 20px 0 0;border-right:1px solid #808080}@media screen and (max-width: 1024px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list{padding:0 0 10px 0;margin:0 0 20px 0;border-right:none;border-bottom:1px solid #808080;text-align:center}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item{display:inline-block;margin:0 10px;padding-top:10px}@media screen and (max-width: 1024px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item{padding-top:0}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item *,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item *,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item *,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item *,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item *,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item *,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item *,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item *{float:left}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item input,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item input,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item input,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item input,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item input,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item input,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item input,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item input{margin-top:3px}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item label,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item label,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item label,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item label,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item label,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item label,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item label,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item label{color:#fff;margin:0 5px;font-size:14px}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item .gdpr-policy-link,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item .gdpr-policy-link,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item .gdpr-policy-link,.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item .gdpr-policy-link,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-cookie-categories-item .gdpr-policy-link,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories .gdpr-policy-list-item .gdpr-policy-link,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-cookie-categories-item .gdpr-policy-link,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-policy-list .gdpr-policy-list-item .gdpr-policy-link{color:#fff;font-size:14px;text-decoration:underline}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-cookie-categories{margin-bottom:5px}}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button{white-space:nowrap}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences{margin-left:10px;margin-right:20px}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences{margin:0 0 10px 15px}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences:before,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-preferences:before{left:-7px}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-agreement,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-agreement{margin:0 10px;-ms-flex-item-align:center;align-self:center}@media screen and (min-width: 1440px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-agreement,.gdpr.gdpr-reconsent-bar .gdpr-wrapper .gdpr-right .gdpr-buttons button.gdpr-agreement{margin:0 0 0 10px}}.gdpr.gdpr-privacy-bar .gdpr-preferences,.gdpr.gdpr-reconsent-bar .gdpr-preferences{font-weight:normal;font-size:14px;text-decoration:underline;position:relative;margin-left:9px;color:#fff;float:left}.gdpr.gdpr-privacy-bar .gdpr-preferences:before,.gdpr.gdpr-reconsent-bar .gdpr-preferences:before{content:'\276F';font-size:1.1em;font-weight:normal;padding-right:5px;color:#fff;position:absolute;left:-7px;top:10px}.gdpr.gdpr-privacy-bar .gdpr-preferences:hover,.gdpr.gdpr-privacy-bar .gdpr-preferences:active,.gdpr.gdpr-privacy-bar .gdpr-preferences:focus,.gdpr.gdpr-privacy-bar .gdpr-preferences:focus-within,.gdpr.gdpr-privacy-bar .gdpr-preferences:visited,.gdpr.gdpr-reconsent-bar .gdpr-preferences:hover,.gdpr.gdpr-reconsent-bar .gdpr-preferences:active,.gdpr.gdpr-reconsent-bar .gdpr-preferences:focus,.gdpr.gdpr-reconsent-bar .gdpr-preferences:focus-within,.gdpr.gdpr-reconsent-bar .gdpr-preferences:visited{background:none}.gdpr.gdpr-privacy-bar button,.gdpr.gdpr-reconsent-bar button{margin:0 5px;padding:9px 10px}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar button,.gdpr.gdpr-reconsent-bar button{margin:0}}.gdpr.gdpr-privacy-bar .gdpr-agreement,.gdpr.gdpr-reconsent-bar .gdpr-agreement{position:relative;font-size:13px;font-weight:normal;padding:12px 36px 12px 76px;height:auto;line-height:1.4285714;white-space:normal;margin:0;border-width:1px;border-style:solid;border-radius:3px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#0085ba;border-color:#0073aa #006799 #006799;-webkit-box-shadow:0 1px 0 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar .gdpr-agreement,.gdpr.gdpr-reconsent-bar .gdpr-agreement{padding:7px 16px 7px 56px}}.gdpr.gdpr-privacy-bar .gdpr-agreement:hover,.gdpr.gdpr-reconsent-bar .gdpr-agreement:hover{background:#008ec2;border-color:#006799}.gdpr.gdpr-privacy-bar .gdpr-agreement:hover:before,.gdpr.gdpr-reconsent-bar .gdpr-agreement:hover:before{font-size:26px;background:#fafafa;color:#00b9eb}.gdpr.gdpr-privacy-bar .gdpr-agreement:active,.gdpr.gdpr-privacy-bar .gdpr-agreement:focus,.gdpr.gdpr-reconsent-bar .gdpr-agreement:active,.gdpr.gdpr-reconsent-bar .gdpr-agreement:focus{background:#0073aa;border-color:#006799;-webkit-box-shadow:inset 0 2px 0 #006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.gdpr.gdpr-privacy-bar .gdpr-agreement:active:before,.gdpr.gdpr-privacy-bar .gdpr-agreement:focus:before,.gdpr.gdpr-reconsent-bar .gdpr-agreement:active:before,.gdpr.gdpr-reconsent-bar .gdpr-agreement:focus:before{-webkit-box-shadow:inset 0 2px 0 #ccc;box-shadow:inset 0 2px 0 #ccc;vertical-align:top}.gdpr.gdpr-privacy-bar .gdpr-agreement:before,.gdpr.gdpr-reconsent-bar .gdpr-agreement:before{content:'\2713';top:-1px;bottom:-1px;left:-1px;position:absolute;width:42.5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:all 0.2s;-o-transition:all 0.2s;transition:all 0.2s;-webkit-transform:translateZ(0);transform:translateZ(0);text-shadow:none;text-decoration:none;font-size:13px;line-height:26px;cursor:pointer;border-width:1px;border-style:solid;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-top-left-radius:3px;border-bottom-left-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;box-sizing:border-box;color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc;vertical-align:top;border-right:none}.gdpr.gdpr-privacy-preferences .gdpr-wrapper,.gdpr.gdpr-general-confirmation .gdpr-wrapper{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%);z-index:999999999;width:100%;max-width:768px;height:100%;max-height:500px;overflow:hidden;display:none;border-radius:2.5px;padding:15px;-webkit-box-sizing:border-box;box-sizing:border-box}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form,.gdpr.gdpr-general-confirmation .gdpr-wrapper form{height:100%;position:relative}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header{display:-webkit-box;display:-ms-flexbox;display:flex;height:75px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .logo,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .logo{max-width:30%}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .logo a,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .logo a{padding:0;margin:0}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .logo a img,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .logo a img{display:block}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title{background:#23282d;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title h3,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title h3{margin:0 !important;padding:0 !important;text-align:center !important;color:#fff !important;font-weight:600 !important;font-size:22px !important}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title h3,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title h3{font-size:18px !important}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title .gdpr-close,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title .gdpr-close{color:#fff;position:absolute;top:0;right:0;cursor:pointer;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;padding:15px 15px;line-height:0}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title .gdpr-close:hover:before,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title .gdpr-close:hover:before{-webkit-transform:scale(1.5);-ms-transform:scale(1.5);transform:scale(1.5)}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>header .gdpr-box-title .gdpr-close:before,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>header .gdpr-box-title .gdpr-close:before{content:'\00D7';line-height:12.5px;font-size:25px;display:inline-block;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer{position:absolute;padding:0 20px 20px 20px;bottom:0;left:160px;right:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer{left:0;bottom:5px}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer input[type="submit"],.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer input[type="submit"]{font-size:13px;font-weight:normal;line-height:26px;height:28px;margin:0;padding:0 10px 1px;border-width:1px;border-style:solid;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;box-sizing:border-box;background:#0085ba;border-color:#0073aa #006799 #006799;-webkit-box-shadow:0 1px 0 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer input[type="submit"]:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer input[type="submit"]:hover{background:#008ec2;border-color:#006799}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer input[type="submit"]:active,.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer input[type="submit"].focus,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer input[type="submit"]:active,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer input[type="submit"].focus{background:#0073aa;border-color:#006799;-webkit-box-shadow:inset 0 2px 0 #006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer span,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer span{font-size:13px;line-height:20px;color:#555d66;font-style:italic}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer span a,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer span a{color:#0073aa;-webkit-transition-property:border,background,color;-o-transition-property:border,background,color;transition-property:border,background,color;-webkit-transition-duration:.05s;-o-transition-duration:.05s;transition-duration:.05s;-webkit-transition-timing-function:ease-in-out;-o-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;text-decoration:underline}.gdpr.gdpr-privacy-preferences .gdpr-wrapper form>footer span a:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper form>footer span a:hover{color:#00a0d2}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu{display:none}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu{display:block}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu button,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu button{width:100%;background-color:#191e23;color:#fff;font-size:14px;text-align:left;padding:15px;border-radius:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;line-height:0}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu button:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu button:hover{color:#00b9eb}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu button:hover:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu button:hover:after{border-top-color:#00b9eb}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu button:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu button:after{content:'';width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:7.5px solid #fff;-webkit-transition:all 0.2s;-o-transition:all 0.2s;transition:all 0.2s;right:15px;top:12px;position:absolute}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-mobile-menu button.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-mobile-menu button.gdpr-active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content{display:-webkit-box;display:-ms-flexbox;display:flex;height:calc( 100% - 75px);background:#f1f1f1}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content{position:relative;height:calc( 100% - 119px)}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-policies li a,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-policies li a{font-style:italic;font-size:12px !important;color:#ababab !important}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs{border:none !important;min-width:160px;max-width:160px;padding:0;margin:0;overflow-y:auto;background-color:#23282d;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs{position:absolute;height:100%;width:100%;max-width:100%;display:none;z-index:1}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li{list-style:none}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a{display:block;width:100%;background:#23282d;color:#fff;font-size:14px;text-align:left;text-decoration:none;padding:8px;border-radius:0;position:relative}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a{padding:15px;line-height:1}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button:hover,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a:hover{background-color:#191e23;color:#00b9eb}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active{background-color:#0073aa}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:hover,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:hover{color:#fff}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:after,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:after{right:0;border:8px solid transparent;content:'';height:0;width:0;position:absolute;pointer-events:none;border-right-color:#f1f1f1;top:50%;margin-top:-8px}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:after,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li button.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li a.gdpr-active:after{display:none}}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs{position:relative;padding:8px 0;top:auto;left:auto;right:auto;bottom:auto;border:0;margin:0 0 0 0;-webkit-box-shadow:none;box-shadow:none;background-color:#32373c}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button{background-color:transparent;font-size:13px;line-height:18px;padding:5px 8px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button.gdpr-active,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button.gdpr-active{font-weight:600}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button.gdpr-active:after,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tabs li .gdpr-subtabs li button.gdpr-active:after{border:none;content:''}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content{width:100%;margin-bottom:68px;overflow-y:auto}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div{display:none;padding:20px 20px 0 20px;overflow-y:auto;font-size:13px;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header h4,.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header label,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header h4,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header label{margin:0}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header h4,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div header h4{font-weight:600 !important;padding-right:10px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info{height:100%;overflow-y:auto;-webkit-box-flex:1;-ms-flex:1;flex:1;margin-top:20px;position:relative}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info>p,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info>p{margin-bottom:16px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info strong,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info strong{border-bottom:1px solid rgba(0,0,0,0.4);display:block}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used{font-family:Helvetica, Arial, sans-serif;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.04);box-shadow:0 1px 1px rgba(0,0,0,0.04);margin-bottom:10px;background-color:#fff;font-size:13px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used:first-of-type,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used:first-of-type{padding-top:0}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title{padding:10px;border-bottom:1px solid #e1e1e1;color:#32373c;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title p,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title p{margin:0;font-weight:600 !important}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title .gdpr-always-active,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title .gdpr-always-active{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:0 10px;min-height:24px;text-align:center;border-radius:50px;line-height:16px;background-color:#00b9eb;color:#fff;font-style:normal}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title a,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title a{color:#0073aa}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title a:hover,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookie-title a:hover{color:#00a0d2}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookies,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookies{color:#555;background-color:#f9f9f9;padding:10px}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookies span,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content>div .gdpr-info .gdpr-cookies-used .gdpr-cookies span{font-style:italic}.gdpr.gdpr-privacy-preferences .gdpr-wrapper .gdpr-content .gdpr-tab-content .gdpr-active,.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content .gdpr-tab-content .gdpr-active{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.gdpr.gdpr-general-confirmation .gdpr-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;max-width:400px;min-height:250px}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header{display:-webkit-box;display:-ms-flexbox;display:flex;height:75px}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .logo{max-width:30%}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .logo a{padding:0;margin:0}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .logo a img{display:block}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title{background:#23282d;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title h3{margin:0 !important;padding:0 !important;text-align:center !important;color:#fff !important;font-weight:600 !important;font-size:22px !important}@media screen and (max-width: 640px){.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title h3{font-size:18px !important}}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title .gdpr-close{color:#fff;position:absolute;top:0;right:0;cursor:pointer;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;padding:15px 15px;line-height:0}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title .gdpr-close:hover:before{-webkit-transform:scale(1.5);-ms-transform:scale(1.5);transform:scale(1.5)}.gdpr.gdpr-general-confirmation .gdpr-wrapper>header .gdpr-box-title .gdpr-close:before{content:'\00D7';line-height:12.5px;font-size:25px;display:inline-block;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer{background:#f1f1f1;padding:20px}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button{font-size:13px;font-weight:normal;line-height:26px;height:28px;margin:0;padding:0 10px 1px;border-width:1px;border-style:solid;border-radius:3px;white-space:nowrap;-webkit-box-sizing:border-box;box-sizing:border-box;background:#0085ba;border-color:#0073aa #006799 #006799;-webkit-box-shadow:0 1px 0 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;display:inline}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button:hover{background:#008ec2;border-color:#006799}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button:active,.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button.focus{background:#0073aa;border-color:#006799;-webkit-box-shadow:inset 0 2px 0 #006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button.gdpr-cancel{color:#555;border-color:#ccc;background:#f7f7f7;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc;text-shadow:none}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button.gdpr-cancel:hover{background:#fafafa;border-color:#999;color:#23282d;-webkit-box-shadow:0 1px 0 #ccc;box-shadow:0 1px 0 #ccc}.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button.gdpr-cancel:active,.gdpr.gdpr-general-confirmation .gdpr-wrapper>footer button.gdpr-cancel:focus{background:#eee;border-color:#999;-webkit-box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5);box-shadow:inset 0 2px 5px -3px rgba(0,0,0,0.5);-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px);color:#23282d}.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content{padding:20px 20px 0 20px;height:auto}.gdpr.gdpr-general-confirmation .gdpr-wrapper .gdpr-content p{margin:0}.gdpr-switch{position:relative;display:inline-block;min-width:45px;height:24px;margin-bottom:0}.gdpr-switch input{position:absolute;left:-999em}.gdpr-switch .gdpr-slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.gdpr-switch .gdpr-slider:before{position:absolute;content:"";height:16px;width:16px;left:4px;bottom:4px;background-color:white;-webkit-transition:.4s;-o-transition:.4s;transition:.4s}.gdpr-switch .gdpr-slider.round{border-radius:34px}.gdpr-switch .gdpr-slider.round:before{border-radius:50%}.gdpr-switch input:checked+.gdpr-slider{background-color:#00b9eb}.gdpr-switch input:checked+.gdpr-slider:before{-webkit-transform:translateX(21px);-ms-transform:translateX(21px);transform:translateX(21px)}.gdpr-switch input:focus+.gdpr-slider{-webkit-box-shadow:0 0 1px #00b9eb;box-shadow:0 0 1px #00b9eb}
|
assets/js/gdpr-public.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
!function(e){"use strict";var r=location.search,
|
1 |
+
!function(e){"use strict";var r=location.search,t=location.protocol+"//"+location.host+location.pathname;function n(r,t,n){n=void 0!==n,e(".gdpr-general-confirmation .gdpr-box-title h3").html(r),e(".gdpr-general-confirmation .gdpr-content p").html(t),n?(e(".gdpr-general-confirmation").addClass("gdpr-delete-confirmation"),e(".gdpr-general-confirmation footer").html('<button class="gdpr-delete-account">'+GDPR.i18n.continue+'</button> <button class="gdpr-cancel">'+GDPR.i18n.cancel+"</button>")):e(".gdpr-general-confirmation footer").html('<button class="gdpr-ok">'+GDPR.i18n.ok+"</button>"),e(".gdpr-overlay").fadeIn(),e("body").addClass("gdpr-noscroll"),e(".gdpr.gdpr-general-confirmation .gdpr-wrapper").css({display:"flex"}).hide().fadeIn()}window.has_consent=function(e){if(Cookies.get("gdpr[consent_types]")&&JSON.parse(Cookies.get("gdpr[consent_types]")).indexOf(e)>-1)return!0;return!1},window.is_allowed_cookie=function(e){if(Cookies.get("gdpr[allowed_cookies]")&&JSON.parse(Cookies.get("gdpr[allowed_cookies]")).indexOf(e)>-1)return!0;return!1},e(function(){-1!==r.indexOf("notify=1")&&(window.history.replaceState({},document.title,t),e("body").addClass("gdpr-notification")),e(document).on("submit",".gdpr-privacy-preferences-frm",function(r){r.preventDefault();e(this);var t=e(this).serialize();e.post(GDPR.ajaxurl,t,function(r){r.success?(Cookies.set("gdpr[privacy_bar]",1,{expires:365}),GDPR.refresh?window.location.reload():(e(".gdpr-overlay").fadeOut(),e("body").removeClass("gdpr-noscroll"),e(".gdpr.gdpr-privacy-preferences .gdpr-wrapper").fadeOut(),e(".gdpr-privacy-bar").fadeOut())):n(r.data.title,r.data.content)})}),e(document).on("submit",".gdpr-request-form",function(r){r.preventDefault();e(this),e(this).find('input[name="type"]').val();var t=e(this).serialize();e.post(GDPR.ajaxurl,t,function(e){n(e.data.title,e.data.content)})}),e(document).on("change",".gdpr-cookie-category",function(){var r=e(this).data("category"),t=e(this).prop("checked");e('[data-category="'+r+'"]').prop("checked",t)}),Cookies.get("gdpr[privacy_bar]")||0==e(".gdpr-reconsent-bar").length&&e(".gdpr.gdpr-privacy-bar").delay(1e3).slideDown(600),e(".gdpr-reconsent-bar").length>0&&e(".gdpr.gdpr-reconsent-bar").delay(1e3).slideDown(600),e(document).on("click",".gdpr.gdpr-privacy-bar .gdpr-agreement",function(){e(".gdpr-privacy-preferences-frm").submit()}),e(document).on("click",".gdpr.gdpr-reconsent-bar .gdpr-agreement",function(){var r=[];e('.gdpr-policy-list input[type="hidden"]').each(function(){r.push(e(this).val())}),e.post(GDPR.ajaxurl,{action:"agree_with_new_policies",nonce:e(this).data("nonce"),consents:r},function(r){r.success?GDPR.refresh?window.location.reload():(e(".gdpr-reconsent-bar").slideUp(600),Cookies.get("gdpr[privacy_bar]")||e(".gdpr.gdpr-privacy-bar").delay(1e3).slideDown(600)):n(r.data.title,r.data.content)})}),e(document).on("click",".gdpr-preferences",function(r){r.preventDefault();e(this).data("type");e(".gdpr-overlay").fadeIn(),e("body").addClass("gdpr-noscroll"),e(".gdpr.gdpr-privacy-preferences .gdpr-wrapper").fadeIn()}),e(document).on("click",".gdpr.gdpr-privacy-preferences .gdpr-close, .gdpr-overlay",function(){e(".gdpr-overlay").fadeOut(),e("body").removeClass("gdpr-noscroll"),e(".gdpr.gdpr-privacy-preferences .gdpr-wrapper").fadeOut()}),e(document).on("click",".gdpr.gdpr-privacy-preferences .gdpr-tabs button",function(){var r="."+e(this).data("target");e(".gdpr.gdpr-privacy-preferences .gdpr-tab-content > div").removeClass("gdpr-active"),e(".gdpr.gdpr-privacy-preferences .gdpr-tab-content "+r).addClass("gdpr-active"),e(".gdpr.gdpr-privacy-preferences .gdpr-tabs").hasClass("gdpr-mobile-expanded")&&(e(".gdpr.gdpr-privacy-preferences .gdpr-mobile-menu button").removeClass("gdpr-active"),e(".gdpr.gdpr-privacy-preferences .gdpr-tabs").toggle()),e(".gdpr.gdpr-privacy-preferences .gdpr-tabs button").removeClass("gdpr-active"),e(".gdpr-subtabs li button").removeClass("gdpr-active"),e(this).hasClass("gdpr-tab-button")?(e(this).addClass("gdpr-active"),e(this).hasClass("gdpr-cookie-settings")&&e(".gdpr-subtabs").find("li button").first().addClass("gdpr-active")):(e(".gdpr-cookie-settings").addClass("gdpr-active"),e(this).addClass("gdpr-active"))}),e(document).on("click",".gdpr.gdpr-privacy-preferences .gdpr-mobile-menu button",function(r){e(this).toggleClass("gdpr-active"),e(".gdpr.gdpr-privacy-preferences .gdpr-tabs").toggle().addClass("gdpr-mobile-expanded")}),e(window).resize(function(){e(window).width()>640&&e(".gdpr.gdpr-privacy-preferences .gdpr-tabs").hasClass("gdpr-mobile-expanded")&&(e(".gdpr.gdpr-privacy-preferences .gdpr-mobile-menu button").removeClass("gdpr-active"),e(".gdpr.gdpr-privacy-preferences .gdpr-tabs").removeClass("gdpr-mobile-expanded").removeAttr("style"))}),e("form.gdpr-add-to-deletion-requests").on("submit",function(r){e(this).hasClass("confirmed")||(r.preventDefault(),e(".gdpr-overlay").fadeIn(),e("body").addClass("gdpr-noscroll"),e(".gdpr.gdpr-delete-confirmation .gdpr-wrapper").css({display:"flex"}).hide().fadeIn())}),e(document).on("click",".gdpr.gdpr-delete-confirmation button.gdpr-delete-account",function(){e("form.gdpr-add-to-deletion-requests").addClass("confirmed"),e('form.gdpr-add-to-deletion-requests.confirmed input[type="submit"]').click(),e(".gdpr-overlay").fadeOut(),e("body").removeClass("gdpr-noscroll"),e(".gdpr.gdpr-delete-confirmation .gdpr-wrapper").fadeOut()}),e("body").hasClass("gdpr-notification")&&(e(".gdpr-overlay").fadeIn(),e("body").addClass("gdpr-noscroll"),e(".gdpr.gdpr-general-confirmation .gdpr-wrapper").css({display:"flex"}).hide().fadeIn()),e(document).on("click",".gdpr.gdpr-general-confirmation button.gdpr-ok",function(){e(".gdpr-overlay").fadeOut(),e("body").removeClass("gdpr-noscroll"),e(".gdpr.gdpr-general-confirmation .gdpr-wrapper").fadeOut()}),e(document).on("click",".gdpr-disagree",function(r){e(".gdpr-overlay").fadeIn(),e("body").addClass("gdpr-noscroll"),e(".gdpr.gdpr-disagree-confirmation .gdpr-wrapper").css({display:"flex"}).hide().fadeIn()}),e(document).on("click",".gdpr-disagree-confirm",function(r){r.preventDefault(),e(".gdpr-overlay").fadeOut(),e(".gdpr.gdpr-disagree-confirmation .gdpr-wrapper").fadeOut(),e(".gdpr-consent-buttons").fadeOut(300,function(){e(".gdpr-updating").html(GDPR.i18n.aborting),e(".gdpr-consent-loading").fadeIn(300)});var t=0;setInterval(function(){e(".gdpr-ellipsis").html();t<3?(e(".gdpr-ellipsis").append("."),t++):(e(".gdpr-ellipsis").html(""),t=0)},600);e.post(GDPR.ajaxurl,{action:"disagree_with_terms",nonce:e(this).data("nonce")},function(e){e.success&&location.reload()})})})}(jQuery),function(e){var r=!1;if("function"==typeof define&&define.amd&&(define(e),r=!0),"object"==typeof exports&&(module.exports=e(),r=!0),!r){var t=window.Cookies,n=window.Cookies=e();n.noConflict=function(){return window.Cookies=t,n}}}(function(){function e(){for(var e=0,r={};e<arguments.length;e++){var t=arguments[e];for(var n in t)r[n]=t[n]}return r}return function r(t){function n(r,o,d){var a;if("undefined"!=typeof document){if(arguments.length>1){if("number"==typeof(d=e({path:"/"},n.defaults,d)).expires){var p=new Date;p.setMilliseconds(p.getMilliseconds()+864e5*d.expires),d.expires=p}d.expires=d.expires?d.expires.toUTCString():"";try{a=JSON.stringify(o),/^[\{\[]/.test(a)&&(o=a)}catch(e){}o=t.write?t.write(o,r):encodeURIComponent(String(o)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),r=(r=(r=encodeURIComponent(String(r))).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent)).replace(/[\(\)]/g,escape);var i="";for(var s in d)d[s]&&(i+="; "+s,!0!==d[s]&&(i+="="+d[s]));return document.cookie=r+"="+o+i}r||(a={});for(var c=document.cookie?document.cookie.split("; "):[],g=/(%[0-9A-Z]{2})+/g,l=0;l<c.length;l++){var f=c[l].split("="),u=f.slice(1).join("=");this.json||'"'!==u.charAt(0)||(u=u.slice(1,-1));try{var m=f[0].replace(g,decodeURIComponent);if(u=t.read?t.read(u,m):t(u,m)||u.replace(g,decodeURIComponent),this.json)try{u=JSON.parse(u)}catch(e){}if(r===m){a=u;break}r||(a[m]=u)}catch(e){}}return a}}return n.set=n,n.get=function(e){return n.call(n,e)},n.getJSON=function(){return n.apply({json:!0},[].slice.call(arguments))},n.defaults={},n.remove=function(r,t){n(r,"",e(t,{expires:-1}))},n.withConverter=r,n}(function(){})});
|
gdpr.php
CHANGED
@@ -16,7 +16,7 @@
|
|
16 |
* Plugin Name: GDPR
|
17 |
* Plugin URI: https://trewknowledge.com
|
18 |
* Description: This plugin is meant to assist a Controller, Data Processor, and Data Protection Officer (DPO) with efforts to meet the obligations and rights enacted under the GDPR.
|
19 |
-
* Version: 2.0.
|
20 |
* Author: Trew Knowledge
|
21 |
* Author URI: https://trewknowledge.com
|
22 |
* License: GPL-2.0+
|
@@ -35,7 +35,7 @@ if ( ! defined( 'WPINC' ) ) {
|
|
35 |
* Start at version 1.0.0 and use SemVer - https://semver.org
|
36 |
* Rename this for your plugin and update it as you release new versions.
|
37 |
*/
|
38 |
-
define( 'GDPR_VERSION', '2.0.
|
39 |
|
40 |
/**
|
41 |
* The code that runs during plugin activation.
|
16 |
* Plugin Name: GDPR
|
17 |
* Plugin URI: https://trewknowledge.com
|
18 |
* Description: This plugin is meant to assist a Controller, Data Processor, and Data Protection Officer (DPO) with efforts to meet the obligations and rights enacted under the GDPR.
|
19 |
+
* Version: 2.0.7
|
20 |
* Author: Trew Knowledge
|
21 |
* Author URI: https://trewknowledge.com
|
22 |
* License: GPL-2.0+
|
35 |
* Start at version 1.0.0 and use SemVer - https://semver.org
|
36 |
* Rename this for your plugin and update it as you release new versions.
|
37 |
*/
|
38 |
+
define( 'GDPR_VERSION', '2.0.7' );
|
39 |
|
40 |
/**
|
41 |
* The code that runs during plugin activation.
|
includes/class-gdpr-activator.php
CHANGED
@@ -39,32 +39,34 @@ class GDPR_Activator {
|
|
39 |
add_option( 'gdpr_recaptcha_secret_key', '' );
|
40 |
add_option( 'gdpr_add_consent_checkboxes_registration', true );
|
41 |
add_option( 'gdpr_add_consent_checkboxes_checkout', true );
|
42 |
-
add_option(
|
43 |
-
'
|
44 |
-
'
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
'
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
'
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
'
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
|
|
|
|
68 |
add_option( 'gdpr_refresh_after_preferences_update', true );
|
69 |
add_option( 'gdpr_enable_privacy_bar', true );
|
70 |
add_option( 'gdpr_display_cookie_categories_in_bar', false );
|
39 |
add_option( 'gdpr_recaptcha_secret_key', '' );
|
40 |
add_option( 'gdpr_add_consent_checkboxes_registration', true );
|
41 |
add_option( 'gdpr_add_consent_checkboxes_checkout', true );
|
42 |
+
add_option(
|
43 |
+
'gdpr_cookie_popup_content', array(
|
44 |
+
'necessary' => array(
|
45 |
+
'name' => 'Necessary',
|
46 |
+
'status' => 'required',
|
47 |
+
'cookies_used' => '',
|
48 |
+
'how_we_use' => '',
|
49 |
+
),
|
50 |
+
'advertising' => array(
|
51 |
+
'name' => 'Advertising',
|
52 |
+
'status' => 'on',
|
53 |
+
'cookies_used' => '',
|
54 |
+
'how_we_use' => '',
|
55 |
+
),
|
56 |
+
'analytics' => array(
|
57 |
+
'name' => 'Analytics',
|
58 |
+
'status' => 'on',
|
59 |
+
'cookies_used' => '',
|
60 |
+
'how_we_use' => '',
|
61 |
+
),
|
62 |
+
'other' => array(
|
63 |
+
'name' => 'Other',
|
64 |
+
'status' => 'on',
|
65 |
+
'cookies_used' => '',
|
66 |
+
'how_we_use' => '',
|
67 |
+
),
|
68 |
+
)
|
69 |
+
);
|
70 |
add_option( 'gdpr_refresh_after_preferences_update', true );
|
71 |
add_option( 'gdpr_enable_privacy_bar', true );
|
72 |
add_option( 'gdpr_display_cookie_categories_in_bar', false );
|
includes/class-gdpr-audit-log.php
CHANGED
@@ -38,7 +38,7 @@ class GDPR_Audit_Log {
|
|
38 |
* @return string The encrypted string.
|
39 |
*/
|
40 |
private static function crypt( $key, $data ) {
|
41 |
-
$iv
|
42 |
$encrypted = openssl_encrypt( $data, 'aes-256-cbc', $key, 0, $iv );
|
43 |
return base64_encode( $encrypted . '::' . $iv );
|
44 |
}
|
@@ -67,9 +67,9 @@ class GDPR_Audit_Log {
|
|
67 |
* @param string $input The string to be logged.
|
68 |
*/
|
69 |
public static function log( $user_id, $input ) {
|
70 |
-
$user
|
71 |
-
$date
|
72 |
-
$encrypted = self::crypt( $user->user_email, $date . $input);
|
73 |
add_user_meta( $user_id, 'gdpr_audit_log', $encrypted );
|
74 |
}
|
75 |
|
@@ -89,16 +89,16 @@ class GDPR_Audit_Log {
|
|
89 |
$user_log = get_user_meta( $user->ID, 'gdpr_audit_log', false );
|
90 |
ob_start();
|
91 |
foreach ( $user_log as $log ) {
|
92 |
-
echo self::decrypt( $email, $log ) . "\n";
|
93 |
}
|
94 |
$log = ob_get_clean();
|
95 |
} else {
|
96 |
-
$uploads_dir
|
97 |
-
$basedir
|
98 |
-
$path
|
99 |
$email_masked = self::email_mask( $email . $token );
|
100 |
-
$filename
|
101 |
-
$file_found
|
102 |
if ( ! $file_found ) {
|
103 |
return false;
|
104 |
} else {
|
@@ -120,18 +120,18 @@ class GDPR_Audit_Log {
|
|
120 |
* @param string $character The character that will replace letters.
|
121 |
* @return string The masked email.
|
122 |
*/
|
123 |
-
private static function email_mask( $email, $character = '-' ){
|
124 |
$email_arr = explode( '@', $email, 2 );
|
125 |
|
126 |
-
$length
|
127 |
-
$suplement = ( 0 !== $length % 2) ? 1 : 0;
|
128 |
-
$length
|
129 |
-
$username
|
130 |
|
131 |
-
$length
|
132 |
-
$suplement = ( 0 !== $length % 2) ? 1 : 0;
|
133 |
-
$length
|
134 |
-
$domain
|
135 |
|
136 |
return $username . '@' . $domain;
|
137 |
}
|
@@ -151,14 +151,14 @@ class GDPR_Audit_Log {
|
|
151 |
}
|
152 |
|
153 |
$uploads_dir = wp_upload_dir();
|
154 |
-
$basedir
|
155 |
-
$path
|
156 |
|
157 |
if ( wp_mkdir_p( $path ) ) {
|
158 |
if ( ! file_exists( $path . 'index.php' ) ) {
|
159 |
file_put_contents( $path . 'index.php', '' );
|
160 |
}
|
161 |
-
$log
|
162 |
$filename = self::email_mask( $user->user_email . $token );
|
163 |
$filename = base64_encode( $filename );
|
164 |
|
38 |
* @return string The encrypted string.
|
39 |
*/
|
40 |
private static function crypt( $key, $data ) {
|
41 |
+
$iv = openssl_random_pseudo_bytes( openssl_cipher_iv_length( 'aes-256-cbc' ) );
|
42 |
$encrypted = openssl_encrypt( $data, 'aes-256-cbc', $key, 0, $iv );
|
43 |
return base64_encode( $encrypted . '::' . $iv );
|
44 |
}
|
67 |
* @param string $input The string to be logged.
|
68 |
*/
|
69 |
public static function log( $user_id, $input ) {
|
70 |
+
$user = get_user_by( 'ID', $user_id );
|
71 |
+
$date = '[' . date( 'Y/m/d H:i:s' ) . '] ';
|
72 |
+
$encrypted = self::crypt( $user->user_email, $date . $input );
|
73 |
add_user_meta( $user_id, 'gdpr_audit_log', $encrypted );
|
74 |
}
|
75 |
|
89 |
$user_log = get_user_meta( $user->ID, 'gdpr_audit_log', false );
|
90 |
ob_start();
|
91 |
foreach ( $user_log as $log ) {
|
92 |
+
echo esc_html( self::decrypt( $email, $log ) ) . "\n";
|
93 |
}
|
94 |
$log = ob_get_clean();
|
95 |
} else {
|
96 |
+
$uploads_dir = wp_upload_dir();
|
97 |
+
$basedir = $uploads_dir['basedir'];
|
98 |
+
$path = $basedir . '/gdpr_logs/';
|
99 |
$email_masked = self::email_mask( $email . $token );
|
100 |
+
$filename = base64_encode( $email_masked );
|
101 |
+
$file_found = file_exists( $path . $filename );
|
102 |
if ( ! $file_found ) {
|
103 |
return false;
|
104 |
} else {
|
120 |
* @param string $character The character that will replace letters.
|
121 |
* @return string The masked email.
|
122 |
*/
|
123 |
+
private static function email_mask( $email, $character = '-' ) {
|
124 |
$email_arr = explode( '@', $email, 2 );
|
125 |
|
126 |
+
$length = strlen( $email_arr[0] );
|
127 |
+
$suplement = ( 0 !== $length % 2 ) ? 1 : 0;
|
128 |
+
$length = floor( $length / 2 );
|
129 |
+
$username = substr( $email_arr[0], 0, $length ) . str_repeat( $character, $length + $suplement );
|
130 |
|
131 |
+
$length = strlen( $email_arr[1] );
|
132 |
+
$suplement = ( 0 !== $length % 2 ) ? 1 : 0;
|
133 |
+
$length = floor( $length / 2 );
|
134 |
+
$domain = str_repeat( $character, $length + $suplement ) . substr( $email_arr[1], -$length, $length );
|
135 |
|
136 |
return $username . '@' . $domain;
|
137 |
}
|
151 |
}
|
152 |
|
153 |
$uploads_dir = wp_upload_dir();
|
154 |
+
$basedir = $uploads_dir['basedir'];
|
155 |
+
$path = $basedir . '/gdpr_logs/';
|
156 |
|
157 |
if ( wp_mkdir_p( $path ) ) {
|
158 |
if ( ! file_exists( $path . 'index.php' ) ) {
|
159 |
file_put_contents( $path . 'index.php', '' );
|
160 |
}
|
161 |
+
$log = self::get_log( $user->user_email );
|
162 |
$filename = self::email_mask( $user->user_email . $token );
|
163 |
$filename = base64_encode( $filename );
|
164 |
|
includes/class-gdpr-deactivator.php
CHANGED
@@ -32,7 +32,7 @@ class GDPR_Deactivator {
|
|
32 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
33 |
*/
|
34 |
public static function deactivate() {
|
35 |
-
wp_clear_scheduled_hook('telemetry_cleanup');
|
36 |
}
|
37 |
|
38 |
}
|
32 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
33 |
*/
|
34 |
public static function deactivate() {
|
35 |
+
wp_clear_scheduled_hook( 'telemetry_cleanup' );
|
36 |
}
|
37 |
|
38 |
}
|
includes/class-gdpr-email.php
CHANGED
@@ -42,9 +42,11 @@ class GDPR_Email {
|
|
42 |
$plugin_path = plugin_dir_path( dirname( __FILE__ ) ) . 'templates/email/'; // Path to the template folder
|
43 |
|
44 |
// Search template file in theme folder.
|
45 |
-
$template = locate_template(
|
46 |
-
|
47 |
-
|
|
|
|
|
48 |
|
49 |
// Get plugins template file.
|
50 |
if ( ! $template ) {
|
@@ -98,12 +100,12 @@ class GDPR_Email {
|
|
98 |
* @return string The noreply email address
|
99 |
*/
|
100 |
private static function get_do_not_reply_address() {
|
101 |
-
|
102 |
-
|
103 |
$sitename = substr( $sitename, 4 );
|
104 |
-
|
105 |
|
106 |
-
|
107 |
}
|
108 |
|
109 |
/**
|
@@ -122,14 +124,16 @@ class GDPR_Email {
|
|
122 |
|
123 |
$limit = get_option( 'gdpr_email_limit', 100 );
|
124 |
|
125 |
-
$users = get_users(
|
126 |
-
|
127 |
-
|
|
|
|
|
128 |
|
129 |
$steps = ceil( count( $users ) / $limit );
|
130 |
|
131 |
foreach ( range( 0, $steps - 1 ) as $loop ) {
|
132 |
-
$offset
|
133 |
$loop_emails = wp_list_pluck( $users, 'user_email' );
|
134 |
$loop_emails = array_slice( $loop_emails, $offset, $limit );
|
135 |
wp_schedule_single_event( time() + $loop * HOUR_IN_SECONDS, 'send_data_breach_emails', array( $loop_emails, $data_breach ) );
|
@@ -147,36 +151,37 @@ class GDPR_Email {
|
|
147 |
public function send_data_breach_emails( $emails, $data ) {
|
148 |
$content = isset( $data['content'] ) ? sanitize_textarea_field( $data['content'] ) : '';
|
149 |
|
150 |
-
$nature
|
151 |
$office_contact = sanitize_textarea_field( wp_unslash( $data['office_contact'] ) );
|
152 |
-
$consequences
|
153 |
-
$measures
|
154 |
|
155 |
foreach ( (array) $emails as $email ) {
|
156 |
$user = get_user_by( 'email', $email );
|
157 |
if ( $user instanceof WP_User ) {
|
158 |
GDPR_Audit_Log::log( $user->ID, esc_html__( 'Data breach notification sent to user.', 'gdpr' ) );
|
159 |
/* translators: email content */
|
160 |
-
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'Email content: %s', 'gdpr'), $content ) );
|
161 |
/* translators: nature of the data breach */
|
162 |
-
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'Nature of data breach: %s', 'gdpr'), $nature ) );
|
163 |
/* translators: data protection officer contact information */
|
164 |
-
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'Data protection officer contact: %s', 'gdpr'), $office_contact ) );
|
165 |
/* translators: likely consequences */
|
166 |
-
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'Likely consequences of breach: %s', 'gdpr'), $consequences ) );
|
167 |
/* translators: measures taken */
|
168 |
-
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'Measures taken or proposed to be taken: %s', 'gdpr'), $measures ) );
|
169 |
}
|
170 |
}
|
171 |
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
|
|
180 |
}
|
181 |
|
182 |
/**
|
@@ -193,33 +198,36 @@ class GDPR_Email {
|
|
193 |
* @return bool Whether the email contents were sent successfully.
|
194 |
*/
|
195 |
public static function send( $emails, $type, $args = array(), $attachments = array() ) {
|
196 |
-
$possible_types = apply_filters(
|
197 |
-
'
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
|
208 |
-
|
|
|
|
|
209 |
|
210 |
if ( ! in_array( $type, array_keys( $possible_types ), true ) ) {
|
211 |
return;
|
212 |
}
|
213 |
|
214 |
$no_reply = self::get_do_not_reply_address();
|
215 |
-
|
216 |
foreach ( (array) $emails as $email ) {
|
217 |
$headers[] = 'Bcc: ' . sanitize_email( $email );
|
218 |
}
|
219 |
|
220 |
$content = self::get_email_content( $type . '.php', $args );
|
221 |
|
222 |
-
return wp_mail(
|
|
|
223 |
$possible_types[ $type ],
|
224 |
html_entity_decode( $content, ENT_QUOTES, 'UTF-8' ),
|
225 |
$headers,
|
42 |
$plugin_path = plugin_dir_path( dirname( __FILE__ ) ) . 'templates/email/'; // Path to the template folder
|
43 |
|
44 |
// Search template file in theme folder.
|
45 |
+
$template = locate_template(
|
46 |
+
array(
|
47 |
+
$theme_path . $template_name,
|
48 |
+
)
|
49 |
+
);
|
50 |
|
51 |
// Get plugins template file.
|
52 |
if ( ! $template ) {
|
100 |
* @return string The noreply email address
|
101 |
*/
|
102 |
private static function get_do_not_reply_address() {
|
103 |
+
$sitename = isset( $_SERVER['SERVER_NAME'] ) ? strtolower( sanitize_text_field( wp_unslash( $_SERVER['SERVER_NAME'] ) ) ) : ''; // WPCS: input var ok.
|
104 |
+
if ( substr( $sitename, 0, 4 ) === 'www.' ) {
|
105 |
$sitename = substr( $sitename, 4 );
|
106 |
+
}
|
107 |
|
108 |
+
return apply_filters( 'gdpr_do_not_reply_address', 'noreply@' . $sitename );
|
109 |
}
|
110 |
|
111 |
/**
|
124 |
|
125 |
$limit = get_option( 'gdpr_email_limit', 100 );
|
126 |
|
127 |
+
$users = get_users(
|
128 |
+
array(
|
129 |
+
'fields' => 'all_with_meta',
|
130 |
+
)
|
131 |
+
);
|
132 |
|
133 |
$steps = ceil( count( $users ) / $limit );
|
134 |
|
135 |
foreach ( range( 0, $steps - 1 ) as $loop ) {
|
136 |
+
$offset = $limit * $loop;
|
137 |
$loop_emails = wp_list_pluck( $users, 'user_email' );
|
138 |
$loop_emails = array_slice( $loop_emails, $offset, $limit );
|
139 |
wp_schedule_single_event( time() + $loop * HOUR_IN_SECONDS, 'send_data_breach_emails', array( $loop_emails, $data_breach ) );
|
151 |
public function send_data_breach_emails( $emails, $data ) {
|
152 |
$content = isset( $data['content'] ) ? sanitize_textarea_field( $data['content'] ) : '';
|
153 |
|
154 |
+
$nature = sanitize_textarea_field( wp_unslash( $data['nature'] ) );
|
155 |
$office_contact = sanitize_textarea_field( wp_unslash( $data['office_contact'] ) );
|
156 |
+
$consequences = sanitize_textarea_field( wp_unslash( $data['consequences'] ) );
|
157 |
+
$measures = sanitize_textarea_field( wp_unslash( $data['measures'] ) );
|
158 |
|
159 |
foreach ( (array) $emails as $email ) {
|
160 |
$user = get_user_by( 'email', $email );
|
161 |
if ( $user instanceof WP_User ) {
|
162 |
GDPR_Audit_Log::log( $user->ID, esc_html__( 'Data breach notification sent to user.', 'gdpr' ) );
|
163 |
/* translators: email content */
|
164 |
+
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'Email content: %s', 'gdpr' ), $content ) );
|
165 |
/* translators: nature of the data breach */
|
166 |
+
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'Nature of data breach: %s', 'gdpr' ), $nature ) );
|
167 |
/* translators: data protection officer contact information */
|
168 |
+
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'Data protection officer contact: %s', 'gdpr' ), $office_contact ) );
|
169 |
/* translators: likely consequences */
|
170 |
+
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'Likely consequences of breach: %s', 'gdpr' ), $consequences ) );
|
171 |
/* translators: measures taken */
|
172 |
+
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'Measures taken or proposed to be taken: %s', 'gdpr' ), $measures ) );
|
173 |
}
|
174 |
}
|
175 |
|
176 |
+
self::send(
|
177 |
+
$emails, 'data-breach-notification', array(
|
178 |
+
'content' => $content,
|
179 |
+
'nature' => $nature,
|
180 |
+
'office_contact' => $office_contact,
|
181 |
+
'consequences' => $consequences,
|
182 |
+
'measures' => $measures,
|
183 |
+
)
|
184 |
+
);
|
185 |
}
|
186 |
|
187 |
/**
|
198 |
* @return bool Whether the email contents were sent successfully.
|
199 |
*/
|
200 |
public static function send( $emails, $type, $args = array(), $attachments = array() ) {
|
201 |
+
$possible_types = apply_filters(
|
202 |
+
'gdpr_email_types', array(
|
203 |
+
'new-request' => apply_filters( 'gdpr_new_request_email_subject', esc_html__( 'GDPR Notification: There is a new request waiting to be reviewed.', 'gdpr' ) ),
|
204 |
+
'delete-request' => apply_filters( 'gdpr_delete_request_email_subject', esc_html__( 'Someone requested to close your account.', 'gdpr' ) ),
|
205 |
+
'delete-resolved' => apply_filters( 'gdpr_delete_resolved_email_subject', esc_html__( 'Your account has been closed.', 'gdpr' ) ),
|
206 |
+
'rectify-request' => apply_filters( 'gdpr_rectify_request_email_subject', esc_html__( 'Someone requested that we rectify data of your account.', 'gdpr' ) ),
|
207 |
+
'rectify-resolved' => apply_filters( 'gdpr_rectify_resolved_email_subject', esc_html__( 'Your request has been completed.', 'gdpr' ) ),
|
208 |
+
'complaint-request' => apply_filters( 'gdpr_complaint_request_email_subject', esc_html__( 'Someone made complaint on behalf of your account.', 'gdpr' ) ),
|
209 |
+
'complaint-resolved' => apply_filters( 'gdpr_complaint_resolved_email_subject', esc_html__( 'Your request has been completed.', 'gdpr' ) ),
|
210 |
+
'export-data-request' => apply_filters( 'gdpr_export_data_request_email_subject', esc_html__( 'Someone requested to download your data.', 'gdpr' ) ),
|
211 |
+
'export-data-resolved' => apply_filters( 'gdpr_export_data_resolved_email_subject', esc_html__( 'Your request has been completed.', 'gdpr' ) ),
|
212 |
+
'data-breach-request' => apply_filters( 'gdpr_data_breach_request_email_subject', esc_html__( 'Someone requested to send a data breach notification.', 'gdpr' ) ),
|
213 |
+
'data-breach-notification' => apply_filters( 'gdpr_data_breach_resolved_email_subject', esc_html__( 'Data Breach Notification.', 'gdpr' ) ),
|
214 |
+
)
|
215 |
+
);
|
216 |
|
217 |
if ( ! in_array( $type, array_keys( $possible_types ), true ) ) {
|
218 |
return;
|
219 |
}
|
220 |
|
221 |
$no_reply = self::get_do_not_reply_address();
|
222 |
+
$headers = array( 'From: ' . get_bloginfo( 'name' ) . ' <' . $no_reply . '>' );
|
223 |
foreach ( (array) $emails as $email ) {
|
224 |
$headers[] = 'Bcc: ' . sanitize_email( $email );
|
225 |
}
|
226 |
|
227 |
$content = self::get_email_content( $type . '.php', $args );
|
228 |
|
229 |
+
return wp_mail(
|
230 |
+
$no_reply,
|
231 |
$possible_types[ $type ],
|
232 |
html_entity_decode( $content, ENT_QUOTES, 'UTF-8' ),
|
233 |
$headers,
|
includes/class-gdpr-help.php
CHANGED
@@ -29,38 +29,46 @@ class GDPR_Help {
|
|
29 |
public static function add_requests_help() {
|
30 |
$overview = '<h2>' . esc_html__( 'Overview', 'gdpr' ) . '</h2>' .
|
31 |
'<p>' . esc_html__( 'This page has multiple request tables. Users can request multiple things like getting deleted from the site or having their data rectified. All requests will come to these tables.', 'gdpr' ) . '</p>';
|
32 |
-
get_current_screen()->add_help_tab(
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
|
|
|
|
37 |
|
38 |
$rectify_help = '<h2>' . esc_html__( 'Rectify Data', 'gdpr' ) . '</h2>' .
|
39 |
'<p>' . esc_html__( 'Users may request to have their data rectified. They can place a request somewhere on your site and those requests will show up here.', 'gdpr' ) . '</p>' .
|
40 |
'<p>' . esc_html__( 'When you complete the request, mark it as resolved and the requester will get a notification email confirming that their request was resolved.', 'gdpr' ) . '</p>';
|
41 |
-
get_current_screen()->add_help_tab(
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
|
|
|
|
46 |
|
47 |
$complaint_help = '<h2>' . esc_html__( 'Complaints', 'gdpr' ) . '</h2>' .
|
48 |
'<p>' . esc_html__( 'Users may complain about something that happened. They can place a complaint somewhere on your site and those complaints will show up here.', 'gdpr' ) . '</p>' .
|
49 |
'<p>' . esc_html__( 'When you resolve the problem, mark it as resolved and the requester will get a notification email confirming that his complaint was resolved.', 'gdpr' ) . '</p>';
|
50 |
-
get_current_screen()->add_help_tab(
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
|
|
|
|
55 |
|
56 |
$erasure_help = '<h2>' . esc_html__( 'Erasure', 'gdpr' ) . '</h2>' .
|
57 |
'<p>' . esc_html__( 'Users may request to be deleted from the site. If they don\'t have any content published on the site (including comments) they will be removed from the site automatically. Otherwise, they will show up at this review table where you can reassign or delete their published content and anonymize his comments.', 'gdpr' ) . '</p>' .
|
58 |
'<p>' . esc_html__( 'User may request their data to be deleted. The controller has, according to GDPR, 30 days to fulfill the request. On some occasions, you can ask to extend this time limit. When the request has been resolved the user will receive a notification that their account has been closed.', 'gdpr' ) . '</p>';
|
59 |
-
get_current_screen()->add_help_tab(
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
|
|
|
|
64 |
}
|
65 |
|
66 |
/**
|
@@ -72,40 +80,48 @@ class GDPR_Help {
|
|
72 |
public static function add_tools_help() {
|
73 |
$overview = '<h2>' . esc_html__( 'Overview', 'gdpr' ) . '</h2>' .
|
74 |
'<p>' . esc_html__( 'We added tools to make your life easier when you need to perform administrative tasks like notify all your users of a possible data breach.', 'gdpr' ) . '</p>';
|
75 |
-
get_current_screen()->add_help_tab(
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
|
|
|
|
80 |
|
81 |
$access_data_help = '<h2>' . esc_html__( 'Access Data', 'gdpr' ) . '</h2>' .
|
82 |
'<p>' . esc_html__( 'Use this page to look for all known data about a user. You can look it up using the user\'s email address and are able to download it in XML and JSON formats.', 'gdpr' ) . '</p>';
|
83 |
-
get_current_screen()->add_help_tab(
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
|
|
|
|
88 |
|
89 |
$data_breach_help = '<h2>' . esc_html__( 'Data Breach Notification', 'gdpr' ) . '</h2>' .
|
90 |
'<p><strong>' . esc_html__( 'Use this carefully.', 'gdpr' ) . '</strong></p>' .
|
91 |
'<p>' . esc_html__( 'This will send a mass email to all your users with the information provided on these fields. This email is throttled based on the hourly limit set on the plugin settings page. ', 'gdpr' ) . '</p>' .
|
92 |
'<p><strong>' . esc_html__( 'Only use this tool if you believe your site has been compromised and that your user\'s personal data might have been leaked.', 'gdpr' ) . '</strong></p>';
|
93 |
-
get_current_screen()->add_help_tab(
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
|
|
|
|
98 |
|
99 |
$audit_log_help = '<h2>' . esc_html__( 'Audit Log', 'gdpr' ) . '</h2>' .
|
100 |
'<p><strong>' . esc_html__( 'We do not log any of the user\'s personal data.', 'gdpr' ) . '</strong></p>' .
|
101 |
'<p>' . esc_html__( 'All logs are encrypted before saving to the database. An encrypted log file is created whenever a user gets removed from the site.', 'gdpr' ) . '</p>' .
|
102 |
'<p>' . esc_html__( 'This tool will keep a record of some actions such as changing consent preferences, placing a request, data breach notifications received, etc…', 'gdpr' ) . '<br />' .
|
103 |
esc_html__( 'The only way to read the logs is to search for the user email. If the data subject is not a registered site user anymore, you need to ask for the 6 digit token that was provided during deletion. That will allow this tool to look for a log file with his information.', 'gdpr' ) . '</p>';
|
104 |
-
get_current_screen()->add_help_tab(
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
|
|
|
|
109 |
}
|
110 |
|
111 |
/**
|
@@ -118,49 +134,57 @@ class GDPR_Help {
|
|
118 |
$general_settings_help = '<h2>' . esc_html__( 'General Settings', 'gdpr' ) . '</h2>' .
|
119 |
'<p>' . esc_html__( 'This plugin needs to know your privacy policy page to track updates to it and ask users to re-consent to your new terms.', 'gdpr' ) . '</p>' .
|
120 |
'<p>' . esc_html__( 'When sending a data breach notification to your users, we need to throttle the emails because of server limitations. This is an hourly limit. Check with your hosting provider before changing this value.', 'gdpr' ) . '</p>';
|
121 |
-
get_current_screen()->add_help_tab(
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
|
|
|
|
126 |
|
127 |
-
$cookies_settings_help = sprintf(
|
|
|
128 |
'<p>' . esc_html__( 'Fill out every information you can about the cookies your site uses. Set the cookies that you set under Cookies Used and cookies used and set by third parties under the Third party domains.', 'gdpr' ) . '</p>' .
|
129 |
/* translators: the function */
|
130 |
'<p>' . esc_html__( 'You must ask your developer to wrap the code that sets the cookies with our helper function %s.', 'gdpr' ) . '</p>' .
|
131 |
'<p>' . esc_html__( 'Some services like Google Analytics provide a way to opt out from their code with an extra parameter to their snippet.', 'gdpr' ) . '</p>' .
|
132 |
'<h3>' . esc_html__( 'External Links', 'gdpr' ) . '</h3>' .
|
133 |
'<ul>' .
|
134 |
-
'<li><a href="https://codex.wordpress.org/WordPress_Cookies" title="' . esc_attr__( 'WordPress cookies', 'gdpr' ) . '" target="_blank">'. esc_html__( 'WordPress cookies', 'gdpr' ) .'</a></li>' .
|
135 |
'</ul>',
|
136 |
'<code>is_allowed_cookie( $cookie_name )</code>'
|
137 |
);
|
138 |
-
get_current_screen()->add_help_tab(
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
|
|
|
|
143 |
|
144 |
-
$consent_settings_help = sprintf(
|
|
|
145 |
'<p>' . esc_html__( 'All consents are disabled by default. On first registration, your users will need to consent to your privacy policy. Depending on your privacy policy you should register multiple types of consent on this page and allow them to be toggled on/off.', 'gdpr' ) . '</p>' .
|
146 |
/* translators: the function */
|
147 |
'<p>' . esc_html__( 'If you have an optional consent type, you must have a developer wrap the functionality in our helper function %s.', 'gdpr' ) . '</p>' .
|
148 |
'<p><strong>' . esc_html__( 'i.e.', 'gdpr' ) . '</strong><br />' . esc_html__( 'You registered email marketing as an optional consent but the user did not actively opt into it on their profile page. You should have your email capture form wrapped in our helper function to block registration or better yet, not even display the email capture form. Same goes for blocking adding the user to your mailing system on registration if consent is not given.', 'gdpr' ) . '</p>' .
|
149 |
'<h3>' . esc_html__( 'External Links', 'gdpr' ) . '</h3>' .
|
150 |
'<ul>' .
|
151 |
-
'<li><a href="https://gdpr-info.eu/art-7-gdpr/" title="' . esc_attr__( 'Article 7 - Conditions for consent', 'gdpr' ) . '" target="_blank">'. esc_html__( 'Article 7 - Conditions for consent', 'gdpr' ) .'</a></li>' .
|
152 |
-
'<li><a href="https://gdpr-info.eu/art-8-gdpr/" title="' . esc_attr__( "Article 8 - conditions applicable to child's consent in relation to information society services", 'gdpr' ) . '" target="_blank">'. esc_html__( "Article 8 - conditions applicable to child's consent in relation to information society services", 'gdpr' ) .'</a></li>' .
|
153 |
-
'<li><a href="https://gdpr-info.eu/recitals/no-42/" title="' . esc_attr__( 'Recital 42 - Burden of proof and requirements for consent', 'gdpr' ) . '" target="_blank">'. esc_html__( 'Recital 42 - Burden of proof and requirements for consent', 'gdpr' ) .'</a></li>' .
|
154 |
-
'<li><a href="https://gdpr-info.eu/recitals/no-43/" title="' . esc_attr__( 'Recital 43 - Freely Given consent', 'gdpr' ) . '" target="_blank">'. esc_html__( 'Recital 43 - Freely Given consent', 'gdpr' ) .'</a></li>' .
|
155 |
'</ul>',
|
156 |
'<code>have_consent( $consent_id )</code>'
|
157 |
);
|
158 |
|
159 |
-
get_current_screen()->add_help_tab(
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
|
|
|
|
164 |
}
|
165 |
|
166 |
/**
|
@@ -179,10 +203,12 @@ class GDPR_Help {
|
|
179 |
'<p>' . esc_html__( 'Some plugins also capture data and send it to their servers. Such practice is not allowed for plugins hosted on wordpress.org plugin repository. In case this is a Premium plugin, you should have been given the option to choose which type of data you want to send.', 'gdpr' ) . '</p>' .
|
180 |
'<p>' . esc_html__( 'Use this tool to identify plugins or themes sending potential personal data outside of your server and take action if necessary.', 'gdpr' ) . '</p>' .
|
181 |
'<p>' . esc_html__( 'All information on this page is automatically deleted every 12 hours so this doesn\'t grow too large and slow your site.' ) . '</p>';
|
182 |
-
get_current_screen()->add_help_tab(
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
|
|
|
|
187 |
}
|
188 |
}
|
29 |
public static function add_requests_help() {
|
30 |
$overview = '<h2>' . esc_html__( 'Overview', 'gdpr' ) . '</h2>' .
|
31 |
'<p>' . esc_html__( 'This page has multiple request tables. Users can request multiple things like getting deleted from the site or having their data rectified. All requests will come to these tables.', 'gdpr' ) . '</p>';
|
32 |
+
get_current_screen()->add_help_tab(
|
33 |
+
array(
|
34 |
+
'id' => 'overview',
|
35 |
+
'title' => esc_html__( 'Overview', 'gdpr' ),
|
36 |
+
'content' => $overview,
|
37 |
+
)
|
38 |
+
);
|
39 |
|
40 |
$rectify_help = '<h2>' . esc_html__( 'Rectify Data', 'gdpr' ) . '</h2>' .
|
41 |
'<p>' . esc_html__( 'Users may request to have their data rectified. They can place a request somewhere on your site and those requests will show up here.', 'gdpr' ) . '</p>' .
|
42 |
'<p>' . esc_html__( 'When you complete the request, mark it as resolved and the requester will get a notification email confirming that their request was resolved.', 'gdpr' ) . '</p>';
|
43 |
+
get_current_screen()->add_help_tab(
|
44 |
+
array(
|
45 |
+
'id' => 'rectify-data',
|
46 |
+
'title' => esc_html__( 'Rectify Data', 'gdpr' ),
|
47 |
+
'content' => $rectify_help,
|
48 |
+
)
|
49 |
+
);
|
50 |
|
51 |
$complaint_help = '<h2>' . esc_html__( 'Complaints', 'gdpr' ) . '</h2>' .
|
52 |
'<p>' . esc_html__( 'Users may complain about something that happened. They can place a complaint somewhere on your site and those complaints will show up here.', 'gdpr' ) . '</p>' .
|
53 |
'<p>' . esc_html__( 'When you resolve the problem, mark it as resolved and the requester will get a notification email confirming that his complaint was resolved.', 'gdpr' ) . '</p>';
|
54 |
+
get_current_screen()->add_help_tab(
|
55 |
+
array(
|
56 |
+
'id' => 'complaint',
|
57 |
+
'title' => esc_html__( 'Complaints', 'gdpr' ),
|
58 |
+
'content' => $complaint_help,
|
59 |
+
)
|
60 |
+
);
|
61 |
|
62 |
$erasure_help = '<h2>' . esc_html__( 'Erasure', 'gdpr' ) . '</h2>' .
|
63 |
'<p>' . esc_html__( 'Users may request to be deleted from the site. If they don\'t have any content published on the site (including comments) they will be removed from the site automatically. Otherwise, they will show up at this review table where you can reassign or delete their published content and anonymize his comments.', 'gdpr' ) . '</p>' .
|
64 |
'<p>' . esc_html__( 'User may request their data to be deleted. The controller has, according to GDPR, 30 days to fulfill the request. On some occasions, you can ask to extend this time limit. When the request has been resolved the user will receive a notification that their account has been closed.', 'gdpr' ) . '</p>';
|
65 |
+
get_current_screen()->add_help_tab(
|
66 |
+
array(
|
67 |
+
'id' => 'erasure',
|
68 |
+
'title' => esc_html__( 'Erasures', 'gdpr' ),
|
69 |
+
'content' => $erasure_help,
|
70 |
+
)
|
71 |
+
);
|
72 |
}
|
73 |
|
74 |
/**
|
80 |
public static function add_tools_help() {
|
81 |
$overview = '<h2>' . esc_html__( 'Overview', 'gdpr' ) . '</h2>' .
|
82 |
'<p>' . esc_html__( 'We added tools to make your life easier when you need to perform administrative tasks like notify all your users of a possible data breach.', 'gdpr' ) . '</p>';
|
83 |
+
get_current_screen()->add_help_tab(
|
84 |
+
array(
|
85 |
+
'id' => 'overview',
|
86 |
+
'title' => esc_html__( 'Overview', 'gdpr' ),
|
87 |
+
'content' => $overview,
|
88 |
+
)
|
89 |
+
);
|
90 |
|
91 |
$access_data_help = '<h2>' . esc_html__( 'Access Data', 'gdpr' ) . '</h2>' .
|
92 |
'<p>' . esc_html__( 'Use this page to look for all known data about a user. You can look it up using the user\'s email address and are able to download it in XML and JSON formats.', 'gdpr' ) . '</p>';
|
93 |
+
get_current_screen()->add_help_tab(
|
94 |
+
array(
|
95 |
+
'id' => 'access-data',
|
96 |
+
'title' => esc_html__( 'Access Data', 'gdpr' ),
|
97 |
+
'content' => $access_data_help,
|
98 |
+
)
|
99 |
+
);
|
100 |
|
101 |
$data_breach_help = '<h2>' . esc_html__( 'Data Breach Notification', 'gdpr' ) . '</h2>' .
|
102 |
'<p><strong>' . esc_html__( 'Use this carefully.', 'gdpr' ) . '</strong></p>' .
|
103 |
'<p>' . esc_html__( 'This will send a mass email to all your users with the information provided on these fields. This email is throttled based on the hourly limit set on the plugin settings page. ', 'gdpr' ) . '</p>' .
|
104 |
'<p><strong>' . esc_html__( 'Only use this tool if you believe your site has been compromised and that your user\'s personal data might have been leaked.', 'gdpr' ) . '</strong></p>';
|
105 |
+
get_current_screen()->add_help_tab(
|
106 |
+
array(
|
107 |
+
'id' => 'data-breach',
|
108 |
+
'title' => esc_html__( 'Data Breach', 'gdpr' ),
|
109 |
+
'content' => $data_breach_help,
|
110 |
+
)
|
111 |
+
);
|
112 |
|
113 |
$audit_log_help = '<h2>' . esc_html__( 'Audit Log', 'gdpr' ) . '</h2>' .
|
114 |
'<p><strong>' . esc_html__( 'We do not log any of the user\'s personal data.', 'gdpr' ) . '</strong></p>' .
|
115 |
'<p>' . esc_html__( 'All logs are encrypted before saving to the database. An encrypted log file is created whenever a user gets removed from the site.', 'gdpr' ) . '</p>' .
|
116 |
'<p>' . esc_html__( 'This tool will keep a record of some actions such as changing consent preferences, placing a request, data breach notifications received, etc…', 'gdpr' ) . '<br />' .
|
117 |
esc_html__( 'The only way to read the logs is to search for the user email. If the data subject is not a registered site user anymore, you need to ask for the 6 digit token that was provided during deletion. That will allow this tool to look for a log file with his information.', 'gdpr' ) . '</p>';
|
118 |
+
get_current_screen()->add_help_tab(
|
119 |
+
array(
|
120 |
+
'id' => 'audit-log',
|
121 |
+
'title' => esc_html__( 'Audit Log', 'gdpr' ),
|
122 |
+
'content' => $audit_log_help,
|
123 |
+
)
|
124 |
+
);
|
125 |
}
|
126 |
|
127 |
/**
|
134 |
$general_settings_help = '<h2>' . esc_html__( 'General Settings', 'gdpr' ) . '</h2>' .
|
135 |
'<p>' . esc_html__( 'This plugin needs to know your privacy policy page to track updates to it and ask users to re-consent to your new terms.', 'gdpr' ) . '</p>' .
|
136 |
'<p>' . esc_html__( 'When sending a data breach notification to your users, we need to throttle the emails because of server limitations. This is an hourly limit. Check with your hosting provider before changing this value.', 'gdpr' ) . '</p>';
|
137 |
+
get_current_screen()->add_help_tab(
|
138 |
+
array(
|
139 |
+
'id' => 'general',
|
140 |
+
'title' => esc_html__( 'General Settings', 'gdpr' ),
|
141 |
+
'content' => $general_settings_help,
|
142 |
+
)
|
143 |
+
);
|
144 |
|
145 |
+
$cookies_settings_help = sprintf(
|
146 |
+
'<h2>' . esc_html__( 'Cookie Management', 'gdpr' ) . '</h2>' .
|
147 |
'<p>' . esc_html__( 'Fill out every information you can about the cookies your site uses. Set the cookies that you set under Cookies Used and cookies used and set by third parties under the Third party domains.', 'gdpr' ) . '</p>' .
|
148 |
/* translators: the function */
|
149 |
'<p>' . esc_html__( 'You must ask your developer to wrap the code that sets the cookies with our helper function %s.', 'gdpr' ) . '</p>' .
|
150 |
'<p>' . esc_html__( 'Some services like Google Analytics provide a way to opt out from their code with an extra parameter to their snippet.', 'gdpr' ) . '</p>' .
|
151 |
'<h3>' . esc_html__( 'External Links', 'gdpr' ) . '</h3>' .
|
152 |
'<ul>' .
|
153 |
+
'<li><a href="https://codex.wordpress.org/WordPress_Cookies" title="' . esc_attr__( 'WordPress cookies', 'gdpr' ) . '" target="_blank">' . esc_html__( 'WordPress cookies', 'gdpr' ) . '</a></li>' .
|
154 |
'</ul>',
|
155 |
'<code>is_allowed_cookie( $cookie_name )</code>'
|
156 |
);
|
157 |
+
get_current_screen()->add_help_tab(
|
158 |
+
array(
|
159 |
+
'id' => 'cookies',
|
160 |
+
'title' => esc_html__( 'Cookie Management', 'gdpr' ),
|
161 |
+
'content' => $cookies_settings_help,
|
162 |
+
)
|
163 |
+
);
|
164 |
|
165 |
+
$consent_settings_help = sprintf(
|
166 |
+
'<h2>' . esc_html__( 'Consent Management ( Coming Soon )', 'gdpr' ) . '</h2>' .
|
167 |
'<p>' . esc_html__( 'All consents are disabled by default. On first registration, your users will need to consent to your privacy policy. Depending on your privacy policy you should register multiple types of consent on this page and allow them to be toggled on/off.', 'gdpr' ) . '</p>' .
|
168 |
/* translators: the function */
|
169 |
'<p>' . esc_html__( 'If you have an optional consent type, you must have a developer wrap the functionality in our helper function %s.', 'gdpr' ) . '</p>' .
|
170 |
'<p><strong>' . esc_html__( 'i.e.', 'gdpr' ) . '</strong><br />' . esc_html__( 'You registered email marketing as an optional consent but the user did not actively opt into it on their profile page. You should have your email capture form wrapped in our helper function to block registration or better yet, not even display the email capture form. Same goes for blocking adding the user to your mailing system on registration if consent is not given.', 'gdpr' ) . '</p>' .
|
171 |
'<h3>' . esc_html__( 'External Links', 'gdpr' ) . '</h3>' .
|
172 |
'<ul>' .
|
173 |
+
'<li><a href="https://gdpr-info.eu/art-7-gdpr/" title="' . esc_attr__( 'Article 7 - Conditions for consent', 'gdpr' ) . '" target="_blank">' . esc_html__( 'Article 7 - Conditions for consent', 'gdpr' ) . '</a></li>' .
|
174 |
+
'<li><a href="https://gdpr-info.eu/art-8-gdpr/" title="' . esc_attr__( "Article 8 - conditions applicable to child's consent in relation to information society services", 'gdpr' ) . '" target="_blank">' . esc_html__( "Article 8 - conditions applicable to child's consent in relation to information society services", 'gdpr' ) . '</a></li>' .
|
175 |
+
'<li><a href="https://gdpr-info.eu/recitals/no-42/" title="' . esc_attr__( 'Recital 42 - Burden of proof and requirements for consent', 'gdpr' ) . '" target="_blank">' . esc_html__( 'Recital 42 - Burden of proof and requirements for consent', 'gdpr' ) . '</a></li>' .
|
176 |
+
'<li><a href="https://gdpr-info.eu/recitals/no-43/" title="' . esc_attr__( 'Recital 43 - Freely Given consent', 'gdpr' ) . '" target="_blank">' . esc_html__( 'Recital 43 - Freely Given consent', 'gdpr' ) . '</a></li>' .
|
177 |
'</ul>',
|
178 |
'<code>have_consent( $consent_id )</code>'
|
179 |
);
|
180 |
|
181 |
+
get_current_screen()->add_help_tab(
|
182 |
+
array(
|
183 |
+
'id' => 'consents',
|
184 |
+
'title' => esc_html__( 'Consent Management', 'gdpr' ),
|
185 |
+
'content' => $consent_settings_help,
|
186 |
+
)
|
187 |
+
);
|
188 |
}
|
189 |
|
190 |
/**
|
203 |
'<p>' . esc_html__( 'Some plugins also capture data and send it to their servers. Such practice is not allowed for plugins hosted on wordpress.org plugin repository. In case this is a Premium plugin, you should have been given the option to choose which type of data you want to send.', 'gdpr' ) . '</p>' .
|
204 |
'<p>' . esc_html__( 'Use this tool to identify plugins or themes sending potential personal data outside of your server and take action if necessary.', 'gdpr' ) . '</p>' .
|
205 |
'<p>' . esc_html__( 'All information on this page is automatically deleted every 12 hours so this doesn\'t grow too large and slow your site.' ) . '</p>';
|
206 |
+
get_current_screen()->add_help_tab(
|
207 |
+
array(
|
208 |
+
'id' => 'overview',
|
209 |
+
'title' => esc_html__( 'Overview', 'gdpr' ),
|
210 |
+
'content' => $telemetry_help,
|
211 |
+
)
|
212 |
+
);
|
213 |
}
|
214 |
}
|
includes/class-gdpr-requests.php
CHANGED
@@ -75,17 +75,17 @@ class GDPR_Requests {
|
|
75 |
* @return array The allowed request types.
|
76 |
*/
|
77 |
protected function get_allowed_types() {
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
static function user_has_content( $user ) {
|
90 |
if ( ! $user instanceof WP_User ) {
|
91 |
if ( ! is_int( $user ) ) {
|
@@ -96,18 +96,20 @@ class GDPR_Requests {
|
|
96 |
|
97 |
$post_types = get_post_types( array( 'public' => true ) );
|
98 |
foreach ( $post_types as $pt ) {
|
99 |
-
$post_count = count_user_posts( $user->ID, $pt);
|
100 |
if ( $post_count > 0 ) {
|
101 |
return true;
|
102 |
}
|
103 |
}
|
104 |
|
105 |
-
$comments = get_comments(
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
|
|
|
|
111 |
|
112 |
if ( $comments ) {
|
113 |
return true;
|
@@ -127,8 +129,8 @@ class GDPR_Requests {
|
|
127 |
* @return bool Whether the user was removed from the requests list.
|
128 |
*/
|
129 |
protected function remove_from_requests( $index ) {
|
130 |
-
$requests = (
|
131 |
-
$index
|
132 |
|
133 |
if ( array_key_exists( $index, $requests ) ) {
|
134 |
unset( $requests[ $index ] );
|
@@ -149,16 +151,16 @@ class GDPR_Requests {
|
|
149 |
* @return bool Whether the request was confirmed or not.
|
150 |
*/
|
151 |
protected function confirm_request( $key ) {
|
152 |
-
$key
|
153 |
-
$requests = (
|
154 |
|
155 |
if ( empty( $requests ) || ! isset( $requests[ $key ] ) ) {
|
156 |
return false;
|
157 |
}
|
158 |
|
159 |
$requests[ $key ]['confirmed'] = true;
|
160 |
-
$type
|
161 |
-
$email
|
162 |
|
163 |
$user = get_user_by( 'email', $email );
|
164 |
|
@@ -166,8 +168,19 @@ class GDPR_Requests {
|
|
166 |
$meta_key = self::$plugin_name . "_{$type}_key";
|
167 |
update_option( 'gdpr_requests', $requests );
|
168 |
delete_user_meta( $user->ID, $meta_key );
|
169 |
-
|
170 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
171 |
}
|
172 |
}
|
173 |
|
@@ -182,8 +195,8 @@ class GDPR_Requests {
|
|
182 |
* @param string $key The request key.
|
183 |
*/
|
184 |
function clean_requests( $key ) {
|
185 |
-
$key
|
186 |
-
$requests = (
|
187 |
|
188 |
if ( array_key_exists( $key, $requests ) ) {
|
189 |
if ( ! $requests[ $key ]['confirmed'] ) {
|
@@ -201,7 +214,7 @@ class GDPR_Requests {
|
|
201 |
* @param string $meta_key The user meta key.
|
202 |
*/
|
203 |
function clean_user_request_key( $user_id, $meta_key ) {
|
204 |
-
$user_id
|
205 |
$meta_key = sanitize_text_field( $meta_key );
|
206 |
|
207 |
$meta = get_user_meta( $user_id, $meta_key, true );
|
@@ -225,23 +238,23 @@ class GDPR_Requests {
|
|
225 |
* @param string $confirmed If the request is confirmed or not.
|
226 |
*/
|
227 |
protected function add_to_requests( $email, $type, $data = null, $confirmed = false ) {
|
228 |
-
$requests = (
|
229 |
|
230 |
$email = sanitize_email( $email );
|
231 |
-
$type
|
232 |
-
$data
|
233 |
|
234 |
-
if ( ! in_array( $type, self::$allowed_types ) ) {
|
235 |
return false;
|
236 |
}
|
237 |
|
238 |
-
$key
|
239 |
$requests[ $key ] = array(
|
240 |
'email' => $email,
|
241 |
-
'date' => date(
|
242 |
'type' => $type,
|
243 |
'data' => $data,
|
244 |
-
'confirmed' => $confirmed
|
245 |
);
|
246 |
|
247 |
/**
|
@@ -251,10 +264,26 @@ class GDPR_Requests {
|
|
251 |
if ( $user instanceof WP_User ) {
|
252 |
$meta_key = self::$plugin_name . '_' . $type . '_key';
|
253 |
update_user_meta( $user->ID, $meta_key, $key );
|
254 |
-
|
255 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
}
|
257 |
-
wp_schedule_single_event(
|
|
|
|
|
|
|
|
|
|
|
258 |
}
|
259 |
|
260 |
update_option( 'gdpr_requests', $requests );
|
75 |
* @return array The allowed request types.
|
76 |
*/
|
77 |
protected function get_allowed_types() {
|
78 |
+
return self::$allowed_types;
|
79 |
+
}
|
80 |
+
|
81 |
+
/**
|
82 |
+
* Checks if the user has any content published on the site. Including comments.
|
83 |
+
* @since 1.0.0
|
84 |
+
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
85 |
+
* @static
|
86 |
+
* @param WP_User/int $user The user object or the user ID.
|
87 |
+
* @return bool Whether the user has content or not.
|
88 |
+
*/
|
89 |
static function user_has_content( $user ) {
|
90 |
if ( ! $user instanceof WP_User ) {
|
91 |
if ( ! is_int( $user ) ) {
|
96 |
|
97 |
$post_types = get_post_types( array( 'public' => true ) );
|
98 |
foreach ( $post_types as $pt ) {
|
99 |
+
$post_count = count_user_posts( $user->ID, $pt );
|
100 |
if ( $post_count > 0 ) {
|
101 |
return true;
|
102 |
}
|
103 |
}
|
104 |
|
105 |
+
$comments = get_comments(
|
106 |
+
array(
|
107 |
+
'author_email' => $user->user_email,
|
108 |
+
'include_unapproved' => true,
|
109 |
+
'number' => 1,
|
110 |
+
'count' => true,
|
111 |
+
)
|
112 |
+
);
|
113 |
|
114 |
if ( $comments ) {
|
115 |
return true;
|
129 |
* @return bool Whether the user was removed from the requests list.
|
130 |
*/
|
131 |
protected function remove_from_requests( $index ) {
|
132 |
+
$requests = (array) get_option( 'gdpr_requests', array() );
|
133 |
+
$index = sanitize_text_field( wp_unslash( $index ) );
|
134 |
|
135 |
if ( array_key_exists( $index, $requests ) ) {
|
136 |
unset( $requests[ $index ] );
|
151 |
* @return bool Whether the request was confirmed or not.
|
152 |
*/
|
153 |
protected function confirm_request( $key ) {
|
154 |
+
$key = sanitize_text_field( wp_unslash( $key ) );
|
155 |
+
$requests = (array) get_option( 'gdpr_requests', array() );
|
156 |
|
157 |
if ( empty( $requests ) || ! isset( $requests[ $key ] ) ) {
|
158 |
return false;
|
159 |
}
|
160 |
|
161 |
$requests[ $key ]['confirmed'] = true;
|
162 |
+
$type = $requests[ $key ]['type'];
|
163 |
+
$email = $requests[ $key ]['email'];
|
164 |
|
165 |
$user = get_user_by( 'email', $email );
|
166 |
|
168 |
$meta_key = self::$plugin_name . "_{$type}_key";
|
169 |
update_option( 'gdpr_requests', $requests );
|
170 |
delete_user_meta( $user->ID, $meta_key );
|
171 |
+
$time = wp_next_scheduled(
|
172 |
+
'clean_gdpr_user_request_key', array(
|
173 |
+
'user_id' => $user->ID,
|
174 |
+
'meta_key' => $meta_key,
|
175 |
+
)
|
176 |
+
);
|
177 |
+
if ( $time ) {
|
178 |
+
wp_unschedule_event(
|
179 |
+
$time, 'clean_gdpr_user_request_key', array(
|
180 |
+
'user_id' => $user->ID,
|
181 |
+
'meta_key' => $meta_key,
|
182 |
+
)
|
183 |
+
);
|
184 |
}
|
185 |
}
|
186 |
|
195 |
* @param string $key The request key.
|
196 |
*/
|
197 |
function clean_requests( $key ) {
|
198 |
+
$key = sanitize_text_field( $key );
|
199 |
+
$requests = (array) get_option( 'gdpr_requests', array() );
|
200 |
|
201 |
if ( array_key_exists( $key, $requests ) ) {
|
202 |
if ( ! $requests[ $key ]['confirmed'] ) {
|
214 |
* @param string $meta_key The user meta key.
|
215 |
*/
|
216 |
function clean_user_request_key( $user_id, $meta_key ) {
|
217 |
+
$user_id = (int) $user_id;
|
218 |
$meta_key = sanitize_text_field( $meta_key );
|
219 |
|
220 |
$meta = get_user_meta( $user_id, $meta_key, true );
|
238 |
* @param string $confirmed If the request is confirmed or not.
|
239 |
*/
|
240 |
protected function add_to_requests( $email, $type, $data = null, $confirmed = false ) {
|
241 |
+
$requests = (array) get_option( 'gdpr_requests', array() );
|
242 |
|
243 |
$email = sanitize_email( $email );
|
244 |
+
$type = sanitize_text_field( wp_unslash( $type ) );
|
245 |
+
$data = sanitize_textarea_field( wp_unslash( $data ) );
|
246 |
|
247 |
+
if ( ! in_array( $type, self::$allowed_types, true ) ) {
|
248 |
return false;
|
249 |
}
|
250 |
|
251 |
+
$key = wp_generate_password( 20, false );
|
252 |
$requests[ $key ] = array(
|
253 |
'email' => $email,
|
254 |
+
'date' => date( 'F j, Y' ),
|
255 |
'type' => $type,
|
256 |
'data' => $data,
|
257 |
+
'confirmed' => $confirmed,
|
258 |
);
|
259 |
|
260 |
/**
|
264 |
if ( $user instanceof WP_User ) {
|
265 |
$meta_key = self::$plugin_name . '_' . $type . '_key';
|
266 |
update_user_meta( $user->ID, $meta_key, $key );
|
267 |
+
$time = wp_next_scheduled(
|
268 |
+
'clean_gdpr_user_request_key', array(
|
269 |
+
'user_id' => $user->ID,
|
270 |
+
'meta_key' => $meta_key,
|
271 |
+
)
|
272 |
+
);
|
273 |
+
if ( $time ) {
|
274 |
+
wp_unschedule_event(
|
275 |
+
$time, 'clean_gdpr_user_request_key', array(
|
276 |
+
'user_id' => $user->ID,
|
277 |
+
'meta_key' => $meta_key,
|
278 |
+
)
|
279 |
+
);
|
280 |
}
|
281 |
+
wp_schedule_single_event(
|
282 |
+
time() + 2 * DAY_IN_SECONDS, 'clean_gdpr_user_request_key', array(
|
283 |
+
'user_id' => $user->ID,
|
284 |
+
'meta_key' => $meta_key,
|
285 |
+
)
|
286 |
+
);
|
287 |
}
|
288 |
|
289 |
update_option( 'gdpr_requests', $requests );
|
includes/class-gdpr.php
CHANGED
@@ -73,7 +73,7 @@ class GDPR {
|
|
73 |
$this->define_admin_hooks();
|
74 |
$this->define_public_hooks();
|
75 |
|
76 |
-
if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
|
77 |
return;
|
78 |
}
|
79 |
}
|
@@ -169,13 +169,13 @@ class GDPR {
|
|
169 |
*/
|
170 |
private function define_admin_hooks() {
|
171 |
|
172 |
-
$plugin_admin
|
173 |
-
$requests_admin
|
174 |
-
$telemetry
|
175 |
-
$requests
|
176 |
-
$plugin_emails
|
177 |
$woo_add_to_registration = get_option( 'gdpr_add_consent_checkboxes_registration', false );
|
178 |
-
$woo_add_to_checkout
|
179 |
|
180 |
add_filter( 'nonce_user_logged_out', array( $this, 'woo_nonce_fix' ), 100, 2 );
|
181 |
add_action( 'plugins_loaded', array( $this, 'set_locale' ) );
|
@@ -258,20 +258,20 @@ class GDPR {
|
|
258 |
$plugin_public = new GDPR_Public( $this->get_plugin_name(), $this->get_version() );
|
259 |
$requests_public = new GDPR_Requests_Public( $this->get_plugin_name(), $this->get_version() );
|
260 |
|
261 |
-
add_action( 'wp_enqueue_scripts',
|
262 |
-
add_action( 'wp_enqueue_scripts',
|
263 |
-
add_action( 'init',
|
264 |
-
add_action( 'wp_footer',
|
265 |
-
add_action( 'wp_footer',
|
266 |
-
add_action( 'wp_footer',
|
267 |
-
add_action( 'wp_footer',
|
268 |
-
add_action( 'wp_footer',
|
269 |
-
add_action( 'wp_ajax_disagree_with_terms',
|
270 |
-
add_action( 'wp_ajax_agree_with_terms',
|
271 |
-
add_action( 'wp_ajax_gdpr_update_privacy_preferences',
|
272 |
-
add_action( 'wp_ajax_nopriv_gdpr_update_privacy_preferences',
|
273 |
-
add_action( 'wp_ajax_agree_with_new_policies',
|
274 |
-
add_action( 'wp_ajax_nopriv_agree_with_new_policies',
|
275 |
|
276 |
add_action( 'wp', array( $requests_public, 'request_confirmed' ) );
|
277 |
add_action( 'wp_ajax_gdpr_send_request_email', array( $requests_public, 'send_request_email' ) );
|
@@ -286,7 +286,7 @@ class GDPR {
|
|
286 |
*/
|
287 |
public static function similar_in_array( $needle, $haystack ) {
|
288 |
foreach ( $haystack as $value ) {
|
289 |
-
if( stripos( strtolower($value)
|
290 |
return true;
|
291 |
}
|
292 |
}
|
@@ -305,13 +305,13 @@ class GDPR {
|
|
305 |
|
306 |
if ( isset( $_POST['user_consents'] ) ) {
|
307 |
|
308 |
-
$consents = array_map( 'sanitize_text_field', array_keys( $_POST['user_consents'] ) );
|
309 |
foreach ( $consents as $consent ) {
|
310 |
/* translators: Name of consent */
|
311 |
GDPR_Audit_Log::log( $user_id, sprintf( esc_html__( 'User gave explicit consent to %s', 'gdpr' ), $consent ) );
|
312 |
add_user_meta( $user_id, 'gdpr_consents', $consent );
|
313 |
}
|
314 |
-
setcookie(
|
315 |
}
|
316 |
}
|
317 |
|
@@ -322,27 +322,29 @@ class GDPR {
|
|
322 |
*/
|
323 |
public static function get_consent_checkboxes( $consent_key = false ) {
|
324 |
$consent_types = get_option( 'gdpr_consent_types', array() );
|
325 |
-
$sent_extras
|
326 |
-
$allowed_html
|
327 |
'a' => array(
|
328 |
-
'href'
|
329 |
-
'title'
|
330 |
'target' => true,
|
331 |
),
|
332 |
);
|
333 |
|
334 |
if ( $consent_key ) {
|
335 |
-
$consent_types = array_filter(
|
336 |
-
|
337 |
-
|
|
|
|
|
338 |
}
|
339 |
|
340 |
ob_start();
|
341 |
foreach ( $consent_types as $key => $consent ) {
|
342 |
$required = ( isset( $consent['policy-page'] ) && $consent['policy-page'] ) ? 'required' : '';
|
343 |
-
$checked
|
344 |
echo '<p>' .
|
345 |
-
'<input type="checkbox" name="user_consents[' . esc_attr( $key ) . ']" id="' . esc_attr( $key ) . '-consent" value="1" ' . $required . ' ' . $checked . '>' .
|
346 |
'<label for="' . esc_attr( $key ) . '-consent">' . wp_kses( $consent['registration'], $allowed_html ) . '</label>' .
|
347 |
'</p>';
|
348 |
}
|
@@ -356,7 +358,7 @@ class GDPR {
|
|
356 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
357 |
*/
|
358 |
public static function consent_checkboxes( $consent_key = false ) {
|
359 |
-
echo self::get_consent_checkboxes( $consent_key );
|
360 |
}
|
361 |
|
362 |
/**
|
@@ -414,10 +416,12 @@ class GDPR {
|
|
414 |
}
|
415 |
|
416 |
$usermeta = self::get_user_meta( $user->ID );
|
417 |
-
$comments = get_comments(
|
418 |
-
|
419 |
-
|
420 |
-
|
|
|
|
|
421 |
$user_consents = get_user_meta( $user->ID, 'gdpr_consents' );
|
422 |
$extra_content = apply_filters( 'gdpr_export_data_extra_tables', '', $email );
|
423 |
|
@@ -440,13 +444,13 @@ class GDPR {
|
|
440 |
if ( ! empty( $comments ) ) {
|
441 |
foreach ( $comments as $k => $v ) {
|
442 |
$comments_array[ $k ] = array(
|
443 |
-
'comment_author'
|
444 |
'comment_author_email' => $v->comment_author_email,
|
445 |
-
'comment_author_url'
|
446 |
-
'comment_author_IP'
|
447 |
-
'comment_date'
|
448 |
-
'comment_agent'
|
449 |
-
'comment_content'
|
450 |
);
|
451 |
}
|
452 |
}
|
@@ -478,8 +482,8 @@ class GDPR {
|
|
478 |
break;
|
479 |
|
480 |
default: // XML
|
481 |
-
$dom
|
482 |
-
$data_wrapper
|
483 |
$dom->appendChild( $data_wrapper );
|
484 |
$personal_info = $dom->createElement( 'Personal_Information' );
|
485 |
$data_wrapper->appendChild( $personal_info );
|
@@ -520,7 +524,7 @@ class GDPR {
|
|
520 |
$data_wrapper->appendChild( $meta_data );
|
521 |
|
522 |
foreach ( $usermeta as $k => $v ) {
|
523 |
-
$k
|
524 |
$key = $dom->createElement( htmlspecialchars( $k ) );
|
525 |
$meta_data->appendChild( $key );
|
526 |
foreach ( $v as $value ) {
|
@@ -534,7 +538,7 @@ class GDPR {
|
|
534 |
foreach ( $extra_content['content'] as $key => $obj ) {
|
535 |
$item = $extra->appendChild( $dom->createElement( 'item' ) );
|
536 |
foreach ( $obj as $k => $value ) {
|
537 |
-
$item->appendChild( $dom->createElement( $k, ( is_object( $value ) || is_array( $value ) ) ?
|
538 |
}
|
539 |
}
|
540 |
}
|
@@ -555,12 +559,12 @@ class GDPR {
|
|
555 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
556 |
*/
|
557 |
function export_data() {
|
558 |
-
if ( ! isset( $_POST['nonce'], $_POST['email'], $_POST['type'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'gdpr-export-data' ) ) {
|
559 |
wp_send_json_error();
|
560 |
}
|
561 |
|
562 |
-
$type = sanitize_text_field( wp_unslash( $_POST['type'] ) );
|
563 |
-
$email = sanitize_email( $_POST['email'] );
|
564 |
$user = get_user_by( 'email', $email );
|
565 |
|
566 |
if ( ! $user instanceof WP_User ) {
|
@@ -585,16 +589,16 @@ class GDPR {
|
|
585 |
*/
|
586 |
public static function save_consent( $user_id, $consent ) {
|
587 |
$registered_consent = get_option( 'gdpr_consent_types', array() );
|
588 |
-
$consent_ids
|
589 |
-
$user
|
590 |
-
$consent
|
591 |
|
592 |
if ( $user ) {
|
593 |
$user_consent = get_user_meta( $user_id, 'gdpr_consents' );
|
594 |
-
if ( in_array( $consent, $consent_ids ) && ! in_array( $consent, $user_consent ) ) {
|
595 |
add_user_meta( $user_id, 'gdpr_consents', $consent );
|
596 |
$user_consent[] = $consent;
|
597 |
-
setcookie(
|
598 |
return true;
|
599 |
}
|
600 |
}
|
@@ -617,11 +621,11 @@ class GDPR {
|
|
617 |
$user_consent = get_user_meta( $user_id, 'gdpr_consents' );
|
618 |
|
619 |
$consent = sanitize_text_field( wp_unslash( $consent ) );
|
620 |
-
$key
|
621 |
if ( false !== $key ) {
|
622 |
delete_user_meta( $user_id, 'gdpr_consents', $consent );
|
623 |
unset( $user_consent[ $key ] );
|
624 |
-
setcookie(
|
625 |
return true;
|
626 |
}
|
627 |
}
|
73 |
$this->define_admin_hooks();
|
74 |
$this->define_public_hooks();
|
75 |
|
76 |
+
if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) or ( defined( 'DOING_CRON' ) && DOING_CRON ) or ( defined( 'DOING_AJAX' ) && DOING_AJAX ) or ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) ) {
|
77 |
return;
|
78 |
}
|
79 |
}
|
169 |
*/
|
170 |
private function define_admin_hooks() {
|
171 |
|
172 |
+
$plugin_admin = new GDPR_Admin( $this->get_plugin_name(), $this->get_version() );
|
173 |
+
$requests_admin = new GDPR_Requests_Admin( $this->get_plugin_name(), $this->get_version() );
|
174 |
+
$telemetry = new GDPR_Telemetry( $this->get_plugin_name(), $this->get_version() );
|
175 |
+
$requests = new GDPR_Requests( $this->get_plugin_name(), $this->get_version() );
|
176 |
+
$plugin_emails = new GDPR_Email();
|
177 |
$woo_add_to_registration = get_option( 'gdpr_add_consent_checkboxes_registration', false );
|
178 |
+
$woo_add_to_checkout = get_option( 'gdpr_add_consent_checkboxes_checkout', false );
|
179 |
|
180 |
add_filter( 'nonce_user_logged_out', array( $this, 'woo_nonce_fix' ), 100, 2 );
|
181 |
add_action( 'plugins_loaded', array( $this, 'set_locale' ) );
|
258 |
$plugin_public = new GDPR_Public( $this->get_plugin_name(), $this->get_version() );
|
259 |
$requests_public = new GDPR_Requests_Public( $this->get_plugin_name(), $this->get_version() );
|
260 |
|
261 |
+
add_action( 'wp_enqueue_scripts', array( $plugin_public, 'enqueue_styles' ) );
|
262 |
+
add_action( 'wp_enqueue_scripts', array( $plugin_public, 'enqueue_scripts' ) );
|
263 |
+
add_action( 'init', array( $plugin_public, 'set_plugin_cookies' ) );
|
264 |
+
add_action( 'wp_footer', array( $plugin_public, 'overlay' ) );
|
265 |
+
add_action( 'wp_footer', array( $plugin_public, 'privacy_bar' ) );
|
266 |
+
add_action( 'wp_footer', array( $plugin_public, 'is_consent_needed' ) );
|
267 |
+
add_action( 'wp_footer', array( $plugin_public, 'privacy_preferences_modal' ) );
|
268 |
+
add_action( 'wp_footer', array( $plugin_public, 'confirmation_screens' ) );
|
269 |
+
add_action( 'wp_ajax_disagree_with_terms', array( $plugin_public, 'logout' ) );
|
270 |
+
add_action( 'wp_ajax_agree_with_terms', array( $plugin_public, 'agree_with_terms' ) );
|
271 |
+
add_action( 'wp_ajax_gdpr_update_privacy_preferences', array( $plugin_public, 'update_privacy_preferences' ) );
|
272 |
+
add_action( 'wp_ajax_nopriv_gdpr_update_privacy_preferences', array( $plugin_public, 'update_privacy_preferences' ) );
|
273 |
+
add_action( 'wp_ajax_agree_with_new_policies', array( $plugin_public, 'agree_with_new_policies' ) );
|
274 |
+
add_action( 'wp_ajax_nopriv_agree_with_new_policies', array( $plugin_public, 'agree_with_new_policies' ) );
|
275 |
|
276 |
add_action( 'wp', array( $requests_public, 'request_confirmed' ) );
|
277 |
add_action( 'wp_ajax_gdpr_send_request_email', array( $requests_public, 'send_request_email' ) );
|
286 |
*/
|
287 |
public static function similar_in_array( $needle, $haystack ) {
|
288 |
foreach ( $haystack as $value ) {
|
289 |
+
if ( stripos( strtolower( $value ), strtolower( $needle ) ) !== false ) {
|
290 |
return true;
|
291 |
}
|
292 |
}
|
305 |
|
306 |
if ( isset( $_POST['user_consents'] ) ) {
|
307 |
|
308 |
+
$consents = array_map( 'sanitize_text_field', array_keys( sanitize_text_field( wp_unslash( $_POST['user_consents'] ) ) ) ); // WPCS: Input var ok, CSRF ok.
|
309 |
foreach ( $consents as $consent ) {
|
310 |
/* translators: Name of consent */
|
311 |
GDPR_Audit_Log::log( $user_id, sprintf( esc_html__( 'User gave explicit consent to %s', 'gdpr' ), $consent ) );
|
312 |
add_user_meta( $user_id, 'gdpr_consents', $consent );
|
313 |
}
|
314 |
+
setcookie( 'gdpr[consent_types]', json_encode( $consents ), time() + YEAR_IN_SECONDS, '/' );
|
315 |
}
|
316 |
}
|
317 |
|
322 |
*/
|
323 |
public static function get_consent_checkboxes( $consent_key = false ) {
|
324 |
$consent_types = get_option( 'gdpr_consent_types', array() );
|
325 |
+
$sent_extras = ( isset( $_POST['user_consents'] ) ) ? sanitize_text_field( wp_unslash( $_POST['user_consents'] ) ) : array(); // WPCS: Input var ok, CSRF ok.
|
326 |
+
$allowed_html = array(
|
327 |
'a' => array(
|
328 |
+
'href' => true,
|
329 |
+
'title' => true,
|
330 |
'target' => true,
|
331 |
),
|
332 |
);
|
333 |
|
334 |
if ( $consent_key ) {
|
335 |
+
$consent_types = array_filter(
|
336 |
+
$consent_types, function( $key ) use ( $consent_key ) {
|
337 |
+
return $key === $consent_key;
|
338 |
+
}, ARRAY_FILTER_USE_KEY
|
339 |
+
);
|
340 |
}
|
341 |
|
342 |
ob_start();
|
343 |
foreach ( $consent_types as $key => $consent ) {
|
344 |
$required = ( isset( $consent['policy-page'] ) && $consent['policy-page'] ) ? 'required' : '';
|
345 |
+
$checked = ( isset( $sent_extras[ $key ] ) ) ? checked( $sent_extras[ $key ], 1, false ) : '';
|
346 |
echo '<p>' .
|
347 |
+
'<input type="checkbox" name="user_consents[' . esc_attr( $key ) . ']" id="' . esc_attr( $key ) . '-consent" value="1" ' . esc_html( $required ) . ' ' . esc_html( $checked ) . '>' .
|
348 |
'<label for="' . esc_attr( $key ) . '-consent">' . wp_kses( $consent['registration'], $allowed_html ) . '</label>' .
|
349 |
'</p>';
|
350 |
}
|
358 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
359 |
*/
|
360 |
public static function consent_checkboxes( $consent_key = false ) {
|
361 |
+
echo self::get_consent_checkboxes( $consent_key ); // WPCS: XSS ok.
|
362 |
}
|
363 |
|
364 |
/**
|
416 |
}
|
417 |
|
418 |
$usermeta = self::get_user_meta( $user->ID );
|
419 |
+
$comments = get_comments(
|
420 |
+
array(
|
421 |
+
'author_email' => $user->user_email,
|
422 |
+
'include_unapproved' => true,
|
423 |
+
)
|
424 |
+
);
|
425 |
$user_consents = get_user_meta( $user->ID, 'gdpr_consents' );
|
426 |
$extra_content = apply_filters( 'gdpr_export_data_extra_tables', '', $email );
|
427 |
|
444 |
if ( ! empty( $comments ) ) {
|
445 |
foreach ( $comments as $k => $v ) {
|
446 |
$comments_array[ $k ] = array(
|
447 |
+
'comment_author' => $v->comment_author,
|
448 |
'comment_author_email' => $v->comment_author_email,
|
449 |
+
'comment_author_url' => $v->comment_author_url,
|
450 |
+
'comment_author_IP' => $v->comment_author_IP,
|
451 |
+
'comment_date' => $v->comment_date,
|
452 |
+
'comment_agent' => $v->comment_agent,
|
453 |
+
'comment_content' => $v->comment_content,
|
454 |
);
|
455 |
}
|
456 |
}
|
482 |
break;
|
483 |
|
484 |
default: // XML
|
485 |
+
$dom = new DomDocument( '1.0', 'ISO-8859-1' );
|
486 |
+
$data_wrapper = $dom->createElement( 'Data' );
|
487 |
$dom->appendChild( $data_wrapper );
|
488 |
$personal_info = $dom->createElement( 'Personal_Information' );
|
489 |
$data_wrapper->appendChild( $personal_info );
|
524 |
$data_wrapper->appendChild( $meta_data );
|
525 |
|
526 |
foreach ( $usermeta as $k => $v ) {
|
527 |
+
$k = is_numeric( substr( $k, 0, 1 ) ) ? '_' . $k : $k;
|
528 |
$key = $dom->createElement( htmlspecialchars( $k ) );
|
529 |
$meta_data->appendChild( $key );
|
530 |
foreach ( $v as $value ) {
|
538 |
foreach ( $extra_content['content'] as $key => $obj ) {
|
539 |
$item = $extra->appendChild( $dom->createElement( 'item' ) );
|
540 |
foreach ( $obj as $k => $value ) {
|
541 |
+
$item->appendChild( $dom->createElement( $k, ( is_object( $value ) || is_array( $value ) ) ? json_encode( (array) $value ) : $value ) );
|
542 |
}
|
543 |
}
|
544 |
}
|
559 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
560 |
*/
|
561 |
function export_data() {
|
562 |
+
if ( ! isset( $_POST['nonce'], $_POST['email'], $_POST['type'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['nonce'] ) ), 'gdpr-export-data' ) ) { // WPCS: Input var ok.
|
563 |
wp_send_json_error();
|
564 |
}
|
565 |
|
566 |
+
$type = sanitize_text_field( wp_unslash( $_POST['type'] ) ); // WPCS: Input var ok.
|
567 |
+
$email = sanitize_email( wp_unslash( $_POST['email'] ) ); // WPCS: Input var ok.
|
568 |
$user = get_user_by( 'email', $email );
|
569 |
|
570 |
if ( ! $user instanceof WP_User ) {
|
589 |
*/
|
590 |
public static function save_consent( $user_id, $consent ) {
|
591 |
$registered_consent = get_option( 'gdpr_consent_types', array() );
|
592 |
+
$consent_ids = array_keys( $registered_consent );
|
593 |
+
$user = get_user_by( 'ID', $user_id );
|
594 |
+
$consent = sanitize_text_field( wp_unslash( $consent ) );
|
595 |
|
596 |
if ( $user ) {
|
597 |
$user_consent = get_user_meta( $user_id, 'gdpr_consents' );
|
598 |
+
if ( in_array( $consent, $consent_ids, true ) && ! in_array( $consent, $user_consent, true ) ) {
|
599 |
add_user_meta( $user_id, 'gdpr_consents', $consent );
|
600 |
$user_consent[] = $consent;
|
601 |
+
setcookie( 'gdpr[consent_types]', json_encode( $user_consent ), time() + YEAR_IN_SECONDS, '/' );
|
602 |
return true;
|
603 |
}
|
604 |
}
|
621 |
$user_consent = get_user_meta( $user_id, 'gdpr_consents' );
|
622 |
|
623 |
$consent = sanitize_text_field( wp_unslash( $consent ) );
|
624 |
+
$key = array_search( $consent, $user_consent, true );
|
625 |
if ( false !== $key ) {
|
626 |
delete_user_meta( $user_id, 'gdpr_consents', $consent );
|
627 |
unset( $user_consent[ $key ] );
|
628 |
+
setcookie( 'gdpr[consent_types]', json_encode( $user_consent ), time() + YEAR_IN_SECONDS, '/' );
|
629 |
return true;
|
630 |
}
|
631 |
}
|
includes/helper-functions.php
CHANGED
@@ -22,9 +22,11 @@ function gdpr_preferences( $text ) {
|
|
22 |
}
|
23 |
|
24 |
function gdpr_preferences_shortcode( $atts ) {
|
25 |
-
$atts = shortcode_atts(
|
26 |
-
|
27 |
-
|
|
|
|
|
28 |
|
29 |
ob_start();
|
30 |
gdpr_preferences( $atts['text'] );
|
@@ -37,10 +39,11 @@ add_shortcode( 'gdpr_preferences', 'gdpr_preferences_shortcode' );
|
|
37 |
* Load the request forms.
|
38 |
* @since 1.0.0
|
39 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
40 |
-
* @param string $type
|
|
|
41 |
*/
|
42 |
-
function gdpr_request_form( $type ) {
|
43 |
-
echo GDPR_Requests_Public::request_form( $type );
|
44 |
}
|
45 |
|
46 |
/**
|
@@ -50,19 +53,24 @@ function gdpr_request_form( $type ) {
|
|
50 |
* @param string $atts Shortcode attributes.
|
51 |
*/
|
52 |
function gdpr_request_form_shortcode( $atts ) {
|
53 |
-
$atts = shortcode_atts(
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
|
|
|
|
|
|
58 |
}
|
59 |
|
60 |
add_shortcode( 'gdpr_request_form', 'gdpr_request_form_shortcode' );
|
61 |
|
62 |
function gdpr_get_consent_checkboxes( $atts ) {
|
63 |
-
$atts = shortcode_atts(
|
64 |
-
|
65 |
-
|
|
|
|
|
66 |
|
67 |
return GDPR::get_consent_checkboxes( $atts['id'] );
|
68 |
}
|
@@ -76,10 +84,10 @@ function gdpr_get_consent_checkboxes( $atts ) {
|
|
76 |
*/
|
77 |
function is_allowed_cookie( $cookie_name ) {
|
78 |
if ( isset( $_COOKIE['gdpr']['allowed_cookies'] ) ) {
|
79 |
-
$allowed_cookies = json_decode( wp_unslash( $_COOKIE['gdpr']['allowed_cookies'] ), true );
|
80 |
-
$name
|
81 |
-
$result
|
82 |
-
if ( in_array( $cookie_name, $allowed_cookies ) || ! empty( $result ) ) {
|
83 |
return true;
|
84 |
}
|
85 |
}
|
@@ -93,7 +101,7 @@ function gdpr_deprecated_function( $function, $version, $replacement = null ) {
|
|
93 |
$log_string = "The {$function} function is deprecated since version {$version}.";
|
94 |
$log_string .= $replacement ? " Replace with {$replacement}." : '';
|
95 |
} else {
|
96 |
-
_deprecated_function( $function, $version, $replacement );
|
97 |
}
|
98 |
}
|
99 |
|
@@ -112,14 +120,14 @@ function have_consent( $consent ) {
|
|
112 |
function has_consent( $consent ) {
|
113 |
|
114 |
if ( is_user_logged_in() ) {
|
115 |
-
$user
|
116 |
$consents = (array) get_user_meta( $user->ID, 'gdpr_consents' );
|
117 |
-
}
|
118 |
-
$consents = array_map( 'sanitize_text_field', (array) json_decode( wp_unslash( $_COOKIE['gdpr']['consent_types'] ) ) );
|
119 |
}
|
120 |
|
121 |
if ( isset( $consents ) && ! empty( $consents ) ) {
|
122 |
-
if ( in_array( $consent, $consents ) ) {
|
123 |
return true;
|
124 |
}
|
125 |
}
|
@@ -128,5 +136,5 @@ function has_consent( $consent ) {
|
|
128 |
}
|
129 |
|
130 |
function is_dnt() {
|
131 |
-
return ( isset( $_SERVER['HTTP_DNT'] ) && $_SERVER['HTTP_DNT']
|
132 |
}
|
22 |
}
|
23 |
|
24 |
function gdpr_preferences_shortcode( $atts ) {
|
25 |
+
$atts = shortcode_atts(
|
26 |
+
array(
|
27 |
+
'text' => esc_html__( 'Privacy Preferences', 'gdpr' ),
|
28 |
+
), $atts, 'gdpr_preferences'
|
29 |
+
);
|
30 |
|
31 |
ob_start();
|
32 |
gdpr_preferences( $atts['text'] );
|
39 |
* Load the request forms.
|
40 |
* @since 1.0.0
|
41 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
42 |
+
* @param string $type The type of request.
|
43 |
+
* @param string $button_text The submit button text.
|
44 |
*/
|
45 |
+
function gdpr_request_form( $type, $button_text = '' ) {
|
46 |
+
echo GDPR_Requests_Public::request_form( $type, $button_text ); // WPCS: XSS ok.
|
47 |
}
|
48 |
|
49 |
/**
|
53 |
* @param string $atts Shortcode attributes.
|
54 |
*/
|
55 |
function gdpr_request_form_shortcode( $atts ) {
|
56 |
+
$atts = shortcode_atts(
|
57 |
+
array(
|
58 |
+
'type' => '',
|
59 |
+
'text' => '',
|
60 |
+
), $atts, 'gdpr_request_form'
|
61 |
+
);
|
62 |
+
|
63 |
+
return GDPR_Requests_Public::request_form( $atts['type'], $atts['text'] );
|
64 |
}
|
65 |
|
66 |
add_shortcode( 'gdpr_request_form', 'gdpr_request_form_shortcode' );
|
67 |
|
68 |
function gdpr_get_consent_checkboxes( $atts ) {
|
69 |
+
$atts = shortcode_atts(
|
70 |
+
array(
|
71 |
+
'id' => false,
|
72 |
+
), $atts, 'gdpr_consent_checkboxes'
|
73 |
+
);
|
74 |
|
75 |
return GDPR::get_consent_checkboxes( $atts['id'] );
|
76 |
}
|
84 |
*/
|
85 |
function is_allowed_cookie( $cookie_name ) {
|
86 |
if ( isset( $_COOKIE['gdpr']['allowed_cookies'] ) ) {
|
87 |
+
$allowed_cookies = array_map( 'sanitize_text_field', json_decode( wp_unslash( $_COOKIE['gdpr']['allowed_cookies'] ), true ) ); // WPCS: Input var ok, sanitization ok.
|
88 |
+
$name = preg_quote( $cookie_name, '~' );
|
89 |
+
$result = preg_grep( '~' . $name . '~', $allowed_cookies );
|
90 |
+
if ( in_array( $cookie_name, $allowed_cookies, true ) || ! empty( $result ) ) {
|
91 |
return true;
|
92 |
}
|
93 |
}
|
101 |
$log_string = "The {$function} function is deprecated since version {$version}.";
|
102 |
$log_string .= $replacement ? " Replace with {$replacement}." : '';
|
103 |
} else {
|
104 |
+
_deprecated_function( esc_html( $function ), esc_html( $version ), esc_html( $replacement ) );
|
105 |
}
|
106 |
}
|
107 |
|
120 |
function has_consent( $consent ) {
|
121 |
|
122 |
if ( is_user_logged_in() ) {
|
123 |
+
$user = wp_get_current_user();
|
124 |
$consents = (array) get_user_meta( $user->ID, 'gdpr_consents' );
|
125 |
+
} elseif ( isset( $_COOKIE['gdpr']['consent_types'] ) && ! empty( $_COOKIE['gdpr']['consent_types'] ) ) { // WPCS: Input var ok.
|
126 |
+
$consents = array_map( 'sanitize_text_field', (array) json_decode( wp_unslash( $_COOKIE['gdpr']['consent_types'] ) ) ); // WPCS: Input var ok, sanitization ok.
|
127 |
}
|
128 |
|
129 |
if ( isset( $consents ) && ! empty( $consents ) ) {
|
130 |
+
if ( in_array( $consent, $consents, true ) ) {
|
131 |
return true;
|
132 |
}
|
133 |
}
|
136 |
}
|
137 |
|
138 |
function is_dnt() {
|
139 |
+
return ( isset( $_SERVER['HTTP_DNT'] ) && '1' === $_SERVER['HTTP_DNT'] ); // WPCS: Input var ok.
|
140 |
}
|
languages/gdpr.pot
CHANGED
@@ -13,23 +13,23 @@ msgstr ""
|
|
13 |
"X-Poedit-SourceCharset: UTF-8\n"
|
14 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
15 |
|
16 |
-
#: admin/class-gdpr-admin.php:100, admin/class-gdpr-admin.php:
|
17 |
msgid "GDPR"
|
18 |
msgstr ""
|
19 |
|
20 |
-
#: admin/class-gdpr-admin.php:
|
21 |
msgid "Requests"
|
22 |
msgstr ""
|
23 |
|
24 |
-
#: admin/class-gdpr-admin.php:
|
25 |
msgid "Tools"
|
26 |
msgstr ""
|
27 |
|
28 |
-
#: admin/class-gdpr-admin.php:
|
29 |
msgid "Settings"
|
30 |
msgstr ""
|
31 |
|
32 |
-
#: admin/class-gdpr-admin.php:296, includes/class-gdpr-help.php:
|
33 |
msgid "Rectify Data"
|
34 |
msgstr ""
|
35 |
|
@@ -37,208 +37,208 @@ msgstr ""
|
|
37 |
msgid "Complaint"
|
38 |
msgstr ""
|
39 |
|
40 |
-
#: admin/class-gdpr-admin.php:304, includes/class-gdpr-help.php:
|
41 |
msgid "Erasure"
|
42 |
msgstr ""
|
43 |
|
44 |
-
#: admin/class-gdpr-admin.php:321, includes/class-gdpr-help.php:
|
45 |
msgid "Access Data"
|
46 |
msgstr ""
|
47 |
|
48 |
-
#: admin/class-gdpr-admin.php:322, includes/class-gdpr-help.php:
|
49 |
msgid "Data Breach"
|
50 |
msgstr ""
|
51 |
|
52 |
-
#: admin/class-gdpr-admin.php:323, includes/class-gdpr-help.php:
|
53 |
msgid "Audit Log"
|
54 |
msgstr ""
|
55 |
|
56 |
-
#: admin/class-gdpr-admin.php:
|
57 |
msgid "Consent Given"
|
58 |
msgstr ""
|
59 |
|
60 |
-
#: admin/class-gdpr-admin.php:
|
61 |
msgid "Consent ID"
|
62 |
msgstr ""
|
63 |
|
64 |
-
#: admin/class-gdpr-admin.php:
|
65 |
msgid "Comments"
|
66 |
msgstr ""
|
67 |
|
68 |
-
#: admin/class-gdpr-admin.php:
|
69 |
msgid "Comment Field"
|
70 |
msgstr ""
|
71 |
|
72 |
-
#: admin/class-gdpr-admin.php:
|
73 |
msgid "Comment Data"
|
74 |
msgstr ""
|
75 |
|
76 |
-
#: admin/class-gdpr-admin.php:
|
77 |
msgid "Metadata"
|
78 |
msgstr ""
|
79 |
|
80 |
-
#: admin/class-gdpr-admin.php:
|
81 |
msgid "Name"
|
82 |
msgstr ""
|
83 |
|
84 |
-
#: admin/class-gdpr-admin.php:
|
85 |
msgid "Value"
|
86 |
msgstr ""
|
87 |
|
88 |
-
#: admin/class-gdpr-admin.php:
|
89 |
msgid "No logs found for this email."
|
90 |
msgstr ""
|
91 |
|
92 |
-
#: admin/class-gdpr-admin.php:
|
93 |
msgid "Review your settings"
|
94 |
msgstr ""
|
95 |
|
96 |
-
#: admin/class-gdpr-admin.php:
|
97 |
msgid "We have added a few new options which must be reviewed before continuing to use the plugin."
|
98 |
msgstr ""
|
99 |
|
100 |
-
#: admin/class-gdpr-admin.php:
|
101 |
msgid "For cookies, we have added a status which allows you to set them as ON, OFF or Required. For consents, we moved the policy selector into each consent. All policies can now be tracked through this."
|
102 |
msgstr ""
|
103 |
|
104 |
-
#: admin/class-gdpr-admin.php:
|
105 |
msgid "Please keep in mind the plugin might not work as intended until these settings are reviewed."
|
106 |
msgstr ""
|
107 |
|
108 |
-
#: admin/class-gdpr-admin.php:
|
109 |
msgid "Your %s page has been updated."
|
110 |
msgstr ""
|
111 |
|
112 |
-
#: admin/class-gdpr-admin.php:
|
113 |
msgid "In case this was not a small typo fix, you must ask users for explicit consent again."
|
114 |
msgstr ""
|
115 |
|
116 |
-
#: admin/class-gdpr-admin.php:
|
117 |
msgid "Ask for consent"
|
118 |
msgstr ""
|
119 |
|
120 |
-
#: admin/class-gdpr-admin.php:
|
121 |
msgid "Ignore"
|
122 |
msgstr ""
|
123 |
|
124 |
-
#: admin/class-gdpr-admin.php:
|
125 |
msgid "We could not verify the the security token. Please try again."
|
126 |
msgstr ""
|
127 |
|
128 |
-
#: admin/class-gdpr-admin.php:
|
129 |
msgid "One or more required fields are missing. Please try again."
|
130 |
msgstr ""
|
131 |
|
132 |
-
#: admin/class-gdpr-admin.php:
|
133 |
msgid "Data breach notification has been initialized. An email confirmation has been sent to the website controller."
|
134 |
msgstr ""
|
135 |
|
136 |
-
#: admin/class-gdpr-admin.php:
|
137 |
msgid "ERROR"
|
138 |
msgstr ""
|
139 |
|
140 |
-
#: admin/class-gdpr-admin.php:
|
141 |
msgid "is a required consent"
|
142 |
msgstr ""
|
143 |
|
144 |
#. translators: 1: The name of the policy that was updated.
|
145 |
-
#: admin/class-gdpr-admin.php:
|
146 |
msgid "%1$s has been updated. Removing the %1$s consent and requesting new consent."
|
147 |
msgstr ""
|
148 |
|
149 |
-
#: admin/class-gdpr-admin.php:
|
150 |
msgid "Consent Management"
|
151 |
msgstr ""
|
152 |
|
153 |
-
#: admin/class-gdpr-admin.php:
|
154 |
msgid "Profile Updated. These are the user consents after the save:"
|
155 |
msgstr ""
|
156 |
|
157 |
-
#: admin/class-gdpr-admin.php:
|
158 |
msgid "Consents"
|
159 |
msgstr ""
|
160 |
|
161 |
-
#: admin/class-gdpr-requests-admin.php:30, admin/class-gdpr-requests-admin.php:
|
162 |
msgid "We could not verify the user email or the security token. Please try again."
|
163 |
msgstr ""
|
164 |
|
165 |
-
#: admin/class-gdpr-requests-admin.php:37, admin/class-gdpr-requests-admin.php:
|
166 |
msgid "User not found."
|
167 |
msgstr ""
|
168 |
|
169 |
-
#: admin/class-gdpr-requests-admin.php:
|
170 |
msgid "User %s is the only admin of the site. It cannot be deleted."
|
171 |
msgstr ""
|
172 |
|
173 |
-
#: admin/class-gdpr-requests-admin.php:
|
174 |
msgid "User added to the deletion requests list by admin."
|
175 |
msgstr ""
|
176 |
|
177 |
-
#: admin/class-gdpr-requests-admin.php:
|
178 |
msgid "User %s was added to the deletion table."
|
179 |
msgstr ""
|
180 |
|
181 |
-
#: admin/class-gdpr-requests-admin.php:
|
182 |
msgid "User already placed a deletion request."
|
183 |
msgstr ""
|
184 |
|
185 |
-
#: admin/class-gdpr-requests-admin.php:
|
186 |
msgid "We could not verify the type of request you want to cancel."
|
187 |
msgstr ""
|
188 |
|
189 |
#. translators: The type of request
|
190 |
-
#: admin/class-gdpr-requests-admin.php:
|
191 |
msgid "Type of request '%s' is not an allowed type."
|
192 |
msgstr ""
|
193 |
|
194 |
#. translators: The type of request i.e 'delete'
|
195 |
-
#: admin/class-gdpr-requests-admin.php:
|
196 |
msgid "User was removed from the %s request list by admin."
|
197 |
msgstr ""
|
198 |
|
199 |
-
#: admin/class-gdpr-requests-admin.php:
|
200 |
msgid "User %s was removed from this request table."
|
201 |
msgstr ""
|
202 |
|
203 |
#. translators: User email
|
204 |
-
#: admin/class-gdpr-requests-admin.php:
|
205 |
msgid "User %s request was marked as resolved by admin."
|
206 |
msgstr ""
|
207 |
|
208 |
-
#: admin/class-gdpr-requests-admin.php:
|
209 |
msgid "Request was resolved. User %s has been notified."
|
210 |
msgstr ""
|
211 |
|
212 |
-
#: admin/class-gdpr-requests-admin.php:
|
213 |
msgid "User was removed from the site."
|
214 |
msgstr ""
|
215 |
|
216 |
-
#: admin/class-gdpr-requests-admin.php:
|
217 |
msgid "User %s was deleted from the site."
|
218 |
msgstr ""
|
219 |
|
220 |
-
#: admin/class-gdpr-requests-admin.php:
|
221 |
msgid "We could not verify the security token. Please try again."
|
222 |
msgstr ""
|
223 |
|
224 |
-
#: admin/class-gdpr-requests-admin.php:
|
225 |
msgid "Guest"
|
226 |
msgstr ""
|
227 |
|
228 |
-
#: admin/class-gdpr-requests-admin.php:
|
229 |
msgid "User comments were anonymized."
|
230 |
msgstr ""
|
231 |
|
232 |
-
#: admin/class-gdpr-requests-admin.php:
|
233 |
msgid "Essential data missing. Please try again."
|
234 |
msgstr ""
|
235 |
|
236 |
#. translators: 1: The post type, 2: The user the posts were reassigned to
|
237 |
-
#: admin/class-gdpr-requests-admin.php:
|
238 |
-
msgid "User %s were reassigned to %s."
|
239 |
msgstr ""
|
240 |
|
241 |
-
#: admin/class-gdpr-requests-admin.php:
|
242 |
msgid "Something went wrong. Please try again."
|
243 |
msgstr ""
|
244 |
|
@@ -258,100 +258,100 @@ msgstr ""
|
|
258 |
msgid "Search in destination"
|
259 |
msgstr ""
|
260 |
|
261 |
-
#: admin/class-gdpr-telemetry.php:
|
262 |
msgid "Delete all"
|
263 |
msgstr ""
|
264 |
|
265 |
-
#: admin/class-gdpr-telemetry.php:
|
266 |
msgid "Destination"
|
267 |
msgstr ""
|
268 |
|
269 |
-
#: admin/class-gdpr-telemetry.php:
|
270 |
msgid "File"
|
271 |
msgstr ""
|
272 |
|
273 |
-
#: admin/class-gdpr-telemetry.php:
|
274 |
msgid "Code"
|
275 |
msgstr ""
|
276 |
|
277 |
-
#: admin/class-gdpr-telemetry.php:
|
278 |
msgid "Time"
|
279 |
msgstr ""
|
280 |
|
281 |
-
#: admin/class-gdpr-telemetry.php:
|
282 |
msgid "Data"
|
283 |
msgstr ""
|
284 |
|
285 |
-
#: admin/class-gdpr-telemetry.php:
|
286 |
msgid "Show"
|
287 |
msgstr ""
|
288 |
|
289 |
-
#: includes/class-gdpr-email.php:
|
290 |
msgid "Data breach notification sent to user."
|
291 |
msgstr ""
|
292 |
|
293 |
#. translators: email content
|
294 |
-
#: includes/class-gdpr-email.php:
|
295 |
msgid "Email content: %s"
|
296 |
msgstr ""
|
297 |
|
298 |
#. translators: nature of the data breach
|
299 |
-
#: includes/class-gdpr-email.php:
|
300 |
msgid "Nature of data breach: %s"
|
301 |
msgstr ""
|
302 |
|
303 |
#. translators: data protection officer contact information
|
304 |
-
#: includes/class-gdpr-email.php:
|
305 |
msgid "Data protection officer contact: %s"
|
306 |
msgstr ""
|
307 |
|
308 |
#. translators: likely consequences
|
309 |
-
#: includes/class-gdpr-email.php:
|
310 |
msgid "Likely consequences of breach: %s"
|
311 |
msgstr ""
|
312 |
|
313 |
#. translators: measures taken
|
314 |
-
#: includes/class-gdpr-email.php:
|
315 |
msgid "Measures taken or proposed to be taken: %s"
|
316 |
msgstr ""
|
317 |
|
318 |
-
#: includes/class-gdpr-email.php:
|
319 |
msgid "GDPR Notification: There is a new request waiting to be reviewed."
|
320 |
msgstr ""
|
321 |
|
322 |
-
#: includes/class-gdpr-email.php:
|
323 |
msgid "Someone requested to close your account."
|
324 |
msgstr ""
|
325 |
|
326 |
-
#: includes/class-gdpr-email.php:
|
327 |
msgid "Your account has been closed."
|
328 |
msgstr ""
|
329 |
|
330 |
-
#: includes/class-gdpr-email.php:
|
331 |
msgid "Someone requested that we rectify data of your account."
|
332 |
msgstr ""
|
333 |
|
334 |
-
#: includes/class-gdpr-email.php:
|
335 |
msgid "Your request has been completed."
|
336 |
msgstr ""
|
337 |
|
338 |
-
#: includes/class-gdpr-email.php:
|
339 |
msgid "Someone made complaint on behalf of your account."
|
340 |
msgstr ""
|
341 |
|
342 |
-
#: includes/class-gdpr-email.php:
|
343 |
msgid "Someone requested to download your data."
|
344 |
msgstr ""
|
345 |
|
346 |
-
#: includes/class-gdpr-email.php:
|
347 |
msgid "Someone requested to send a data breach notification."
|
348 |
msgstr ""
|
349 |
|
350 |
-
#: includes/class-gdpr-email.php:
|
351 |
msgid "Data Breach Notification."
|
352 |
msgstr ""
|
353 |
|
354 |
-
#: includes/class-gdpr-help.php:30, includes/class-gdpr-help.php:
|
355 |
msgid "Overview"
|
356 |
msgstr ""
|
357 |
|
@@ -359,163 +359,163 @@ msgstr ""
|
|
359 |
msgid "This page has multiple request tables. Users can request multiple things like getting deleted from the site or having their data rectified. All requests will come to these tables."
|
360 |
msgstr ""
|
361 |
|
362 |
-
#: includes/class-gdpr-help.php:
|
363 |
msgid "Users may request to have their data rectified. They can place a request somewhere on your site and those requests will show up here."
|
364 |
msgstr ""
|
365 |
|
366 |
-
#: includes/class-gdpr-help.php:
|
367 |
msgid "When you complete the request, mark it as resolved and the requester will get a notification email confirming that their request was resolved."
|
368 |
msgstr ""
|
369 |
|
370 |
-
#: includes/class-gdpr-help.php:
|
371 |
msgid "Complaints"
|
372 |
msgstr ""
|
373 |
|
374 |
-
#: includes/class-gdpr-help.php:
|
375 |
msgid "Users may complain about something that happened. They can place a complaint somewhere on your site and those complaints will show up here."
|
376 |
msgstr ""
|
377 |
|
378 |
-
#: includes/class-gdpr-help.php:
|
379 |
msgid "When you resolve the problem, mark it as resolved and the requester will get a notification email confirming that his complaint was resolved."
|
380 |
msgstr ""
|
381 |
|
382 |
-
#: includes/class-gdpr-help.php:
|
383 |
msgid "Users may request to be deleted from the site. If they don't have any content published on the site (including comments) they will be removed from the site automatically. Otherwise, they will show up at this review table where you can reassign or delete their published content and anonymize his comments."
|
384 |
msgstr ""
|
385 |
|
386 |
-
#: includes/class-gdpr-help.php:
|
387 |
msgid "User may request their data to be deleted. The controller has, according to GDPR, 30 days to fulfill the request. On some occasions, you can ask to extend this time limit. When the request has been resolved the user will receive a notification that their account has been closed."
|
388 |
msgstr ""
|
389 |
|
390 |
-
#: includes/class-gdpr-help.php:
|
391 |
msgid "Erasures"
|
392 |
msgstr ""
|
393 |
|
394 |
-
#: includes/class-gdpr-help.php:
|
395 |
msgid "We added tools to make your life easier when you need to perform administrative tasks like notify all your users of a possible data breach."
|
396 |
msgstr ""
|
397 |
|
398 |
-
#: includes/class-gdpr-help.php:
|
399 |
msgid "Use this page to look for all known data about a user. You can look it up using the user's email address and are able to download it in XML and JSON formats."
|
400 |
msgstr ""
|
401 |
|
402 |
-
#: includes/class-gdpr-help.php:
|
403 |
msgid "Data Breach Notification"
|
404 |
msgstr ""
|
405 |
|
406 |
-
#: includes/class-gdpr-help.php:
|
407 |
msgid "Use this carefully."
|
408 |
msgstr ""
|
409 |
|
410 |
-
#: includes/class-gdpr-help.php:
|
411 |
msgid "This will send a mass email to all your users with the information provided on these fields. This email is throttled based on the hourly limit set on the plugin settings page. "
|
412 |
msgstr ""
|
413 |
|
414 |
-
#: includes/class-gdpr-help.php:
|
415 |
msgid "Only use this tool if you believe your site has been compromised and that your user's personal data might have been leaked."
|
416 |
msgstr ""
|
417 |
|
418 |
-
#: includes/class-gdpr-help.php:
|
419 |
msgid "We do not log any of the user's personal data."
|
420 |
msgstr ""
|
421 |
|
422 |
-
#: includes/class-gdpr-help.php:
|
423 |
msgid "All logs are encrypted before saving to the database. An encrypted log file is created whenever a user gets removed from the site."
|
424 |
msgstr ""
|
425 |
|
426 |
-
#: includes/class-gdpr-help.php:
|
427 |
msgid "This tool will keep a record of some actions such as changing consent preferences, placing a request, data breach notifications received, etc…"
|
428 |
msgstr ""
|
429 |
|
430 |
-
#: includes/class-gdpr-help.php:
|
431 |
msgid "The only way to read the logs is to search for the user email. If the data subject is not a registered site user anymore, you need to ask for the 6 digit token that was provided during deletion. That will allow this tool to look for a log file with his information."
|
432 |
msgstr ""
|
433 |
|
434 |
-
#: includes/class-gdpr-help.php:
|
435 |
msgid "General Settings"
|
436 |
msgstr ""
|
437 |
|
438 |
-
#: includes/class-gdpr-help.php:
|
439 |
msgid "This plugin needs to know your privacy policy page to track updates to it and ask users to re-consent to your new terms."
|
440 |
msgstr ""
|
441 |
|
442 |
-
#: includes/class-gdpr-help.php:
|
443 |
msgid "When sending a data breach notification to your users, we need to throttle the emails because of server limitations. This is an hourly limit. Check with your hosting provider before changing this value."
|
444 |
msgstr ""
|
445 |
|
446 |
-
#: includes/class-gdpr-help.php:
|
447 |
msgid "Cookie Management"
|
448 |
msgstr ""
|
449 |
|
450 |
-
#: includes/class-gdpr-help.php:
|
451 |
msgid "Fill out every information you can about the cookies your site uses. Set the cookies that you set under Cookies Used and cookies used and set by third parties under the Third party domains."
|
452 |
msgstr ""
|
453 |
|
454 |
-
#: includes/class-gdpr-help.php:
|
455 |
msgid "You must ask your developer to wrap the code that sets the cookies with our helper function %s."
|
456 |
msgstr ""
|
457 |
|
458 |
-
#: includes/class-gdpr-help.php:
|
459 |
msgid "Some services like Google Analytics provide a way to opt out from their code with an extra parameter to their snippet."
|
460 |
msgstr ""
|
461 |
|
462 |
-
#: includes/class-gdpr-help.php:
|
463 |
msgid "External Links"
|
464 |
msgstr ""
|
465 |
|
466 |
-
#: includes/class-gdpr-help.php:
|
467 |
msgid "WordPress cookies"
|
468 |
msgstr ""
|
469 |
|
470 |
-
#: includes/class-gdpr-help.php:
|
471 |
msgid "Consent Management ( Coming Soon )"
|
472 |
msgstr ""
|
473 |
|
474 |
-
#: includes/class-gdpr-help.php:
|
475 |
msgid "All consents are disabled by default. On first registration, your users will need to consent to your privacy policy. Depending on your privacy policy you should register multiple types of consent on this page and allow them to be toggled on/off."
|
476 |
msgstr ""
|
477 |
|
478 |
-
#: includes/class-gdpr-help.php:
|
479 |
msgid "If you have an optional consent type, you must have a developer wrap the functionality in our helper function %s."
|
480 |
msgstr ""
|
481 |
|
482 |
-
#: includes/class-gdpr-help.php:
|
483 |
msgid "i.e."
|
484 |
msgstr ""
|
485 |
|
486 |
-
#: includes/class-gdpr-help.php:
|
487 |
msgid "You registered email marketing as an optional consent but the user did not actively opt into it on their profile page. You should have your email capture form wrapped in our helper function to block registration or better yet, not even display the email capture form. Same goes for blocking adding the user to your mailing system on registration if consent is not given."
|
488 |
msgstr ""
|
489 |
|
490 |
-
#: includes/class-gdpr-help.php:
|
491 |
msgid "Article 7 - Conditions for consent"
|
492 |
msgstr ""
|
493 |
|
494 |
-
#: includes/class-gdpr-help.php:
|
495 |
msgid "Article 8 - conditions applicable to child's consent in relation to information society services"
|
496 |
msgstr ""
|
497 |
|
498 |
-
#: includes/class-gdpr-help.php:
|
499 |
msgid "Recital 42 - Burden of proof and requirements for consent"
|
500 |
msgstr ""
|
501 |
|
502 |
-
#: includes/class-gdpr-help.php:
|
503 |
msgid "Recital 43 - Freely Given consent"
|
504 |
msgstr ""
|
505 |
|
506 |
-
#: includes/class-gdpr-help.php:
|
507 |
msgid "This is all data that are being sent outside of your site. WordPress send some data to it's servers to be able to do automatic updates. You can reduce the amount of data being sent using filters."
|
508 |
msgstr ""
|
509 |
|
510 |
-
#: includes/class-gdpr-help.php:
|
511 |
msgid "Some plugins also capture data and send it to their servers. Such practice is not allowed for plugins hosted on wordpress.org plugin repository. In case this is a Premium plugin, you should have been given the option to choose which type of data you want to send."
|
512 |
msgstr ""
|
513 |
|
514 |
-
#: includes/class-gdpr-help.php:
|
515 |
msgid "Use this tool to identify plugins or themes sending potential personal data outside of your server and take action if necessary."
|
516 |
msgstr ""
|
517 |
|
518 |
-
#: includes/class-gdpr-requests.php:
|
519 |
msgid "User request expired. Removing %s user_meta."
|
520 |
msgstr ""
|
521 |
|
@@ -528,176 +528,176 @@ msgstr ""
|
|
528 |
msgid "User gave explicit consent to %s"
|
529 |
msgstr ""
|
530 |
|
531 |
-
#: includes/helper-functions.php:
|
532 |
msgid "Privacy Preferences"
|
533 |
msgstr ""
|
534 |
|
535 |
-
#: public/class-gdpr-public.php:
|
536 |
msgid "Aborting"
|
537 |
msgstr ""
|
538 |
|
539 |
-
#: public/class-gdpr-public.php:
|
540 |
msgid "Continue"
|
541 |
msgstr ""
|
542 |
|
543 |
-
#: public/class-gdpr-public.php:
|
544 |
msgid "Cancel"
|
545 |
msgstr ""
|
546 |
|
547 |
-
#: public/class-gdpr-public.php:
|
548 |
msgid "OK"
|
549 |
msgstr ""
|
550 |
|
551 |
-
#: public/class-gdpr-public.php:
|
552 |
msgid "I Agree"
|
553 |
msgstr ""
|
554 |
|
555 |
-
#: public/class-gdpr-public.php:
|
556 |
msgid "Error!"
|
557 |
msgstr ""
|
558 |
|
559 |
-
#: public/class-gdpr-public.php:
|
560 |
msgid "User updated their privacy preferences. These are the new approved cookies and consent preferences:"
|
561 |
msgstr ""
|
562 |
|
563 |
-
#: public/class-gdpr-public.php:
|
564 |
msgid "User provided new consent for %1$s."
|
565 |
msgstr ""
|
566 |
|
567 |
-
#: public/class-gdpr-requests-public.php:
|
568 |
msgid "Invalid type of request. Please try again."
|
569 |
msgstr ""
|
570 |
|
571 |
-
#: public/class-gdpr-requests-public.php:
|
572 |
msgid "Please verify that you are not a robot."
|
573 |
msgstr ""
|
574 |
|
575 |
-
#: public/class-gdpr-requests-public.php:
|
576 |
msgid "We can't delete this user."
|
577 |
msgstr ""
|
578 |
|
579 |
-
#: public/class-gdpr-requests-public.php:
|
580 |
msgid "Required information is missing from the form."
|
581 |
msgstr ""
|
582 |
|
583 |
-
#: public/class-gdpr-requests-public.php:
|
584 |
msgid "Email confirmation"
|
585 |
msgstr ""
|
586 |
|
587 |
-
#: public/class-gdpr-requests-public.php:
|
588 |
msgid "We've sent you a confirmation email."
|
589 |
msgstr ""
|
590 |
|
591 |
-
#: public/class-gdpr-requests-public.php:
|
592 |
msgid "There was a problem with your request. Please try again later."
|
593 |
msgstr ""
|
594 |
|
595 |
-
#: public/class-gdpr-requests-public.php:
|
596 |
msgid "User confirmed a request to be deleted."
|
597 |
msgstr ""
|
598 |
|
599 |
-
#: public/class-gdpr-requests-public.php:
|
600 |
msgid "Content was found for that user."
|
601 |
msgstr ""
|
602 |
|
603 |
-
#: public/class-gdpr-requests-public.php:
|
604 |
msgid "User added to the erasure review table."
|
605 |
msgstr ""
|
606 |
|
607 |
-
#: public/class-gdpr-requests-public.php:
|
608 |
msgid "User placed a request for rectification or a complaint."
|
609 |
msgstr ""
|
610 |
|
611 |
#. translators: File format. Can be XML or JSON
|
612 |
-
#: public/class-gdpr-requests-public.php:
|
613 |
msgid "User downloaded all their data in %s format."
|
614 |
msgstr ""
|
615 |
|
616 |
-
#: admin/partials/requests.php:36, admin/partials/requests.php:
|
617 |
msgid "Email"
|
618 |
msgstr ""
|
619 |
|
620 |
-
#: admin/partials/requests.php:37, admin/partials/requests.php:
|
621 |
msgid "Date of Request"
|
622 |
msgstr ""
|
623 |
|
624 |
-
#: admin/partials/requests.php:38, admin/partials/requests.php:
|
625 |
msgid "Information"
|
626 |
msgstr ""
|
627 |
|
628 |
-
#: admin/partials/requests.php:39, admin/partials/requests.php:
|
629 |
msgid "Actions"
|
630 |
msgstr ""
|
631 |
|
632 |
-
#: admin/partials/requests.php:
|
633 |
msgid "Cancel Request"
|
634 |
msgstr ""
|
635 |
|
636 |
-
#: admin/partials/requests.php:
|
637 |
msgid "Mark as Resolved"
|
638 |
msgstr ""
|
639 |
|
640 |
-
#: admin/partials/requests.php:
|
641 |
msgid "No pending requests"
|
642 |
msgstr ""
|
643 |
|
644 |
-
#: admin/partials/requests.php:
|
645 |
msgid "Date of Complaint"
|
646 |
msgstr ""
|
647 |
|
648 |
-
#: admin/partials/requests.php:
|
649 |
msgid "Right to erasure"
|
650 |
msgstr ""
|
651 |
|
652 |
-
#: admin/partials/requests.php:
|
653 |
msgid "Manually add a user"
|
654 |
msgstr ""
|
655 |
|
656 |
-
#: admin/partials/requests.php:
|
657 |
msgid "email@domain.com"
|
658 |
msgstr ""
|
659 |
|
660 |
-
#: admin/partials/requests.php:
|
661 |
msgid "Submit"
|
662 |
msgstr ""
|
663 |
|
664 |
-
#: admin/partials/requests.php:
|
665 |
msgid "Review"
|
666 |
msgstr ""
|
667 |
|
668 |
-
#: admin/partials/requests.php:
|
669 |
msgid "No content to review"
|
670 |
msgstr ""
|
671 |
|
672 |
-
#: admin/partials/requests.php:
|
673 |
msgid "Delete User"
|
674 |
msgstr ""
|
675 |
|
676 |
-
#: admin/partials/requests.php:
|
677 |
msgid "Content Type"
|
678 |
msgstr ""
|
679 |
|
680 |
-
#: admin/partials/requests.php:
|
681 |
msgid "Count"
|
682 |
msgstr ""
|
683 |
|
684 |
-
#: admin/partials/requests.php:
|
685 |
msgid "Reassign"
|
686 |
msgstr ""
|
687 |
|
688 |
-
#: admin/partials/requests.php:
|
689 |
msgid "Action"
|
690 |
msgstr ""
|
691 |
|
692 |
-
#: admin/partials/requests.php:
|
693 |
msgid "Resolved"
|
694 |
msgstr ""
|
695 |
|
696 |
-
#: admin/partials/requests.php:
|
697 |
msgid "View Comments"
|
698 |
msgstr ""
|
699 |
|
700 |
-
#: admin/partials/requests.php:
|
701 |
msgid "Anonymize"
|
702 |
msgstr ""
|
703 |
|
@@ -813,227 +813,231 @@ msgstr ""
|
|
813 |
msgid "To prevent spam attacks, you have the option to enable reCAPTCHA. Configure below your keys to make it work with our request forms."
|
814 |
msgstr ""
|
815 |
|
816 |
-
#: admin/partials/settings.php:
|
817 |
msgid "You can find the necessary information %s."
|
818 |
msgstr ""
|
819 |
|
820 |
-
#: admin/partials/settings.php:
|
821 |
msgid "here"
|
822 |
msgstr ""
|
823 |
|
824 |
-
#: admin/partials/settings.php:
|
825 |
msgid "Enable reCAPTCHA"
|
826 |
msgstr ""
|
827 |
|
828 |
-
#: admin/partials/settings.php:
|
829 |
msgid "Site Key"
|
830 |
msgstr ""
|
831 |
|
832 |
-
#: admin/partials/settings.php:
|
833 |
msgid "Secret Key"
|
834 |
msgstr ""
|
835 |
|
836 |
-
#: admin/partials/settings.php:
|
837 |
msgid "WooCommerce"
|
838 |
msgstr ""
|
839 |
|
840 |
-
#: admin/partials/settings.php:
|
841 |
msgid "Add consent checkboxes to the registration page"
|
842 |
msgstr ""
|
843 |
|
844 |
-
#: admin/partials/settings.php:
|
845 |
msgid "Add consent checkboxes to the checkout registration form"
|
846 |
msgstr ""
|
847 |
|
848 |
-
#: admin/partials/settings.php:
|
849 |
msgid "Cookies"
|
850 |
msgstr ""
|
851 |
|
852 |
-
#: admin/partials/settings.php:
|
853 |
msgid "Category name"
|
854 |
msgstr ""
|
855 |
|
856 |
-
#: admin/partials/settings.php:
|
857 |
-
msgid "Add
|
858 |
msgstr ""
|
859 |
|
860 |
-
#: admin/partials/settings.php:
|
861 |
msgid "Remove this tab."
|
862 |
msgstr ""
|
863 |
|
864 |
-
#: admin/partials/settings.php:
|
865 |
msgid "Category Name"
|
866 |
msgstr ""
|
867 |
|
868 |
-
#: admin/partials/settings.php:
|
869 |
msgid "Change this value if you want to name it something different."
|
870 |
msgstr ""
|
871 |
|
872 |
-
#: admin/partials/settings.php:
|
873 |
msgid "Status"
|
874 |
msgstr ""
|
875 |
|
876 |
-
#: admin/partials/settings.php:
|
877 |
msgid "Required cookies are cookies that cannot be opted out of and need to be created for the site to function properly. The ON status means that the cookie preference for this category will be enabled by default. The OFF status means the user needs to manually turn these cookies on to opt into these cookies."
|
878 |
msgstr ""
|
879 |
|
880 |
-
#: admin/partials/settings.php:
|
881 |
msgid "Required"
|
882 |
msgstr ""
|
883 |
|
884 |
-
#: admin/partials/settings.php:
|
885 |
msgid "ON"
|
886 |
msgstr ""
|
887 |
|
888 |
-
#: admin/partials/settings.php:
|
889 |
msgid "OFF"
|
890 |
msgstr ""
|
891 |
|
892 |
-
#: admin/partials/settings.php:
|
893 |
msgid "Cookies used"
|
894 |
msgstr ""
|
895 |
|
896 |
-
#: admin/partials/settings.php:
|
897 |
msgid "A comma-separated list of cookies that your site is using that fit this category."
|
898 |
msgstr ""
|
899 |
|
900 |
-
#: admin/partials/settings.php:
|
901 |
msgid "Comma separated list."
|
902 |
msgstr ""
|
903 |
|
904 |
-
#: admin/partials/settings.php:
|
905 |
msgid "How are these used"
|
906 |
msgstr ""
|
907 |
|
908 |
-
#: admin/partials/settings.php:
|
909 |
msgid "A brief explanation of why you are requesting to use these cookies, what they are for, and how you process them."
|
910 |
msgstr ""
|
911 |
|
912 |
-
#: admin/partials/settings.php:
|
913 |
msgid "Third party domain"
|
914 |
msgstr ""
|
915 |
|
916 |
-
#: admin/partials/settings.php:
|
917 |
msgid "E.g. facebook.com"
|
918 |
msgstr ""
|
919 |
|
920 |
-
#: admin/partials/settings.php:
|
|
|
|
|
|
|
|
|
921 |
msgid "Add"
|
922 |
msgstr ""
|
923 |
|
924 |
-
#: admin/partials/settings.php:
|
925 |
msgid "Cookies that are set by a third party, like facebook.com."
|
926 |
msgstr ""
|
927 |
|
928 |
-
#: admin/partials/settings.php:
|
929 |
msgid "Remove this domain."
|
930 |
msgstr ""
|
931 |
|
932 |
-
#: admin/partials/settings.php:
|
933 |
msgid "A comma separated list of cookies that your site is using from this third-party provider."
|
934 |
msgstr ""
|
935 |
|
936 |
-
#: admin/partials/settings.php:
|
937 |
msgid "Opt Out Link"
|
938 |
msgstr ""
|
939 |
|
940 |
-
#: admin/partials/settings.php:
|
941 |
msgid "Add a link with the third-party instructions on how to opt out of their cookies."
|
942 |
msgstr ""
|
943 |
|
944 |
-
#: admin/partials/settings.php:
|
945 |
msgid "Url with instructions on how to opt out."
|
946 |
msgstr ""
|
947 |
|
948 |
-
#: admin/partials/settings.php:
|
949 |
msgid "E.g. Privacy Policy or Cookie Policy"
|
950 |
msgstr ""
|
951 |
|
952 |
-
#: admin/partials/settings.php:
|
953 |
msgid "Add consent"
|
954 |
msgstr ""
|
955 |
|
956 |
-
#: admin/partials/settings.php:
|
957 |
msgid "Unregister this consent."
|
958 |
msgstr ""
|
959 |
|
960 |
-
#: admin/partials/settings.php:
|
961 |
msgid "Policy Page"
|
962 |
msgstr ""
|
963 |
|
964 |
-
#: admin/partials/settings.php:
|
965 |
msgid "This page will be tracked for changes and you will be prompted to ask users to re-consent to the new policy. Selecting a page will make this consent required."
|
966 |
msgstr ""
|
967 |
|
968 |
-
#: admin/partials/settings.php:
|
969 |
msgid "Long description"
|
970 |
msgstr ""
|
971 |
|
972 |
-
#: admin/partials/settings.php:
|
973 |
msgid "This will show up at the privacy preferences center, under the name of the consent."
|
974 |
msgstr ""
|
975 |
|
976 |
-
#: admin/partials/settings.php:
|
977 |
msgid "Short description"
|
978 |
msgstr ""
|
979 |
|
980 |
-
#: admin/partials/settings.php:
|
981 |
msgid "This will show up at registration forms next to checkboxes."
|
982 |
msgstr ""
|
983 |
|
984 |
-
#: admin/partials/tools.php:
|
985 |
msgid "Data Breach confirmed. Preparing bulk emails."
|
986 |
msgstr ""
|
987 |
|
988 |
-
#: admin/partials/tools.php:
|
989 |
msgid "Search by email"
|
990 |
msgstr ""
|
991 |
|
992 |
-
#: admin/partials/tools.php:
|
993 |
msgid "Search"
|
994 |
msgstr ""
|
995 |
|
996 |
-
#: admin/partials/tools.php:
|
997 |
msgid "Email content"
|
998 |
msgstr ""
|
999 |
|
1000 |
-
#: admin/partials/tools.php:
|
1001 |
msgid "The content that the end user will see before the below information."
|
1002 |
msgstr ""
|
1003 |
|
1004 |
-
#: admin/partials/tools.php:
|
1005 |
msgid "Nature of the personal data breach"
|
1006 |
msgstr ""
|
1007 |
|
1008 |
-
#: admin/partials/tools.php:
|
1009 |
msgid "Describe the nature of the personal data breach including where possible, the categories and the approximate number of data subjects concerned and the categories and the approximate number of personal data records concerned."
|
1010 |
msgstr ""
|
1011 |
|
1012 |
-
#: admin/partials/tools.php:
|
1013 |
msgid "Name and contact details of the data protection officer"
|
1014 |
msgstr ""
|
1015 |
|
1016 |
-
#: admin/partials/tools.php:
|
1017 |
msgid "Communicate the name and contact details of the data protection officer or another point of contact where more information can be obtained."
|
1018 |
msgstr ""
|
1019 |
|
1020 |
-
#: admin/partials/tools.php:
|
1021 |
msgid "Likely consequences of the personal data breach"
|
1022 |
msgstr ""
|
1023 |
|
1024 |
-
#: admin/partials/tools.php:
|
1025 |
msgid "Measures taken or proposed to be taken"
|
1026 |
msgstr ""
|
1027 |
|
1028 |
-
#: admin/partials/tools.php:
|
1029 |
msgid "Describe the measures taken or proposed to be taken by the controller to address the personal data breach, including, where appropriate, measures to mitigate its possible adverse effects."
|
1030 |
msgstr ""
|
1031 |
|
1032 |
-
#: admin/partials/tools.php:
|
1033 |
msgid "Send confirmation email"
|
1034 |
msgstr ""
|
1035 |
|
1036 |
-
#: admin/partials/tools.php:
|
1037 |
msgid "6 digit token (optional)"
|
1038 |
msgstr ""
|
1039 |
|
@@ -1041,35 +1045,31 @@ msgstr ""
|
|
1041 |
msgid "Type your complaint here"
|
1042 |
msgstr ""
|
1043 |
|
1044 |
-
#: public/partials/confirmation-screens.php:
|
1045 |
msgid "Your account"
|
1046 |
msgstr ""
|
1047 |
|
1048 |
-
#: public/partials/confirmation-screens.php:
|
1049 |
msgid "Your account has been closed. We are sorry to see you go."
|
1050 |
msgstr ""
|
1051 |
|
1052 |
-
#: public/partials/confirmation-screens.php:
|
1053 |
msgid "Your request has been received and is being reviewed. You will receive an email when we are done."
|
1054 |
msgstr ""
|
1055 |
|
1056 |
-
#: public/partials/confirmation-screens.php:
|
1057 |
msgid "Request Received"
|
1058 |
msgstr ""
|
1059 |
|
1060 |
-
#: public/partials/confirmation-screens.php:
|
1061 |
msgid "Your request has been received. We will be in touch soon."
|
1062 |
msgstr ""
|
1063 |
|
1064 |
-
#: public/partials/confirmation-screens.php:
|
1065 |
-
msgid "Malformed request confirmation link!"
|
1066 |
-
msgstr ""
|
1067 |
-
|
1068 |
-
#: public/partials/confirmation-screens.php:41
|
1069 |
msgid "We could not confirm the request key. It may be expired."
|
1070 |
msgstr ""
|
1071 |
|
1072 |
-
#: public/partials/confirmation-screens.php:
|
1073 |
msgid "The key used does not match the request key we have stored."
|
1074 |
msgstr ""
|
1075 |
|
@@ -1093,20 +1093,20 @@ msgstr ""
|
|
1093 |
msgid "Cookie Settings"
|
1094 |
msgstr ""
|
1095 |
|
1096 |
-
#: public/partials/privacy-preferences-modal.php:
|
1097 |
msgid "Cookies Used"
|
1098 |
msgstr ""
|
1099 |
|
1100 |
-
#: public/partials/privacy-preferences-modal.php:
|
1101 |
msgid "Opt Out"
|
1102 |
msgstr ""
|
1103 |
|
1104 |
-
#: public/partials/privacy-preferences-modal.php:
|
1105 |
msgid "Save Preferences"
|
1106 |
msgstr ""
|
1107 |
|
1108 |
#: public/partials/reconsent-bar.php:18
|
1109 |
-
msgid "Some of our policies have been updated. Please make sure to select the \"View\" link next each item in order to view changes before agreeing."
|
1110 |
msgstr ""
|
1111 |
|
1112 |
#: public/partials/reconsent-bar.php:26
|
@@ -1125,17 +1125,17 @@ msgid ""
|
|
1125 |
"--------------------------------------------------------\n"
|
1126 |
"Request\n"
|
1127 |
"--------------------------------------------------------\n"
|
1128 |
-
"%s\n"
|
1129 |
"\n"
|
1130 |
"\n"
|
1131 |
"\n"
|
1132 |
"\n"
|
1133 |
-
"To confirm this request, click here: %s\n"
|
1134 |
"\n"
|
1135 |
"\n"
|
1136 |
"\n"
|
1137 |
"---------------------------------------------------------------------------------\n"
|
1138 |
-
"If that wasn't you, reset your password: %s\n"
|
1139 |
""
|
1140 |
msgstr ""
|
1141 |
|
@@ -1147,56 +1147,56 @@ msgstr ""
|
|
1147 |
|
1148 |
#: templates/email/data-breach-notification.php:4
|
1149 |
msgid ""
|
1150 |
-
"%s\n"
|
1151 |
"\n"
|
1152 |
"--------------------------------------------------------\n"
|
1153 |
"Nature of the personal data breach:\n"
|
1154 |
"--------------------------------------------------------\n"
|
1155 |
-
"%s\n"
|
1156 |
"\n"
|
1157 |
"--------------------------------------------------------\n"
|
1158 |
"Name and contact details of the data protection officer:\n"
|
1159 |
"--------------------------------------------------------\n"
|
1160 |
-
"%s\n"
|
1161 |
"\n"
|
1162 |
"--------------------------------------------------------\n"
|
1163 |
"Likely consequences of the personal data breach:\n"
|
1164 |
"--------------------------------------------------------\n"
|
1165 |
-
"%s\n"
|
1166 |
"\n"
|
1167 |
"--------------------------------------------------------\n"
|
1168 |
"Measures taken or proposed to be taken:\n"
|
1169 |
"--------------------------------------------------------\n"
|
1170 |
-
"%s\n"
|
1171 |
""
|
1172 |
msgstr ""
|
1173 |
|
1174 |
#: templates/email/data-breach-request.php:4
|
1175 |
msgid ""
|
1176 |
-
"A request to send a mass email notification to all users regarding a data breach has been made by %s.\n"
|
1177 |
"\n"
|
1178 |
"--------------------------------------------------------\n"
|
1179 |
"Nature of the personal data breach:\n"
|
1180 |
"--------------------------------------------------------\n"
|
1181 |
-
"%s\n"
|
1182 |
"\n"
|
1183 |
"--------------------------------------------------------\n"
|
1184 |
"Name and contact details of the data protection officer:\n"
|
1185 |
"--------------------------------------------------------\n"
|
1186 |
-
"%s\n"
|
1187 |
"\n"
|
1188 |
"--------------------------------------------------------\n"
|
1189 |
"Likely consequences of the personal data breach:\n"
|
1190 |
"--------------------------------------------------------\n"
|
1191 |
-
"%s\n"
|
1192 |
"\n"
|
1193 |
"--------------------------------------------------------\n"
|
1194 |
"Measures taken or proposed to be taken:\n"
|
1195 |
"--------------------------------------------------------\n"
|
1196 |
-
"%s\n"
|
1197 |
"\n"
|
1198 |
"\n"
|
1199 |
-
"To confirm this request, click here: %s\n"
|
1200 |
"\n"
|
1201 |
"---------------------------------------------------------------------------------\n"
|
1202 |
"If that is not intended, have the person who requested it change their password.\n"
|
@@ -1213,12 +1213,12 @@ msgid ""
|
|
1213 |
"\n"
|
1214 |
"\n"
|
1215 |
"\n"
|
1216 |
-
"To confirm this request, click here: %s\n"
|
1217 |
"\n"
|
1218 |
"\n"
|
1219 |
"\n"
|
1220 |
"---------------------------------------------------------------------------------\n"
|
1221 |
-
"If that wasn't you, reset your password: %s\n"
|
1222 |
""
|
1223 |
msgstr ""
|
1224 |
|
@@ -1238,13 +1238,13 @@ msgid ""
|
|
1238 |
"Someone requested to download your data from our site.\n"
|
1239 |
"By clicking confirm we will redirect you back to our site where a download will begin.\n"
|
1240 |
"\n"
|
1241 |
-
"To download it in a XML format, click here: %s\n"
|
1242 |
-
"To download it in a JSON format, click here: %s\n"
|
1243 |
"\n"
|
1244 |
"\n"
|
1245 |
"\n"
|
1246 |
"---------------------------------------------------------------------------------\n"
|
1247 |
-
"If that wasn't you, reset your password: %s\n"
|
1248 |
""
|
1249 |
msgstr ""
|
1250 |
|
@@ -1263,17 +1263,17 @@ msgid ""
|
|
1263 |
"--------------------------------------------------------\n"
|
1264 |
"Request\n"
|
1265 |
"--------------------------------------------------------\n"
|
1266 |
-
"%s\n"
|
1267 |
"\n"
|
1268 |
"\n"
|
1269 |
"\n"
|
1270 |
"\n"
|
1271 |
-
"To confirm this request, click here: %s\n"
|
1272 |
"\n"
|
1273 |
"\n"
|
1274 |
"\n"
|
1275 |
"---------------------------------------------------------------------------------\n"
|
1276 |
-
"If that wasn't you, reset your password: %s\n"
|
1277 |
""
|
1278 |
msgstr ""
|
1279 |
|
@@ -1291,10 +1291,6 @@ msgstr ""
|
|
1291 |
msgid "Required cookies are cookies that cannot be opt out. They need to be created for the site to function properly. Status ON means that the cookie will be set after agreement. Status OFF means the user needs to check the checkbox to activate this category."
|
1292 |
msgstr ""
|
1293 |
|
1294 |
-
#: admin/partials/templates/tmpl-cookies.php:43, admin/partials/templates/tmpl-cookies.php:44
|
1295 |
-
msgid "A comma separated list of cookies that your site is using that fit this category."
|
1296 |
-
msgstr ""
|
1297 |
-
|
1298 |
#: admin/partials/templates/tmpl-cookies.php:59, admin/partials/templates/tmpl-cookies.php:60
|
1299 |
msgid "A brief explanation on why you are requesting to use these cookies, what they are for and how you process them."
|
1300 |
msgstr ""
|
@@ -1303,10 +1299,6 @@ msgstr ""
|
|
1303 |
msgid "E.g. youtube.com"
|
1304 |
msgstr ""
|
1305 |
|
1306 |
-
#: admin/partials/templates/tmpl-cookies.php:78
|
1307 |
-
msgid "domain.com"
|
1308 |
-
msgstr ""
|
1309 |
-
|
1310 |
#: admin/partials/templates/tmpl-cookies.php:107
|
1311 |
msgid "How to Opt Out"
|
1312 |
msgstr ""
|
13 |
"X-Poedit-SourceCharset: UTF-8\n"
|
14 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
15 |
|
16 |
+
#: admin/class-gdpr-admin.php:100, admin/class-gdpr-admin.php:113
|
17 |
msgid "GDPR"
|
18 |
msgstr ""
|
19 |
|
20 |
+
#: admin/class-gdpr-admin.php:120, admin/partials/requests.php:18
|
21 |
msgid "Requests"
|
22 |
msgstr ""
|
23 |
|
24 |
+
#: admin/class-gdpr-admin.php:126, admin/partials/tools.php:42
|
25 |
msgid "Tools"
|
26 |
msgstr ""
|
27 |
|
28 |
+
#: admin/class-gdpr-admin.php:132
|
29 |
msgid "Settings"
|
30 |
msgstr ""
|
31 |
|
32 |
+
#: admin/class-gdpr-admin.php:296, includes/class-gdpr-help.php:40, includes/class-gdpr-help.php:46, admin/partials/requests.php:32
|
33 |
msgid "Rectify Data"
|
34 |
msgstr ""
|
35 |
|
37 |
msgid "Complaint"
|
38 |
msgstr ""
|
39 |
|
40 |
+
#: admin/class-gdpr-admin.php:304, includes/class-gdpr-help.php:62
|
41 |
msgid "Erasure"
|
42 |
msgstr ""
|
43 |
|
44 |
+
#: admin/class-gdpr-admin.php:321, includes/class-gdpr-help.php:91, includes/class-gdpr-help.php:96, admin/partials/tools.php:53
|
45 |
msgid "Access Data"
|
46 |
msgstr ""
|
47 |
|
48 |
+
#: admin/class-gdpr-admin.php:322, includes/class-gdpr-help.php:108, admin/partials/tools.php:70
|
49 |
msgid "Data Breach"
|
50 |
msgstr ""
|
51 |
|
52 |
+
#: admin/class-gdpr-admin.php:323, includes/class-gdpr-help.php:113, includes/class-gdpr-help.php:121, admin/partials/tools.php:115
|
53 |
msgid "Audit Log"
|
54 |
msgstr ""
|
55 |
|
56 |
+
#: admin/class-gdpr-admin.php:397
|
57 |
msgid "Consent Given"
|
58 |
msgstr ""
|
59 |
|
60 |
+
#: admin/class-gdpr-admin.php:401
|
61 |
msgid "Consent ID"
|
62 |
msgstr ""
|
63 |
|
64 |
+
#: admin/class-gdpr-admin.php:413, admin/partials/requests.php:285
|
65 |
msgid "Comments"
|
66 |
msgstr ""
|
67 |
|
68 |
+
#: admin/class-gdpr-admin.php:418
|
69 |
msgid "Comment Field"
|
70 |
msgstr ""
|
71 |
|
72 |
+
#: admin/class-gdpr-admin.php:419
|
73 |
msgid "Comment Data"
|
74 |
msgstr ""
|
75 |
|
76 |
+
#: admin/class-gdpr-admin.php:455
|
77 |
msgid "Metadata"
|
78 |
msgstr ""
|
79 |
|
80 |
+
#: admin/class-gdpr-admin.php:459
|
81 |
msgid "Name"
|
82 |
msgstr ""
|
83 |
|
84 |
+
#: admin/class-gdpr-admin.php:460
|
85 |
msgid "Value"
|
86 |
msgstr ""
|
87 |
|
88 |
+
#: admin/class-gdpr-admin.php:514
|
89 |
msgid "No logs found for this email."
|
90 |
msgstr ""
|
91 |
|
92 |
+
#: admin/class-gdpr-admin.php:526
|
93 |
msgid "Review your settings"
|
94 |
msgstr ""
|
95 |
|
96 |
+
#: admin/class-gdpr-admin.php:527
|
97 |
msgid "We have added a few new options which must be reviewed before continuing to use the plugin."
|
98 |
msgstr ""
|
99 |
|
100 |
+
#: admin/class-gdpr-admin.php:528
|
101 |
msgid "For cookies, we have added a status which allows you to set them as ON, OFF or Required. For consents, we moved the policy selector into each consent. All policies can now be tracked through this."
|
102 |
msgstr ""
|
103 |
|
104 |
+
#: admin/class-gdpr-admin.php:529
|
105 |
msgid "Please keep in mind the plugin might not work as intended until these settings are reviewed."
|
106 |
msgstr ""
|
107 |
|
108 |
+
#: admin/class-gdpr-admin.php:564
|
109 |
msgid "Your %s page has been updated."
|
110 |
msgstr ""
|
111 |
|
112 |
+
#: admin/class-gdpr-admin.php:566
|
113 |
msgid "In case this was not a small typo fix, you must ask users for explicit consent again."
|
114 |
msgstr ""
|
115 |
|
116 |
+
#: admin/class-gdpr-admin.php:575
|
117 |
msgid "Ask for consent"
|
118 |
msgstr ""
|
119 |
|
120 |
+
#: admin/class-gdpr-admin.php:584
|
121 |
msgid "Ignore"
|
122 |
msgstr ""
|
123 |
|
124 |
+
#: admin/class-gdpr-admin.php:599, admin/class-gdpr-admin.php:743, admin/class-gdpr-admin.php:814, public/class-gdpr-public.php:203, public/class-gdpr-public.php:305, public/class-gdpr-public.php:368
|
125 |
msgid "We could not verify the the security token. Please try again."
|
126 |
msgstr ""
|
127 |
|
128 |
+
#: admin/class-gdpr-admin.php:611
|
129 |
msgid "One or more required fields are missing. Please try again."
|
130 |
msgstr ""
|
131 |
|
132 |
+
#: admin/class-gdpr-admin.php:661
|
133 |
msgid "Data breach notification has been initialized. An email confirmation has been sent to the website controller."
|
134 |
msgstr ""
|
135 |
|
136 |
+
#: admin/class-gdpr-admin.php:725
|
137 |
msgid "ERROR"
|
138 |
msgstr ""
|
139 |
|
140 |
+
#: admin/class-gdpr-admin.php:727
|
141 |
msgid "is a required consent"
|
142 |
msgstr ""
|
143 |
|
144 |
#. translators: 1: The name of the policy that was updated.
|
145 |
+
#: admin/class-gdpr-admin.php:763
|
146 |
msgid "%1$s has been updated. Removing the %1$s consent and requesting new consent."
|
147 |
msgstr ""
|
148 |
|
149 |
+
#: admin/class-gdpr-admin.php:837, includes/class-gdpr-help.php:184, public/partials/privacy-preferences-modal.php:32, public/partials/privacy-preferences-modal.php:65
|
150 |
msgid "Consent Management"
|
151 |
msgstr ""
|
152 |
|
153 |
+
#: admin/class-gdpr-admin.php:874
|
154 |
msgid "Profile Updated. These are the user consents after the save:"
|
155 |
msgstr ""
|
156 |
|
157 |
+
#: admin/class-gdpr-admin.php:953, admin/partials/settings.php:335
|
158 |
msgid "Consents"
|
159 |
msgstr ""
|
160 |
|
161 |
+
#: admin/class-gdpr-requests-admin.php:30, admin/class-gdpr-requests-admin.php:159, admin/class-gdpr-requests-admin.php:207, admin/class-gdpr-requests-admin.php:243
|
162 |
msgid "We could not verify the user email or the security token. Please try again."
|
163 |
msgstr ""
|
164 |
|
165 |
+
#: admin/class-gdpr-requests-admin.php:37, admin/class-gdpr-requests-admin.php:289, admin/class-gdpr-requests-admin.php:336, public/class-gdpr-requests-public.php:146, public/partials/confirmation-screens.php:34
|
166 |
msgid "User not found."
|
167 |
msgstr ""
|
168 |
|
169 |
+
#: admin/class-gdpr-requests-admin.php:59
|
170 |
msgid "User %s is the only admin of the site. It cannot be deleted."
|
171 |
msgstr ""
|
172 |
|
173 |
+
#: admin/class-gdpr-requests-admin.php:80, admin/class-gdpr-requests-admin.php:121
|
174 |
msgid "User added to the deletion requests list by admin."
|
175 |
msgstr ""
|
176 |
|
177 |
+
#: admin/class-gdpr-requests-admin.php:82, admin/class-gdpr-requests-admin.php:123
|
178 |
msgid "User %s was added to the deletion table."
|
179 |
msgstr ""
|
180 |
|
181 |
+
#: admin/class-gdpr-requests-admin.php:105
|
182 |
msgid "User already placed a deletion request."
|
183 |
msgstr ""
|
184 |
|
185 |
+
#: admin/class-gdpr-requests-admin.php:145, admin/class-gdpr-requests-admin.php:193
|
186 |
msgid "We could not verify the type of request you want to cancel."
|
187 |
msgstr ""
|
188 |
|
189 |
#. translators: The type of request
|
190 |
+
#: admin/class-gdpr-requests-admin.php:153, admin/class-gdpr-requests-admin.php:201
|
191 |
msgid "Type of request '%s' is not an allowed type."
|
192 |
msgstr ""
|
193 |
|
194 |
#. translators: The type of request i.e 'delete'
|
195 |
+
#: admin/class-gdpr-requests-admin.php:168
|
196 |
msgid "User was removed from the %s request list by admin."
|
197 |
msgstr ""
|
198 |
|
199 |
+
#: admin/class-gdpr-requests-admin.php:171
|
200 |
msgid "User %s was removed from this request table."
|
201 |
msgstr ""
|
202 |
|
203 |
#. translators: User email
|
204 |
+
#: admin/class-gdpr-requests-admin.php:219
|
205 |
msgid "User %s request was marked as resolved by admin."
|
206 |
msgstr ""
|
207 |
|
208 |
+
#: admin/class-gdpr-requests-admin.php:221
|
209 |
msgid "Request was resolved. User %s has been notified."
|
210 |
msgstr ""
|
211 |
|
212 |
+
#: admin/class-gdpr-requests-admin.php:254, public/class-gdpr-requests-public.php:44
|
213 |
msgid "User was removed from the site."
|
214 |
msgstr ""
|
215 |
|
216 |
+
#: admin/class-gdpr-requests-admin.php:259
|
217 |
msgid "User %s was deleted from the site."
|
218 |
msgstr ""
|
219 |
|
220 |
+
#: admin/class-gdpr-requests-admin.php:281, admin/class-gdpr-requests-admin.php:322, public/class-gdpr-requests-public.php:82
|
221 |
msgid "We could not verify the security token. Please try again."
|
222 |
msgstr ""
|
223 |
|
224 |
+
#: admin/class-gdpr-requests-admin.php:307
|
225 |
msgid "Guest"
|
226 |
msgstr ""
|
227 |
|
228 |
+
#: admin/class-gdpr-requests-admin.php:311
|
229 |
msgid "User comments were anonymized."
|
230 |
msgstr ""
|
231 |
|
232 |
+
#: admin/class-gdpr-requests-admin.php:326
|
233 |
msgid "Essential data missing. Please try again."
|
234 |
msgstr ""
|
235 |
|
236 |
#. translators: 1: The post type, 2: The user the posts were reassigned to
|
237 |
+
#: admin/class-gdpr-requests-admin.php:359
|
238 |
+
msgid "User %1$s were reassigned to %2$s."
|
239 |
msgstr ""
|
240 |
|
241 |
+
#: admin/class-gdpr-requests-admin.php:363
|
242 |
msgid "Something went wrong. Please try again."
|
243 |
msgstr ""
|
244 |
|
258 |
msgid "Search in destination"
|
259 |
msgstr ""
|
260 |
|
261 |
+
#: admin/class-gdpr-telemetry.php:187
|
262 |
msgid "Delete all"
|
263 |
msgstr ""
|
264 |
|
265 |
+
#: admin/class-gdpr-telemetry.php:199
|
266 |
msgid "Destination"
|
267 |
msgstr ""
|
268 |
|
269 |
+
#: admin/class-gdpr-telemetry.php:200
|
270 |
msgid "File"
|
271 |
msgstr ""
|
272 |
|
273 |
+
#: admin/class-gdpr-telemetry.php:201
|
274 |
msgid "Code"
|
275 |
msgstr ""
|
276 |
|
277 |
+
#: admin/class-gdpr-telemetry.php:202
|
278 |
msgid "Time"
|
279 |
msgstr ""
|
280 |
|
281 |
+
#: admin/class-gdpr-telemetry.php:203
|
282 |
msgid "Data"
|
283 |
msgstr ""
|
284 |
|
285 |
+
#: admin/class-gdpr-telemetry.php:345
|
286 |
msgid "Show"
|
287 |
msgstr ""
|
288 |
|
289 |
+
#: includes/class-gdpr-email.php:162
|
290 |
msgid "Data breach notification sent to user."
|
291 |
msgstr ""
|
292 |
|
293 |
#. translators: email content
|
294 |
+
#: includes/class-gdpr-email.php:164
|
295 |
msgid "Email content: %s"
|
296 |
msgstr ""
|
297 |
|
298 |
#. translators: nature of the data breach
|
299 |
+
#: includes/class-gdpr-email.php:166
|
300 |
msgid "Nature of data breach: %s"
|
301 |
msgstr ""
|
302 |
|
303 |
#. translators: data protection officer contact information
|
304 |
+
#: includes/class-gdpr-email.php:168
|
305 |
msgid "Data protection officer contact: %s"
|
306 |
msgstr ""
|
307 |
|
308 |
#. translators: likely consequences
|
309 |
+
#: includes/class-gdpr-email.php:170
|
310 |
msgid "Likely consequences of breach: %s"
|
311 |
msgstr ""
|
312 |
|
313 |
#. translators: measures taken
|
314 |
+
#: includes/class-gdpr-email.php:172
|
315 |
msgid "Measures taken or proposed to be taken: %s"
|
316 |
msgstr ""
|
317 |
|
318 |
+
#: includes/class-gdpr-email.php:203
|
319 |
msgid "GDPR Notification: There is a new request waiting to be reviewed."
|
320 |
msgstr ""
|
321 |
|
322 |
+
#: includes/class-gdpr-email.php:204
|
323 |
msgid "Someone requested to close your account."
|
324 |
msgstr ""
|
325 |
|
326 |
+
#: includes/class-gdpr-email.php:205
|
327 |
msgid "Your account has been closed."
|
328 |
msgstr ""
|
329 |
|
330 |
+
#: includes/class-gdpr-email.php:206
|
331 |
msgid "Someone requested that we rectify data of your account."
|
332 |
msgstr ""
|
333 |
|
334 |
+
#: includes/class-gdpr-email.php:207, includes/class-gdpr-email.php:209, includes/class-gdpr-email.php:211
|
335 |
msgid "Your request has been completed."
|
336 |
msgstr ""
|
337 |
|
338 |
+
#: includes/class-gdpr-email.php:208
|
339 |
msgid "Someone made complaint on behalf of your account."
|
340 |
msgstr ""
|
341 |
|
342 |
+
#: includes/class-gdpr-email.php:210
|
343 |
msgid "Someone requested to download your data."
|
344 |
msgstr ""
|
345 |
|
346 |
+
#: includes/class-gdpr-email.php:212
|
347 |
msgid "Someone requested to send a data breach notification."
|
348 |
msgstr ""
|
349 |
|
350 |
+
#: includes/class-gdpr-email.php:213
|
351 |
msgid "Data Breach Notification."
|
352 |
msgstr ""
|
353 |
|
354 |
+
#: includes/class-gdpr-help.php:30, includes/class-gdpr-help.php:35, includes/class-gdpr-help.php:81, includes/class-gdpr-help.php:86, includes/class-gdpr-help.php:201, includes/class-gdpr-help.php:209
|
355 |
msgid "Overview"
|
356 |
msgstr ""
|
357 |
|
359 |
msgid "This page has multiple request tables. Users can request multiple things like getting deleted from the site or having their data rectified. All requests will come to these tables."
|
360 |
msgstr ""
|
361 |
|
362 |
+
#: includes/class-gdpr-help.php:41
|
363 |
msgid "Users may request to have their data rectified. They can place a request somewhere on your site and those requests will show up here."
|
364 |
msgstr ""
|
365 |
|
366 |
+
#: includes/class-gdpr-help.php:42
|
367 |
msgid "When you complete the request, mark it as resolved and the requester will get a notification email confirming that their request was resolved."
|
368 |
msgstr ""
|
369 |
|
370 |
+
#: includes/class-gdpr-help.php:51, includes/class-gdpr-help.php:57, admin/partials/requests.php:98
|
371 |
msgid "Complaints"
|
372 |
msgstr ""
|
373 |
|
374 |
+
#: includes/class-gdpr-help.php:52
|
375 |
msgid "Users may complain about something that happened. They can place a complaint somewhere on your site and those complaints will show up here."
|
376 |
msgstr ""
|
377 |
|
378 |
+
#: includes/class-gdpr-help.php:53
|
379 |
msgid "When you resolve the problem, mark it as resolved and the requester will get a notification email confirming that his complaint was resolved."
|
380 |
msgstr ""
|
381 |
|
382 |
+
#: includes/class-gdpr-help.php:63
|
383 |
msgid "Users may request to be deleted from the site. If they don't have any content published on the site (including comments) they will be removed from the site automatically. Otherwise, they will show up at this review table where you can reassign or delete their published content and anonymize his comments."
|
384 |
msgstr ""
|
385 |
|
386 |
+
#: includes/class-gdpr-help.php:64
|
387 |
msgid "User may request their data to be deleted. The controller has, according to GDPR, 30 days to fulfill the request. On some occasions, you can ask to extend this time limit. When the request has been resolved the user will receive a notification that their account has been closed."
|
388 |
msgstr ""
|
389 |
|
390 |
+
#: includes/class-gdpr-help.php:68
|
391 |
msgid "Erasures"
|
392 |
msgstr ""
|
393 |
|
394 |
+
#: includes/class-gdpr-help.php:82
|
395 |
msgid "We added tools to make your life easier when you need to perform administrative tasks like notify all your users of a possible data breach."
|
396 |
msgstr ""
|
397 |
|
398 |
+
#: includes/class-gdpr-help.php:92
|
399 |
msgid "Use this page to look for all known data about a user. You can look it up using the user's email address and are able to download it in XML and JSON formats."
|
400 |
msgstr ""
|
401 |
|
402 |
+
#: includes/class-gdpr-help.php:101
|
403 |
msgid "Data Breach Notification"
|
404 |
msgstr ""
|
405 |
|
406 |
+
#: includes/class-gdpr-help.php:102
|
407 |
msgid "Use this carefully."
|
408 |
msgstr ""
|
409 |
|
410 |
+
#: includes/class-gdpr-help.php:103
|
411 |
msgid "This will send a mass email to all your users with the information provided on these fields. This email is throttled based on the hourly limit set on the plugin settings page. "
|
412 |
msgstr ""
|
413 |
|
414 |
+
#: includes/class-gdpr-help.php:104
|
415 |
msgid "Only use this tool if you believe your site has been compromised and that your user's personal data might have been leaked."
|
416 |
msgstr ""
|
417 |
|
418 |
+
#: includes/class-gdpr-help.php:114
|
419 |
msgid "We do not log any of the user's personal data."
|
420 |
msgstr ""
|
421 |
|
422 |
+
#: includes/class-gdpr-help.php:115
|
423 |
msgid "All logs are encrypted before saving to the database. An encrypted log file is created whenever a user gets removed from the site."
|
424 |
msgstr ""
|
425 |
|
426 |
+
#: includes/class-gdpr-help.php:116
|
427 |
msgid "This tool will keep a record of some actions such as changing consent preferences, placing a request, data breach notifications received, etc…"
|
428 |
msgstr ""
|
429 |
|
430 |
+
#: includes/class-gdpr-help.php:117
|
431 |
msgid "The only way to read the logs is to search for the user email. If the data subject is not a registered site user anymore, you need to ask for the 6 digit token that was provided during deletion. That will allow this tool to look for a log file with his information."
|
432 |
msgstr ""
|
433 |
|
434 |
+
#: includes/class-gdpr-help.php:134, includes/class-gdpr-help.php:140
|
435 |
msgid "General Settings"
|
436 |
msgstr ""
|
437 |
|
438 |
+
#: includes/class-gdpr-help.php:135
|
439 |
msgid "This plugin needs to know your privacy policy page to track updates to it and ask users to re-consent to your new terms."
|
440 |
msgstr ""
|
441 |
|
442 |
+
#: includes/class-gdpr-help.php:136
|
443 |
msgid "When sending a data breach notification to your users, we need to throttle the emails because of server limitations. This is an hourly limit. Check with your hosting provider before changing this value."
|
444 |
msgstr ""
|
445 |
|
446 |
+
#: includes/class-gdpr-help.php:146, includes/class-gdpr-help.php:160
|
447 |
msgid "Cookie Management"
|
448 |
msgstr ""
|
449 |
|
450 |
+
#: includes/class-gdpr-help.php:147
|
451 |
msgid "Fill out every information you can about the cookies your site uses. Set the cookies that you set under Cookies Used and cookies used and set by third parties under the Third party domains."
|
452 |
msgstr ""
|
453 |
|
454 |
+
#: includes/class-gdpr-help.php:149
|
455 |
msgid "You must ask your developer to wrap the code that sets the cookies with our helper function %s."
|
456 |
msgstr ""
|
457 |
|
458 |
+
#: includes/class-gdpr-help.php:150
|
459 |
msgid "Some services like Google Analytics provide a way to opt out from their code with an extra parameter to their snippet."
|
460 |
msgstr ""
|
461 |
|
462 |
+
#: includes/class-gdpr-help.php:151, includes/class-gdpr-help.php:171
|
463 |
msgid "External Links"
|
464 |
msgstr ""
|
465 |
|
466 |
+
#: includes/class-gdpr-help.php:153, includes/class-gdpr-help.php:153
|
467 |
msgid "WordPress cookies"
|
468 |
msgstr ""
|
469 |
|
470 |
+
#: includes/class-gdpr-help.php:166
|
471 |
msgid "Consent Management ( Coming Soon )"
|
472 |
msgstr ""
|
473 |
|
474 |
+
#: includes/class-gdpr-help.php:167
|
475 |
msgid "All consents are disabled by default. On first registration, your users will need to consent to your privacy policy. Depending on your privacy policy you should register multiple types of consent on this page and allow them to be toggled on/off."
|
476 |
msgstr ""
|
477 |
|
478 |
+
#: includes/class-gdpr-help.php:169
|
479 |
msgid "If you have an optional consent type, you must have a developer wrap the functionality in our helper function %s."
|
480 |
msgstr ""
|
481 |
|
482 |
+
#: includes/class-gdpr-help.php:170
|
483 |
msgid "i.e."
|
484 |
msgstr ""
|
485 |
|
486 |
+
#: includes/class-gdpr-help.php:170
|
487 |
msgid "You registered email marketing as an optional consent but the user did not actively opt into it on their profile page. You should have your email capture form wrapped in our helper function to block registration or better yet, not even display the email capture form. Same goes for blocking adding the user to your mailing system on registration if consent is not given."
|
488 |
msgstr ""
|
489 |
|
490 |
+
#: includes/class-gdpr-help.php:173, includes/class-gdpr-help.php:173
|
491 |
msgid "Article 7 - Conditions for consent"
|
492 |
msgstr ""
|
493 |
|
494 |
+
#: includes/class-gdpr-help.php:174, includes/class-gdpr-help.php:174
|
495 |
msgid "Article 8 - conditions applicable to child's consent in relation to information society services"
|
496 |
msgstr ""
|
497 |
|
498 |
+
#: includes/class-gdpr-help.php:175, includes/class-gdpr-help.php:175
|
499 |
msgid "Recital 42 - Burden of proof and requirements for consent"
|
500 |
msgstr ""
|
501 |
|
502 |
+
#: includes/class-gdpr-help.php:176, includes/class-gdpr-help.php:176
|
503 |
msgid "Recital 43 - Freely Given consent"
|
504 |
msgstr ""
|
505 |
|
506 |
+
#: includes/class-gdpr-help.php:202
|
507 |
msgid "This is all data that are being sent outside of your site. WordPress send some data to it's servers to be able to do automatic updates. You can reduce the amount of data being sent using filters."
|
508 |
msgstr ""
|
509 |
|
510 |
+
#: includes/class-gdpr-help.php:203
|
511 |
msgid "Some plugins also capture data and send it to their servers. Such practice is not allowed for plugins hosted on wordpress.org plugin repository. In case this is a Premium plugin, you should have been given the option to choose which type of data you want to send."
|
512 |
msgstr ""
|
513 |
|
514 |
+
#: includes/class-gdpr-help.php:204
|
515 |
msgid "Use this tool to identify plugins or themes sending potential personal data outside of your server and take action if necessary."
|
516 |
msgstr ""
|
517 |
|
518 |
+
#: includes/class-gdpr-requests.php:227
|
519 |
msgid "User request expired. Removing %s user_meta."
|
520 |
msgstr ""
|
521 |
|
528 |
msgid "User gave explicit consent to %s"
|
529 |
msgstr ""
|
530 |
|
531 |
+
#: includes/helper-functions.php:27, public/partials/privacy-bar.php:38
|
532 |
msgid "Privacy Preferences"
|
533 |
msgstr ""
|
534 |
|
535 |
+
#: public/class-gdpr-public.php:126
|
536 |
msgid "Aborting"
|
537 |
msgstr ""
|
538 |
|
539 |
+
#: public/class-gdpr-public.php:127
|
540 |
msgid "Continue"
|
541 |
msgstr ""
|
542 |
|
543 |
+
#: public/class-gdpr-public.php:128
|
544 |
msgid "Cancel"
|
545 |
msgstr ""
|
546 |
|
547 |
+
#: public/class-gdpr-public.php:129, public/partials/confirmation-screens.php:58
|
548 |
msgid "OK"
|
549 |
msgstr ""
|
550 |
|
551 |
+
#: public/class-gdpr-public.php:147, public/partials/reconsent-bar.php:31
|
552 |
msgid "I Agree"
|
553 |
msgstr ""
|
554 |
|
555 |
+
#: public/class-gdpr-public.php:202, public/class-gdpr-public.php:367, public/class-gdpr-requests-public.php:81, public/class-gdpr-requests-public.php:90, public/class-gdpr-requests-public.php:105, public/class-gdpr-requests-public.php:125, public/class-gdpr-requests-public.php:145, public/class-gdpr-requests-public.php:175, public/class-gdpr-requests-public.php:188, public/class-gdpr-requests-public.php:243, public/partials/confirmation-screens.php:33, public/partials/confirmation-screens.php:37, public/partials/confirmation-screens.php:41
|
556 |
msgid "Error!"
|
557 |
msgstr ""
|
558 |
|
559 |
+
#: public/class-gdpr-public.php:241
|
560 |
msgid "User updated their privacy preferences. These are the new approved cookies and consent preferences:"
|
561 |
msgstr ""
|
562 |
|
563 |
+
#: public/class-gdpr-public.php:377
|
564 |
msgid "User provided new consent for %1$s."
|
565 |
msgstr ""
|
566 |
|
567 |
+
#: public/class-gdpr-requests-public.php:91
|
568 |
msgid "Invalid type of request. Please try again."
|
569 |
msgstr ""
|
570 |
|
571 |
+
#: public/class-gdpr-requests-public.php:106, public/class-gdpr-requests-public.php:126
|
572 |
msgid "Please verify that you are not a robot."
|
573 |
msgstr ""
|
574 |
|
575 |
+
#: public/class-gdpr-requests-public.php:176
|
576 |
msgid "We can't delete this user."
|
577 |
msgstr ""
|
578 |
|
579 |
+
#: public/class-gdpr-requests-public.php:189
|
580 |
msgid "Required information is missing from the form."
|
581 |
msgstr ""
|
582 |
|
583 |
+
#: public/class-gdpr-requests-public.php:236
|
584 |
msgid "Email confirmation"
|
585 |
msgstr ""
|
586 |
|
587 |
+
#: public/class-gdpr-requests-public.php:237
|
588 |
msgid "We've sent you a confirmation email."
|
589 |
msgstr ""
|
590 |
|
591 |
+
#: public/class-gdpr-requests-public.php:244
|
592 |
msgid "There was a problem with your request. Please try again later."
|
593 |
msgstr ""
|
594 |
|
595 |
+
#: public/class-gdpr-requests-public.php:323
|
596 |
msgid "User confirmed a request to be deleted."
|
597 |
msgstr ""
|
598 |
|
599 |
+
#: public/class-gdpr-requests-public.php:325
|
600 |
msgid "Content was found for that user."
|
601 |
msgstr ""
|
602 |
|
603 |
+
#: public/class-gdpr-requests-public.php:327
|
604 |
msgid "User added to the erasure review table."
|
605 |
msgstr ""
|
606 |
|
607 |
+
#: public/class-gdpr-requests-public.php:361
|
608 |
msgid "User placed a request for rectification or a complaint."
|
609 |
msgstr ""
|
610 |
|
611 |
#. translators: File format. Can be XML or JSON
|
612 |
+
#: public/class-gdpr-requests-public.php:378
|
613 |
msgid "User downloaded all their data in %s format."
|
614 |
msgstr ""
|
615 |
|
616 |
+
#: admin/partials/requests.php:36, admin/partials/requests.php:88, admin/partials/requests.php:102, admin/partials/requests.php:145, admin/partials/requests.php:172, admin/partials/requests.php:323
|
617 |
msgid "Email"
|
618 |
msgstr ""
|
619 |
|
620 |
+
#: admin/partials/requests.php:37, admin/partials/requests.php:89, admin/partials/requests.php:173, admin/partials/requests.php:324
|
621 |
msgid "Date of Request"
|
622 |
msgstr ""
|
623 |
|
624 |
+
#: admin/partials/requests.php:38, admin/partials/requests.php:90, admin/partials/requests.php:104, admin/partials/requests.php:147
|
625 |
msgid "Information"
|
626 |
msgstr ""
|
627 |
|
628 |
+
#: admin/partials/requests.php:39, admin/partials/requests.php:91, admin/partials/requests.php:105, admin/partials/requests.php:148, admin/partials/requests.php:175, admin/partials/requests.php:326
|
629 |
msgid "Actions"
|
630 |
msgstr ""
|
631 |
|
632 |
+
#: admin/partials/requests.php:65, admin/partials/requests.php:122, admin/partials/requests.php:205
|
633 |
msgid "Cancel Request"
|
634 |
msgstr ""
|
635 |
|
636 |
+
#: admin/partials/requests.php:73, admin/partials/requests.php:130
|
637 |
msgid "Mark as Resolved"
|
638 |
msgstr ""
|
639 |
|
640 |
+
#: admin/partials/requests.php:81, admin/partials/requests.php:138, admin/partials/requests.php:316
|
641 |
msgid "No pending requests"
|
642 |
msgstr ""
|
643 |
|
644 |
+
#: admin/partials/requests.php:103, admin/partials/requests.php:146
|
645 |
msgid "Date of Complaint"
|
646 |
msgstr ""
|
647 |
|
648 |
+
#: admin/partials/requests.php:155
|
649 |
msgid "Right to erasure"
|
650 |
msgstr ""
|
651 |
|
652 |
+
#: admin/partials/requests.php:162
|
653 |
msgid "Manually add a user"
|
654 |
msgstr ""
|
655 |
|
656 |
+
#: admin/partials/requests.php:164, admin/partials/tools.php:61, admin/partials/tools.php:123, public/partials/complaint-form.php:6, public/partials/delete-form.php:19, public/partials/export-data-form.php:6, public/partials/rectify-form.php:6
|
657 |
msgid "email@domain.com"
|
658 |
msgstr ""
|
659 |
|
660 |
+
#: admin/partials/requests.php:165, public/partials/complaint-form.php:11, public/partials/rectify-form.php:10
|
661 |
msgid "Submit"
|
662 |
msgstr ""
|
663 |
|
664 |
+
#: admin/partials/requests.php:174, admin/partials/requests.php:189, admin/partials/requests.php:225, admin/partials/requests.php:325
|
665 |
msgid "Review"
|
666 |
msgstr ""
|
667 |
|
668 |
+
#: admin/partials/requests.php:191
|
669 |
msgid "No content to review"
|
670 |
msgstr ""
|
671 |
|
672 |
+
#: admin/partials/requests.php:212
|
673 |
msgid "Delete User"
|
674 |
msgstr ""
|
675 |
|
676 |
+
#: admin/partials/requests.php:223
|
677 |
msgid "Content Type"
|
678 |
msgstr ""
|
679 |
|
680 |
+
#: admin/partials/requests.php:224
|
681 |
msgid "Count"
|
682 |
msgstr ""
|
683 |
|
684 |
+
#: admin/partials/requests.php:226, admin/partials/requests.php:265
|
685 |
msgid "Reassign"
|
686 |
msgstr ""
|
687 |
|
688 |
+
#: admin/partials/requests.php:227
|
689 |
msgid "Action"
|
690 |
msgstr ""
|
691 |
|
692 |
+
#: admin/partials/requests.php:267, admin/partials/requests.php:296
|
693 |
msgid "Resolved"
|
694 |
msgstr ""
|
695 |
|
696 |
+
#: admin/partials/requests.php:287
|
697 |
msgid "View Comments"
|
698 |
msgstr ""
|
699 |
|
700 |
+
#: admin/partials/requests.php:294
|
701 |
msgid "Anonymize"
|
702 |
msgstr ""
|
703 |
|
813 |
msgid "To prevent spam attacks, you have the option to enable reCAPTCHA. Configure below your keys to make it work with our request forms."
|
814 |
msgstr ""
|
815 |
|
816 |
+
#: admin/partials/settings.php:134
|
817 |
msgid "You can find the necessary information %s."
|
818 |
msgstr ""
|
819 |
|
820 |
+
#: admin/partials/settings.php:135
|
821 |
msgid "here"
|
822 |
msgstr ""
|
823 |
|
824 |
+
#: admin/partials/settings.php:143
|
825 |
msgid "Enable reCAPTCHA"
|
826 |
msgstr ""
|
827 |
|
828 |
+
#: admin/partials/settings.php:152
|
829 |
msgid "Site Key"
|
830 |
msgstr ""
|
831 |
|
832 |
+
#: admin/partials/settings.php:161
|
833 |
msgid "Secret Key"
|
834 |
msgstr ""
|
835 |
|
836 |
+
#: admin/partials/settings.php:172
|
837 |
msgid "WooCommerce"
|
838 |
msgstr ""
|
839 |
|
840 |
+
#: admin/partials/settings.php:177
|
841 |
msgid "Add consent checkboxes to the registration page"
|
842 |
msgstr ""
|
843 |
|
844 |
+
#: admin/partials/settings.php:186
|
845 |
msgid "Add consent checkboxes to the checkout registration form"
|
846 |
msgstr ""
|
847 |
|
848 |
+
#: admin/partials/settings.php:198
|
849 |
msgid "Cookies"
|
850 |
msgstr ""
|
851 |
|
852 |
+
#: admin/partials/settings.php:199
|
853 |
msgid "Category name"
|
854 |
msgstr ""
|
855 |
|
856 |
+
#: admin/partials/settings.php:200
|
857 |
+
msgid "Add cookie category"
|
858 |
msgstr ""
|
859 |
|
860 |
+
#: admin/partials/settings.php:204
|
861 |
msgid "Remove this tab."
|
862 |
msgstr ""
|
863 |
|
864 |
+
#: admin/partials/settings.php:210, admin/partials/templates/tmpl-cookies.php:9
|
865 |
msgid "Category Name"
|
866 |
msgstr ""
|
867 |
|
868 |
+
#: admin/partials/settings.php:211, admin/partials/settings.php:212
|
869 |
msgid "Change this value if you want to name it something different."
|
870 |
msgstr ""
|
871 |
|
872 |
+
#: admin/partials/settings.php:224, admin/partials/templates/tmpl-cookies.php:23
|
873 |
msgid "Status"
|
874 |
msgstr ""
|
875 |
|
876 |
+
#: admin/partials/settings.php:225, admin/partials/settings.php:226
|
877 |
msgid "Required cookies are cookies that cannot be opted out of and need to be created for the site to function properly. The ON status means that the cookie preference for this category will be enabled by default. The OFF status means the user needs to manually turn these cookies on to opt into these cookies."
|
878 |
msgstr ""
|
879 |
|
880 |
+
#: admin/partials/settings.php:234, public/partials/privacy-preferences-modal.php:75, public/partials/privacy-preferences-modal.php:122, admin/partials/templates/tmpl-cookies.php:33
|
881 |
msgid "Required"
|
882 |
msgstr ""
|
883 |
|
884 |
+
#: admin/partials/settings.php:235, admin/partials/templates/tmpl-cookies.php:34
|
885 |
msgid "ON"
|
886 |
msgstr ""
|
887 |
|
888 |
+
#: admin/partials/settings.php:236, admin/partials/templates/tmpl-cookies.php:35
|
889 |
msgid "OFF"
|
890 |
msgstr ""
|
891 |
|
892 |
+
#: admin/partials/settings.php:243, admin/partials/settings.php:296, admin/partials/templates/tmpl-cookies.php:42, admin/partials/templates/tmpl-cookies.php:99
|
893 |
msgid "Cookies used"
|
894 |
msgstr ""
|
895 |
|
896 |
+
#: admin/partials/settings.php:244, admin/partials/settings.php:245, admin/partials/templates/tmpl-cookies.php:43, admin/partials/templates/tmpl-cookies.php:44
|
897 |
msgid "A comma-separated list of cookies that your site is using that fit this category."
|
898 |
msgstr ""
|
899 |
|
900 |
+
#: admin/partials/settings.php:253, admin/partials/templates/tmpl-cookies.php:52, admin/partials/templates/tmpl-cookies.php:103
|
901 |
msgid "Comma separated list."
|
902 |
msgstr ""
|
903 |
|
904 |
+
#: admin/partials/settings.php:259, admin/partials/templates/tmpl-cookies.php:58
|
905 |
msgid "How are these used"
|
906 |
msgstr ""
|
907 |
|
908 |
+
#: admin/partials/settings.php:260, admin/partials/settings.php:261
|
909 |
msgid "A brief explanation of why you are requesting to use these cookies, what they are for, and how you process them."
|
910 |
msgstr ""
|
911 |
|
912 |
+
#: admin/partials/settings.php:271, admin/partials/templates/tmpl-cookies.php:70
|
913 |
msgid "Third party domain"
|
914 |
msgstr ""
|
915 |
|
916 |
+
#: admin/partials/settings.php:272, admin/partials/settings.php:273
|
917 |
msgid "E.g. facebook.com"
|
918 |
msgstr ""
|
919 |
|
920 |
+
#: admin/partials/settings.php:279, admin/partials/templates/tmpl-cookies.php:78
|
921 |
+
msgid "domain.com"
|
922 |
+
msgstr ""
|
923 |
+
|
924 |
+
#: admin/partials/settings.php:280, admin/partials/templates/tmpl-cookies.php:79
|
925 |
msgid "Add"
|
926 |
msgstr ""
|
927 |
|
928 |
+
#: admin/partials/settings.php:282, admin/partials/templates/tmpl-cookies.php:81
|
929 |
msgid "Cookies that are set by a third party, like facebook.com."
|
930 |
msgstr ""
|
931 |
|
932 |
+
#: admin/partials/settings.php:290, admin/partials/templates/tmpl-cookies.php:94
|
933 |
msgid "Remove this domain."
|
934 |
msgstr ""
|
935 |
|
936 |
+
#: admin/partials/settings.php:297, admin/partials/settings.php:298
|
937 |
msgid "A comma separated list of cookies that your site is using from this third-party provider."
|
938 |
msgstr ""
|
939 |
|
940 |
+
#: admin/partials/settings.php:310
|
941 |
msgid "Opt Out Link"
|
942 |
msgstr ""
|
943 |
|
944 |
+
#: admin/partials/settings.php:311, admin/partials/settings.php:312
|
945 |
msgid "Add a link with the third-party instructions on how to opt out of their cookies."
|
946 |
msgstr ""
|
947 |
|
948 |
+
#: admin/partials/settings.php:320, admin/partials/templates/tmpl-cookies.php:111
|
949 |
msgid "Url with instructions on how to opt out."
|
950 |
msgstr ""
|
951 |
|
952 |
+
#: admin/partials/settings.php:336
|
953 |
msgid "E.g. Privacy Policy or Cookie Policy"
|
954 |
msgstr ""
|
955 |
|
956 |
+
#: admin/partials/settings.php:337
|
957 |
msgid "Add consent"
|
958 |
msgstr ""
|
959 |
|
960 |
+
#: admin/partials/settings.php:342, admin/partials/templates/tmpl-consents.php:3
|
961 |
msgid "Unregister this consent."
|
962 |
msgstr ""
|
963 |
|
964 |
+
#: admin/partials/settings.php:349, admin/partials/templates/tmpl-consents.php:10
|
965 |
msgid "Policy Page"
|
966 |
msgstr ""
|
967 |
|
968 |
+
#: admin/partials/settings.php:350, admin/partials/settings.php:351, admin/partials/templates/tmpl-consents.php:11, admin/partials/templates/tmpl-consents.php:12
|
969 |
msgid "This page will be tracked for changes and you will be prompted to ask users to re-consent to the new policy. Selecting a page will make this consent required."
|
970 |
msgstr ""
|
971 |
|
972 |
+
#: admin/partials/settings.php:368, admin/partials/templates/tmpl-consents.php:29
|
973 |
msgid "Long description"
|
974 |
msgstr ""
|
975 |
|
976 |
+
#: admin/partials/settings.php:369, admin/partials/settings.php:370, admin/partials/templates/tmpl-consents.php:30, admin/partials/templates/tmpl-consents.php:31
|
977 |
msgid "This will show up at the privacy preferences center, under the name of the consent."
|
978 |
msgstr ""
|
979 |
|
980 |
+
#: admin/partials/settings.php:380, admin/partials/templates/tmpl-consents.php:41
|
981 |
msgid "Short description"
|
982 |
msgstr ""
|
983 |
|
984 |
+
#: admin/partials/settings.php:381, admin/partials/settings.php:382, admin/partials/templates/tmpl-consents.php:42, admin/partials/templates/tmpl-consents.php:43
|
985 |
msgid "This will show up at registration forms next to checkboxes."
|
986 |
msgstr ""
|
987 |
|
988 |
+
#: admin/partials/tools.php:33
|
989 |
msgid "Data Breach confirmed. Preparing bulk emails."
|
990 |
msgstr ""
|
991 |
|
992 |
+
#: admin/partials/tools.php:59, admin/partials/tools.php:121
|
993 |
msgid "Search by email"
|
994 |
msgstr ""
|
995 |
|
996 |
+
#: admin/partials/tools.php:62, admin/partials/tools.php:125
|
997 |
msgid "Search"
|
998 |
msgstr ""
|
999 |
|
1000 |
+
#: admin/partials/tools.php:76
|
1001 |
msgid "Email content"
|
1002 |
msgstr ""
|
1003 |
|
1004 |
+
#: admin/partials/tools.php:79
|
1005 |
msgid "The content that the end user will see before the below information."
|
1006 |
msgstr ""
|
1007 |
|
1008 |
+
#: admin/partials/tools.php:83
|
1009 |
msgid "Nature of the personal data breach"
|
1010 |
msgstr ""
|
1011 |
|
1012 |
+
#: admin/partials/tools.php:86
|
1013 |
msgid "Describe the nature of the personal data breach including where possible, the categories and the approximate number of data subjects concerned and the categories and the approximate number of personal data records concerned."
|
1014 |
msgstr ""
|
1015 |
|
1016 |
+
#: admin/partials/tools.php:90
|
1017 |
msgid "Name and contact details of the data protection officer"
|
1018 |
msgstr ""
|
1019 |
|
1020 |
+
#: admin/partials/tools.php:93
|
1021 |
msgid "Communicate the name and contact details of the data protection officer or another point of contact where more information can be obtained."
|
1022 |
msgstr ""
|
1023 |
|
1024 |
+
#: admin/partials/tools.php:97
|
1025 |
msgid "Likely consequences of the personal data breach"
|
1026 |
msgstr ""
|
1027 |
|
1028 |
+
#: admin/partials/tools.php:103
|
1029 |
msgid "Measures taken or proposed to be taken"
|
1030 |
msgstr ""
|
1031 |
|
1032 |
+
#: admin/partials/tools.php:106
|
1033 |
msgid "Describe the measures taken or proposed to be taken by the controller to address the personal data breach, including, where appropriate, measures to mitigate its possible adverse effects."
|
1034 |
msgstr ""
|
1035 |
|
1036 |
+
#: admin/partials/tools.php:110
|
1037 |
msgid "Send confirmation email"
|
1038 |
msgstr ""
|
1039 |
|
1040 |
+
#: admin/partials/tools.php:124
|
1041 |
msgid "6 digit token (optional)"
|
1042 |
msgstr ""
|
1043 |
|
1045 |
msgid "Type your complaint here"
|
1046 |
msgstr ""
|
1047 |
|
1048 |
+
#: public/partials/confirmation-screens.php:21
|
1049 |
msgid "Your account"
|
1050 |
msgstr ""
|
1051 |
|
1052 |
+
#: public/partials/confirmation-screens.php:23
|
1053 |
msgid "Your account has been closed. We are sorry to see you go."
|
1054 |
msgstr ""
|
1055 |
|
1056 |
+
#: public/partials/confirmation-screens.php:25
|
1057 |
msgid "Your request has been received and is being reviewed. You will receive an email when we are done."
|
1058 |
msgstr ""
|
1059 |
|
1060 |
+
#: public/partials/confirmation-screens.php:29
|
1061 |
msgid "Request Received"
|
1062 |
msgstr ""
|
1063 |
|
1064 |
+
#: public/partials/confirmation-screens.php:30
|
1065 |
msgid "Your request has been received. We will be in touch soon."
|
1066 |
msgstr ""
|
1067 |
|
1068 |
+
#: public/partials/confirmation-screens.php:38
|
|
|
|
|
|
|
|
|
1069 |
msgid "We could not confirm the request key. It may be expired."
|
1070 |
msgstr ""
|
1071 |
|
1072 |
+
#: public/partials/confirmation-screens.php:42
|
1073 |
msgid "The key used does not match the request key we have stored."
|
1074 |
msgstr ""
|
1075 |
|
1093 |
msgid "Cookie Settings"
|
1094 |
msgstr ""
|
1095 |
|
1096 |
+
#: public/partials/privacy-preferences-modal.php:103
|
1097 |
msgid "Cookies Used"
|
1098 |
msgstr ""
|
1099 |
|
1100 |
+
#: public/partials/privacy-preferences-modal.php:141
|
1101 |
msgid "Opt Out"
|
1102 |
msgstr ""
|
1103 |
|
1104 |
+
#: public/partials/privacy-preferences-modal.php:156
|
1105 |
msgid "Save Preferences"
|
1106 |
msgstr ""
|
1107 |
|
1108 |
#: public/partials/reconsent-bar.php:18
|
1109 |
+
msgid "Some of our policies have been updated. Please make sure to select the \"View\" link next to each item in order to view changes before agreeing."
|
1110 |
msgstr ""
|
1111 |
|
1112 |
#: public/partials/reconsent-bar.php:26
|
1125 |
"--------------------------------------------------------\n"
|
1126 |
"Request\n"
|
1127 |
"--------------------------------------------------------\n"
|
1128 |
+
"%1$s\n"
|
1129 |
"\n"
|
1130 |
"\n"
|
1131 |
"\n"
|
1132 |
"\n"
|
1133 |
+
"To confirm this request, click here: %2$s\n"
|
1134 |
"\n"
|
1135 |
"\n"
|
1136 |
"\n"
|
1137 |
"---------------------------------------------------------------------------------\n"
|
1138 |
+
"If that wasn't you, reset your password: %3$s\n"
|
1139 |
""
|
1140 |
msgstr ""
|
1141 |
|
1147 |
|
1148 |
#: templates/email/data-breach-notification.php:4
|
1149 |
msgid ""
|
1150 |
+
"%1$s\n"
|
1151 |
"\n"
|
1152 |
"--------------------------------------------------------\n"
|
1153 |
"Nature of the personal data breach:\n"
|
1154 |
"--------------------------------------------------------\n"
|
1155 |
+
"%2$s\n"
|
1156 |
"\n"
|
1157 |
"--------------------------------------------------------\n"
|
1158 |
"Name and contact details of the data protection officer:\n"
|
1159 |
"--------------------------------------------------------\n"
|
1160 |
+
"%3$s\n"
|
1161 |
"\n"
|
1162 |
"--------------------------------------------------------\n"
|
1163 |
"Likely consequences of the personal data breach:\n"
|
1164 |
"--------------------------------------------------------\n"
|
1165 |
+
"%4$s\n"
|
1166 |
"\n"
|
1167 |
"--------------------------------------------------------\n"
|
1168 |
"Measures taken or proposed to be taken:\n"
|
1169 |
"--------------------------------------------------------\n"
|
1170 |
+
"%5$s\n"
|
1171 |
""
|
1172 |
msgstr ""
|
1173 |
|
1174 |
#: templates/email/data-breach-request.php:4
|
1175 |
msgid ""
|
1176 |
+
"A request to send a mass email notification to all users regarding a data breach has been made by %1$s.\n"
|
1177 |
"\n"
|
1178 |
"--------------------------------------------------------\n"
|
1179 |
"Nature of the personal data breach:\n"
|
1180 |
"--------------------------------------------------------\n"
|
1181 |
+
"%2$s\n"
|
1182 |
"\n"
|
1183 |
"--------------------------------------------------------\n"
|
1184 |
"Name and contact details of the data protection officer:\n"
|
1185 |
"--------------------------------------------------------\n"
|
1186 |
+
"%3$s\n"
|
1187 |
"\n"
|
1188 |
"--------------------------------------------------------\n"
|
1189 |
"Likely consequences of the personal data breach:\n"
|
1190 |
"--------------------------------------------------------\n"
|
1191 |
+
"%4$s\n"
|
1192 |
"\n"
|
1193 |
"--------------------------------------------------------\n"
|
1194 |
"Measures taken or proposed to be taken:\n"
|
1195 |
"--------------------------------------------------------\n"
|
1196 |
+
"%5$s\n"
|
1197 |
"\n"
|
1198 |
"\n"
|
1199 |
+
"To confirm this request, click here: %6$s\n"
|
1200 |
"\n"
|
1201 |
"---------------------------------------------------------------------------------\n"
|
1202 |
"If that is not intended, have the person who requested it change their password.\n"
|
1213 |
"\n"
|
1214 |
"\n"
|
1215 |
"\n"
|
1216 |
+
"To confirm this request, click here: %1$s\n"
|
1217 |
"\n"
|
1218 |
"\n"
|
1219 |
"\n"
|
1220 |
"---------------------------------------------------------------------------------\n"
|
1221 |
+
"If that wasn't you, reset your password: %2$s\n"
|
1222 |
""
|
1223 |
msgstr ""
|
1224 |
|
1238 |
"Someone requested to download your data from our site.\n"
|
1239 |
"By clicking confirm we will redirect you back to our site where a download will begin.\n"
|
1240 |
"\n"
|
1241 |
+
"To download it in a XML format, click here: %1$s\n"
|
1242 |
+
"To download it in a JSON format, click here: %2$s\n"
|
1243 |
"\n"
|
1244 |
"\n"
|
1245 |
"\n"
|
1246 |
"---------------------------------------------------------------------------------\n"
|
1247 |
+
"If that wasn't you, reset your password: %3$s\n"
|
1248 |
""
|
1249 |
msgstr ""
|
1250 |
|
1263 |
"--------------------------------------------------------\n"
|
1264 |
"Request\n"
|
1265 |
"--------------------------------------------------------\n"
|
1266 |
+
"%1$s\n"
|
1267 |
"\n"
|
1268 |
"\n"
|
1269 |
"\n"
|
1270 |
"\n"
|
1271 |
+
"To confirm this request, click here: %2$s\n"
|
1272 |
"\n"
|
1273 |
"\n"
|
1274 |
"\n"
|
1275 |
"---------------------------------------------------------------------------------\n"
|
1276 |
+
"If that wasn't you, reset your password: %3$s\n"
|
1277 |
""
|
1278 |
msgstr ""
|
1279 |
|
1291 |
msgid "Required cookies are cookies that cannot be opt out. They need to be created for the site to function properly. Status ON means that the cookie will be set after agreement. Status OFF means the user needs to check the checkbox to activate this category."
|
1292 |
msgstr ""
|
1293 |
|
|
|
|
|
|
|
|
|
1294 |
#: admin/partials/templates/tmpl-cookies.php:59, admin/partials/templates/tmpl-cookies.php:60
|
1295 |
msgid "A brief explanation on why you are requesting to use these cookies, what they are for and how you process them."
|
1296 |
msgstr ""
|
1299 |
msgid "E.g. youtube.com"
|
1300 |
msgstr ""
|
1301 |
|
|
|
|
|
|
|
|
|
1302 |
#: admin/partials/templates/tmpl-cookies.php:107
|
1303 |
msgid "How to Opt Out"
|
1304 |
msgstr ""
|
public/class-gdpr-public.php
CHANGED
@@ -60,12 +60,12 @@ class GDPR_Public {
|
|
60 |
* @param string $version The version of this plugin.
|
61 |
*/
|
62 |
public function __construct( $plugin_name, $version ) {
|
63 |
-
$this->plugin_name
|
64 |
-
$this->version
|
65 |
$this->allowed_html = array(
|
66 |
'a' => array(
|
67 |
-
'href'
|
68 |
-
'title'
|
69 |
'target' => true,
|
70 |
),
|
71 |
);
|
@@ -80,11 +80,11 @@ class GDPR_Public {
|
|
80 |
public static function add_recaptcha() {
|
81 |
$use_recaptcha = get_option( 'gdpr_use_recaptcha', false );
|
82 |
if ( $use_recaptcha ) {
|
83 |
-
$site_key
|
84 |
$secret_key = get_option( 'gdpr_recaptcha_secret_key', '' );
|
85 |
|
86 |
if ( $site_key && $secret_key ) {
|
87 |
-
echo '<div class="g-recaptcha" data-sitekey="' . $site_key . '"></div>';
|
88 |
}
|
89 |
}
|
90 |
}
|
@@ -111,7 +111,7 @@ class GDPR_Public {
|
|
111 |
public function enqueue_scripts() {
|
112 |
$use_recaptcha = get_option( 'gdpr_use_recaptcha', false );
|
113 |
if ( $use_recaptcha ) {
|
114 |
-
$site_key
|
115 |
$secret_key = get_option( 'gdpr_recaptcha_secret_key', '' );
|
116 |
|
117 |
if ( $site_key && $secret_key ) {
|
@@ -119,17 +119,19 @@ class GDPR_Public {
|
|
119 |
}
|
120 |
}
|
121 |
wp_enqueue_script( $this->plugin_name, plugin_dir_url( dirname( __FILE__ ) ) . 'assets/js/gdpr-public.js', array( 'jquery' ), $this->version, false );
|
122 |
-
wp_localize_script(
|
123 |
-
'
|
124 |
-
|
125 |
-
'
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
|
|
|
|
133 |
}
|
134 |
|
135 |
/**
|
@@ -160,10 +162,10 @@ class GDPR_Public {
|
|
160 |
*/
|
161 |
public function privacy_preferences_modal() {
|
162 |
$cookie_privacy_excerpt = get_option( 'gdpr_cookie_privacy_excerpt', '' );
|
163 |
-
$consent_types
|
164 |
-
$approved_cookies
|
165 |
-
$user_consents
|
166 |
-
$tabs
|
167 |
|
168 |
include plugin_dir_path( __FILE__ ) . 'partials/privacy-preferences-modal.php';
|
169 |
}
|
@@ -194,18 +196,23 @@ class GDPR_Public {
|
|
194 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
195 |
*/
|
196 |
public function update_privacy_preferences() {
|
197 |
-
if ( ! isset( $_POST['update-privacy-preferences-nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['update-privacy-preferences-nonce'] ), 'gdpr-update-privacy-preferences' ) ) {
|
198 |
-
wp_send_json_error(
|
|
|
|
|
|
|
|
|
|
|
199 |
}
|
200 |
-
$consents = isset( $_POST['user_consents'] ) ? array_map( 'sanitize_text_field', (array) $_POST['user_consents'] ) : array();
|
201 |
-
$cookies = isset( $_POST['approved_cookies'] ) ? array_map( 'sanitize_text_field', (array) $_POST['approved_cookies'] ) : array();
|
202 |
-
$all_cookies = isset( $_POST['all_cookies'] ) ? array_map( 'sanitize_text_field', (array) json_decode( wp_unslash( $_POST['all_cookies'] ) ) ) : array();
|
203 |
|
204 |
$approved_cookies = array();
|
205 |
if ( ! empty( $cookies ) ) {
|
206 |
-
foreach ( $cookies as $
|
207 |
-
$
|
208 |
-
foreach ( $
|
209 |
$approved_cookies[] = $cookie;
|
210 |
}
|
211 |
}
|
@@ -213,19 +220,19 @@ class GDPR_Public {
|
|
213 |
|
214 |
$cookies_to_remove = array_diff( $all_cookies, $approved_cookies );
|
215 |
|
216 |
-
$cookies_as_json
|
217 |
$consents_as_json = json_encode( $consents );
|
218 |
|
219 |
-
setcookie(
|
220 |
-
setcookie(
|
221 |
|
222 |
foreach ( $cookies_to_remove as $cookie ) {
|
223 |
-
if ( GDPR::similar_in_array( $cookie, array_keys( $_COOKIE ) ) ) {
|
224 |
$domain = get_site_url();
|
225 |
$domain = wp_parse_url( $domain, PHP_URL_HOST );
|
226 |
-
unset( $_COOKIE[ $cookie ] );
|
227 |
-
setcookie( $cookie,
|
228 |
-
setcookie( $cookie,
|
229 |
}
|
230 |
}
|
231 |
|
@@ -246,7 +253,6 @@ class GDPR_Public {
|
|
246 |
GDPR_Audit_Log::log( $user->ID, 'Cookie: ' . $cookie );
|
247 |
}
|
248 |
}
|
249 |
-
|
250 |
}
|
251 |
|
252 |
wp_send_json_success();
|
@@ -263,20 +269,24 @@ class GDPR_Public {
|
|
263 |
if ( empty( $consents ) || ! is_array( $consents ) ) {
|
264 |
return;
|
265 |
}
|
266 |
-
$required_consents = array_filter(
|
267 |
-
|
268 |
-
|
|
|
|
|
269 |
|
270 |
if ( ! $required_consents || ! is_user_logged_in() ) {
|
271 |
return;
|
272 |
}
|
273 |
|
274 |
-
$user
|
275 |
$user_consents = get_user_meta( $user->ID, 'gdpr_consents' );
|
276 |
|
277 |
-
$updated_consents = array_filter(
|
278 |
-
|
279 |
-
|
|
|
|
|
280 |
|
281 |
if ( empty( $updated_consents ) ) {
|
282 |
return;
|
@@ -291,7 +301,7 @@ class GDPR_Public {
|
|
291 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
292 |
*/
|
293 |
public function logout() {
|
294 |
-
if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'gdpr-user_disagree_with_terms' ) ) {
|
295 |
wp_send_json_error( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
|
296 |
}
|
297 |
|
@@ -302,35 +312,36 @@ class GDPR_Public {
|
|
302 |
public function set_plugin_cookies() {
|
303 |
$user_id = get_current_user_id();
|
304 |
|
305 |
-
if ( ! isset( $_COOKIE['gdpr']['consent_types'] ) ) {
|
306 |
if ( ! $user_id ) {
|
307 |
-
setcookie( 'gdpr[consent_types]', '[]', time() + YEAR_IN_SECONDS,
|
308 |
} else {
|
309 |
$user_consents = get_user_meta( $user_id, 'gdpr_consents' );
|
310 |
-
setcookie(
|
311 |
}
|
312 |
} else {
|
313 |
if ( $user_id ) {
|
314 |
-
$user_consents
|
315 |
-
$cookie_consents = (array) json_decode( wp_unslash( $_COOKIE['gdpr']['consent_types'] ) );
|
316 |
|
317 |
$intersect = array_intersect( $user_consents, $cookie_consents );
|
318 |
-
$diff
|
319 |
|
320 |
if ( ! empty( $diff ) ) {
|
321 |
-
setcookie(
|
322 |
}
|
323 |
}
|
324 |
}
|
325 |
|
326 |
-
|
327 |
-
if ( ! isset( $_COOKIE['gdpr']['allowed_cookies'] ) ) {
|
328 |
$registered_cookies = get_option( 'gdpr_cookie_popup_content', array() );
|
329 |
-
$cookies
|
330 |
if ( ! empty( $registered_cookies ) ) {
|
331 |
-
$required_cookies = array_filter(
|
332 |
-
|
333 |
-
|
|
|
|
|
334 |
if ( ! empty( $required_cookies ) ) {
|
335 |
foreach ( $required_cookies as $category ) {
|
336 |
$cookies_used = explode( ',', $category['cookies_used'] );
|
@@ -342,19 +353,24 @@ class GDPR_Public {
|
|
342 |
}
|
343 |
|
344 |
if ( ! empty( $cookies ) ) {
|
345 |
-
setcookie(
|
346 |
} else {
|
347 |
-
setcookie(
|
348 |
}
|
349 |
}
|
350 |
}
|
351 |
|
352 |
public function agree_with_new_policies() {
|
353 |
-
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'gdpr-agree-with-new-policies' ) ) {
|
354 |
-
wp_send_json_error(
|
|
|
|
|
|
|
|
|
|
|
355 |
}
|
356 |
-
$consents = isset( $_POST['consents'] ) ? array_map( 'sanitize_text_field', (array) $_POST['consents'] ) : array();
|
357 |
-
$user_id
|
358 |
|
359 |
foreach ( $consents as $consent ) {
|
360 |
add_user_meta( $user_id, 'gdpr_consents', $consent );
|
60 |
* @param string $version The version of this plugin.
|
61 |
*/
|
62 |
public function __construct( $plugin_name, $version ) {
|
63 |
+
$this->plugin_name = $plugin_name;
|
64 |
+
$this->version = $version;
|
65 |
$this->allowed_html = array(
|
66 |
'a' => array(
|
67 |
+
'href' => true,
|
68 |
+
'title' => true,
|
69 |
'target' => true,
|
70 |
),
|
71 |
);
|
80 |
public static function add_recaptcha() {
|
81 |
$use_recaptcha = get_option( 'gdpr_use_recaptcha', false );
|
82 |
if ( $use_recaptcha ) {
|
83 |
+
$site_key = get_option( 'gdpr_recaptcha_site_key', '' );
|
84 |
$secret_key = get_option( 'gdpr_recaptcha_secret_key', '' );
|
85 |
|
86 |
if ( $site_key && $secret_key ) {
|
87 |
+
echo '<div class="g-recaptcha" data-sitekey="' . esc_attr( $site_key ) . '"></div>';
|
88 |
}
|
89 |
}
|
90 |
}
|
111 |
public function enqueue_scripts() {
|
112 |
$use_recaptcha = get_option( 'gdpr_use_recaptcha', false );
|
113 |
if ( $use_recaptcha ) {
|
114 |
+
$site_key = get_option( 'gdpr_recaptcha_site_key', '' );
|
115 |
$secret_key = get_option( 'gdpr_recaptcha_secret_key', '' );
|
116 |
|
117 |
if ( $site_key && $secret_key ) {
|
119 |
}
|
120 |
}
|
121 |
wp_enqueue_script( $this->plugin_name, plugin_dir_url( dirname( __FILE__ ) ) . 'assets/js/gdpr-public.js', array( 'jquery' ), $this->version, false );
|
122 |
+
wp_localize_script(
|
123 |
+
$this->plugin_name, 'GDPR', array(
|
124 |
+
'ajaxurl' => admin_url( 'admin-ajax.php' ),
|
125 |
+
'i18n' => array(
|
126 |
+
'aborting' => esc_html__( 'Aborting', 'gdpr' ),
|
127 |
+
'continue' => esc_html__( 'Continue', 'gdpr' ),
|
128 |
+
'cancel' => esc_html__( 'Cancel', 'gdpr' ),
|
129 |
+
'ok' => esc_html__( 'OK', 'gdpr' ),
|
130 |
+
),
|
131 |
+
'is_user_logged_in' => is_user_logged_in(),
|
132 |
+
'refresh' => get_option( 'gdpr_refresh_after_preferences_update', true ),
|
133 |
+
)
|
134 |
+
);
|
135 |
}
|
136 |
|
137 |
/**
|
162 |
*/
|
163 |
public function privacy_preferences_modal() {
|
164 |
$cookie_privacy_excerpt = get_option( 'gdpr_cookie_privacy_excerpt', '' );
|
165 |
+
$consent_types = get_option( 'gdpr_consent_types', array() );
|
166 |
+
$approved_cookies = isset( $_COOKIE['gdpr']['allowed_cookies'] ) ? json_decode( wp_unslash( $_COOKIE['gdpr']['allowed_cookies'] ) ) : array(); // WPCS: Input var ok, sanitization ok..
|
167 |
+
$user_consents = isset( $_COOKIE['gdpr']['consent_types'] ) ? json_decode( wp_unslash( $_COOKIE['gdpr']['consent_types'] ) ) : array(); // WPCS: Input var ok, sanitization ok.
|
168 |
+
$tabs = get_option( 'gdpr_cookie_popup_content', array() );
|
169 |
|
170 |
include plugin_dir_path( __FILE__ ) . 'partials/privacy-preferences-modal.php';
|
171 |
}
|
196 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
197 |
*/
|
198 |
public function update_privacy_preferences() {
|
199 |
+
if ( ! isset( $_POST['update-privacy-preferences-nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['update-privacy-preferences-nonce'] ), 'gdpr-update-privacy-preferences' ) ) { // WPCS: Input var ok.
|
200 |
+
wp_send_json_error(
|
201 |
+
array(
|
202 |
+
'title' => esc_html__( 'Error!', 'gdpr' ),
|
203 |
+
'content' => esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ),
|
204 |
+
)
|
205 |
+
);
|
206 |
}
|
207 |
+
$consents = isset( $_POST['user_consents'] ) ? array_map( 'sanitize_text_field', (array) wp_unslash( $_POST['user_consents'] ) ) : array(); // WPCS: Input var ok.
|
208 |
+
$cookies = isset( $_POST['approved_cookies'] ) ? array_map( 'sanitize_text_field', (array) wp_unslash( $_POST['approved_cookies'] ) ) : array(); // WPCS: Input var ok.
|
209 |
+
$all_cookies = isset( $_POST['all_cookies'] ) ? array_map( 'sanitize_text_field', (array) json_decode( wp_unslash( $_POST['all_cookies'] ) ) ) : array(); // WPCS: Input var ok, sanitization ok.
|
210 |
|
211 |
$approved_cookies = array();
|
212 |
if ( ! empty( $cookies ) ) {
|
213 |
+
foreach ( $cookies as $cookie_array ) {
|
214 |
+
$cookie_array = json_decode( wp_unslash( $cookie_array ) );
|
215 |
+
foreach ( $cookie_array as $cookie ) {
|
216 |
$approved_cookies[] = $cookie;
|
217 |
}
|
218 |
}
|
220 |
|
221 |
$cookies_to_remove = array_diff( $all_cookies, $approved_cookies );
|
222 |
|
223 |
+
$cookies_as_json = json_encode( $approved_cookies );
|
224 |
$consents_as_json = json_encode( $consents );
|
225 |
|
226 |
+
setcookie( 'gdpr[allowed_cookies]', $cookies_as_json, time() + YEAR_IN_SECONDS, '/' );
|
227 |
+
setcookie( 'gdpr[consent_types]', $consents_as_json, time() + YEAR_IN_SECONDS, '/' );
|
228 |
|
229 |
foreach ( $cookies_to_remove as $cookie ) {
|
230 |
+
if ( GDPR::similar_in_array( $cookie, array_keys( $_COOKIE ) ) ) { // WPCS: Input var ok.
|
231 |
$domain = get_site_url();
|
232 |
$domain = wp_parse_url( $domain, PHP_URL_HOST );
|
233 |
+
unset( $_COOKIE[ $cookie ] ); // WPCS: Input var ok.
|
234 |
+
setcookie( $cookie, null, -1, '/', $domain );
|
235 |
+
setcookie( $cookie, null, -1, '/', '.' . $domain );
|
236 |
}
|
237 |
}
|
238 |
|
253 |
GDPR_Audit_Log::log( $user->ID, 'Cookie: ' . $cookie );
|
254 |
}
|
255 |
}
|
|
|
256 |
}
|
257 |
|
258 |
wp_send_json_success();
|
269 |
if ( empty( $consents ) || ! is_array( $consents ) ) {
|
270 |
return;
|
271 |
}
|
272 |
+
$required_consents = array_filter(
|
273 |
+
$consents, function( $consent ) {
|
274 |
+
return ! empty( $consent['policy-page'] );
|
275 |
+
}
|
276 |
+
);
|
277 |
|
278 |
if ( ! $required_consents || ! is_user_logged_in() ) {
|
279 |
return;
|
280 |
}
|
281 |
|
282 |
+
$user = wp_get_current_user();
|
283 |
$user_consents = get_user_meta( $user->ID, 'gdpr_consents' );
|
284 |
|
285 |
+
$updated_consents = array_filter(
|
286 |
+
$required_consents, function( $consent, $consent_id ) use ( $user_consents ) {
|
287 |
+
return ! in_array( $consent_id, $user_consents, true );
|
288 |
+
}, ARRAY_FILTER_USE_BOTH
|
289 |
+
);
|
290 |
|
291 |
if ( empty( $updated_consents ) ) {
|
292 |
return;
|
301 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
302 |
*/
|
303 |
public function logout() {
|
304 |
+
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'gdpr-user_disagree_with_terms' ) ) { // WPCS: Input var ok.
|
305 |
wp_send_json_error( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
|
306 |
}
|
307 |
|
312 |
public function set_plugin_cookies() {
|
313 |
$user_id = get_current_user_id();
|
314 |
|
315 |
+
if ( ! isset( $_COOKIE['gdpr']['consent_types'] ) ) { // WPCS: Input var ok.
|
316 |
if ( ! $user_id ) {
|
317 |
+
setcookie( 'gdpr[consent_types]', '[]', time() + YEAR_IN_SECONDS, '/' );
|
318 |
} else {
|
319 |
$user_consents = get_user_meta( $user_id, 'gdpr_consents' );
|
320 |
+
setcookie( 'gdpr[consent_types]', json_encode( $user_consents ), time() + YEAR_IN_SECONDS, '/' );
|
321 |
}
|
322 |
} else {
|
323 |
if ( $user_id ) {
|
324 |
+
$user_consents = (array) get_user_meta( $user_id, 'gdpr_consents' );
|
325 |
+
$cookie_consents = (array) json_decode( wp_unslash( $_COOKIE['gdpr']['consent_types'] ) ); // WPCS: Input var ok, sanitization ok.
|
326 |
|
327 |
$intersect = array_intersect( $user_consents, $cookie_consents );
|
328 |
+
$diff = array_merge( array_diff( $user_consents, $intersect ), array_diff( $cookie_consents, $intersect ) );
|
329 |
|
330 |
if ( ! empty( $diff ) ) {
|
331 |
+
setcookie( 'gdpr[consent_types]', json_encode( $user_consents ), time() + YEAR_IN_SECONDS, '/' );
|
332 |
}
|
333 |
}
|
334 |
}
|
335 |
|
336 |
+
if ( ! isset( $_COOKIE['gdpr']['allowed_cookies'] ) ) { // WPCS: Input var ok.
|
|
|
337 |
$registered_cookies = get_option( 'gdpr_cookie_popup_content', array() );
|
338 |
+
$cookies = array();
|
339 |
if ( ! empty( $registered_cookies ) ) {
|
340 |
+
$required_cookies = array_filter(
|
341 |
+
$registered_cookies, function( $item ) {
|
342 |
+
return 'required' === $item['status'];
|
343 |
+
}
|
344 |
+
);
|
345 |
if ( ! empty( $required_cookies ) ) {
|
346 |
foreach ( $required_cookies as $category ) {
|
347 |
$cookies_used = explode( ',', $category['cookies_used'] );
|
353 |
}
|
354 |
|
355 |
if ( ! empty( $cookies ) ) {
|
356 |
+
setcookie( 'gdpr[allowed_cookies]', json_encode( $cookies ), time() + YEAR_IN_SECONDS, '/' );
|
357 |
} else {
|
358 |
+
setcookie( 'gdpr[allowed_cookies]', '[]', time() + YEAR_IN_SECONDS, '/' );
|
359 |
}
|
360 |
}
|
361 |
}
|
362 |
|
363 |
public function agree_with_new_policies() {
|
364 |
+
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'gdpr-agree-with-new-policies' ) ) { // WPCS: Input var ok.
|
365 |
+
wp_send_json_error(
|
366 |
+
array(
|
367 |
+
'title' => esc_html__( 'Error!', 'gdpr' ),
|
368 |
+
'content' => esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ),
|
369 |
+
)
|
370 |
+
);
|
371 |
}
|
372 |
+
$consents = isset( $_POST['consents'] ) ? array_map( 'sanitize_text_field', (array) wp_unslash( $_POST['consents'] ) ) : array(); // WPCS: Input var ok.
|
373 |
+
$user_id = get_current_user_id();
|
374 |
|
375 |
foreach ( $consents as $consent ) {
|
376 |
add_user_meta( $user_id, 'gdpr_consents', $consent );
|
public/class-gdpr-requests-public.php
CHANGED
@@ -54,11 +54,12 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
54 |
* @since 1.0.0
|
55 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
56 |
* @static
|
57 |
-
* @param string $type
|
|
|
58 |
* @return mixed Print the form html.
|
59 |
*/
|
60 |
-
public static function request_form( $type ) {
|
61 |
-
if ( ! in_array( $type, parent::$allowed_types ) ) {
|
62 |
return;
|
63 |
}
|
64 |
|
@@ -74,61 +75,87 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
74 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
75 |
*/
|
76 |
public function send_request_email() {
|
77 |
-
if ( ! isset( $_POST['
|
78 |
-
wp_send_json_error(
|
|
|
|
|
|
|
|
|
|
|
79 |
}
|
80 |
|
81 |
-
if ( ! isset( $_POST['
|
82 |
-
wp_send_json_error(
|
|
|
|
|
|
|
|
|
|
|
83 |
}
|
84 |
|
85 |
$use_recaptcha = get_option( 'gdpr_use_recaptcha', false );
|
86 |
if ( $use_recaptcha ) {
|
87 |
-
$site_key
|
88 |
$secret_key = get_option( 'gdpr_recaptcha_secret_key', '' );
|
89 |
|
90 |
if ( $site_key && $secret_key ) {
|
91 |
-
if ( ! isset( $_POST['g-recaptcha-response'] ) || ! $_POST['g-recaptcha-response'] ) {
|
92 |
-
wp_send_json_error(
|
|
|
|
|
|
|
|
|
|
|
93 |
}
|
94 |
|
95 |
-
$response = wp_remote_post(
|
96 |
-
'
|
97 |
-
'
|
98 |
-
|
99 |
-
|
100 |
-
|
|
|
|
|
101 |
|
102 |
$recaptcha_result = wp_remote_retrieve_body( $response );
|
103 |
$recaptcha_result = json_decode( $recaptcha_result );
|
104 |
if ( ! $recaptcha_result || ! $recaptcha_result->success ) {
|
105 |
-
wp_send_json_error(
|
|
|
|
|
|
|
|
|
|
|
106 |
}
|
107 |
-
|
108 |
}
|
109 |
}
|
110 |
|
111 |
-
$type = sanitize_text_field( wp_unslash( $_POST['type'] ) );
|
112 |
-
$data = isset( $_POST['data'] ) ? sanitize_textarea_field( $_POST['data'] ) : '';
|
113 |
|
114 |
if ( is_user_logged_in() ) {
|
115 |
$user = wp_get_current_user();
|
116 |
} else {
|
117 |
-
$user = isset( $_POST['user_email'] ) ? get_user_by( 'email', sanitize_email( $_POST['user_email'] ) ) : null;
|
118 |
}
|
119 |
|
120 |
if ( ! $user instanceof WP_User ) {
|
121 |
-
wp_send_json_error(
|
|
|
|
|
|
|
|
|
|
|
122 |
}
|
123 |
|
124 |
$email_args = array(
|
125 |
'forgot_password_url' => add_query_arg(
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
),
|
133 |
);
|
134 |
|
@@ -136,12 +163,19 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
136 |
|
137 |
switch ( $type ) {
|
138 |
case 'delete':
|
139 |
-
if ( in_array( 'administrator', $user->roles ) ) {
|
140 |
-
$admins_query = new WP_User_Query(
|
141 |
-
|
142 |
-
|
|
|
|
|
143 |
if ( 1 === $admins_query->get_total() ) {
|
144 |
-
wp_send_json_error(
|
|
|
|
|
|
|
|
|
|
|
145 |
}
|
146 |
}
|
147 |
break;
|
@@ -149,7 +183,12 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
149 |
case 'rectify':
|
150 |
case 'complaint':
|
151 |
if ( ! $data ) {
|
152 |
-
wp_send_json_error(
|
|
|
|
|
|
|
|
|
|
|
153 |
}
|
154 |
$email_args['data'] = $data;
|
155 |
break;
|
@@ -158,44 +197,53 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
158 |
$key = parent::add_to_requests( $user->user_email, $type, $data );
|
159 |
|
160 |
if ( 'export-data' !== $type ) {
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
169 |
} else {
|
170 |
-
$email_args['confirm_url_xml']
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
$email_args['confirm_url_json'] = add_query_arg(
|
180 |
-
|
181 |
-
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
}
|
189 |
|
190 |
-
|
191 |
if ( GDPR_Email::send(
|
192 |
$user->user_email,
|
193 |
"{$type}-request",
|
194 |
$email_args
|
195 |
) ) {
|
196 |
-
wp_send_json_success(
|
|
|
|
|
|
|
|
|
|
|
197 |
} else {
|
198 |
-
wp_send_json_error(
|
|
|
|
|
|
|
|
|
|
|
199 |
}
|
200 |
}
|
201 |
|
@@ -206,13 +254,13 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
206 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
207 |
*/
|
208 |
public function request_confirmed() {
|
209 |
-
if ( is_admin() || ! isset( $_GET['type'], $_GET['key'], $_GET['email'] ) ) {
|
210 |
return;
|
211 |
}
|
212 |
|
213 |
-
$type
|
214 |
-
$key
|
215 |
-
$email
|
216 |
$notification_email = sanitize_email( apply_filters( 'gdpr_admin_notification_email', get_option( 'admin_email' ) ) );
|
217 |
|
218 |
$user = get_user_by( 'email', $email );
|
@@ -222,7 +270,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
222 |
add_query_arg(
|
223 |
array(
|
224 |
'user-not-found' => 1,
|
225 |
-
'notify'
|
226 |
),
|
227 |
home_url()
|
228 |
)
|
@@ -238,7 +286,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
238 |
add_query_arg(
|
239 |
array(
|
240 |
'request-key-not-found' => 1,
|
241 |
-
'notify'
|
242 |
),
|
243 |
home_url()
|
244 |
)
|
@@ -253,7 +301,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
253 |
add_query_arg(
|
254 |
array(
|
255 |
'request-key-not-match' => 1,
|
256 |
-
'notify'
|
257 |
),
|
258 |
home_url()
|
259 |
)
|
@@ -262,12 +310,12 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
262 |
exit;
|
263 |
} else {
|
264 |
$notification_email_args = array(
|
265 |
-
'type'
|
266 |
'review_url' => add_query_arg( array( 'page' => 'gdpr-requests#' . $type ), admin_url() ),
|
267 |
);
|
268 |
switch ( $type ) {
|
269 |
case 'delete':
|
270 |
-
$found_posts
|
271 |
$needs_review = get_option( 'gdpr_deletion_needs_review', true );
|
272 |
if ( $found_posts || $needs_review ) {
|
273 |
parent::confirm_request( $key );
|
@@ -282,7 +330,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
282 |
add_query_arg(
|
283 |
array(
|
284 |
'user-deleted' => 0,
|
285 |
-
'notify'
|
286 |
),
|
287 |
home_url()
|
288 |
)
|
@@ -296,7 +344,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
296 |
add_query_arg(
|
297 |
array(
|
298 |
'user-deleted' => 1,
|
299 |
-
'notify'
|
300 |
),
|
301 |
home_url()
|
302 |
)
|
@@ -316,7 +364,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
316 |
add_query_arg(
|
317 |
array(
|
318 |
'request-confirmed' => 1,
|
319 |
-
'notify'
|
320 |
),
|
321 |
home_url()
|
322 |
)
|
@@ -325,7 +373,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
325 |
exit;
|
326 |
break;
|
327 |
case 'export-data':
|
328 |
-
$format = isset( $_GET['format'] ) ? sanitize_text_field( wp_unslash( $_GET['format'] ) ) : 'xml';
|
329 |
/* translators: File format. Can be XML or JSON */
|
330 |
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'User downloaded all their data in %s format.', 'gdpr' ), $format ) );
|
331 |
$this->file_export_data( $user->user_email, $format, $key );
|
@@ -349,10 +397,10 @@ class GDPR_Requests_Public extends GDPR_Requests {
|
|
349 |
$export = GDPR::generate_export( $email, $format );
|
350 |
if ( $export ) {
|
351 |
parent::remove_from_requests( $key );
|
352 |
-
header('Content-Type: application/octet-stream');
|
353 |
-
header('Content-Description: File Transfer');
|
354 |
-
header('Content-Disposition: attachment; filename=' .
|
355 |
-
echo $export;
|
356 |
}
|
357 |
die();
|
358 |
}
|
54 |
* @since 1.0.0
|
55 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
56 |
* @static
|
57 |
+
* @param string $type The type of request to display the correct form.
|
58 |
+
* @param string $button_text The submit button text.
|
59 |
* @return mixed Print the form html.
|
60 |
*/
|
61 |
+
public static function request_form( $type, $submit_button_text = '' ) {
|
62 |
+
if ( ! in_array( $type, parent::$allowed_types, true ) ) {
|
63 |
return;
|
64 |
}
|
65 |
|
75 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
76 |
*/
|
77 |
public function send_request_email() {
|
78 |
+
if ( ! isset( $_POST['gdpr_request_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['gdpr_request_nonce'] ), 'gdpr-add-to-requests' ) ) { // WPCS: Input var ok.
|
79 |
+
wp_send_json_error(
|
80 |
+
array(
|
81 |
+
'title' => esc_html__( 'Error!', 'gdpr' ),
|
82 |
+
'content' => esc_html__( 'We could not verify the security token. Please try again.', 'gdpr' ),
|
83 |
+
)
|
84 |
+
);
|
85 |
}
|
86 |
|
87 |
+
if ( ! isset( $_POST['type'] ) || ! in_array( sanitize_text_field( wp_unslash( $_POST['type'] ) ), parent::$allowed_types, true ) ) { // WPCS: Input var ok.
|
88 |
+
wp_send_json_error(
|
89 |
+
array(
|
90 |
+
'title' => esc_html__( 'Error!', 'gdpr' ),
|
91 |
+
'content' => esc_html__( 'Invalid type of request. Please try again.', 'gdpr' ),
|
92 |
+
)
|
93 |
+
);
|
94 |
}
|
95 |
|
96 |
$use_recaptcha = get_option( 'gdpr_use_recaptcha', false );
|
97 |
if ( $use_recaptcha ) {
|
98 |
+
$site_key = get_option( 'gdpr_recaptcha_site_key', '' );
|
99 |
$secret_key = get_option( 'gdpr_recaptcha_secret_key', '' );
|
100 |
|
101 |
if ( $site_key && $secret_key ) {
|
102 |
+
if ( ! isset( $_POST['g-recaptcha-response'] ) || ! sanitize_text_field( wp_unslash( $_POST['g-recaptcha-response'] ) ) ) { // WPCS: Input var ok.
|
103 |
+
wp_send_json_error(
|
104 |
+
array(
|
105 |
+
'title' => esc_html__( 'Error!', 'gdpr' ),
|
106 |
+
'content' => esc_html__( 'Please verify that you are not a robot.', 'gdpr' ),
|
107 |
+
)
|
108 |
+
);
|
109 |
}
|
110 |
|
111 |
+
$response = wp_remote_post(
|
112 |
+
'https://www.google.com/recaptcha/api/siteverify', array(
|
113 |
+
'body' => array(
|
114 |
+
'secret' => $secret_key,
|
115 |
+
'response' => sanitize_text_field( wp_unslash( $_POST['g-recaptcha-response'] ) ), // WPCS: Input var ok.
|
116 |
+
),
|
117 |
+
)
|
118 |
+
);
|
119 |
|
120 |
$recaptcha_result = wp_remote_retrieve_body( $response );
|
121 |
$recaptcha_result = json_decode( $recaptcha_result );
|
122 |
if ( ! $recaptcha_result || ! $recaptcha_result->success ) {
|
123 |
+
wp_send_json_error(
|
124 |
+
array(
|
125 |
+
'title' => esc_html__( 'Error!', 'gdpr' ),
|
126 |
+
'content' => esc_html__( 'Please verify that you are not a robot.', 'gdpr' ),
|
127 |
+
)
|
128 |
+
);
|
129 |
}
|
|
|
130 |
}
|
131 |
}
|
132 |
|
133 |
+
$type = sanitize_text_field( wp_unslash( $_POST['type'] ) ); // WPCS: Input var ok.
|
134 |
+
$data = isset( $_POST['data'] ) ? sanitize_textarea_field( wp_unslash( $_POST['data'] ) ) : ''; // WPCS: Input var ok.
|
135 |
|
136 |
if ( is_user_logged_in() ) {
|
137 |
$user = wp_get_current_user();
|
138 |
} else {
|
139 |
+
$user = isset( $_POST['user_email'] ) ? get_user_by( 'email', sanitize_email( wp_unslash( $_POST['user_email'] ) ) ) : null; // WPCS: Input var ok.
|
140 |
}
|
141 |
|
142 |
if ( ! $user instanceof WP_User ) {
|
143 |
+
wp_send_json_error(
|
144 |
+
array(
|
145 |
+
'title' => esc_html__( 'Error!', 'gdpr' ),
|
146 |
+
'content' => esc_html__( 'User not found.', 'gdpr' ),
|
147 |
+
)
|
148 |
+
);
|
149 |
}
|
150 |
|
151 |
$email_args = array(
|
152 |
'forgot_password_url' => add_query_arg(
|
153 |
+
array(
|
154 |
+
'action' => 'rp',
|
155 |
+
'key' => get_password_reset_key( $user ),
|
156 |
+
'login' => $user->user_login,
|
157 |
+
),
|
158 |
+
wp_login_url()
|
159 |
),
|
160 |
);
|
161 |
|
163 |
|
164 |
switch ( $type ) {
|
165 |
case 'delete':
|
166 |
+
if ( in_array( 'administrator', $user->roles, true ) ) {
|
167 |
+
$admins_query = new WP_User_Query(
|
168 |
+
array(
|
169 |
+
'role' => 'Administrator',
|
170 |
+
)
|
171 |
+
);
|
172 |
if ( 1 === $admins_query->get_total() ) {
|
173 |
+
wp_send_json_error(
|
174 |
+
array(
|
175 |
+
'title' => esc_html__( 'Error!', 'gdpr' ),
|
176 |
+
'content' => esc_html__( 'We can\'t delete this user.', 'gdpr' ),
|
177 |
+
)
|
178 |
+
);
|
179 |
}
|
180 |
}
|
181 |
break;
|
183 |
case 'rectify':
|
184 |
case 'complaint':
|
185 |
if ( ! $data ) {
|
186 |
+
wp_send_json_error(
|
187 |
+
array(
|
188 |
+
'title' => esc_html__( 'Error!', 'gdpr' ),
|
189 |
+
'content' => esc_html__( 'Required information is missing from the form.', 'gdpr' ),
|
190 |
+
)
|
191 |
+
);
|
192 |
}
|
193 |
$email_args['data'] = $data;
|
194 |
break;
|
197 |
$key = parent::add_to_requests( $user->user_email, $type, $data );
|
198 |
|
199 |
if ( 'export-data' !== $type ) {
|
200 |
+
$email_args['confirm_url'] = add_query_arg(
|
201 |
+
array(
|
202 |
+
'type' => $type,
|
203 |
+
'key' => $key,
|
204 |
+
'email' => $user->user_email,
|
205 |
+
),
|
206 |
+
home_url()
|
207 |
+
);
|
208 |
} else {
|
209 |
+
$email_args['confirm_url_xml'] = add_query_arg(
|
210 |
+
array(
|
211 |
+
'type' => $type,
|
212 |
+
'key' => $key,
|
213 |
+
'email' => $user->user_email,
|
214 |
+
'format' => 'xml',
|
215 |
+
),
|
216 |
+
home_url()
|
217 |
+
);
|
218 |
$email_args['confirm_url_json'] = add_query_arg(
|
219 |
+
array(
|
220 |
+
'type' => $type,
|
221 |
+
'key' => $key,
|
222 |
+
'email' => $user->user_email,
|
223 |
+
'format' => 'json',
|
224 |
+
),
|
225 |
+
home_url()
|
226 |
+
);
|
227 |
}
|
228 |
|
|
|
229 |
if ( GDPR_Email::send(
|
230 |
$user->user_email,
|
231 |
"{$type}-request",
|
232 |
$email_args
|
233 |
) ) {
|
234 |
+
wp_send_json_success(
|
235 |
+
array(
|
236 |
+
'title' => esc_html__( 'Email confirmation', 'gdpr' ),
|
237 |
+
'content' => esc_html__( 'We\'ve sent you a confirmation email.', 'gdpr' ),
|
238 |
+
)
|
239 |
+
);
|
240 |
} else {
|
241 |
+
wp_send_json_error(
|
242 |
+
array(
|
243 |
+
'title' => esc_html__( 'Error!', 'gdpr' ),
|
244 |
+
'content' => esc_html__( 'There was a problem with your request. Please try again later.', 'gdpr' ),
|
245 |
+
)
|
246 |
+
);
|
247 |
}
|
248 |
}
|
249 |
|
254 |
* @author Fernando Claussen <fernandoclaussen@gmail.com>
|
255 |
*/
|
256 |
public function request_confirmed() {
|
257 |
+
if ( is_admin() || ! isset( $_GET['type'], $_GET['key'], $_GET['email'] ) ) { // WPCS: Input var ok CSRF ok.
|
258 |
return;
|
259 |
}
|
260 |
|
261 |
+
$type = sanitize_text_field( wp_unslash( $_GET['type'] ) ); // WPCS: Input var ok, CSRF ok.
|
262 |
+
$key = sanitize_text_field( wp_unslash( $_GET['key'] ) ); // WPCS: Input var ok, CSRF ok.
|
263 |
+
$email = sanitize_email( wp_unslash( $_GET['email'] ) ); // WPCS: Input var ok, CSRF ok.
|
264 |
$notification_email = sanitize_email( apply_filters( 'gdpr_admin_notification_email', get_option( 'admin_email' ) ) );
|
265 |
|
266 |
$user = get_user_by( 'email', $email );
|
270 |
add_query_arg(
|
271 |
array(
|
272 |
'user-not-found' => 1,
|
273 |
+
'notify' => 1,
|
274 |
),
|
275 |
home_url()
|
276 |
)
|
286 |
add_query_arg(
|
287 |
array(
|
288 |
'request-key-not-found' => 1,
|
289 |
+
'notify' => 1,
|
290 |
),
|
291 |
home_url()
|
292 |
)
|
301 |
add_query_arg(
|
302 |
array(
|
303 |
'request-key-not-match' => 1,
|
304 |
+
'notify' => 1,
|
305 |
),
|
306 |
home_url()
|
307 |
)
|
310 |
exit;
|
311 |
} else {
|
312 |
$notification_email_args = array(
|
313 |
+
'type' => $type,
|
314 |
'review_url' => add_query_arg( array( 'page' => 'gdpr-requests#' . $type ), admin_url() ),
|
315 |
);
|
316 |
switch ( $type ) {
|
317 |
case 'delete':
|
318 |
+
$found_posts = parent::user_has_content( $user );
|
319 |
$needs_review = get_option( 'gdpr_deletion_needs_review', true );
|
320 |
if ( $found_posts || $needs_review ) {
|
321 |
parent::confirm_request( $key );
|
330 |
add_query_arg(
|
331 |
array(
|
332 |
'user-deleted' => 0,
|
333 |
+
'notify' => 1,
|
334 |
),
|
335 |
home_url()
|
336 |
)
|
344 |
add_query_arg(
|
345 |
array(
|
346 |
'user-deleted' => 1,
|
347 |
+
'notify' => 1,
|
348 |
),
|
349 |
home_url()
|
350 |
)
|
364 |
add_query_arg(
|
365 |
array(
|
366 |
'request-confirmed' => 1,
|
367 |
+
'notify' => 1,
|
368 |
),
|
369 |
home_url()
|
370 |
)
|
373 |
exit;
|
374 |
break;
|
375 |
case 'export-data':
|
376 |
+
$format = isset( $_GET['format'] ) ? sanitize_text_field( wp_unslash( $_GET['format'] ) ) : 'xml'; // WPCS: Input var ok, CSRF ok.
|
377 |
/* translators: File format. Can be XML or JSON */
|
378 |
GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( 'User downloaded all their data in %s format.', 'gdpr' ), $format ) );
|
379 |
$this->file_export_data( $user->user_email, $format, $key );
|
397 |
$export = GDPR::generate_export( $email, $format );
|
398 |
if ( $export ) {
|
399 |
parent::remove_from_requests( $key );
|
400 |
+
header( 'Content-Type: application/octet-stream' );
|
401 |
+
header( 'Content-Description: File Transfer' );
|
402 |
+
header( 'Content-Disposition: attachment; filename=' . $email . '.' . $format );
|
403 |
+
echo $export; // WPCS: XSS ok.
|
404 |
}
|
405 |
die();
|
406 |
}
|
public/partials/complaint-form.php
CHANGED
@@ -2,12 +2,12 @@
|
|
2 |
<?php wp_nonce_field( 'gdpr-add-to-requests', 'gdpr_request_nonce' ); ?>
|
3 |
<input type="hidden" name="action" value="gdpr_send_request_email">
|
4 |
<input type="hidden" name="type" value="complaint">
|
5 |
-
<?php if ( ! is_user_logged_in() ): ?>
|
6 |
-
<input type="email" name="user_email" placeholder="
|
7 |
<?php endif ?>
|
8 |
-
<textarea name="data" rows="5" required placeholder="<?php
|
9 |
|
10 |
<?php GDPR_Public::add_recaptcha(); ?>
|
11 |
-
<?php $submit_button_text =
|
12 |
<input type="submit" value="<?php echo esc_attr( $submit_button_text ); ?>">
|
13 |
</form>
|
2 |
<?php wp_nonce_field( 'gdpr-add-to-requests', 'gdpr_request_nonce' ); ?>
|
3 |
<input type="hidden" name="action" value="gdpr_send_request_email">
|
4 |
<input type="hidden" name="type" value="complaint">
|
5 |
+
<?php if ( ! is_user_logged_in() ) : ?>
|
6 |
+
<input type="email" name="user_email" placeholder="<?php esc_attr_e( 'email@domain.com', 'gdpr' ); ?>" required>
|
7 |
<?php endif ?>
|
8 |
+
<textarea name="data" rows="5" required placeholder="<?php esc_attr_e( 'Type your complaint here', 'gdpr' ); ?>"></textarea>
|
9 |
|
10 |
<?php GDPR_Public::add_recaptcha(); ?>
|
11 |
+
<?php $submit_button_text = ( $submit_button_text ?: esc_attr__( 'Submit', 'gdpr' ) ); ?>
|
12 |
<input type="submit" value="<?php echo esc_attr( $submit_button_text ); ?>">
|
13 |
</form>
|
public/partials/confirmation-screens.php
CHANGED
@@ -13,34 +13,31 @@
|
|
13 |
|
14 |
<?php
|
15 |
$title = '';
|
16 |
-
$text
|
17 |
-
if ( isset( $_GET['notify'] ) && $_GET['notify'] ) :
|
|
|
18 |
<?php
|
19 |
-
if ( isset( $_GET['user-deleted'] ) ) {
|
20 |
$title = __( 'Your account', 'gdpr' );
|
21 |
-
if ( $_GET['user-deleted'] ) {
|
22 |
$text = __( 'Your account has been closed. We are sorry to see you go.', 'gdpr' );
|
23 |
} else {
|
24 |
$text = __( 'Your request has been received and is being reviewed. You will receive an email when we are done.', 'gdpr' );
|
25 |
}
|
26 |
}
|
27 |
-
if ( isset( $_GET['request-confirmed'] ) && $_GET['request-confirmed'] ) {
|
28 |
$title = __( 'Request Received', 'gdpr' );
|
29 |
$text = __( 'Your request has been received. We will be in touch soon.', 'gdpr' );
|
30 |
}
|
31 |
-
if ( isset( $_GET['
|
32 |
-
$title = __( 'Error!', 'gdpr' );
|
33 |
-
$text = __( 'Malformed request confirmation link!', 'gdpr' );
|
34 |
-
}
|
35 |
-
if ( isset( $_GET['user-not-found'] ) && $_GET['user-not-found'] ) {
|
36 |
$title = __( 'Error!', 'gdpr' );
|
37 |
$text = __( 'User not found.', 'gdpr' );
|
38 |
}
|
39 |
-
if ( isset( $_GET['request-key-not-found'] ) && $_GET['request-key-not-found'] ) {
|
40 |
$title = __( 'Error!', 'gdpr' );
|
41 |
$text = __( 'We could not confirm the request key. It may be expired.', 'gdpr' );
|
42 |
}
|
43 |
-
if ( isset( $_GET['request-key-not-match'] ) && $_GET['request-key-not-match'] ) {
|
44 |
$title = __( 'Error!', 'gdpr' );
|
45 |
$text = __( 'The key used does not match the request key we have stored.', 'gdpr' );
|
46 |
}
|
@@ -58,7 +55,7 @@ if ( isset( $_GET['notify'] ) && $_GET['notify'] ) : ?>
|
|
58 |
<p><?php echo esc_html( $text ); ?></p>
|
59 |
</div>
|
60 |
<footer>
|
61 |
-
<button class="gdpr-ok"><?php esc_html_e( 'OK', 'gdpr' ) ?></button>
|
62 |
</footer>
|
63 |
</div>
|
64 |
</div>
|
13 |
|
14 |
<?php
|
15 |
$title = '';
|
16 |
+
$text = '';
|
17 |
+
if ( isset( $_GET['notify'] ) && absint( $_GET['notify'] ) ) : // WPCS: Input var ok, CSRF ok.
|
18 |
+
?>
|
19 |
<?php
|
20 |
+
if ( isset( $_GET['user-deleted'] ) ) { // WPCS: Input var ok, CSRF ok.
|
21 |
$title = __( 'Your account', 'gdpr' );
|
22 |
+
if ( absint( $_GET['user-deleted'] ) ) { // WPCS: Input var ok, CSRF ok.
|
23 |
$text = __( 'Your account has been closed. We are sorry to see you go.', 'gdpr' );
|
24 |
} else {
|
25 |
$text = __( 'Your request has been received and is being reviewed. You will receive an email when we are done.', 'gdpr' );
|
26 |
}
|
27 |
}
|
28 |
+
if ( isset( $_GET['request-confirmed'] ) && absint( $_GET['request-confirmed'] ) ) { // WPCS: Input var ok, CSRF ok.
|
29 |
$title = __( 'Request Received', 'gdpr' );
|
30 |
$text = __( 'Your request has been received. We will be in touch soon.', 'gdpr' );
|
31 |
}
|
32 |
+
if ( isset( $_GET['user-not-found'] ) && absint( $_GET['user-not-found'] ) ) { // WPCS: Input var ok CSRF ok.
|
|
|
|
|
|
|
|
|
33 |
$title = __( 'Error!', 'gdpr' );
|
34 |
$text = __( 'User not found.', 'gdpr' );
|
35 |
}
|
36 |
+
if ( isset( $_GET['request-key-not-found'] ) && absint( $_GET['request-key-not-found'] ) ) { // WPCS: Input var ok, CSRF ok.
|
37 |
$title = __( 'Error!', 'gdpr' );
|
38 |
$text = __( 'We could not confirm the request key. It may be expired.', 'gdpr' );
|
39 |
}
|
40 |
+
if ( isset( $_GET['request-key-not-match'] ) && absint( $_GET['request-key-not-match'] ) ) { // WPCS: Input var ok, CSRF ok.
|
41 |
$title = __( 'Error!', 'gdpr' );
|
42 |
$text = __( 'The key used does not match the request key we have stored.', 'gdpr' );
|
43 |
}
|
55 |
<p><?php echo esc_html( $text ); ?></p>
|
56 |
</div>
|
57 |
<footer>
|
58 |
+
<button class="gdpr-ok"><?php esc_html_e( 'OK', 'gdpr' ); ?></button>
|
59 |
</footer>
|
60 |
</div>
|
61 |
</div>
|
public/partials/delete-form.php
CHANGED
@@ -15,10 +15,10 @@
|
|
15 |
<?php wp_nonce_field( 'gdpr-add-to-requests', 'gdpr_request_nonce' ); ?>
|
16 |
<input type="hidden" name="action" value="gdpr_send_request_email">
|
17 |
<input type="hidden" name="type" value="delete">
|
18 |
-
<?php if ( ! is_user_logged_in() ): ?>
|
19 |
-
<input type="email" name="user_email" placeholder="
|
20 |
<?php endif ?>
|
21 |
<?php GDPR_Public::add_recaptcha(); ?>
|
22 |
-
<?php $submit_button_text =
|
23 |
<input type="submit" value="<?php echo esc_attr( $submit_button_text ); ?>">
|
24 |
</form>
|
15 |
<?php wp_nonce_field( 'gdpr-add-to-requests', 'gdpr_request_nonce' ); ?>
|
16 |
<input type="hidden" name="action" value="gdpr_send_request_email">
|
17 |
<input type="hidden" name="type" value="delete">
|
18 |
+
<?php if ( ! is_user_logged_in() ) : ?>
|
19 |
+
<input type="email" name="user_email" placeholder="<?php esc_attr_e( 'email@domain.com', 'gdpr' ); ?>" required>
|
20 |
<?php endif ?>
|
21 |
<?php GDPR_Public::add_recaptcha(); ?>
|
22 |
+
<?php $submit_button_text = ( $submit_button_text ?: esc_attr__( 'Close my account', 'gdpr' ) ); ?>
|
23 |
<input type="submit" value="<?php echo esc_attr( $submit_button_text ); ?>">
|
24 |
</form>
|
public/partials/export-data-form.php
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
<?php wp_nonce_field( 'gdpr-add-to-requests', 'gdpr_request_nonce' ); ?>
|
3 |
<input type="hidden" name="action" value="gdpr_send_request_email">
|
4 |
<input type="hidden" name="type" value="export-data">
|
5 |
-
<?php if ( ! is_user_logged_in() ): ?>
|
6 |
-
<input type="email" name="user_email" placeholder="
|
7 |
<?php endif ?>
|
8 |
<?php GDPR_Public::add_recaptcha(); ?>
|
9 |
-
<?php $submit_button_text =
|
10 |
<input type="submit" value="<?php echo esc_attr( $submit_button_text ); ?>">
|
11 |
</form>
|
2 |
<?php wp_nonce_field( 'gdpr-add-to-requests', 'gdpr_request_nonce' ); ?>
|
3 |
<input type="hidden" name="action" value="gdpr_send_request_email">
|
4 |
<input type="hidden" name="type" value="export-data">
|
5 |
+
<?php if ( ! is_user_logged_in() ) : ?>
|
6 |
+
<input type="email" name="user_email" placeholder="<?php esc_attr_e( 'email@domain.com', 'gdpr' ); ?>" required>
|
7 |
<?php endif ?>
|
8 |
<?php GDPR_Public::add_recaptcha(); ?>
|
9 |
+
<?php $submit_button_text = ( $submit_button_text ?: esc_attr__( 'Download my data', 'gdpr' ) ); ?>
|
10 |
<input type="submit" value="<?php echo esc_attr( $submit_button_text ); ?>">
|
11 |
</form>
|
public/partials/privacy-bar.php
CHANGED
@@ -19,7 +19,7 @@
|
|
19 |
</div>
|
20 |
<div class="gdpr-right">
|
21 |
<ul class="gdpr-cookie-categories">
|
22 |
-
<?php if ( $show_cookie_cat_checkboxes ): ?>
|
23 |
<?php foreach ( $registered_cookies as $cookie_cat_id => $cookie_cat ) : ?>
|
24 |
<?php
|
25 |
$enabled = ( 'off' === $cookie_cat['status'] ) ? false : true;
|
19 |
</div>
|
20 |
<div class="gdpr-right">
|
21 |
<ul class="gdpr-cookie-categories">
|
22 |
+
<?php if ( $show_cookie_cat_checkboxes ) : ?>
|
23 |
<?php foreach ( $registered_cookies as $cookie_cat_id => $cookie_cat ) : ?>
|
24 |
<?php
|
25 |
$enabled = ( 'off' === $cookie_cat['status'] ) ? false : true;
|
public/partials/privacy-preferences-modal.php
CHANGED
@@ -31,7 +31,7 @@
|
|
31 |
<ul class="">
|
32 |
<li><button type="button" class="gdpr-tab-button gdpr-active" data-target="gdpr-consent-management"><?php esc_html_e( 'Consent Management', 'gdpr' ); ?></button></li>
|
33 |
<?php reset( $tabs ); ?>
|
34 |
-
<?php if ( ! empty( $tabs ) ): ?>
|
35 |
<li><button type="button" class="gdpr-tab-button gdpr-cookie-settings" data-target="<?php echo esc_attr( key( $tabs ) ); ?>"><?php esc_html_e( 'Cookie Settings', 'gdpr' ); ?></button>
|
36 |
<ul class="gdpr-subtabs">
|
37 |
<?php
|
@@ -47,11 +47,13 @@
|
|
47 |
<?php endif ?>
|
48 |
</ul>
|
49 |
<ul class="gdpr-policies">
|
50 |
-
<?php if ( ! empty( $consent_types ) ): ?>
|
51 |
<?php foreach ( $consent_types as $consent_key => $type ) : ?>
|
52 |
-
<?php
|
|
|
53 |
continue;
|
54 |
-
}
|
|
|
55 |
<li><a href="<?php echo esc_url( get_permalink( $type['policy-page'] ) ); ?>" target="_blank"><?php echo esc_html( $type['name'] ); ?></a></li>
|
56 |
<?php endforeach; ?>
|
57 |
<?php endif; ?>
|
@@ -64,7 +66,7 @@
|
|
64 |
</header>
|
65 |
<div class="gdpr-info">
|
66 |
<p><?php echo nl2br( esc_html( $cookie_privacy_excerpt ) ); ?></p>
|
67 |
-
<?php if ( ! empty( $consent_types ) ): ?>
|
68 |
<?php foreach ( $consent_types as $consent_key => $type ) : ?>
|
69 |
<div class="gdpr-cookies-used">
|
70 |
<div class="gdpr-cookie-title">
|
@@ -94,21 +96,21 @@
|
|
94 |
<h4><?php echo esc_html( $tab['name'] ); ?></h4>
|
95 |
</header><!-- /header -->
|
96 |
<div class="gdpr-info">
|
97 |
-
<p><?php echo nl2br( $tab['how_we_use'] ); ?></p>
|
98 |
<?php if ( isset( $tab['cookies_used'] ) && $tab['cookies_used'] ) : ?>
|
99 |
<div class="gdpr-cookies-used">
|
100 |
<div class="gdpr-cookie-title">
|
101 |
<p><?php esc_html_e( 'Cookies Used', 'gdpr' ); ?></p>
|
102 |
<?php
|
103 |
-
$site_cookies
|
104 |
-
$enabled
|
105 |
-
$cookies_used
|
106 |
-
$approved_cookies = isset( $_COOKIE['gdpr']['allowed_cookies'] ) ? json_decode( wp_unslash( $_COOKIE['gdpr']['allowed_cookies'] ) ) : array();
|
107 |
foreach ( $cookies_used as $cookie ) {
|
108 |
$site_cookies[] = trim( $cookie );
|
109 |
-
$all_cookies[]
|
110 |
-
if ( ! empty( $approved_cookies ) ) {
|
111 |
-
if ( in_array( trim( $cookie ), $approved_cookies ) ) {
|
112 |
$enabled = true;
|
113 |
} else {
|
114 |
$enabled = false;
|
@@ -118,10 +120,10 @@
|
|
118 |
?>
|
119 |
<?php if ( 'required' === $tab['status'] ) : ?>
|
120 |
<span class="gdpr-always-active"><?php esc_html_e( 'Required', 'gdpr' ); ?></span>
|
121 |
-
<input type="hidden" name="approved_cookies[]" value="<?php echo esc_attr( json_encode( $site_cookies ) ) ?>">
|
122 |
-
<?php else: ?>
|
123 |
<label class="gdpr-switch">
|
124 |
-
<input type="checkbox" class="gdpr-cookie-category" data-category="<?php echo esc_attr( $key ); ?>" name="approved_cookies[]" value="<?php echo esc_attr( json_encode( $site_cookies ) ) ?>" <?php checked( $enabled, true ); ?>>
|
125 |
<span class="gdpr-slider round"></span>
|
126 |
</label>
|
127 |
<?php endif; ?>
|
31 |
<ul class="">
|
32 |
<li><button type="button" class="gdpr-tab-button gdpr-active" data-target="gdpr-consent-management"><?php esc_html_e( 'Consent Management', 'gdpr' ); ?></button></li>
|
33 |
<?php reset( $tabs ); ?>
|
34 |
+
<?php if ( ! empty( $tabs ) ) : ?>
|
35 |
<li><button type="button" class="gdpr-tab-button gdpr-cookie-settings" data-target="<?php echo esc_attr( key( $tabs ) ); ?>"><?php esc_html_e( 'Cookie Settings', 'gdpr' ); ?></button>
|
36 |
<ul class="gdpr-subtabs">
|
37 |
<?php
|
47 |
<?php endif ?>
|
48 |
</ul>
|
49 |
<ul class="gdpr-policies">
|
50 |
+
<?php if ( ! empty( $consent_types ) ) : ?>
|
51 |
<?php foreach ( $consent_types as $consent_key => $type ) : ?>
|
52 |
+
<?php
|
53 |
+
if ( ! $type['policy-page'] ) {
|
54 |
continue;
|
55 |
+
}
|
56 |
+
?>
|
57 |
<li><a href="<?php echo esc_url( get_permalink( $type['policy-page'] ) ); ?>" target="_blank"><?php echo esc_html( $type['name'] ); ?></a></li>
|
58 |
<?php endforeach; ?>
|
59 |
<?php endif; ?>
|
66 |
</header>
|
67 |
<div class="gdpr-info">
|
68 |
<p><?php echo nl2br( esc_html( $cookie_privacy_excerpt ) ); ?></p>
|
69 |
+
<?php if ( ! empty( $consent_types ) ) : ?>
|
70 |
<?php foreach ( $consent_types as $consent_key => $type ) : ?>
|
71 |
<div class="gdpr-cookies-used">
|
72 |
<div class="gdpr-cookie-title">
|
96 |
<h4><?php echo esc_html( $tab['name'] ); ?></h4>
|
97 |
</header><!-- /header -->
|
98 |
<div class="gdpr-info">
|
99 |
+
<p><?php echo nl2br( wp_kses_post( $tab['how_we_use'] ) ); ?></p>
|
100 |
<?php if ( isset( $tab['cookies_used'] ) && $tab['cookies_used'] ) : ?>
|
101 |
<div class="gdpr-cookies-used">
|
102 |
<div class="gdpr-cookie-title">
|
103 |
<p><?php esc_html_e( 'Cookies Used', 'gdpr' ); ?></p>
|
104 |
<?php
|
105 |
+
$site_cookies = array();
|
106 |
+
$enabled = ( 'off' === $tab['status'] ) ? false : true;
|
107 |
+
$cookies_used = explode( ',', $tab['cookies_used'] );
|
108 |
+
$approved_cookies = isset( $_COOKIE['gdpr']['allowed_cookies'] ) ? json_decode( sanitize_text_field( wp_unslash( $_COOKIE['gdpr']['allowed_cookies'] ) ) ) : array(); // WPCS: input var ok.
|
109 |
foreach ( $cookies_used as $cookie ) {
|
110 |
$site_cookies[] = trim( $cookie );
|
111 |
+
$all_cookies[] = trim( $cookie );
|
112 |
+
if ( ! empty( $approved_cookies ) && isset( $_COOKIE['gdpr']['privacy_bar'] ) ) {
|
113 |
+
if ( in_array( trim( $cookie ), $approved_cookies, true ) ) {
|
114 |
$enabled = true;
|
115 |
} else {
|
116 |
$enabled = false;
|
120 |
?>
|
121 |
<?php if ( 'required' === $tab['status'] ) : ?>
|
122 |
<span class="gdpr-always-active"><?php esc_html_e( 'Required', 'gdpr' ); ?></span>
|
123 |
+
<input type="hidden" name="approved_cookies[]" value="<?php echo esc_attr( json_encode( $site_cookies ) ); ?>">
|
124 |
+
<?php else : ?>
|
125 |
<label class="gdpr-switch">
|
126 |
+
<input type="checkbox" class="gdpr-cookie-category" data-category="<?php echo esc_attr( $key ); ?>" name="approved_cookies[]" value="<?php echo esc_attr( json_encode( $site_cookies ) ); ?>" <?php checked( $enabled, true ); ?>>
|
127 |
<span class="gdpr-slider round"></span>
|
128 |
</label>
|
129 |
<?php endif; ?>
|
public/partials/reconsent-bar.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
<div class="gdpr gdpr-reconsent-bar" style="display:none;">
|
16 |
<div class="gdpr-wrapper">
|
17 |
<div class="gdpr-content">
|
18 |
-
<p><?php esc_html_e( 'Some of our policies have been updated. Please make sure to select the "View" link next each item in order to view changes before agreeing.', 'gdpr' ); ?></p>
|
19 |
</div>
|
20 |
<div class="gdpr-right">
|
21 |
<ul class="gdpr-policy-list">
|
@@ -23,7 +23,7 @@
|
|
23 |
<li class="gdpr-policy-list-item">
|
24 |
<input type="hidden" value="<?php echo esc_attr( $consent_id ); ?>" checked>
|
25 |
<label><?php echo esc_html( $consent['name'] ); ?></label>
|
26 |
-
<a class="gdpr-policy-link" href="<?php echo esc_url( get_permalink( $consent['policy-page'] ) ); ?>" target="_blank">[<?php esc_html_e( 'View', 'gdpr' ) ?>]</a>
|
27 |
</li>
|
28 |
<?php endforeach ?>
|
29 |
</ul>
|
15 |
<div class="gdpr gdpr-reconsent-bar" style="display:none;">
|
16 |
<div class="gdpr-wrapper">
|
17 |
<div class="gdpr-content">
|
18 |
+
<p><?php esc_html_e( 'Some of our policies have been updated. Please make sure to select the "View" link next to each item in order to view changes before agreeing.', 'gdpr' ); ?></p>
|
19 |
</div>
|
20 |
<div class="gdpr-right">
|
21 |
<ul class="gdpr-policy-list">
|
23 |
<li class="gdpr-policy-list-item">
|
24 |
<input type="hidden" value="<?php echo esc_attr( $consent_id ); ?>" checked>
|
25 |
<label><?php echo esc_html( $consent['name'] ); ?></label>
|
26 |
+
<a class="gdpr-policy-link" href="<?php echo esc_url( get_permalink( $consent['policy-page'] ) ); ?>" target="_blank">[<?php esc_html_e( 'View', 'gdpr' ); ?>]</a>
|
27 |
</li>
|
28 |
<?php endforeach ?>
|
29 |
</ul>
|
public/partials/rectify-form.php
CHANGED
@@ -2,11 +2,11 @@
|
|
2 |
<?php wp_nonce_field( 'gdpr-add-to-requests', 'gdpr_request_nonce' ); ?>
|
3 |
<input type="hidden" name="action" value="gdpr_send_request_email">
|
4 |
<input type="hidden" name="type" value="rectify">
|
5 |
-
<?php if ( ! is_user_logged_in() ): ?>
|
6 |
-
<input type="email" name="user_email" placeholder="
|
7 |
<?php endif ?>
|
8 |
-
<textarea name="data" rows="5" required placeholder="<?php
|
9 |
<?php GDPR_Public::add_recaptcha(); ?>
|
10 |
-
<?php $submit_button_text =
|
11 |
<input type="submit" value="<?php echo esc_attr( $submit_button_text ); ?>">
|
12 |
</form>
|
2 |
<?php wp_nonce_field( 'gdpr-add-to-requests', 'gdpr_request_nonce' ); ?>
|
3 |
<input type="hidden" name="action" value="gdpr_send_request_email">
|
4 |
<input type="hidden" name="type" value="rectify">
|
5 |
+
<?php if ( ! is_user_logged_in() ) : ?>
|
6 |
+
<input type="email" name="user_email" placeholder="<?php esc_attr_e( 'email@domain.com', 'gdpr' ); ?>" required>
|
7 |
<?php endif ?>
|
8 |
+
<textarea name="data" rows="5" required placeholder="<?php esc_attr_e( 'Type your rectification request here', 'gdpr' ); ?>"></textarea>
|
9 |
<?php GDPR_Public::add_recaptcha(); ?>
|
10 |
+
<?php $submit_button_text = ( $submit_button_text ?: esc_attr__( 'Submit', 'gdpr' ) ); ?>
|
11 |
<input type="submit" value="<?php echo esc_attr( $submit_button_text ); ?>">
|
12 |
</form>
|
templates/email/complaint-request.php
CHANGED
@@ -1,26 +1,26 @@
|
|
1 |
<?php
|
2 |
echo sprintf(
|
3 |
-
|
4 |
-
|
5 |
'Someone placed a complaint on your behalf on our site.
|
6 |
By clicking confirm a request will be made and we will do our best to fulfil it.
|
7 |
|
8 |
--------------------------------------------------------
|
9 |
Request
|
10 |
--------------------------------------------------------
|
11 |
-
%s
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
-
To confirm this request, click here: %s
|
17 |
|
18 |
|
19 |
|
20 |
---------------------------------------------------------------------------------
|
21 |
-
If that wasn\'t you, reset your password: %s
|
22 |
', 'gdpr' ),
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
);
|
1 |
<?php
|
2 |
echo sprintf(
|
3 |
+
/* translators: 1: The complaint content, 2: confirmation link, 3: reset password link */
|
4 |
+
esc_html__(
|
5 |
'Someone placed a complaint on your behalf on our site.
|
6 |
By clicking confirm a request will be made and we will do our best to fulfil it.
|
7 |
|
8 |
--------------------------------------------------------
|
9 |
Request
|
10 |
--------------------------------------------------------
|
11 |
+
%1$s
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
+
To confirm this request, click here: %2$s
|
17 |
|
18 |
|
19 |
|
20 |
---------------------------------------------------------------------------------
|
21 |
+
If that wasn\'t you, reset your password: %3$s
|
22 |
', 'gdpr' ),
|
23 |
+
esc_html( $args['data'] ),
|
24 |
+
esc_url_raw( $args['confirm_url'] ),
|
25 |
+
esc_url_raw( $args['forgot_password_url'] )
|
26 |
);
|
templates/email/data-breach-notification.php
CHANGED
@@ -2,27 +2,27 @@
|
|
2 |
echo sprintf(
|
3 |
/* translators: 1: Email content, 2: Nature of data breach, 3: Contact details for data protection officer, 4: Likely consequences of breach, 5: Measures taken */
|
4 |
esc_html__(
|
5 |
-
'%s
|
6 |
|
7 |
--------------------------------------------------------
|
8 |
Nature of the personal data breach:
|
9 |
--------------------------------------------------------
|
10 |
-
%s
|
11 |
|
12 |
--------------------------------------------------------
|
13 |
Name and contact details of the data protection officer:
|
14 |
--------------------------------------------------------
|
15 |
-
%s
|
16 |
|
17 |
--------------------------------------------------------
|
18 |
Likely consequences of the personal data breach:
|
19 |
--------------------------------------------------------
|
20 |
-
%s
|
21 |
|
22 |
--------------------------------------------------------
|
23 |
Measures taken or proposed to be taken:
|
24 |
--------------------------------------------------------
|
25 |
-
%s
|
26 |
', 'gdpr' ),
|
27 |
esc_html( $args['content'] ),
|
28 |
esc_html( $args['nature'] ),
|
@@ -31,4 +31,3 @@ Measures taken or proposed to be taken:
|
|
31 |
esc_html( $args['measures'] ),
|
32 |
esc_url_raw( $args['confirm_url'] )
|
33 |
);
|
34 |
-
?>
|
2 |
echo sprintf(
|
3 |
/* translators: 1: Email content, 2: Nature of data breach, 3: Contact details for data protection officer, 4: Likely consequences of breach, 5: Measures taken */
|
4 |
esc_html__(
|
5 |
+
'%1$s
|
6 |
|
7 |
--------------------------------------------------------
|
8 |
Nature of the personal data breach:
|
9 |
--------------------------------------------------------
|
10 |
+
%2$s
|
11 |
|
12 |
--------------------------------------------------------
|
13 |
Name and contact details of the data protection officer:
|
14 |
--------------------------------------------------------
|
15 |
+
%3$s
|
16 |
|
17 |
--------------------------------------------------------
|
18 |
Likely consequences of the personal data breach:
|
19 |
--------------------------------------------------------
|
20 |
+
%4$s
|
21 |
|
22 |
--------------------------------------------------------
|
23 |
Measures taken or proposed to be taken:
|
24 |
--------------------------------------------------------
|
25 |
+
%5$s
|
26 |
', 'gdpr' ),
|
27 |
esc_html( $args['content'] ),
|
28 |
esc_html( $args['nature'] ),
|
31 |
esc_html( $args['measures'] ),
|
32 |
esc_url_raw( $args['confirm_url'] )
|
33 |
);
|
|
templates/email/data-breach-request.php
CHANGED
@@ -2,30 +2,30 @@
|
|
2 |
echo sprintf(
|
3 |
/* translators: 1: User who requested the notification, 2: Nature of data breach, 3: Contact details for data protection officer, 4: Likely consequences of breach, 5: Measures taken, 6: Confirmation link */
|
4 |
esc_html__(
|
5 |
-
'A request to send a mass email notification to all users regarding a data breach has been made by %s.
|
6 |
|
7 |
--------------------------------------------------------
|
8 |
Nature of the personal data breach:
|
9 |
--------------------------------------------------------
|
10 |
-
%s
|
11 |
|
12 |
--------------------------------------------------------
|
13 |
Name and contact details of the data protection officer:
|
14 |
--------------------------------------------------------
|
15 |
-
%s
|
16 |
|
17 |
--------------------------------------------------------
|
18 |
Likely consequences of the personal data breach:
|
19 |
--------------------------------------------------------
|
20 |
-
%s
|
21 |
|
22 |
--------------------------------------------------------
|
23 |
Measures taken or proposed to be taken:
|
24 |
--------------------------------------------------------
|
25 |
-
%s
|
26 |
|
27 |
|
28 |
-
To confirm this request, click here: %s
|
29 |
|
30 |
---------------------------------------------------------------------------------
|
31 |
If that is not intended, have the person who requested it change their password.
|
@@ -38,4 +38,3 @@ If that is not intended, have the person who requested it change their password.
|
|
38 |
esc_html( $args['measures'] ),
|
39 |
esc_url_raw( $args['confirm_url'] )
|
40 |
);
|
41 |
-
?>
|
2 |
echo sprintf(
|
3 |
/* translators: 1: User who requested the notification, 2: Nature of data breach, 3: Contact details for data protection officer, 4: Likely consequences of breach, 5: Measures taken, 6: Confirmation link */
|
4 |
esc_html__(
|
5 |
+
'A request to send a mass email notification to all users regarding a data breach has been made by %1$s.
|
6 |
|
7 |
--------------------------------------------------------
|
8 |
Nature of the personal data breach:
|
9 |
--------------------------------------------------------
|
10 |
+
%2$s
|
11 |
|
12 |
--------------------------------------------------------
|
13 |
Name and contact details of the data protection officer:
|
14 |
--------------------------------------------------------
|
15 |
+
%3$s
|
16 |
|
17 |
--------------------------------------------------------
|
18 |
Likely consequences of the personal data breach:
|
19 |
--------------------------------------------------------
|
20 |
+
%4$s
|
21 |
|
22 |
--------------------------------------------------------
|
23 |
Measures taken or proposed to be taken:
|
24 |
--------------------------------------------------------
|
25 |
+
%5$s
|
26 |
|
27 |
|
28 |
+
To confirm this request, click here: %6$s
|
29 |
|
30 |
---------------------------------------------------------------------------------
|
31 |
If that is not intended, have the person who requested it change their password.
|
38 |
esc_html( $args['measures'] ),
|
39 |
esc_url_raw( $args['confirm_url'] )
|
40 |
);
|
|
templates/email/delete-request.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
echo sprintf(
|
3 |
-
|
4 |
-
|
5 |
'Someone placed a request for your information to be removed from our site.
|
6 |
By clicking confirm your account will be removed from our site and all data we collected
|
7 |
over time will be erased from our database. It will be impossible for us to retrieve that
|
@@ -9,13 +9,13 @@ information in the future.
|
|
9 |
|
10 |
|
11 |
|
12 |
-
To confirm this request, click here: %s
|
13 |
|
14 |
|
15 |
|
16 |
---------------------------------------------------------------------------------
|
17 |
-
If that wasn\'t you, reset your password: %s
|
18 |
', 'gdpr' ),
|
19 |
-
|
20 |
-
|
21 |
);
|
1 |
<?php
|
2 |
echo sprintf(
|
3 |
+
/* translators: 1: Confirmation link, 2: Reset password link */
|
4 |
+
esc_html__(
|
5 |
'Someone placed a request for your information to be removed from our site.
|
6 |
By clicking confirm your account will be removed from our site and all data we collected
|
7 |
over time will be erased from our database. It will be impossible for us to retrieve that
|
9 |
|
10 |
|
11 |
|
12 |
+
To confirm this request, click here: %1$s
|
13 |
|
14 |
|
15 |
|
16 |
---------------------------------------------------------------------------------
|
17 |
+
If that wasn\'t you, reset your password: %2$s
|
18 |
', 'gdpr' ),
|
19 |
+
esc_url_raw( $args['confirm_url'] ),
|
20 |
+
esc_url_raw( $args['forgot_password_url'] )
|
21 |
);
|
templates/email/delete-resolved.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
echo sprintf(
|
4 |
/* translators: 6-digit token for audit log */
|
5 |
-
|
6 |
'Your account has been closed.
|
7 |
|
8 |
We no longer hold any information about you.
|
@@ -10,5 +10,5 @@ If you ever need to make a complaint you can email us and we will try to help yo
|
|
10 |
To be able to make a complaint you will be requested to provide your email address and the token below.
|
11 |
|
12 |
%s', 'gdpr' ),
|
13 |
-
|
14 |
);
|
2 |
|
3 |
echo sprintf(
|
4 |
/* translators: 6-digit token for audit log */
|
5 |
+
esc_html__(
|
6 |
'Your account has been closed.
|
7 |
|
8 |
We no longer hold any information about you.
|
10 |
To be able to make a complaint you will be requested to provide your email address and the token below.
|
11 |
|
12 |
%s', 'gdpr' ),
|
13 |
+
esc_html( $args['token'] )
|
14 |
);
|
templates/email/export-data-request.php
CHANGED
@@ -1,19 +1,19 @@
|
|
1 |
<?php
|
2 |
echo sprintf(
|
3 |
-
|
4 |
-
|
5 |
'Someone requested to download your data from our site.
|
6 |
By clicking confirm we will redirect you back to our site where a download will begin.
|
7 |
|
8 |
-
To download it in a XML format, click here: %s
|
9 |
-
To download it in a JSON format, click here: %s
|
10 |
|
11 |
|
12 |
|
13 |
---------------------------------------------------------------------------------
|
14 |
-
If that wasn\'t you, reset your password: %s
|
15 |
', 'gdpr' ),
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
);
|
1 |
<?php
|
2 |
echo sprintf(
|
3 |
+
/* translators: 1: XML download link, 2: JSON download link, 3: reset password link */
|
4 |
+
esc_html__(
|
5 |
'Someone requested to download your data from our site.
|
6 |
By clicking confirm we will redirect you back to our site where a download will begin.
|
7 |
|
8 |
+
To download it in a XML format, click here: %1$s
|
9 |
+
To download it in a JSON format, click here: %2$s
|
10 |
|
11 |
|
12 |
|
13 |
---------------------------------------------------------------------------------
|
14 |
+
If that wasn\'t you, reset your password: %3$s
|
15 |
', 'gdpr' ),
|
16 |
+
esc_url_raw( $args['confirm_url_xml'] ),
|
17 |
+
esc_url_raw( $args['confirm_url_json'] ),
|
18 |
+
esc_url_raw( $args['forgot_password_url'] )
|
19 |
);
|
templates/email/new-request.php
CHANGED
@@ -2,10 +2,10 @@
|
|
2 |
|
3 |
echo sprintf(
|
4 |
/* translators: 1: The type of request. 2: Link to where the request can be reviewed. */
|
5 |
-
|
6 |
'There is a new %1$s request waiting for review.
|
7 |
|
8 |
Review your requests: %2$s', 'gdpr' ),
|
9 |
-
|
10 |
-
|
11 |
);
|
2 |
|
3 |
echo sprintf(
|
4 |
/* translators: 1: The type of request. 2: Link to where the request can be reviewed. */
|
5 |
+
esc_html__(
|
6 |
'There is a new %1$s request waiting for review.
|
7 |
|
8 |
Review your requests: %2$s', 'gdpr' ),
|
9 |
+
esc_html( $args['type'] ),
|
10 |
+
esc_url_raw( $args['review_url'] )
|
11 |
);
|
templates/email/rectify-request.php
CHANGED
@@ -1,26 +1,26 @@
|
|
1 |
<?php
|
2 |
echo sprintf(
|
3 |
-
|
4 |
-
|
5 |
'Someone placed a request for your information to be rectified on our site.
|
6 |
By clicking confirm a request will be made and we will do our best to fulfil it.
|
7 |
|
8 |
--------------------------------------------------------
|
9 |
Request
|
10 |
--------------------------------------------------------
|
11 |
-
%s
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
-
To confirm this request, click here: %s
|
17 |
|
18 |
|
19 |
|
20 |
---------------------------------------------------------------------------------
|
21 |
-
If that wasn\'t you, reset your password: %s
|
22 |
', 'gdpr' ),
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
);
|
1 |
<?php
|
2 |
echo sprintf(
|
3 |
+
/* translators: 1: The request content, 2: confirmation link, 3: reset password link */
|
4 |
+
esc_html__(
|
5 |
'Someone placed a request for your information to be rectified on our site.
|
6 |
By clicking confirm a request will be made and we will do our best to fulfil it.
|
7 |
|
8 |
--------------------------------------------------------
|
9 |
Request
|
10 |
--------------------------------------------------------
|
11 |
+
%1$s
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
+
To confirm this request, click here: %2$s
|
17 |
|
18 |
|
19 |
|
20 |
---------------------------------------------------------------------------------
|
21 |
+
If that wasn\'t you, reset your password: %3$s
|
22 |
', 'gdpr' ),
|
23 |
+
esc_html( $args['data'] ),
|
24 |
+
esc_url_raw( $args['confirm_url'] ),
|
25 |
+
esc_url_raw( $args['forgot_password_url'] )
|
26 |
);
|