Require that subscriber received a newsletter only for non-preview links
[MAILPOET-2761]
This commit is contained in:
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
namespace MailPoet\Newsletter\ViewInBrowser;
|
namespace MailPoet\Newsletter\ViewInBrowser;
|
||||||
|
|
||||||
use MailPoet\Config\AccessControl;
|
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
@ -10,9 +9,6 @@ use MailPoet\Newsletter\Url as NewsletterUrl;
|
|||||||
use MailPoet\Subscribers\LinkTokens;
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
|
|
||||||
class ViewInBrowserController {
|
class ViewInBrowserController {
|
||||||
/** @var AccessControl */
|
|
||||||
private $accessControl;
|
|
||||||
|
|
||||||
/** @var LinkTokens */
|
/** @var LinkTokens */
|
||||||
private $linkTokens;
|
private $linkTokens;
|
||||||
|
|
||||||
@ -20,11 +16,9 @@ class ViewInBrowserController {
|
|||||||
private $viewInBrowserRenderer;
|
private $viewInBrowserRenderer;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
AccessControl $accessControl,
|
|
||||||
LinkTokens $linkTokens,
|
LinkTokens $linkTokens,
|
||||||
ViewInBrowserRenderer $viewInBrowserRenderer
|
ViewInBrowserRenderer $viewInBrowserRenderer
|
||||||
) {
|
) {
|
||||||
$this->accessControl = $accessControl;
|
|
||||||
$this->linkTokens = $linkTokens;
|
$this->linkTokens = $linkTokens;
|
||||||
$this->viewInBrowserRenderer = $viewInBrowserRenderer;
|
$this->viewInBrowserRenderer = $viewInBrowserRenderer;
|
||||||
}
|
}
|
||||||
@ -41,12 +35,9 @@ class ViewInBrowserController {
|
|||||||
$subscriber = Subscriber::getCurrentWPUser() ?: null;
|
$subscriber = Subscriber::getCurrentWPUser() ?: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// allow users with permission to manage emails to preview any newsletter
|
|
||||||
$canView = $isPreview && $this->accessControl->validatePermission(AccessControl::PERMISSION_MANAGE_EMAILS);
|
|
||||||
|
|
||||||
// if queue and subscriber exist, subscriber must have received the newsletter
|
// if queue and subscriber exist, subscriber must have received the newsletter
|
||||||
$queue = $this->getQueue($newsletter, $data);
|
$queue = $this->getQueue($newsletter, $data);
|
||||||
if (!$canView && $queue && $subscriber && !$queue->isSubscriberProcessed($subscriber->id)) {
|
if (!$isPreview && $queue && $subscriber && !$queue->isSubscriberProcessed($subscriber->id)) {
|
||||||
throw new \InvalidArgumentException("Subscriber did not receive the newsletter yet");
|
throw new \InvalidArgumentException("Subscriber did not receive the newsletter yet");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
namespace MailPoet\Newsletter\ViewInBrowser;
|
namespace MailPoet\Newsletter\ViewInBrowser;
|
||||||
|
|
||||||
use Codeception\Stub\Expected;
|
use Codeception\Stub\Expected;
|
||||||
use MailPoet\Config\AccessControl;
|
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
@ -106,28 +105,6 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
$this->expectViewThrowsExceptionWithMessage($this->viewInBrowserController, $data, 'Subscriber did not receive the newsletter yet');
|
$this->expectViewThrowsExceptionWithMessage($this->viewInBrowserController, $data, 'Subscriber did not receive the newsletter yet');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItDoesNotRequireWpAdministratorToBeOnProcessedListWhenPreviewIsEnabled() {
|
|
||||||
$data = $this->browserPreviewData;
|
|
||||||
$data['preview'] = true;
|
|
||||||
|
|
||||||
$sendingTask = $this->sendingTask;
|
|
||||||
$sendingTask->setSubscribers([]);
|
|
||||||
$sendingTask->updateProcessedSubscribers([]);
|
|
||||||
$sendingTask->save();
|
|
||||||
|
|
||||||
// when WP user is not logged, it should throw
|
|
||||||
$this->expectViewThrowsExceptionWithMessage($this->viewInBrowserController, $data, "Subscriber did not receive the newsletter yet");
|
|
||||||
|
|
||||||
// when WP user does not have 'manage options' permission, it should throw
|
|
||||||
$wpUser = wp_set_current_user(0);
|
|
||||||
$wpUser->remove_role('administrator');
|
|
||||||
$this->expectViewThrowsExceptionWithMessage($this->viewInBrowserController, $data, "Subscriber did not receive the newsletter yet");
|
|
||||||
|
|
||||||
// when WP has 'manage options' permission, it should not throw
|
|
||||||
$wpUser->add_role('administrator');
|
|
||||||
$this->viewInBrowserController->view($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testItSetsSubscriberToLoggedInWPUserWhenPreviewIsEnabled() {
|
public function testItSetsSubscriberToLoggedInWPUserWhenPreviewIsEnabled() {
|
||||||
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
||||||
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, Subscriber $subscriber = null, SendingQueue $queue = null) {
|
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, Subscriber $subscriber = null, SendingQueue $queue = null) {
|
||||||
@ -138,7 +115,6 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$viewInBrowserController = new ViewInBrowserController(
|
$viewInBrowserController = new ViewInBrowserController(
|
||||||
$this->diContainer->get(AccessControl::class),
|
|
||||||
$this->diContainer->get(LinkTokens::class),
|
$this->diContainer->get(LinkTokens::class),
|
||||||
$viewInBrowserRenderer
|
$viewInBrowserRenderer
|
||||||
);
|
);
|
||||||
@ -163,7 +139,6 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$viewInBrowserController = new ViewInBrowserController(
|
$viewInBrowserController = new ViewInBrowserController(
|
||||||
$this->diContainer->get(AccessControl::class),
|
|
||||||
$this->diContainer->get(LinkTokens::class),
|
$this->diContainer->get(LinkTokens::class),
|
||||||
$viewInBrowserRenderer
|
$viewInBrowserRenderer
|
||||||
);
|
);
|
||||||
@ -183,7 +158,6 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$viewInBrowserController = new ViewInBrowserController(
|
$viewInBrowserController = new ViewInBrowserController(
|
||||||
$this->diContainer->get(AccessControl::class),
|
|
||||||
$this->diContainer->get(LinkTokens::class),
|
$this->diContainer->get(LinkTokens::class),
|
||||||
$viewInBrowserRenderer
|
$viewInBrowserRenderer
|
||||||
);
|
);
|
||||||
@ -201,7 +175,6 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$viewInBrowserController = new ViewInBrowserController(
|
$viewInBrowserController = new ViewInBrowserController(
|
||||||
$this->diContainer->get(AccessControl::class),
|
|
||||||
$this->diContainer->get(LinkTokens::class),
|
$this->diContainer->get(LinkTokens::class),
|
||||||
$viewInBrowserRenderer
|
$viewInBrowserRenderer
|
||||||
);
|
);
|
||||||
@ -221,7 +194,6 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$viewInBrowserController = new ViewInBrowserController(
|
$viewInBrowserController = new ViewInBrowserController(
|
||||||
$this->diContainer->get(AccessControl::class),
|
|
||||||
$this->diContainer->get(LinkTokens::class),
|
$this->diContainer->get(LinkTokens::class),
|
||||||
$viewInBrowserRenderer
|
$viewInBrowserRenderer
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user