| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- <?php
- 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' => $this->wp->_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;
- }
- }
|