PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.0.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.0.1
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.0.1, at back/Helpers/UserHelper.php

197 lines 7.8 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($id)
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) || strlen($value) == 0) {
39 continue;
40 }
41 if (in_array($column, $dateFields)) {
42 if (empty($value)) {
43 continue;
44 }
45 $value = acym_getDate($value, '%Y-%m-%d %H:%M:%S');
46 }
47
48 if (empty($fields[$column])) {
49 $userNode->addChild($column, acym_escape($value));
50 continue;
51 }
52
53 if ($fields[$column]->type == 'date') {
54 $valueTmp = is_array(json_decode($value)) ? json_decode($value) : $value;
55 $value = is_array($valueTmp) ? implode('/', $valueTmp) : $valueTmp;
56 }
57
58 if (in_array($fields[$column]->type, ["multiple_dropdown", "single_dropdown", "radio", "checkbox"])) {
59 $selectedValues = [];
60 if (!empty($fields[$column]->value)) {
61 $options = json_decode($fields[$column]->value);
62 }
63 $valueTmp = is_array(json_decode($value)) || is_object(json_decode($value)) ? json_decode($value) : $value;
64 if (!is_array($valueTmp) && !is_string($valueTmp)) {
65 foreach ($valueTmp as $key => $one) {
66 $selectedValues[] = $key;
67 }
68 } else {
69 foreach ($options as $key => $optionVal) {
70 if (is_string($valueTmp) && $optionVal->value == $valueTmp) {
71 $selectedValues[] = !empty($optionVal->title) ? $optionVal->title : $optionVal->value;
72 } elseif (!is_string($valueTmp) && in_array($optionVal->value, $valueTmp)) {
73 $selectedValues[] = !empty($optionVal->title) ? $optionVal->title : $optionVal->value;
74 }
75 }
76 }
77
78 $value = implode(',', $selectedValues);
79 } elseif (in_array($fields[$column]->type, ['gravatar', 'file'])) {
80 $data = acym_fileGetContent(ACYM_ROOT.$uploadFolder.'userfiles'.DS.$value);
81 $value = str_replace('_', ' ', substr($value, strpos($value, '_')));
82 $exportFiles[] = ['name' => $value, 'data' => $data];
83 continue;
84 }
85
86 $userNode->addChild($column, acym_escape($value));
87 }
88
89 $subscription = acym_loadObjectList(
90 '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(
91 $id
92 )
93 );
94 if (!empty($subscription)) {
95 $dateFields = ['subscription_date', 'unsubscribe_date'];
96 $subscriptionNode = $xml->addChild('subscription');
97
98 foreach ($subscription as $oneSubscription) {
99 $list = $subscriptionNode->addChild('list');
100
101 $oneSubscription = get_object_vars($oneSubscription);
102 foreach ($oneSubscription as $column => $value) {
103 if (strlen($value) == 0) {
104 continue;
105 }
106 if (in_array($column, $dateFields)) {
107 if (empty($value)) {
108 continue;
109 }
110 $value = acym_getDate($value, '%Y-%m-%d %H:%M:%S');
111 }
112 if ($column == 'status') {
113 $value = str_replace(['-1', '1', '2'], ['Unsubscribed', 'Subscribed', 'Waiting for confirmation'], $value);
114 }
115 $list->addChild($column, acym_escape($value));
116 }
117 }
118 }
119
120 $mailClass = new MailClass();
121 $statistics = $mailClass->decode(
122 acym_loadObjectList(
123 '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(
124 $id
125 )
126 )
127 );
128 if (!empty($statistics)) {
129 $dateFields = ['send_date', 'open_date'];
130 $excludedFields = ['user_id'];
131 $statisticsNode = $xml->addChild('statistics');
132
133 foreach ($statistics as $oneStat) {
134 $detailedStat = $statisticsNode->addChild('email');
135
136 $oneStat = get_object_vars($oneStat);
137 foreach ($oneStat as $column => $value) {
138 if (in_array($column, $excludedFields) || strlen($value) == 0) {
139 continue;
140 }
141 if (in_array($column, $dateFields)) {
142 if (empty($value)) {
143 continue;
144 }
145 $value = acym_getDate($value, '%Y-%m-%d %H:%M:%S');
146 }
147
148 $detailedStat->addChild($column, acym_escape($value));
149 }
150 }
151 }
152
153 $clickStats = acym_loadObjectList(
154 'SELECT url.url, url_click.date_click
155 FROM #__acym_url_click AS url_click
156 JOIN #__acym_url AS url ON url.id = url_click.url_id
157 WHERE url_click.user_id = '.intval($id)
158 );
159 if (!empty($clickStats)) {
160 $dateFields = ['date_click'];
161 $clickStatsNode = $xml->addChild('click_statistics');
162
163 foreach ($clickStats as $oneClick) {
164 $click = $clickStatsNode->addChild('click');
165
166 $oneClick = get_object_vars($oneClick);
167 foreach ($oneClick as $column => $value) {
168 if (strlen($value) == 0) {
169 continue;
170 }
171 if (in_array($column, $dateFields)) {
172 if (empty($value)) {
173 continue;
174 }
175 $value = acym_getDate($value, '%Y-%m-%d %H:%M:%S');
176 }
177
178 $click->addChild($column, acym_escape($value));
179 }
180 }
181 }
182
183 $exportFiles[] = ['name' => 'user_data.xml', 'data' => $xml->asXML()];
184
185 $tempFolder = ACYM_MEDIA.'tmp'.DS;
186 acym_createArchive($tempFolder.'export_data_user_'.$id, $exportFiles);
187
188 $exportHelper = new ExportHelper();
189 $exportHelper->setDownloadHeaders('export_data_user_'.$id, 'zip');
190 readfile($tempFolder.'export_data_user_'.$id.'.zip');
191
192 ignore_user_abort(true);
193 unlink($tempFolder.'export_data_user_'.$id.'.zip');
194 exit;
195 }
196 }
197