GDPR - Version 2.0.0

Version Description

  • Change all requests and privacy preferences window to AJAX to avoid the admin-post hook issue.
  • We do not track privacy policy anymore. We can now track any kind of policy that users want. Those have been moved to each consent.
  • Including more options. Including "enable/disable" the privacy bar.
  • New filters and funtions were included.
  • Making the settings a little more accessible.
  • Removed the reconsent modal. It was too obtrusive. We switched to a more subtle notification bar.
Download this release

Release Info

Developer fclaussen
Plugin Icon 128x128 GDPR
Version 2.0.0
Comparing to
See all releases

Code changes from version 1.4.7 to 2.0.0

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: 1.4.7
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -206,6 +206,14 @@ Activating this plugin does not guarantee that an organisation is successfully m
206
 
207
  == Changelog ==
208
 
 
 
 
 
 
 
 
 
209
  = 1.4.7 =
210
  * Fix for users who were complaining about their scroll bars missing if they did not select a privacy policy page.
211
 
@@ -367,6 +375,11 @@ Activating this plugin does not guarantee that an organisation is successfully m
367
 
368
  == Upgrade Notice ==
369
 
 
 
 
 
 
370
  = 1.0.0 =
371
  This is a major rewrite of the plugin. Things will look different and work differently.
372
  We tried to keep most things the same so the impact would be minimal.
5
  Requires at least: 4.7
6
  Requires PHP: 5.6
7
  Tested up to: 4.9
8
+ Stable tag: 2.0.0
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.0 =
210
+ * Change all requests and privacy preferences window to AJAX to avoid the admin-post hook issue.
211
+ * We do not track privacy policy anymore. We can now track any kind of policy that users want. Those have been moved to each consent.
212
+ * Including more options. Including "enable/disable" the privacy bar.
213
+ * New filters and funtions were included.
214
+ * Making the settings a little more accessible.
215
+ * Removed the reconsent modal. It was too obtrusive. We switched to a more subtle notification bar.
216
+
217
  = 1.4.7 =
218
  * Fix for users who were complaining about their scroll bars missing if they did not select a privacy policy page.
219
 
375
 
376
  == Upgrade Notice ==
377
 
378
+ = 2.0.0 =
379
+ We have added a few new options which must be reviewed before continuing to use the plugin.
380
+ 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.
381
+ Please keep in mind the plugin might not work as intended until these settings are reviewed.
382
+
383
  = 1.0.0 =
384
  This is a major rewrite of the plugin. Things will look different and work differently.
385
  We tried to keep most things the same so the impact would be minimal.
admin/class-gdpr-admin.php CHANGED
@@ -151,41 +151,35 @@ class GDPR_Admin {
151
  }
152
 
153
  /**
154
- * Sanitizing user input on the cookie tabs.
155
  * @since 1.0.0
156
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
157
  * @param array $tabs The cookie tabs.
158
  * @return array The sanitized options.
159
  */
