PluginProbe
HTML Forms – Simple WordPress Forms Plugin / 1.3.12
HTML Forms – Simple WordPress Forms Plugin v1.3.12
trunk 1.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.2.0 1.3.0 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 All 66 releases
html-forms / src / Admin / GDPR.php

GDPR.php in HTML Forms – Simple WordPress Forms Plugin 1.3.12, at src/Admin/GDPR.php

114 lines 3.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace HTML_Forms\Admin;
4
5 use HTML_Forms\Submission;
6
7 class GDPR {
8 public function hook() {
9 add_filter( 'wp_privacy_personal_data_exporters', array( $this, 'register_exporter' ), 90 );
10 add_filter( 'wp_privacy_personal_data_erasers', array( $this, 'register_eraser' ), 90 );
11 }
12
13 public function register_exporter( $exporters ) {
14 $exporters['html-forms'] = array(
15 'exporter_friendly_name' => 'HTML Forms',
16 'callback' => array( $this, 'export' ),
17 );
18 return $exporters;
19 }
20
21 public function register_eraser( $erasers ) {
22 $erasers['html-forms'] = array(
23 'eraser_friendly_name' => 'HTML Forms',
24 'callback' => array( $this, 'erase' ),
25 );
26 return $erasers;
27 }
28
29 public function export( $email_address, $page = 1 ) {
30 $submissions = $this->find_submissions_for_email_address( $email_address );
31 $data_to_export = array();
32
33 foreach( $submissions as $s ) {
34 $data_to_export[] = array(
35 'group_id' => 'html_forms_submissions',
36 'group_label' => __( 'Form submissions', 'html-forms' ),
37 'item_id' => sprintf( 'html-forms-submission-%d', $s->id ),
38 'data' => $this->export_submission( $s ),
39 );
40 }
41
42 return array(
43 'data' => $data_to_export,
44 'done' => true,
45 );
46 }
47
48 public function export_submission( Submission $submission ) {
49 $data = array(
50 array(
51 'name' => 'Submitted at',
52 'value' => $submission->submitted_at,
53 )
54 );
55
56 if( ! empty( $submission->ip_address ) ) {
57 $data[] = array(
58 'name' => 'IP address',
59 'value' => $submission->ip_address,
60 );
61 }
62
63 if( ! empty( $submission->user_agent ) ) {
64 $data[] = array(
65 'name' => 'User agent',
66 'value' => $submission->user_agent,
67 );
68 }
69
70 foreach( $submission->data as $field => $value ) {
71 $data[] = array(
72 'name' => $field,
73 'value' => is_array( $value ) ? join( ', ', $value ) : $value,
74 );
75 }
76
77 return $data;
78 }
79
80 public function erase( $email_address, $page = 1 ) {
81 global $wpdb;
82 $table = $wpdb->prefix .'hf_submissions';
83
84 $items_removed = false;
85 $submissions = $this->find_submissions_for_email_address( $email_address );
86 foreach( $submissions as $submission ) {
87 $wpdb->delete( $table, array( 'id' => $submission->id ) );
88 $items_removed = true;
89 }
90
91 return array(
92 'items_removed' => $items_removed,
93 'items_retained' => false,
94 'messages' => array(),
95 'done' => true,
96 );
97 }
98
99 private function find_submissions_for_email_address( $email_address ) {
100 global $wpdb;
101 $table = $wpdb->prefix .'hf_submissions';
102 $like = '%"' . $email_address . '"%';
103 $results = $wpdb->get_results( $wpdb->prepare( "SELECT s.* FROM {$table} s WHERE s.data LIKE %s ORDER BY s.submitted_at DESC", $like ), OBJECT_K );
104
105 $submissions = array();
106 foreach( $results as $key => $object ) {
107 $submission = Submission::from_object( $object );
108 $submissions[$key] = $submission;
109 }
110
111 return $submissions;
112 }
113 }
114