diff --git a/lib/API/JSON/v1/Newsletters.php b/lib/API/JSON/v1/Newsletters.php index 2ebc8cd397..686500c9f8 100644 --- a/lib/API/JSON/v1/Newsletters.php +++ b/lib/API/JSON/v1/Newsletters.php @@ -173,9 +173,21 @@ class Newsletters extends APIEndpoint { ]); } + // if the re-engagement email doesn't contain the re-engage link, it can't be activated + if ($newsletter->getType() === NewsletterEntity::TYPE_RE_ENGAGEMENT && $status === NewsletterEntity::STATUS_ACTIVE) { + if (strpos($newsletter->getContent(), '[link:subscription_re_engage_url]') === false) { + return $this->errorResponse([ + APIError::FORBIDDEN => __( + 'A re-engagement email must include a link with [link:subscription_re_engage_url] shortcode.', + 'mailpoet' + ), + ], [], Response::STATUS_FORBIDDEN); + } + } + $tracking = $this->settings->get('tracking'); $tracking_enabled = !empty($tracking['enabled']) && $tracking['enabled'] === "1"; - if ( !$tracking_enabled && $newsletter->getType() === NewsletterEntity::TYPE_RE_ENGAGEMENT && $status === NewsletterEntity::STATUS_ACTIVE) { + if (!$tracking_enabled && $newsletter->getType() === NewsletterEntity::TYPE_RE_ENGAGEMENT && $status === NewsletterEntity::STATUS_ACTIVE) { return $this->errorResponse([ APIError::FORBIDDEN => __( 'Re-engagement emails are disabled because open and click tracking is disabled in MailPoet → Settings → Advanced.', diff --git a/lib/Entities/NewsletterEntity.php b/lib/Entities/NewsletterEntity.php index ebccfe88d2..abefcf5069 100644 --- a/lib/Entities/NewsletterEntity.php +++ b/lib/Entities/NewsletterEntity.php @@ -500,4 +500,9 @@ class NewsletterEntity { return $processedAt; } + + public function getContent(): string { + $content = $this->getBody()['content'] ?? ''; + return json_encode($content) ?: ''; + } }