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 -250 10.11.1 → 11.1.1 View file →
@@ -1,250 +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('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 -}