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 / CampaignsController.php

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

260 lines 9.0 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;
4
5 use AcyMailing\Classes\CampaignClass;
6 use AcyMailing\Classes\MailClass;
7 use AcyMailing\Classes\ListClass;
8 use AcyMailing\Classes\UserClass;
9 use AcyMailing\Helpers\MailerHelper;
10 use AcyMailing\Core\AcymController;
11 use AcyMailing\Controllers\Campaigns\Actions;
12 use AcyMailing\Controllers\Campaigns\AutoCampaigns;
13 use AcyMailing\Controllers\Campaigns\Edition;
14 use AcyMailing\Controllers\Campaigns\Followup;
15 use AcyMailing\Controllers\Campaigns\ListEmails;
16 use AcyMailing\Controllers\Campaigns\Listing;
17 use AcyMailing\Controllers\Campaigns\Tests;
18
19 class CampaignsController extends AcymController
20 {
21 use Listing;
22 use Followup;
23 use ListEmails;
24 use AutoCampaigns;
25 use Edition;
26 use Actions;
27 use Tests;
28
29 const TASK_TYPE_CAMPAIGN = 'campaigns';
30 const TASK_TYPE_CAMPAIGN_AUTO = 'campaigns_auto';
31 const TASK_TYPE_WELCOME = 'welcome';
32 const TASK_TYPE_UNSUBSCRIBE = 'unsubscribe';
33 const TASK_TYPE_FOLLOWUP = 'followup';
34 const TASK_TYPE_SPECIFIC_LISTING = 'specificListing';
35 const TASK_TYPE_MAILBOX_ACTION = 'mailbox_action';
36
37 const TASKS_TO_REMEMBER_FOR_LISTING = [
38 '',
39 self::TASK_TYPE_CAMPAIGN,
40 self::TASK_TYPE_CAMPAIGN_AUTO,
41 self::TASK_TYPE_WELCOME,
42 self::TASK_TYPE_UNSUBSCRIBE,
43 self::TASK_TYPE_FOLLOWUP,
44 self::TASK_TYPE_SPECIFIC_LISTING,
45 self::TASK_TYPE_MAILBOX_ACTION,
46 ];
47
48 const CAMPAIGN_TYPE_TO_TASK = [
49 'now' => self::TASK_TYPE_CAMPAIGN,
50 'scheduled' => self::TASK_TYPE_CAMPAIGN,
51 'auto' => self::TASK_TYPE_CAMPAIGN_AUTO,
52 'followup' => self::TASK_TYPE_FOLLOWUP,
53 'welcome' => self::TASK_TYPE_WELCOME,
54 'unsubscribe' => self::TASK_TYPE_UNSUBSCRIBE,
55 'birthday' => self::TASK_TYPE_SPECIFIC_LISTING,
56 'woocommerce_cart' => self::TASK_TYPE_SPECIFIC_LISTING,
57 ];
58
59 private string $stepContainerClass = '';
60
61 public function __construct()
62 {
63 parent::__construct();
64
65 $this->defaulttask = 'campaigns';
66 $this->breadcrumb[acym_translation('ACYM_EMAILS')] = acym_completeLink('campaigns');
67 $this->loadScripts = [
68 'recipients' => ['vue-applications' => ['entity_select']],
69 'segment' => ['datepicker', 'vue-applications' => ['modal_users_summary']],
70 'send_settings' => ['datepicker'],
71 'summary' => ['vue-applications' => ['modal_users_summary']],
72 ];
73
74 if (acym_isAdmin()) {
75 $this->stepContainerClass = 'xxlarge-9';
76 }
77
78 acym_setVar('edition', '1');
79 acym_header('X-XSS-Protection:0');
80 $this->storeRedirectListing();
81 }
82
83 public function cancelDashboardAndGetCampaignsAjax(): void
84 {
85 $campaignId = acym_getVar('int', 'campaignId');
86 $campaignClass = new CampaignClass();
87
88 if (empty($campaignId)) {
89 acym_sendAjaxResponse(acym_translation('ACYM_CAMPAIGN_NOT_FOUND'), [], false);
90 }
91
92 $campaign = new \stdClass();
93 $campaign->id = $campaignId;
94 $campaign->active = 0;
95 $campaign->draft = 1;
96
97 $campaignId = $campaignClass->save($campaign);
98 if (empty($campaignId)) {
99 acym_sendAjaxResponse(acym_translation('ACYM_CAMPAIGN_CANT_BE_SAVED'), [], false);
100 }
101
102 $campaigns = $campaignClass->getCampaignForDashboard();
103
104 if (empty($campaigns)) {
105 $result = '<h1 class="acym__dashboard__active-campaigns__none">'.acym_translation('ACYM_NONE_OF_YOUR_CAMPAIGN_SCHEDULED_GO_SCHEDULE_ONE').'</h1>';
106 acym_sendAjaxResponse('', ['content' => $result]);
107 }
108
109 $result = '';
110
111 foreach ($campaigns as $campaign) {
112 $result .= '<div class="cell grid-x acym__dashboard__active-campaigns__one-campaign">
113 <a class="acym__dashboard__active-campaigns__one-campaign__title medium-4 small-12" href="'.acym_completeLink(
114 'campaigns&task=edit&step=editEmail&id='
115 ).$campaign->id.'">'.$campaign->name.'</a>
116 <div class="acym__dashboard__active-campaigns__one-campaign__state medium-2 small-12 acym__background-color__blue text-center"><span>'.acym_translation(
117 'ACYM_SCHEDULED'
118 ).' : '.acym_getDate($campaign->sending_date, 'ACYM_DATE_FORMAT_LC3').'</span></div>
119 <div class="medium-6 small-12"><p id="'.$campaign->id.'" class="acym__dashboard__active-campaigns__one-campaign__action acym__color__dark-gray">'.acym_translation(
120 'ACYM_CANCEL_SCHEDULING'
121 ).'</p></div>
122 </div>
123 <hr class="cell small-12">';
124 }
125
126 acym_sendAjaxResponse('', ['content' => $result]);
127 }
128
129 public function ajaxCountNumberOfRecipients(): void
130 {
131 $listsSelected = acym_getVar('array', 'listsSelected', []);
132 if (empty($listsSelected)) {
133 acym_sendAjaxResponse('', ['recipients' => 0]);
134 }
135
136 $listClass = new ListClass();
137 acym_sendAjaxResponse('', ['recipients' => $listClass->getTotalSubCount($listsSelected)]);
138 }
139
140 public function deleteAttachmentAjax(): void
141 {
142 $mailId = acym_getVar('int', 'mail', 0);
143 $attachmentId = acym_getVar('int', 'id', 0);
144
145 if (!empty($mailId) && $attachmentId >= 0) {
146 $mailClass = new MailClass();
147
148 if (!$mailClass->hasUserAccess($mailId)) {
149 acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_DELETE_ATTACHMENT'), [], false);
150 }
151
152 if ($mailClass->deleteOneAttachment($mailId, $attachmentId)) {
153 acym_sendAjaxResponse(acym_translation('ACYM_ATTACHMENT_WELL_DELETED'));
154 }
155 }
156
157 acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_DELETE_ATTACHMENT'), [], false);
158 }
159
160 public function test(): void
161 {
162 $campaignId = acym_getVar('int', 'campaignId', 0);
163 $specificMailId = acym_getVar('int', 'mailId', 0);
164
165 $campaignClass = new CampaignClass();
166 $campaign = $campaignClass->getOneById($campaignId);
167
168 if (empty($campaign)) {
169 acym_sendAjaxResponse(acym_translation('ACYM_CAMPAIGN_NOT_FOUND'), [], false);
170 }
171
172 $mailerHelper = new MailerHelper();
173 $mailerHelper->autoAddUser = true;
174 $mailerHelper->report = false;
175 if (!empty($specificMailId)) {
176 $mailerHelper->isAbTest = $campaignClass->isAbTestMail($specificMailId);
177 }
178
179 $report = [];
180 $success = true;
181 $testNote = acym_getVar('string', 'test_note', '');
182
183 $userClass = new UserClass();
184 $mailClass = new mailClass();
185 $translatedMails = [];
186 if (acym_isMultilingual()) {
187 $translatedMails = $mailClass->getTranslationsById($campaign->mail_id, true, true);
188 }
189 $testEmails = explode(',', acym_getVar('string', 'test_emails'));
190
191 foreach ($testEmails as $oneAddress) {
192 $mailId = $specificMailId;
193 if (empty($mailId)) {
194 if (acym_isMultilingual()) {
195 $user = $userClass->getOneById($oneAddress);
196 if (empty($user)) {
197 $user = $userClass->getOneByEmail($oneAddress);
198 }
199 if (empty($user)) {
200 $mailId = $campaign->mail_id;
201 } else {
202 $mailId = empty($translatedMails[$user->language]) ? $campaign->mail_id : $translatedMails[$user->language]->id;
203 }
204 } else {
205 $mailId = $campaign->mail_id;
206 }
207 }
208
209 $options = [
210 'isTest' => true,
211 'testNote' => $testNote,
212 ];
213 if (!$mailerHelper->sendOne($mailId, $oneAddress, $options)) {
214 $success = false;
215 }
216
217 if (!empty($mailerHelper->reportMessage)) {
218 $report[] = $mailerHelper->reportMessage;
219 }
220 }
221
222 acym_sendAjaxResponse(implode('<br/>', $report), [], $success);
223 }
224
225 public function saveAjax(): void
226 {
227 $result = $this->saveEditEmail(true);
228 if (!empty($result)) {
229 acym_sendAjaxResponse('', ['result' => $result]);
230 } else {
231 acym_sendAjaxResponse(acym_translation('ACYM_ERROR_SAVING'), [], false);
232 }
233 }
234
235 public function saveAsTmplAjax(): void
236 {
237 if (!acym_isAdmin()) {
238 die('Access denied');
239 }
240
241 $mailController = new MailsController();
242 $mailId = $mailController->store(true);
243 acym_sendAjaxResponse(!empty($mailId) ? '' : acym_translation('ACYM_ERROR_SAVING'), ['result' => $mailId], !empty($mailId));
244 }
245
246 public function searchTestReceiversAjax(): void
247 {
248 $search = acym_getVar('string', 'search', '');
249 $userClass = new UserClass();
250 $users = $userClass->getUsersLikeEmail($search);
251
252 $return = [];
253 foreach ($users as $oneUser) {
254 $return[] = [$oneUser->id, $oneUser->email];
255 }
256 echo json_encode($return);
257 exit;
258 }
259 }
260