PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 10.2.2
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v10.2.2
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 / Campaigns / Actions.php

Actions.php in AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress 10.2.2, at back/Controllers/Campaigns/Actions.php

378 lines 13.2 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\Campaigns;
4
5 use AcyMailing\Classes\CampaignClass;
6 use AcyMailing\Classes\FollowupClass;
7 use AcyMailing\Classes\MailArchiveClass;
8 use AcyMailing\Classes\MailClass;
9 use stdClass;
10
11
12 trait Actions
13 {
14 public function duplicate(): void
15 {
16 $campaignsSelected = acym_getVar('int', 'elements_checked');
17
18 $campaignClass = new CampaignClass();
19 $mailClass = new MailClass();
20 $campaignId = 0;
21
22 if (!acym_isAdmin()) {
23 $campaignClass->onlyManageableCampaigns($campaignsSelected);
24 }
25
26 foreach ($campaignsSelected as $campaignSelected) {
27 $campaign = $campaignClass->getOneById($campaignSelected);
28
29 unset($campaign->id);
30 unset($campaign->sending_date);
31 $campaign->draft = 1;
32 $campaign->sent = 0;
33 $campaign->active = 0;
34 if (!empty($campaign->sending_params['resendTarget'])) {
35 unset($campaign->sending_params['resendTarget']);
36 }
37
38 $mail = $mailClass->getOneById($campaign->mail_id);
39 $oldMailId = $mail->id;
40 unset($mail->id);
41 $mail->creation_date = acym_date('now', 'Y-m-d H:i:s', false);
42 $mail->name .= '_copy';
43 $mail->creator_id = acym_currentUserId();
44 $idNewMail = $mailClass->save($mail);
45
46 if (isset($campaign->sending_params['abtest']) && !empty($campaign->sending_params['abtest']['B'])) {
47 $mailVersion = $mailClass->getOneById($campaign->sending_params['abtest']['B']);
48 if (!empty($mailVersion)) {
49 unset($mailVersion->id);
50 $mailVersion->creation_date = acym_date('now', 'Y-m-d H:i:s', false);
51 $mailVersion->name .= '_copy';
52 $mailVersion->parent_id = $idNewMail;
53 $mailVersion->id = $mailClass->save($mailVersion);
54 $campaign->sending_params['abtest']['B'] = $mailVersion->id;
55 }
56 } else {
57 $translations = $mailClass->getTranslationsById($oldMailId, true);
58 foreach ($translations as $oneTranslation) {
59 unset($oneTranslation->id);
60 $oneTranslation->creation_date = acym_date('now', 'Y-m-d H:i:s', false);
61 $oneTranslation->name .= '_copy';
62 $oneTranslation->parent_id = $idNewMail;
63 $mailClass->save($oneTranslation);
64 }
65 }
66
67 $campaign->mail_id = $idNewMail;
68 $campaignId = $campaignClass->save($campaign);
69
70 $allLists = $campaignClass->getListsByMailId($oldMailId);
71
72 $campaignClass->manageListsToCampaign($allLists, $idNewMail);
73 }
74
75 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_DUPLICATED_SUCCESS'));
76
77 if (count($campaignsSelected) == 1 && acym_getVar('string', 'step', '') == 'summary') {
78 acym_setVar('campaignId', $campaignId);
79 $this->editEmail();
80 } else {
81 $this->listing();
82 }
83 }
84
85 public function duplicateFollowup(): void
86 {
87 $followupsSelected = acym_getVar('int', 'elements_checked');
88
89 $followupClass = new FollowupClass();
90 $mailClass = new MailClass();
91
92 foreach ($followupsSelected as $oneFollowup) {
93 $followUp = $followupClass->getOneByIdWithMails($oneFollowup);
94 $followupEmails = $followUp->mails;
95
96 unset($followUp->id, $followUp->creation_date, $followUp->list_id, $followUp->mails);
97 $followUp->name .= '_copy';
98 $followUp->active = 0;
99 $followUp->creation_date = acym_date('now', 'Y-m-d H:i:s', false);
100 $newFollowUpId = $followupClass->save($followUp);
101 if (empty($newFollowUpId)) {
102 acym_enqueueMessage(acym_translation('ACYM_FOLLOWUP_DUPLICATE_ERROR'), 'error');
103 $this->listing();
104
105 return;
106 }
107 $followUp->id = $newFollowUpId;
108
109 foreach ($followupEmails as $oneEmail) {
110 $mail = $mailClass->getOneById($oneEmail->id);
111 unset($mail->id, $mail->creation_date, $mail->creator_id, $mail->autosave);
112 $newMailId = $mailClass->save($mail);
113 if (empty($newMailId)) {
114 acym_enqueueMessage(acym_translation('ACYM_FOLLOWUP_DUPLICATE_ERROR'), 'error');
115 continue;
116 }
117 $followupData = [
118 'id' => $newFollowUpId,
119 'delay' => $oneEmail->delay,
120 'delay_unit' => $oneEmail->delay_unit,
121 ];
122 $followupClass->saveDelaySettings($followupData, $newMailId);
123 }
124 }
125 $this->listing();
126 }
127
128 public function unpause_campaign(): void
129 {
130 $id = acym_getVar('int', 'campaignId', 0);
131 if (empty($id)) {
132 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_NOT_FOUND'), 'error');
133 $this->listing();
134
135 return;
136 }
137
138 acym_redirect(acym_completeLink('queue', false, true).'&task=playPauseSending&acym__queue__play_pause__active__new_value=1&acym__queue__play_pause__campaign_id='.$id);
139 }
140
141 public function stopSending(): void
142 {
143 $this->stopAction('stopSendingCampaignId');
144 }
145
146 public function stopScheduled(): void
147 {
148 $this->stopAction('stopScheduledCampaignId');
149 }
150
151 private function stopAction(string $action): void
152 {
153 acym_checkToken();
154
155 $campaignID = acym_getVar('int', $action);
156 $campaignClass = new CampaignClass();
157
158 if (!empty($campaignID)) {
159 if (!$campaignClass->hasUserAccess($campaignID)) {
160 die('Access denied for campaign send modification');
161 }
162
163 $campaign = new stdClass();
164 $campaign->id = $campaignID;
165 $campaign->active = 0;
166 $campaign->draft = 1;
167
168 $campaignId = $campaignClass->save($campaign);
169 if (empty($campaignId)) {
170 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_CANT_BE_SAVED'), 'error');
171 } else {
172 acym_enqueueMessage(acym_translation('ACYM_SUCCESSFULLY_SAVED'));
173 }
174 } else {
175 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_CANT_BE_SAVED'), 'error');
176 }
177
178 $this->listing();
179 }
180
181 public function confirmCampaign(): void
182 {
183 $this->updateOpenAcymailerPopup();
184 $campaignId = acym_getVar('int', 'campaignId');
185 $campaignSendingDate = acym_getVar('string', 'sending_date');
186 $resendTarget = acym_getVar('cmd', 'resend_target', '');
187 $campaignClass = new CampaignClass();
188
189 if (!$campaignClass->hasUserAccess($campaignId)) {
190 die('Access denied for campaign confirmation');
191 }
192
193 $campaign = new stdClass();
194 $campaign->id = $campaignId;
195 $campaign->draft = 0;
196 $campaign->active = 1;
197 $campaign->sent = 0;
198
199 $currentCampaign = $campaignClass->getOneById($campaignId);
200 if (!empty($resendTarget)) {
201 $currentCampaign->sending_params['resendTarget'] = $resendTarget;
202 $campaign->sending_params = $currentCampaign->sending_params;
203 acym_trigger('onAcymResendCampaign', [$currentCampaign->mail_id]);
204 }
205
206 $resultSave = $campaignClass->save($campaign);
207
208 if ($resultSave) {
209 acym_enqueueMessage(acym_translationSprintf('ACYM_CONFIRMED_CAMPAIGN', acym_date($campaignSendingDate, 'j F Y H:i')));
210 } else {
211 acym_enqueueMessage(acym_translation('ACYM_CANT_CONFIRM_CAMPAIGN').' : '.end($campaignClass->errors), 'error');
212 }
213
214 $this->listing();
215 }
216
217 public function activeAutoCampaign(): void
218 {
219 $this->updateOpenAcymailerPopup();
220 $campaignId = acym_getVar('int', 'campaignId');
221 $campaignClass = new CampaignClass();
222
223 $campaign = new stdClass();
224 $campaign->id = $campaignId;
225 $campaign->draft = 0;
226 $campaign->active = 1;
227 $campaign->sent = 0;
228
229 $resultSave = $campaignClass->save($campaign);
230
231 if ($resultSave) {
232 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_IS_ACTIVE'));
233 } else {
234 acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING'), 'error');
235 }
236
237 $this->listing();
238 }
239
240 public function saveAsDraftCampaign(): void
241 {
242 $campaignId = acym_getVar('int', 'campaignId');
243 $campaignClass = new CampaignClass();
244
245 if (!$campaignClass->hasUserAccess($campaignId)) {
246 die('Access denied for campaign draft save');
247 }
248
249 $campaign = new stdClass();
250 $campaign->id = $campaignId;
251 $campaign->draft = 1;
252 $campaign->active = 0;
253
254 $resultSave = $campaignClass->save($campaign);
255
256 if ($resultSave) {
257 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_SUCCESSFULLY_SAVE_AS_DRAFT'));
258 } else {
259 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_CANT_BE_SAVED').' : '.end($campaignClass->errors), 'error');
260 }
261
262 $this->listing();
263 }
264
265 public function toggleActivateColumnCampaign(): void
266 {
267
268 $campaignId = acym_getVar('int', 'campaignId');
269 $campaignClass = new CampaignClass();
270
271 $campaign = $campaignClass->getOneById($campaignId);
272 if (empty($campaign)) {
273 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_CANT_BE_SAVED').' : '.end($campaignClass->errors), 'error');
274 $this->listing();
275
276 return;
277 }
278
279 $campaign->active = empty($campaign->active) ? 1 : 0;
280
281 if ($campaign->active === 0 && $campaign->sending_type === CampaignClass::SENDING_TYPE_AUTO) {
282 $campaign->next_trigger = null;
283 }
284
285 $resultSave = $campaignClass->save($campaign);
286
287 if ($resultSave) {
288 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_SUCCESSFULLY_SAVE_AS_DRAFT'));
289 } else {
290 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_CANT_BE_SAVED').' : '.end($campaignClass->errors), 'error');
291 }
292
293 $this->listing();
294 }
295
296 public function addQueue(): void
297 {
298 acym_checkToken();
299 $this->updateOpenAcymailerPopup();
300
301 $campaignClass = new CampaignClass();
302 $campaignID = acym_getVar('int', 'campaignId', 0);
303
304 if (empty($campaignID)) {
305 acym_enqueueMessage(acym_translation('ACYM_CAMPAIGN_NOT_FOUND'), 'error');
306 } else {
307 if (!$campaignClass->hasUserAccess($campaignID)) {
308 die('Access denied to add campaign to the queue');
309 }
310 $campaign = $campaignClass->getOneByIdWithMail($campaignID);
311
312 $resendTarget = acym_getVar('cmd', 'resend_target', '');
313 if (!empty($resendTarget)) {
314 $currentCampaign = $campaignClass->getOneById($campaignID);
315 $currentCampaign->sending_params['resendTarget'] = $resendTarget;
316 $campaignClass->save($currentCampaign);
317 acym_trigger('onAcymResendCampaign', [$currentCampaign->mail_id]);
318 }
319
320 $status = $campaignClass->send($campaignID);
321
322 if ($status) {
323 acym_enqueueMessage(acym_translationSprintf('ACYM_CAMPAIGN_ADDED_TO_QUEUE', $campaign->name), 'info');
324 } else {
325 if (empty($campaignClass->errors)) {
326 $notification = [
327 'name' => 'queue_campaign_error',
328 'removable' => 1,
329 ];
330 acym_enqueueMessage(acym_translationSprintf('ACYM_ERROR_QUEUE_CAMPAIGN', $campaign->name), 'error', true, [$notification]);
331 } else {
332 acym_enqueueMessage($campaignClass->errors, 'error');
333 }
334 }
335 }
336
337 $this->_redirectAfterQueued();
338 }
339
340 private function _redirectAfterQueued(): void
341 {
342 if (acym_isAdmin() && (!acym_level(ACYM_ESSENTIAL) || $this->config->get('cron_last', 0) < (time() - 43200))) {
343 acym_redirect(acym_completeLink('queue&task=campaigns', false, true));
344 } else {
345 $this->listing();
346 }
347 }
348
349 private function updateOpenAcymailerPopup(): void
350 {
351 if (acym_isAdmin() && $this->config->get('mailer_method') === 'acymailer' && intval($this->config->get('acymailer_popup', 0)) === 0) {
352 $this->config->save(['acymailer_popup' => '1']);
353 }
354 }
355
356 public function updateArchive(): void
357 {
358 $campaignId = acym_getVar('int', 'campaignId', 0);
359 if (empty($campaignId)) {
360 acym_sendAjaxResponse('', [], false);
361 }
362
363 $campaignClass = new CampaignClass();
364 $campaign = $campaignClass->getOneById($campaignId);
365 if (empty($campaign)) {
366 acym_sendAjaxResponse(acym_translation('ACYM_CAMPAIGN_NOT_FOUND'), [], false);
367 }
368
369 $mailArchiveClass = new MailArchiveClass();
370 $archive = $mailArchiveClass->getOneByMailId($campaign->mail_id);
371 if (!empty($archive)) {
372 $mailArchiveClass->delete($archive->id);
373 }
374
375 acym_sendAjaxResponse();
376 }
377 }
378