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 / Campaigns / Actions.php

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

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