diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 608735aa79..67120bfede 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -297,6 +297,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Util\Url::class)->setPublic(true); $container->autowire(\MailPoet\Util\Installation::class); $container->autowire(\MailPoet\Util\License\Features\Subscribers::class); + $container->autowire(\MailPoet\Util\License\License::class); // WooCommerce $container->autowire(\MailPoet\WooCommerce\Helper::class)->setPublic(true); $container->autowire(\MailPoet\WooCommerce\Settings::class)->setPublic(true); diff --git a/lib/Newsletter/Renderer/Renderer.php b/lib/Newsletter/Renderer/Renderer.php index 71622f6504..593cb7af34 100644 --- a/lib/Newsletter/Renderer/Renderer.php +++ b/lib/Newsletter/Renderer/Renderer.php @@ -26,9 +26,9 @@ class Renderer { /** @var Bridge */ private $bridge; - public $premiumActivated; - public $mssActivated; - private $template; + /** @var License */ + private $license; + const NEWSLETTER_TEMPLATE = 'Template.html'; const FILTER_POST_PROCESS = 'mailpoet_rendering_post_process'; @@ -37,16 +37,15 @@ class Renderer { Columns\Renderer $columnsRenderer, Preprocessor $preprocessor, \MailPoetVendor\CSS $cSSInliner, - Bridge $bridge + Bridge $bridge, + License $license ) { $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(); - $this->mssActivated = $this->bridge->isMPSendingServiceEnabled(); + $this->license = $license; } /** @@ -64,7 +63,11 @@ class Renderer { ? $body['globalStyles'] : []; - if (!$this->premiumActivated && !$this->mssActivated && !$preview) { + if ( + !$this->license->hasLicense() + && !$this->bridge->isMailpoetSendingServiceEnabled() + && !$preview + ) { $content = $this->addMailpoetLogoContentBlock($content, $styles); } @@ -73,13 +76,16 @@ class Renderer { $renderedStyles = $this->renderStyles($styles); $customFontsLinks = StylesHelper::getCustomFontsLinks($styles); - $template = $this->injectContentIntoTemplate($this->template, [ - htmlspecialchars($newsletter['subject']), - $renderedStyles, - $customFontsLinks, - EHelper::escapeHtmlText($newsletter['preheader']), - $renderedBody, - ]); + $template = $this->injectContentIntoTemplate( + (string)file_get_contents(dirname(__FILE__) . '/' . self::NEWSLETTER_TEMPLATE), + [ + htmlspecialchars($newsletter['subject']), + $renderedStyles, + $customFontsLinks, + EHelper::escapeHtmlText($newsletter['preheader']), + $renderedBody, + ] + ); if ($template === null) { $template = ''; } diff --git a/lib/Services/Bridge.php b/lib/Services/Bridge.php index 139bbcca39..06227c2966 100644 --- a/lib/Services/Bridge.php +++ b/lib/Services/Bridge.php @@ -53,6 +53,16 @@ class Bridge { } } + public function isMailpoetSendingServiceEnabled() { + try { + $mailerConfig = SettingsController::getInstance()->get(Mailer::MAILER_CONFIG_SETTING_NAME); + return !empty($mailerConfig['method']) + && $mailerConfig['method'] === Mailer::METHOD_MAILPOET; + } catch (\Exception $e) { + return false; + } + } + public static function isMSSKeySpecified() { $settings = SettingsController::getInstance(); $key = $settings->get(self::API_KEY_SETTING_NAME); diff --git a/lib/Util/License/License.php b/lib/Util/License/License.php index d80b8d126c..3e2bdb96db 100644 --- a/lib/Util/License/License.php +++ b/lib/Util/License/License.php @@ -13,4 +13,8 @@ class License { } return $license; } + + public function hasLicense(): bool { + return (bool)self::getLicense(); + } } diff --git a/tests/integration/Newsletter/RendererTest.php b/tests/integration/Newsletter/RendererTest.php index 4c429e4719..01578cd646 100644 --- a/tests/integration/Newsletter/RendererTest.php +++ b/tests/integration/Newsletter/RendererTest.php @@ -12,13 +12,25 @@ use MailPoet\Newsletter\Renderer\Blocks\Social; use MailPoet\Newsletter\Renderer\Blocks\Spacer; use MailPoet\Newsletter\Renderer\Blocks\Text; use MailPoet\Newsletter\Renderer\Columns\Renderer as ColumnRenderer; +use MailPoet\Newsletter\Renderer\Preprocessor; use MailPoet\Newsletter\Renderer\Renderer; +use MailPoet\Services\Bridge; +use MailPoet\Util\License\License; +use PHPUnit\Framework\MockObject\MockObject; class RendererTest extends \MailPoetTest { public $dOMParser; public $columnRenderer; + + /** @var Renderer & MockObject */ public $renderer; public $newsletter; + + /** @var License & MockObject */ + private $license; + + /** @var Bridge & MockObject */ + private $bridge; const COLUMN_BASE_WIDTH = 660; public function _before() { @@ -33,7 +45,16 @@ class RendererTest extends \MailPoetTest { 'type' => 'standard', 'status' => 'active', ]; - $this->renderer = $this->diContainer->get(Renderer::class); + $this->license = $this->createMock(License::class); + $this->bridge = $this->createMock(Bridge::class); + $this->renderer = new Renderer( + $this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\Renderer::class), + $this->diContainer->get(ColumnRenderer::class), + $this->diContainer->get(Preprocessor::class), + $this->diContainer->get(\MailPoetVendor\CSS::class), + $this->bridge, + $this->license + ); $this->columnRenderer = new ColumnRenderer(); $this->dOMParser = new \pQuery(); } @@ -564,8 +585,8 @@ class RendererTest extends \MailPoetTest { } public function testItDoesNotAddMailpoetLogoWhenPremiumIsActive() { - $this->renderer->mssActivated = false; - $this->renderer->premiumActivated = true; + $this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(false); + $this->license->method('hasLicense')->willReturn(true); $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $template = $this->renderer->render($this->newsletter, false); @@ -573,8 +594,8 @@ class RendererTest extends \MailPoetTest { } public function testItDoesNotAddMailpoetLogoWhenMSSIsActive() { - $this->renderer->premiumActivated = false; - $this->renderer->mssActivated = true; + $this->license->method('hasLicense')->willReturn(false); + $this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(true); $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $template = $this->renderer->render($this->newsletter, false); @@ -582,8 +603,8 @@ class RendererTest extends \MailPoetTest { } public function testItDoesNotAddMailpoetLogoWhenPreviewIsEnabled() { - $this->renderer->mssActivated = false; - $this->renderer->premiumActivated = false; + $this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(false); + $this->license->method('hasLicense')->willReturn(false); $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $template = $this->renderer->render($this->newsletter, true); @@ -592,8 +613,8 @@ class RendererTest extends \MailPoetTest { public function testItAddsMailpoetLogo() { $this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); - $this->renderer->mssActivated = false; - $this->renderer->premiumActivated = false; + $this->bridge->method('isMailpoetSendingServiceEnabled')->willReturn(false); + $this->license->method('hasLicense')->willReturn(false); $template = $this->renderer->render($this->newsletter, false); expect($template['html'])->contains('mailpoet_logo_newsletter.png'); diff --git a/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php b/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php index 821242a9b2..f8bbb7a886 100644 --- a/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php +++ b/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php @@ -8,6 +8,7 @@ use MailPoet\Newsletter\Editor\LayoutHelper as L; use MailPoet\Newsletter\Renderer\Preprocessor; use MailPoet\Newsletter\Renderer\Renderer as NewsletterRenderer; use MailPoet\Services\Bridge; +use MailPoet\Util\License\License; use MailPoetVendor\csstidy; class RendererTest extends \MailPoetTest { @@ -53,7 +54,8 @@ class RendererTest extends \MailPoetTest { ) ), $this->diContainer->get(\MailPoetVendor\CSS::class), - $this->diContainer->get(Bridge::class) + $this->diContainer->get(Bridge::class), + $this->diContainer->get(License::class) ); $renderer = new Renderer(new csstidy, $newsletterRenderer); @@ -82,7 +84,8 @@ class RendererTest extends \MailPoetTest { ) ), $this->diContainer->get(\MailPoetVendor\CSS::class), - $this->diContainer->get(Bridge::class) + $this->diContainer->get(Bridge::class), + $this->diContainer->get(License::class) ); $renderer = new Renderer(new csstidy, $newsletterRenderer); $renderer->render($this->newsletter);