PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.11.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.11.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 / Mails / Listing.php

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

267 lines 8.5 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\Mails;
4
5 use AcyMailing\Classes\MailClass;
6 use AcyMailing\Classes\TagClass;
7 use AcyMailing\Helpers\ExportHelper;
8 use AcyMailing\Helpers\PaginationHelper;
9 use AcyMailing\Helpers\ToolbarHelper;
10 use AcyMailing\Helpers\UpdateHelper;
11
12 trait Listing
13 {
14 public function listing(): void
15 {
16 acym_setVar('layout', 'listing');
17
18 $searchFilter = $this->getVarFiltersListing('string', 'mails_search', '');
19 $tagFilter = $this->getVarFiltersListing('string', 'mails_tag', '');
20 $ordering = $this->getVarFiltersListing('string', 'mails_ordering', 'creation_date');
21 $orderingSortOrder = $this->getVarFiltersListing('cmd', 'mails_ordering_sort_order', 'desc');
22
23 $pagination = new PaginationHelper();
24 $mailsPerPage = $pagination->getListLimit();
25 $page = $this->getVarFiltersListing('int', 'mails_pagination_page', 1);
26 $mailClass = new MailClass();
27 $status = MailClass::TYPE_STANDARD;
28
29 $requestData = [
30 'ordering' => $ordering,
31 'search' => $searchFilter,
32 'elementsPerPage' => $mailsPerPage,
33 'offset' => ($page - 1) * $mailsPerPage,
34 'tag' => $tagFilter,
35 'status' => $status,
36 'ordering_sort_order' => $orderingSortOrder,
37 'onlyStandard' => true,
38 ];
39 $matchingMails = $this->getMatchingElementsFromData($requestData, $status, $page);
40
41
42 $matchingMailsNb = count($matchingMails['elements']);
43
44 if (empty($matchingMailsNb) && $page > 1) {
45 $this->setVarFiltersListing('mails_pagination_page', 1);
46 $this->listing();
47
48 return;
49 }
50
51 $pagination->setStatus($matchingMails['total']->total, $page, $mailsPerPage);
52
53 ob_start();
54 require acym_getView('mails', 'listing_import', true);
55 $templateImportView = ob_get_clean();
56
57 $tagClass = new TagClass();
58 $mailsData = [
59 'allMails' => $matchingMails['elements'],
60 'allTags' => $tagClass->getAllTagsByType(TagClass::TYPE_MAIL),
61 'pagination' => $pagination,
62 'search' => $searchFilter,
63 'tag' => $tagFilter,
64 'ordering' => $ordering,
65 'status' => $status,
66 'mailNumberPerStatus' => $matchingMails['status'],
67 'orderingSortOrder' => $orderingSortOrder,
68 'templateImportView' => $templateImportView,
69 'mailClass' => $mailClass,
70 'favoriteTemplateId' => (int)$this->config->get('favorite_template', 0),
71 ];
72
73 if (!empty($mailsData['tag'])) {
74 $mailsData['status_toolbar'] = [
75 'mails_tag' => $mailsData['tag'],
76 ];
77 }
78
79 $this->prepareToolbar($mailsData);
80 parent::display($mailsData);
81 }
82
83 public function prepareToolbar(array &$data): void
84 {
85 $toolbarHelper = new ToolbarHelper();
86 $toolbarHelper->addSearchBar($data['search'], 'mails_search', 'ACYM_SEARCH');
87 $toolbarHelper->addFilterByTag($data, 'mails_tag', 'acym__templates__filter__tags acym__select');
88 $toolbarHelper->addButton(acym_translation('ACYM_ADD_DEFAULT_TMPL'), ['data-task' => 'installDefaultTmpl', 'id' => 'acym__mail__install-default'], 'content_copy');
89 $otherContent = acym_modal(
90 '<i class="acymicon-download"></i>'.acym_translation('ACYM_IMPORT'),
91 $data['templateImportView'],
92 'acym__template__import__reveal',
93 [],
94 [
95 'class' => 'button button-secondary cell medium-6 large-shrink',
96 'data-reload' => 'true',
97 'data-ajax' => 'false',
98 ]
99 );
100
101 $otherContent .= acym_modal(
102 '<i class="acymicon-add"></i>'.acym_translation('ACYM_CREATE'),
103 '<div class="cell grid-x grid-margin-x">
104 <button type="button" data-task="edit" data-editor="html" class="acym__create__template button cell large-auto small-6 margin-top-1 button-secondary">'.acym_translation(
105 'ACYM_HTML_EDITOR'
106 ).'</button>
107 <button type="button" data-task="edit" data-editor="acyEditor" class="acym__create__template button cell medium-auto margin-top-1">'.acym_translation(
108 'ACYM_DD_EDITOR'
109 ).'</button>
110 </div>',
111 '',
112 [],
113 ['class' => 'acym_vcenter button cell medium-6 large-shrink'],
114 true,
115 false
116 );
117 $toolbarHelper->addOtherContent($otherContent);
118
119 $data['toolbar'] = $toolbarHelper;
120 }
121
122 public function doUploadTemplate(): void
123 {
124 acym_checkToken();
125
126 if (!acym_isAdmin() || !acym_isAllowed('mails')) {
127 die('Access denied');
128 }
129
130 $mailClass = new MailClass();
131 $mailClass->doupload();
132
133 $this->listing();
134 }
135
136 public function export(): void
137 {
138 acym_checkToken();
139
140 $templateId = acym_getVar('int', 'templateId', 0);
141
142 if (empty($templateId)) {
143 exit;
144 }
145
146 $mailClass = new MailClass();
147 $template = $mailClass->getOneById($templateId);
148
149 $exportHelper = new ExportHelper();
150 $exportHelper->exportTemplate($template);
151
152 exit;
153 }
154
155 public function installDefaultTmpl(): void
156 {
157 $updateHelper = new UpdateHelper();
158 $updateHelper->installTemplates();
159
160 $this->listing();
161 }
162
163 public function favorite(): void
164 {
165 $templateId = acym_getVar('int', 'templateId', 0);
166
167 if (empty($templateId)) {
168 acym_enqueueMessage(acym_translationSprintf('ACYM_NOT_FOUND', acym_translation('ACYM_TEMPLATE')), 'error');
169 $this->listing();
170
171 return;
172 }
173
174 $favoriteTemplateId = $this->config->get('favorite_template', 0);
175 $this->config->saveConfig(['favorite_template' => (int)$favoriteTemplateId === $templateId ? 0 : $templateId]);
176
177 $this->listing();
178 }
179
180 public function massDuplicate(): void
181 {
182 $ids = acym_getVar('array', 'elements_checked', []);
183 if (!empty($ids)) {
184 $this->duplicate($ids);
185 }
186 $this->listing();
187 }
188
189 public function oneDuplicate(): void
190 {
191 $templateId = acym_getVar('int', 'templateId', 0);
192
193 if (empty($templateId)) {
194 acym_enqueueMessage(acym_translation('ACYM_TEMPLATE_DUPLICATE_ERROR'), 'error');
195 $this->listing();
196
197 return;
198 }
199
200 $this->duplicate([$templateId]);
201 $this->listing();
202 }
203
204 public function duplicate(array $templates = []): void
205 {
206 $mailClass = new MailClass();
207 $tmplError = [];
208 foreach ($templates as $templateId) {
209 $oldTemplate = $mailClass->getOneById($templateId);
210
211 if (empty($oldTemplate)) {
212 $tmplError[] = $templateId;
213 continue;
214 }
215
216 $newTemplate = $oldTemplate;
217 $newTemplate->id = 0;
218 $newTemplate->name = $oldTemplate->name.'_copy';
219 $newTemplate->creator_id = acym_currentUserId();
220 unset($newTemplate->thumbnail);
221
222 $mailClass->save($newTemplate);
223 }
224 if (!empty($tmplError)) {
225 acym_enqueueMessage(acym_translationSprintf('ACYM_TEMPLATE_X_DUPLICATE_ERROR', implode(', ', $tmplError)), 'error');
226 }
227 }
228
229 public function delete(): void
230 {
231 parent::delete();
232
233 $returnListing = acym_getVar('string', 'return_listing', '');
234 if (!empty($returnListing)) {
235 if (acym_isAdmin()) {
236 acym_redirect(acym_completeLink($returnListing, false, true));
237 } else {
238 $itemId = acym_getVar('int', 'acym_itemid');
239 $itemId = empty($itemId) ? '' : '&Itemid='.$itemId;
240 $urlRedirect = acym_completeLink($returnListing.$itemId, false, true);
241 acym_redirect($urlRedirect);
242 }
243 }
244 }
245
246 public function getMailByIdAjax(): void
247 {
248 acym_checkToken();
249 $mailId = acym_getVar('int', 'id', 0);
250 if (empty($mailId)) {
251 acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_FIND_MAIL'), [], false);
252 }
253
254 $mailClass = new MailClass();
255 $mail = $mailClass->getOneById($mailId);
256 if (empty($mail)) {
257 acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_FIND_MAIL'), [], false);
258 }
259
260 if (!$mailClass->hasUserAccess($mailId)) {
261 die('Access denied for this mail');
262 }
263
264 acym_sendAjaxResponse('', ['mail' => $mail]);
265 }
266 }
267