| @@ -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 | } |