Validate if newsletter has an unsubscribe link
[MAILPOET-3857]
This commit is contained in:
@ -40,7 +40,7 @@ function validateNewsletter(newsletter) {
|
||||
return MailPoet.I18n.t('newsletterIsEmpty');
|
||||
}
|
||||
}
|
||||
|
||||
// todo only check this if MSS is active
|
||||
if (body.indexOf('[link:subscription_unsubscribe_url]') < 0
|
||||
&& body.indexOf('[link:subscription_unsubscribe]') < 0
|
||||
) {
|
||||
|
@ -143,6 +143,25 @@ class SendingQueue extends APIEndpoint {
|
||||
}
|
||||
|
||||
private function validateNewsletter(NewsletterEntity $newsletterEntity): ?string {
|
||||
if (
|
||||
$newsletterEntity->getBody()
|
||||
&& is_array($newsletterEntity->getBody())
|
||||
&& $newsletterEntity->getBody()['content']
|
||||
) {
|
||||
$body = json_encode($newsletterEntity->getBody()['content']);
|
||||
if ($body === false) {
|
||||
return __('Poet, please add prose to your masterpiece before you send it to your followers.');
|
||||
}
|
||||
|
||||
// todo only check this if MSS is active
|
||||
if ((strpos($body, '[link:subscription_unsubscribe_url]') === false)
|
||||
&& (strpos($body, '[link:subscription_unsubscribe]') === false)
|
||||
) {
|
||||
return __('All emails must include an "Unsubscribe" link. Add a footer widget to your email to continue.');
|
||||
}
|
||||
} else {
|
||||
return __('Poet, please add prose to your masterpiece before you send it to your followers.');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -6,11 +6,13 @@ use Codeception\Util\Fixtures;
|
||||
use Codeception\Util\Stub;
|
||||
use MailPoet\API\JSON\Response as APIResponse;
|
||||
use MailPoet\API\JSON\v1\SendingQueue as SendingQueueAPI;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Models\NewsletterOption;
|
||||
use MailPoet\Models\NewsletterOptionField;
|
||||
use MailPoet\Models\ScheduledTask;
|
||||
use MailPoet\Models\SendingQueue as SendingQueueModel;
|
||||
use MailPoet\Newsletter\NewslettersRepository;
|
||||
use MailPoet\Segments\SubscribersFinder;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Settings\SettingsRepository;
|
||||
@ -65,6 +67,7 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
Stub::make(SubscribersFeature::class, [
|
||||
'check' => true,
|
||||
]),
|
||||
$this->diContainer->get(NewslettersRepository::class),
|
||||
$this->diContainer->get(SubscribersFinder::class)
|
||||
);
|
||||
$res = $sendingQueue->add(['newsletter_id' => $this->newsletter->id]);
|
||||
@ -112,6 +115,21 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
expect($rescheduledTask->scheduledAt)->equals('2018-11-11 11:00:00');
|
||||
}
|
||||
|
||||
public function testItRejectsNewsletterWithoutUnsubscribeLink() {
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setSubject('subject');
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
$newsletter->setBody(['content' => ['type' => 'container', 'columnLayout' => false, 'orientation' => 'vertical']]);
|
||||
$this->entityManager->persist($newsletter);
|
||||
$this->entityManager->flush();
|
||||
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
||||
$response = $sendingQueue->add(['newsletter_id' => $newsletter->getId()]);
|
||||
$response = $response->getData();
|
||||
expect($response['errors'][0])->array();
|
||||
expect($response['errors'][0]['message'])->stringContainsString('Unsubscribe');
|
||||
expect($response['errors'][0]['error'])->stringContainsString('bad_request');
|
||||
}
|
||||
|
||||
private function _createOrUpdateNewsletterOptions($newsletterId, $newsletterType, $options) {
|
||||
foreach ($options as $option => $value) {
|
||||
$newsletterOptionField = NewsletterOptionField::where('name', $option)->findOne();
|
||||
|
Reference in New Issue
Block a user