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/Controllers/Users/Listing.php +0 -262 11.0.3 → 11.1.1 View file →
@@ -1,262 +1,0 @@
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('cmd', 'users_ordering', 'id');
22 - $data['orderingSortOrder'] = $this->getVarFiltersListing('cmd', '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 - $toolbarHelper->addModalButton(
89 - [
90 - 'button' => '<i class="acymicon-bell"></i>'.esc_html(
91 - acym_translation('ACYM_SUBSCRIBE')
92 - ).' (<span id="acym__users__listing__number_to_add_to_list">0</span>)',
93 - 'modalContent' => $entityHelper->entitySelect(
94 - [
95 - 'entity' => 'list',
96 - 'columnsToDisplay' => $entityHelper->getColumnsForList(),
97 - 'buttonSubmit' => [
98 - 'text' => acym_translation('ACYM_SUBSCRIBE_USERS_TO_THESE_LISTS'),
99 - 'action' => 'addToList',
100 - ],
101 - ]
102 - ),
103 - 'attributesButton' => [
104 - 'class' => 'button button-secondary disabled cell medium-6 large-shrink',
105 - 'id' => 'acym__users__listing__button--add-to-list',
106 - ],
107 - ]
108 - );
109 - $toolbarHelper->addButton(acym_translation('ACYM_CREATE'), ['data-task' => 'edit'], 'user-plus', true);
110 -
111 - $data['toolbar'] = $toolbarHelper;
112 - }
113 -
114 - protected function prepareListingFilters(array &$data): void
115 - {
116 - $data['status'] = $this->getVarFiltersListing('string', 'users_status', '');
117 - $data['search'] = $this->getVarFiltersListing('string', 'users_search', '');
118 - $data['list'] = $this->getVarFiltersListing('int', 'users_list', 0);
119 - $data['list_status'] = $this->getVarFiltersListing('string', 'list_status', 'sub');
120 - $data['segment'] = $this->getVarFiltersListing('int', 'segment', 0);
121 -
122 - $followupClass = new FollowupClass();
123 - $listClass = new ListClass();
124 - $lists = $listClass->getAll('id');
125 - uasort(
126 - $lists,
127 - function ($a, $b) {
128 - return strtolower($a->name) > strtolower($b->name) ? 1 : -1;
129 - }
130 - );
131 -
132 - // This keeps keys
133 - $data['lists'] = [0 => acym_translation('ACYM_SELECT_A_LIST')];
134 - foreach ($lists as $oneList) {
135 - if ($oneList->type === ListClass::LIST_TYPE_FRONT) continue;
136 - if ($oneList->type === ListClass::LIST_TYPE_FOLLOWUP) {
137 - $followup = $followupClass->getOneByListId($oneList->id);
138 - if (empty($followup)) continue;
139 - $oneList->name = $followup->display_name;
140 - }
141 -
142 - $data['lists'][$oneList->id] = $oneList->name;
143 - }
144 -
145 - $data['list_statuses'] = [
146 - 'sub' => acym_translation('ACYM_SUBSCRIBED'),
147 - 'unsub' => acym_translation('ACYM_UNSUBSCRIBED'),
148 - 'none' => acym_translation('ACYM_NO_SUBSCRIPTION_STATUS'),
149 - ];
150 -
151 - $data['status_toolbar'] = [];
152 - if (!empty($data['list'])) {
153 - $data['status_toolbar'] = [
154 - 'users_list' => $data['list'],
155 - 'list_status' => $data['list_status'],
156 - ];
157 - }
158 - if (!empty($data['segment'])) {
159 - $data['status_toolbar'][] = $data['segment'];
160 - }
161 - }
162 -
163 - protected function prepareUsersListing(array &$data): void
164 - {
165 - // Prepare the pagination
166 - $usersPerPage = $data['pagination']->getListLimit();
167 - $page = $this->getVarFiltersListing('int', 'users_pagination_page', 1);
168 -
169 - $matchingUsers = $this->getMatchingElementsFromData(
170 - [
171 - 'search' => $data['search'],
172 - 'elementsPerPage' => $usersPerPage,
173 - 'offset' => ($page - 1) * $usersPerPage,
174 - 'status' => $data['status'],
175 - 'ordering' => $data['ordering'],
176 - 'ordering_sort_order' => $data['orderingSortOrder'],
177 - 'list' => $data['list'],
178 - 'segment' => $data['segment'],
179 - 'list_status' => $data['list_status'],
180 - 'cms_username' => true,
181 - ],
182 - $data['status'],
183 - $page
184 - );
185 -
186 - // Prepare the pagination
187 - $data['pagination']->setStatus($matchingUsers['total']->total, $page, $usersPerPage);
188 -
189 - $data['allUsers'] = $matchingUsers['elements'];
190 - $data['userNumberPerStatus'] = $matchingUsers['status'];
191 - }
192 -
193 - protected function prepareUsersSubscriptions(array &$data): void
194 - {
195 - $usersId = [];
196 - foreach ($data['allUsers'] as $oneUser) {
197 - $usersId[] = $oneUser->id;
198 - }
199 -
200 - $subscriptions = [];
201 -
202 - if (!empty($usersId)) {
203 - $userClass = new UserClass();
204 - $subscriptionsArray = $userClass->getUsersSubscriptionsByIds($usersId);
205 -
206 - foreach ($subscriptionsArray as $oneSubscription) {
207 - $subscriptions[$oneSubscription->user_id][$oneSubscription->id] = $oneSubscription;
208 - }
209 - }
210 -
211 - $data['usersSubscriptions'] = $subscriptions;
212 - }
213 -
214 - protected function prepareUsersFields(array &$data): void
215 - {
216 - $data['fields'] = [];
217 -
218 - if (empty($data['allUsers'])) return;
219 -
220 - $fieldClass = new FieldClass();
221 - $fieldsToDisplay = $fieldClass->getAllFieldsBackendListing();
222 - if (empty($fieldsToDisplay['ids'])) return;
223 -
224 - $userIds = [];
225 - foreach ($data['allUsers'] as $user) {
226 - $userIds[] = $user->id;
227 - }
228 -
229 - $fieldValue = $fieldClass->getAllFieldsListingByUserIds($userIds, $fieldsToDisplay['ids'], 'field.backend_listing = 1');
230 - $languages = acym_getLanguages();
231 - $languageFieldId = $fieldClass->getLanguageFieldId();
232 - foreach ($data['allUsers'] as &$user) {
233 - $user->fields = [];
234 - foreach ($fieldsToDisplay['ids'] as $fieldId) {
235 - if ($fieldId == $languageFieldId) {
236 - $user->fields[$fieldId] = empty($languages[$user->language]) ? $user->language : $languages[$user->language]->name;
237 - } else {
238 - $user->fields[$fieldId] = !isset($fieldValue[$fieldId.'-'.$user->id]) ? '' : $fieldValue[$fieldId.'-'.$user->id];
239 - }
240 - }
241 - }
242 -
243 - $data['fields'] = $fieldsToDisplay['names'];
244 - }
245 -
246 - public function addToList(): void
247 - {
248 - wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
249 -
250 - $listsSelected = json_decode(acym_getVar('string', 'acym__entity_select__selected', '[]'), true);
251 - if (empty($listsSelected)) {
252 - $listsSelected = [];
253 - }
254 - $selectedUserIds = acym_getVar('array', 'elements_checked', []);
255 -
256 - $userClass = new UserClass();
257 - $userClass->onlyManageableUsers($selectedUserIds);
258 - $userClass->subscribe($selectedUserIds, $listsSelected);
259 -
260 - $this->listing();
261 - }
262 -}