Use option filters instead of synchronization Woo email styles
With this change the Woo template editor will never overwrite Woo commerce settings, but replace values of those settings using hooks. [MAILPOET-3645]
This commit is contained in:
committed by
Veljko V
parent
7158f879aa
commit
d5f6f63ebe
@ -377,11 +377,9 @@ class Initializer {
|
||||
private function setupWoocommerceTransactionalEmails() {
|
||||
$wcEnabled = $this->wcHelper->isWooCommerceActive();
|
||||
$optInEnabled = $this->settings->get('woocommerce.use_mailpoet_editor', false);
|
||||
if ($wcEnabled) {
|
||||
$this->wcTransactionalEmails->enableEmailSettingsSyncToWooCommerce();
|
||||
if ($optInEnabled) {
|
||||
$this->wcTransactionalEmails->useTemplateForWoocommerceEmails();
|
||||
}
|
||||
if ($wcEnabled && $optInEnabled) {
|
||||
$this->wcTransactionalEmails->overrideStylesForWooEmails();
|
||||
$this->wcTransactionalEmails->useTemplateForWoocommerceEmails();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -459,4 +459,12 @@ class NewsletterEntity {
|
||||
$criteria->where($expr->neq('countToProcess', 0));
|
||||
return $this->queues->matching($criteria);
|
||||
}
|
||||
|
||||
public function getGlobalStyle(string $category, string $style): ?string {
|
||||
$body = $this->getBody();
|
||||
if ($body === null) {
|
||||
return null;
|
||||
}
|
||||
return $body['globalStyles'][$category][$style] ?? null;
|
||||
}
|
||||
}
|
||||
|
@ -60,10 +60,6 @@ class TransactionalEmailHooks {
|
||||
});
|
||||
}
|
||||
|
||||
public function enableEmailSettingsSyncToWooCommerce() {
|
||||
$this->wp->addFilter('mailpoet_api_newsletters_save_after', [$this, 'syncEmailSettingsToWooCommerce']);
|
||||
}
|
||||
|
||||
private function getNewsletter(): NewsletterEntity {
|
||||
$newsletter = $this->newsletterRepository->findOneById($this->settings->get(TransactionalEmails::SETTING_EMAIL_ID));
|
||||
if (!$newsletter instanceof NewsletterEntity) {
|
||||
@ -72,21 +68,22 @@ class TransactionalEmailHooks {
|
||||
return $newsletter;
|
||||
}
|
||||
|
||||
public function syncEmailSettingsToWooCommerce(array $newsletterData) {
|
||||
if ($newsletterData['type'] !== NewsletterEntity::TYPE_WC_TRANSACTIONAL_EMAIL) {
|
||||
return $newsletterData;
|
||||
}
|
||||
|
||||
$styles = $newsletterData['body']['globalStyles'];
|
||||
$optionsToSync = [
|
||||
'woocommerce_email_background_color' => $styles['body']['backgroundColor'],
|
||||
'woocommerce_email_base_color' => $styles['woocommerce']['brandingColor'],
|
||||
'woocommerce_email_body_background_color' => $styles['wrapper']['backgroundColor'],
|
||||
'woocommerce_email_text_color' => $styles['text']['fontColor'],
|
||||
];
|
||||
foreach ($optionsToSync as $wcName => $value) {
|
||||
$this->wp->updateOption($wcName, $value);
|
||||
}
|
||||
return $newsletterData;
|
||||
public function overrideStylesForWooEmails() {
|
||||
$this->wp->addAction('option_woocommerce_email_background_color', function($value) {
|
||||
$newsletter = $this->getNewsletter();
|
||||
return $newsletter->getGlobalStyle('body', 'backgroundColor') ?? $value;
|
||||
});
|
||||
$this->wp->addAction('option_woocommerce_email_base_color', function($value) {
|
||||
$newsletter = $this->getNewsletter();
|
||||
return $newsletter->getGlobalStyle('woocommerce', 'brandingColor') ?? $value;
|
||||
});
|
||||
$this->wp->addAction('option_woocommerce_email_body_background_color', function($value) {
|
||||
$newsletter = $this->getNewsletter();
|
||||
return $newsletter->getGlobalStyle('wrapper', 'backgroundColor') ?? $value;
|
||||
});
|
||||
$this->wp->addAction('option_woocommerce_email_text_color', function($value) {
|
||||
$newsletter = $this->getNewsletter();
|
||||
return $newsletter->getGlobalStyle('text', 'fontColor') ?? $value;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -3,8 +3,6 @@
|
||||
namespace MailPoet\WooCommerce;
|
||||
|
||||
use Codeception\Stub;
|
||||
use MailPoet\API\JSON\ResponseBuilders\NewslettersResponseBuilder;
|
||||
use MailPoet\DI\ContainerWrapper;
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Newsletter\Editor\LayoutHelper as L;
|
||||
@ -24,12 +22,17 @@ class TransactionalEmailHooksTest extends \MailPoetTest {
|
||||
/** @var NewslettersRepository */
|
||||
private $newslettersRepository;
|
||||
|
||||
/** @var WPFunctions */
|
||||
private $wp;
|
||||
|
||||
public function _before() {
|
||||
$this->settings = $this->diContainer->get(SettingsController::class);
|
||||
$this->originalWcSettings = $this->settings->get('woocommerce');
|
||||
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
|
||||
$this->wp = $this->diContainer->get(WPFunctions::class);
|
||||
}
|
||||
|
||||
public function testItSynchronizesEmailSettingsToWooCommerce() {
|
||||
public function testItCanReplaceWoocommerceEmailStyles() {
|
||||
$newsletter = new NewsletterEntity;
|
||||
$newsletter->setType(Newsletter::TYPE_WC_TRANSACTIONAL_EMAIL);
|
||||
$newsletter->setSubject('WooCommerce Transactional Email');
|
||||
@ -85,31 +88,26 @@ class TransactionalEmailHooksTest extends \MailPoetTest {
|
||||
]);
|
||||
$this->newslettersRepository->persist($newsletter);
|
||||
$this->newslettersRepository->flush();
|
||||
$this->settings->set(TransactionalEmails::SETTING_EMAIL_ID, $newsletter->getId());
|
||||
|
||||
$options = [];
|
||||
$wp = Stub::make(new WPFunctions, [
|
||||
'updateOption' => function($name, $value) use (&$options) {
|
||||
$options[$name] = $value;
|
||||
},
|
||||
'getOption' => function($name) use (&$options) {
|
||||
return $options[$name];
|
||||
},
|
||||
]);
|
||||
// Set woo options
|
||||
$this->wp->updateOption('woocommerce_email_background_color', 'white');
|
||||
$this->wp->updateOption('woocommerce_email_base_color', 'red');
|
||||
$this->wp->updateOption('woocommerce_email_body_background_color', 'blue');
|
||||
$this->wp->updateOption('woocommerce_email_text_color', 'black');
|
||||
|
||||
$transactionalEmails = new TransactionalEmailHooks(
|
||||
$wp,
|
||||
$this->settings,
|
||||
ContainerWrapper::getInstance()->get(Renderer::class)
|
||||
);
|
||||
$transactionalEmails->enableEmailSettingsSyncToWooCommerce();
|
||||
expect($this->wp->getOption('woocommerce_email_background_color'))->equals('white');
|
||||
expect($this->wp->getOption('woocommerce_email_base_color'))->equals('red');
|
||||
expect($this->wp->getOption('woocommerce_email_body_background_color'))->equals('blue');
|
||||
expect($this->wp->getOption('woocommerce_email_text_color'))->equals('black');
|
||||
|
||||
$newsletterData = $this->diContainer->get(NewslettersResponseBuilder::class)->build($newsletter);
|
||||
$wp->applyFilters('mailpoet_api_newsletters_save_after', $newsletterData);
|
||||
$transactionalEmails = $this->diContainer->get(TransactionalEmailHooks::class);
|
||||
$transactionalEmails->overrideStylesForWooEmails();
|
||||
|
||||
expect($wp->getOption('woocommerce_email_background_color'))->equals('#777777');
|
||||
expect($wp->getOption('woocommerce_email_base_color'))->equals('#888888');
|
||||
expect($wp->getOption('woocommerce_email_body_background_color'))->equals('#666666');
|
||||
expect($wp->getOption('woocommerce_email_text_color'))->equals('#111111');
|
||||
expect($this->wp->getOption('woocommerce_email_background_color'))->equals('#777777');
|
||||
expect($this->wp->getOption('woocommerce_email_base_color'))->equals('#888888');
|
||||
expect($this->wp->getOption('woocommerce_email_body_background_color'))->equals('#666666');
|
||||
expect($this->wp->getOption('woocommerce_email_text_color'))->equals('#111111');
|
||||
}
|
||||
|
||||
public function testUseTemplateForWCEmails() {
|
||||
|
Reference in New Issue
Block a user