PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.0
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.0
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
← All changes | back/Controllers/CampaignsController.php +59 -82 10.0.1 → 11.1.0 View file →
@@ -2,8 +2,9 @@
2 2
3 3 namespace AcyMailing\Controllers;
4 4
5 5 use AcyMailing\Classes\CampaignClass;
6 +use AcyMailing\Classes\HistoryClass;
6 7 use AcyMailing\Classes\MailClass;
7 8 use AcyMailing\Classes\ListClass;
8 9 use AcyMailing\Classes\UserClass;
9 10 use AcyMailing\Helpers\MailerHelper;
@@ -79,54 +80,8 @@
79 80 acym_header('X-XSS-Protection:0');
80 81 $this->storeRedirectListing();
81 82 }
82 83
83 - public function cancelDashboardAndGetCampaignsAjax()
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 84 public function ajaxCountNumberOfRecipients(): void
130 85 {
131 86 $listsSelected = acym_getVar('array', 'listsSelected', []);
132 87 if (empty($listsSelected)) {
@@ -136,10 +91,12 @@
136 91 $listClass = new ListClass();
137 92 acym_sendAjaxResponse('', ['recipients' => $listClass->getTotalSubCount($listsSelected)]);
138 93 }
139 94
140 - public function deleteAttachmentAjax()
95 + public function deleteAttachmentAjax(): void
141 96 {
97 + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
98 +
142 99 $mailId = acym_getVar('int', 'mail', 0);
143 100 $attachmentId = acym_getVar('int', 'id', 0);
144 101
145 102 if (!empty($mailId) && $attachmentId >= 0) {
@@ -144,9 +101,9 @@
144 101
145 102 if (!empty($mailId) && $attachmentId >= 0) {
146 103 $mailClass = new MailClass();
147 104
148 - if (!$mailClass->hasUserAccess($mailId)) {
105 + if (!$mailClass->hasUserAccess($mailId, true)) {
149 106 acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_DELETE_ATTACHMENT'), [], false);
150 107 }
151 108
152 109 if ($mailClass->deleteOneAttachment($mailId, $attachmentId)) {
@@ -156,11 +113,14 @@
156 113
157 114 acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_DELETE_ATTACHMENT'), [], false);
158 115 }
159 116
160 - public function test()
117 + public function test(): void
161 118 {
119 + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
120 +
162 121 $campaignId = acym_getVar('int', 'campaignId', 0);
122 + $specificMailId = acym_getVar('int', 'mailId', 0);
163 123
164 124 $campaignClass = new CampaignClass();
165 125 $campaign = $campaignClass->getOneById($campaignId);
166 126
@@ -167,11 +127,22 @@
167 127 if (empty($campaign)) {
168 128 acym_sendAjaxResponse(acym_translation('ACYM_CAMPAIGN_NOT_FOUND'), [], false);
169 129 }
170 130
131 + if (!$campaignClass->hasUserAccess($campaignId)) {
132 + acym_sendAjaxResponse(acym_translation('ACYM_ACCESS_DENIED'), [], false);
133 + }
134 +
135 + $mailClassAccess = new MailClass();
136 + if (!empty($specificMailId) && $mailClassAccess->getMainMailId($specificMailId) !== (int)$campaign->mail_id) {
137 + acym_sendAjaxResponse(acym_translation('ACYM_ACCESS_DENIED'), [], false);
138 + }
139 +
171 140 $mailerHelper = new MailerHelper();
172 - $mailerHelper->autoAddUser = true;
173 141 $mailerHelper->report = false;
142 + if (!empty($specificMailId)) {
143 + $mailerHelper->isAbTest = $campaignClass->isAbTestMail($specificMailId);
144 + }
174 145
175 146 $report = [];
176 147 $success = true;
177 148 $testNote = acym_getVar('string', 'test_note', '');
@@ -181,22 +152,40 @@
181 152 $translatedMails = [];
182 153 if (acym_isMultilingual()) {
183 154 $translatedMails = $mailClass->getTranslationsById($campaign->mail_id, true, true);
184 155 }
185 - $testEmails = explode(',', acym_getVar('string', 'test_emails'));
156 +
157 + $rawTestEmails = explode(',', acym_getVar('string', 'test_emails'));
158 + $testEmails = [];
159 + foreach ($rawTestEmails as $email) {
160 + $email = trim($email);
161 + if (acym_isValidEmail($email) || is_numeric($email)) {
162 + $testEmails[] = $email;
163 + }
164 + }
165 +
166 + if (empty($testEmails)) {
167 + acym_sendAjaxResponse(acym_translation('ACYM_NO_VALID_TEST_EMAILS'), [], false);
168 +
169 + return;
170 + }
171 +
172 + $historyClass = new HistoryClass();
173 +
186 174 foreach ($testEmails as $oneAddress) {
187 - if (acym_isMultilingual()) {
188 - $user = $userClass->getOneById($oneAddress);
189 - if (empty($user)) {
190 - $user = $userClass->getOneByEmail($oneAddress);
191 - }
192 - if (empty($user)) {
175 + if (is_numeric($oneAddress)) {
176 + $receiver = $userClass->getOneById($oneAddress);
177 + } else {
178 + $receiver = $userClass->getOneByEmail($oneAddress, true);
179 + }
180 +
181 + $mailId = $specificMailId;
182 + if (empty($mailId)) {
183 + if (acym_isMultilingual()) {
184 + $mailId = empty($receiver) || empty($translatedMails[$receiver->language]) ? $campaign->mail_id : $translatedMails[$receiver->language]->id;
185 + } else {
193 186 $mailId = $campaign->mail_id;
194 - } else {
195 - $mailId = empty($translatedMails[$user->language]) ? $campaign->mail_id : $translatedMails[$user->language]->id;
196 187 }
197 - } else {
198 - $mailId = $campaign->mail_id;
199 188 }
200 189
201 190 $options = [
202 191 'isTest' => true,
@@ -201,9 +190,11 @@
201 190 $options = [
202 191 'isTest' => true,
203 192 'testNote' => $testNote,
204 193 ];
205 - if (!$mailerHelper->sendOne($mailId, $oneAddress, $options)) {
194 + if ($mailerHelper->sendOne($mailId, $receiver, $options)) {
195 + $historyClass->insert($receiver->id, 'test_sent', [], $mailId);
196 + } else {
206 197 $success = false;
207 198 }
208 199
209 200 if (!empty($mailerHelper->reportMessage)) {
@@ -213,12 +204,12 @@
213 204
214 205 acym_sendAjaxResponse(implode('<br/>', $report), [], $success);
215 206 }
216 207
217 - public function saveAjax()
208 + public function saveAjax(): void
218 209 {
219 210 $result = $this->saveEditEmail(true);
220 - if ($result) {
211 + if (!empty($result)) {
221 212 acym_sendAjaxResponse('', ['result' => $result]);
222 213 } else {
223 214 acym_sendAjaxResponse(acym_translation('ACYM_ERROR_SAVING'), [], false);
224 215 }
@@ -223,29 +214,15 @@
223 214 acym_sendAjaxResponse(acym_translation('ACYM_ERROR_SAVING'), [], false);
224 215 }
225 216 }
226 217
227 - public function saveAsTmplAjax()
218 + public function saveAsTmplAjax(): void
228 219 {
229 - if (!acym_isAdmin()) {
220 + if (!acym_isAdmin() || (!acym_isAllowed('campaigns') && !acym_isAllowed('mails'))) {
230 221 die('Access denied');
231 222 }
232 223
233 224 $mailController = new MailsController();
234 - $isWellSaved = $mailController->store(true);
235 - acym_sendAjaxResponse($isWellSaved ? '' : acym_translation('ACYM_ERROR_SAVING'), ['result' => $isWellSaved], $isWellSaved);
236 - }
237 -
238 - public function searchTestReceiversAjax()
239 - {
240 - $search = acym_getVar('string', 'search', '');
241 - $userClass = new UserClass();
242 - $users = $userClass->getUsersLikeEmail($search);
243 -
244 - $return = [];
245 - foreach ($users as $oneUser) {
246 - $return[] = [$oneUser->id, $oneUser->email];
247 - }
248 - echo json_encode($return);
249 - exit;
225 + $mailId = $mailController->store(true);
226 + acym_sendAjaxResponse(!empty($mailId) ? '' : acym_translation('ACYM_ERROR_SAVING'), ['result' => $mailId], !empty($mailId));
250 227 }
251 228 }