PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.1.4
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.1.4
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.1.4, at back/Controllers/Mails/Listing.php

258 lines 8.3 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 'class="button button-secondary cell medium-6 large-shrink" data-reload="true" data-ajax="false"'
95 );
96
97 $otherContent .= acym_modal(
98 '<i class="acymicon-add"></i>'.acym_translation('ACYM_CREATE'),
99 '<div class="cell grid-x grid-margin-x">
100 <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(
101 'ACYM_HTML_EDITOR'
102 ).'</button>
103 <button type="button" data-task="edit" data-editor="acyEditor" class="acym__create__template button cell medium-auto margin-top-1">'.acym_translation(
104 'ACYM_DD_EDITOR'
105 ).'</button>
106 </div>',
107 '',
108 '',
109 'class="acym_vcenter button cell medium-6 large-shrink"',
110 true,
111 false
112 );
113 $toolbarHelper->addOtherContent($otherContent);
114
115 $data['toolbar'] = $toolbarHelper;
116 }
117
118 public function doUploadTemplate(): void
119 {
120 acym_checkToken();
121
122 if (!acym_isAdmin() || !acym_isAllowed('mails')) {
123 die('Access denied');
124 }
125
126 $mailClass = new MailClass();
127 $mailClass->doupload();
128
129 $this->listing();
130 }
131
132 public function export(): void
133 {
134 acym_checkToken();
135
136 $templateId = acym_getVar('int', 'templateId', 0);
137
138 if (empty($templateId)) {
139 exit;
140 }
141
142 $mailClass = new MailClass();
143 $template = $mailClass->getOneById($templateId);
144
145 $exportHelper = new ExportHelper();
146 $exportHelper->exportTemplate($template);
147
148 exit;
149 }
150
151 public function installDefaultTmpl(): void
152 {
153 $updateHelper = new UpdateHelper();
154 $updateHelper->installTemplates();
155
156 $this->listing();
157 }
158
159 public function favorite(): void
160 {
161 $templateId = acym_getVar('int', 'templateId', 0);
162
163 if (empty($templateId)) {
164 acym_enqueueMessage(acym_translationSprintf('ACYM_NOT_FOUND', acym_translation('ACYM_TEMPLATE')), 'error');
165 $this->listing();
166
167 return;
168 }
169
170 $favoriteTemplateId = $this->config->get('favorite_template', 0);
171 $this->config->save(['favorite_template' => (int)$favoriteTemplateId === $templateId ? 0 : $templateId]);
172
173 $this->listing();
174 }
175
176 public function massDuplicate(): void
177 {
178 $ids = acym_getVar('array', 'elements_checked', []);
179 if (!empty($ids)) {
180 $this->duplicate($ids);
181 }
182 $this->listing();
183 }
184
185 public function oneDuplicate(): void
186 {
187 $templateId = acym_getVar('int', 'templateId', 0);
188
189 if (empty($templateId)) {
190 acym_enqueueMessage(acym_translation('ACYM_TEMPLATE_DUPLICATE_ERROR'), 'error');
191 $this->listing();
192
193 return;
194 }
195
196 $this->duplicate([$templateId]);
197 $this->listing();
198 }
199
200 public function duplicate(array $templates = []): void
201 {
202 $mailClass = new MailClass();
203 $tmplError = [];
204 foreach ($templates as $templateId) {
205 $oldTemplate = $mailClass->getOneById($templateId);
206
207 if (empty($oldTemplate)) {
208 $tmplError[] = $templateId;
209 continue;
210 }
211
212 $newTemplate = $oldTemplate;
213 $newTemplate->id = 0;
214 $newTemplate->name = $oldTemplate->name.'_copy';
215 unset($newTemplate->thumbnail);
216
217 $mailClass->save($newTemplate);
218 }
219 if (!empty($tmplError)) {
220 acym_enqueueMessage(acym_translationSprintf('ACYM_TEMPLATE_X_DUPLICATE_ERROR', implode(', ', $tmplError)), 'error');
221 }
222 }
223
224 public function delete(): void
225 {
226 parent::delete();
227
228 $returnListing = acym_getVar('string', 'return_listing', '');
229 if (!empty($returnListing)) {
230 if (acym_isAdmin()) {
231 acym_redirect(acym_completeLink($returnListing, false, true));
232 } else {
233 $itemId = acym_getVar('int', 'acym_itemid');
234 $itemId = empty($itemId) ? '' : '&Itemid='.$itemId;
235 $urlRedirect = acym_completeLink($returnListing.$itemId, false, true);
236 acym_redirect($urlRedirect);
237 }
238 }
239 }
240
241 public function getMailByIdAjax(): void
242 {
243 acym_checkToken();
244 $mailId = acym_getVar('int', 'id', 0);
245 if (empty($mailId)) acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_FIND_MAIL'), [], false);
246
247 $mailClass = new MailClass();
248 $mail = $mailClass->getOneById($mailId);
249 if (empty($mail)) acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_FIND_MAIL'), [], false);
250
251 if (!$mailClass->hasUserAccess($mailId)) {
252 die('Access denied for this mail');
253 }
254
255 acym_sendAjaxResponse('', $mail);
256 }
257 }
258