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

223 lines 7.6 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\FieldClass;
6 use AcyMailing\Classes\MailClass;
7 use AcyMailing\Classes\UrlClickClass;
8 use AcyMailing\Classes\UserClass;
9 use AcyMailing\Classes\UserStatClass;
10 use AcyMailing\Core\AcymObject;
11
12 class UserHelper extends AcymObject
13 {
14 public function getUserData(object $user): array
15 {
16 $userData = [];
17 $this->prepareProfileData($user, $userData);
18 $this->prepareSubscriptionData($user, $userData);
19 $this->prepareStatisticsData($user, $userData);
20 $this->prepareClickStatisticsData($user, $userData);
21
22 return $userData;
23 }
24
25 private function prepareProfileData(object $user, array &$exportedData): void
26 {
27 $userClass = new UserClass();
28 $userClass->getAllUserFields($user);
29
30 $profileData = [];
31
32 $fieldsClass = new FieldClass();
33 $fields = $fieldsClass->getAll('namekey');
34
35 $uploadFolder = acym_rootURI().trim(acym_cleanPath(html_entity_decode(acym_getFilesFolder(true))), DS.' ').DS;
36 $coreFields = ['confirmation_date', 'confirmation_ip', 'language'];
37
38 foreach ($user as $column => $value) {
39 if (is_null($value) || strlen($value) === 0) {
40 continue;
41 }
42
43 if ($column === 'confirmation_date') {
44 if (empty($value)) {
45 continue;
46 }
47 $value = acym_getDate($value, '%Y-%m-%d %H:%M:%S');
48 }
49
50 if (empty($fields[$column]) || $fields[$column]->core == 1) {
51 if (in_array($column, $coreFields)) {
52 $profileData[] = [
53 'name' => ucfirst(str_replace('_', ' ', $column)),
54 'value' => $value,
55 ];
56 }
57 continue;
58 }
59
60 if ($fields[$column]->type === 'date') {
61 $decodedValue = @json_decode($value, true);
62 $valueTmp = is_array($decodedValue) ? $decodedValue : $value;
63
64 $value = is_array($valueTmp) ? implode('/', $valueTmp) : $valueTmp;
65 }
66
67 if (in_array($fields[$column]->type, ['gravatar', 'file'])) {
68 $userFilePath = $uploadFolder.'userfiles'.DS.$user->id.DS.$value;
69 if (file_exists(ACYM_ROOT.$userFilePath)) {
70 $value = $userFilePath;
71 } else {
72 $value = $uploadFolder.'userfiles'.DS.$value;
73 }
74 }
75
76 $profileData[] = [
77 'name' => $fields[$column]->name,
78 'value' => $value,
79 ];
80 }
81
82 $exportedData[] = [
83 'group_id' => 'acyprofile',
84 'group_label' => 'Newsletter profile',
85 'item_id' => 'user-'.$user->id,
86 'data' => $profileData,
87 ];
88 }
89
90 private function prepareSubscriptionData(object $user, array &$exportedData): void
91 {
92 $userClass = new UserClass();
93 $subscription = $userClass->getUserSubscriptionById($user->id);
94
95 if (empty($subscription)) {
96 return;
97 }
98
99 $subscriptionData = [];
100
101 foreach ($subscription as $oneSubscription) {
102 $listName = empty($oneSubscription->display_name) ? $oneSubscription->name : $oneSubscription->display_name;
103
104 $value = acym_translation('ACYM_SUBSCRIPTION_DATE').' '.acym_getDate($oneSubscription->subscription_date, '%Y-%m-%d %H:%M:%S');
105
106 if (!empty($oneSubscription->unsubscribe_date) && $oneSubscription->status == 0) {
107 $value .= ' / '.acym_translation('ACYM_UNSUBSCRIPTION_DATE').' '.acym_getDate($oneSubscription->unsubscribe_date, '%Y-%m-%d %H:%M:%S');
108 }
109
110 $subscriptionData[] = [
111 'name' => $listName,
112 'value' => $value,
113 ];
114 }
115
116 $exportedData[] = [
117 'group_id' => 'acysubscription',
118 'group_label' => acym_translation('ACYM_LISTS'),
119 'item_id' => 'subscription-'.$user->id,
120 'data' => $subscriptionData,
121 ];
122 }
123
124 private function prepareStatisticsData(object $user, array &$exportedData): void
125 {
126 $mailClass = new MailClass();
127 $userStatClass = new UserStatClass();
128 $statistics = $userStatClass->getAllUserStatByUserId($user->id);
129 if (empty($statistics)) {
130 return;
131 }
132 $statistics = $mailClass->decode($statistics);
133
134 foreach ($statistics as $oneStatistics) {
135 if (empty($oneStatistics->sent)) {
136 continue;
137 }
138
139 $statisticsData = [];
140 $statisticsData[] = [
141 'name' => acym_translation('ACYM_EMAIL_SUBJECT'),
142 'value' => strlen($oneStatistics->subject) > 50 ? substr($oneStatistics->subject, 0, 50).'...' : $oneStatistics->subject,
143 ];
144
145 $statisticsData[] = [
146 'name' => acym_translation('ACYM_SEND_DATE'),
147 'value' => acym_getDate($oneStatistics->send_date, 'Y-m-d H:i:s'),
148 ];
149
150 $statisticsData[] = [
151 'name' => acym_translation('ACYM_OPENED'),
152 'value' => acym_translation(empty($oneStatistics->open) ? 'ACYM_NO' : 'ACYM_YES'),
153 ];
154
155 if (!empty($oneStatistics->open_date)) {
156 $statisticsData[] = [
157 'name' => acym_translation('ACYM_OPEN_DATE'),
158 'value' => acym_getDate($oneStatistics->open_date, 'Y-m-d H:i:s'),
159 ];
160 }
161
162 if (!empty($oneStatistics->device)) {
163 $statisticsData[] = [
164 'name' => acym_translation('ACYM_DEVICE_COLUMN_STAT'),
165 'value' => $oneStatistics->device,
166 ];
167 }
168
169 if (!empty($oneStatistics->opened_with)) {
170 $statisticsData[] = [
171 'name' => acym_translation('ACYM_OPENED_WITH_COLUMN_STAT'),
172 'value' => $oneStatistics->opened_with,
173 ];
174 }
175
176 $exportedData[] = [
177 'group_id' => 'acystatistics',
178 'group_label' => acym_translation('ACYM_STATISTICS'),
179 'item_id' => 'statistics-'.$user->id.'-'.$oneStatistics->mail_id,
180 'data' => $statisticsData,
181 ];
182 }
183 }
184
185 private function prepareClickStatisticsData(object $user, array &$exportedData): void
186 {
187 $urlClickClass = new UrlClickClass();
188 $statistics = $urlClickClass->getClicksByUserId($user->id);
189 if (empty($statistics)) {
190 return;
191 }
192
193 foreach ($statistics as $oneStatistics) {
194 if (empty($oneStatistics->click)) {
195 continue;
196 }
197
198 $statisticsData = [];
199 $statisticsData[] = [
200 'name' => acym_translation('ACYM_URL'),
201 'value' => strlen($oneStatistics->url) > 200 ? substr($oneStatistics->url, 0, 197).'...' : $oneStatistics->url,
202 ];
203
204 $statisticsData[] = [
205 'name' => acym_translation('ACYM_CLICK_DATE'),
206 'value' => acym_getDate($oneStatistics->date_click, 'Y-m-d H:i:s'),
207 ];
208
209 $statisticsData[] = [
210 'name' => acym_translation('ACYM_TOTAL_CLICKS'),
211 'value' => $oneStatistics->click,
212 ];
213
214 $exportedData[] = [
215 'group_id' => 'acyclickstatistics',
216 'group_label' => acym_translation('ACYM_USER_CLICK_DETAILS'),
217 'item_id' => 'clickstatistics-'.$user->id.'-'.$oneStatistics->url_id,
218 'data' => $statisticsData,
219 ];
220 }
221 }
222 }
223