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;
use MailPoet\Config\AccessControl;
use MailPoet\EmailEditor\Engine\Dependency_Check;
use MailPoet\WP\Functions as WPFunctions;
@@ -18,13 +19,20 @@ class DependencyNotice {
$this->dependencyCheck = $dependencyCheck;
}
public function checkDependenciesAndEventuallyRedirect(): void {
public function checkDependenciesAndEventuallyShowNotice(): bool {
if ($this->dependencyCheck->are_dependencies_met()) {
$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->wpSafeRedirect($this->wp->adminUrl('admin.php?page=mailpoet-newsletters'));
return true;
} else {
$this->displayMessage();
return true;
}
}
public function displayMessageIfNeeded(): void {
@@ -37,7 +45,7 @@ class DependencyNotice {
private function displayMessage(): void {
$dependencyErrorMessage = sprintf(
// 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_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
return;
}
$this->dependencyNotice->checkDependenciesAndEventuallyRedirect();
$this->dependencyNotice->checkDependenciesAndEventuallyShowNotice();
// load mailpoet email editor JS integrations
$editorIntegrationAssetsParams = require Env::$assetsPath . '/dist/js/email_editor_integration/email_editor_integration.asset.php';

View File

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

View File

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

View File

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