PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.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
← All changes | back/Helpers/UserHelper.php +0 -205 10.2.2 → 11.1.1 View file →
@@ -1,205 +1,0 @@
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 -}