PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.10.2
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.10.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 / Controllers / Users / Listing.php

Listing.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.10.2, at back/Controllers/Users/Listing.php

251 lines 9.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace AcyMailing\Controllers\Users;
4
5 use AcyMailing\Classes\FieldClass;
6 use AcyMailing\Classes\FollowupClass;
7 use AcyMailing\Classes\ListClass;
8 use AcyMailing\Classes\SegmentClass;
9 use AcyMailing\Classes\UserClass;
10 use AcyMailing\Helpers\EntitySelectHelper;
11 use AcyMailing\Helpers\PaginationHelper;
12 use AcyMailing\Helpers\ToolbarHelper;
13
14 trait Listing
15 {
16 public function listing(): void
17 {
18 acym_setVar('layout', 'listing');
19
20 $data = [];
21 $data['ordering'] = $this->getVarFiltersListing('string', 'users_ordering', 'id');
22 $data['orderingSortOrder'] = $this->getVarFiltersListing('string', 'users_ordering_sort_order', 'desc');
23 $data['pagination'] = new PaginationHelper();
24
25 $this->prepareSegmentField($data);
26 $this->prepareListingFilters($data);
27 $this->prepareUsersListing($data);
28 $this->prepareUsersSubscriptions($data);
29 $this->prepareUsersFields($data);
30 $this->prepareToolbar($data);
31
32 parent::display($data);
33 }
34
35 protected function prepareSegmentField(array &$data): void
36 {
37 $segmentClass = new SegmentClass();
38 $segments = $segmentClass->getAllForSelect();
39 $data['segments'] = [];
40 foreach ($segments as $id => $name) {
41 if (empty($id)) $id = 0;
42 $data['segments'][$id] = $name;
43 }
44 }
45
46 protected function prepareToolbar(array &$data): void
47 {
48 $toolbarHelper = new ToolbarHelper();
49 $toolbarHelper->addSearchBar($data['search'], 'users_search');
50 $toolbarHelper->addOptionSelect(
51 acym_translation('ACYM_SEGMENT'),
52 acym_select($data['segments'], 'segment', $data['segment'], ['class' => 'acym__select'])
53 );
54 $toolbarHelper->addOptionSelect(
55 acym_translation('ACYM_LIST'),
56 acym_select(
57 $data['lists'],
58 'users_list',
59 $data['list'],
60 ['class' => 'acym__select']
61 )
62 );
63 $toolbarHelper->addOptionSelect(
64 acym_translation('ACYM_SUBSCRIPTION_STATUS'),
65 acym_select($data['list_statuses'], 'list_status', $data['list_status'], ['class' => 'acym__select'])
66 );
67
68 $toolbarHelper->addButton(
69 'ACYM_ACYCHECKER_CLEAN_USERS',
70 [
71 'data-task' => 'clean',
72 'type' => 'submit',
73 ],
74 'user-check'
75 );
76
77 $exportButton = acym_translation('ACYM_EXPORT');
78 $exportButton .= '<span id="acym__users__listing__number_to_export" data-default="'.acym_strtolower(acym_translation('ACYM_ALL')).'">&nbsp;(';
79 $exportButton .= acym_strtolower(acym_translation('ACYM_ALL'));
80 $exportButton .= ')</span>';
81 $toolbarHelper->addButton(
82 $exportButton,
83 ['data-task' => 'export', 'type' => 'submit'],
84 'download'
85 );
86 $toolbarHelper->addButton(acym_translation('ACYM_IMPORT'), ['data-task' => 'import'], 'upload');
87 $entityHelper = new EntitySelectHelper();
88 $otherContent = acym_modal(
89 '<i class="acymicon-bell"></i>'.acym_translation('ACYM_SUBSCRIBE').' (<span id="acym__users__listing__number_to_add_to_list">0</span>)',
90 $entityHelper->entitySelect('list', ['join' => ''], $entityHelper->getColumnsForList(), [
91 'text' => acym_translation('ACYM_SUBSCRIBE_USERS_TO_THESE_LISTS'),
92 'action' => 'addToList',
93 ]),
94 null,
95 [],
96 [
97 'class' => 'button button-secondary disabled cell medium-6 large-shrink',
98 'id' => 'acym__users__listing__button--add-to-list',
99 ]
100 );
101 $toolbarHelper->addOtherContent($otherContent);
102 $toolbarHelper->addButton(acym_translation('ACYM_CREATE'), ['data-task' => 'edit'], 'user-plus', true);
103
104 $data['toolbar'] = $toolbarHelper;
105 }
106
107 protected function prepareListingFilters(array &$data): void
108 {
109 $data['status'] = $this->getVarFiltersListing('string', 'users_status', '');
110 $data['search'] = $this->getVarFiltersListing('string', 'users_search', '');
111 $data['list'] = $this->getVarFiltersListing('int', 'users_list', 0);
112 $data['list_status'] = $this->getVarFiltersListing('string', 'list_status', 'sub');
113 $data['segment'] = $this->getVarFiltersListing('int', 'segment', 0);
114
115 $followupClass = new FollowupClass();
116 $listClass = new ListClass();
117 $lists = $listClass->getAll('id');
118 uasort(
119 $lists,
120 function ($a, $b) {
121 return strtolower($a->name) > strtolower($b->name) ? 1 : -1;
122 }
123 );
124
125 $data['lists'] = [0 => acym_translation('ACYM_SELECT_A_LIST')];
126 foreach ($lists as $oneList) {
127 if ($oneList->type === ListClass::LIST_TYPE_FRONT) continue;
128 if ($oneList->type === ListClass::LIST_TYPE_FOLLOWUP) {
129 $followup = $followupClass->getOneByListId($oneList->id);
130 if (empty($followup)) continue;
131 $oneList->name = $followup->display_name;
132 }
133
134 $data['lists'][$oneList->id] = $oneList->name;
135 }
136
137 $data['list_statuses'] = [
138 'sub' => acym_translation('ACYM_SUBSCRIBED'),
139 'unsub' => acym_translation('ACYM_UNSUBSCRIBED'),
140 'none' => acym_translation('ACYM_NO_SUBSCRIPTION_STATUS'),
141 ];
142
143 $data['status_toolbar'] = [];
144 if (!empty($data['list'])) {
145 $data['status_toolbar'] = [
146 'users_list' => $data['list'],
147 'list_status' => $data['list_status'],
148 ];
149 }
150 if (!empty($data['segment'])) {
151 $data['status_toolbar'][] = $data['segment'];
152 }
153 }
154
155 protected function prepareUsersListing(array &$data): void
156 {
157 $usersPerPage = $data['pagination']->getListLimit();
158 $page = $this->getVarFiltersListing('int', 'users_pagination_page', 1);
159
160 $matchingUsers = $this->getMatchingElementsFromData(
161 [
162 'search' => $data['search'],
163 'elementsPerPage' => $usersPerPage,
164 'offset' => ($page - 1) * $usersPerPage,
165 'status' => $data['status'],
166 'ordering' => $data['ordering'],
167 'ordering_sort_order' => $data['orderingSortOrder'],
168 'list' => $data['list'],
169 'segment' => $data['segment'],
170 'list_status' => $data['list_status'],
171 'cms_username' => true,
172 ],
173 $data['status'],
174 $page
175 );
176
177 $data['pagination']->setStatus($matchingUsers['total']->total, $page, $usersPerPage);
178
179 $data['allUsers'] = $matchingUsers['elements'];
180 $data['userNumberPerStatus'] = $matchingUsers['status'];
181 }
182
183 protected function prepareUsersSubscriptions(array &$data): void
184 {
185 $usersId = [];
186 foreach ($data['allUsers'] as $oneUser) {
187 $usersId[] = $oneUser->id;
188 }
189
190 $subscriptions = [];
191
192 if (!empty($usersId)) {
193 $userClass = new UserClass();
194 $subscriptionsArray = $userClass->getUsersSubscriptionsByIds($usersId);
195
196 foreach ($subscriptionsArray as $oneSubscription) {
197 $subscriptions[$oneSubscription->user_id][$oneSubscription->id] = $oneSubscription;
198 }
199 }
200
201 $data['usersSubscriptions'] = $subscriptions;
202 }
203
204 protected function prepareUsersFields(array &$data): void
205 {
206 $data['fields'] = [];
207
208 if (empty($data['allUsers'])) return;
209
210 $fieldClass = new FieldClass();
211 $fieldsToDisplay = $fieldClass->getAllFieldsBackendListing();
212 if (empty($fieldsToDisplay['ids'])) return;
213
214 $userIds = [];
215 foreach ($data['allUsers'] as $user) {
216 $userIds[] = $user->id;
217 }
218
219 $fieldValue = $fieldClass->getAllFieldsListingByUserIds($userIds, $fieldsToDisplay['ids'], 'field.backend_listing = 1');
220 $languages = acym_getLanguages();
221 $languageFieldId = $fieldClass->getLanguageFieldId();
222 foreach ($data['allUsers'] as &$user) {
223 $user->fields = [];
224 foreach ($fieldsToDisplay['ids'] as $fieldId) {
225 if ($fieldId == $languageFieldId) {
226 $user->fields[$fieldId] = empty($languages[$user->language]) ? $user->language : $languages[$user->language]->name;
227 } else {
228 $user->fields[$fieldId] = !isset($fieldValue[$fieldId.'-'.$user->id]) ? '' : $fieldValue[$fieldId.'-'.$user->id];
229 }
230 }
231 }
232
233 $data['fields'] = $fieldsToDisplay['names'];
234 }
235
236 public function addToList(): void
237 {
238 $listsSelected = json_decode(acym_getVar('string', 'acym__entity_select__selected', '[]'), true);
239 if (empty($listsSelected)) {
240 $listsSelected = [];
241 }
242 $selectedUserIds = acym_getVar('array', 'elements_checked', []);
243
244 $userClass = new UserClass();
245 $userClass->onlyManageableUsers($selectedUserIds);
246 $userClass->subscribe($selectedUserIds, $listsSelected);
247
248 $this->listing();
249 }
250 }
251