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.0.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()
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 -}