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 | front/FrontControllers/ArchiveController.php +31 -6 11.0.0 → 11.1.0 View file →
@@ -2,8 +2,9 @@
2 2
3 3 namespace AcyMailing\FrontControllers;
4 4
5 5 use AcyMailing\Classes\CampaignClass;
6 +use AcyMailing\Classes\HistoryClass;
6 7 use AcyMailing\Classes\MailArchiveClass;
7 8 use AcyMailing\Classes\MailClass;
8 9 use AcyMailing\Classes\UserClass;
9 10 use AcyMailing\Classes\UserStatClass;
@@ -122,14 +123,23 @@
122 123 return false;
123 124 }
124 125
125 126 $mailClass = new MailClass();
126 - if ($mailClass->hasUserAccess($mailId) || $mailClass->isPublicArchive($mailId)) {
127 + if ($mailClass->hasUserAccess($mailId)) {
127 128 return true;
128 129 }
129 130
130 - // Other types (automation, followup, welcome, unsubscribe...): the "view online" link embedded in
131 - // the sent email carries the recipient's per-user secret key as userid=id-key.
131 + $campaignClass = new CampaignClass();
132 + $campaign = $campaignClass->getOneByMailId($mailId);
133 + if (
134 + !empty($campaign)
135 + && (int)$campaign->visible === 1
136 + && (int)$campaign->active === 1
137 + && (int)$campaign->sent === 1
138 + ) {
139 + return true;
140 + }
141 +
132 142 $userKeys = acym_getVar('string', 'userid', '');
133 143 $separatorPosition = strpos($userKeys, '-');
134 144 if ($separatorPosition === false) {
135 145 return false;
@@ -140,14 +150,29 @@
140 150 if (empty($userId) || empty($userKey)) {
141 151 return false;
142 152 }
143 153
154 + $historyClass = new HistoryClass();
155 + $userHistory = $historyClass->getHistoryOfOneById($userId);
156 + foreach ($userHistory as $userHistoryItem) {
157 + if ((int)$userHistoryItem->mail_id === $mailId && $userHistoryItem->action === 'test_sent') {
158 + return true;
159 + }
160 + }
161 +
162 + acym_setVar('id', $userId);
163 + acym_setVar('key', $userKey);
144 164 $userClass = new UserClass();
145 - $user = $userClass->getOneById($userId);
146 - if (empty($user) || !hash_equals((string)$user->key, $userKey)) {
165 + $user = $userClass->identify(true);
166 +
167 + if (empty($user)) {
147 168 return false;
148 169 }
149 170
171 + if (!empty($user->cms_id) && $mailClass->hasUserAccess($mailId, false, $user->cms_id)) {
172 + return true;
173 + }
174 +
150 175 $userStatClass = new UserStatClass();
151 176
152 177 return $userStatClass->hasUserReceivedMail($mailId, $userId);
153 178 }
@@ -240,9 +265,9 @@
240 265 if (!empty($viewParams['displayUserListOnly'])) {
241 266 $params['displayUserListOnly'] = $viewParams['displayUserListOnly'];
242 267 }
243 268
244 - $params['page'] = $this->getVarFiltersListing('int', 'archive_pagination_page', 1);
269 + $params['page'] = max(1, $this->getVarFiltersListing('int', 'archive_pagination_page', 1));
245 270 $campaignClass = new CampaignClass();
246 271 $pagination = new PaginationHelper();
247 272 $params['numberPerPage'] = (int)$viewParams['nbNewslettersPerPage'];
248 273