Extract usage of emoji encoding from the sending queue model [MAILPOET-2460]
This commit is contained in:
@ -15,6 +15,7 @@ use MailPoet\Newsletter\Renderer\PostProcess\OpenTracking;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Statistics\GATracking;
|
||||
use MailPoet\Util\Helpers;
|
||||
use MailPoet\WP\Emoji;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
class Newsletter {
|
||||
@ -33,7 +34,10 @@ class Newsletter {
|
||||
/** @var LoggerFactory */
|
||||
private $logger_factory;
|
||||
|
||||
function __construct(WPFunctions $wp = null, PostsTask $posts_task = null, GATracking $ga_tracking = null) {
|
||||
/** @var Emoji */
|
||||
private $emoji;
|
||||
|
||||
function __construct(WPFunctions $wp = null, PostsTask $posts_task = null, GATracking $ga_tracking = null, Emoji $emoji = null) {
|
||||
$settings = new SettingsController();
|
||||
$this->tracking_enabled = (boolean)$settings->get('tracking.enabled');
|
||||
if ($wp === null) {
|
||||
@ -49,6 +53,10 @@ class Newsletter {
|
||||
}
|
||||
$this->ga_tracking = $ga_tracking;
|
||||
$this->logger_factory = LoggerFactory::getInstance();
|
||||
if ($emoji === null) {
|
||||
$emoji = new Emoji();
|
||||
}
|
||||
$this->emoji = $emoji;
|
||||
}
|
||||
|
||||
function getNewsletterFromQueue($queue) {
|
||||
@ -141,6 +149,7 @@ class Newsletter {
|
||||
if (empty(trim($sending_task->newsletter_rendered_subject))) {
|
||||
$sending_task->newsletter_rendered_subject = WPFunctions::get()->__('No subject', 'mailpoet');
|
||||
}
|
||||
$rendered_newsletter = $this->emoji->encodeEmojisInBody($rendered_newsletter);
|
||||
$sending_task->newsletter_rendered_body = $rendered_newsletter;
|
||||
$sending_task->save();
|
||||
// catch DB errors
|
||||
@ -162,6 +171,7 @@ class Newsletter {
|
||||
// shortcodes and links will be replaced in the subject, html and text body
|
||||
// to speed the processing, join content into a continuous string
|
||||
$rendered_newsletter = $queue->getNewsletterRenderedBody();
|
||||
$rendered_newsletter = $this->emoji->decodeEmojisInBody($rendered_newsletter);
|
||||
$prepared_newsletter = Helpers::joinObject(
|
||||
[
|
||||
$queue->newsletter_rendered_subject,
|
||||
|
@ -208,6 +208,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
$container->autowire(\MailPoet\WooCommerce\Subscription::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\WooCommerce\TransactionalEmails::class);
|
||||
// WordPress
|
||||
$container->autowire(\MailPoet\WP\Emoji::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\WP\Functions::class)->setPublic(true);
|
||||
return $container;
|
||||
}
|
||||
|
@ -5,7 +5,6 @@ namespace MailPoet\Models;
|
||||
use MailPoet\Entities\SendingQueueEntity;
|
||||
use MailPoet\Tasks\Subscribers as TaskSubscribers;
|
||||
use MailPoet\Util\Helpers;
|
||||
use MailPoet\WP\Emoji;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
/**
|
||||
@ -31,15 +30,12 @@ class SendingQueue extends Model {
|
||||
const PRIORITY_MEDIUM = SendingQueueEntity::PRIORITY_MEDIUM;
|
||||
const PRIORITY_LOW = SendingQueueEntity::PRIORITY_LOW;
|
||||
|
||||
private $emoji;
|
||||
|
||||
function __construct() {
|
||||
parent::__construct();
|
||||
|
||||
$this->addValidations('newsletter_rendered_body', [
|
||||
'validRenderedNewsletterBody' => WPFunctions::get()->__('Rendered newsletter body is invalid!', 'mailpoet'),
|
||||
]);
|
||||
$this->emoji = new Emoji();
|
||||
}
|
||||
|
||||
function task() {
|
||||
@ -75,7 +71,7 @@ class SendingQueue extends Model {
|
||||
if (!Helpers::isJson($this->newsletter_rendered_body) && !is_null($this->newsletter_rendered_body)) {
|
||||
$this->set(
|
||||
'newsletter_rendered_body',
|
||||
json_encode($this->encodeEmojisInBody($this->newsletter_rendered_body))
|
||||
json_encode($this->newsletter_rendered_body)
|
||||
);
|
||||
}
|
||||
if (!is_null($this->meta) && !Helpers::isJson($this->meta)) {
|
||||
@ -114,28 +110,6 @@ class SendingQueue extends Model {
|
||||
return (Helpers::isJson($this->meta)) ? json_decode($this->meta, true) : $this->meta;
|
||||
}
|
||||
|
||||
function encodeEmojisInBody($newsletter_rendered_body) {
|
||||
if (is_array($newsletter_rendered_body)) {
|
||||
foreach ($newsletter_rendered_body as $key => $value) {
|
||||
$newsletter_rendered_body[$key] = $this->emoji->encodeForUTF8Column(
|
||||
self::$_table,
|
||||
'newsletter_rendered_body',
|
||||
$value
|
||||
);
|
||||
}
|
||||
}
|
||||
return $newsletter_rendered_body;
|
||||
}
|
||||
|
||||
function decodeEmojisInBody($newsletter_rendered_body) {
|
||||
if (is_array($newsletter_rendered_body)) {
|
||||
foreach ($newsletter_rendered_body as $key => $value) {
|
||||
$newsletter_rendered_body[$key] = $this->emoji->decodeEntities($value);
|
||||
}
|
||||
}
|
||||
return $newsletter_rendered_body;
|
||||
}
|
||||
|
||||
function isSubscriberProcessed($subscriber_id) {
|
||||
if (!empty($this->subscribers)
|
||||
&& ScheduledTaskSubscriber::getTotalCount($this->task_id) === 0
|
||||
@ -161,10 +135,10 @@ class SendingQueue extends Model {
|
||||
|
||||
private function decodeRenderedNewsletterBodyObject($rendered_body) {
|
||||
if (is_serialized($rendered_body)) {
|
||||
return $this->decodeEmojisInBody(unserialize($rendered_body));
|
||||
return unserialize($rendered_body);
|
||||
}
|
||||
if (Helpers::isJson($rendered_body)) {
|
||||
return $this->decodeEmojisInBody(json_decode($rendered_body, true));
|
||||
return json_decode($rendered_body, true);
|
||||
}
|
||||
return $rendered_body;
|
||||
}
|
||||
|
@ -5,14 +5,18 @@ namespace MailPoet\Newsletter;
|
||||
use MailPoet\Newsletter\Links\Links;
|
||||
use MailPoet\Newsletter\Renderer\Renderer;
|
||||
use MailPoet\Newsletter\Shortcodes\Shortcodes;
|
||||
use MailPoet\WP\Emoji;
|
||||
|
||||
class ViewInBrowser {
|
||||
/** @var Emoji */
|
||||
private $emoji;
|
||||
|
||||
/** @var bool */
|
||||
private $is_tracking_enabled;
|
||||
|
||||
function __construct($is_tracking_enabled) {
|
||||
function __construct(Emoji $emoji, $is_tracking_enabled) {
|
||||
$this->is_tracking_enabled = $is_tracking_enabled;
|
||||
$this->emoji = $emoji;
|
||||
}
|
||||
|
||||
function view($data) {
|
||||
@ -31,6 +35,7 @@ class ViewInBrowser {
|
||||
function renderNewsletter($newsletter, $subscriber, $queue, $wp_user_preview) {
|
||||
if ($queue && $queue->getNewsletterRenderedBody()) {
|
||||
$newsletter_body = $queue->getNewsletterRenderedBody('html');
|
||||
$newsletter_body = $this->emoji->decodeEmojisInBody($newsletter_body);
|
||||
// rendered newsletter body has shortcodes converted to links; we need to
|
||||
// isolate "view in browser", "unsubscribe" and "manage subscription" links
|
||||
// and convert them to shortcodes, which later will be replaced with "#" when
|
||||
|
@ -10,6 +10,7 @@ use MailPoet\Newsletter\Url as NewsletterUrl;
|
||||
use MailPoet\Newsletter\ViewInBrowser as NewsletterViewInBrowser;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Subscribers\LinkTokens;
|
||||
use MailPoet\WP\Emoji;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
class ViewInBrowser {
|
||||
@ -28,15 +29,19 @@ class ViewInBrowser {
|
||||
/** @var LinkTokens */
|
||||
private $link_tokens;
|
||||
|
||||
function __construct(AccessControl $access_control, SettingsController $settings, LinkTokens $link_tokens) {
|
||||
/** @var Emoji */
|
||||
private $emoji;
|
||||
|
||||
function __construct(AccessControl $access_control, SettingsController $settings, LinkTokens $link_tokens, Emoji $emoji) {
|
||||
$this->access_control = $access_control;
|
||||
$this->settings = $settings;
|
||||
$this->link_tokens = $link_tokens;
|
||||
$this->emoji = $emoji;
|
||||
}
|
||||
|
||||
function view($data) {
|
||||
$data = $this->_processBrowserPreviewData($data);
|
||||
$view_in_browser = new NewsletterViewInBrowser((bool)$this->settings->get('tracking.enabled'));
|
||||
$view_in_browser = new NewsletterViewInBrowser($this->emoji, (bool)$this->settings->get('tracking.enabled'));
|
||||
return $this->_displayNewsletter($view_in_browser->view($data));
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,28 @@ class Emoji {
|
||||
$this->wp = $wp;
|
||||
}
|
||||
|
||||
function encodeEmojisInBody($newsletter_rendered_body) {
|
||||
if (is_array($newsletter_rendered_body)) {
|
||||
return array_map([$this, 'encodeRenderedBodyForUTF8Column'], $newsletter_rendered_body);
|
||||
}
|
||||
return $this->encodeRenderedBodyForUTF8Column($newsletter_rendered_body);
|
||||
}
|
||||
|
||||
function decodeEmojisInBody($newsletter_rendered_body) {
|
||||
if (is_array($newsletter_rendered_body)) {
|
||||
return array_map([$this, 'decodeEntities'], $newsletter_rendered_body);
|
||||
}
|
||||
return $this->decodeEntities($newsletter_rendered_body);
|
||||
}
|
||||
|
||||
private function encodeRenderedBodyForUTF8Column($value) {
|
||||
return $this->encodeForUTF8Column(
|
||||
MP_SENDING_QUEUES_TABLE,
|
||||
'newsletter_rendered_body',
|
||||
$value
|
||||
);
|
||||
}
|
||||
|
||||
function encodeForUTF8Column($table, $field, $value) {
|
||||
global $wpdb;
|
||||
$charset = $wpdb->get_col_charset($table, $field);
|
||||
|
Reference in New Issue
Block a user