Use Di for newsletter renderer
[MAILPOET-2899]
This commit is contained in:
@ -279,6 +279,9 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Newsletter\Renderer\Blocks\Social::class);
|
$container->autowire(\MailPoet\Newsletter\Renderer\Blocks\Social::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Renderer\Blocks\Spacer::class);
|
$container->autowire(\MailPoet\Newsletter\Renderer\Blocks\Spacer::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Renderer\Blocks\Text::class);
|
$container->autowire(\MailPoet\Newsletter\Renderer\Blocks\Text::class);
|
||||||
|
$container->autowire(\MailPoet\Newsletter\Renderer\Columns\Renderer::class);
|
||||||
|
$container->autowire(\MailPoet\Newsletter\Renderer\Preprocessor::class);
|
||||||
|
$container->autowire(\MailPoet\Newsletter\Renderer\Renderer::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Segment\NewsletterSegmentRepository::class);
|
$container->autowire(\MailPoet\Newsletter\Segment\NewsletterSegmentRepository::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository::class);
|
$container->autowire(\MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class)->setPublic(true);
|
$container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class)->setPublic(true);
|
||||||
@ -306,6 +309,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\WP\Emoji::class)->setPublic(true);
|
$container->autowire(\MailPoet\WP\Emoji::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\WP\Functions::class)->setPublic(true);
|
$container->autowire(\MailPoet\WP\Functions::class)->setPublic(true);
|
||||||
// Third party classes
|
// Third party classes
|
||||||
|
$container->autowire(\MailPoetVendor\CSS::class)->setClass(\MailPoetVendor\CSS::class);
|
||||||
$container->autowire(\MailPoetVendor\csstidy::class)->setClass(\MailPoetVendor\csstidy::class);
|
$container->autowire(\MailPoetVendor\csstidy::class)->setClass(\MailPoetVendor\csstidy::class);
|
||||||
|
|
||||||
return $container;
|
return $container;
|
||||||
|
@ -6,6 +6,7 @@ use MailPoet\AutomaticEmails\WooCommerce\Events\AbandonedCart;
|
|||||||
use MailPoet\AutomaticEmails\WooCommerce\Events\FirstPurchase;
|
use MailPoet\AutomaticEmails\WooCommerce\Events\FirstPurchase;
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\Events\PurchasedInCategory;
|
use MailPoet\AutomaticEmails\WooCommerce\Events\PurchasedInCategory;
|
||||||
use MailPoet\AutomaticEmails\WooCommerce\Events\PurchasedProduct;
|
use MailPoet\AutomaticEmails\WooCommerce\Events\PurchasedProduct;
|
||||||
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoet\Entities\NewsletterEntity;
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
use MailPoet\Entities\ScheduledTaskEntity;
|
use MailPoet\Entities\ScheduledTaskEntity;
|
||||||
use MailPoet\Newsletter\Renderer\Renderer;
|
use MailPoet\Newsletter\Renderer\Renderer;
|
||||||
@ -570,7 +571,7 @@ class Newsletter extends Model {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function render() {
|
public function render() {
|
||||||
$renderer = new Renderer();
|
$renderer = ContainerWrapper::getInstance()->get(Renderer::class);
|
||||||
return $renderer->render($this);
|
return $renderer->render($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,14 +21,19 @@ class SendPreviewController {
|
|||||||
/** @var WPFunctions */
|
/** @var WPFunctions */
|
||||||
private $wp;
|
private $wp;
|
||||||
|
|
||||||
|
/** @var Renderer */
|
||||||
|
private $renderer;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
Mailer $mailer,
|
Mailer $mailer,
|
||||||
MetaInfo $mailerMetaInfo,
|
MetaInfo $mailerMetaInfo,
|
||||||
|
Renderer $renderer,
|
||||||
WPFunctions $wp
|
WPFunctions $wp
|
||||||
) {
|
) {
|
||||||
$this->mailer = $mailer;
|
$this->mailer = $mailer;
|
||||||
$this->mailerMetaInfo = $mailerMetaInfo;
|
$this->mailerMetaInfo = $mailerMetaInfo;
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
|
$this->renderer = $renderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function sendPreview(NewsletterEntity $newsletter, string $emailAddress) {
|
public function sendPreview(NewsletterEntity $newsletter, string $emailAddress) {
|
||||||
@ -38,8 +43,7 @@ class SendPreviewController {
|
|||||||
throw new SendPreviewException("Newsletter with ID '{$newsletter->getId()}' not found");
|
throw new SendPreviewException("Newsletter with ID '{$newsletter->getId()}' not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
$renderer = new Renderer();
|
$renderedNewsletter = $this->renderer->render($newsletterModel, $preview = true);
|
||||||
$renderedNewsletter = $renderer->render($newsletterModel, $preview = true);
|
|
||||||
$divider = '***MailPoet***';
|
$divider = '***MailPoet***';
|
||||||
$dataForShortcodes = array_merge(
|
$dataForShortcodes = array_merge(
|
||||||
[$newsletter->getSubject()],
|
[$newsletter->getSubject()],
|
||||||
|
@ -3,38 +3,50 @@
|
|||||||
namespace MailPoet\Newsletter\Renderer;
|
namespace MailPoet\Newsletter\Renderer;
|
||||||
|
|
||||||
use MailPoet\Config\Env;
|
use MailPoet\Config\Env;
|
||||||
use MailPoet\DI\ContainerWrapper;
|
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
|
use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
|
||||||
use MailPoet\Services\Bridge;
|
use MailPoet\Services\Bridge;
|
||||||
use MailPoet\Util\License\License;
|
use MailPoet\Util\License\License;
|
||||||
use MailPoet\Util\pQuery\DomNode;
|
use MailPoet\Util\pQuery\DomNode;
|
||||||
use MailPoet\WooCommerce\TransactionalEmails;
|
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
class Renderer {
|
class Renderer {
|
||||||
public $blocksRenderer;
|
/** @var Blocks\Renderer */
|
||||||
public $columnsRenderer;
|
private $blocksRenderer;
|
||||||
public $preprocessor;
|
|
||||||
public $cSSInliner;
|
/** @var Columns\Renderer */
|
||||||
|
private $columnsRenderer;
|
||||||
|
|
||||||
|
/** @var Preprocessor */
|
||||||
|
private $preprocessor;
|
||||||
|
|
||||||
|
/** @var \MailPoetVendor\CSS */
|
||||||
|
private $cSSInliner;
|
||||||
|
|
||||||
|
/** @var Bridge */
|
||||||
|
private $bridge;
|
||||||
|
|
||||||
public $premiumActivated;
|
public $premiumActivated;
|
||||||
public $mssActivated;
|
public $mssActivated;
|
||||||
private $template;
|
private $template;
|
||||||
const NEWSLETTER_TEMPLATE = 'Template.html';
|
const NEWSLETTER_TEMPLATE = 'Template.html';
|
||||||
const FILTER_POST_PROCESS = 'mailpoet_rendering_post_process';
|
const FILTER_POST_PROCESS = 'mailpoet_rendering_post_process';
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct(
|
||||||
$this->blocksRenderer = ContainerWrapper::getInstance()->get(Blocks\Renderer::class);
|
Blocks\Renderer $blocksRenderer,
|
||||||
$this->columnsRenderer = new Columns\Renderer();
|
Columns\Renderer $columnsRenderer,
|
||||||
$this->preprocessor = new Preprocessor(
|
Preprocessor $preprocessor,
|
||||||
$this->blocksRenderer,
|
\MailPoetVendor\CSS $cSSInliner,
|
||||||
ContainerWrapper::getInstance()->get(TransactionalEmails::class)
|
Bridge $bridge
|
||||||
);
|
) {
|
||||||
$this->cSSInliner = new \MailPoetVendor\CSS();
|
$this->blocksRenderer = $blocksRenderer;
|
||||||
|
$this->columnsRenderer = $columnsRenderer;
|
||||||
|
$this->preprocessor = $preprocessor;
|
||||||
|
$this->cSSInliner = $cSSInliner;
|
||||||
|
$this->bridge = $bridge;
|
||||||
$this->template = file_get_contents(dirname(__FILE__) . '/' . self::NEWSLETTER_TEMPLATE);
|
$this->template = file_get_contents(dirname(__FILE__) . '/' . self::NEWSLETTER_TEMPLATE);
|
||||||
$this->premiumActivated = License::getLicense();
|
$this->premiumActivated = License::getLicense();
|
||||||
$bridge = new Bridge();
|
$this->mssActivated = $this->bridge->isMPSendingServiceEnabled();
|
||||||
$this->mssActivated = $bridge->isMPSendingServiceEnabled();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -94,16 +106,15 @@ class Renderer {
|
|||||||
? $content['blocks']
|
? $content['blocks']
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
$_this = $this;
|
$renderedContent = [];
|
||||||
$renderedContent = array_map(function($contentBlock) use($_this, $newsletter) {
|
foreach ($blocks as $contentBlock) {
|
||||||
|
$columnsData = $this->blocksRenderer->render($newsletter, $contentBlock);
|
||||||
|
|
||||||
$columnsData = $_this->blocksRenderer->render($newsletter, $contentBlock);
|
$renderedContent[] = $this->columnsRenderer->render(
|
||||||
|
|
||||||
return $_this->columnsRenderer->render(
|
|
||||||
$contentBlock,
|
$contentBlock,
|
||||||
$columnsData
|
$columnsData
|
||||||
);
|
);
|
||||||
}, $blocks);
|
}
|
||||||
return implode('', $renderedContent);
|
return implode('', $renderedContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,9 +18,17 @@ class ViewInBrowserRenderer {
|
|||||||
/** @var bool */
|
/** @var bool */
|
||||||
private $isTrackingEnabled;
|
private $isTrackingEnabled;
|
||||||
|
|
||||||
public function __construct(Emoji $emoji, SettingsController $settings) {
|
/** @var Renderer */
|
||||||
|
private $renderer;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
Emoji $emoji,
|
||||||
|
SettingsController $settings,
|
||||||
|
Renderer $renderer
|
||||||
|
) {
|
||||||
$this->emoji = $emoji;
|
$this->emoji = $emoji;
|
||||||
$this->isTrackingEnabled = $settings->get('tracking.enabled');
|
$this->isTrackingEnabled = $settings->get('tracking.enabled');
|
||||||
|
$this->renderer = $renderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function render(
|
public function render(
|
||||||
@ -47,8 +55,7 @@ class ViewInBrowserRenderer {
|
|||||||
$newsletterBody = str_replace(Links::DATA_TAG_OPEN, '', $newsletterBody);
|
$newsletterBody = str_replace(Links::DATA_TAG_OPEN, '', $newsletterBody);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$renderer = new Renderer();
|
$newsletterBody = $this->renderer->render($newsletter, $wpUserPreview, 'html');
|
||||||
$newsletterBody = $renderer->render($newsletter, $wpUserPreview, 'html');
|
|
||||||
}
|
}
|
||||||
$shortcodes = new Shortcodes(
|
$shortcodes = new Shortcodes(
|
||||||
$newsletter,
|
$newsletter,
|
||||||
|
@ -8,6 +8,7 @@ use MailPoet\Entities\NewsletterEntity;
|
|||||||
use MailPoet\Mailer\Mailer;
|
use MailPoet\Mailer\Mailer;
|
||||||
use MailPoet\Mailer\MailerError;
|
use MailPoet\Mailer\MailerError;
|
||||||
use MailPoet\Mailer\MetaInfo;
|
use MailPoet\Mailer\MetaInfo;
|
||||||
|
use MailPoet\Newsletter\Renderer\Renderer;
|
||||||
use MailPoet\Newsletter\Url;
|
use MailPoet\Newsletter\Url;
|
||||||
use MailPoet\Subscription\SubscriptionUrlFactory;
|
use MailPoet\Subscription\SubscriptionUrlFactory;
|
||||||
use MailPoet\Util\Security;
|
use MailPoet\Util\Security;
|
||||||
@ -63,7 +64,12 @@ class SendPreviewControllerTest extends \MailPoetTest {
|
|||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$sendPreviewController = new SendPreviewController($mailer, new MetaInfo(), new WPFunctions());
|
$sendPreviewController = new SendPreviewController(
|
||||||
|
$mailer,
|
||||||
|
new MetaInfo(),
|
||||||
|
$this->diContainer->get(Renderer::class),
|
||||||
|
new WPFunctions()
|
||||||
|
);
|
||||||
$sendPreviewController->sendPreview($this->newsletter, 'test@subscriber.com');
|
$sendPreviewController->sendPreview($this->newsletter, 'test@subscriber.com');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +91,12 @@ class SendPreviewControllerTest extends \MailPoetTest {
|
|||||||
$this->expectException(SendPreviewException::class);
|
$this->expectException(SendPreviewException::class);
|
||||||
$this->expectExceptionMessage('The email could not be sent: failed');
|
$this->expectExceptionMessage('The email could not be sent: failed');
|
||||||
|
|
||||||
$sendPreviewController = new SendPreviewController($mailer, new MetaInfo(), new WPFunctions());
|
$sendPreviewController = new SendPreviewController(
|
||||||
|
$mailer,
|
||||||
|
new MetaInfo(),
|
||||||
|
$this->diContainer->get(Renderer::class),
|
||||||
|
new WPFunctions()
|
||||||
|
);
|
||||||
$sendPreviewController->sendPreview($this->newsletter, 'test@subscriber.com');
|
$sendPreviewController->sendPreview($this->newsletter, 'test@subscriber.com');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,8 @@ class RendererTest extends \MailPoetTest {
|
|||||||
public $newsletter;
|
public $newsletter;
|
||||||
const COLUMN_BASE_WIDTH = 660;
|
const COLUMN_BASE_WIDTH = 660;
|
||||||
|
|
||||||
public function __construct() {
|
public function _before() {
|
||||||
parent::__construct();
|
parent::_before();
|
||||||
$this->newsletter = [
|
$this->newsletter = [
|
||||||
'body' => json_decode(
|
'body' => json_decode(
|
||||||
(string)file_get_contents(dirname(__FILE__) . '/RendererTestData.json'), true
|
(string)file_get_contents(dirname(__FILE__) . '/RendererTestData.json'), true
|
||||||
@ -33,7 +33,7 @@ class RendererTest extends \MailPoetTest {
|
|||||||
'type' => 'standard',
|
'type' => 'standard',
|
||||||
'status' => 'active',
|
'status' => 'active',
|
||||||
];
|
];
|
||||||
$this->renderer = new Renderer();
|
$this->renderer = $this->diContainer->get(Renderer::class);
|
||||||
$this->columnRenderer = new ColumnRenderer();
|
$this->columnRenderer = new ColumnRenderer();
|
||||||
$this->dOMParser = new \pQuery();
|
$this->dOMParser = new \pQuery();
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ use MailPoet\Models\ScheduledTask;
|
|||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Newsletter\Links\Links;
|
use MailPoet\Newsletter\Links\Links;
|
||||||
|
use MailPoet\Newsletter\Renderer\Renderer;
|
||||||
use MailPoet\Router\Router;
|
use MailPoet\Router\Router;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
@ -149,7 +150,11 @@ class ViewInBrowserRendererTest extends \MailPoetTest {
|
|||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
$this->settings->set('tracking.enabled', false);
|
$this->settings->set('tracking.enabled', false);
|
||||||
$viewInBrowser = new ViewInBrowserRenderer($emoji, $this->diContainer->get(SettingsController::class));
|
$viewInBrowser = new ViewInBrowserRenderer(
|
||||||
|
$emoji,
|
||||||
|
$this->diContainer->get(SettingsController::class),
|
||||||
|
$this->diContainer->get(Renderer::class)
|
||||||
|
);
|
||||||
$renderedBody = $viewInBrowser->render(
|
$renderedBody = $viewInBrowser->render(
|
||||||
$preview = false,
|
$preview = false,
|
||||||
$this->newsletter,
|
$this->newsletter,
|
||||||
|
@ -7,6 +7,7 @@ use MailPoet\Models\Newsletter;
|
|||||||
use MailPoet\Newsletter\Editor\LayoutHelper as L;
|
use MailPoet\Newsletter\Editor\LayoutHelper as L;
|
||||||
use MailPoet\Newsletter\Renderer\Preprocessor;
|
use MailPoet\Newsletter\Renderer\Preprocessor;
|
||||||
use MailPoet\Newsletter\Renderer\Renderer as NewsletterRenderer;
|
use MailPoet\Newsletter\Renderer\Renderer as NewsletterRenderer;
|
||||||
|
use MailPoet\Services\Bridge;
|
||||||
use MailPoetVendor\csstidy;
|
use MailPoetVendor\csstidy;
|
||||||
|
|
||||||
class RendererTest extends \MailPoetTest {
|
class RendererTest extends \MailPoetTest {
|
||||||
@ -36,10 +37,11 @@ class RendererTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testGetHTMLBeforeContent() {
|
public function testGetHTMLBeforeContent() {
|
||||||
$renderer = new Renderer(new csstidy);
|
$newsletterRenderer = new NewsletterRenderer(
|
||||||
$newsletterRenderer = new NewsletterRenderer();
|
$this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\Renderer::class),
|
||||||
$newsletterRenderer->preprocessor = new Preprocessor(
|
$this->diContainer->get(\MailPoet\Newsletter\Renderer\Columns\Renderer::class),
|
||||||
$newsletterRenderer->blocksRenderer,
|
new Preprocessor(
|
||||||
|
$this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\Renderer::class),
|
||||||
Stub::make(
|
Stub::make(
|
||||||
\MailPoet\WooCommerce\TransactionalEmails::class,
|
\MailPoet\WooCommerce\TransactionalEmails::class,
|
||||||
[
|
[
|
||||||
@ -49,7 +51,12 @@ class RendererTest extends \MailPoetTest {
|
|||||||
],
|
],
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
),
|
||||||
|
$this->diContainer->get(\MailPoetVendor\CSS::class),
|
||||||
|
$this->diContainer->get(Bridge::class)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$renderer = new Renderer(new csstidy, $newsletterRenderer);
|
||||||
$renderer->render($this->newsletter);
|
$renderer->render($this->newsletter);
|
||||||
$html = $renderer->getHTMLBeforeContent('Heading Text');
|
$html = $renderer->getHTMLBeforeContent('Heading Text');
|
||||||
expect($html)->contains('Some text before heading');
|
expect($html)->contains('Some text before heading');
|
||||||
@ -59,10 +66,11 @@ class RendererTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testGetHTMLAfterContent() {
|
public function testGetHTMLAfterContent() {
|
||||||
$newsletterRenderer = new NewsletterRenderer();
|
$newsletterRenderer = new NewsletterRenderer(
|
||||||
$renderer = new Renderer(new csstidy, $newsletterRenderer);
|
$this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\Renderer::class),
|
||||||
$newsletterRenderer->preprocessor = new Preprocessor(
|
$this->diContainer->get(\MailPoet\Newsletter\Renderer\Columns\Renderer::class),
|
||||||
$newsletterRenderer->blocksRenderer,
|
new Preprocessor(
|
||||||
|
$this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\Renderer::class),
|
||||||
Stub::make(
|
Stub::make(
|
||||||
\MailPoet\WooCommerce\TransactionalEmails::class,
|
\MailPoet\WooCommerce\TransactionalEmails::class,
|
||||||
[
|
[
|
||||||
@ -72,7 +80,11 @@ class RendererTest extends \MailPoetTest {
|
|||||||
],
|
],
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
),
|
||||||
|
$this->diContainer->get(\MailPoetVendor\CSS::class),
|
||||||
|
$this->diContainer->get(Bridge::class)
|
||||||
);
|
);
|
||||||
|
$renderer = new Renderer(new csstidy, $newsletterRenderer);
|
||||||
$renderer->render($this->newsletter);
|
$renderer->render($this->newsletter);
|
||||||
$html = $renderer->getHTMLAfterContent();
|
$html = $renderer->getHTMLAfterContent();
|
||||||
expect($html)->notContains('Some text before heading');
|
expect($html)->notContains('Some text before heading');
|
||||||
@ -82,7 +94,7 @@ class RendererTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testPrefixCss() {
|
public function testPrefixCss() {
|
||||||
$renderer = new Renderer(new csstidy);
|
$renderer = new Renderer(new csstidy, $this->diContainer->get(NewsletterRenderer::class));
|
||||||
$css = $renderer->prefixCss('
|
$css = $renderer->prefixCss('
|
||||||
#some_id {color: black}
|
#some_id {color: black}
|
||||||
.some-class {height: 50px; width: 30px}
|
.some-class {height: 50px; width: 30px}
|
||||||
|
@ -6,7 +6,6 @@ use Codeception\Stub;
|
|||||||
use MailPoet\Newsletter\NewslettersRepository;
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
|
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
|
||||||
use MailPoet\WooCommerce\TransactionalEmails\Renderer;
|
|
||||||
use MailPoet\WooCommerce\TransactionalEmails\Template;
|
use MailPoet\WooCommerce\TransactionalEmails\Template;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user