139 lines
5.1 KiB
PHP
139 lines
5.1 KiB
PHP
|
<?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
|
||
|
|
||
|
namespace MailPoet\WooCommerce;
|
||
|
|
||
|
if (!defined('ABSPATH')) exit;
|
||
|
|
||
|
|
||
|
use MailPoet\Config\Env;
|
||
|
use MailPoet\Entities\NewsletterEntity;
|
||
|
use MailPoet\Newsletter\NewslettersRepository;
|
||
|
use MailPoet\Settings\SettingsController;
|
||
|
use MailPoet\WooCommerce\TransactionalEmails\Template;
|
||
|
use MailPoet\WP\Functions as WPFunctions;
|
||
|
|
||
|
class TransactionalEmails {
|
||
|
const SETTING_EMAIL_ID = 'woocommerce.transactional_email_id';
|
||
|
|
||
|
/** @var WPFunctions */
|
||
|
private $wp;
|
||
|
|
||
|
/** @var SettingsController */
|
||
|
private $settings;
|
||
|
|
||
|
/** @var Template */
|
||
|
private $template;
|
||
|
|
||
|
/** @var Helper */
|
||
|
private $woocommerceHelper;
|
||
|
|
||
|
/** @var array */
|
||
|
private $emailHeadings;
|
||
|
|
||
|
/** @var NewslettersRepository */
|
||
|
private $newslettersRepository;
|
||
|
|
||
|
public function __construct(
|
||
|
WPFunctions $wp,
|
||
|
SettingsController $settings,
|
||
|
Template $template,
|
||
|
Helper $woocommerceHelper,
|
||
|
NewslettersRepository $newslettersRepository
|
||
|
) {
|
||
|
$this->wp = $wp;
|
||
|
$this->settings = $settings;
|
||
|
$this->template = $template;
|
||
|
$this->woocommerceHelper = $woocommerceHelper;
|
||
|
$this->newslettersRepository = $newslettersRepository;
|
||
|
$this->emailHeadings = [
|
||
|
'new_account' => [
|
||
|
'option_name' => 'woocommerce_new_order_settings',
|
||
|
'default' => __('New Order: #{order_number}', 'woocommerce'),
|
||
|
],
|
||
|
'processing_order' => [
|
||
|
'option_name' => 'woocommerce_customer_processing_order_settings',
|
||
|
'default' => __('Thank you for your order', 'woocommerce'),
|
||
|
],
|
||
|
'completed_order' => [
|
||
|
'option_name' => 'woocommerce_customer_completed_order_settings',
|
||
|
'default' => __('Thanks for shopping with us', 'woocommerce'),
|
||
|
],
|
||
|
'customer_note' => [
|
||
|
'option_name' => 'woocommerce_customer_note_settings',
|
||
|
'default' => __('A note has been added to your order', 'woocommerce'),
|
||
|
],
|
||
|
];
|
||
|
}
|
||
|
|
||
|
public function init() {
|
||
|
$savedEmailId = (bool)$this->settings->get(self::SETTING_EMAIL_ID, false);
|
||
|
if (!$savedEmailId) {
|
||
|
$email = $this->createNewsletter();
|
||
|
$this->settings->set(self::SETTING_EMAIL_ID, $email->getId());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function getEmailHeadings() {
|
||
|
$values = [];
|
||
|
foreach ($this->emailHeadings as $name => $heading) {
|
||
|
$settings = $this->wp->getOption($heading['option_name']);
|
||
|
if (!$settings) {
|
||
|
$values[$name] = $this->replacePlaceholders($heading['default']);
|
||
|
} else {
|
||
|
$value = !empty($settings['heading']) ? $settings['heading'] : $heading['default'];
|
||
|
$values[$name] = $this->replacePlaceholders($value);
|
||
|
}
|
||
|
}
|
||
|
return $values;
|
||
|
}
|
||
|
|
||
|
private function createNewsletter() {
|
||
|
$wcEmailSettings = $this->getWCEmailSettings();
|
||
|
$newsletter = new NewsletterEntity;
|
||
|
$newsletter->setType(NewsletterEntity::TYPE_WC_TRANSACTIONAL_EMAIL);
|
||
|
$newsletter->setSubject('WooCommerce Transactional Email');
|
||
|
$newsletter->setBody($this->template->create($wcEmailSettings));
|
||
|
$this->newslettersRepository->persist($newsletter);
|
||
|
$this->newslettersRepository->flush();
|
||
|
return $newsletter;
|
||
|
}
|
||
|
|
||
|
private function replacePlaceholders($text) {
|
||
|
$title = $this->wp->wpSpecialcharsDecode($this->wp->getOption('blogname'), ENT_QUOTES);
|
||
|
$address = $this->wp->wpParseUrl($this->wp->homeUrl(), PHP_URL_HOST);
|
||
|
$orderDate = date('Y-m-d');
|
||
|
return str_replace(
|
||
|
['{site_title}','{site_address}', '{order_date}', '{order_number}'],
|
||
|
[$title, $address, $orderDate, '0001'],
|
||
|
$text
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function getWCEmailSettings() {
|
||
|
$wcEmailSettings = [
|
||
|
'woocommerce_email_background_color' => '#f7f7f7',
|
||
|
'woocommerce_email_base_color' => '#333333',
|
||
|
'woocommerce_email_body_background_color' => '#ffffff',
|
||
|
'woocommerce_email_footer_text' => _x('Footer text', 'Default footer text for a WooCommerce transactional email', 'mailpoet'),
|
||
|
'woocommerce_email_header_image' => Env::$assetsUrl . '/img/newsletter_editor/wc-default-logo.png',
|
||
|
'woocommerce_email_text_color' => '#111111',
|
||
|
];
|
||
|
$result = [];
|
||
|
foreach ($wcEmailSettings as $name => $default) {
|
||
|
$value = $this->wp->getOption($name);
|
||
|
$key = preg_replace('/^woocommerce_email_/', '', $name);
|
||
|
$result[$key] = $value ?: $default;
|
||
|
}
|
||
|
$result['base_text_color'] = $this->woocommerceHelper->wcLightOrDark($result['base_color'], '#202020', '#ffffff');
|
||
|
if ($this->woocommerceHelper->wcHexIsLight($result['body_background_color'])) {
|
||
|
$result['link_color'] = $this->woocommerceHelper->wcHexIsLight($result['base_color']) ? $result['base_text_color'] : $result['base_color'];
|
||
|
} else {
|
||
|
$result['link_color'] = $this->woocommerceHelper->wcHexIsLight($result['base_color']) ? $result['base_color'] : $result['base_text_color'];
|
||
|
}
|
||
|
$result['footer_text'] = $this->replacePlaceholders($result['footer_text']);
|
||
|
// The footer text is placed inside a paragraph in a text block so we keep only tags we allow in the text block in the newsletter editor
|
||
|
$result['footer_text'] = strip_tags($result['footer_text'], '<em><strong><br><a><span><s><del>');
|
||
|
return $result;
|
||
|
}
|
||
|
}
|