Return input & output filters back to API endpoint

[MAILPOET-2900]
This commit is contained in:
Jan Jakeš
2020-05-13 13:58:23 +02:00
committed by Veljko V
parent 98c78c5c24
commit f986da4d7f
4 changed files with 13 additions and 19 deletions

View File

@ -143,9 +143,11 @@ class Newsletters extends APIEndpoint {
}
public function save($data = []) {
$data = $this->wp->applyFilters('mailpoet_api_newsletters_save_before', $data);
$newsletter = $this->newsletterSaveController->save($data);
$response = $this->newslettersResponseBuilder->build($newsletter);
$previewUrl = $this->getViewInBrowserUrl($newsletter);
$response = $this->wp->applyFilters('mailpoet_api_newsletters_save_after', $response);
return $this->successResponse($response, ['preview_url' => $previewUrl]);
}

View File

@ -23,7 +23,6 @@ use MailPoet\Services\AuthorizedEmailsController;
use MailPoet\Settings\SettingsController;
use MailPoet\UnexpectedValueException;
use MailPoet\WP\Emoji;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Doctrine\ORM\EntityManager;
class NewsletterSaveController {
@ -60,9 +59,6 @@ class NewsletterSaveController {
/** @var SettingsController */
private $settings;
/** @var WPFunctions */
private $wp;
public function __construct(
AuthorizedEmailsController $authorizedEmailsController,
Emoji $emoji,
@ -74,8 +70,7 @@ class NewsletterSaveController {
NewsletterTemplatesRepository $newsletterTemplatesRepository,
PostNotificationScheduler $postNotificationScheduler,
ScheduledTasksRepository $scheduledTasksRepository,
SettingsController $settings,
WPFunctions $wp
SettingsController $settings
) {
$this->authorizedEmailsController = $authorizedEmailsController;
$this->emoji = $emoji;
@ -88,12 +83,9 @@ class NewsletterSaveController {
$this->postNotificationScheduler = $postNotificationScheduler;
$this->scheduledTasksRepository = $scheduledTasksRepository;
$this->settings = $settings;
$this->wp = $wp;
}
public function save(array $data = []): NewsletterEntity {
$data = $this->wp->applyFilters('mailpoet_api_newsletters_save_before', $data);
if (!empty($data['template_id'])) {
$template = $this->newsletterTemplatesRepository->findOneById($data['template_id']);
if ($template) {
@ -128,8 +120,6 @@ class NewsletterSaveController {
$this->rescheduleIfNeeded($newsletter, $newsletterModel);
$this->updateQueue($newsletter, $newsletterModel, $data['options'] ?? []);
$this->wp->doAction('mailpoet_api_newsletters_save_after', $newsletterModel);
$this->authorizedEmailsController->onNewsletterSenderAddressUpdate($newsletter, $oldSenderAddress);
return $newsletter;
}

View File

@ -130,15 +130,15 @@ class TransactionalEmails {
}
public function enableEmailSettingsSyncToWooCommerce() {
$this->wp->addAction('mailpoet_api_newsletters_save_after', [$this, 'syncEmailSettingsToWooCommerce']);
$this->wp->addFilter('mailpoet_api_newsletters_save_after', [$this, 'syncEmailSettingsToWooCommerce']);
}
public function syncEmailSettingsToWooCommerce(Newsletter $newsletter) {
if ($newsletter->type !== NewsletterEntity::TYPE_WC_TRANSACTIONAL_EMAIL) {
return false;
public function syncEmailSettingsToWooCommerce(array $newsletterData) {
if ($newsletterData['type'] !== NewsletterEntity::TYPE_WC_TRANSACTIONAL_EMAIL) {
return $newsletterData;
}
$newsletterArray = $newsletter->asArray();
$styles = $newsletterArray['body']['globalStyles'];
$styles = $newsletterData['body']['globalStyles'];
$optionsToSync = [
'woocommerce_email_background_color' => $styles['body']['backgroundColor'],
'woocommerce_email_base_color' => $styles['woocommerce']['brandingColor'],
@ -148,6 +148,7 @@ class TransactionalEmails {
foreach ($optionsToSync as $wcName => $value) {
$this->wp->updateOption($wcName, $value);
}
return $newsletterData;
}
public function getWCEmailSettings() {

View File

@ -3,6 +3,7 @@
namespace MailPoet\WooCommerce;
use Codeception\Stub;
use MailPoet\API\JSON\ResponseBuilders\NewslettersResponseBuilder;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Models\Newsletter;
@ -160,8 +161,8 @@ class TransactionalEmailsTest extends \MailPoetTest {
);
$transactionalEmails->enableEmailSettingsSyncToWooCommerce();
$newsletter = Newsletter::findOne($newsletter->getId());
$wp->doAction('mailpoet_api_newsletters_save_after', $newsletter);
$newsletterData = $this->diContainer->get(NewslettersResponseBuilder::class)->build($newsletter);
$wp->applyFilters('mailpoet_api_newsletters_save_after', $newsletterData);
expect($wp->getOption('woocommerce_email_background_color'))->equals('#777777');
expect($wp->getOption('woocommerce_email_base_color'))->equals('#888888');