Register email patterns directly in plugin
[MAILPOET-6243]
This commit is contained in:
committed by
Oluwaseun Olorunsola
parent
5885077838
commit
e74e1ef2a2
@ -46,12 +46,12 @@ class EmailEditor {
|
||||
return;
|
||||
}
|
||||
$this->cli->initialize();
|
||||
$this->patternsController->initialize();
|
||||
$this->wp->addFilter('mailpoet_email_editor_post_types', [$this, 'addEmailPostType']);
|
||||
$this->wp->addAction('rest_delete_mailpoet_email', [$this->emailApiController, 'trashEmail'], 10, 1);
|
||||
$this->wp->addFilter('mailpoet_is_email_editor_page', [$this, 'isEditorPage'], 10, 1);
|
||||
$this->wp->addFilter('replace_editor', [$this, 'replaceEditor'], 10, 2);
|
||||
$this->wp->addFilter('mailpoet_email_editor_send_preview_email', [$this->emailEditorPreviewEmail, 'sendPreviewEmail'], 10, 1);
|
||||
$this->patternsController->registerPatterns();
|
||||
$this->extendEmailPostApi();
|
||||
}
|
||||
|
||||
|
@ -32,6 +32,6 @@ class DefaultContent extends Pattern {
|
||||
}
|
||||
|
||||
protected function get_title(): string { // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps
|
||||
return __('Default Email Content with Header and Footer', 'mailpoet');
|
||||
return __('Default Email Content', 'mailpoet');
|
||||
}
|
||||
}
|
||||
|
@ -5,27 +5,22 @@ namespace MailPoet\EmailEditor\Integrations\MailPoet\Patterns;
|
||||
use MailPoet\EmailEditor\Integrations\MailPoet\Patterns\Library\DefaultContent;
|
||||
use MailPoet\EmailEditor\Integrations\MailPoet\Patterns\Library\DefaultContentFull;
|
||||
use MailPoet\Util\CdnAssetUrl;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
class PatternsController {
|
||||
private CdnAssetUrl $cdnAssetUrl;
|
||||
private WPFunctions $wp;
|
||||
|
||||
public function __construct(
|
||||
CdnAssetUrl $cdnAssetUrl,
|
||||
WPFunctions $wpFunctions
|
||||
CdnAssetUrl $cdnAssetUrl
|
||||
) {
|
||||
$this->cdnAssetUrl = $cdnAssetUrl;
|
||||
$this->wp = $wpFunctions;
|
||||
}
|
||||
|
||||
public function initialize(): void {
|
||||
$this->wp->addFilter('mailpoet_email_editor_block_patterns', [$this, 'registerPatterns']);
|
||||
}
|
||||
|
||||
public function registerPatterns($patterns): array {
|
||||
public function registerPatterns(): void {
|
||||
$patterns = [];
|
||||
$patterns[] = new DefaultContentFull($this->cdnAssetUrl);
|
||||
$patterns[] = new DefaultContent($this->cdnAssetUrl);
|
||||
return $patterns;
|
||||
foreach ($patterns as $pattern) {
|
||||
register_block_pattern($pattern->get_namespace() . '/' . $pattern->get_name(), $pattern->get_properties());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,48 @@
|
||||
<?php declare(strict_types = 1);
|
||||
|
||||
namespace MailPoet\EmailEditor\Integrations\MailPoet\Patterns;
|
||||
|
||||
class PatternsControllerTest extends \MailPoetTest {
|
||||
private PatternsController $patterns;
|
||||
|
||||
public function _before(): void {
|
||||
parent::_before();
|
||||
$this->patterns = $this->diContainer->get(PatternsController::class);
|
||||
$this->cleanupPatterns();
|
||||
}
|
||||
|
||||
public function testItRegistersPatterns(): void {
|
||||
$this->patterns->registerPatterns();
|
||||
$blockPatterns = \WP_Block_Patterns_Registry::get_instance()->get_all_registered();
|
||||
|
||||
$blockPatternContent = array_pop($blockPatterns);
|
||||
$this->assertIsArray($blockPatternContent);
|
||||
$this->assertArrayHasKey('name', $blockPatternContent);
|
||||
$this->assertArrayHasKey('content', $blockPatternContent);
|
||||
$this->assertArrayHasKey('title', $blockPatternContent);
|
||||
$this->assertArrayHasKey('categories', $blockPatternContent);
|
||||
$this->assertEquals('mailpoet/default-content', $blockPatternContent['name']);
|
||||
$this->assertStringContainsString('A one-column layout is great for simplified and concise content', $blockPatternContent['content']);
|
||||
$this->assertEquals('Default Email Content', $blockPatternContent['title']);
|
||||
$this->assertEquals(['email-contents'], $blockPatternContent['categories']);
|
||||
|
||||
$blockPatternContentFull = array_pop($blockPatterns);
|
||||
$this->assertIsArray($blockPatternContentFull);
|
||||
$this->assertArrayHasKey('name', $blockPatternContentFull);
|
||||
$this->assertArrayHasKey('content', $blockPatternContentFull);
|
||||
$this->assertArrayHasKey('title', $blockPatternContentFull);
|
||||
$this->assertArrayHasKey('categories', $blockPatternContentFull);
|
||||
$this->assertEquals('mailpoet/default-content-full', $blockPatternContentFull['name']);
|
||||
$this->assertStringContainsString('A one-column layout is great for simplified and concise content', $blockPatternContentFull['content']);
|
||||
$this->assertEquals('Default Email Content with Header and Footer', $blockPatternContentFull['title']);
|
||||
$this->assertEquals(['email-contents'], $blockPatternContentFull['categories']);
|
||||
}
|
||||
|
||||
private function cleanupPatterns() {
|
||||
$registry = \WP_Block_Patterns_Registry::get_instance();
|
||||
$blockPatterns = $registry->get_all_registered();
|
||||
foreach ($blockPatterns as $pattern) {
|
||||
$registry->unregister($pattern['name']);
|
||||
}
|
||||
}
|
||||
}
|
@ -19,7 +19,6 @@ class Patterns {
|
||||
*/
|
||||
public function initialize(): void {
|
||||
$this->register_block_pattern_categories();
|
||||
$this->register_patterns();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -45,18 +44,4 @@ class Patterns {
|
||||
);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Register block patterns.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function register_patterns() {
|
||||
$patterns = apply_filters( 'mailpoet_email_editor_block_patterns', array() );
|
||||
foreach ( $patterns as $pattern ) {
|
||||
if ( ! $pattern instanceof Abstract_Pattern ) {
|
||||
continue;
|
||||
}
|
||||
register_block_pattern( $pattern->get_namespace() . '/' . $pattern->get_name(), $pattern->get_properties() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,43 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* This file is part of the MailPoet plugin.
|
||||
*
|
||||
* @package MailPoet\EmailEditor
|
||||
*/
|
||||
|
||||
declare(strict_types = 1);
|
||||
namespace MailPoet\EmailEditor\Engine\Patterns;
|
||||
|
||||
/**
|
||||
* Dummy test pattern
|
||||
*/
|
||||
class Dummy_Test_Pattern extends Abstract_Pattern {
|
||||
/**
|
||||
* Name of the pattern
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'dummy-test-pattern';
|
||||
/**
|
||||
* Namespace of the pattern
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $namespace = 'dummy';
|
||||
/**
|
||||
* Get the pattern content
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_content(): string {
|
||||
return '<!-- wp:paragraph --><p>Test pattern</p><!-- /wp:paragraph -->';
|
||||
}
|
||||
/**
|
||||
* Get the pattern title
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_title(): string {
|
||||
return 'Test pattern title';
|
||||
}
|
||||
}
|
@ -8,8 +8,6 @@
|
||||
declare(strict_types = 1);
|
||||
namespace MailPoet\EmailEditor\Engine\Patterns;
|
||||
|
||||
require_once 'Dummy_Test_Pattern.php';
|
||||
|
||||
/**
|
||||
* Integration test for Patterns class
|
||||
*/
|
||||
@ -41,36 +39,10 @@ class Patterns_Test extends \MailPoetTest {
|
||||
$this->assertEquals( 'A collection of email content layouts.', $category['description'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that the patterns added via filter are registered in WP_Block_Patterns_Registry
|
||||
*/
|
||||
public function testItRegistersPatterns() {
|
||||
$pattern = new Dummy_Test_Pattern();
|
||||
add_filter(
|
||||
'mailpoet_email_editor_block_patterns',
|
||||
function ( $patterns ) use ( $pattern ) {
|
||||
$patterns[] = $pattern;
|
||||
return $patterns;
|
||||
}
|
||||
);
|
||||
$this->patterns->initialize();
|
||||
$block_patterns = \WP_Block_Patterns_Registry::get_instance()->get_all_registered();
|
||||
$block_pattern = array_pop( $block_patterns );
|
||||
$this->assertEquals( 'dummy/dummy-test-pattern', $block_pattern['name'] );
|
||||
$this->assertEquals( $pattern->get_content(), $block_pattern['content'] );
|
||||
$this->assertEquals( $pattern->get_title(), $block_pattern['title'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean registered patterns and categories
|
||||
*/
|
||||
private function cleanup_patterns() {
|
||||
$registry = \WP_Block_Patterns_Registry::get_instance();
|
||||
$block_patterns = $registry->get_all_registered();
|
||||
foreach ( $block_patterns as $pattern ) {
|
||||
$registry->unregister( $pattern['name'] );
|
||||
}
|
||||
|
||||
$categories_registry = \WP_Block_Pattern_Categories_Registry::get_instance();
|
||||
$categories = $categories_registry->get_all_registered();
|
||||
foreach ( $categories as $category ) {
|
||||
|
Reference in New Issue
Block a user