Display dependency notice also for email previews

[MAILPOET-6367]
This commit is contained in:
Rostislav Wolny
2025-01-07 13:32:17 +01:00
committed by Oluwaseun Olorunsola
parent 24355167cc
commit 3f48d088f3
5 changed files with 30 additions and 9 deletions

View File

@@ -2,6 +2,7 @@
namespace MailPoet\EmailEditor\Integrations\MailPoet; namespace MailPoet\EmailEditor\Integrations\MailPoet;
use MailPoet\Config\AccessControl;
use MailPoet\EmailEditor\Engine\Dependency_Check; use MailPoet\EmailEditor\Engine\Dependency_Check;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
@@ -18,13 +19,20 @@ class DependencyNotice {
$this->dependencyCheck = $dependencyCheck; $this->dependencyCheck = $dependencyCheck;
} }
public function checkDependenciesAndEventuallyRedirect(): void { public function checkDependenciesAndEventuallyShowNotice(): bool {
if ($this->dependencyCheck->are_dependencies_met()) { if ($this->dependencyCheck->are_dependencies_met()) {
$this->wp->deleteTransient(self::EMAIL_EDITOR_DEPENDENCY_NOTICE); $this->wp->deleteTransient(self::EMAIL_EDITOR_DEPENDENCY_NOTICE);
return; return false;
} }
// For admins, we redirect to newsletters page and show notice there, for other users we display a notice immediately
if ($this->wp->currentUserCan(AccessControl::PERMISSION_MANAGE_EMAILS)) {
$this->wp->setTransient(self::EMAIL_EDITOR_DEPENDENCY_NOTICE, true); $this->wp->setTransient(self::EMAIL_EDITOR_DEPENDENCY_NOTICE, true);
$this->wp->wpSafeRedirect($this->wp->adminUrl('admin.php?page=mailpoet-newsletters')); $this->wp->wpSafeRedirect($this->wp->adminUrl('admin.php?page=mailpoet-newsletters'));
return true;
} else {
$this->displayMessage();
return true;
}
} }
public function displayMessageIfNeeded(): void { public function displayMessageIfNeeded(): void {
@@ -37,7 +45,7 @@ class DependencyNotice {
private function displayMessage(): void { private function displayMessage(): void {
$dependencyErrorMessage = sprintf( $dependencyErrorMessage = sprintf(
// translators: %1$s: WordPress version e.g. 6.7, %2$s: Gutenberg version e.g. 19.3 // translators: %1$s: WordPress version e.g. 6.7, %2$s: Gutenberg version e.g. 19.3
__('This email was created using the new editor, but it requires WordPress version %1$s or higher, or the Gutenberg plugin version %2$s or above. Please update your setup to continue editing this email.', 'mailpoet'), __('This email was created using the new editor, but it requires WordPress version %1$s or higher, or the Gutenberg plugin version %2$s or above. Please update your setup to continue editing or preview this email.', 'mailpoet'),
Dependency_Check::MIN_WP_VERSION, Dependency_Check::MIN_WP_VERSION,
Dependency_Check::MIN_GUTENBERG_VERSION Dependency_Check::MIN_GUTENBERG_VERSION
); );

View File

@@ -67,7 +67,7 @@ class EditorPageRenderer {
if (!$post instanceof \WP_Post || $post->post_type !== EditorInitController::MAILPOET_EMAIL_POST_TYPE) { // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps if (!$post instanceof \WP_Post || $post->post_type !== EditorInitController::MAILPOET_EMAIL_POST_TYPE) { // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
return; return;
} }
$this->dependencyNotice->checkDependenciesAndEventuallyRedirect(); $this->dependencyNotice->checkDependenciesAndEventuallyShowNotice();
// load mailpoet email editor JS integrations // load mailpoet email editor JS integrations
$editorIntegrationAssetsParams = require Env::$assetsPath . '/dist/js/email_editor_integration/email_editor_integration.asset.php'; $editorIntegrationAssetsParams = require Env::$assetsPath . '/dist/js/email_editor_integration/email_editor_integration.asset.php';

View File

@@ -2,6 +2,7 @@
namespace MailPoet\Newsletter\ViewInBrowser; namespace MailPoet\Newsletter\ViewInBrowser;
use MailPoet\EmailEditor\Integrations\MailPoet\DependencyNotice;
use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberEntity;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Newsletter\Sending\SendingQueuesRepository;
@@ -28,12 +29,16 @@ class ViewInBrowserController {
/** @var NewslettersRepository */ /** @var NewslettersRepository */
private $newslettersRepository; private $newslettersRepository;
/** @var DependencyNotice */
private $dependencyNotice;
public function __construct( public function __construct(
LinkTokens $linkTokens, LinkTokens $linkTokens,
NewsletterUrl $newsletterUrl, NewsletterUrl $newsletterUrl,
NewslettersRepository $newslettersRepository, NewslettersRepository $newslettersRepository,
ViewInBrowserRenderer $viewInBrowserRenderer, ViewInBrowserRenderer $viewInBrowserRenderer,
SendingQueuesRepository $sendingQueuesRepository, SendingQueuesRepository $sendingQueuesRepository,
DependencyNotice $dependencyNotice,
SubscribersRepository $subscribersRepository SubscribersRepository $subscribersRepository
) { ) {
$this->linkTokens = $linkTokens; $this->linkTokens = $linkTokens;
@@ -41,6 +46,7 @@ class ViewInBrowserController {
$this->subscribersRepository = $subscribersRepository; $this->subscribersRepository = $subscribersRepository;
$this->sendingQueuesRepository = $sendingQueuesRepository; $this->sendingQueuesRepository = $sendingQueuesRepository;
$this->newsletterUrl = $newsletterUrl; $this->newsletterUrl = $newsletterUrl;
$this->dependencyNotice = $dependencyNotice;
$this->newslettersRepository = $newslettersRepository; $this->newslettersRepository = $newslettersRepository;
} }
@@ -49,6 +55,9 @@ class ViewInBrowserController {
$isPreview = !empty($data['preview']); $isPreview = !empty($data['preview']);
$newsletter = $this->getNewsletter($data); $newsletter = $this->getNewsletter($data);
$subscriber = $this->getSubscriber($data); $subscriber = $this->getSubscriber($data);
if ($newsletter->getWpPostId() && $this->dependencyNotice->checkDependenciesAndEventuallyShowNotice()) {
return '';
}
// if queue and subscriber exist, subscriber must have received the newsletter // if queue and subscriber exist, subscriber must have received the newsletter
$queue = isset($data['queue_id']) ? $this->sendingQueuesRepository->findOneById($data['queue_id']) : null; $queue = isset($data['queue_id']) ? $this->sendingQueuesRepository->findOneById($data['queue_id']) : null;

View File

@@ -34,9 +34,11 @@ class ViewInBrowser {
} }
private function displayNewsletter($result) { private function displayNewsletter($result) {
if ($result) {
header('Content-Type: text/html; charset=utf-8'); header('Content-Type: text/html; charset=utf-8');
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $result; echo $result;
}
exit; exit;
} }

View File

@@ -4,6 +4,7 @@ namespace MailPoet\Newsletter\ViewInBrowser;
use Codeception\Stub\Expected; use Codeception\Stub\Expected;
use MailPoet\Cron\Workers\SendingQueue\SendingQueue; use MailPoet\Cron\Workers\SendingQueue\SendingQueue;
use MailPoet\EmailEditor\Integrations\MailPoet\DependencyNotice;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\ScheduledTaskEntity; use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\SendingQueueEntity; use MailPoet\Entities\SendingQueueEntity;
@@ -228,6 +229,7 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
$this->newslettersRepository, $this->newslettersRepository,
$viewInBrowserRenderer, $viewInBrowserRenderer,
$this->sendingQueuesRepository, $this->sendingQueuesRepository,
$this->diContainer->get(DependencyNotice::class),
$this->subscribersRepository $this->subscribersRepository
); );
} }