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 = []) { public function save($data = []) {
$data = $this->wp->applyFilters('mailpoet_api_newsletters_save_before', $data);
$newsletter = $this->newsletterSaveController->save($data); $newsletter = $this->newsletterSaveController->save($data);
$response = $this->newslettersResponseBuilder->build($newsletter); $response = $this->newslettersResponseBuilder->build($newsletter);
$previewUrl = $this->getViewInBrowserUrl($newsletter); $previewUrl = $this->getViewInBrowserUrl($newsletter);
$response = $this->wp->applyFilters('mailpoet_api_newsletters_save_after', $response);
return $this->successResponse($response, ['preview_url' => $previewUrl]); return $this->successResponse($response, ['preview_url' => $previewUrl]);
} }

View File

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

View File

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

View File

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