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