160
- public function sanitize_cookie_tabs( $tabs ) {
161
 
162
  $output = array();
163
- if ( ! is_array( $tabs ) ) {
164
  return array();
165
  }
166
 
167
- foreach ( $tabs as $key => $props ) {
168
- if ( '' === $props['name'] || '' === $props['how_we_use'] ) {
169
- unset( $tabs[ $key ] );
170
- continue;
171
- }
172
  $output[ $key ] = array(
173
- 'name' => sanitize_text_field( wp_unslash( $props['name'] ) ),
174
- 'always_active' => isset( $props['always_active'] ) ? boolval( $props['always_active'] ) : 0,
175
- 'how_we_use' => wp_kses_post( $props['how_we_use'] ),
176
- 'cookies_used' => sanitize_text_field( wp_unslash( $props['cookies_used'] ) ),
 
177
  );
 
 
 
178
 
179
- if ( isset( $props['hosts'] ) ) {
180
- foreach ( $props['hosts'] as $host_key => $host ) {
181
- if ( empty( $host['name'] ) || empty( $host['cookies_used'] ) || empty( $host['cookies_used'] ) ) {
182
- unset( $props['hosts'][ $host_key ] );
183
- continue;
184
- }
185
- $output[ $key ]['hosts'][ $host_key ] = array(
186
- 'name' => sanitize_text_field( wp_unslash( $host['name'] ) ),
187
- 'cookies_used' => sanitize_text_field( wp_unslash( $host['cookies_used'] ) ),
188
- 'optout' => esc_url_raw( $host['optout'] ),
189
  );
190
  }
191
  }
@@ -200,10 +194,9 @@ class GDPR_Admin {
200
  */
201
  public function register_settings() {
202
  $settings = array(
203
- 'gdpr_privacy_policy_page' => 'intval',
204
  'gdpr_cookie_banner_content' => array( $this, 'sanitize_with_links' ),
205
  'gdpr_cookie_privacy_excerpt' => 'sanitize_textarea_field',
206
- 'gdpr_cookie_popup_content' => array( $this, 'sanitize_cookie_tabs' ),
207
  'gdpr_email_limit' => 'intval',
208
  'gdpr_consent_types' => array( $this, 'sanitize_consents' ),
209
  'gdpr_deletion_needs_review' => 'boolval',
@@ -214,6 +207,9 @@ class GDPR_Admin {
214
  'gdpr_recaptcha_secret_key' => 'sanitize_text_field',
215
  'gdpr_add_consent_checkboxes_registration' => 'boolval',
216
  'gdpr_add_consent_checkboxes_checkout' => 'boolval',
 
 
 
217
  );
218
  foreach ( $settings as $option_name => $sanitize_callback ) {
219
  register_setting( 'gdpr', $option_name, array( 'sanitize_callback' => $sanitize_callback ) );
@@ -245,15 +241,15 @@ class GDPR_Admin {
245
  }
246
 
247
  foreach ( $consents as $key => $props ) {
248
- if ( '' === $props['name'] || '' === $props['description'] ) {
249
  unset( $consents[ $key ] );
250
  continue;
251
  }
252
  $output[ $key ] = array(
253
  'name' => sanitize_text_field( wp_unslash( $props['name'] ) ),
254
- 'required' => isset( $props['required'] ) ? boolval( $props['required'] ) : 0,
255
- 'description' => wp_kses( wp_unslash( $props['description'] ), $this->allowed_html ),
256
- 'registration' => wp_kses( wp_unslash( $props['registration'] ), $this->allowed_html ),
257
  );
258
  }
259
  return $output;
@@ -266,14 +262,10 @@ class GDPR_Admin {
266
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
267
  */
268
  public function settings_page_template() {
269
- $privacy_policy_page = get_option( 'gdpr_privacy_policy_page', 0 );
270
- $tabs = array(
271
- 'general' => esc_html__( 'General', 'gdpr' ),
272
- 'cookies' => esc_html__( 'Cookies', 'gdpr' ),
273
- 'consents' => esc_html__( 'Consents', 'gdpr' ),
274
- );
275
 
276
- $tabs = apply_filters( 'gdpr_settings_pages', $tabs );
277
 
278
  include_once plugin_dir_path( __FILE__ ) . 'partials/templates/tmpl-cookies.php';
279
  include_once plugin_dir_path( __FILE__ ) . 'partials/templates/tmpl-consents.php';
@@ -518,59 +510,76 @@ class GDPR_Admin {
518
  wp_send_json_success( $log );
519
  }
520
 
521
- /**
522
- * Admin notice when the user haven't picked a privacy policy page.
523
- * @since 1.0.0
524
- * @author Fernando Claussen <fernandoclaussen@gmail.com>
525
- */
526
- public function privacy_policy_page_missing() {
527
- $privacy_page = get_option( 'gdpr_privacy_policy_page', '' );
528
- if ( ! empty( $privacy_page ) ) {
529
- return;
 
 
 
 
530
  }
531
- ?>
532
- <div class="notice notice-error is-dismissible">
533
- <p>
534
- <strong><?php echo esc_html__( '[GDPR] You must select a Privacy Policy Page.', 'gdpr' ); ?></strong>
535
- </p>
536
- <p>
537
- <a href="<?php echo esc_url( admin_url( 'admin.php?page=gdpr-settings' ) ) ?>" class="button button-primary"><?php esc_html_e( 'Select your Privacy Policy page', 'gdpr' ); ?></a>
538
- </p>
539
- </div>
540
- <?php
 
 
 
541
  }
542
 
543
  /**
544
- * Admin notice when the privacy policy has been updated.
545
  * @since 1.0.0
546
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
547
  */
548
- public function privacy_policy_updated_notice() {
549
- $updated = get_option( 'gdpr_privacy_policy_updated' );
550
- if ( ! $updated ) {
551
  return;
552
  }
 
 
553
  ?>
554
- <div class="notice notice-error privacy-page-updated-notice is-dismissible">
555
- <p>
556
- <strong><?php echo esc_html__( 'Your Privacy Policy have been updated. In case this was not a small typo fix, you must ask users for explicit consent again.', 'gdpr' ); ?></strong>
557
- </p>
558
- <form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
559
- <?php wp_nonce_field( 'gdpr-seek_consent', 'privacy-policy-updated-nonce' ); ?>
 
 
 
560
  <input type="hidden" name="action" value="seek_consent">
 
 
561
  <p>
562
  <?php submit_button( esc_html__( 'Ask for consent', 'gdpr' ), 'primary', 'submit', false ); ?>
563
  </p>
564
  </form>
565
- <form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post" class="frm-ignore-privacy-update">
566
- <?php wp_nonce_field( 'gdpr-ignore_update', 'privacy-policy-ignore-update-nonce' ); ?>
567
- <input type="hidden" name="action" value="ignore_privacy_policy_update">
 
 
568
  <p>
569
  <?php submit_button( esc_html__( 'Ignore', 'gdpr' ), 'secondary', 'submit', false ); ?>
570
  </p>
571
  </form>
572
  </div>
573
  <?php
 
574
  }
575
 
576
  /**
@@ -718,11 +727,16 @@ class GDPR_Admin {
718
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
719
  */
720
  public function seek_consent() {
721
- if ( ! isset( $_POST['privacy-policy-updated-nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['privacy-policy-updated-nonce'] ), 'gdpr-seek_consent' ) ) {
722
- wp_die( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
723
  }
724
 
725
- delete_option( 'gdpr_privacy_policy_updated' );
 
 
 
 
 
726
 
727
  $users = get_users( array(
728
  'fields' => 'all_with_meta'
@@ -730,25 +744,14 @@ class GDPR_Admin {
730
 
731
  foreach ( $users as $user ) {
732
  $usermeta = get_user_meta( $user->ID, 'gdpr_consents' );
733
- if ( in_array( 'privacy-policy', $usermeta ) ) {
734
- GDPR_Audit_Log::log( $user->ID, esc_html__( 'Privacy Policy has been updated. Removing the Privacy Policy consent and requesting new consent.', 'gdpr' ) );
735
- delete_user_meta( $user->ID, 'gdpr_consents', 'privacy-policy' );
 
736
  }
737
  }
738
 
739
- add_settings_error( 'gdpr', 'resolved', esc_html__( 'Users will have to consent to the updated privacy policy on login.', 'gdpr' ), 'updated' );
740
- set_transient( 'settings_errors', get_settings_errors(), 30 );
741
- wp_safe_redirect(
742
- esc_url_raw(
743
- add_query_arg(
744
- array(
745
- 'settings-updated' => true
746
- ),
747
- wp_get_referer()
748
- )
749
- )
750
- );
751
- exit;
752
  }
753
 
754
  /**
@@ -758,20 +761,29 @@ class GDPR_Admin {
758
  * @param int $ID The page ID.
759
  * @param WP_Post $post The post object.
760
  */
761
- public function privacy_policy_updated( $ID, $post ) {
762
- $privacy_page = (int) get_option( 'gdpr_privacy_policy_page', 0 );
763
- $ID = (int) $ID;
764
- if ( $ID === $privacy_page ) {
765
- $revisions = wp_get_post_revisions( $ID );
766
- $revisions = array_filter( $revisions, function( $rev ) {
767
- return strpos( $rev->post_name, 'autosave' ) === false;
768
- });
769
-
770
- reset( $revisions );
771
- if ( current( $revisions )->post_content !== $post->post_content ) {
772
- update_option( 'gdpr_privacy_policy_updated', 1 );
 
 
 
 
 
 
 
 
773
  }
774
  }
 
775
  }
776
 
777
  /**
@@ -779,12 +791,15 @@ class GDPR_Admin {
779
  * @since 1.0.0
780
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
781
  */
782
- public function ignore_privacy_policy_update() {
783
- if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'gdpr-ignore_update' ) ) {
784
  wp_send_json_error( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
785
  }
786
 
787
- delete_option( 'gdpr_privacy_policy_updated' );
 
 
 
788
  wp_send_json_success();
789
  }
790
 
@@ -891,4 +906,28 @@ class GDPR_Admin {
891
  }
892
  }
893
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
894
  }
151
  }
152
 
153
  /**
154
+ * Sanitizing user input on the cookie categories.
155
  * @since 1.0.0
156
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
157
  * @param array $tabs The cookie tabs.
158
  * @return array The sanitized options.
159
  */
160
+ public function sanitize_cookie_categories( $cookie_categories ) {
161
 
162
  $output = array();
163
+ if ( ! is_array( $cookie_categories ) ) {
164
  return array();
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
+ 'domains' => array(),
175
  );
176
+ if ( isset( $props['domains'] ) ) {
177
+ foreach ( $props['domains'] as $domain_key => $domain ) {
178
+ $domain_key = sanitize_text_field( $domain_key );
179
 
180
+ $output[ $key ]['domains'][ $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
  }
194
  */
195
  public function register_settings() {
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',
207
  'gdpr_recaptcha_secret_key' => 'sanitize_text_field',
208
  'gdpr_add_consent_checkboxes_registration' => 'boolval',
209
  'gdpr_add_consent_checkboxes_checkout' => 'boolval',
210
+ 'gdpr_refresh_after_preferences_update' => 'boolval',
211
+ 'gdpr_enable_privacy_bar' => 'boolval',
212
+ 'gdpr_display_cookie_categories_in_bar' => 'boolval',
213
  );
214
  foreach ( $settings as $option_name => $sanitize_callback ) {
215
  register_setting( 'gdpr', $option_name, array( 'sanitize_callback' => $sanitize_callback ) );
241
  }
242
 
243
  foreach ( $consents as $key => $props ) {
244
+ if ( '' === $props['name'] ) {
245
  unset( $consents[ $key ] );
246
  continue;
247
  }
248
  $output[ $key ] = array(
249
  'name' => sanitize_text_field( wp_unslash( $props['name'] ) ),
250
+ 'policy-page' => isset( $props['policy-page'] ) ? absint( $props['policy-page'] ) : 0,
251
+ 'description' => isset( $props['description'] ) ? wp_kses( wp_unslash( $props['description'] ), $this->allowed_html ) : '',
252
+ 'registration' => isset( $props['registration'] ) ? wp_kses( wp_unslash( $props['registration'] ), $this->allowed_html ) : '',
253
  );
254
  }
255
  return $output;
262
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
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
 
270
  include_once plugin_dir_path( __FILE__ ) . 'partials/templates/tmpl-cookies.php';
271
  include_once plugin_dir_path( __FILE__ ) . 'partials/templates/tmpl-consents.php';
510
  wp_send_json_success( $log );
511
  }
512
 
513
+ public function review_settings_after_v2_notice() {
514
+ // Check the transient to see if we've just updated the plugin
515
+ if ( get_transient( 'gdpr_updated' ) && '2.0.0' === $this->version ) {
516
+ ?>
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
+ delete_transient( 'gdpr_updated' );
526
  }
527
+ }
528
+
529
+ function upgrade_completed( $upgrader_object, $options ) {
530
+ // If an update has taken place and the updated type is plugins and the plugins element exists
531
+ if( $options['action'] == 'update' && $options['type'] == 'plugin' && isset( $options['plugins'] ) ) {
532
+ // Iterate through the plugins being updated and check if ours is there
533
+ foreach( $options['plugins'] as $plugin ) {
534
+ if( $plugin == 'gdpr/gdpr.php' ) {
535
+ // Set a transient to record that our plugin has just been updated
536
+ set_transient( 'gdpr_updated', 1 );
537
+ }
538
+ }
539
+ }
540
  }
541
 
542
  /**
543
+ * Admin notice when one of the policies has been updated.
544
  * @since 1.0.0
545
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
546
  */
547
+ public function policy_updated_notice() {
548
+ $policies_updated = get_option( 'gdpr_policies_updated', array() );
549
+ if ( empty( $policies_updated ) ) {
550
  return;
551
  }
552
+
553
+ foreach ( $policies_updated as $key => $policy ) {
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.' , 'gdpr' ); ?>
560
+ </span>
561
+ <span class="spinner"></span>
562
+ <form method="post" class="frm-policy-updated">
563
+ <?php wp_nonce_field( 'gdpr-seek-consent', 'policy-updated-nonce' ); ?>
564
  <input type="hidden" name="action" value="seek_consent">
565
+ <input type="hidden" name="policy_id" value="<?php echo esc_attr( $key ); ?>">
566
+ <input type="hidden" name="policy_name" value="<?php echo esc_attr( $policy ); ?>">
567
  <p>
568
  <?php submit_button( esc_html__( 'Ask for consent', 'gdpr' ), 'primary', 'submit', false ); ?>
569
  </p>
570
  </form>
571
+ <form method="post" class="frm-policy-updated">
572
+ <?php wp_nonce_field( 'gdpr-ignore-update', 'ignore-policy-update-nonce' ); ?>
573
+ <input type="hidden" name="action" value="ignore_policy_update">
574
+ <input type="hidden" name="policy_id" value="<?php echo esc_attr( $key ); ?>">
575
+ <input type="hidden" name="policy_name" value="<?php echo esc_attr( $policy ); ?>">
576
  <p>
577
  <?php submit_button( esc_html__( 'Ignore', 'gdpr' ), 'secondary', 'submit', false ); ?>
578
  </p>
579
  </form>
580
  </div>
581
  <?php
582
+ }
583
  }
584
 
585
  /**
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 = sanitize_text_field( $_POST['policy_id'] );
735
+ $policy_name = sanitize_text_field( $_POST['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( array(
742
  'fields' => 'all_with_meta'
744
 
745
  foreach ( $users as $user ) {
746
  $usermeta = get_user_meta( $user->ID, 'gdpr_consents' );
747
+ if ( in_array( $policy_id, $usermeta ) ) {
748
+ /* translators: 1: The name of the policy that was updated. */
749
+ GDPR_Audit_Log::log( $user->ID, sprintf( esc_html__( '%1$s has been updated. Removing the %1$s consent and requesting new consent.', 'gdpr' ) ) );
750
+ delete_user_meta( $user->ID, 'gdpr_consents', $policy_id );
751
  }
752
  }
753
 
754
+ wp_send_json_success();
 
 
 
 
 
 
 
 
 
 
 
 
755
  }
756
 
757
  /**
761
  * @param int $ID The page ID.
762
  * @param WP_Post $post The post object.
763
  */
764
+ public function policy_updated( $ID, $post ) {
765
+ $policies_updated = get_option( 'gdpr_policies_updated', array() );
766
+ $consents = get_option( 'gdpr_consent_types', array() );
767
+ $required_consents = array_filter( $consents, function( $consent ) {
768
+ return ! empty( $consent['policy-page'] );
769
+ } );
770
+
771
+ if ( ! empty( $required_consents ) ) {
772
+ foreach ( $required_consents as $consent_id => $consent ) {
773
+ if ( $ID === $consent['policy-page'] ) {
774
+ $revisions = wp_get_post_revisions( $ID );
775
+ $revisions = array_filter( $revisions, function( $rev ) {
776
+ return strpos( $rev->post_name, 'autosave' ) === false;
777
+ });
778
+
779
+ reset( $revisions );
780
+ if ( current( $revisions )->post_content !== $post->post_content ) {
781
+ $policies_updated[ $consent_id ] = $consent['name'];
782
+ }
783
+ }
784
  }
785
  }
786
+ update_option( 'gdpr_policies_updated', $policies_updated );
787
  }
788
 
789
  /**
791
  * @since 1.0.0
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 = sanitize_text_field( $_POST['policy_id'] );
800
+ $policies_updated = get_option( 'gdpr_policies_updated', array() );
801
+ unset( $policies_updated[ $policy ] );
802
+ update_option( 'gdpr_policies_updated', $policies_updated );
803
  wp_send_json_success();
804
  }
805
 
906
  }
907
  }
908
 
909
+
910
+ /**
911
+ * Filters the display output of custom columns in the Users list table.
912
+ * @since 2.0.0
913
+ * @author Fernando Claussen <fernandoclaussen@gmail.com>
914
+ *
915
+ * @param string $val Custom column output. Default empty.
916
+ * @param string $column_name Column name.
917
+ * @param int $user_id ID of the currently-listed user.
918
+ */
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
+ return $val;
926
+ }
927
+
928
+ public function add_consents_column_to_user_table( $column_headers ) {
929
+ $column_headers['consents'] = esc_html__( 'Consents', 'gdpr' );
930
+ return $column_headers;
931
+ }
932
+
933
  }
admin/partials/settings.php CHANGED
@@ -1,12 +1,5 @@
1
  <div class="wrap gdpr">
2
- <h1><?php esc_html_e( 'Settings', 'gdpr' ); ?></h1>
3
- <div class="nav-tab-wrapper">
4
- <?php foreach ( $tabs as $tab => $value ) : ?>
5
- <a href="<?php echo '#' . $tab; ?>" class="nav-tab">
6
- <?php echo esc_html( $value ); ?>
7
- </a>
8
- <?php endforeach; ?>
9
- </div>
10
 
11
  <?php settings_errors(); ?>
12
 
@@ -14,305 +7,387 @@
14
 
15
  <?php settings_fields( 'gdpr' ); ?>
16
 
17
- <div class="gdpr-tab hidden" data-id="general">
18
- <h2><?php esc_html_e( 'General', 'gdpr' ) ?></h2>
19
- <table class="form-table" data-id="general">
20
- <tbody>
21
- <tr>
22
- <th scope="row">
23
- <label for="gdpr_privacy_policy_page"><?php esc_html_e( 'Privacy Policy Page', 'gdpr' ) ?></label>
24
- </th>
25
- <td>
26
- <?php
27
- $pages = get_pages();
28
- ?>
29
- <select name="gdpr_privacy_policy_page" id="gdpr_privacy_policy_page">
30
- <option value=""><?php esc_html_e( '-- Select --', 'gdpr' ) ?></option>
31
- <?php foreach ( $pages as $page ): ?>
32
- <option value="<?php echo esc_attr( $page->ID ) ?>" <?php selected( $privacy_policy_page, $page->ID ); ?>><?php echo esc_html( $page->post_title ); ?></option>
33
- <?php endforeach ?>
34
- </select>
35
- </td>
36
- </tr>
37
- <tr>
38
- <th scope="row">
39
- <label for="gdpr_email_limit"><?php esc_html_e( 'Outgoing email limitation', 'gdpr' ) ?></label>
40
- </th>
41
- <td>
42
- <?php $limit = get_option( 'gdpr_email_limit', 100 ); ?>
43
- <input type="number" name="gdpr_email_limit" id="gdpr_email_limit" value="<?php echo esc_attr( $limit ); ?>">
44
- </td>
45
- </tr>
46
- <tr>
47
- <th scope="row">
48
- <label for="gdpr_deletion_needs_review"><?php esc_html_e( 'User deletion', 'gdpr' ) ?></label>
49
- </th>
50
- <td>
51
- <?php $needs_review = get_option( 'gdpr_deletion_needs_review', true ); ?>
52
- <input type="checkbox" name="<?php echo esc_attr( 'gdpr_deletion_needs_review' ); ?>" id="gdpr_deletion_needs_review" value="1" <?php checked( $needs_review, true ); ?>><span class="description"><label for="gdpr_deletion_needs_review"><?php esc_html_e( 'Send all deletion requests to the review table.', 'gdpr' ); ?></label></label>
53
- </td>
54
- </tr>
55
- <tr>
56
- <th scope="row">
57
- <label for="gdpr_disable_css"><?php esc_html_e( 'Disable CSS', 'gdpr' ) ?></label>
58
- </th>
59
- <td>
60
- <?php $disable_css = get_option( 'gdpr_disable_css', false ); ?>
61
- <input type="checkbox" name="<?php echo esc_attr( 'gdpr_disable_css' ); ?>" id="gdpr_disable_css" value="1" <?php checked( $disable_css, true ); ?>><label for="gdpr_disable_css"><span class="description"><?php esc_html_e( 'Make sure you know what you are doing before checking this.', 'gdpr' ); ?></span></label>
62
- </td>
63
- </tr>
64
- <tr>
65
- <th scope="row">
66
- <label for="gdpr_enable_telemetry_tracker"><?php esc_html_e( 'Enable the Telemetry Tracker', 'gdpr' ) ?></label>
67
- </th>
68
- <td>
69
- <?php $enable_telemetry = get_option( 'gdpr_enable_telemetry_tracker', false ); ?>
70
- <input type="checkbox" name="<?php echo esc_attr( 'gdpr_enable_telemetry_tracker' ); ?>" id="gdpr_enable_telemetry_tracker" value="1" <?php checked( $enable_telemetry, true ); ?>><label for="gdpr_enable_telemetry_tracker"><span class="description"><?php esc_html_e( 'Toggles the Telemetry Tracker On/Off. (experimental)', 'gdpr' ); ?></span></label>
71
- </td>
72
- </tr>
73
- </tbody>
74
- </table>
75
- <h2 class="title"><?php esc_html_e( 'Privacy Center', 'gdpr' ); ?></h2>
76
- <p>
77
- <?php esc_html_e( 'This section handles the privacy bar and some of the privacy preferences window.', 'gdpr' ) ?><br>
78
- <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>
79
- <table class="form-table" data-id="general">
80
- <tbody>
81
- <tr>
82
- <th scope="row">
83
- <label for="gdpr_cookie_banner_content"><?php esc_html_e( 'Privacy Banner Text', 'gdpr' ) ?></label>
84
- </th>
85
- <td>
86
- <?php $privacy_bar_content = get_option( 'gdpr_cookie_banner_content', '' ); ?>
87
- <textarea name="gdpr_cookie_banner_content" id="gdpr_cookie_banner_content" cols="80" rows="6"><?php echo esc_html( $privacy_bar_content ); ?></textarea>
88
- </td>
89
- </tr>
90
- <tr>
91
- <th scope="row">
92
- <label for="gdpr_cookie_privacy_excerpt"><?php esc_html_e( 'Privacy Excerpt', 'gdpr' ) ?></label>
93
- </th>
94
- <td>
95
- <?php $privacy_excerpt = get_option( 'gdpr_cookie_privacy_excerpt', '' ); ?>
96
- <textarea name="gdpr_cookie_privacy_excerpt" id="gdpr_cookie_privacy_excerpt" cols="80" rows="6"><?php echo esc_html( $privacy_excerpt ); ?></textarea>
97
- <p class="description"><?php esc_html_e( 'This will appear in the consent section of the privacy preference window.', 'gdpr' ); ?></p>
98
- </td>
99
- </tr>
100
- </tbody>
101
- </table>
102
- <h2 class="title"><?php esc_html_e( 'Request Forms reCAPTCHA', 'gdpr' ); ?></h2>
103
- <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>
104
- <p>
105
- <?php echo sprintf(
106
- /* translators: External link with instructions on how to proceed. */
107
- esc_html__( 'You can find the necessary information %s.', 'gdpr' ),
108
- '<a href="https://www.google.com/recaptcha/admin" target="_blank">' . esc_html__( 'here', 'gdpr' ) . '</a>'
109
- ) ?></p>
110
- <table class="form-table" data-id="general">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  <tbody>
112
  <tr>
113
  <th scope="row">
114
- <label for="gdpr_use_recaptcha"><?php esc_html_e( 'Enable reCAPTCHA', 'gdpr' ) ?></label>
115
  </th>
116
  <td>
117
- <?php $use_recaptcha = get_option( 'gdpr_use_recaptcha', false ); ?>
118
- <input type="checkbox" name="<?php echo esc_attr( 'gdpr_use_recaptcha' ); ?>" id="gdpr_use_recaptcha" value="1" <?php checked( $use_recaptcha, true ); ?>>
119
  </td>
120
  </tr>
121
  <tr>
122
  <th scope="row">
123
- <label for="gdpr_recaptcha_site_key"><?php esc_html_e( 'Site Key', 'gdpr' ) ?></label>
124
  </th>
125
  <td>
126
- <?php $site_key = get_option( 'gdpr_recaptcha_site_key', '' ); ?>
127
- <input type="text" name="gdpr_recaptcha_site_key" value="<?php echo esc_attr( $site_key ); ?>" placeholder="">
128
- </td>
129
- </tr>
130
- <tr>
131
- <th scope="row">
132
- <label for="gdpr_recaptcha_secret_key"><?php esc_html_e( 'Secret Key', 'gdpr' ) ?></label>
133
- </th>
134
- <td>
135
- <?php $secret_key = get_option( 'gdpr_recaptcha_secret_key', '' ); ?>
136
- <input type="password" name="gdpr_recaptcha_secret_key" value="<?php echo esc_attr( $secret_key ); ?>" placeholder="">
137
  </td>
138
  </tr>
139
  </tbody>
140
  </table>
141
- <?php if ( class_exists( 'WooCommerce' ) ): ?>
142
- <h2 class="title"><?php esc_html_e( 'WooCommerce', 'gdpr' ); ?></h2>
143
- <table class="form-table" data-id="general">
144
- <tbody>
145
- <tr>
146
- <th scope="row">
147
- <label for="gdpr_add_consent_checkboxes_registration"><?php esc_html_e( 'Add consent checkboxes to the registration page', 'gdpr' ) ?></label>
148
- </th>
149
- <td>
150
- <?php $add_checkboxes_to_registration = get_option( 'gdpr_add_consent_checkboxes_registration', false ); ?>
151
- <input type="checkbox" name="<?php echo esc_attr( 'gdpr_add_consent_checkboxes_registration' ); ?>" id="gdpr_add_consent_checkboxes_registration" value="1" <?php checked( $add_checkboxes_to_registration, true ); ?>>
152
- </td>
153
- </tr>
154
- <tr>
155
- <th scope="row">
156
- <label for="gdpr_add_consent_checkboxes_checkout"><?php esc_html_e( 'Add consent checkboxes to the checkout registration form', 'gdpr' ) ?></label>
157
- </th>
158
- <td>
159
- <?php $add_checkboxes_to_checkout = get_option( 'gdpr_add_consent_checkboxes_checkout', false ); ?>
160
- <input type="checkbox" name="<?php echo esc_attr( 'gdpr_add_consent_checkboxes_checkout' ); ?>" id="gdpr_add_consent_checkboxes_checkout" value="1" <?php checked( $add_checkboxes_to_checkout, true ); ?>>
161
- </td>
162
- </tr>
163
- </tbody>
164
- </table>
165
- <?php endif ?>
166
- </div>
167
- <div class="gdpr-tab hidden" data-id="cookies">
168
- <h2><?php esc_html_e( 'Cookies', 'gdpr' ) ?></h2>
169
- <input type="text" id="cookie-tabs" class="regular-text" placeholder="<?php esc_attr_e( 'Category name', 'gdpr' ); ?>">
170
- <button class="button button-primary add-tab"><?php esc_html_e( 'Add tab', 'gdpr' ); ?></button>
171
- <div id="tabs">
172
- <?php $cookie_tabs = get_option( 'gdpr_cookie_popup_content', array() ); ?>
173
- <?php if ( ! empty( $cookie_tabs ) ) : ?>
174
- <?php foreach ( $cookie_tabs as $tab_key => $tab ) : ?>
175
- <div class="postbox" id="cookie-tab-content-<?php echo esc_attr( $tab_key ); ?>">
176
- <h2 class="hndle"><?php echo esc_html( $tab['name'] ); ?><button class="notice-dismiss" type="button"><span class="screen-reader-text"><?php esc_html_e( 'Remove this tab.', 'gdpr' ); ?></span></button></h2>
177
- <input type="hidden" name="<?php echo esc_attr( 'gdpr_cookie_popup_content' ); ?>[<?php echo esc_attr( $tab_key ); ?>][name]" value="<?php echo esc_attr( $tab['name'] ); ?>" />
178
- <div class="inside">
179
- <table class="form-table">
180
- <tr>
181
- <th><label for="always-active-<?php echo esc_attr( $tab_key ); ?>"><?php esc_html_e( 'Always active', 'gdpr' ); ?></label></th>
182
- <td>
183
- <label class="gdpr-switch">
184
- <input type="checkbox" name="<?php echo esc_attr( 'gdpr_cookie_popup_content' ); ?>[<?php echo esc_attr( $tab_key ); ?>][always_active]" <?php checked( esc_attr( $tab['always_active'] ), 1 ); ?> id="always-active-<?php echo esc_attr( $tab_key ); ?>">
185
- <span class="gdpr-slider round"></span>
186
- </label>
187
- </td>
188
- </tr>
189
- <tr>
190
- <th><label for="tab-how-we-use-<?php echo esc_attr( $tab_key ); ?>"><?php esc_html_e( 'How we use', 'gdpr' ); ?></label></th>
191
- <td><textarea name="<?php echo esc_attr( 'gdpr_cookie_popup_content' ); ?>[<?php echo esc_attr( $tab_key ); ?>][how_we_use]" id="tab-how-we-use-<?php echo esc_attr( $tab_key ); ?>" cols="53" rows="3" required><?php echo esc_html( $tab['how_we_use'] ); ?></textarea></td>
192
- </tr>
193
- <tr>
194
- <th><label for="cookies-used-<?php echo esc_attr( $tab_key ); ?>"><?php esc_html_e( 'Cookies used by the site', 'gdpr' ); ?></label></th>
195
- <td>
196
- <textarea cols="53" rows="3" name="<?php echo esc_attr( 'gdpr_cookie_popup_content' ); ?>[<?php echo esc_attr( $tab_key ); ?>][cookies_used]" id="cookies-used-<?php echo esc_attr( $tab_key ); ?>" required><?php echo esc_attr( $tab['cookies_used'] ); ?></textarea>
197
- <br>
198
- <span class="description"><?php esc_html_e( 'Comma separated list.', 'gdpr' ); ?></span>
199
- </td>
200
- </tr>
201
- <tr>
202
- <th><label for="hosts-<?php echo esc_attr( $tab_key ); ?>"><?php esc_html_e( 'Third party domains', 'gdpr' ); ?></label></th>
203
- <td>
204
- <input type="text" id="hosts-<?php echo esc_attr( $tab_key ); ?>" class="regular-text" placeholder="domain.com" />
205
- <button class="button button-primary add-host" data-tabid="<?php echo esc_attr( $tab_key ); ?>"><?php esc_html_e( 'Add', 'gdpr' ); ?></button>
206
- <br>
207
- <span class="description"><?php esc_html_e( 'Cookies that are set by a third party, like facebook.com.', 'gdpr' ); ?></span>
208
- </td>
209
- </tr>
210
- </table>
211
- <div class="tab-hosts" data-tabid="<?php echo esc_attr( $tab_key ); ?>">
212
- <?php if ( isset( $tab['hosts'] ) && $tab['hosts'] ) : ?>
213
- <?php foreach ( $tab['hosts'] as $host_key => $host ) : ?>
214
- <div class="postbox">
215
- <h2 class="hndle"><?php echo esc_attr( $host_key ); ?><button class="notice-dismiss" type="button"><span class="screen-reader-text"><?php esc_html_e( 'Remove this domain.', 'gdpr' ); ?></span></button></h2>
216
- <input type="hidden" name="<?php echo esc_attr( 'gdpr_cookie_popup_content' ); ?>[<?php echo esc_attr( $tab_key ); ?>][hosts][<?php echo esc_attr( $host_key ); ?>][name]" value="<?php echo esc_attr( $host_key ); ?>" />
217
- <div class="inside">
218
- <table class="form-table">
219
- <tr>
220
- <th><label for="hosts-cookies-used-<?php echo esc_attr( $host_key ); ?>"><?php esc_html_e( 'Cookies used', 'gdpr' ); ?></label></th>
221
- <td>
222
- <textarea cols="53" rows="3" name="<?php echo esc_attr( 'gdpr_cookie_popup_content' ); ?>[<?php echo esc_attr( $tab_key ); ?>][hosts][<?php echo esc_attr( $host_key ); ?>][cookies_used]" id="hosts-cookies-used-<?php echo esc_attr( $host_key ); ?>" required><?php echo esc_attr( $host['cookies_used'] ); ?></textarea>
223
- <br>
224
- <span class="description"><?php esc_html_e( 'Comma separated list.', 'gdpr' ); ?></span>
225
- </td>
226
- </tr>
227
- <tr>
228
- <th><label for="hosts-cookies-optout-<?php echo esc_attr( $host_key ); ?>"><?php esc_html_e( 'How to Opt Out', 'gdpr' ); ?></label></th>
229
- <td>
230
- <input type="text" name="<?php echo esc_attr( 'gdpr_cookie_popup_content' ); ?>[<?php echo esc_attr( $tab_key ); ?>][hosts][<?php echo esc_attr( $host_key ); ?>][optout]" value="<?php echo esc_attr( $host['optout'] ); ?>" id="hosts-cookies-optout-<?php echo esc_attr( $host_key ); ?>" class="regular-text" required />
231
- <br>
232
- <span class="description"><?php esc_html_e( 'Url with instructions on how to opt out.', 'gdpr' ); ?></span>
233
- </td>
234
- </tr>
235
- </table>
236
- </div>
237
- </div>
238
- <?php endforeach; ?>
239
- <?php endif; ?>
240
- </div>
241
- </div><!-- .inside -->
242
- </div><!-- .postbox -->
243
- <?php endforeach ?>
244
- <?php endif ?>
245
- </div>
246
- </div>
247
- <div class="gdpr-tab hidden" data-id="consents">
248
- <h2><?php esc_html_e( 'Consents', 'gdpr' ) ?></h2>
249
- <input type="text" id="type-of-consent" class="regular-text" placeholder="<?php esc_attr_e( 'Type of consent', 'gdpr' ); ?>">
250
- <button class="button button-primary add-consent"><?php esc_html_e( 'Add consent', 'gdpr' ); ?></button>
251
- <div id="consent-tabs">
252
- <?php
253
- $default_consent_types = array(
254
- 'privacy-policy' => array(
255
- 'name' => 'Privacy Policy',
256
- 'required' => 'on',
257
- 'description' => sprintf( __( 'You read and agreed to our %s.', 'gdpr' ), '<a href="" target="_blank">' . esc_html( 'Privacy Policy', 'gdpr' ) . '</a>' ),
258
- 'registration' => sprintf( __( 'You read and agreed to our %s.', 'gdpr' ), '<a href="" target="_blank">' . esc_html( 'Privacy Policy', 'gdpr' ) . '</a>' ),
259
- )
260
- );
261
- $consent_types = get_option( 'gdpr_consent_types', $default_consent_types ); ?>
262
- <?php if ( ! empty( $consent_types ) ) : ?>
263
- <?php foreach ( $consent_types as $consent_key => $consent ) : ?>
264
- <div class="postbox" id="consent-type-content-<?php echo esc_attr( $consent_key ); ?>">
265
- <h2 class="hndle"><?php echo esc_html( $consent['name'] ); ?> <span>(id: <?php echo esc_html( $consent_key ); ?>)</span><?php echo ( 'privacy-policy' === $consent_key ) ? '' : '<button class="notice-dismiss" type="button"><span class="screen-reader-text">' . esc_html__( 'Unregister this consent.', 'gdpr' ) . '</span></button>'; ?></h2>
266
- <input type="hidden" name="<?php echo esc_attr( 'gdpr_consent_types' ); ?>[<?php echo esc_attr( $consent_key ); ?>][name]" value="<?php echo esc_attr( $consent['name'] ); ?>" />
267
- <div class="inside">
268
- <table class="form-table">
269
- <tr>
270
- <th><label for="required-<?php echo esc_attr( $consent_key ); ?>"><?php esc_html_e( 'Required', 'gdpr' ); ?></label></th>
271
- <td>
272
- <?php if ( 'privacy-policy' === $consent_key ): ?>
273
- <span><?php esc_html_e( 'Required', 'gdpr' ) ?></span>
274
- <input type="hidden" name="<?php echo esc_attr( 'gdpr_consent_types' ); ?>[<?php echo esc_attr( $consent_key ); ?>][required]" id="required-<?php echo esc_attr( $consent_key ); ?>" value="1">
275
- <?php else: ?>
276
- <label class="gdpr-switch">
277
- <input type="checkbox" name="<?php echo esc_attr( 'gdpr_consent_types' ); ?>[<?php echo esc_attr( $consent_key ); ?>][required]" <?php checked( esc_attr( $consent['required'] ), 1 ); ?> id="required-<?php echo esc_attr( $consent_key ); ?>">
278
- <span class="gdpr-slider round"></span>
279
- </label>
280
- <?php endif; ?>
281
- </td>
282
- </tr>
283
- <tr>
284
- <th><label for="consent-description-<?php echo esc_attr( $consent_key ); ?>"><?php esc_html_e( 'Consent description', 'gdpr' ); ?></label></th>
285
- <td><textarea name="<?php echo esc_attr( 'gdpr_consent_types' ); ?>[<?php echo esc_attr( $consent_key ); ?>][description]" id="consent-description-<?php echo esc_attr( $consent_key ); ?>" cols="53" rows="3" required><?php echo esc_html( $consent['description'] ); ?></textarea></td>
286
- </tr>
287
- <tr>
288
- <th><label for="consent-registration-<?php echo esc_attr( $consent_key ); ?>"><?php esc_html_e( 'Registration message', 'gdpr' ); ?></label></th>
289
- <td><textarea name="<?php echo esc_attr( 'gdpr_consent_types' ); ?>[<?php echo esc_attr( $consent_key ); ?>][registration]" id="consent-registration-<?php echo esc_attr( $consent_key ); ?>" cols="53" rows="3" required><?php echo esc_html( $consent['registration'] ); ?></textarea></td>
290
- </tr>
291
- </table>
292
- </div><!-- .inside -->
293
- </div><!-- .postbox -->
294
- <?php endforeach ?>
295
- <?php endif ?>
296
- </div>
297
  </div>
298
- <div class="gdpr-tab hidden" data-id="export-chanel">
299
- <h2><?php esc_html_e( 'Data Export Chanel', 'gdpr' ) ?></h2>
300
- <table class="form-table" data-id="general">
301
- <tbody>
302
- <tr>
303
- <th scope="row">
304
- <label for="data-export-chanel"><?php esc_html_e( 'Data Export Chanel', 'gdpr' ) ?></label>
305
- </th>
306
- <td>
307
- <?php
308
- $export_data = get_option('gdpr_export_data');
309
- ?>
310
- <input name="<?php echo esc_attr( 'gdpr_export_data' ); ?>" type="radio" value="export-data" <?php if ($export_data == 'export-data') { ?> checked <?php } ?> ><?php esc_html_e( 'Data Export with email attachment', 'gdpr' ) ?> <br>
311
- <input name="<?php echo esc_attr( 'gdpr_export_data' ); ?>" type="radio" value="file-export-data" <?php if ($export_data == 'file-export-data') { ?> checked <?php } ?>><?php esc_html_e( 'Data Export with download link', 'gdpr' ) ?> <br>
312
- </td>
313
- </tr>
314
- </tbody>
315
- </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  </div>
317
  <?php
318
  do_action( 'gdpr_extra_settings' );
1
  <div class="wrap gdpr">
2
+ <h1><?php esc_html_e( 'GDPR Settings', 'gdpr' ); ?></h1>
 
 
 
 
 
 
 
3
 
4
  <?php settings_errors(); ?>
5
 
7
 
8
  <?php settings_fields( 'gdpr' ); ?>
9
 
10
+ <table class="form-table">
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>
18
+ </span>
19
+ </th>
20
+ <td>
21
+ <?php $limit = get_option( 'gdpr_email_limit', 100 ); ?>
22
+ <input type="number" name="gdpr_email_limit" id="gdpr_email_limit" value="<?php echo esc_attr( $limit ); ?>">
23
+ <span class="description"><?php esc_html_e( 'Emails/hour', 'gdpr' ); ?></span>
24
+ </td>
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>
32
+ </span>
33
+ </th>
34
+ <td>
35
+ <?php $needs_review = get_option( 'gdpr_deletion_needs_review', true ); ?>
36
+ <input type="checkbox" name="gdpr_deletion_needs_review" id="gdpr_deletion_needs_review" value="1" <?php checked( $needs_review, true ); ?>><span class="description"><label for="gdpr_deletion_needs_review"><?php esc_html_e( 'Send all deletion requests to the review table.', 'gdpr' ); ?></label></span>
37
+ </td>
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 ); ?>
45
+ <input type="checkbox" name="gdpr_refresh_after_preferences_update" id="gdpr_refresh_after_preferences_update" value="1" <?php checked( $refresh_page, true ); ?>>
46
+ <span class="description"><?php esc_html_e( 'Useful for landing pages or to track a visit with Google Analytics.', 'gdpr' ); ?></span>
47
+ </td>
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 ); ?>
55
+ <input type="checkbox" name="gdpr_disable_css" id="gdpr_disable_css" value="1" <?php checked( $disable_css, true ); ?>><label for="gdpr_disable_css"><span class="description"><?php esc_html_e( 'Make sure you know what you are doing before checking this.', 'gdpr' ); ?></span></label>
56
+ </td>
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>
64
+ </span>
65
+ </th>
66
+ <td>
67
+ <?php $enable_telemetry = get_option( 'gdpr_enable_telemetry_tracker', false ); ?>
68
+ <input type="checkbox" name="gdpr_enable_telemetry_tracker" id="gdpr_enable_telemetry_tracker" value="1" <?php checked( $enable_telemetry, true ); ?>><label for="gdpr_enable_telemetry_tracker"><span class="description"><?php esc_html_e( 'Toggles the Telemetry Tracker On/Off. (experimental)', 'gdpr' ); ?></span></label>
69
+ </td>
70
+ </tr>
71
+ </tbody>
72
+ </table>
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 ); ?>
86
+ <input type="checkbox" name="gdpr_enable_privacy_bar" id="gdpr_enable_privacy_bar" value="1" <?php checked( $enable_privacy_bar, true ); ?>><label for="gdpr_enable_privacy_bar"><span class="description"><?php esc_html_e( 'Toggles the Privacy Bar On/Off.', 'gdpr' ); ?></span></label>
87
+ </td>
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 ); ?>
95
+ <input type="checkbox" name="gdpr_display_cookie_categories_in_bar" id="gdpr_display_cookie_categories_in_bar" value="1" <?php checked( $display_cookie_cat_checkboxes, true ); ?>><label for="gdpr_display_cookie_categories_in_bar"></label>
96
+ </td>
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>
104
+ </span>
105
+ </th>
106
+ <td>
107
+ <?php $privacy_bar_content = get_option( 'gdpr_cookie_banner_content', '' ); ?>
108
+ <textarea name="gdpr_cookie_banner_content" id="gdpr_cookie_banner_content" cols="80" rows="6"><?php echo esc_html( $privacy_bar_content ); ?></textarea>
109
+ </td>
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>
117
+ </span>
118
+ </th>
119
+ <td>
120
+ <?php $privacy_excerpt = get_option( 'gdpr_cookie_privacy_excerpt', '' ); ?>
121
+ <textarea name="gdpr_cookie_privacy_excerpt" id="gdpr_cookie_privacy_excerpt" cols="80" rows="6"><?php echo esc_html( $privacy_excerpt ); ?></textarea>
122
+ <p class="description"><?php esc_html_e( 'This will appear in the consent section of the privacy preference window.', 'gdpr' ); ?></p>
123
+ </td>
124
+ </tr>
125
+ </tbody>
126
+ </table>
127
+ <hr>
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 echo sprintf(
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
+ ) ?></p>
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 ); ?>
144
+ <input type="checkbox" name="<?php echo esc_attr( 'gdpr_use_recaptcha' ); ?>" id="gdpr_use_recaptcha" value="1" <?php checked( $use_recaptcha, true ); ?>>
145
+ </td>
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', '' ); ?>
153
+ <input type="text" name="gdpr_recaptcha_site_key" value="<?php echo esc_attr( $site_key ); ?>" placeholder="">
154
+ </td>
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', '' ); ?>
162
+ <input type="password" name="gdpr_recaptcha_secret_key" value="<?php echo esc_attr( $secret_key ); ?>" placeholder="">
163
+ </td>
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 ); ?>
178
+ <input type="checkbox" name="<?php echo esc_attr( 'gdpr_add_consent_checkboxes_registration' ); ?>" id="gdpr_add_consent_checkboxes_registration" value="1" <?php checked( $add_checkboxes_to_registration, true ); ?>>
179
  </td>
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 ); ?>
187
+ <input type="checkbox" name="<?php echo esc_attr( 'gdpr_add_consent_checkboxes_checkout' ); ?>" id="gdpr_add_consent_checkboxes_checkout" value="1" <?php checked( $add_checkboxes_to_checkout, true ); ?>>
 
 
 
 
 
 
 
 
 
188
  </td>
189
  </tr>
190
  </tbody>
