PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.2.2
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.2.2
11.1.1 11.1.0 11.0.5 11.0.4 11.0.3 11.0.2 11.0.1 11.0.0 10.11.1 10.11.0 10.10.2 10.10.1 10.10.0 10.9.1 trunk 10.0.0 10.0.1 10.1.0 10.1.1 10.1.2 10.1.3 10.1.4 10.2.0 10.2.1 10.2.2 All 62 releases
acymailing / back / Helpers / UserHelper.php

UserHelper.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.2.2, at back/Helpers/UserHelper.php

206 lines 7.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace AcyMailing\Helpers;
4
5 use AcyMailing\Classes\MailClass;
6 use AcyMailing\Classes\UserClass;
7 use AcyMailing\Core\AcymObject;
8
9 class UserHelper extends AcymObject
10 {
11 public function exportdata(int $id): void
12 {
13 if (empty($id)) {
14 die(acym_translation('ACYM_USER_NOT_FOUND'));
15 }
16
17 $userClass = new UserClass();
18 $user = $userClass->getOneByIdWithCustomFields($id);
19 if (empty($user)) {
20 die(acym_translation('ACYM_USER_NOT_FOUND'));
21 }
22
23 acym_enqueueMessage(acym_translation('ACYM_ERROR'), 'error');
24
25 $dateFields = ['creation_date', 'userstats_open_date', 'userstats_send_date', 'urlclick_date_click'];
26 $excludedFields = ['id', 'cms_id', 'key', 'source'];
27
28 $exportFiles = [];
29
30 $xml = new \SimpleXMLElement('<xml/>');
31 $userNode = $xml->addChild('user');
32
33 $fields = acym_loadObjectList('SELECT name, field.option as options, type, value FROM #__acym_field as field', 'name');
34 $uploadFolder = trim(acym_cleanPath(html_entity_decode(acym_getFilesFolder(true))), DS.' ').DS;
35
36
37 foreach ($user as $column => $value) {
38 if (in_array($column, $excludedFields) || is_null($value) || strlen($value) === 0) {
39 continue;
40 }
41
42 if (in_array($column, $dateFields)) {
43 if (empty($value)) {
44 continue;
45 }
46 $value = acym_getDate($value, '%Y-%m-%d %H:%M:%S');
47 }
48
49 if (empty($fields[$column])) {
50 $userNode->addChild($column, acym_escape($value));
51 continue;
52 }
53
54 if ($fields[$column]->type == 'date') {
55 $valueTmp = is_array(json_decode($value)) ? json_decode($value) : $value;
56 $value = is_array($valueTmp) ? implode('/', $valueTmp) : $valueTmp;
57 }
58
59 if (in_array($fields[$column]->type, ["multiple_dropdown", "single_dropdown", "radio", "checkbox"])) {
60 $selectedValues = [];
61 if (!empty($fields[$column]->value)) {
62 $options = json_decode($fields[$column]->value);
63 }
64 $valueTmp = is_array(json_decode($value)) || is_object(json_decode($value)) ? json_decode($value) : $value;
65 if (!is_array($valueTmp) && !is_string($valueTmp)) {
66 foreach ($valueTmp as $key => $one) {
67 $selectedValues[] = $key;
68 }
69 } else {
70 foreach ($options as $key => $optionVal) {
71 if (is_string($valueTmp) && $optionVal->value == $valueTmp) {
72 $selectedValues[] = !empty($optionVal->title) ? $optionVal->title : $optionVal->value;
73 } elseif (!is_string($valueTmp) && in_array($optionVal->value, $valueTmp)) {
74 $selectedValues[] = !empty($optionVal->title) ? $optionVal->title : $optionVal->value;
75 }
76 }
77 }
78
79 $value = implode(',', $selectedValues);
80 } elseif (in_array($fields[$column]->type, ['gravatar', 'file'])) {
81 $data = acym_fileGetContent(ACYM_ROOT.$uploadFolder.'userfiles'.DS.$value);
82 $value = str_replace('_', ' ', substr($value, strpos($value, '_')));
83 $exportFiles[] = [
84 'name' => $value,
85 'data' => $data,
86 ];
87 continue;
88 }
89
90 $userNode->addChild($column, acym_escape($value));
91 }
92
93 $subscription = acym_loadObjectList(
94 'SELECT list.name, list.id, user_list.subscription_date, user_list.unsubscribe_date, user_list.status FROM #__acym_user_has_list AS user_list JOIN #__acym_list AS list ON list.id = user_list.list_id WHERE user_list.user_id = '.intval(
95 $id
96 )
97 );
98 if (!empty($subscription)) {
99 $dateFields = ['subscription_date', 'unsubscribe_date'];
100 $subscriptionNode = $xml->addChild('subscription');
101
102 foreach ($subscription as $oneSubscription) {
103 $list = $subscriptionNode->addChild('list');
104
105 $oneSubscription = get_object_vars($oneSubscription);
106 foreach ($oneSubscription as $column => $value) {
107 if (is_null($value) || strlen($value) === 0) {
108 continue;
109 }
110 if (in_array($column, $dateFields)) {
111 if (empty($value)) {
112 continue;
113 }
114 $value = acym_getDate($value, '%Y-%m-%d %H:%M:%S');
115 }
116 if ($column == 'status') {
117 $value = str_replace(['-1', '1', '2'], ['Unsubscribed', 'Subscribed', 'Waiting for confirmation'], $value);
118 }
119 $list->addChild($column, acym_escape($value));
120 }
121 }
122 }
123
124 $mailClass = new MailClass();
125 $statistics = $mailClass->decode(
126 acym_loadObjectList(
127 'SELECT mail.subject, user_stats.* FROM #__acym_user_stat AS user_stats JOIN #__acym_mail AS mail ON mail.id = user_stats.mail_id WHERE user_stats.user_id = '.intval(
128 $id
129 )
130 )
131 );
132 if (!empty($statistics)) {
133 $dateFields = ['send_date', 'open_date'];
134 $excludedFields = ['user_id'];
135 $statisticsNode = $xml->addChild('statistics');
136
137 foreach ($statistics as $oneStat) {
138 $detailedStat = $statisticsNode->addChild('email');
139
140 $oneStat = get_object_vars($oneStat);
141 foreach ($oneStat as $column => $value) {
142 if (in_array($column, $excludedFields) || is_null($value) || strlen($value) === 0) {
143 continue;
144 }
145
146 if (in_array($column, $dateFields)) {
147 if (empty($value)) {
148 continue;
149 }
150 $value = acym_getDate($value, '%Y-%m-%d %H:%M:%S');
151 }
152
153 $detailedStat->addChild($column, acym_escape($value));
154 }
155 }
156 }
157
158 $clickStats = acym_loadObjectList(
159 'SELECT url.url, url_click.date_click
160 FROM #__acym_url_click AS url_click
161 JOIN #__acym_url AS url ON url.id = url_click.url_id
162 WHERE url_click.user_id = '.intval($id)
163 );
164 if (!empty($clickStats)) {
165 $dateFields = ['date_click'];
166 $clickStatsNode = $xml->addChild('click_statistics');
167
168 foreach ($clickStats as $oneClick) {
169 $click = $clickStatsNode->addChild('click');
170
171 $oneClick = get_object_vars($oneClick);
172 foreach ($oneClick as $column => $value) {
173 if (is_null($value) || strlen($value) === 0) {
174 continue;
175 }
176
177 if (in_array($column, $dateFields)) {
178 if (empty($value)) {
179 continue;
180 }
181 $value = acym_getDate($value, '%Y-%m-%d %H:%M:%S');
182 }
183
184 $click->addChild($column, acym_escape($value));
185 }
186 }
187 }
188
189 $exportFiles[] = [
190 'name' => 'user_data.xml',
191 'data' => $xml->asXML(),
192 ];
193
194 $tempFolder = ACYM_MEDIA.'tmp'.DS;
195 acym_createArchive($tempFolder.'export_data_user_'.$id, $exportFiles);
196
197 $exportHelper = new ExportHelper();
198 $exportHelper->setDownloadHeaders('export_data_user_'.$id, 'zip');
199 readfile($tempFolder.'export_data_user_'.$id.'.zip');
200
201 ignore_user_abort(true);
202 unlink($tempFolder.'export_data_user_'.$id.'.zip');
203 exit;
204 }
205 }
206