Refactor initialization of the email editor

This changes how the editor is initialized. The integration initialization class
doesn't get the engine class anymore, but integration is initialized via
mailpoet_email_editor_initialized action triggered from the engine.

This allows multiple integrations to hook into the engine.
[MAILPOET-5540]
This commit is contained in:
Rostislav Wolny
2023-08-22 16:45:57 +02:00
committed by Jan Lysý
parent 2517023ad0
commit b70ad064c7
4 changed files with 15 additions and 9 deletions

View File

@@ -11,7 +11,8 @@ use MailPoet\Automation\Integrations\MailPoet\MailPoetIntegration;
use MailPoet\Automation\Integrations\WooCommerce\WooCommerceIntegration; use MailPoet\Automation\Integrations\WooCommerce\WooCommerceIntegration;
use MailPoet\Cron\CronTrigger; use MailPoet\Cron\CronTrigger;
use MailPoet\Cron\DaemonActionSchedulerRunner; use MailPoet\Cron\DaemonActionSchedulerRunner;
use MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor; use MailPoet\EmailEditor\Engine\EmailEditor;
use MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor as MailpoetEmailEditorIntegration;
use MailPoet\InvalidStateException; use MailPoet\InvalidStateException;
use MailPoet\Migrator\Cli as MigratorCli; use MailPoet\Migrator\Cli as MigratorCli;
use MailPoet\PostEditorBlocks\PostEditorBlock; use MailPoet\PostEditorBlocks\PostEditorBlock;
@@ -122,6 +123,9 @@ class Initializer {
/** @var EmailEditor */ /** @var EmailEditor */
private $emailEditor; private $emailEditor;
/** @var MailpoetEmailEditorIntegration */
private $mailpoetEmailEditorIntegration;
/** @var Url */ /** @var Url */
private $urlHelper; private $urlHelper;
@@ -160,6 +164,7 @@ class Initializer {
PersonalDataExporters $personalDataExporters, PersonalDataExporters $personalDataExporters,
DaemonActionSchedulerRunner $actionSchedulerRunner, DaemonActionSchedulerRunner $actionSchedulerRunner,
EmailEditor $emailEditor, EmailEditor $emailEditor,
MailpoetEmailEditorIntegration $mailpoetEmailEditorIntegration,
Url $urlHelper Url $urlHelper
) { ) {
$this->rendererFactory = $rendererFactory; $this->rendererFactory = $rendererFactory;
@@ -192,6 +197,7 @@ class Initializer {
$this->personalDataExporters = $personalDataExporters; $this->personalDataExporters = $personalDataExporters;
$this->actionSchedulerRunner = $actionSchedulerRunner; $this->actionSchedulerRunner = $actionSchedulerRunner;
$this->emailEditor = $emailEditor; $this->emailEditor = $emailEditor;
$this->mailpoetEmailEditorIntegration = $mailpoetEmailEditorIntegration;
$this->urlHelper = $urlHelper; $this->urlHelper = $urlHelper;
} }
@@ -273,6 +279,11 @@ class Initializer {
'multisiteDropTables', 'multisiteDropTables',
]); ]);
$this->wpFunctions->addFilter('mailpoet_email_editor_initialized', [
$this->mailpoetEmailEditorIntegration,
'initialize',
]);
WPFunctions::get()->addAction(AutomationHooks::INITIALIZE, [ WPFunctions::get()->addAction(AutomationHooks::INITIALIZE, [
$this->automationMailPoetIntegration, $this->automationMailPoetIntegration,
'register', 'register',

View File

@@ -22,10 +22,11 @@ class EmailEditor {
} }
public function initialize(): void { public function initialize(): void {
$this->registerEmailPostTypes();
add_filter('allowed_block_types_all', [$this, 'setAllowedBlocksInEmails'], 100, 2); add_filter('allowed_block_types_all', [$this, 'setAllowedBlocksInEmails'], 100, 2);
add_filter('enqueue_block_editor_assets', [$this, 'cleanupBlockEditorAssets'], ~PHP_INT_MAX); add_filter('enqueue_block_editor_assets', [$this, 'cleanupBlockEditorAssets'], ~PHP_INT_MAX);
add_filter('block_editor_settings_all', [$this, 'updateBlockEditorSettings'], 100, 2); add_filter('block_editor_settings_all', [$this, 'updateBlockEditorSettings'], 100, 2);
do_action('mailpoet_email_editor_initialized');
$this->registerEmailPostTypes();
} }
/** /**

View File

@@ -3,7 +3,6 @@
namespace MailPoet\EmailEditor\Integrations\MailPoet; namespace MailPoet\EmailEditor\Integrations\MailPoet;
use MailPoet\Config\Env; use MailPoet\Config\Env;
use MailPoet\EmailEditor\Engine\EmailEditor as CoreEmailEditor;
use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\NewsletterEntity;
use MailPoet\Features\FeaturesController; use MailPoet\Features\FeaturesController;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
@@ -12,9 +11,6 @@ use MailPoet\WP\Functions as WPFunctions;
class EmailEditor { class EmailEditor {
const MAILPOET_EMAIL_POST_TYPE = 'mailpoet_email'; const MAILPOET_EMAIL_POST_TYPE = 'mailpoet_email';
/** @var \MailPoet\EmailEditor\Engine\EmailEditor */
private $coreEmailEditor;
/** @var WPFunctions */ /** @var WPFunctions */
private $wp; private $wp;
@@ -28,13 +24,11 @@ class EmailEditor {
private $emailApiController; private $emailApiController;
public function __construct( public function __construct(
CoreEmailEditor $coreEmailEditor,
WPFunctions $wp, WPFunctions $wp,
FeaturesController $featuresController, FeaturesController $featuresController,
NewslettersRepository $newsletterRepository, NewslettersRepository $newsletterRepository,
EmailApiController $emailApiController EmailApiController $emailApiController
) { ) {
$this->coreEmailEditor = $coreEmailEditor;
$this->wp = $wp; $this->wp = $wp;
$this->featuresController = $featuresController; $this->featuresController = $featuresController;
$this->newsletterRepository = $newsletterRepository; $this->newsletterRepository = $newsletterRepository;
@@ -50,7 +44,6 @@ class EmailEditor {
$this->wp->addFilter('save_post', [$this, 'onEmailSave'], 10, 2); $this->wp->addFilter('save_post', [$this, 'onEmailSave'], 10, 2);
$this->wp->addAction('enqueue_block_editor_assets', [$this, 'enqueueAssets']); $this->wp->addAction('enqueue_block_editor_assets', [$this, 'enqueueAssets']);
$this->extendEmailPostApi(); $this->extendEmailPostApi();
$this->coreEmailEditor->initialize();
} }
public function addEmailPostType(array $postTypes): array { public function addEmailPostType(array $postTypes): array {

View File

@@ -27,6 +27,7 @@ class EmailEditorTest extends \MailPoetTest {
public function testItRegistersMailPoetEmailPostType() { public function testItRegistersMailPoetEmailPostType() {
$this->emailEditor->initialize(); $this->emailEditor->initialize();
$this->diContainer->get(\MailPoet\EmailEditor\Engine\EmailEditor::class)->initialize();
$postTypes = get_post_types(); $postTypes = get_post_types();
$this->assertArrayHasKey('mailpoet_email', $postTypes); $this->assertArrayHasKey('mailpoet_email', $postTypes);
} }