191
  </table>
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 tab', 'gdpr' ); ?></button>
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>
205
+ <th>
206
+ <label for="rename-<?php echo esc_attr( $cat_id ); ?>">
207
+ <?php esc_html_e( 'Category Name', 'gdpr' ); ?>:<span class="gdpr-required">*</span>
208
+ <span class="screen-reader-text"><?php esc_attr_e( 'Change this value if you want to name it something different.', 'gdpr' ); ?></span>
209
+ <span data-tooltip="<?php esc_attr_e( 'Change this value if you want to name it something different.', 'gdpr' ); ?>">
210
+ <span class="dashicons dashicons-info"></span>
211
+ </span>
212
+ </label>
213
+ </th>
214
+ <td>
215
+ <input type="text" name="gdpr_cookie_popup_content[<?php echo esc_attr( $cat_id ); ?>][name]" value="<?php echo esc_attr( $cookie_cat['name'] ); ?>" required>
216
+ </td>
217
+ </tr>
218
+ <tr>
219
+ <th>
220
+ <label for="status-<?php echo esc_attr( $cat_id ); ?>">
221
+ <?php esc_html_e( 'Status', 'gdpr' ); ?>:<span class="gdpr-required">*</span>
222
+ <span class="screen-reader-text"><?php esc_attr_e( '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.', 'gdpr' ); ?></span>
223
+ <span data-tooltip="<?php esc_attr_e( '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.', 'gdpr' ); ?>">
224
+ <span class="dashicons dashicons-info"></span>
225
+ </span>
226
+ </label>
227
+ </th>
228
+ <td>
229
+ <select name="gdpr_cookie_popup_content[<?php echo esc_attr( $cat_id ); ?>][status]" id="status-<?php echo esc_attr( $cat_id ); ?>" required>
230
+ <option value=""></option>
231
+ <option value="required" <?php selected( isset( $registered_cookies[ $cat_id ]['status'] ) ? $registered_cookies[ $cat_id ]['status'] : '', 'required' ); ?>><?php esc_html_e( 'Required', 'gdpr' ); ?></option>
232
+ <option value="on" <?php selected( isset( $registered_cookies[ $cat_id ]['status'] ) ? $registered_cookies[ $cat_id ]['status'] : '', 'on' ); ?>><?php esc_html_e( 'ON', 'gdpr' ); ?></option>
233
+ <option value="off" <?php selected( isset( $registered_cookies[ $cat_id ]['status'] ) ? $registered_cookies[ $cat_id ]['status'] : '', 'off' ); ?>><?php esc_html_e( 'OFF', 'gdpr' ); ?></option>
234
+ </select>
235
+ </td>
236
+ </tr>
237
+ <tr>
238
+ <th>
239
+ <label for="cookies-used-<?php echo esc_attr( $cat_id ); ?>">
240
+ <?php esc_html_e( 'Cookies used', 'gdpr' ); ?>:
241
+ <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>
242
+ <span data-tooltip="<?php esc_attr_e( 'A comma-separated list of cookies that your site is using that fit this category.', 'gdpr' ); ?>">
243
+ <span class="dashicons dashicons-info"></span>
244
+ </span>
245
+ </label>
246
+ </th>
247
+ <td>
248
+ <textarea cols="53" rows="3" name="gdpr_cookie_popup_content[<?php echo esc_attr( $cat_id ); ?>][cookies_used]" id="cookies-used-<?php echo esc_attr( $cat_id ); ?>"><?php echo esc_attr( $registered_cookies[ $cat_id ]['cookies_used'] ); ?></textarea>
249
+ <br>
250
+ <span class="description"><?php esc_html_e( 'Comma separated list.', 'gdpr' ); ?></span>
251
+ </td>
252
+ </tr>
253
+ <tr>
254
+ <th>
255
+ <label for="tab-how-we-use-<?php echo esc_attr( $cat_id ); ?>">
256
+ <?php esc_html_e( 'How are these used', 'gdpr' ); ?>:
257
+ <span class="screen-reader-text"><?php esc_attr_e( 'A brief explanation of why you are requesting to use these cookies, what they are for, and how you process them.', 'gdpr' ); ?></span>
258
+ <span data-tooltip="<?php esc_attr_e( 'A brief explanation of why you are requesting to use these cookies, what they are for, and how you process them.', 'gdpr' ); ?>">
259
+ <span class="dashicons dashicons-info"></span>
260
+ </span>
261
+ </label>
262
+ </th>
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
+ <th>
267
+ <label for="hosts-<?php echo esc_attr( $cat_id ); ?>">
268
+ <?php esc_html_e( 'Third party domain', 'gdpr' ); ?>:
269
+ <span class="screen-reader-text"><?php esc_attr_e( 'E.g. facebook.com', 'gdpr' ); ?></span>
270
+ <span data-tooltip="<?php esc_attr_e( 'E.g. facebook.com', 'gdpr' ); ?>">
271
+ <span class="dashicons dashicons-info"></span>
272
+ </span>
273
+ </label>
274
+ </th>
275
+ <td>
276
+ <input type="text" id="hosts-<?php echo esc_attr( $cat_id ); ?>" class="regular-text" placeholder="domain.com" />
277
+ <button class="button button-primary add-host" data-tabid="<?php echo esc_attr( $cat_id ); ?>"><?php esc_html_e( 'Add', 'gdpr' ); ?></button>
278
+ <br>
279
+ <span class="description"><?php esc_html_e( 'Cookies that are set by a third party, like facebook.com.', 'gdpr' ); ?></span>
280
+ </td>
281
+ </tr>
282
+ </table>
283
+ <div class="tab-hosts" data-tabid="<?php echo esc_attr( $cat_id ); ?>">
284
+ <?php if ( isset( $cookie_cat['domains'] ) && $cookie_cat['domains'] ) : ?>
285
+ <?php foreach ( $cookie_cat['domains'] as $domain_id => $domain ) : ?>
286
+ <div class="postbox">
287
+ <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>
288
+ <div class="inside">
289
+ <table class="form-table">
290
+ <tr>
291
+ <th>
292
+ <label for="hosts-cookies-used-<?php echo esc_attr( $domain_id ); ?>">
293
+ <?php esc_html_e( 'Cookies used', 'gdpr' ); ?>:
294
+ <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>
295
+ <span data-tooltip="<?php esc_attr_e( 'A comma separated list of cookies that your site is using from this third-party provider.', 'gdpr' ); ?>">
296
+ <span class="dashicons dashicons-info"></span>
297
+ </span>
298
+ </label>
299
+ </th>
300
+ <td>
301
+ <textarea cols="53" rows="3" name="gdpr_cookie_popup_content[<?php echo esc_attr( $cat_id ); ?>][domains][<?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>
302
+ </td>
303
+ </tr>
304
+ <tr>
305
+ <th>
306
+ <label for="hosts-cookies-optout-<?php echo esc_attr( $domain_id ); ?>">
307
+ <?php esc_html_e( 'Opt Out Link', 'gdpr' ); ?>:
308
+ <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>
309
+ <span data-tooltip="<?php esc_attr_e( 'Add a link with the third-party instructions on how to opt out of their cookies.', 'gdpr' ); ?>">
310
+ <span class="dashicons dashicons-info"></span>
311
+ </span>
312
+ </label>
313
+ </th>
314
+ <td>
315
+ <input type="text" name="gdpr_cookie_popup_content[<?php echo esc_attr( $cat_id ); ?>][domains][<?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" />
316
+ <br>
317
+ <span class="description"><?php esc_html_e( 'Url with instructions on how to opt out.', 'gdpr' ); ?></span>
318
+ </td>
319
+ </tr>
320
+ </table>
321
+ </div>
322
+ </div>
323
+ <?php endforeach; ?>
324
+ <?php endif; ?>
325
+ </div>
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">
343
+ <tr>
344
+ <th>
345
+ <label for="consent-policy-page-<?php echo esc_attr( $consent_id ); ?>">
346
+ <?php esc_html_e( 'Policy Page', 'gdpr' ); ?>:
347
+ <span class="screen-reader-text"><?php esc_attr_e( '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.', 'gdpr' ); ?></span>
348
+ <span data-tooltip="<?php esc_attr_e( '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.', 'gdpr' ); ?>">
349
+ <span class="dashicons dashicons-info"></span>
350
+ </span>
351
+ </label>
352
+ </th>
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>
361
+ </tr>
362
+ <tr>
363
+ <th>
364
+ <label for="consent-description-<?php echo esc_attr( $consent_id ); ?>">
365
+ <?php esc_html_e( 'Long description', 'gdpr' ); ?>:<span class="gdpr-required">*</span>
366
+ <span class="screen-reader-text"><?php esc_attr_e( 'This will show up at the privacy preferences center, under the name of the consent.', 'gdpr' ); ?></span>
367
+ <span data-tooltip="<?php esc_attr_e( 'This will show up at the privacy preferences center, under the name of the consent.', 'gdpr' ); ?>">
368
+ <span class="dashicons dashicons-info"></span>
369
+ </span>
370
+ </label>
371
+ </th>
372
+ <td><textarea name="gdpr_consent_types[<?php echo esc_attr( $consent_id ); ?>][description]" id="consent-description-<?php echo esc_attr( $consent_id ); ?>" cols="53" rows="3" required><?php echo esc_html( $consent['description'] ); ?></textarea></td>
373
+ </tr>
374
+ <tr>
375
+ <th>
376
+ <label for="consent-registration-<?php echo esc_attr( $consent_id ); ?>">
377
+ <?php esc_html_e( 'Short description', 'gdpr' ); ?>:<span class="gdpr-required">*</span>
378
+ <span class="screen-reader-text"><?php esc_attr_e( 'This will show up at registration forms next to checkboxes.', 'gdpr' ); ?></span>
379
+ <span data-tooltip="<?php esc_attr_e( 'This will show up at registration forms next to checkboxes.', 'gdpr' ); ?>">
380
+ <span class="dashicons dashicons-info"></span>
381
+ </span>
382
+ </label>
383
+ </th>
384
+ <td><textarea name="gdpr_consent_types[<?php echo esc_attr( $consent_id ); ?>][registration]" id="consent-registration-<?php echo esc_attr( $consent_id ); ?>" cols="53" rows="3" required><?php echo esc_html( $consent['registration'] ); ?></textarea></td>
385
+ </tr>
386
+ </table>
387
+ </div><!-- .inside -->
388
+ </div><!-- .postbox -->
389
+ <?php endforeach ?>
390
+ <?php endif ?>
391
  </div>
392
  <?php
393
  do_action( 'gdpr_extra_settings' );
admin/partials/templates/tmpl-consents.php CHANGED
@@ -2,25 +2,50 @@
2
  <div class="postbox" id="consent-type-content-{{data.key}}">
3
  <h2 class="hndle">{{data.name}} <span>(id: {{data.key}})</span><button class="notice-dismiss" type="button"><span class="screen-reader-text"><?php esc_html_e( 'Unregister this consent.', 'gdpr' ); ?></span></button></h2>
4
  <input type="hidden" name="{{data.option_name}}[{{data.key}}][name]" value="{{data.name}}" />
5
- <input type="hidden" name="{{data.option_name}}[{{data.key}}][id]" value="{{data.id}}" />
6
  <div class="inside">
7
  <table class="form-table">
8
  <tr>
9
- <th><label for="required-{{data.key}}"><?php esc_html_e( 'Required', 'gdpr' ); ?></label></th>
10
- <td>
11
- <label class="gdpr-switch">
12
- <input type="checkbox" name="{{data.option_name}}[{{data.key}}][required]" id="required-{{data.key}}">
13
- <span class="gdpr-slider round"></span>
 
 
14
  </label>
 
 
 
 
 
 
 
 
15
  </td>
16
  </tr>
17
  <tr>
18
- <th><label for="consent-description-{{data.key}}"><?php esc_html_e( 'Consent description', 'gdpr' ); ?></label></th>
19
- <td><textarea name="{{data.option_name}}[{{data.key}}][description]" id="consent-description-{{data.key}}" cols="53" rows="3" required></textarea></td>
 
 
 
 
 
 
 
 
20
  </tr>
21
  <tr>
22
- <th><label for="consent-registration-{{data.key}}"><?php esc_html_e( 'Registration message', 'gdpr' ); ?></label></th>
23
- <td><textarea name="{{data.option_name}}[{{data.key}}][registration]" id="consent-registration-{{data.key}}" cols="53" rows="3" required></textarea></td>
 
 
 
 
 
 
 
 
24
  </tr>
25
  </table>
26
  </div><!-- .inside -->
2
  <div class="postbox" id="consent-type-content-{{data.key}}">
3
  <h2 class="hndle">{{data.name}} <span>(id: {{data.key}})</span><button class="notice-dismiss" type="button"><span class="screen-reader-text"><?php esc_html_e( 'Unregister this consent.', 'gdpr' ); ?></span></button></h2>
4
  <input type="hidden" name="{{data.option_name}}[{{data.key}}][name]" value="{{data.name}}" />
 
5
  <div class="inside">
6
  <table class="form-table">
7
  <tr>
8
+ <th>
9
+ <label for="consent-policy-page-{{data.key}}">
10
+ <?php esc_html_e( 'Policy Page', 'gdpr' ); ?>:
11
+ <span class="screen-reader-text"><?php esc_attr_e( '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.', 'gdpr' ); ?></span>
12
+ <span data-tooltip="<?php esc_attr_e( '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.', 'gdpr' ); ?>">
13
+ <span class="dashicons dashicons-info"></span>
14
+ </span>
15
  </label>
16
+ </th>
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>
25
  </tr>
26
  <tr>
27
+ <th>
28
+ <label for="consent-description-{{data.key}}">
29
+ <?php esc_html_e( 'Long description', 'gdpr' ); ?>:<span class="gdpr-required">*</span>
30
+ <span class="screen-reader-text"><?php esc_attr_e( 'This will show up at the privacy preferences center, under the name of the consent.', 'gdpr' ); ?></span>
31
+ <span data-tooltip="<?php esc_attr_e( 'This will show up at the privacy preferences center, under the name of the consent.', 'gdpr' ); ?>">
32
+ <span class="dashicons dashicons-info"></span>
33
+ </span>
34
+ </label>
35
+ </th>
36
+ <td><textarea name="gdpr_consent_types[{{data.key}}][description]" id="consent-description-{{data.key}}" cols="53" rows="3" required></textarea></td>
37
  </tr>
38
  <tr>
39
+ <th>
40
+ <label for="consent-registration-{{data.key}}">
41
+ <?php esc_html_e( 'Short description', 'gdpr' ); ?>:<span class="gdpr-required">*</span>
42
+ <span class="screen-reader-text"><?php esc_attr_e( 'This will show up at registration forms next to checkboxes.', 'gdpr' ); ?></span>
43
+ <span data-tooltip="<?php esc_attr_e( 'This will show up at registration forms next to checkboxes.', 'gdpr' ); ?>">
44
+ <span class="dashicons dashicons-info"></span>
45
+ </span>
46
+ </label>
47
+ </th>
48
+ <td><textarea name="gdpr_consent_types[{{data.key}}][registration]" id="consent-registration-{{data.key}}" cols="53" rows="3" required></textarea></td>
49
  </tr>
50
  </table>
51
  </div><!-- .inside -->
admin/partials/templates/tmpl-cookies.php CHANGED
@@ -1,39 +1,86 @@
1
  <script type="text/html" id="tmpl-cookie-tabs">
2
  <div class="postbox" id="cookie-tab-content-{{data.key}}">
3
- <h2 class="hndle">{{data.name}}<button class="notice-dismiss" type="button"><span class="screen-reader-text"><?php esc_html_e( 'Remove this tab.', 'gdpr' ); ?></span></button></h2>
4
- <input type="hidden" name="{{data.option_name}}[{{data.key}}][name]" value="{{data.name}}" />
5
  <div class="inside">
6
  <table class="form-table">
7
  <tr>
8
- <th><label for="always-active-{{data.key}}"><?php esc_html_e( 'Always active', 'gdpr' ); ?></label></th>
9
- <td>
10
- <label class="gdpr-switch">
11
- <input type="checkbox" name="{{data.option_name}}[{{data.key}}][always_active]" id="always-active-{{data.key}}">
12
- <span class="gdpr-slider round"></span>
 
 
13
  </label>
 
 
 
14
  </td>
15
  </tr>
16
  <tr>
17
- <th><label for="tab-how-we-use-{{data.key}}"><?php esc_html_e( 'How we use', 'gdpr' ); ?></label></th>
18
- <td><textarea name="{{data.option_name}}[{{data.key}}][how_we_use]" id="tab-how-we-use-{{data.key}}" cols="53" rows="3" required></textarea></td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  </tr>
20
  <tr>
21
- <th><label for="cookies-used-{{data.key}}"><?php esc_html_e( 'Cookies used by the site', 'gdpr' ); ?></label></th>
 
 
 
 
 
 
 
 
22
  <td>
23
- <textarea cols="53" rows="3" name="{{data.option_name}}[{{data.key}}][cookies_used]" id="cookies-used-{{data.key}}" required></textarea>
24
  <br>
25
  <span class="description"><?php esc_html_e( 'Comma separated list.', 'gdpr' ); ?></span>
26
  </td>
27
  </tr>
28
  <tr>
29
- <th><label for="hosts-{{data.key}}"><?php esc_html_e( 'Third Party Domains', 'gdpr' ); ?></label></th>
30
- <td>
31
- <input type="text" id="hosts-{{data.key}}" class="regular-text" placeholder="domain.com" />
32
- <button class="button button-primary add-host" data-tabid="{{data.key}}"><?php esc_html_e( 'Add', 'gdpr' ); ?></button>
33
- <br>
34
- <span class="description"><?php esc_html_e( 'Cookies that are set by a third party, like facebook.com', 'gdpr' ); ?></span>
35
- </td>
 
 
 
36
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  </table>
38
  <div class="tab-hosts" data-tabid="{{data.key}}">
39
 
@@ -42,17 +89,16 @@
42
  </div><!-- .postbox -->
43
  </script>
44
 
45
-
46
  <script type="text/html" id="tmpl-cookie-tabs-hosts">
47
  <div class="postbox">
48
  <h2 class="hndle">{{data.host_key}}<button class="notice-dismiss" type="button"><span class="screen-reader-text"><?php esc_html_e( 'Remove this domain.', 'gdpr' ); ?></span></button></h2>
49
- <input type="hidden" name="{{data.option_name}}[{{data.tab_key}}][hosts][{{data.host_key}}][name]" value="{{data.host_key}}" />
50
  <div class="inside">
51
  <table class="form-table">
52
  <tr>
53
  <th><label for="hosts-cookies-used-{{data.host_key}}"><?php esc_html_e( 'Cookies used', 'gdpr' ); ?></label></th>
54
  <td>
55
- <textarea cols="53" rows="3" name="{{data.option_name}}[{{data.tab_key}}][hosts][{{data.host_key}}][cookies_used]" id="hosts-cookies-used-{{data.host_key}}" required></textarea>
56
  <br>
57
  <span class="description"><?php esc_html_e( 'Comma separated list.', 'gdpr' ); ?></span>
58
  </td>
@@ -60,7 +106,7 @@
60
  <tr>
61
  <th><label for="hosts-cookies-optout-{{data.host_key}}"><?php esc_html_e( 'How to Opt Out', 'gdpr' ); ?></label></th>
62
  <td>
63
- <input type="text" name="{{data.option_name}}[{{data.tab_key}}][hosts][{{data.host_key}}][optout]" id="hosts-cookies-optout-{{data.host_key}}" class="regular-text" required />
64
  <br>
65
  <span class="description"><?php esc_html_e( 'Url with instructions on how to opt out.', 'gdpr' ); ?></span>
66
  </td>
1
  <script type="text/html" id="tmpl-cookie-tabs">
2
  <div class="postbox" id="cookie-tab-content-{{data.key}}">
3
+ <h2 class="hndle">{{data.name}}</h2>
 
4
  <div class="inside">
5
  <table class="form-table">
6
  <tr>
7
+ <th>
8
+ <label for="rename-{{data.key}}">
9
+ <?php esc_html_e( 'Category Name', 'gdpr' ); ?>:<span class="gdpr-required">*</span>
10
+ <span class="screen-reader-text"><?php esc_attr_e( 'Change this value if you want to rename this category something different.', 'gdpr' ); ?></span>
11
+ <span data-tooltip="<?php esc_attr_e( 'Change this value if you want to rename this category something different.', 'gdpr' ); ?>">
12
+ <span class="dashicons dashicons-info"></span>
13
+ </span>
14
  </label>
15
+ </th>
16
+ <td>
17
+ <input type="text" name="gdpr_cookie_popup_content[{{data.key}}][name]" value="{{data.name}}" required>
18
  </td>
19
  </tr>
20
  <tr>
21
+ <th>
22
+ <label for="status-{{data.key}}">
23
+ <?php esc_html_e( 'Status', 'gdpr' ); ?>:<span class="gdpr-required">*</span>
24
+ <span class="screen-reader-text"><?php esc_attr_e( '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.', 'gdpr' ); ?></span>
25
+ <span data-tooltip="<?php esc_attr_e( '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.', 'gdpr' ); ?>">
26
+ <span class="dashicons dashicons-info"></span>
27
+ </span>
28
+ </label>
29
+ </th>
30
+ <td>
31
+ <select name="gdpr_cookie_popup_content[{{data.key}}][status]" id="status-{{data.key}}" required>
32
+ <option value=""></option>
33
+ <option value="required"><?php esc_html_e( 'Required', 'gdpr' ); ?></option>
34
+ <option value="on"><?php esc_html_e( 'ON', 'gdpr' ); ?></option>
35
+ <option value="off"><?php esc_html_e( 'OFF', 'gdpr' ); ?></option>
36
+ </select>
37
+ </td>
38
  </tr>
39
  <tr>
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>
48
+ </th>
49
  <td>
50
+ <textarea cols="53" rows="3" name="gdpr_cookie_popup_content[{{data.key}}][cookies_used]" id="cookies-used-{{data.key}}"></textarea>
51
  <br>
52
  <span class="description"><?php esc_html_e( 'Comma separated list.', 'gdpr' ); ?></span>
53
  </td>
54
  </tr>
55
  <tr>
56
+ <th>
57
+ <label for="tab-how-we-use-{{data.key}}">
58
+ <?php esc_html_e( 'How are these used', 'gdpr' ); ?>:
59
+ <span class="screen-reader-text"><?php esc_attr_e( 'A brief explanation on why you are requesting to use these cookies, what they are for and how you process them.', 'gdpr' ); ?></span>
60
+ <span data-tooltip="<?php esc_attr_e( 'A brief explanation on why you are requesting to use these cookies, what they are for and how you process them.', 'gdpr' ); ?>">
61
+ <span class="dashicons dashicons-info"></span>
62
+ </span>
63
+ </label>
64
+ </th>
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
 
89
  </div><!-- .postbox -->
90
  </script>
91
 
 
92
  <script type="text/html" id="tmpl-cookie-tabs-hosts">
93
  <div class="postbox">
94
  <h2 class="hndle">{{data.host_key}}<button class="notice-dismiss" type="button"><span class="screen-reader-text"><?php esc_html_e( 'Remove this domain.', 'gdpr' ); ?></span></button></h2>
95
+ <input type="hidden" name="{{data.option_name}}[{{data.tab_key}}][domains][{{data.host_key}}][name]" value="{{data.host_key}}" />
96
  <div class="inside">
97
  <table class="form-table">
98
  <tr>
99
  <th><label for="hosts-cookies-used-{{data.host_key}}"><?php esc_html_e( 'Cookies used', 'gdpr' ); ?></label></th>
100
  <td>
101
+ <textarea cols="53" rows="3" name="{{data.option_name}}[{{data.tab_key}}][domains][{{data.host_key}}][cookies_used]" id="hosts-cookies-used-{{data.host_key}}" required></textarea>
102
  <br>
103
  <span class="description"><?php esc_html_e( 'Comma separated list.', 'gdpr' ); ?></span>
104
  </td>
106
  <tr>
107
  <th><label for="hosts-cookies-optout-{{data.host_key}}"><?php esc_html_e( 'How to Opt Out', 'gdpr' ); ?></label></th>
108
  <td>
109
+ <input type="text" name="{{data.option_name}}[{{data.tab_key}}][domains][{{data.host_key}}][optout]" id="hosts-cookies-optout-{{data.host_key}}" class="regular-text" required />
110
  <br>
111
  <span class="description"><?php esc_html_e( 'Url with instructions on how to opt out.', 'gdpr' ); ?></span>
112
  </td>
