Uses json_encode() instead of serialize() to save rendered newsletter

body
This commit is contained in:
Vlad
2017-12-20 20:45:53 -05:00
parent 8852f6a3f4
commit cb430673f8
4 changed files with 64 additions and 9 deletions

View File

@ -2,6 +2,8 @@
namespace MailPoet\Models; namespace MailPoet\Models;
use MailPoet\Util\Helpers;
if(!defined('ABSPATH')) exit; if(!defined('ABSPATH')) exit;
class ModelValidator extends \Sudzy\Engine { class ModelValidator extends \Sudzy\Engine {
@ -35,9 +37,11 @@ class ModelValidator extends \Sudzy\Engine {
} }
function validateRenderedNewsletterBody($newsletter_body) { function validateRenderedNewsletterBody($newsletter_body) {
$newsletter_body = (!is_serialized($newsletter_body)) ? if(is_serialized($newsletter_body)) {
$newsletter_body : $newsletter_body = unserialize($newsletter_body);
unserialize($newsletter_body); } else if(Helpers::isJson($newsletter_body)) {
$newsletter_body = json_decode($newsletter_body, true);
}
return (is_null($newsletter_body) || (is_array($newsletter_body) && !empty($newsletter_body['html']) && !empty($newsletter_body['text']))); return (is_null($newsletter_body) || (is_array($newsletter_body) && !empty($newsletter_body['html']) && !empty($newsletter_body['text'])));
} }
} }

View File

@ -1,6 +1,7 @@
<?php <?php
namespace MailPoet\Models; namespace MailPoet\Models;
use MailPoet\Util\Helpers;
use MailPoet\WP\Emoji; use MailPoet\WP\Emoji;
if(!defined('ABSPATH')) exit; if(!defined('ABSPATH')) exit;
@ -56,10 +57,10 @@ class SendingQueue extends Model {
if(!is_serialized($this->subscribers) && !is_null($this->subscribers)) { if(!is_serialized($this->subscribers) && !is_null($this->subscribers)) {
$this->set('subscribers', serialize($this->subscribers)); $this->set('subscribers', serialize($this->subscribers));
} }
if(!is_serialized($this->newsletter_rendered_body) && !is_null($this->newsletter_rendered_body)) { if(!Helpers::isJson($this->newsletter_rendered_body) && !is_null($this->newsletter_rendered_body)) {
$this->set( $this->set(
'newsletter_rendered_body', 'newsletter_rendered_body',
serialize($this->encodeEmojisInBody($this->newsletter_rendered_body)) json_encode($this->encodeEmojisInBody($this->newsletter_rendered_body))
); );
} }
// set the default priority to medium // set the default priority to medium
@ -84,9 +85,7 @@ class SendingQueue extends Model {
} }
function getNewsletterRenderedBody($type = false) { function getNewsletterRenderedBody($type = false) {
$rendered_newsletter = (!is_serialized($this->newsletter_rendered_body)) ? $rendered_newsletter = $this->decodeRenderedNewsletterBodyObject($this->newsletter_rendered_body);
$this->newsletter_rendered_body :
$this->decodeEmojisInBody(unserialize($this->newsletter_rendered_body));
return ($type && !empty($rendered_newsletter[$type])) ? return ($type && !empty($rendered_newsletter[$type])) ?
$rendered_newsletter[$type] : $rendered_newsletter[$type] :
$rendered_newsletter; $rendered_newsletter;
@ -165,4 +164,15 @@ class SendingQueue extends Model {
} }
return $this->save(); return $this->save();
} }
private function decodeRenderedNewsletterBodyObject($rendered_body) {
if(is_serialized($rendered_body)) {
return $this->decodeEmojisInBody(unserialize($rendered_body));
}
if(Helpers::isJson($rendered_body)) {
return $this->decodeEmojisInBody(json_decode($rendered_body, true));
}
return $rendered_body;
}
} }

View File

@ -36,5 +36,7 @@ class ModelValidatorTest extends \MailPoetTest {
expect($this->validator->validateRenderedNewsletterBody(serialize(null)))->true(); expect($this->validator->validateRenderedNewsletterBody(serialize(null)))->true();
expect($this->validator->validateRenderedNewsletterBody(serialize(array('html' => 'test', 'text' => 'test'))))->true(); expect($this->validator->validateRenderedNewsletterBody(serialize(array('html' => 'test', 'text' => 'test'))))->true();
expect($this->validator->validateRenderedNewsletterBody(array('html' => 'test', 'text' => 'test')))->true(); expect($this->validator->validateRenderedNewsletterBody(array('html' => 'test', 'text' => 'test')))->true();
expect($this->validator->validateRenderedNewsletterBody(json_encode(null)))->true();
expect($this->validator->validateRenderedNewsletterBody(json_encode(array('html' => 'test', 'text' => 'test'))))->true();
} }
} }

View File

@ -1,12 +1,15 @@
<?php <?php
namespace MailPoet\Test\Models; namespace MailPoet\Test\Models;
use AspectMock\Test as Mock; use AspectMock\Test as Mock;
use MailPoet\Models\SendingQueue; use MailPoet\Models\SendingQueue;
use MailPoet\Util\Helpers;
class SendingQueueTest extends \MailPoetTest { class SendingQueueTest extends \MailPoetTest {
function _before() { function _before() {
$this->queue = SendingQueue::create(); $this->queue = SendingQueue::create();
$this->queue->newsletter_id = 1;
$this->queue->save(); $this->queue->save();
$this->rendered_body = array( $this->rendered_body = array(
@ -35,8 +38,44 @@ class SendingQueueTest extends \MailPoetTest {
$mock->verifyInvokedMultipleTimes('decodeEntities', 2); $mock->verifyInvokedMultipleTimes('decodeEntities', 2);
} }
function testItReadsSerializedRenderedNewsletterBody() {
$queue = $this->queue;
$data = array(
'html' => 'html',
'text' => 'text'
);
$queue->newsletter_rendered_body = serialize($data);
expect($queue->getNewsletterRenderedBody())->equals($data);
}
function testItReadsJsonEncodedRenderedNewsletterBody() {
$queue = $this->queue;
$data = array(
'html' => 'html',
'text' => 'text'
);
$queue->newsletter_rendered_body = json_encode($data);
expect($queue->getNewsletterRenderedBody())->equals($data);
}
function testItJsonEncodesRenderedNewsletterBodyWhenSaving() {
$queue = SendingQueue::create();
$data = array(
'html' => 'html',
'text' => 'text'
);
$queue->newsletter_id = 1;
$queue->newsletter_rendered_body = $data;
$queue->save();
$queue = SendingQueue::findOne($queue->id);
expect(Helpers::isJson($queue->newsletter_rendered_body))->true();
expect(json_decode($queue->newsletter_rendered_body, true))->equals($data);
}
function _after() { function _after() {
Mock::clean(); Mock::clean();
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table); \ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
} }
} }