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 +43 -74 10.1.4 → 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(): 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 84 public function ajaxCountNumberOfRecipients(): void
130 85 {
131 86 $listsSelected = acym_getVar('array', 'listsSelected', []);
132 87 if (empty($listsSelected)) {
@@ -138,8 +93,10 @@
138 93 }
139 94
140 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)) {
@@ -158,8 +115,10 @@
158 115 }
159 116
160 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);
163 122 $specificMailId = acym_getVar('int', 'mailId', 0);
164 123
165 124 $campaignClass = new CampaignClass();
@@ -168,10 +127,18 @@
168 127 if (empty($campaign)) {
169 128 acym_sendAjaxResponse(acym_translation('ACYM_CAMPAIGN_NOT_FOUND'), [], false);
170 129 }
171 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 +
172 140 $mailerHelper = new MailerHelper();
173 - $mailerHelper->autoAddUser = true;
174 141 $mailerHelper->report = false;
175 142 if (!empty($specificMailId)) {
176 143 $mailerHelper->isAbTest = $campaignClass->isAbTestMail($specificMailId);
177 144 }
@@ -185,23 +152,37 @@
185 152 $translatedMails = [];
186 153 if (acym_isMultilingual()) {
187 154 $translatedMails = $mailClass->getTranslationsById($campaign->mail_id, true, true);
188 155 }
189 - $testEmails = explode(',', acym_getVar('string', 'test_emails'));
190 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 +
191 174 foreach ($testEmails as $oneAddress) {
175 + if (is_numeric($oneAddress)) {
176 + $receiver = $userClass->getOneById($oneAddress);
177 + } else {
178 + $receiver = $userClass->getOneByEmail($oneAddress, true);
179 + }
180 +
192 181 $mailId = $specificMailId;
193 182 if (empty($mailId)) {
194 183 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 - }
184 + $mailId = empty($receiver) || empty($translatedMails[$receiver->language]) ? $campaign->mail_id : $translatedMails[$receiver->language]->id;
204 185 } else {
205 186 $mailId = $campaign->mail_id;
206 187 }
207 188 }
@@ -209,9 +190,11 @@
209 190 $options = [
210 191 'isTest' => true,
211 192 'testNote' => $testNote,
212 193 ];
213 - if (!$mailerHelper->sendOne($mailId, $oneAddress, $options)) {
194 + if ($mailerHelper->sendOne($mailId, $receiver, $options)) {
195 + $historyClass->insert($receiver->id, 'test_sent', [], $mailId);
196 + } else {
214 197 $success = false;
215 198 }
216 199
217 200 if (!empty($mailerHelper->reportMessage)) {
@@ -233,9 +216,9 @@
233 216 }
234 217
235 218 public function saveAsTmplAjax(): void
236 219 {
237 - if (!acym_isAdmin()) {
220 + if (!acym_isAdmin() || (!acym_isAllowed('campaigns') && !acym_isAllowed('mails'))) {
238 221 die('Access denied');
239 222 }
240 223
241 224 $mailController = new MailsController();
@@ -240,20 +223,6 @@
240 223
241 224 $mailController = new MailsController();
242 225 $mailId = $mailController->store(true);
243 226 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 227 }
259 228 }