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 / Controllers / Users / Listing.php

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

251 lines 9.0 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()
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(&$data)
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(&$data)
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(&$data)
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(&$data)
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'], $page, $usersPerPage);
178
179 $data['allUsers'] = $matchingUsers['elements'];
180 $data['userNumberPerStatus'] = $matchingUsers['status'];
181 }
182
183 protected function prepareUsersSubscriptions(&$data)
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(&$data)
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()
237 {
238 $listsSelected = json_decode(acym_getVar('string', 'acym__entity_select__selected', '{}'));
239 $userSelected = acym_getVar('array', 'elements_checked', []);
240
241 $userClass = new UserClass();
242 $userClass->onlyManageableUsers($userSelected);
243
244 foreach ($userSelected as $user) {
245 $userClass->subscribe($user, $listsSelected);
246 }
247
248 $this->listing();
249 }
250 }
251