Use service for fix newsletter API data

[MAILPOET-3430]
This commit is contained in:
Jan Lysý
2021-02-18 09:06:12 +01:00
committed by Veljko V
parent e443e3918d
commit 9441d32bdd
2 changed files with 19 additions and 4 deletions

View File

@ -6,6 +6,7 @@ use MailPoet\API\JSON\Endpoint as APIEndpoint;
use MailPoet\API\JSON\Error as APIError;
use MailPoet\API\JSON\ResponseBuilders\NewsletterTemplatesResponseBuilder;
use MailPoet\Config\AccessControl;
use MailPoet\Newsletter\ApiDataSanitizer;
use MailPoet\NewsletterTemplates\NewsletterTemplatesRepository;
use MailPoet\WP\Functions as WPFunctions;
@ -24,12 +25,17 @@ class NewsletterTemplates extends APIEndpoint {
/** @var NewsletterTemplatesResponseBuilder */
private $newsletterTemplatesResponseBuilder;
/** @var ApiDataSanitizer */
private $apiDataSanitizer;
public function __construct(
NewsletterTemplatesRepository $newsletterTemplatesRepository,
NewsletterTemplatesResponseBuilder $newsletterTemplatesResponseBuilder
NewsletterTemplatesResponseBuilder $newsletterTemplatesResponseBuilder,
ApiDataSanitizer $apiDataSanitizer
) {
$this->newsletterTemplatesRepository = $newsletterTemplatesRepository;
$this->newsletterTemplatesResponseBuilder = $newsletterTemplatesResponseBuilder;
$this->apiDataSanitizer = $apiDataSanitizer;
}
public function get($data = []) {
@ -55,6 +61,8 @@ class NewsletterTemplates extends APIEndpoint {
public function save($data = []) {
ignore_user_abort(true);
$body = $this->apiDataSanitizer->sanitizeBody(json_decode($data['body'], true));
$data['body'] = json_encode($body);
try {
$template = $this->newsletterTemplatesRepository->createOrUpdate($data);
if (!empty($data['categories']) && $data['categories'] === NewsletterTemplatesRepository::RECENTLY_SENT_CATEGORIES) {

View File

@ -68,6 +68,9 @@ class NewsletterSaveController {
/** @var WPFunctions */
private $wp;
/** @var ApiDataSanitizer */
private $dataSanitizer;
public function __construct(
AuthorizedEmailsController $authorizedEmailsController,
Emoji $emoji,
@ -81,7 +84,8 @@ class NewsletterSaveController {
ScheduledTasksRepository $scheduledTasksRepository,
SettingsController $settings,
Security $security,
WPFunctions $wp
WPFunctions $wp,
ApiDataSanitizer $dataSanitizer
) {
$this->authorizedEmailsController = $authorizedEmailsController;
$this->emoji = $emoji;
@ -96,18 +100,21 @@ class NewsletterSaveController {
$this->settings = $settings;
$this->security = $security;
$this->wp = $wp;
$this->dataSanitizer = $dataSanitizer;
}
public function save(array $data = []): NewsletterEntity {
if (!empty($data['template_id'])) {
$template = $this->newsletterTemplatesRepository->findOneById($data['template_id']);
if ($template) {
$data['body'] = json_encode($template->getBody());
$body = $this->dataSanitizer->sanitizeBody($template->getBody() ?: []);
$data['body'] = json_encode($body);
}
}
if (!empty($data['body'])) {
$data['body'] = $this->emoji->encodeForUTF8Column(MP_NEWSLETTERS_TABLE, 'body', $data['body']);
$body = $this->dataSanitizer->sanitizeBody(json_decode($data['body'], true));
$data['body'] = $this->emoji->encodeForUTF8Column(MP_NEWSLETTERS_TABLE, 'body', json_encode($body));
}
$newsletter = isset($data['id']) ? $this->getNewsletter($data) : $this->createNewsletter($data);