PluginProbe
The GDPR Framework By Data443 / 2.1.0
The GDPR Framework By Data443 v2.1.0
2.5.0 2.4.0 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.3 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.39 1.0.4 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 All 41 releases
gdpr-framework / src / Components / WordpressUser / DataManager.php

DataManager.php in The GDPR Framework By Data443 2.1.0, at src/Components/WordpressUser/DataManager.php

176 lines 5.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Codelight\GDPR\Components\WordpressUser;
4
5 use Codelight\GDPR\DataSubject\DataSubject;
6
7 class DataManager
8 {
9 public function getData(DataSubject $dataSubject)
10 {
11 $user = $dataSubject->getUser();
12 if ($user) {
13 $meta = get_user_meta($user->ID);
14 $data['meta'] = $meta;
15 } else {
16 $data = [];
17 }
18
19 $whitelist = [
20 'nickname',
21 'first_name',
22 'last_name',
23 'description',
24 'locale',
25 'community-events-location',
26 ];
27
28 // Remove session keys. Just in case.
29 if (isset($meta) && isset($meta['session_tokens']) && count($meta['session_tokens'])) {
30 foreach ($meta['session_tokens'] as $token) {
31 foreach (unserialize($token) as $key => $tokenData) {
32 $data['meta']['session_tokens'][] = $tokenData;
33 }
34 }
35 }
36
37 /*
38 $blacklist = [
39 'use_ssl',
40 'show_admin_bar_front',
41 'wp_capabilities',
42 'wp_user_level',
43 'dismissed_wp_pointers',
44 'show_welcome_panel',
45 'wp_dashboard_quick_press_last_post_id',
46 'wp_user-settings',
47 'wp_user-settings-time',
48 'closedpostboxes_page',
49 'metaboxhidden_page',
50 'session_tokens',
51 'managenav-menuscolumnshidden',
52 'metaboxhidden_nav-menus',
53 'nav_menu_recently_edited',
54 'acf_user_settings',
55 ];
56
57 // Blacklist some data
58 if (isset($data['meta']) && count($data['meta'])) {
59 foreach ($data['meta'] as $key => $value) {
60 if (in_array($key, $blacklist)) {
61 unset($data['meta'][$key]);
62 }
63 }
64
65 $data['meta'] = array_diff_assoc($data['meta'], $blacklist);
66 }
67 */
68 global $wpdb;
69 $table_prefix = $wpdb->prefix;
70 if (isset($data['meta']) && count($data['meta'])) {
71 foreach ($data['meta'] as $key => $value) {
72 if ($this->startsWith($key, $table_prefix)) {
73 $newKey = $this->removePrefix($key, $table_prefix);
74 if (strlen($newKey) > 0) {
75 $data['meta'][$newKey] = $value;
76 unset($data['meta'][$key]);
77 }
78 }
79 }
80 }
81
82 return apply_filters('gdpr/wordpress-user/export/data', $data);
83 }
84
85 private function removePrefix($string, $prefix)
86 {
87 if (strpos($string, $prefix) === 0) {
88 $string = substr($string, strlen($prefix));
89 }
90 return $string;
91 }
92
93 private function startsWith($string, $prefix)
94 {
95 return substr($string, 0, strlen($prefix)) === $prefix;
96 }
97
98 public function deleteUser(DataSubject $dataSubject, $reassign = null)
99 {
100 global $gdpr;
101 require_once(ABSPATH . 'wp-admin/includes/user.php');
102
103 $reassignOption = $gdpr->Options->get('delete_action_reassign');
104 if ('reassign' === $reassignOption) {
105 $reassignUserId = $gdpr->Options->get('delete_action_reassign_user');
106 } else {
107 $reassignUserId = false;
108 }
109 if($dataSubject->getUserId()){
110 $dataSubject->gdpr_delete_log($dataSubject->getUserId());
111 wp_delete_user($dataSubject->getUserId(), $reassignUserId);
112 }
113 }
114
115 public function anonymizeUser(DataSubject $dataSubject, $anonymizedId)
116 {
117 if (!$dataSubject->hasUser()) {
118 return;
119 }
120
121 if (!$anonymizedId) {
122 gdpr('helpers')->error();
123 }
124
125 // Save a unique identifier to tie anonymized data together for analytics purposes
126 update_user_meta($dataSubject->getUserId(), "gdpr_anonymized_id", $anonymizedId);
127
128 // Change username
129 global $wpdb;
130
131 $anonymizedUsername = apply_filters('gdpr/wordpress-user/anonymize/username', '[anonymous]');
132 $wpdb->update(
133 $wpdb->users,
134 ['user_login' => $anonymizedUsername],
135 ['ID' => $dataSubject->getUserId()]
136 );
137
138 // Clear all relevant user fields, reset password
139 wp_update_user([
140 'ID' => $dataSubject->getUserId(),
141 'user_email' => '',
142 'user_nicename' => '',
143 'user_url' => '',
144 'user_activation_key' => '',
145 'display_name' => $anonymizedUsername,
146 // Set a random password, just in case the functionality that disallows users from logging in should break for any reason
147 'user_pass' => wp_hash_password(wp_generate_password()),
148 ]);
149
150 // Clear Logs
151 $dataSubject->gdpr_delete_log($dataSubject->getUserId());
152
153 // Clear all relevant usermeta fields
154 delete_user_meta($dataSubject->getUserId(), 'first_name');
155 delete_user_meta($dataSubject->getUserId(), 'last_name');
156 delete_user_meta($dataSubject->getUserId(), 'nickname');
157 delete_user_meta($dataSubject->getUserId(), 'description');
158 delete_user_meta($dataSubject->getUserId(), 'session_tokens');
159 delete_user_meta($dataSubject->getUserId(), 'community-events-location');
160
161 // Remove all capabilities
162 $user = $dataSubject->getUser();
163 $user->remove_all_caps();
164
165 // Finally, assign the 'anonymous' role to user
166 if (apply_filters('gdpr/wordpress-user/anonymize/change_role', true) && get_role('anonymous')) {
167
168 foreach ($user->roles as $role) {
169 $user->remove_role($role);
170 }
171
172 $user->add_role('anonymous');
173 }
174 }
175 }
176