admin/partials/tools.php CHANGED
@@ -85,14 +85,14 @@ if ( isset( $_GET['type'], $_GET['key'] ) ) {
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 approximate number of data subjects concerned and the categories and 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 other contact point where more information can be obtained.', 'gdpr' ) ?></span>
96
  </td>
97
  </tr>
98
  <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>
assets/css/gdpr-admin.css CHANGED
@@ -1 +1 @@
1
- .gdpr-settings-form #tabs,.gdpr-settings-form #consent-tabs{margin-top:20px}.gdpr-settings-form #tabs .hndle,.gdpr-settings-form #consent-tabs .hndle{font-size:16px;padding:8px 12px;margin:0;line-height:1.4}.gdpr-settings-form #tabs .hndle span,.gdpr-settings-form #consent-tabs .hndle span{font-size:12px}.privacy-page-updated-notice form{display:inline-block}.privacy-page-updated-notice form .button-secondary{vertical-align:baseline}.privacy-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}#tabs .postbox .inside{margin:0 !important;padding:0 20px 20px 20px}#tabs .postbox .inside .form-table{margin-top:0}#tabs .postbox .inside .tab-hosts .postbox{margin-bottom:0}#tabs .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}}
1
+ [data-tooltip]{position:relative;z-index:2;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 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}.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-privacy-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{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}@media screen and (max-width: 1024px){.gdpr.gdpr-privacy-bar .gdpr-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}}.gdpr.gdpr-privacy-bar .gdpr-wrapper:after{content:"";display:table;clear:both}.gdpr.gdpr-privacy-bar .gdpr-wrapper p{margin:0;font-size:14px;font-weight:normal}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content{-webkit-box-flex:1;-ms-flex:1;flex:1;padding-right:200px}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content p{color:#ffffff}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content a{color:#fff;text-decoration:underline}@media screen and (max-width: 1024px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-content{padding-right:0;padding-bottom:20px}}.gdpr.gdpr-privacy-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: 640px){.gdpr.gdpr-privacy-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 button:first-of-type{margin-left:10px}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right button:first-of-type{margin:0 0 10px 7px}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right button:first-of-type:before{left:-7px}}.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right button:last-of-type{margin-right:0;margin-left:20px}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar .gdpr-wrapper .gdpr-right button:last-of-type{margin:0}}.gdpr.gdpr-privacy-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{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{background:none}.gdpr.gdpr-privacy-bar button{margin:0 5px;padding:9px 10px}@media screen and (max-width: 640px){.gdpr.gdpr-privacy-bar button{margin:0}}.gdpr.gdpr-privacy-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}.gdpr.gdpr-privacy-bar .gdpr-agreement:hover{background:#008ec2;border-color:#006799}.gdpr.gdpr-privacy-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{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{-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{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-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}@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;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{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}.gdpr-reconsent-modal{width:100%;height:100%;position:fixed;top:0;left:0;background:#fff;z-index:9999999}.gdpr-reconsent-modal .gdpr-reconsent-modal-content{width:90%;margin:0 auto;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);-ms-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}@media screen and (min-width: 640px){.gdpr-reconsent-modal .gdpr-reconsent-modal-content{width:50%}}.gdpr-reconsent-modal .gdpr-reconsent-modal-content .gdpr-privacy-viewer{height:50vh;width:100%;border:1px solid #cecece;padding:20px;overflow:auto}.gdpr-reconsent-modal .gdpr-reconsent-modal-content textarea{resize:none}.gdpr-reconsent-modal .gdpr-reconsent-modal-content .gdpr-consent-buttons{text-align:center;margin:15px 0}.gdpr-reconsent-modal .gdpr-reconsent-modal-content .gdpr-consent-buttons a{padding:10px 20px;display:inline-block;margin:0 10px;color:#fff;border-radius:5px}.gdpr-reconsent-modal .gdpr-reconsent-modal-content .gdpr-consent-buttons a.gdpr-agree{background:#28a745}.gdpr-reconsent-modal .gdpr-reconsent-modal-content .gdpr-consent-buttons a.gdpr-disagree{color:#455561;padding:0}.gdpr-reconsent-modal .gdpr-reconsent-modal-content .gdpr-consent-loading{display:none;text-align:center;margin:15px 0}.gdpr-reconsent-modal .gdpr-reconsent-modal-content .gdpr-consent-loading .gdpr-loading{padding:10px 20px;display:inline-block;margin:0 10px}
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}
assets/js/gdpr-admin.js CHANGED
@@ -1 +1 @@
1
- !function(t){"use strict";t(function(){function a(t){t=(t=t.replace(/^\s+|\s+$/g,"")).toLowerCase();for(var a="àáäâèéëêìíïîòóöôùúüûñç·/_,:;",e=0,n=a.length;e<n;e++)t=t.replace(new RegExp(a.charAt(e),"g"),"aaaaeeeeiiiioooouuuunc------".charAt(e));return t=t.replace(/[^a-z0-9 -]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-")}t(document).on("click",".gdpr-settings-form .notice-dismiss",function(){t(this).parent().parent().remove()}),t(".add-tab").click(function(e){e.preventDefault();var n=t("#cookie-tabs");if(""!==n.val()){var i=a(n.val()),s=n.val(),d=wp.template("cookie-tabs");t("#tabs").append(d({key:i,name:s,option_name:"gdpr_cookie_popup_content"})),n.val("")}}),t(".add-consent").click(function(e){e.preventDefault();var n=t("#type-of-consent");if(""!==n.val()){var i=a(n.val()),s=n.val(),d=wp.template("consents");t("#consent-tabs").append(d({key:i,name:s,option_name:"gdpr_consent_types"})),n.val("")}}),t("#consent-tabs, #tabs").sortable(),t(document).on("click",".add-host",function(a){a.preventDefault();var e=t(this).siblings("input");if(""!==e.val()){var n=t(this).data("tabid"),i=e.val().toLowerCase().replace(" ","-"),s=wp.template("cookie-tabs-hosts");t('.tab-hosts[data-tabid="'+n+'"]').append(s({host_key:i,tab_key:n,option_name:"gdpr_cookie_popup_content"})),e.val("")}}),t(document).on("click","#tabs .notice-dismiss",function(a){a.preventDefault(),t(this).closest(".postbox").remove()}),t(document).on("click",".gdpr-request-table .gdpr-review",function(a){a.preventDefault();var e=t(this).data("index");t("tr[data-index="+e+"] div").slideToggle()}),t(document).on("click",".gdpr .nav-tab-wrapper a",function(a){var e=t(this).attr("href");if(e=e.replace("#",""),t(this).addClass("nav-tab-active"),t(this).siblings().removeClass("nav-tab-active"),t(".gdpr .gdpr-tab").addClass("hidden"),t(".gdpr .gdpr-tab[data-id="+e+"]").removeClass("hidden"),-1!==location.search.indexOf("page=gdpr-settings")){var n=t('.gdpr form input[name="_wp_http_referer"]'),i=n.val().split("#")[0];n.val(i+"#"+e)}});var e=window.location.hash;if(e){if(t('.gdpr .nav-tab-wrapper a[href="'+e+'"]').addClass("nav-tab-active"),t('.gdpr .gdpr-tab[data-id="'+e.replace("#","")+'"]').removeClass("hidden"),-1!==location.search.indexOf("page=gdpr-settings")){var n=t('.gdpr form input[name="_wp_http_referer"]'),i=n.val().split("#")[0];n.val(i+e)}}else t(".gdpr .nav-tab-wrapper a:eq(0)").addClass("nav-tab-active"),t(".gdpr .gdpr-tab:eq(0)").removeClass("hidden");t(document).on("change",".gdpr-reassign",function(){0!=t(this).val()?(t(this).closest("tr").find("td:last .button-primary").attr("disabled",!1),t(this).closest("tr").find('td:last input[name="reassign_to"]').val(t(this).val())):(t(this).closest("tr").find("td:last .button-primary").attr("disabled",!0),t(this).closest("tr").find('td:last input[name="reassign_to"]').val(""))}),t(document).on("submit",".gdpr-reassign-content",function(a){a.preventDefault();var e=t(this).find('input[name="user_email"]').val(),n=t(this).find('input[name="reassign_to"]').val(),i=t(this).find('input[name="post_type"]').val(),s=t(this).find('input[name="post_count"]').val(),d=t(this).find('input[name="gdpr_reassign_content_nonce"]').val(),o=t(this).find(".button-primary"),r=t(this).find(".spinner"),p=t(this).find("p.hidden");n&&(o.addClass("hidden"),r.addClass("is-active"),r.css("display","block"),t.post(ajaxurl,{action:"gdpr_reassign_content",user_email:e,reassign_to:n,post_type:i,post_count:s,nonce:d},function(t){r.removeClass("is-active"),r.hide(),p.removeClass("hidden"),t.success||p.text(t.data)}))}),t(document).on("submit",".gdpr-anonymize-comments",function(a){a.preventDefault();var e=t(this).find('input[name="user_email"]').val(),n=t(this).find('input[name="comment_count"]').val(),i=t(this).find('input[name="gdpr_anonymize_comments_nonce"]').val(),s=t(this).find(".button-primary"),d=t(this).find(".spinner"),o=t(this).find("p.hidden");s.addClass("hidden"),d.addClass("is-active"),d.css("display","block"),t.post(ajaxurl,{action:"gdpr_anonymize_comments",user_email:e,comment_count:n,nonce:i},function(t){d.removeClass("is-active"),d.hide(),o.removeClass("hidden"),t.success||o.text(t.data)})}),t(document).on("submit",".gdpr-access-data-lookup",function(a){a.preventDefault();var e=t(this).find('input[name="user_email"]'),n=e.val(),i=t(this).find('input[name="gdpr_access_data_nonce"]').val(),s=t(this).find(".button-primary"),d=t(this).find(".spinner"),o=t(".gdpr-access-data-result");s.addClass("hidden"),d.show(),o.remove(),e.val(""),t.post(ajaxurl,{action:"gdpr_access_data",nonce:i,email:n},function(a){if(s.removeClass("hidden"),d.hide(),a.success){var e=wp.template("access-data-result-success");t('.gdpr div[data-id="access"]').append(e({result:a.data.result,user_email:a.data.user_email}))}else{e=wp.template("access-data-result-error");t('.gdpr div[data-id="access"]').append(e())}})}),t(document).on("submit",".gdpr-audit-log-lookup",function(a){a.preventDefault();var e=t(this).find('input[name="user_email"]'),n=e.val(),i=t(this).find('input[name="token"]'),s=i.val(),d=t(this).find('input[name="gdpr_audit_log_nonce"]').val(),o=t(this).find(".button-primary"),r=t(this).find(".spinner"),p=t(".gdpr-audit-log-result");o.addClass("hidden"),r.show(),p.remove(),e.val(""),i.val(""),t.post(ajaxurl,{action:"gdpr_audit_log",nonce:d,email:n,token:s},function(a){if(o.removeClass("hidden"),r.hide(),a.success){var e=wp.template("audit-log-result-success");t('.gdpr div[data-id="audit-log"]').append(e({result:a.data}))}else{e=wp.template("audit-log-result-error");t('.gdpr div[data-id="audit-log"]').append(e())}})}),t(document).on("click",'.frm-export-data input[type="submit"]',function(a){a.preventDefault();var e=t(this).parents("form"),n=t(this).val(),i=e.find("#gdpr_export_data_nonce").val(),s=e.find('input[name="user_email"]').val(),d=n.toLowerCase();t.post(ajaxurl,{action:"gdpr_generate_data_export",nonce:i,type:n,email:s},function(a){a.success&&t("<a />",{href:"data:text/plain;charset=utf-8,"+encodeURIComponent(a.data),download:s+"."+d,text:"click"}).hide().appendTo("body")[0].click()})}),t(document).on("submit",".frm-ignore-privacy-update",function(a){a.preventDefault();var e=t(this).find('input[name="action"]').val(),n=t(this).find("#privacy-policy-ignore-update-nonce").val();t(".privacy-page-updated-notice .notice-dismiss").click(),t.post(ajaxurl,{action:e,nonce:n})})})}(jQuery);
1
+ !function(t){"use strict";t(function(){function a(t){t=(t=t.replace(/^\s+|\s+$/g,"")).toLowerCase();for(var a="àáäâèéëêìíïîòóöôùúüûñç·/_,:;",e=0,n=a.length;e<n;e++)t=t.replace(new RegExp(a.charAt(e),"g"),"aaaaeeeeiiiioooouuuunc------".charAt(e));return t=t.replace(/[^a-z0-9 -]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-")}t(document).on("click",".gdpr-settings-form .notice-dismiss",function(){t(this).parent().parent().remove()}),t(".add-consent").click(function(e){e.preventDefault();var n=t("#type-of-consent");if(""!==n.val()){var i=a(n.val()),s=n.val(),d=wp.template("consents");t("#consent-tabs").append(d({key:i,name:s,option_name:"gdpr_consent_types"})),n.val("")}}),t("#consent-tabs, #tabs").sortable(),t(".add-tab").click(function(e){e.preventDefault();var n=t("#cookie-tabs");if(""!==n.val()){var i=a(n.val()),s=n.val(),d=wp.template("cookie-tabs");t("#gdpr-cookie-categories").append(d({key:i,name:s})),n.val("")}}),t(document).on("click",".add-host",function(a){a.preventDefault();var e=t(this).siblings("input");if(""!==e.val()){var n=t(this).data("tabid"),i=e.val().toLowerCase().replace(" ","-"),s=wp.template("cookie-tabs-hosts");t('.tab-hosts[data-tabid="'+n+'"]').append(s({host_key:i,tab_key:n,option_name:"gdpr_cookie_popup_content"})),e.val("")}}),t(document).on("click","#tabs .notice-dismiss",function(a){a.preventDefault(),t(this).closest(".postbox").remove()}),t(document).on("click",".gdpr-request-table .gdpr-review",function(a){a.preventDefault();var e=t(this).data("index");t("tr[data-index="+e+"] div").slideToggle()}),t(document).on("click",".gdpr .nav-tab-wrapper a",function(a){var e=t(this).attr("href");if(e=e.replace("#",""),t(this).addClass("nav-tab-active"),t(this).siblings().removeClass("nav-tab-active"),t(".gdpr .gdpr-tab").addClass("hidden"),t(".gdpr .gdpr-tab[data-id="+e+"]").removeClass("hidden"),-1!==location.search.indexOf("page=gdpr-settings")){var n=t('.gdpr form input[name="_wp_http_referer"]'),i=n.val().split("#")[0];n.val(i+"#"+e)}});var e=window.location.hash;if(e){if(t('.gdpr .nav-tab-wrapper a[href="'+e+'"]').addClass("nav-tab-active"),t('.gdpr .gdpr-tab[data-id="'+e.replace("#","")+'"]').removeClass("hidden"),-1!==location.search.indexOf("page=gdpr-settings")){var n=t('.gdpr form input[name="_wp_http_referer"]'),i=n.val().split("#")[0];n.val(i+e)}}else t(".gdpr .nav-tab-wrapper a:eq(0)").addClass("nav-tab-active"),t(".gdpr .gdpr-tab:eq(0)").removeClass("hidden");t(document).on("change",".gdpr-reassign",function(){0!=t(this).val()?(t(this).closest("tr").find("td:last .button-primary").attr("disabled",!1),t(this).closest("tr").find('td:last input[name="reassign_to"]').val(t(this).val())):(t(this).closest("tr").find("td:last .button-primary").attr("disabled",!0),t(this).closest("tr").find('td:last input[name="reassign_to"]').val(""))}),t(document).on("submit",".gdpr-reassign-content",function(a){a.preventDefault();var e=t(this).find('input[name="user_email"]').val(),n=t(this).find('input[name="reassign_to"]').val(),i=t(this).find('input[name="post_type"]').val(),s=t(this).find('input[name="post_count"]').val(),d=t(this).find('input[name="gdpr_reassign_content_nonce"]').val(),o=t(this).find(".button-primary"),r=t(this).find(".spinner"),p=t(this).find("p.hidden");n&&(o.addClass("hidden"),r.addClass("is-active"),r.css("display","block"),t.post(ajaxurl,{action:"gdpr_reassign_content",user_email:e,reassign_to:n,post_type:i,post_count:s,nonce:d},function(t){r.removeClass("is-active"),r.hide(),p.removeClass("hidden"),t.success||p.text(t.data)}))}),t(document).on("submit",".gdpr-anonymize-comments",function(a){a.preventDefault();var e=t(this).find('input[name="user_email"]').val(),n=t(this).find('input[name="comment_count"]').val(),i=t(this).find('input[name="gdpr_anonymize_comments_nonce"]').val(),s=t(this).find(".button-primary"),d=t(this).find(".spinner"),o=t(this).find("p.hidden");s.addClass("hidden"),d.addClass("is-active"),d.css("display","block"),t.post(ajaxurl,{action:"gdpr_anonymize_comments",user_email:e,comment_count:n,nonce:i},function(t){d.removeClass("is-active"),d.hide(),o.removeClass("hidden"),t.success||o.text(t.data)})}),t(document).on("submit",".gdpr-access-data-lookup",function(a){a.preventDefault();var e=t(this).find('input[name="user_email"]'),n=e.val(),i=t(this).find('input[name="gdpr_access_data_nonce"]').val(),s=t(this).find(".button-primary"),d=t(this).find(".spinner"),o=t(".gdpr-access-data-result");s.addClass("hidden"),d.show(),o.remove(),e.val(""),t.post(ajaxurl,{action:"gdpr_access_data",nonce:i,email:n},function(a){if(s.removeClass("hidden"),d.hide(),a.success){var e=wp.template("access-data-result-success");t('.gdpr div[data-id="access"]').append(e({result:a.data.result,user_email:a.data.user_email}))}else{e=wp.template("access-data-result-error");t('.gdpr div[data-id="access"]').append(e())}})}),t(document).on("submit",".gdpr-audit-log-lookup",function(a){a.preventDefault();var e=t(this).find('input[name="user_email"]'),n=e.val(),i=t(this).find('input[name="token"]'),s=i.val(),d=t(this).find('input[name="gdpr_audit_log_nonce"]').val(),o=t(this).find(".button-primary"),r=t(this).find(".spinner"),p=t(".gdpr-audit-log-result");o.addClass("hidden"),r.show(),p.remove(),e.val(""),i.val(""),t.post(ajaxurl,{action:"gdpr_audit_log",nonce:d,email:n,token:s},function(a){if(o.removeClass("hidden"),r.hide(),a.success){var e=wp.template("audit-log-result-success");t('.gdpr div[data-id="audit-log"]').append(e({result:a.data}))}else{e=wp.template("audit-log-result-error");t('.gdpr div[data-id="audit-log"]').append(e())}})}),t(document).on("click",'.frm-export-data input[type="submit"]',function(a){a.preventDefault();var e=t(this).parents("form"),n=t(this).val(),i=e.find("#gdpr_export_data_nonce").val(),s=e.find('input[name="user_email"]').val(),d=n.toLowerCase();t.post(ajaxurl,{action:"gdpr_generate_data_export",nonce:i,type:n,email:s},function(a){a.success&&t("<a />",{href:"data:text/plain;charset=utf-8,"+encodeURIComponent(a.data),download:s+"."+d,text:"click"}).hide().appendTo("body")[0].click()})}),t(document).on("submit",".frm-policy-updated",function(a){a.preventDefault();var e=t(this).find('input[name="action"]').val(),n=t(this).find('input[name="policy_id"]').val(),i=t(this).find('input[name="policy_name"]').val(),s=t(this).find('[id$="nonce"]').val(),d=t(this).parent().find(".spinner"),o=t(this);d.addClass("is-active"),t.post(ajaxurl,{action:e,nonce:s,policy_id:n,policy_name:i},function(t){d.removeClass("is-active"),o.parent().fadeOut()})})})}(jQuery);
assets/js/gdpr-public.js CHANGED
@@ -1 +1 @@
1
- !function(e){"use strict";var r=location.search,d=location.protocol+"//"+location.host+location.pathname;-1!==r.indexOf("notify=1")&&window.history.replaceState({},document.title,d),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(){Cookies.get("gdpr[privacy_bar]")||e(".gdpr.gdpr-privacy-bar").delay(1e3).slideDown(600),!has_consent("privacy-policy")&&GDPR.is_user_logged_in&&0!=GDPR.privacy_page_id&&(e(".gdpr-reconsent-modal").show(),e("body").addClass("gdpr-noscroll"),e(".wpadminbar").hide()),e(document).on("click",".gdpr.gdpr-privacy-bar .gdpr-agreement",function(){e(".gdpr-privacy-preferences-frm").submit()}),e(document).on("submit",".gdpr-privacy-preferences-frm",function(){Cookies.set("gdpr[privacy_bar]",1,{expires:365})}),e(document).on("click",".gdpr-preferences",function(){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-general-confirmation .gdpr-close, .gdpr-overlay, .gdpr-cancel",function(){e(".gdpr-overlay").fadeOut(),e(".gdpr-reconsent-modal").is(":visible")||e("body").removeClass("gdpr-noscroll"),e(".gdpr.gdpr-general-confirmation .gdpr-wrapper").fadeOut()}),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(".gdpr-accept-confirmation").length>0&&(e(".gdpr-overlay").fadeIn(),e("body").addClass("gdpr-noscroll"),e(".gdpr.gdpr-accept-confirmation .gdpr-wrapper").css({display:"flex"}).hide().fadeIn(),e(document).on("click",".gdpr.gdpr-accept-confirmation button.gdpr-ok",function(){e(".gdpr-overlay").fadeOut(),e("body").removeClass("gdpr-noscroll"),e(".gdpr.gdpr-accept-confirmation .gdpr-wrapper").fadeOut()})),e(document).on("click",".gdpr-agree",function(r){r.preventDefault();e(this);e(".gdpr-consent-buttons").fadeOut(300,function(){e(".gdpr-consent-loading").fadeIn(300)});var d=0;setInterval(function(){e(".gdpr-ellipsis").html();d<3?(e(".gdpr-ellipsis").append("."),d++):(e(".gdpr-ellipsis").html(""),d=0)},600);e.post(GDPR.ajaxurl,{action:"agree_with_terms",nonce:e(this).data("nonce")},function(r){r.success&&(e(".gdpr-reconsent-modal").fadeOut(300,function(){e(this).remove(),e(".wpadminbar").show()}),e("body").removeClass("gdpr-noscroll"))})}),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.aborting),e(".gdpr-consent-loading").fadeIn(300)});var d=0;setInterval(function(){e(".gdpr-ellipsis").html();d<3?(e(".gdpr-ellipsis").append("."),d++):(e(".gdpr-ellipsis").html(""),d=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 d=window.Cookies,n=window.Cookies=e();n.noConflict=function(){return window.Cookies=d,n}}}(function(){function e(){for(var e=0,r={};e<arguments.length;e++){var d=arguments[e];for(var n in d)r[n]=d[n]}return r}return function r(d){function n(r,o,t){var p;if("undefined"!=typeof document){if(arguments.length>1){if("number"==typeof(t=e({path:"/"},n.defaults,t)).expires){var a=new Date;a.setMilliseconds(a.getMilliseconds()+864e5*t.expires),t.expires=a}t.expires=t.expires?t.expires.toUTCString():"";try{p=JSON.stringify(o),/^[\{\[]/.test(p)&&(o=p)}catch(e){}o=d.write?d.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 t)t[s]&&(i+="; "+s,!0!==t[s]&&(i+="="+t[s]));return document.cookie=r+"="+o+i}r||(p={});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=d.read?d.read(u,m):d(u,m)||u.replace(g,decodeURIComponent),this.json)try{u=JSON.parse(u)}catch(e){}if(r===m){p=u;break}r||(p[m]=u)}catch(e){}}return p}}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,d){n(r,"",e(d,{expires:-1}))},n.withConverter=r,n}(function(){})});
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(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(response.data.title,response.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: 1.4.7
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', '1.4.7' );
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.0
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.0' );
39
 
40
  /**
41
  * The code that runs during plugin activation.
includes/class-gdpr-activator.php CHANGED
@@ -39,6 +39,35 @@ 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
  }
43
 
44
  }
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( 'gdpr_cookie_popup_content', array(
43
+ 'necessary' => array(
44
+ 'name' => 'Necessary',
45
+ 'status' => 'required',
46
+ 'cookies_used' => '',
47
+ 'how_we_use' => '',
48
+ ),
49
+ 'advertising' => array(
50
+ 'name' => 'Advertising',
51
+ 'status' => 'on',
52
+ 'cookies_used' => '',
53
+ 'how_we_use' => '',
54
+ ),
55
+ 'analytics' => array(
56
+ 'name' => 'Analytics',
57
+ 'status' => 'on',
58
+ 'cookies_used' => '',
59
+ 'how_we_use' => '',
60
+ ),
61
+ 'other' => array(
62
+ 'name' => 'Other',
63
+ 'status' => 'on',
64
+ 'cookies_used' => '',
65
+ 'how_we_use' => '',
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 );
71
  }
72
 
73
  }
includes/class-gdpr-help.php CHANGED
@@ -55,7 +55,7 @@ class GDPR_Help {
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__( 'When you are ready to delete the user, they will get a notification that their account has been closed. According to GDPR, you have 30 days to fulfill this request. On some occasions, you can ask to extend this time.', 'gdpr' ) . '</p>';
59
  get_current_screen()->add_help_tab( array(
60
  'id' => 'erasure',
61
  'title' => esc_html__( 'Erasures', 'gdpr' ),
@@ -125,7 +125,7 @@ class GDPR_Help {
125
  ) );
126
 
127
  $cookies_settings_help = sprintf( '<h2>' . esc_html__( 'Cookie Management', 'gdpr' ) . '</h2>' .
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 hosts section.', '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>' .
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( array(
60
  'id' => 'erasure',
61
  'title' => esc_html__( 'Erasures', 'gdpr' ),
125
  ) );
126
 
127
  $cookies_settings_help = sprintf( '<h2>' . esc_html__( 'Cookie Management', 'gdpr' ) . '</h2>' .
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>' .
includes/class-gdpr.php CHANGED
@@ -187,13 +187,16 @@ class GDPR {
187
  add_action( 'woocommerce_checkout_update_user_meta', array( $plugin_admin, 'woocommerce_checkout_save_consent' ), 10, 2 );
188
  add_filter( 'woocommerce_checkout_fields', array( $plugin_admin, 'woocommerce_consent_checkboxes' ) );
189
  }
 
 
190
  add_action( 'show_user_profile', array( $plugin_admin, 'edit_user_profile' ) );
191
  add_action( 'personal_options_update', array( $plugin_admin, 'user_profile_update' ) );
192
- add_action( 'admin_notices', array( $plugin_admin, 'privacy_policy_page_missing' ) );
193
- add_action( 'admin_notices', array( $plugin_admin, 'privacy_policy_updated_notice' ) );
194
- add_action( 'wp_ajax_ignore_privacy_policy_update', array( $plugin_admin, 'ignore_privacy_policy_update' ) );
195
- add_action( 'admin_post_seek_consent', array( $plugin_admin, 'seek_consent' ) );
196
- add_action( 'publish_page', array( $plugin_admin, 'privacy_policy_updated' ), 10, 2 );
 
197
  add_action( 'admin_enqueue_scripts', array( $plugin_admin, 'enqueue_styles' ) );
198
  add_action( 'admin_enqueue_scripts', array( $plugin_admin, 'enqueue_scripts' ) );
199
  add_action( 'admin_menu', array( $plugin_admin, 'add_menu' ) );
@@ -265,12 +268,14 @@ class GDPR {
265
  add_action( 'wp_footer', array( $plugin_public, 'confirmation_screens' ) );
266
  add_action( 'wp_ajax_disagree_with_terms', array( $plugin_public, 'logout' ) );
267
  add_action( 'wp_ajax_agree_with_terms', array( $plugin_public, 'agree_with_terms' ) );
268
- add_action( 'admin_post_gdpr_update_privacy_preferences', array( $plugin_public, 'update_privacy_preferences' ) );
269
- add_action( 'admin_post_nopriv_gdpr_update_privacy_preferences', array( $plugin_public, 'update_privacy_preferences' ) );
 
 
270
 
271
  add_action( 'wp', array( $requests_public, 'request_confirmed' ) );
272
- add_action( 'admin_post_gdpr_send_request_email', array( $requests_public, 'send_request_email' ) );
273
- add_action( 'admin_post_nopriv_gdpr_send_request_email', array( $requests_public, 'send_request_email' ) );
274
  }
275
 
276
  /**
@@ -315,7 +320,7 @@ class GDPR {
315
  * @since 1.2.0
316
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
317
  */
318
- public static function get_consent_checkboxes() {
319
  $consent_types = get_option( 'gdpr_consent_types', array() );
320
  $sent_extras = ( isset( $_POST['user_consents'] ) ) ? $_POST['user_consents'] : array();
321
  $allowed_html = array(
@@ -326,9 +331,15 @@ class GDPR {
326
  ),
327
  );
328
 
 
 
 
 
 
 
329
  ob_start();
330
  foreach ( $consent_types as $key => $consent ) {
331
- $required = ( isset( $consent['required'] ) && $consent['required'] ) ? 'required' : '';
332
  $checked = ( isset( $sent_extras[ $key ] ) ) ? checked( $sent_extras[ $key ], 1, false ) : '';
333
  echo '<p>' .
334
  '<input type="checkbox" name="user_consents[' . esc_attr( $key ) . ']" id="' . esc_attr( $key ) . '-consent" value="1" ' . $required . ' ' . $checked . '>' .
@@ -344,8 +355,8 @@ class GDPR {
344
  * @since 1.1.4
345
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
346
  */
347
- public static function consent_checkboxes() {
348
- echo self::get_consent_checkboxes();
349
  }
350
 
351
  /**
@@ -468,8 +479,10 @@ class GDPR {
468
 
469
  default: // XML
470
  $dom = new DomDocument( '1.0', 'ISO-8859-1' );
 
 
471
  $personal_info = $dom->createElement( 'Personal_Information' );
472
- $dom->appendChild( $personal_info );
473
  $personal_info->appendChild( $dom->createElement( 'Username', $user->user_login ) );
474
  $personal_info->appendChild( $dom->createElement( 'First_Name', $user->first_name ) );
475
  $personal_info->appendChild( $dom->createElement( 'Last_Name', $user->last_name ) );
@@ -481,7 +494,7 @@ class GDPR {
481
 
482
  if ( ! empty( $user_consents ) ) {
483
  $consents = $dom->createElement( 'Consents' );
484
- $dom->appendChild( $consents );
485
  foreach ( $user_consents as $consent_item ) {
486
  $consents->appendChild( $dom->createElement( 'consent', $consent_item ) );
487
  }
@@ -489,7 +502,7 @@ class GDPR {
489
 
490
  if ( ! empty( $comments ) ) {
491
  $comments_node = $dom->createElement( 'Comments' );
492
- $dom->appendChild( $comments_node );
493
  foreach ( $comments as $k => $v ) {
494
  $single_comment = $dom->createElement( 'Comment' );
495
  $comments_node->appendChild( $single_comment );
@@ -504,20 +517,23 @@ class GDPR {
504
  }
505
 
506
  $meta_data = $dom->createElement( 'Metadata' );
507
- $dom->appendChild( $meta_data );
508
 
509
  foreach ( $usermeta as $k => $v ) {
510
  $k = is_numeric( substr( $k, 0, 1 ) ) ? '_' . $k : $k;
511
  $key = $dom->createElement( htmlspecialchars( $k ) );
512
  $meta_data->appendChild( $key );
513
  foreach ( $v as $value ) {
 
 
 
514
  $key->appendChild( $dom->createElement( 'item', htmlspecialchars( $value ) ) );
515
  }
516
  }
517
 
518
  if ( $extra_content ) {
519
  $extra = $dom->createElement( $extra_content['name'] );
520
- $dom->appendChild( $extra );
521
  foreach ( $extra_content['content'] as $key => $obj ) {
522
  $item = $extra->appendChild( $dom->createElement( 'item' ) );
523
  foreach ( $obj as $k => $value ) {
@@ -571,7 +587,7 @@ class GDPR {
571
  * @return void
572
  */
573
  public static function save_consent( $user_id, $consent ) {
574
- $registered_consent = get_option( 'gdpr_consent_types', array( 'privacy-policy' ) );
575
  $consent_ids = array_keys( $registered_consent );
576
  $user = get_user_by( 'ID', $user_id );
577
  $consent = sanitize_text_field( wp_unslash( $consent ) );
187
  add_action( 'woocommerce_checkout_update_user_meta', array( $plugin_admin, 'woocommerce_checkout_save_consent' ), 10, 2 );
188
  add_filter( 'woocommerce_checkout_fields', array( $plugin_admin, 'woocommerce_consent_checkboxes' ) );
189
  }
190
+ add_filter( 'manage_users_custom_column', array( $plugin_admin, 'add_consents_to_consents_column' ), 10, 3 );
191
+ add_filter( 'manage_users_columns', array( $plugin_admin, 'add_consents_column_to_user_table' ) );
192
  add_action( 'show_user_profile', array( $plugin_admin, 'edit_user_profile' ) );
193
  add_action( 'personal_options_update', array( $plugin_admin, 'user_profile_update' ) );
194
+ add_action( 'admin_notices', array( $plugin_admin, 'policy_updated_notice' ) );
195
+ add_action( 'admin_notices', array( $plugin_admin, 'review_settings_after_v2_notice' ) );
196
+ add_action( 'upgrader_process_complete', array( $plugin_admin, 'upgrade_completed' ), 10, 2 );
197
+ add_action( 'wp_ajax_ignore_policy_update', array( $plugin_admin, 'ignore_policy_update' ) );
198
+ add_action( 'wp_ajax_seek_consent', array( $plugin_admin, 'seek_consent' ) );
199
+ add_action( 'publish_page', array( $plugin_admin, 'policy_updated' ), 10, 2 );
200
  add_action( 'admin_enqueue_scripts', array( $plugin_admin, 'enqueue_styles' ) );
201
  add_action( 'admin_enqueue_scripts', array( $plugin_admin, 'enqueue_scripts' ) );
202
  add_action( 'admin_menu', array( $plugin_admin, 'add_menu' ) );
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' ) );
278
+ add_action( 'wp_ajax_nopriv_gdpr_send_request_email', array( $requests_public, 'send_request_email' ) );
279
  }
280
 
281
  /**
320
  * @since 1.2.0
321
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
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'] ) ) ? $_POST['user_consents'] : array();
326
  $allowed_html = array(
331
  ),
332
  );
333
 
334
+ if ( $consent_key ) {
335
+ $consent_types = array_filter( $consent_types, function( $key ) use ( $consent_key ) {
336
+ return $key === $consent_key;
337
+ }, ARRAY_FILTER_USE_KEY );
338
+ }
339
+
340
  ob_start();
341
  foreach ( $consent_types as $key => $consent ) {
342
+ $required = ( isset( $consent['policy-page'] ) && $consent['policy-page'] ) ? 'required' : '';
343
  $checked = ( isset( $sent_extras[ $key ] ) ) ? checked( $sent_extras[ $key ], 1, false ) : '';
344
  echo '<p>' .
345
  '<input type="checkbox" name="user_consents[' . esc_attr( $key ) . ']" id="' . esc_attr( $key ) . '-consent" value="1" ' . $required . ' ' . $checked . '>' .
355
  * @since 1.1.4
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
  /**
479
 
480
  default: // XML
481
  $dom = new DomDocument( '1.0', 'ISO-8859-1' );
482
+ $data_wrapper = $dom->createElement( 'Data' );
483
+ $dom->appendChild( $data_wrapper );
484
  $personal_info = $dom->createElement( 'Personal_Information' );
485
+ $data_wrapper->appendChild( $personal_info );
486
  $personal_info->appendChild( $dom->createElement( 'Username', $user->user_login ) );
487
  $personal_info->appendChild( $dom->createElement( 'First_Name', $user->first_name ) );
488
  $personal_info->appendChild( $dom->createElement( 'Last_Name', $user->last_name ) );
494
 
495
  if ( ! empty( $user_consents ) ) {
496
  $consents = $dom->createElement( 'Consents' );
497
+ $data_wrapper->appendChild( $consents );
498
  foreach ( $user_consents as $consent_item ) {
499
  $consents->appendChild( $dom->createElement( 'consent', $consent_item ) );
500
  }
502
 
503
  if ( ! empty( $comments ) ) {
504
  $comments_node = $dom->createElement( 'Comments' );
505
+ $data_wrapper->appendChild( $comments_node );
506
  foreach ( $comments as $k => $v ) {
507
  $single_comment = $dom->createElement( 'Comment' );
508
  $comments_node->appendChild( $single_comment );
517
  }
518
 
519
  $meta_data = $dom->createElement( 'Metadata' );
520
+ $data_wrapper->appendChild( $meta_data );
521
 
522
  foreach ( $usermeta as $k => $v ) {
523
  $k = is_numeric( substr( $k, 0, 1 ) ) ? '_' . $k : $k;
524
  $key = $dom->createElement( htmlspecialchars( $k ) );
525
  $meta_data->appendChild( $key );
526
  foreach ( $v as $value ) {
527
+ if ( is_serialized( $value ) ) {
528
+ $value = maybe_unserialize( $value );
529
+ }
530
  $key->appendChild( $dom->createElement( 'item', htmlspecialchars( $value ) ) );
531
  }
532
  }
533
 
534
  if ( $extra_content ) {
535
  $extra = $dom->createElement( $extra_content['name'] );
536
+ $data_wrapper->appendChild( $extra );
537
  foreach ( $extra_content['content'] as $key => $obj ) {
538
  $item = $extra->appendChild( $dom->createElement( 'item' ) );
539
  foreach ( $obj as $k => $value ) {
587
  * @return void
588
  */
589
  public static function save_consent( $user_id, $consent ) {
590
+ $registered_consent = get_option( 'gdpr_consent_types', array() );
591
  $consent_ids = array_keys( $registered_consent );
592
  $user = get_user_by( 'ID', $user_id );
593
  $consent = sanitize_text_field( wp_unslash( $consent ) );
includes/helper-functions.php CHANGED
@@ -59,6 +59,14 @@ function gdpr_request_form_shortcode( $atts ) {
59
 
60
  add_shortcode( 'gdpr_request_form', 'gdpr_request_form_shortcode' );
61
 
 
 
 
 
 
 
 
 
62
  /**
63
  * Checks if a cookie is allowed
64
  * @since 1.0.0
@@ -118,3 +126,7 @@ function has_consent( $consent ) {
118
 
119
  return false;
120
  }
 
 
 
 
59
 
60
  add_shortcode( 'gdpr_request_form', 'gdpr_request_form_shortcode' );
61
 
62
+ function gdpr_get_consent_checkboxes( $atts ) {
63
+ $atts = shortcode_atts( array(
64
+ 'id' => false,
65
+ ), $atts, 'gdpr_consent_checkboxes' );
66
+
67
+ return GDPR::get_consent_checkboxes( $atts['id'] );
68
+ }
69
+
70
  /**
71
  * Checks if a cookie is allowed
72
  * @since 1.0.0
126
 
127
  return false;
128
  }
129
+
130
+ function is_dnt() {
131
+ return ( isset( $_SERVER['HTTP_DNT'] ) && $_SERVER['HTTP_DNT'] === '1' );
132
+ }
languages/gdpr.pot CHANGED
@@ -25,143 +25,144 @@ msgstr ""
25
  msgid "Tools"
26
  msgstr ""
27
 
28
- #: admin/class-gdpr-admin.php:130, admin/partials/settings.php:2
29
  msgid "Settings"
30
  msgstr ""
31
 
32
- #: admin/class-gdpr-admin.php:271, admin/partials/settings.php:18
33
- msgid "General"
34
- msgstr ""
35
-
36
- #: admin/class-gdpr-admin.php:272, admin/partials/settings.php:168
37
- msgid "Cookies"
38
- msgstr ""
39
-
40
- #: admin/class-gdpr-admin.php:273, admin/partials/settings.php:248
41
- msgid "Consents"
42
- msgstr ""
43
-
44
- #: admin/class-gdpr-admin.php:304, includes/class-gdpr-help.php:38, includes/class-gdpr-help.php:43, admin/partials/requests.php:32
45
  msgid "Rectify Data"
46
  msgstr ""
47
 
48
- #: admin/class-gdpr-admin.php:308
49
  msgid "Complaint"
50
  msgstr ""
51
 
52
- #: admin/class-gdpr-admin.php:312, includes/class-gdpr-help.php:56
53
  msgid "Erasure"
54
  msgstr ""
55
 
56
- #: admin/class-gdpr-admin.php:329, includes/class-gdpr-help.php:81, includes/class-gdpr-help.php:85, admin/partials/tools.php:55
57
  msgid "Access Data"
58
  msgstr ""
59
 
60
- #: admin/class-gdpr-admin.php:330, includes/class-gdpr-help.php:95, admin/partials/tools.php:72
61
  msgid "Data Breach"
62
  msgstr ""
63
 
64
- #: admin/class-gdpr-admin.php:331, includes/class-gdpr-help.php:99, includes/class-gdpr-help.php:106, admin/partials/tools.php:117
65
  msgid "Audit Log"
66
  msgstr ""
67
 
68
- #: admin/class-gdpr-admin.php:403
69
  msgid "Consent Given"
70
  msgstr ""
71
 
72
- #: admin/class-gdpr-admin.php:407
73
  msgid "Consent ID"
74
  msgstr ""
75
 
76
- #: admin/class-gdpr-admin.php:419, admin/partials/requests.php:275
77
  msgid "Comments"
78
  msgstr ""
79
 
80
- #: admin/class-gdpr-admin.php:424
81
  msgid "Comment Field"
82
  msgstr ""
83
 
84
- #: admin/class-gdpr-admin.php:425
85
  msgid "Comment Data"
86
  msgstr ""
87
 
88
- #: admin/class-gdpr-admin.php:461
89
  msgid "Metadata"
90
  msgstr ""
91
 
92
- #: admin/class-gdpr-admin.php:465
93
  msgid "Name"
94
  msgstr ""
95
 
96
- #: admin/class-gdpr-admin.php:466
97
  msgid "Value"
98
  msgstr ""
99
 
100
- #: admin/class-gdpr-admin.php:515
101
  msgid "No logs found for this email."
102
  msgstr ""
103
 
104
- #: admin/class-gdpr-admin.php:534
105
- msgid "[GDPR] You must select a Privacy Policy Page."
 
 
 
 
106
  msgstr ""
107
 
108
- #: admin/class-gdpr-admin.php:537
109
- msgid "Select your Privacy Policy page"
110
  msgstr ""
111
 
112
- #: admin/class-gdpr-admin.php:556
113
- msgid "Your Privacy Policy have been updated. 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:562
 
 
 
 
 
 
 
 
117
  msgid "Ask for consent"
118
  msgstr ""
119
 
120
- #: admin/class-gdpr-admin.php:569
121
  msgid "Ignore"
122
  msgstr ""
123
 
124
- #: admin/class-gdpr-admin.php:583, admin/class-gdpr-admin.php:722, admin/class-gdpr-admin.php:784, public/class-gdpr-public.php:189, public/class-gdpr-public.php:282, public/class-gdpr-public.php:296
125
  msgid "We could not verify the the security token. Please try again."
126
  msgstr ""
127
 
128
- #: admin/class-gdpr-admin.php:595
129
  msgid "One or more required fields are missing. Please try again."
130
  msgstr ""
131
 
132
- #: admin/class-gdpr-admin.php:642
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:705
137
  msgid "ERROR"
138
  msgstr ""
139
 
140
- #: admin/class-gdpr-admin.php:707
141
  msgid "is a required consent"
142
  msgstr ""
143
 
144
- #: admin/class-gdpr-admin.php:734
145
- msgid "Privacy Policy has been updated. Removing the Privacy Policy consent and requesting new consent."
146
- msgstr ""
147
-
148
- #: admin/class-gdpr-admin.php:739
149
- msgid "Users will have to consent to the updated privacy policy on login."
150
  msgstr ""
151
 
152
- #: admin/class-gdpr-admin.php:804, includes/class-gdpr-help.php:161, public/partials/privacy-preferences-modal.php:31, public/partials/privacy-preferences-modal.php:48
153
  msgid "Consent Management"
154
  msgstr ""
155
 
156
- #: admin/class-gdpr-admin.php:841
157
  msgid "Profile Updated. These are the user consents after the save:"
158
  msgstr ""
159
 
 
 
 
 
160
  #: admin/class-gdpr-requests-admin.php:30, admin/class-gdpr-requests-admin.php:155, admin/class-gdpr-requests-admin.php:203, admin/class-gdpr-requests-admin.php:240
161
  msgid "We could not verify the user email or the security token. Please try again."
162
  msgstr ""
163
 
164
- #: admin/class-gdpr-requests-admin.php:37, admin/class-gdpr-requests-admin.php:286, admin/class-gdpr-requests-admin.php:331, public/partials/confirmation-screens.php:48
165
  msgid "User not found."
166
  msgstr ""
167
 
@@ -216,7 +217,7 @@ msgstr ""
216
  msgid "User %s was deleted from the site."
217
  msgstr ""
218
 
219
- #: admin/class-gdpr-requests-admin.php:278, admin/class-gdpr-requests-admin.php:317, public/class-gdpr-requests-public.php:81
220
  msgid "We could not verify the security token. Please try again."
221
  msgstr ""
222
 
@@ -383,7 +384,7 @@ msgid "Users may request to be deleted from the site. If they don't have any con
383
  msgstr ""
384
 
385
  #: includes/class-gdpr-help.php:58
386
- msgid "When you are ready to delete the user, they will get a notification that their account has been closed. According to GDPR, you have 30 days to fulfill this request. On some occasions, you can ask to extend this time."
387
  msgstr ""
388
 
389
  #: includes/class-gdpr-help.php:61
@@ -447,7 +448,7 @@ msgid "Cookie Management"
447
  msgstr ""
448
 
449
  #: includes/class-gdpr-help.php:128
450
- 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 hosts section."
451
  msgstr ""
452
 
453
  #: includes/class-gdpr-help.php:130
@@ -518,65 +519,93 @@ msgstr ""
518
  msgid "User request expired. Removing %s user_meta."
519
  msgstr ""
520
 
521
- #: includes/class-gdpr.php:299
522
  msgid "User registered to the site."
523
  msgstr ""
524
 
525
  #. translators: Name of consent
526
- #: includes/class-gdpr.php:306
527
  msgid "User gave explicit consent to %s"
528
  msgstr ""
529
 
530
- #: includes/helper-functions.php:26, public/partials/privacy-bar.php:23
531
  msgid "Privacy Preferences"
532
  msgstr ""
533
 
534
- #: public/class-gdpr-public.php:124
535
  msgid "Aborting"
536
  msgstr ""
537
 
538
- #: public/class-gdpr-public.php:138
539
- msgid "I Agree"
540
  msgstr ""
541
 
542
- #: public/class-gdpr-public.php:193
543
- msgid "You need to at least consent to our Privacy Policy."
544
  msgstr ""
545
 
546
- #: public/class-gdpr-public.php:230
547
- msgid "User updated their privacy preferences. These are the new approved cookies and consent preferences:"
 
 
 
 
548
  msgstr ""
549
 
550
- #: public/class-gdpr-public.php:305
551
- msgid "User consented to the Privacy Policies."
 
 
 
 
552
  msgstr ""
553
 
554
- #: public/class-gdpr-requests-public.php:77
555
  msgid "Invalid type of request. Please try again."
556
  msgstr ""
557
 
558
- #: public/class-gdpr-requests-public.php:91, public/class-gdpr-requests-public.php:104
559
  msgid "Please verify that you are not a robot."
560
  msgstr ""
561
 
562
- #: public/class-gdpr-requests-public.php:308
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
563
  msgid "User confirmed a request to be deleted."
564
  msgstr ""
565
 
566
- #: public/class-gdpr-requests-public.php:310
567
  msgid "Content was found for that user."
568
  msgstr ""
569
 
570
- #: public/class-gdpr-requests-public.php:312
571
  msgid "User added to the erasure review table."
572
  msgstr ""
573
 
574
- #: public/class-gdpr-requests-public.php:346
575
  msgid "User placed a request for rectification or a complaint."
576
  msgstr ""
577
 
578
  #. translators: File format. Can be XML or JSON
579
- #: public/class-gdpr-requests-public.php:363
580
  msgid "User downloaded all their data in %s format."
581
  msgstr ""
582
 
@@ -668,204 +697,284 @@ msgstr ""
668
  msgid "Anonymize"
669
  msgstr ""
670
 
671
- #: admin/partials/settings.php:23
672
- msgid "Privacy Policy Page"
673
  msgstr ""
674
 
675
- #: admin/partials/settings.php:30
676
- msgid "-- Select --"
677
  msgstr ""
678
 
679
- #: admin/partials/settings.php:39
680
- msgid "Outgoing email limitation"
681
  msgstr ""
682
 
683
- #: admin/partials/settings.php:48
 
 
 
 
684
  msgid "User deletion"
685
  msgstr ""
686
 
687
- #: admin/partials/settings.php:52
 
 
 
 
688
  msgid "Send all deletion requests to the review table."
689
  msgstr ""
690
 
691
- #: admin/partials/settings.php:57
 
 
 
 
 
 
 
 
692
  msgid "Disable CSS"
693
  msgstr ""
694
 
695
- #: admin/partials/settings.php:61
696
  msgid "Make sure you know what you are doing before checking this."
697
  msgstr ""
698
 
699
- #: admin/partials/settings.php:66
700
  msgid "Enable the Telemetry Tracker"
701
  msgstr ""
702
 
703
- #: admin/partials/settings.php:70
 
 
 
 
704
  msgid "Toggles the Telemetry Tracker On/Off. (experimental)"
705
  msgstr ""
706
 
707
- #: admin/partials/settings.php:75
708
  msgid "Privacy Center"
709
  msgstr ""
710
 
711
- #: admin/partials/settings.php:77
712
  msgid "This section handles the privacy bar and some of the privacy preferences window."
713
  msgstr ""
714
 
715
- #: admin/partials/settings.php:78
716
  msgid "Important:"
717
  msgstr ""
718
 
719
- #: admin/partials/settings.php:78
720
  msgid "If the privacy banner text is not filled out, the privacy banner will not show up. Even if you registered your cookies."
721
  msgstr ""
722
 
723
- #: admin/partials/settings.php:83
724
- msgid "Privacy Banner Text"
725
  msgstr ""
726
 
727
- #: admin/partials/settings.php:92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
728
  msgid "Privacy Excerpt"
729
  msgstr ""
730
 
731
- #: admin/partials/settings.php:97
 
 
 
 
732
  msgid "This will appear in the consent section of the privacy preference window."
733
  msgstr ""
734
 
735
- #: admin/partials/settings.php:102
736
  msgid "Request Forms reCAPTCHA"
737
  msgstr ""
738
 
739
- #: admin/partials/settings.php:103
740
  msgid "To prevent spam attacks, you have the option to enable reCAPTCHA. Configure below your keys to make it work with our request forms."
741
  msgstr ""
742
 
743
- #: admin/partials/settings.php:107
744
  msgid "You can find the necessary information %s."
745
  msgstr ""
746
 
747
- #: admin/partials/settings.php:108
748
  msgid "here"
749
  msgstr ""
750
 
751
- #: admin/partials/settings.php:114
752
  msgid "Enable reCAPTCHA"
753
  msgstr ""
754
 
755
- #: admin/partials/settings.php:123
756
  msgid "Site Key"
757
  msgstr ""
758
 
759
- #: admin/partials/settings.php:132
760
  msgid "Secret Key"
761
  msgstr ""
762
 
763
- #: admin/partials/settings.php:142
764
  msgid "WooCommerce"
765
  msgstr ""
766
 
767
- #: admin/partials/settings.php:147
768
  msgid "Add consent checkboxes to the registration page"
769
  msgstr ""
770
 
771
- #: admin/partials/settings.php:156
772
  msgid "Add consent checkboxes to the checkout registration form"
773
  msgstr ""
774
 
775
- #: admin/partials/settings.php:169
 
 
 
 
776
  msgid "Category name"
777
  msgstr ""
778
 
779
- #: admin/partials/settings.php:170
780
  msgid "Add tab"
781
  msgstr ""
782
 
783
- #: admin/partials/settings.php:176, admin/partials/templates/tmpl-cookies.php:3
784
  msgid "Remove this tab."
785
  msgstr ""
786
 
787
- #: admin/partials/settings.php:181, admin/partials/templates/tmpl-cookies.php:8
788
- msgid "Always active"
789
  msgstr ""
790
 
791
- #: admin/partials/settings.php:190, admin/partials/templates/tmpl-cookies.php:17
792
- msgid "How we use"
793
  msgstr ""
794
 
795
- #: admin/partials/settings.php:194, admin/partials/templates/tmpl-cookies.php:21
796
- msgid "Cookies used by the site"
 
 
 
 
 
 
 
 
797
  msgstr ""
798
 
799
- #: admin/partials/settings.php:198, admin/partials/settings.php:224, admin/partials/templates/tmpl-cookies.php:25, admin/partials/templates/tmpl-cookies.php:57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
800
  msgid "Comma separated list."
801
  msgstr ""
802
 
803
- #: admin/partials/settings.php:202
804
- msgid "Third party domains"
 
 
 
 
 
 
 
 
 
 
 
 
805
  msgstr ""
806
 
807
- #: admin/partials/settings.php:205, admin/partials/templates/tmpl-cookies.php:32
808
  msgid "Add"
809
  msgstr ""
810
 
811
- #: admin/partials/settings.php:207
812
  msgid "Cookies that are set by a third party, like facebook.com."
813
  msgstr ""
814
 
815
- #: admin/partials/settings.php:215, admin/partials/templates/tmpl-cookies.php:48
816
  msgid "Remove this domain."
817
  msgstr ""
818
 
819
- #: admin/partials/settings.php:220, admin/partials/templates/tmpl-cookies.php:53
820
- msgid "Cookies used"
821
  msgstr ""
822
 
823
- #: admin/partials/settings.php:228, admin/partials/templates/tmpl-cookies.php:61
824
- msgid "How to Opt Out"
825
  msgstr ""
826
 
827
- #: admin/partials/settings.php:232, admin/partials/templates/tmpl-cookies.php:65
828
- msgid "Url with instructions on how to opt out."
829
  msgstr ""
830
 
831
- #: admin/partials/settings.php:249
832
- msgid "Type of consent"
833
  msgstr ""
834
 
835
- #: admin/partials/settings.php:250
836
- msgid "Add consent"
837
  msgstr ""
838
 
839
- #: admin/partials/settings.php:257, admin/partials/settings.php:258
840
- msgid "You read and agreed to our %s."
841
  msgstr ""
842
 
843
- #: admin/partials/settings.php:265, admin/partials/templates/tmpl-consents.php:3
844
  msgid "Unregister this consent."
845
  msgstr ""
846
 
847
- #: admin/partials/settings.php:270, admin/partials/settings.php:273, public/partials/privacy-preferences-modal.php:57, admin/partials/templates/tmpl-consents.php:9
848
- msgid "Required"
849
  msgstr ""
850
 
851
- #: admin/partials/settings.php:284, admin/partials/templates/tmpl-consents.php:18
852
- msgid "Consent description"
853
  msgstr ""
854
 
855
- #: admin/partials/settings.php:288, admin/partials/templates/tmpl-consents.php:22
856
- msgid "Registration message"
857
  msgstr ""
858
 
859
- #: admin/partials/settings.php:299, admin/partials/settings.php:304
860
- msgid "Data Export Chanel"
861
  msgstr ""
862
 
863
- #: admin/partials/settings.php:310
864
- msgid "Data Export with email attachment"
865
  msgstr ""
866
 
867
- #: admin/partials/settings.php:311
868
- msgid "Data Export with download link"
869
  msgstr ""
870
 
871
  #: admin/partials/tools.php:32
@@ -893,7 +1002,7 @@ msgid "Nature of the personal data breach"
893
  msgstr ""
894
 
895
  #: admin/partials/tools.php:88
896
- msgid "Describe the nature of the personal data breach including where possible, the categories and approximate number of data subjects concerned and the categories and approximate number of personal data records concerned."
897
  msgstr ""
898
 
899
  #: admin/partials/tools.php:92
@@ -901,7 +1010,7 @@ msgid "Name and contact details of the data protection officer"
901
  msgstr ""
902
 
903
  #: admin/partials/tools.php:95
904
- msgid "Communicate the name and contact details of the data protection officer or other contact point where more information can be obtained."
905
  msgstr ""
906
 
907
  #: admin/partials/tools.php:99
@@ -932,52 +1041,36 @@ msgstr ""
932
  msgid "Your account will be closed and all data will be permanently deleted and cannot be recovered. Are you sure?"
933
  msgstr ""
934
 
935
- #: public/partials/confirmation-screens.php:27, public/partials/reconsent-modal.php:31
936
- msgid "Cancel"
937
- msgstr ""
938
-
939
- #: public/partials/confirmation-screens.php:34
940
- msgid "Error!"
941
- msgstr ""
942
-
943
- #: public/partials/confirmation-screens.php:36
944
  msgid "Your account"
945
  msgstr ""
946
 
947
- #: public/partials/confirmation-screens.php:38
948
  msgid "Your account has been closed. We are sorry to see you go."
949
  msgstr ""
950
 
951
- #: public/partials/confirmation-screens.php:40
952
  msgid "Your request has been received and is being reviewed. You will receive an email when we are done."
953
  msgstr ""
954
 
955
- #: public/partials/confirmation-screens.php:44
956
- msgid "Email confirmation"
957
  msgstr ""
958
 
959
- #: public/partials/confirmation-screens.php:45
960
- msgid "We've sent you a confirmation email."
961
  msgstr ""
962
 
963
  #: public/partials/confirmation-screens.php:51
964
- msgid "We can't delete this user."
965
  msgstr ""
966
 
967
- #: public/partials/confirmation-screens.php:54
968
- msgid "Required information is missing from the form."
969
  msgstr ""
970
 
971
- #: public/partials/confirmation-screens.php:57
972
- msgid "Request Received"
973
- msgstr ""
974
-
975
- #: public/partials/confirmation-screens.php:58
976
- msgid "Your request has been received. We will be in touch soon."
977
- msgstr ""
978
-
979
- #: public/partials/confirmation-screens.php:61
980
- msgid "There was a problem with your request. Please try again later."
981
  msgstr ""
982
 
983
  #: public/partials/delete-form.php:22
@@ -996,60 +1089,28 @@ msgstr ""
996
  msgid "Options"
997
  msgstr ""
998
 
999
- #: public/partials/privacy-preferences-modal.php:34
1000
  msgid "Cookie Settings"
1001
  msgstr ""
1002
 
1003
- #: public/partials/privacy-preferences-modal.php:84
1004
- msgid "Cookies Used"
1005
- msgstr ""
1006
-
1007
  #: public/partials/privacy-preferences-modal.php:101
1008
- msgid "Always Active"
1009
  msgstr ""
1010
 
1011
- #: public/partials/privacy-preferences-modal.php:120
1012
  msgid "Opt Out"
1013
  msgstr ""
1014
 
1015
- #: public/partials/privacy-preferences-modal.php:135
1016
  msgid "Save Preferences"
1017
  msgstr ""
1018
 
1019
- #: public/partials/privacy-preferences-modal.php:137
1020
- msgid "More Information"
1021
- msgstr ""
1022
-
1023
- #: public/partials/reconsent-modal.php:3
1024
- msgid "Our Privacy Policy has been updated."
1025
  msgstr ""
1026
 
1027
- #: public/partials/reconsent-modal.php:4
1028
- msgid "To continue using the site you need to read the revised version and agree to the terms."
1029
- msgstr ""
1030
-
1031
- #: public/partials/reconsent-modal.php:9
1032
- msgid "Agree"
1033
- msgstr ""
1034
-
1035
- #: public/partials/reconsent-modal.php:10
1036
- msgid "Disagree"
1037
- msgstr ""
1038
-
1039
- #: public/partials/reconsent-modal.php:13
1040
- msgid "Updating"
1041
- msgstr ""
1042
-
1043
- #: public/partials/reconsent-modal.php:22
1044
- msgid "Are you sure?"
1045
- msgstr ""
1046
-
1047
- #: public/partials/reconsent-modal.php:27
1048
- msgid "By disagreeing you will no longer have access to our site and will be logged out."
1049
- msgstr ""
1050
-
1051
- #: public/partials/reconsent-modal.php:30
1052
- msgid "Continue"
1053
  msgstr ""
1054
 
1055
  #: templates/email/complaint-request.php:4
@@ -1218,12 +1279,32 @@ msgid ""
1218
  "If you have any problems or questions, don't hesitate to contact us."
1219
  msgstr ""
1220
 
1221
- #: admin/partials/templates/tmpl-cookies.php:29
1222
- msgid "Third Party Domains"
 
 
 
 
1223
  msgstr ""
1224
 
1225
- #: admin/partials/templates/tmpl-cookies.php:34
1226
- msgid "Cookies that are set by a third party, like facebook.com"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1227
  msgstr ""
1228
 
1229
  #: admin/partials/templates/tmpl-tools.php:3, admin/partials/templates/tmpl-tools.php:23
25
  msgid "Tools"
26
  msgstr ""
27
 
28
+ #: admin/class-gdpr-admin.php:130
29
  msgid "Settings"
30
  msgstr ""
31
 
32
+ #: admin/class-gdpr-admin.php:296, includes/class-gdpr-help.php:38, includes/class-gdpr-help.php:43, admin/partials/requests.php:32
 
 
 
 
 
 
 
 
 
 
 
 
33
  msgid "Rectify Data"
34
  msgstr ""
35
 
36
+ #: admin/class-gdpr-admin.php:300
37
  msgid "Complaint"
38
  msgstr ""
39
 
40
+ #: admin/class-gdpr-admin.php:304, includes/class-gdpr-help.php:56
41
  msgid "Erasure"
42
  msgstr ""
43
 
44
+ #: admin/class-gdpr-admin.php:321, includes/class-gdpr-help.php:81, includes/class-gdpr-help.php:85, admin/partials/tools.php:55
45
  msgid "Access Data"
46
  msgstr ""
47
 
48
+ #: admin/class-gdpr-admin.php:322, includes/class-gdpr-help.php:95, admin/partials/tools.php:72
49
  msgid "Data Breach"
50
  msgstr ""
51
 
52
+ #: admin/class-gdpr-admin.php:323, includes/class-gdpr-help.php:99, includes/class-gdpr-help.php:106, admin/partials/tools.php:117
53
  msgid "Audit Log"
54
  msgstr ""
55
 
56
+ #: admin/class-gdpr-admin.php:395
57
  msgid "Consent Given"
58
  msgstr ""
59
 
60
+ #: admin/class-gdpr-admin.php:399
61
  msgid "Consent ID"
62
  msgstr ""
63
 
64
+ #: admin/class-gdpr-admin.php:411, admin/partials/requests.php:275
65
  msgid "Comments"
66
  msgstr ""
67
 
68
+ #: admin/class-gdpr-admin.php:416
69
  msgid "Comment Field"
70
  msgstr ""
71
 
72
+ #: admin/class-gdpr-admin.php:417
73
  msgid "Comment Data"
74
  msgstr ""
75
 
76
+ #: admin/class-gdpr-admin.php:453
77
  msgid "Metadata"
78
  msgstr ""
79
 
80
+ #: admin/class-gdpr-admin.php:457
81
  msgid "Name"
82
  msgstr ""
83
 
84
+ #: admin/class-gdpr-admin.php:458
85
  msgid "Value"
86
  msgstr ""
87
 
88
+ #: admin/class-gdpr-admin.php:507
89
  msgid "No logs found for this email."
90
  msgstr ""
91
 
92
+ #: admin/class-gdpr-admin.php:519
93
+ msgid "Review your settings"
94
+ msgstr ""
95
+
96
+ #: admin/class-gdpr-admin.php:520
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:521
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:522
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:557
109
+ msgid "Your %s page has been updated."
110
+ msgstr ""
111
+
112
+ #: admin/class-gdpr-admin.php:559
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:568
117
  msgid "Ask for consent"
118
  msgstr ""
119
 
120
+ #: admin/class-gdpr-admin.php:577
121
  msgid "Ignore"
122
  msgstr ""
123
 
124
+ #: admin/class-gdpr-admin.php:592, admin/class-gdpr-admin.php:731, admin/class-gdpr-admin.php:796, public/class-gdpr-public.php:196, public/class-gdpr-public.php:293, public/class-gdpr-public.php:352
125
  msgid "We could not verify the the security token. Please try again."
126
  msgstr ""
127
 
128
+ #: admin/class-gdpr-admin.php:604
129
  msgid "One or more required fields are missing. Please try again."
130
  msgstr ""
131
 
132
+ #: admin/class-gdpr-admin.php:651
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:714
137
  msgid "ERROR"
138
  msgstr ""
139
 
140
+ #: admin/class-gdpr-admin.php:716
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:749
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:819, includes/class-gdpr-help.php:161, public/partials/privacy-preferences-modal.php:32, public/partials/privacy-preferences-modal.php:63
150
  msgid "Consent Management"
151
  msgstr ""
152
 
153
+ #: admin/class-gdpr-admin.php:856
154
  msgid "Profile Updated. These are the user consents after the save:"
155
  msgstr ""
156
 
157
+ #: admin/class-gdpr-admin.php:929, admin/partials/settings.php:332
158
+ msgid "Consents"
159
+ msgstr ""
160
+
161
  #: admin/class-gdpr-requests-admin.php:30, admin/class-gdpr-requests-admin.php:155, admin/class-gdpr-requests-admin.php:203, admin/class-gdpr-requests-admin.php:240
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:286, admin/class-gdpr-requests-admin.php:331, public/class-gdpr-requests-public.php:121, public/partials/confirmation-screens.php:55
166
  msgid "User not found."
167
  msgstr ""
168
 
217
  msgid "User %s was deleted from the site."
218
  msgstr ""
219
 
220
+ #: admin/class-gdpr-requests-admin.php:278, admin/class-gdpr-requests-admin.php:317, public/class-gdpr-requests-public.php:82
221
  msgid "We could not verify the security token. Please try again."
222
  msgstr ""
223
 
384
  msgstr ""
385
 
386
  #: includes/class-gdpr-help.php:58
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:61
448
  msgstr ""
449
 
450
  #: includes/class-gdpr-help.php:128
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:130
519
  msgid "User request expired. Removing %s user_meta."
520
  msgstr ""
521
 
522
+ #: includes/class-gdpr.php:304
523
  msgid "User registered to the site."
524
  msgstr ""
525
 
526
  #. translators: Name of consent
527
+ #: includes/class-gdpr.php:311
528
  msgid "User gave explicit consent to %s"
529
  msgstr ""
530
 
531
+ #: includes/helper-functions.php:26, public/partials/privacy-bar.php:36
532
  msgid "Privacy Preferences"
533
  msgstr ""
534
 
535
+ #: public/class-gdpr-public.php:125
536
  msgid "Aborting"
537
  msgstr ""
538
 
539
+ #: public/class-gdpr-public.php:126
540
+ msgid "Continue"
541
  msgstr ""
542
 
543
+ #: public/class-gdpr-public.php:127, public/partials/confirmation-screens.php:27
544
+ msgid "Cancel"
545
  msgstr ""
546
 
547
+ #: public/class-gdpr-public.php:128, public/partials/confirmation-screens.php:79
548
+ msgid "OK"
549
+ msgstr ""
550
+
551
+ #: public/class-gdpr-public.php:145, public/partials/reconsent-bar.php:31
552
+ msgid "I Agree"
553
  msgstr ""
554
 
555
+ #: public/class-gdpr-public.php:196, public/class-gdpr-public.php:352, public/class-gdpr-requests-public.php:78, public/class-gdpr-requests-public.php:82, public/class-gdpr-requests-public.php:92, public/class-gdpr-requests-public.php:105, public/class-gdpr-requests-public.php:121, public/class-gdpr-requests-public.php:144, public/class-gdpr-requests-public.php:152, public/class-gdpr-requests-public.php:198, public/partials/confirmation-screens.php:50, public/partials/confirmation-screens.php:54, public/partials/confirmation-screens.php:58, public/partials/confirmation-screens.php:62
556
+ msgid "Error!"
557
+ msgstr ""
558
+
559
+ #: public/class-gdpr-public.php:232
560
+ msgid "User updated their privacy preferences. These are the new approved cookies and consent preferences:"
561
  msgstr ""
562
 
563
+ #: public/class-gdpr-requests-public.php:78
564
  msgid "Invalid type of request. Please try again."
565
  msgstr ""
566
 
567
+ #: public/class-gdpr-requests-public.php:92, public/class-gdpr-requests-public.php:105
568
  msgid "Please verify that you are not a robot."
569
  msgstr ""
570
 
571
+ #: public/class-gdpr-requests-public.php:144
572
+ msgid "We can't delete this user."
573
+ msgstr ""
574
+
575
+ #: public/class-gdpr-requests-public.php:152
576
+ msgid "Required information is missing from the form."
577
+ msgstr ""
578
+
579
+ #: public/class-gdpr-requests-public.php:196
580
+ msgid "Email confirmation"
581
+ msgstr ""
582
+
583
+ #: public/class-gdpr-requests-public.php:196
584
+ msgid "We've sent you a confirmation email."
585
+ msgstr ""
586
+
587
+ #: public/class-gdpr-requests-public.php:198
588
+ msgid "There was a problem with your request. Please try again later."
589
+ msgstr ""
590
+
591
+ #: public/class-gdpr-requests-public.php:275
592
  msgid "User confirmed a request to be deleted."
593
  msgstr ""
594
 
595
+ #: public/class-gdpr-requests-public.php:277
596
  msgid "Content was found for that user."
597
  msgstr ""
598
 
599
+ #: public/class-gdpr-requests-public.php:279
600
  msgid "User added to the erasure review table."
601
  msgstr ""
602
 
603
+ #: public/class-gdpr-requests-public.php:313
604
  msgid "User placed a request for rectification or a complaint."
605
  msgstr ""
606
 
607
  #. translators: File format. Can be XML or JSON
608
+ #: public/class-gdpr-requests-public.php:330
609
  msgid "User downloaded all their data in %s format."
610
  msgstr ""
611
 
697
  msgid "Anonymize"
698
  msgstr ""
699
 
700
+ #: admin/partials/settings.php:2
701
+ msgid "GDPR Settings"
702
  msgstr ""
703
 
704
+ #: admin/partials/settings.php:14
705
+ msgid "Outgoing email limit"
706
  msgstr ""
707
 
708
+ #: admin/partials/settings.php:15, admin/partials/settings.php:16
709
+ msgid "This is the hourly outgoing email limit set by your server."
710
  msgstr ""
711
 
712
+ #: admin/partials/settings.php:23
713
+ msgid "Emails/hour"
714
+ msgstr ""
715
+
716
+ #: admin/partials/settings.php:28
717
  msgid "User deletion"
718
  msgstr ""
719
 
720
+ #: admin/partials/settings.php:29, admin/partials/settings.php:30
721
+ msgid "Useful if you need to remove the user from third-party services."
722
+ msgstr ""
723
+
724
+ #: admin/partials/settings.php:36
725
  msgid "Send all deletion requests to the review table."
726
  msgstr ""
727
 
728
+ #: admin/partials/settings.php:41
729
+ msgid "Refresh page after updating preferences"
730
+ msgstr ""
731
+
732
+ #: admin/partials/settings.php:46
733
+ msgid "Useful for landing pages or to track a visit with Google Analytics."
734
+ msgstr ""
735
+
736
+ #: admin/partials/settings.php:51
737
  msgid "Disable CSS"
738
  msgstr ""
739
 
740
+ #: admin/partials/settings.php:55
741
  msgid "Make sure you know what you are doing before checking this."
742
  msgstr ""
743
 
744
+ #: admin/partials/settings.php:60
745
  msgid "Enable the Telemetry Tracker"
746
  msgstr ""
747
 
748
+ #: admin/partials/settings.php:61, admin/partials/settings.php:62
749
+ msgid "This tracks data that is being sent to outside servers."
750
+ msgstr ""
751
+
752
+ #: admin/partials/settings.php:68
753
  msgid "Toggles the Telemetry Tracker On/Off. (experimental)"
754
  msgstr ""
755
 
756
+ #: admin/partials/settings.php:74
757
  msgid "Privacy Center"
758
  msgstr ""
759
 
760
+ #: admin/partials/settings.php:76
761
  msgid "This section handles the privacy bar and some of the privacy preferences window."
762
  msgstr ""
763
 
764
+ #: admin/partials/settings.php:77
765
  msgid "Important:"
766
  msgstr ""
767
 
768
+ #: admin/partials/settings.php:77
769
  msgid "If the privacy banner text is not filled out, the privacy banner will not show up. Even if you registered your cookies."
770
  msgstr ""
771
 
772
+ #: admin/partials/settings.php:82
773
+ msgid "Enable the Privacy Bar"
774
  msgstr ""
775
 
776
+ #: admin/partials/settings.php:86
777
+ msgid "Toggles the Privacy Bar On/Off."
778
+ msgstr ""
779
+
780
+ #: admin/partials/settings.php:91
781
+ msgid "Display the cookie categories in the privacy bar"
782
+ msgstr ""
783
+
784
+ #: admin/partials/settings.php:100
785
+ msgid "Privacy Bar Content"
786
+ msgstr ""
787
+
788
+ #: admin/partials/settings.php:101, admin/partials/settings.php:102
789
+ msgid "This is required if you want the privacy bar to show up."
790
+ msgstr ""
791
+
792
+ #: admin/partials/settings.php:113
793
  msgid "Privacy Excerpt"
794
  msgstr ""
795
 
796
+ #: admin/partials/settings.php:114, admin/partials/settings.php:115
797
+ msgid "This show up in the privacy preferences window."
798
+ msgstr ""
799
+
800
+ #: admin/partials/settings.php:122
801
  msgid "This will appear in the consent section of the privacy preference window."
802
  msgstr ""
803
 
804
+ #: admin/partials/settings.php:128
805
  msgid "Request Forms reCAPTCHA"
806
  msgstr ""
807
 
808
+ #: admin/partials/settings.php:129
809
  msgid "To prevent spam attacks, you have the option to enable reCAPTCHA. Configure below your keys to make it work with our request forms."
810
  msgstr ""
811
 
812
+ #: admin/partials/settings.php:133
813
  msgid "You can find the necessary information %s."
814
  msgstr ""
815
 
816
+ #: admin/partials/settings.php:134
817
  msgid "here"
818
  msgstr ""
819
 
820
+ #: admin/partials/settings.php:140
821
  msgid "Enable reCAPTCHA"
822
  msgstr ""
823
 
824
+ #: admin/partials/settings.php:149
825
  msgid "Site Key"
826
  msgstr ""
827
 
828
+ #: admin/partials/settings.php:158
829
  msgid "Secret Key"
830
  msgstr ""
831
 
832
+ #: admin/partials/settings.php:169
833
  msgid "WooCommerce"
834
  msgstr ""
835
 
836
+ #: admin/partials/settings.php:174
837
  msgid "Add consent checkboxes to the registration page"
838
  msgstr ""
839
 
840
+ #: admin/partials/settings.php:183
841
  msgid "Add consent checkboxes to the checkout registration form"
842
  msgstr ""
843
 
844
+ #: admin/partials/settings.php:195
845
+ msgid "Cookies"
846
+ msgstr ""
847
+
848
+ #: admin/partials/settings.php:196
849
  msgid "Category name"
850
  msgstr ""
851
 
852
+ #: admin/partials/settings.php:197
853
  msgid "Add tab"
854
  msgstr ""
855
 
856
+ #: admin/partials/settings.php:201
857
  msgid "Remove this tab."
858
  msgstr ""
859
 
860
+ #: admin/partials/settings.php:207, admin/partials/templates/tmpl-cookies.php:9
861
+ msgid "Category Name"
862
  msgstr ""
863
 
864
+ #: admin/partials/settings.php:208, admin/partials/settings.php:209
865
+ msgid "Change this value if you want to name it something different."
866
  msgstr ""
867
 
868
+ #: admin/partials/settings.php:221, admin/partials/templates/tmpl-cookies.php:23
869
+ msgid "Status"
870
+ msgstr ""
871
+
872
+ #: admin/partials/settings.php:222, admin/partials/settings.php:223
873
+ 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."
874
+ msgstr ""
875
+
876
+ #: admin/partials/settings.php:231, public/partials/privacy-preferences-modal.php:73, public/partials/privacy-preferences-modal.php:118, admin/partials/templates/tmpl-cookies.php:33
877
+ msgid "Required"
878
  msgstr ""
879
 
880
+ #: admin/partials/settings.php:232, admin/partials/templates/tmpl-cookies.php:34
881
+ msgid "ON"
882
+ msgstr ""
883
+
884
+ #: admin/partials/settings.php:233, admin/partials/templates/tmpl-cookies.php:35
885
+ msgid "OFF"
886
+ msgstr ""
887
+
888
+ #: admin/partials/settings.php:240, admin/partials/settings.php:293, admin/partials/templates/tmpl-cookies.php:42, admin/partials/templates/tmpl-cookies.php:99
889
+ msgid "Cookies used"
890
+ msgstr ""
891
+
892
+ #: admin/partials/settings.php:241, admin/partials/settings.php:242
893
+ msgid "A comma-separated list of cookies that your site is using that fit this category."
894
+ msgstr ""
895
+
896
+ #: admin/partials/settings.php:250, admin/partials/templates/tmpl-cookies.php:52, admin/partials/templates/tmpl-cookies.php:103
897
  msgid "Comma separated list."
898
  msgstr ""
899
 
900
+ #: admin/partials/settings.php:256, admin/partials/templates/tmpl-cookies.php:58
901
+ msgid "How are these used"
902
+ msgstr ""
903
+
904
+ #: admin/partials/settings.php:257, admin/partials/settings.php:258
905
+ msgid "A brief explanation of why you are requesting to use these cookies, what they are for, and how you process them."
906
+ msgstr ""
907
+
908
+ #: admin/partials/settings.php:268, admin/partials/templates/tmpl-cookies.php:70
909
+ msgid "Third party domain"
910
+ msgstr ""
911
+
912
+ #: admin/partials/settings.php:269, admin/partials/settings.php:270
913
+ msgid "E.g. facebook.com"
914
  msgstr ""
915
 
916
+ #: admin/partials/settings.php:277, admin/partials/templates/tmpl-cookies.php:79
917
  msgid "Add"
918
  msgstr ""
919
 
920
+ #: admin/partials/settings.php:279, admin/partials/templates/tmpl-cookies.php:81
921
  msgid "Cookies that are set by a third party, like facebook.com."
922
  msgstr ""
923
 
924
+ #: admin/partials/settings.php:287, admin/partials/templates/tmpl-cookies.php:94
925
  msgid "Remove this domain."
926
  msgstr ""
927
 
928
+ #: admin/partials/settings.php:294, admin/partials/settings.php:295
929
+ msgid "A comma separated list of cookies that your site is using from this third-party provider."
930
  msgstr ""
931
 
932
+ #: admin/partials/settings.php:307
933
+ msgid "Opt Out Link"
934
  msgstr ""
935
 
936
+ #: admin/partials/settings.php:308, admin/partials/settings.php:309
937
+ msgid "Add a link with the third-party instructions on how to opt out of their cookies."
938
  msgstr ""
939
 
940
+ #: admin/partials/settings.php:317, admin/partials/templates/tmpl-cookies.php:111
941
+ msgid "Url with instructions on how to opt out."
942
  msgstr ""
943
 
944
+ #: admin/partials/settings.php:333
945
+ msgid "E.g. Privacy Policy or Cookie Policy"
946
  msgstr ""
947
 
948
+ #: admin/partials/settings.php:334
949
+ msgid "Add consent"
950
  msgstr ""
951
 
952
+ #: admin/partials/settings.php:339, admin/partials/templates/tmpl-consents.php:3
953
  msgid "Unregister this consent."
954
  msgstr ""
955
 
956
+ #: admin/partials/settings.php:346, admin/partials/templates/tmpl-consents.php:10
957
+ msgid "Policy Page"
958
  msgstr ""
959
 
960
+ #: admin/partials/settings.php:347, admin/partials/settings.php:348, admin/partials/templates/tmpl-consents.php:11, admin/partials/templates/tmpl-consents.php:12
961
+ 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."
962
  msgstr ""
963
 
964
+ #: admin/partials/settings.php:365, admin/partials/templates/tmpl-consents.php:29
965
+ msgid "Long description"
966
  msgstr ""
967
 
968
+ #: admin/partials/settings.php:366, admin/partials/settings.php:367, admin/partials/templates/tmpl-consents.php:30, admin/partials/templates/tmpl-consents.php:31
969
+ msgid "This will show up at the privacy preferences center, under the name of the consent."
970
  msgstr ""
971
 
972
+ #: admin/partials/settings.php:377, admin/partials/templates/tmpl-consents.php:41
973
+ msgid "Short description"
974
  msgstr ""
975
 
976
+ #: admin/partials/settings.php:378, admin/partials/settings.php:379, admin/partials/templates/tmpl-consents.php:42, admin/partials/templates/tmpl-consents.php:43
977
+ msgid "This will show up at registration forms next to checkboxes."
978
  msgstr ""
979
 
980
  #: admin/partials/tools.php:32
1002
  msgstr ""
1003
 
1004
  #: admin/partials/tools.php:88
1005
+ 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."
1006
  msgstr ""
1007
 
1008
  #: admin/partials/tools.php:92
1010
  msgstr ""
1011
 
1012
  #: admin/partials/tools.php:95
1013
+ msgid "Communicate the name and contact details of the data protection officer or another point of contact where more information can be obtained."
1014
  msgstr ""
1015
 
1016
  #: admin/partials/tools.php:99
1041
  msgid "Your account will be closed and all data will be permanently deleted and cannot be recovered. Are you sure?"
1042
  msgstr ""
1043
 
1044
+ #: public/partials/confirmation-screens.php:38
 
 
 
 
 
 
 
 
1045
  msgid "Your account"
1046
  msgstr ""
1047
 
1048
+ #: public/partials/confirmation-screens.php:40
1049
  msgid "Your account has been closed. We are sorry to see you go."
1050
  msgstr ""
1051
 
1052
+ #: public/partials/confirmation-screens.php:42
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:46
1057
+ msgid "Request Received"
1058
  msgstr ""
1059
 
1060
+ #: public/partials/confirmation-screens.php:47
1061
+ msgid "Your request has been received. We will be in touch soon."
1062
  msgstr ""
1063
 
1064
  #: public/partials/confirmation-screens.php:51
1065
+ msgid "Malformed request confirmation link!"
1066
  msgstr ""
1067
 
1068
+ #: public/partials/confirmation-screens.php:59
1069
+ msgid "We could not confirm the request key. It may be expired."
1070
  msgstr ""
1071
 
1072
+ #: public/partials/confirmation-screens.php:63
1073
+ msgid "The key used does not match the request key we have stored."
 
 
 
 
 
 
 
 
1074
  msgstr ""
1075
 
1076
  #: public/partials/delete-form.php:22
1089
  msgid "Options"
1090
  msgstr ""
1091
 
1092
+ #: public/partials/privacy-preferences-modal.php:35
1093
  msgid "Cookie Settings"
1094
  msgstr ""
1095
 
 
 
 
 
1096
  #: public/partials/privacy-preferences-modal.php:101
1097
+ msgid "Cookies Used"
1098
  msgstr ""
1099
 
1100
+ #: public/partials/privacy-preferences-modal.php:137
1101
  msgid "Opt Out"
1102
  msgstr ""
1103
 
1104
+ #: public/partials/privacy-preferences-modal.php:152
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
1113
+ msgid "View"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1114
  msgstr ""
1115
 
1116
  #: templates/email/complaint-request.php:4
1279
  "If you have any problems or questions, don't hesitate to contact us."
1280
  msgstr ""
1281
 
1282
+ #: admin/partials/templates/tmpl-cookies.php:10, admin/partials/templates/tmpl-cookies.php:11
1283
+ msgid "Change this value if you want to rename this category something different."
1284
+ msgstr ""
1285
+
1286
+ #: admin/partials/templates/tmpl-cookies.php:24, admin/partials/templates/tmpl-cookies.php:25
1287
+ 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."
1288
  msgstr ""
1289
 
1290
+ #: admin/partials/templates/tmpl-cookies.php:43, admin/partials/templates/tmpl-cookies.php:44
1291
+ msgid "A comma separated list of cookies that your site is using that fit 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 ""
1297
+
1298
+ #: admin/partials/templates/tmpl-cookies.php:71, admin/partials/templates/tmpl-cookies.php:72
1299
+ msgid "E.g. youtube.com"
1300
+ msgstr ""
1301
+
1302
+ #: admin/partials/templates/tmpl-cookies.php:78
1303
+ msgid "domain.com"
1304
+ msgstr ""
1305
+
1306
+ #: admin/partials/templates/tmpl-cookies.php:107
1307
+ msgid "How to Opt Out"
1308
  msgstr ""
1309
 
1310
  #: admin/partials/templates/tmpl-tools.php:3, admin/partials/templates/tmpl-tools.php:23
public/class-gdpr-public.php CHANGED
@@ -121,9 +121,14 @@ class GDPR_Public {
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( $this->plugin_name, 'GDPR', array(
123
  'ajaxurl' => admin_url( 'admin-ajax.php' ),
124
- 'aborting' => esc_html__( 'Aborting', 'gdpr' ),
 
 
 
 
 
125
  'is_user_logged_in' => is_user_logged_in(),
126
- 'privacy_page_id' => get_option( 'gdpr_privacy_policy_page', 0 ),
127
  ) );
128
  }
129
 
@@ -133,11 +138,13 @@ class GDPR_Public {
133
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
134
  */
135
  public function privacy_bar() {
136
- $content = get_option( 'gdpr_cookie_banner_content', '' );
137
- $tabs = get_option( 'gdpr_cookie_popup_content', array() );
138
- $button_text = apply_filters( 'gdpr_privacy_bar_button_text', esc_html__( 'I Agree', 'gdpr' ) );
 
 
139
 
140
- if ( empty( $content ) ) {
141
  return;
142
  }
143
 
@@ -152,7 +159,6 @@ class GDPR_Public {
152
  public function privacy_preferences_modal() {
153
  $cookie_privacy_excerpt = get_option( 'gdpr_cookie_privacy_excerpt', '' );
154
  $consent_types = get_option( 'gdpr_consent_types', array() );
155
- $privacy_policy_page = get_option( 'gdpr_privacy_policy_page', 0 );
156
  $approved_cookies = isset( $_COOKIE['gdpr']['allowed_cookies'] ) ? json_decode( wp_unslash( $_COOKIE['gdpr']['allowed_cookies'] ) ) : array();
157
  $user_consents = isset( $_COOKIE['gdpr']['consent_types'] ) ? json_decode( wp_unslash( $_COOKIE['gdpr']['consent_types'] ) ) : array();
158
  $tabs = get_option( 'gdpr_cookie_popup_content', array() );
@@ -181,19 +187,15 @@ class GDPR_Public {
181
  /**
182
  * Update the user allowed cookies and types of consent.
183
  * If the user is logged in, we also save consent to user meta.
184
- * @since 1.1.0
 
185
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
186
  */
187
  public function update_privacy_preferences() {
188
- if ( ! isset( $_POST['update-privacy-preferences-nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['update-privacy-preferences-nonce'] ), 'gdpr-update_privacy_preferences' ) ) {
189
- wp_die( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
190
- }
191
-
192
- if ( ! isset( $_POST['user_consents'] ) ) {
193
- wp_die( esc_html__( "You need to at least consent to our Privacy Policy.", 'gdpr' ) );
194
  }
195
-
196
- $consents = array_map( 'sanitize_text_field', (array) $_POST['user_consents'] );
197
  $cookies = isset( $_POST['approved_cookies'] ) ? array_map( 'sanitize_text_field', (array) $_POST['approved_cookies'] ) : array();
198
  $all_cookies = isset( $_POST['all_cookies'] ) ? array_map( 'sanitize_text_field', (array) json_decode( wp_unslash( $_POST['all_cookies'] ) ) ) : array();
199
 
@@ -245,8 +247,7 @@ class GDPR_Public {
245
 
246
  }
247
 
248
- wp_safe_redirect( esc_url_raw( wp_get_referer() ) );
249
- exit;
250
  }
251
 
252
  /**
@@ -256,20 +257,30 @@ class GDPR_Public {
256
  * @return bool Whether the user consented or not.
257
  */
258
  public function is_consent_needed() {
259
- $privacy_policy_page = get_option( 'gdpr_privacy_policy_page' );
260
- if ( ! $privacy_policy_page || ! is_user_logged_in() ) {
 
 
 
 
 
 
 
261
  return;
262
  }
263
 
264
- $page_obj = get_post( $privacy_policy_page );
265
- $user = wp_get_current_user();
266
  $user_consents = get_user_meta( $user->ID, 'gdpr_consents' );
267
 
268
- if ( in_array( 'privacy-policy', $user_consents ) ) {
 
 
 
 
269
  return;
270
  }
271
 
272
- include plugin_dir_path( __FILE__ ) . 'partials/reconsent-modal.php';
273
  }
274
 
275
  /**
@@ -286,26 +297,6 @@ class GDPR_Public {
286
  wp_send_json_success();
287
  }
288
 
289
- /**
290
- * The user agreed with the privacy policy terms when prompted.
291
- * @since 1.0.0
292
- * @author Fernando Claussen <fernandoclaussen@gmail.com>
293
- */
294
- public function agree_with_terms() {
295
- if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'gdpr-user_agree_with_terms' ) ) {
296
- wp_send_json_error( esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) );
297
- }
298
-
299
- $user = wp_get_current_user();
300
- $user_consents = get_user_meta( $user->ID, 'gdpr_consents' );
301
- $user_consents[] = 'privacy-policy';
302
- $user_consents = array_unique( $user_consents );
303
- add_user_meta( $user->ID, 'gdpr_consents', 'privacy-policy' );
304
- setcookie( "gdpr[consent_types]", json_encode( $user_consents ), time() + YEAR_IN_SECONDS, "/" );
305
- GDPR_Audit_Log::log( $user->ID, esc_html__( 'User consented to the Privacy Policies.', 'gdpr' ) );
306
- wp_send_json_success();
307
- }
308
-
309
  public function set_plugin_cookies() {
310
  $user_id = get_current_user_id();
311
 
@@ -336,7 +327,7 @@ class GDPR_Public {
336
  $cookies = array();
337
  if ( ! empty( $registered_cookies ) ) {
338
  $required_cookies = array_filter( $registered_cookies, function( $item ) {
339
- return $item['always_active'] == 1;
340
  });
341
  if ( ! empty( $required_cookies ) ) {
342
  foreach ( $required_cookies as $category ) {
@@ -356,4 +347,20 @@ class GDPR_Public {
356
  }
357
  }
358
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
359
  }
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( $this->plugin_name, 'GDPR', array(
123
  'ajaxurl' => admin_url( 'admin-ajax.php' ),
124
+ 'i18n' => array(
125
+ 'aborting' => esc_html__( 'Aborting', 'gdpr' ),
126
+ 'continue' => esc_html__( 'Continue', 'gdpr' ),
127
+ 'cancel' => esc_html__( 'Cancel', 'gdpr' ),
128
+ 'ok' => esc_html__( 'OK', 'gdpr' ),
129
+ ),
130
  'is_user_logged_in' => is_user_logged_in(),
131
+ 'refresh' => get_option( 'gdpr_refresh_after_preferences_update', true ),
132
  ) );
133
  }
134
 
138
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
139
  */
140
  public function privacy_bar() {
141
+ $privacy_bar_enabled = get_option( 'gdpr_enable_privacy_bar', true );
142
+ $content = get_option( 'gdpr_cookie_banner_content', '' );
143
+ $registered_cookies = get_option( 'gdpr_cookie_popup_content', array() );
144
+ $show_cookie_cat_checkboxes = get_option( 'gdpr_display_cookie_categories_in_bar', false );
145
+ $button_text = apply_filters( 'gdpr_privacy_bar_button_text', esc_html__( 'I Agree', 'gdpr' ) );
146
 
147
+ if ( empty( $content ) || ! $privacy_bar_enabled ) {
148
  return;
149
  }
150
 
159
  public function privacy_preferences_modal() {
160
  $cookie_privacy_excerpt = get_option( 'gdpr_cookie_privacy_excerpt', '' );
161
  $consent_types = get_option( 'gdpr_consent_types', array() );
 
162
  $approved_cookies = isset( $_COOKIE['gdpr']['allowed_cookies'] ) ? json_decode( wp_unslash( $_COOKIE['gdpr']['allowed_cookies'] ) ) : array();
163
  $user_consents = isset( $_COOKIE['gdpr']['consent_types'] ) ? json_decode( wp_unslash( $_COOKIE['gdpr']['consent_types'] ) ) : array();
164
  $tabs = get_option( 'gdpr_cookie_popup_content', array() );
187
  /**
188
  * Update the user allowed cookies and types of consent.
189
  * If the user is logged in, we also save consent to user meta.
190
+ * Ajax version of a previous function.
191
+ * @since 2.0.0
192
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
193
  */
194
  public function update_privacy_preferences() {
195
+ if ( ! isset( $_POST['update-privacy-preferences-nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['update-privacy-preferences-nonce'] ), 'gdpr-update-privacy-preferences' ) ) {
196
+ wp_send_json_error( array( 'title' => esc_html__( 'Error!', 'gdpr' ), 'content' => esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) ) );
 
 
 
 
197
  }
198
+ $consents = isset( $_POST['user_consents'] ) ? array_map( 'sanitize_text_field', (array) $_POST['user_consents'] ) : array();
 
199
  $cookies = isset( $_POST['approved_cookies'] ) ? array_map( 'sanitize_text_field', (array) $_POST['approved_cookies'] ) : array();
200
  $all_cookies = isset( $_POST['all_cookies'] ) ? array_map( 'sanitize_text_field', (array) json_decode( wp_unslash( $_POST['all_cookies'] ) ) ) : array();
201
 
247
 
248
  }
249
 
250
+ wp_send_json_success();
 
251
  }
252
 
253
  /**
257
  * @return bool Whether the user consented or not.
258
  */
259
  public function is_consent_needed() {
260
+ $consents = get_option( 'gdpr_consent_types', array() );
261
+ if ( empty( $consents ) || ! is_array( $consents ) ) {
262
+ return;
263
+ }
264
+ $required_consents = array_filter( $consents, function( $consent ) {
265
+ return ! empty( $consent['policy-page'] );
266
+ } );
267
+
268
+ if ( ! $required_consents || ! is_user_logged_in() ) {
269
  return;
270
  }
271
 
272
+ $user = wp_get_current_user();
 
273
  $user_consents = get_user_meta( $user->ID, 'gdpr_consents' );
274
 
275
+ $updated_consents = array_filter( $required_consents, function( $consent, $consent_id ) use ( $user_consents ) {
276
+ return ! in_array( $consent_id, $user_consents );
277
+ }, ARRAY_FILTER_USE_BOTH );
278
+
279
+ if ( empty( $updated_consents ) ) {
280
  return;
281
  }
282
 
283
+ include plugin_dir_path( __FILE__ ) . 'partials/reconsent-bar.php';
284
  }
285
 
286
  /**
297
  wp_send_json_success();
298
  }
299
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
  public function set_plugin_cookies() {
301
  $user_id = get_current_user_id();
302
 
327
  $cookies = array();
328
  if ( ! empty( $registered_cookies ) ) {
329
  $required_cookies = array_filter( $registered_cookies, function( $item ) {
330
+ return 'required' === $item['status'];
331
  });
332
  if ( ! empty( $required_cookies ) ) {
333
  foreach ( $required_cookies as $category ) {
347
  }
348
  }
349
 
350
+ public function agree_with_new_policies() {
351
+ if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['nonce'] ), 'gdpr-agree-with-new-policies' ) ) {
352
+ wp_send_json_error( array( 'title' => esc_html__( 'Error!', 'gdpr' ), 'content' => esc_html__( 'We could not verify the the security token. Please try again.', 'gdpr' ) ) );
353
+ }
354
+ $consents = isset( $_POST['consents'] ) ? array_map( 'sanitize_text_field', (array) $_POST['consents'] ) : array();
355
+ $user_id = get_current_user_id();
356
+
357
+ foreach ( $consents as $consent ) {
358
+ error_log($consent);
359
+ error_log($user_id);
360
+ add_user_meta( $user_id, 'gdpr_consents', $consent );
361
+ }
362
+
363
+ wp_send_json_success();
364
+ }
365
+
366
  }
public/class-gdpr-requests-public.php CHANGED
@@ -69,16 +69,17 @@ class GDPR_Requests_Public extends GDPR_Requests {
69
 
70
  /**
71
  * Sends an email to the end user so it can confirm his request.
72
- * @since 1.0.0
 
73
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
74
  */
75
  public function send_request_email() {
76
  if ( ! isset( $_POST['type'] ) || ! in_array( $_POST['type'], parent::$allowed_types ) ) {
77
- wp_die( esc_html__( 'Invalid type of request. Please try again.', 'gdpr' ) );
78
  }
79
 
80
  if ( ! isset( $_POST['gdpr_request_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['gdpr_request_nonce'] ), 'gdpr-add-to-requests' ) ) {
81
- wp_die( esc_html__( 'We could not verify the security token. Please try again.', 'gdpr' ) );
82
  }
83
 
84
  $use_recaptcha = get_option( 'gdpr_use_recaptcha', false );
@@ -88,7 +89,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
88
 
89
  if ( $site_key && $secret_key ) {
90
  if ( ! isset( $_POST['g-recaptcha-response'] ) || ! $_POST['g-recaptcha-response'] ) {
91
- wp_die( esc_html__( 'Please verify that you are not a robot.', 'gdpr' ) );
92
  }
93
 
94
  $response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', array(
@@ -101,7 +102,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
101
  $recaptcha_result = wp_remote_retrieve_body( $response );
102
  $recaptcha_result = json_decode( $recaptcha_result );
103
  if ( ! $recaptcha_result || ! $recaptcha_result->success ) {
104
- wp_die( esc_html__( 'Please verify that you are not a robot.', 'gdpr' ) );
105
  }
106
 
107
  }
@@ -116,6 +117,10 @@ class GDPR_Requests_Public extends GDPR_Requests {
116
  $user = isset( $_POST['user_email'] ) ? get_user_by( 'email', sanitize_email( $_POST['user_email'] ) ) : null;
117
  }
118
 
 
 
 
 
119
  $email_args = array(
120
  'forgot_password_url' => add_query_arg(
121
  array(
@@ -127,40 +132,16 @@ class GDPR_Requests_Public extends GDPR_Requests {
127
  ),
128
  );
129
 
 
 
130
  switch ( $type ) {
131
  case 'delete':
132
- if ( ! $user instanceof WP_User ) {
133
- wp_safe_redirect(
134
- esc_url_raw(
135
- add_query_arg(
136
- array(
137
- 'notify' => 1,
138
- 'user-not-found' => 1,
139
- ),
140
- wp_get_referer()
141
- )
142
- )
143
- );
144
- exit;
145
- }
146
-
147
  if ( in_array( 'administrator', $user->roles ) ) {
148
  $admins_query = new WP_User_Query( array(
149
  'role' => 'Administrator',
150
  ) );
151
  if ( 1 === $admins_query->get_total() ) {
152
- wp_safe_redirect(
153
- esc_url_raw(
154
- add_query_arg(
155
- array(
156
- 'notify' => 1,
157
- 'cannot-delete' => 1,
158
- ),
159
- wp_get_referer()
160
- )
161
- )
162
- );
163
- exit;
164
  }
165
  }
166
  break;
@@ -168,37 +149,10 @@ class GDPR_Requests_Public extends GDPR_Requests {
168
  case 'rectify':
169
  case 'complaint':
170
  if ( ! $data ) {
171
- wp_safe_redirect(
172
- esc_url_raw(
173
- add_query_arg(
174
- array(
175
- 'notify' => 1,
176
- 'required-information-missing' => 1,
177
- ),
178
- wp_get_referer()
179
- )
180
- )
181
- );
182
- exit;
183
  }
184
  $email_args['data'] = $data;
185
  break;
186
- case 'export-data':
187
- if ( ! $user instanceof WP_User ) {
188
- wp_safe_redirect(
189
- esc_url_raw(
190
- add_query_arg(
191
- array(
192
- 'notify' => 1,
193
- 'user-not-found' => 1,
194
- ),
195
- wp_get_referer()
196
- )
197
- )
198
- );
199
- exit;
200
- }
201
- break;
202
  }
203
 
204
  $key = parent::add_to_requests( $user->user_email, $type, $data );
@@ -239,31 +193,9 @@ class GDPR_Requests_Public extends GDPR_Requests {
239
  "{$type}-request",
240
  $email_args
241
  ) ) {
242
- wp_safe_redirect(
243
- esc_url_raw(
244
- add_query_arg(
245
- array(
246
- 'notify' => 1,
247
- 'email-sent' => 1,
248
- ),
249
- wp_get_referer()
250
- )
251
- )
252
- );
253
- exit;
254
  } else {
255
- wp_safe_redirect(
256
- esc_url_raw(
257
- add_query_arg(
258
- array(
259
- 'notify' => 1,
260
- 'error' => 1,
261
- ),
262
- wp_get_referer()
263
- )
264
- )
265
- );
266
- exit;
267
  }
268
  }
269
 
@@ -274,7 +206,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
274
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
275
  */
276
  public function request_confirmed() {
277
- if ( ! is_front_page() || ! isset( $_GET['type'], $_GET['key'], $_GET['email'] ) ) {
278
  return;
279
  }
280
 
@@ -285,15 +217,50 @@ class GDPR_Requests_Public extends GDPR_Requests {
285
 
286
  $user = get_user_by( 'email', $email );
287
  if ( ! $user instanceof WP_User ) {
288
- return;
 
 
 
 
 
 
 
 
 
 
 
289
  }
290
 
291
  $meta_key = get_user_meta( $user->ID, self::$plugin_name . "_{$type}_key", true );
292
  if ( empty( $meta_key ) ) {
293
- return;
 
 
 
 
 
 
 
 
 
 
 
294
  }
295
 
296
- if ( $key === $meta_key ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
297
  $notification_email_args = array(
298
  'type' => $type,
299
  'review_url' => add_query_arg( array( 'page' => 'gdpr-requests#' . $type ), admin_url() ),
@@ -315,7 +282,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
315
  add_query_arg(
316
  array(
317
  'user-deleted' => 0,
318
- 'notify' => 1,
319
  ),
320
  home_url()
321
  )
@@ -329,7 +296,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
329
  add_query_arg(
330
  array(
331
  'user-deleted' => 1,
332
- 'notify' => 1,
333
  ),
334
  home_url()
335
  )
@@ -349,7 +316,7 @@ class GDPR_Requests_Public extends GDPR_Requests {
349
  add_query_arg(
350
  array(
351
  'request-confirmed' => 1,
352
- 'notify' => 1,
353
  ),
354
  home_url()
355
  )
69
 
70
  /**
71
  * Sends an email to the end user so it can confirm his request.
72
+ * Ajax Version of a previous function
73
+ * @since 2.0.0
74
  * @author Fernando Claussen <fernandoclaussen@gmail.com>
75
  */
76
  public function send_request_email() {
77
  if ( ! isset( $_POST['type'] ) || ! in_array( $_POST['type'], parent::$allowed_types ) ) {
78
+ wp_send_json_error( array( 'title' => esc_html__( 'Error!', 'gdpr' ), 'content' => esc_html__( 'Invalid type of request. Please try again.', 'gdpr' ) ) );
79
  }
80
 
81
  if ( ! isset( $_POST['gdpr_request_nonce'] ) || ! wp_verify_nonce( sanitize_key( $_POST['gdpr_request_nonce'] ), 'gdpr-add-to-requests' ) ) {
82
+ wp_send_json_error( array( 'title' => esc_html__( 'Error!', 'gdpr' ), 'content' => esc_html__( 'We could not verify the security token. Please try again.', 'gdpr' ) ) );
83
  }
84
 
85
  $use_recaptcha = get_option( 'gdpr_use_recaptcha', false );
89
 
90
  if ( $site_key && $secret_key ) {
91
  if ( ! isset( $_POST['g-recaptcha-response'] ) || ! $_POST['g-recaptcha-response'] ) {
92
+ wp_send_json_error( array( 'title' => esc_html__( 'Error!', 'gdpr' ), 'content' => esc_html__( 'Please verify that you are not a robot.', 'gdpr' ) ) );
93
  }
94
 
95
  $response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', array(
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( array( 'title' => esc_html__( 'Error!', 'gdpr' ), 'content' => esc_html__( 'Please verify that you are not a robot.', 'gdpr' ) ) );
106
  }
107
 
108
  }
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( array( 'title' => esc_html__( 'Error!', 'gdpr' ), 'content' => esc_html__( 'User not found.', 'gdpr' ) ) );
122
+ }
123
+
124
  $email_args = array(
125
  'forgot_password_url' => add_query_arg(
126
  array(
132
  ),
133
  );
134
 
135
+ $email_args['forgot_password_url'] = apply_filters( 'gdpr_forgot_password_url', $email_args['forgot_password_url'] );
136
+
137
  switch ( $type ) {
138
  case 'delete':
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  if ( in_array( 'administrator', $user->roles ) ) {
140
  $admins_query = new WP_User_Query( array(
141
  'role' => 'Administrator',
142
  ) );
143
  if ( 1 === $admins_query->get_total() ) {
144
+ wp_send_json_error( array( 'title' => esc_html__( 'Error!', 'gdpr' ), 'content' => esc_html__( 'We can\'t delete this user.', 'gdpr' ) ) );
 
 
 
 
 
 
 
 
 
 
 
145
  }
146
  }
147
  break;
149
  case 'rectify':
150
  case 'complaint':
151
  if ( ! $data ) {
152
+ wp_send_json_error( array( 'title' => esc_html__( 'Error!', 'gdpr' ), 'content' => esc_html__( 'Required information is missing from the form.', 'gdpr' ) ) );
 
 
 
 
 
 
 
 
 
 
 
153
  }
154
  $email_args['data'] = $data;
155
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  }
157
 
158
  $key = parent::add_to_requests( $user->user_email, $type, $data );
193
  "{$type}-request",
194
  $email_args
195
  ) ) {
196
+ wp_send_json_success( array( 'title' => esc_html__( 'Email confirmation', 'gdpr' ), 'content' => esc_html__( 'We\'ve sent you a confirmation email.', 'gdpr' ) ) );
 
 
 
 
 
 
 
 
 
 
 
197
  } else {
198
+ wp_send_json_error( array( 'title' => esc_html__( 'Error!', 'gdpr' ), 'content' => esc_html__( 'There was a problem with your request. Please try again later.', 'gdpr' ) ) );
 
 
 
 
 
 
 
 
 
 
 
199
  }
200
  }
201
 
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
 
217
 
218
  $user = get_user_by( 'email', $email );
219
  if ( ! $user instanceof WP_User ) {
220
+ wp_safe_redirect(
221
+ esc_url_raw(
222
+ add_query_arg(
223
+ array(
224
+ 'user-not-found' => 1,
225
+ 'notify' => 1,
226
+ ),
227
+ home_url()
228
+ )
229
+ )
230
+ );
231
+ exit;
232
  }
233
 
234
  $meta_key = get_user_meta( $user->ID, self::$plugin_name . "_{$type}_key", true );
235
  if ( empty( $meta_key ) ) {
236
+ wp_safe_redirect(
237
+ esc_url_raw(
238
+ add_query_arg(
239
+ array(
240
+ 'request-key-not-found' => 1,
241
+ 'notify' => 1,
242
+ ),
243
+ home_url()
244
+ )
245
+ )
246
+ );
247
+ exit;
248
  }
249
 
250
+ if ( $key !== $meta_key ) {
251
+ wp_safe_redirect(
252
+ esc_url_raw(
253
+ add_query_arg(
254
+ array(
255
+ 'request-key-not-match' => 1,
256
+ 'notify' => 1,
257
+ ),
258
+ home_url()
259
+ )
260
+ )
261
+ );
262
+ exit;
263
+ } else {
264
  $notification_email_args = array(
265
  'type' => $type,
266
  'review_url' => add_query_arg( array( 'page' => 'gdpr-requests#' . $type ), admin_url() ),
282
  add_query_arg(
283
  array(
284
  'user-deleted' => 0,
285
+ 'notify' => 1,
286
  ),
287
  home_url()
288
  )
296
  add_query_arg(
297
  array(
298
  'user-deleted' => 1,
299
+ 'notify' => 1,
300
  ),
301
  home_url()
302
  )
316
  add_query_arg(
317
  array(
318
  'request-confirmed' => 1,
319
+ 'notify' => 1,
320
  ),
321
  home_url()
322
  )
public/partials/complaint-form.php CHANGED
@@ -1,11 +1,11 @@
1
- <form class="gdpr-add-to-complaint-requests" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
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="user@domain.com" required>
7
  <?php endif ?>
8
- <textarea name="data" rows="5" required></textarea>
9
 
10
  <?php GDPR_Public::add_recaptcha(); ?>
11
  <?php $submit_button_text = apply_filters( "gdpr_complaint_request_form_submit_text", esc_attr__( 'Submit', 'gdpr' ) ); ?>
1
+ <form class="gdpr-request-form gdpr-add-to-complaint-requests" method="post">
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="user@domain.com" required>
7
  <?php endif ?>
8
+ <textarea name="data" rows="5" required placeholder="<?php echo esc_attr( 'Type your complaint here', 'gdpr' ); ?>"></textarea>
9
 
10
  <?php GDPR_Public::add_recaptcha(); ?>
11
  <?php $submit_button_text = apply_filters( "gdpr_complaint_request_form_submit_text", esc_attr__( 'Submit', 'gdpr' ) ); ?>
public/partials/confirmation-screens.php CHANGED
@@ -11,7 +11,7 @@
11
  */
12
  ?>
13
 
14
- <div class="gdpr gdpr-general-confirmation gdpr-delete-confirmation">
15
  <div class="gdpr-wrapper">
16
  <header>
17
  <div class="gdpr-box-title">
@@ -27,11 +27,13 @@
27
  <button class="gdpr-cancel"><?php esc_html_e( 'Cancel', 'gdpr' ); ?></button>
28
  </footer>
29
  </div>
30
- </div>
31
 
32
- <?php if ( isset( $_GET['notify'] ) && $_GET['notify'] ) : ?>
 
 
 
33
  <?php
34
- $title = __( 'Error!', 'gdpr' );
35
  if ( isset( $_GET['user-deleted'] ) ) {
36
  $title = __( 'Your account', 'gdpr' );
37
  if ( $_GET['user-deleted'] ) {
@@ -40,41 +42,41 @@
40
  $text = __( 'Your request has been received and is being reviewed. You will receive an email when we are done.', 'gdpr' );
41
  }
42
  }
43
- if ( isset( $_GET['email-sent'] ) && $_GET['email-sent'] ) {
44
- $title = __( 'Email confirmation', 'gdpr' );
45
- $text = __( 'We\'ve sent you a confirmation email.', 'gdpr' );
46
- }
47
- if ( isset( $_GET['user-not-found'] ) && $_GET['user-not-found'] ) {
48
- $text = __( 'User not found.', 'gdpr' );
49
- }
50
- if ( isset( $_GET['cannot-delete'] ) && $_GET['cannot-delete'] ) {
51
- $text = __( 'We can\'t delete this user.', 'gdpr' );
52
- }
53
- if ( isset( $_GET['required-information-missing'] ) && $_GET['required-information-missing'] ) {
54
- $text = __( 'Required information is missing from the form.', 'gdpr' );
55
- }
56
  if ( isset( $_GET['request-confirmed'] ) && $_GET['request-confirmed'] ) {
57
  $title = __( 'Request Received', 'gdpr' );
58
  $text = __( 'Your request has been received. We will be in touch soon.', 'gdpr' );
59
  }
60
- if ( isset( $_GET['error'] ) && $_GET['error'] ) {
61
- $text = __( 'There was a problem with your request. Please try again later.', 'gdpr' );
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  }
63
  ?>
64
- <div class="gdpr gdpr-general-confirmation gdpr-accept-confirmation">
65
- <div class="gdpr-wrapper">
66
- <header>
67
- <div class="gdpr-box-title">
68
- <h3><?php echo esc_attr( $title ); ?></h3>
69
- <span class="gdpr-close"></span>
70
- </div>
71
- </header>
72
- <div class="gdpr-content">
73
- <p><?php echo esc_html( $text ); ?></p>
74
  </div>
75
- <footer>
76
- <button class="gdpr-ok">OK</button>
77
- </footer>
78
  </div>
 
 
 
79
  </div>
80
- <?php endif ?>
11
  */
12
  ?>
13
 
14
+ <!-- <div class="gdpr gdpr-general-confirmation gdpr-delete-confirmation">
15
  <div class="gdpr-wrapper">
16
  <header>
17
  <div class="gdpr-box-title">
27
  <button class="gdpr-cancel"><?php esc_html_e( 'Cancel', 'gdpr' ); ?></button>
28
  </footer>
29
  </div>
30
+ </div> -->
31
 
32
+ <?php
33
+ $title = '';
34
+ $text = '';
35
+ if ( isset( $_GET['notify'] ) && $_GET['notify'] ) : ?>
36
  <?php
 
37
  if ( isset( $_GET['user-deleted'] ) ) {
38
  $title = __( 'Your account', 'gdpr' );
39
  if ( $_GET['user-deleted'] ) {
42
  $text = __( 'Your request has been received and is being reviewed. You will receive an email when we are done.', 'gdpr' );
43
  }
44
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  if ( isset( $_GET['request-confirmed'] ) && $_GET['request-confirmed'] ) {
46
  $title = __( 'Request Received', 'gdpr' );
47
  $text = __( 'Your request has been received. We will be in touch soon.', 'gdpr' );
48
  }
49
+ if ( isset( $_GET['malformed-confirmation-link'] ) && $_GET['malformed-confirmation-link'] ) {
50
+ $title = __( 'Error!', 'gdpr' );
51
+ $text = __( 'Malformed request confirmation link!', 'gdpr' );
52
+ }
53
+ if ( isset( $_GET['user-not-found'] ) && $_GET['user-not-found'] ) {
54
+ $title = __( 'Error!', 'gdpr' );
55
+ $text = __( 'User not found.', 'gdpr' );
56
+ }
57
+ if ( isset( $_GET['request-key-not-found'] ) && $_GET['request-key-not-found'] ) {
58
+ $title = __( 'Error!', 'gdpr' );
59
+ $text = __( 'We could not confirm the request key. It may be expired.', 'gdpr' );
60
+ }
61
+ if ( isset( $_GET['request-key-not-match'] ) && $_GET['request-key-not-match'] ) {
62
+ $title = __( 'Error!', 'gdpr' );
63
+ $text = __( 'The key used does not match the request key we have stored.', 'gdpr' );
64
  }
65
  ?>
66
+ <?php endif ?>
67
+ <div class="gdpr gdpr-general-confirmation">
68
+ <div class="gdpr-wrapper">
69
+ <header>
70
+ <div class="gdpr-box-title">
71
+ <h3><?php echo esc_attr( $title ); ?></h3>
72
+ <span class="gdpr-close"></span>
 
 
 
73
  </div>
74
+ </header>
75
+ <div class="gdpr-content">
76
+ <p><?php echo esc_html( $text ); ?></p>
77
  </div>
78
+ <footer>
79
+ <button class="gdpr-ok"><?php esc_html_e( 'OK', 'gdpr' ) ?></button>
80
+ </footer>
81
  </div>
82
+ </div>
public/partials/delete-form.php CHANGED
@@ -11,7 +11,7 @@
11
  */
12
  ?>
13
 
14
- <form class="gdpr-add-to-deletion-requests" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
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">
11
  */
12
  ?>
13
 
14
+ <form class="gdpr-request-form gdpr-add-to-deletion-requests" method="post">
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">
public/partials/export-data-form.php CHANGED
@@ -1,4 +1,4 @@
1
- <form class="gdpr-export-data-form" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
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">
1
+ <form class="gdpr-request-form gdpr-export-data-form" method="post">
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">
public/partials/privacy-bar.php CHANGED
@@ -15,13 +15,29 @@
15
  <div class="gdpr gdpr-privacy-bar" style="display:none;">
16
  <div class="gdpr-wrapper">
17
  <div class="gdpr-content">
18
- <p>
19
- <?php echo nl2br( wp_kses_post( $content ) ); ?>
20
- </p>
21
  </div>
22
  <div class="gdpr-right">
23
- <button class="gdpr-preferences" type="button"><?php esc_html_e( 'Privacy Preferences', 'gdpr' ); ?></button>
24
- <button class="gdpr-agreement" type="button"><?php echo esc_html( $button_text ); ?></button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  </div>
26
  </div>
27
  </div>
15
  <div class="gdpr gdpr-privacy-bar" style="display:none;">
16
  <div class="gdpr-wrapper">
17
  <div class="gdpr-content">
18
+ <p><?php echo nl2br( wp_kses_post( $content ) ); ?></p>
 
 
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;
26
+ if ( empty( $cookie_cat['cookies_used'] ) ) {
27
+ continue;
28
+ }
29
+ ?>
30
+ <li class="gdpr-cookie-categories-item">
31
+ <input type="checkbox" id="gdpr-cookie-category-<?php echo esc_attr( $cookie_cat_id ); ?>" class="gdpr-cookie-category" data-category="<?php echo esc_attr( $cookie_cat_id ); ?>" name="allowed_cookie_categories" value="<?php echo esc_attr( $cookie_cat['name'] ); ?>" <?php checked( $enabled, true ); ?> <?php echo ( 'required' === $cookie_cat['status'] ) ? 'disabled' : ''; ?>>
32
+ <label for="gdpr-cookie-category-<?php echo esc_attr( $cookie_cat_id ); ?>"><?php echo esc_html( $cookie_cat['name'] ); ?></label>
33
+ </li>
34
+ <?php endforeach ?>
35
+ <?php endif ?>
36
+ </ul>
37
+ <div class="gdpr-buttons">
38
+ <button class="gdpr-preferences" type="button"><?php esc_html_e( 'Privacy Preferences', 'gdpr' ); ?></button>
39
+ <button class="gdpr-agreement" type="button"><?php echo esc_html( $button_text ); ?></button>
40
+ </div>
41
  </div>
42
  </div>
43
  </div>
public/partials/privacy-preferences-modal.php CHANGED
@@ -14,9 +14,9 @@
14
 
15
  <div class="gdpr gdpr-privacy-preferences">
16
  <div class="gdpr-wrapper">
17
- <form method="post" class="gdpr-privacy-preferences-frm" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>">
18
  <input type="hidden" name="action" value="gdpr_update_privacy_preferences">
19
- <?php wp_nonce_field( 'gdpr-update_privacy_preferences', 'update-privacy-preferences-nonce' ); ?>
20
  <header>
21
  <div class="gdpr-box-title">
22
  <h3><?php esc_html_e( 'Privacy Preference Center', 'gdpr' ); ?></h3>
@@ -27,21 +27,36 @@
27
  <button type="button"><?php esc_html_e( 'Options', 'gdpr' ); ?></button>
28
  </div>
29
  <div class="gdpr-content">
30
- <ul class="gdpr-tabs">
31
- <li><button type="button" class="gdpr-tab-button gdpr-active" data-target="gdpr-consent-management"><?php esc_html_e( 'Consent Management', 'gdpr' ); ?></button></li>
32
- <?php reset( $tabs ); ?>
33
- <?php if ( ! empty( $tabs ) ): ?>
34
- <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>
35
- <ul class="gdpr-subtabs">
36
- <?php
37
- foreach ( $tabs as $key => $tab ) {
38
- echo '<li><button type="button" data-target="' . esc_attr( $key ) . '" ' . '>' . esc_html( $tab['name'] ) . '</button></li>';
39
- }
40
- ?>
41
- </ul>
42
- </li>
43
- <?php endif ?>
44
- </ul>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  <div class="gdpr-tab-content">
46
  <div class="gdpr-consent-management gdpr-active">
47
  <header>
@@ -49,25 +64,27 @@
49
  </header>
50
  <div class="gdpr-info">
51
  <p><?php echo nl2br( esc_html( $cookie_privacy_excerpt ) ); ?></p>
52
- <?php foreach ( $consent_types as $consent_key => $type ) : ?>
53
- <div class="gdpr-cookies-used">
54
- <div class="gdpr-cookie-title">
55
- <p><?php echo esc_html( $type['name'] ); ?></p>
56
- <?php if ( $type['required'] ) : ?>
57
- <span class="gdpr-always-active"><?php esc_html_e( 'Required', 'gdpr' ); ?></span>
58
- <input type="hidden" name="user_consents[]" value="<?php echo esc_attr( $consent_key ); ?>" checked style="display:none;">
59
- <?php else : ?>
60
- <label class="gdpr-switch">
61
- <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 ) : ''; ?>>
62
- <span class="gdpr-slider round"></span>
63
- </label>
64
- <?php endif; ?>
65
- </div>
66
- <div class="gdpr-cookies">
67
- <span><?php echo wp_kses( $type['description'], $this->allowed_html ); ?></span>
 
 
68
  </div>
69
- </div>
70
- <?php endforeach; ?>
71
  </div>
72
  </div>
73
  <?php $all_cookies = array(); ?>
@@ -84,7 +101,7 @@
84
  <p><?php esc_html_e( 'Cookies Used', 'gdpr' ); ?></p>
85
  <?php
86
  $site_cookies = array();
87
- $enabled = false;
88
  $cookies_used = explode( ',', $tab['cookies_used'] );
89
  $approved_cookies = isset( $_COOKIE['gdpr']['allowed_cookies'] ) ? json_decode( wp_unslash( $_COOKIE['gdpr']['allowed_cookies'] ) ) : array();
90
  foreach ( $cookies_used as $cookie ) {
@@ -97,12 +114,12 @@
97
  }
98
  }
99
  ?>
100
- <?php if ( $tab['always_active'] ) : ?>
101
- <span class="gdpr-always-active"><?php esc_html_e( 'Always Active', 'gdpr' ); ?></span>
102
- <input type="hidden" name="approved_cookies[]" value="<?php echo esc_attr( json_encode( $site_cookies ) ) ?>" checked>
103
  <?php else: ?>
104
  <label class="gdpr-switch">
105
- <input type="checkbox" name="approved_cookies[]" value="<?php echo esc_attr( json_encode( $site_cookies ) ) ?>" <?php checked( $enabled, true ); ?>>
106
  <span class="gdpr-slider round"></span>
107
  </label>
108
  <?php endif; ?>
@@ -133,9 +150,6 @@
133
  </div>
134
  <footer>
135
  <input type="submit" value="<?php esc_attr_e( 'Save Preferences', 'gdpr' ); ?>">
136
- <?php if ( $privacy_policy_page ) : ?>
137
- <span><a href="<?php echo esc_url( get_permalink( $privacy_policy_page ) ); ?>" target="_blank"><?php esc_html_e( 'More Information', 'gdpr' ); ?></a></span>
138
- <?php endif ?>
139
  </footer>
140
  </form>
141
  </div>
14
 
15
  <div class="gdpr gdpr-privacy-preferences">
16
  <div class="gdpr-wrapper">
17
+ <form method="post" class="gdpr-privacy-preferences-frm">
18
  <input type="hidden" name="action" value="gdpr_update_privacy_preferences">
19
+ <?php wp_nonce_field( 'gdpr-update-privacy-preferences', 'update-privacy-preferences-nonce' ); ?>
20
  <header>
21
  <div class="gdpr-box-title">
22
  <h3><?php esc_html_e( 'Privacy Preference Center', 'gdpr' ); ?></h3>
27
  <button type="button"><?php esc_html_e( 'Options', 'gdpr' ); ?></button>
28
  </div>
29
  <div class="gdpr-content">
30
+ <div class="gdpr-tabs">
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
38
+ foreach ( $tabs as $key => $tab ) {
39
+ if ( empty( $tab['cookies_used'] ) ) {
40
+ continue;
41
+ }
42
+ echo '<li><button type="button" data-target="' . esc_attr( $key ) . '" ' . '>' . esc_html( $tab['name'] ) . '</button></li>';
43
+ }
44
+ ?>
45
+ </ul>
46
+ </li>
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 if ( ! $type['policy-page'] ) {
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; ?>
58
+ </ul>
59
+ </div>
60
  <div class="gdpr-tab-content">
61
  <div class="gdpr-consent-management gdpr-active">
62
  <header>
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">
71
+ <p><?php echo esc_html( $type['name'] ); ?></p>
72
+ <?php if ( $type['policy-page'] ) : ?>
73
+ <span class="gdpr-always-active"><?php esc_html_e( 'Required', 'gdpr' ); ?></span>
74
+ <input type="hidden" name="user_consents[]" value="<?php echo esc_attr( $consent_key ); ?>" checked style="display:none;">
75
+ <?php else : ?>
76
+ <label class="gdpr-switch">
77
+ <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 ) : 'checked'; ?>>
78
+ <span class="gdpr-slider round"></span>
79
+ </label>
80
+ <?php endif; ?>
81
+ </div>
82
+ <div class="gdpr-cookies">
83
+ <span><?php echo wp_kses( $type['description'], $this->allowed_html ); ?></span>
84
+ </div>
85
  </div>
86
+ <?php endforeach; ?>
87
+ <?php endif ?>
88
  </div>
89
  </div>
90
  <?php $all_cookies = array(); ?>
101
  <p><?php esc_html_e( 'Cookies Used', 'gdpr' ); ?></p>
102
  <?php
103
  $site_cookies = array();
104
+ $enabled = ( 'off' === $tab['status'] ) ? false : true;
105
  $cookies_used = explode( ',', $tab['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 ) {
114
  }
115
  }
116
  ?>
117
+ <?php if ( 'required' === $tab['status'] ) : ?>
118
+ <span class="gdpr-always-active"><?php esc_html_e( 'Required', 'gdpr' ); ?></span>
119
+ <input type="hidden" name="approved_cookies[]" value="<?php echo esc_attr( json_encode( $site_cookies ) ) ?>">
120
  <?php else: ?>
121
  <label class="gdpr-switch">
122
+ <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 ); ?>>
123
  <span class="gdpr-slider round"></span>
124
  </label>
125
  <?php endif; ?>
150
  </div>
151
  <footer>
152
  <input type="submit" value="<?php esc_attr_e( 'Save Preferences', 'gdpr' ); ?>">
 
 
 
153
  </footer>
154
  </form>
155
  </div>
public/partials/reconsent-bar.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * This file is used to markup the reconsent bar.
5
+ *
6
+ *
7
+ * @link https://trewknowledge.com
8
+ * @since 2.0.0
9
+ *
10
+ * @package GDPR
11
+ * @subpackage public/partials
12
+ */
13
+ ?>
14
+
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">
22
+ <?php foreach ( $updated_consents as $consent_id => $consent ) : ?>
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>
30
+ <div class="gdpr-buttons">
31
+ <button class="gdpr-agreement" type="button" data-nonce="<?php echo esc_attr( wp_create_nonce( 'gdpr-agree-with-new-policies' ) ); ?>"><?php esc_html_e( 'I Agree', 'gdpr' ); ?></button>
32
+ </div>
33
+ </div>
34
+ </div>
public/partials/reconsent-modal.php DELETED
@@ -1,34 +0,0 @@
1
- <div class="gdpr-reconsent-modal" style="display:none;">
2
- <div class="gdpr-reconsent-modal-content">
3
- <h3><?php esc_html_e( 'Our Privacy Policy has been updated.', 'gdpr' ); ?></h3>
4
- <h4><?php esc_html_e( 'To continue using the site you need to read the revised version and agree to the terms.', 'gdpr' ); ?></h4>
5
- <div class="gdpr-privacy-viewer">
6
- <?php echo apply_filters( 'the_content', $page_obj->post_content ); ?>
7
- </div>
8
- <div class="gdpr-consent-buttons">
9
- <a href="#" class="gdpr-agree" data-nonce="<?php echo esc_attr( wp_create_nonce( 'gdpr-user_agree_with_terms' ) ); ?>"><?php esc_html_e( 'Agree', 'gdpr' ); ?></a>
10
- <a href="#" class="gdpr-disagree"><?php esc_html_e( 'Disagree', 'gdpr' ); ?></a>
11
- </div>
12
- <div class="gdpr-consent-loading">
13
- <p class="gdpr-loading"><span class="gdpr-updating"><?php esc_html_e( 'Updating', 'gdpr' ); ?></span><span class="gdpr-ellipsis"></span></p>
14
- </div>
15
- </div>
16
- </div>
17
-
18
- <div class="gdpr gdpr-general-confirmation gdpr-disagree-confirmation">
19
- <div class="gdpr-wrapper">
20
- <header>
21
- <div class="gdpr-box-title">
22
- <h3><?php esc_attr_e( 'Are you sure?', 'gdpr' ); ?></h3>
23
- <span class="gdpr-close"></span>
24
- </div>
25
- </header>
26
- <div class="gdpr-content">
27
- <p><?php esc_html_e( 'By disagreeing you will no longer have access to our site and will be logged out.', 'gdpr' ); ?></p>
28
- </div>
29
- <footer>
30
- <button class="gdpr-disagree-confirm" data-nonce="<?php echo esc_attr( wp_create_nonce( 'gdpr-user_disagree_with_terms' ) ); ?>"><?php esc_html_e( 'Continue', 'gdpr' ); ?></button>
31
- <button class="gdpr-cancel"><?php esc_html_e( 'Cancel', 'gdpr' ); ?></button>
32
- </footer>
33
- </div>
34
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
public/partials/rectify-form.php CHANGED
@@ -1,11 +1,11 @@
1
- <form class="gdpr-add-to-rectify-requests" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
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="user@domain.com" required>
7
  <?php endif ?>
8
- <textarea name="data" rows="5" required></textarea>
9
  <?php GDPR_Public::add_recaptcha(); ?>
10
  <?php $submit_button_text = apply_filters( "gdpr_rectify_request_form_submit_text", esc_attr__( 'Submit', 'gdpr' ) ); ?>
11
  <input type="submit" value="<?php echo esc_attr( $submit_button_text ); ?>">
1
+ <form class="gdpr-request-form gdpr-add-to-rectify-requests" method="post">
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="user@domain.com" required>
7
  <?php endif ?>
8
+ <textarea name="data" rows="5" required placeholder="<?php echo esc_attr( 'Type your rectification request here', 'gdpr' ); ?>"></textarea>
9
  <?php GDPR_Public::add_recaptcha(); ?>
10
  <?php $submit_button_text = apply_filters( "gdpr_rectify_request_form_submit_text", esc_attr__( 'Submit', 'gdpr' ) ); ?>
11
  <input type="submit" value="<?php echo esc_attr( $submit_button_text ); ?>">