| @@ -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; |
| @@ -92,8 +93,10 @@ | ||
| 92 | 93 | } |
| 93 | 94 | |
| 94 | 95 | public function deleteAttachmentAjax(): void |
| 95 | 96 | { |
| 97 | + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token'); | |
| 98 | + | |
| 96 | 99 | $mailId = acym_getVar('int', 'mail', 0); |
| 97 | 100 | $attachmentId = acym_getVar('int', 'id', 0); |
| 98 | 101 | |
| 99 | 102 | if (!empty($mailId) && $attachmentId >= 0) { |
| @@ -98,9 +101,9 @@ | ||
| 98 | 101 | |
| 99 | 102 | if (!empty($mailId) && $attachmentId >= 0) { |
| 100 | 103 | $mailClass = new MailClass(); |
| 101 | 104 | |
| 102 | - if (!$mailClass->hasUserAccess($mailId)) { | |
| 105 | + if (!$mailClass->hasUserAccess($mailId, true)) { | |
| 103 | 106 | acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_DELETE_ATTACHMENT'), [], false); |
| 104 | 107 | } |
| 105 | 108 | |
| 106 | 109 | if ($mailClass->deleteOneAttachment($mailId, $attachmentId)) { |
| @@ -112,8 +115,10 @@ | ||
| 112 | 115 | } |
| 113 | 116 | |
| 114 | 117 | public function test(): void |
| 115 | 118 | { |
| 119 | + wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token'); | |
| 120 | + | |
| 116 | 121 | $campaignId = acym_getVar('int', 'campaignId', 0); |
| 117 | 122 | $specificMailId = acym_getVar('int', 'mailId', 0); |
| 118 | 123 | |
| 119 | 124 | $campaignClass = new CampaignClass(); |
| @@ -122,10 +127,18 @@ | ||
| 122 | 127 | if (empty($campaign)) { |
| 123 | 128 | acym_sendAjaxResponse(acym_translation('ACYM_CAMPAIGN_NOT_FOUND'), [], false); |
| 124 | 129 | } |
| 125 | 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 | + | |
| 126 | 140 | $mailerHelper = new MailerHelper(); |
| 127 | - $mailerHelper->autoAddUser = true; | |
| 128 | 141 | $mailerHelper->report = false; |
| 129 | 142 | if (!empty($specificMailId)) { |
| 130 | 143 | $mailerHelper->isAbTest = $campaignClass->isAbTestMail($specificMailId); |
| 131 | 144 | } |
| @@ -155,22 +168,21 @@ | ||
| 155 | 168 | |
| 156 | 169 | return; |
| 157 | 170 | } |
| 158 | 171 | |
| 172 | + $historyClass = new HistoryClass(); | |
| 173 | + | |
| 159 | 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 | + | |
| 160 | 181 | $mailId = $specificMailId; |
| 161 | 182 | if (empty($mailId)) { |
| 162 | 183 | if (acym_isMultilingual()) { |
| 163 | - if (is_numeric($oneAddress)) { | |
| 164 | - $user = $userClass->getOneById($oneAddress); | |
| 165 | - } else { | |
| 166 | - $user = $userClass->getOneByEmail($oneAddress); | |
| 167 | - } | |
| 168 | - if (empty($user)) { | |
| 169 | - $mailId = $campaign->mail_id; | |
| 170 | - } else { | |
| 171 | - $mailId = empty($translatedMails[$user->language]) ? $campaign->mail_id : $translatedMails[$user->language]->id; | |
| 172 | - } | |
| 184 | + $mailId = empty($receiver) || empty($translatedMails[$receiver->language]) ? $campaign->mail_id : $translatedMails[$receiver->language]->id; | |
| 173 | 185 | } else { |
| 174 | 186 | $mailId = $campaign->mail_id; |
| 175 | 187 | } |
| 176 | 188 | } |
| @@ -178,9 +190,11 @@ | ||
| 178 | 190 | $options = [ |
| 179 | 191 | 'isTest' => true, |
| 180 | 192 | 'testNote' => $testNote, |
| 181 | 193 | ]; |
| 182 | - if (!$mailerHelper->sendOne($mailId, $oneAddress, $options)) { | |
| 194 | + if ($mailerHelper->sendOne($mailId, $receiver, $options)) { | |
| 195 | + $historyClass->insert($receiver->id, 'test_sent', [], $mailId); | |
| 196 | + } else { | |
| 183 | 197 | $success = false; |
| 184 | 198 | } |
| 185 | 199 | |
| 186 | 200 | if (!empty($mailerHelper->reportMessage)) { |
| @@ -202,9 +216,9 @@ | ||
| 202 | 216 | } |
| 203 | 217 | |
| 204 | 218 | public function saveAsTmplAjax(): void |
| 205 | 219 | { |
| 206 | - if (!acym_isAdmin()) { | |
| 220 | + if (!acym_isAdmin() || (!acym_isAllowed('campaigns') && !acym_isAllowed('mails'))) { | |
| 207 | 221 | die('Access denied'); |
| 208 | 222 | } |
| 209 | 223 | |
| 210 | 224 | $mailController = new MailsController(); |