PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / WooCommerce / TransactionalEmails.php
mailpoet / lib / WooCommerce Last commit date
Emails 2 months ago Integrations 2 months ago MultichannelMarketing 2 years ago TransactionalEmails 10 months ago WooCommerceBookings 1 month ago WooCommerceSubscriptions 2 months ago CouponPreProcessor.php 2 months ago Emails.php 8 months ago Helper.php 1 month ago MailPoetTask.php 2 years ago NonPersistablePreviewData.php 1 month ago OrderAttributionFields.php 1 month ago OrderAttributionRevenueReader.php 2 weeks ago OrderAttributionWriter.php 1 month ago RandomCouponCodeGenerator.php 2 months ago Settings.php 1 year ago SubscriberEngagement.php 3 years ago Subscription.php 2 months ago Tracker.php 2 years ago TransactionalEmailHooks.php 1 year ago TransactionalEmails.php 1 year ago WooSystemInfo.php 1 month ago WooSystemInfoController.php 1 year ago index.php 3 years ago
TransactionalEmails.php
146 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\WooCommerce;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Config\Env;
9 use MailPoet\Entities\NewsletterEntity;
10 use MailPoet\Newsletter\NewslettersRepository;
11 use MailPoet\Settings\SettingsController;
12 use MailPoet\WooCommerce\TransactionalEmails\Template;
13 use MailPoet\WP\Functions as WPFunctions;
14
15 class TransactionalEmails {
16 const SETTING_EMAIL_ID = 'woocommerce.transactional_email_id';
17
18 /** @var WPFunctions */
19 private $wp;
20
21 /** @var SettingsController */
22 private $settings;
23
24 /** @var Template */
25 private $template;
26
27 /** @var Helper */
28 private $woocommerceHelper;
29
30 /** @var array */
31 private $emailHeadings = [];
32
33 /** @var NewslettersRepository */
34 private $newslettersRepository;
35
36 public function __construct(
37 WPFunctions $wp,
38 SettingsController $settings,
39 Template $template,
40 Helper $woocommerceHelper,
41 NewslettersRepository $newslettersRepository
42 ) {
43 $this->wp = $wp;
44 $this->settings = $settings;
45 $this->template = $template;
46 $this->woocommerceHelper = $woocommerceHelper;
47 $this->newslettersRepository = $newslettersRepository;
48 }
49
50 public function setupEmailHeadings() {
51 $this->emailHeadings = [
52 'new_account' => [
53 'option_name' => 'woocommerce_new_order_settings',
54 'default' => __('New Order: #{order_number}', 'woocommerce'),
55 ],
56 'processing_order' => [
57 'option_name' => 'woocommerce_customer_processing_order_settings',
58 'default' => __('Thank you for your order', 'woocommerce'),
59 ],
60 'completed_order' => [
61 'option_name' => 'woocommerce_customer_completed_order_settings',
62 'default' => __('Thanks for shopping with us', 'woocommerce'),
63 ],
64 'customer_note' => [
65 'option_name' => 'woocommerce_customer_note_settings',
66 'default' => __('A note has been added to your order', 'woocommerce'),
67 ],
68 ];
69 }
70
71 public function init() {
72 $savedEmailId = (bool)$this->settings->get(self::SETTING_EMAIL_ID, false);
73 if (!$savedEmailId) {
74 $email = $this->createNewsletter();
75 $this->settings->set(self::SETTING_EMAIL_ID, $email->getId());
76 }
77 }
78
79 public function getEmailHeadings() {
80 if (empty($this->emailHeadings)) {
81 $this->setupEmailHeadings();
82 }
83
84 $values = [];
85 foreach ($this->emailHeadings as $name => $heading) {
86 $settings = $this->wp->getOption($heading['option_name']);
87 if (!$settings) {
88 $values[$name] = $this->replacePlaceholders($heading['default']);
89 } else {
90 $value = !empty($settings['heading']) ? $settings['heading'] : $heading['default'];
91 $values[$name] = $this->replacePlaceholders($value);
92 }
93 }
94 return $values;
95 }
96
97 private function createNewsletter() {
98 $wcEmailSettings = $this->getWCEmailSettings();
99 $newsletter = new NewsletterEntity;
100 $newsletter->setType(NewsletterEntity::TYPE_WC_TRANSACTIONAL_EMAIL);
101 $newsletter->setSubject('WooCommerce Transactional Email');
102 $newsletter->setBody($this->template->create($wcEmailSettings));
103 $this->newslettersRepository->persist($newsletter);
104 $this->newslettersRepository->flush();
105 return $newsletter;
106 }
107
108 private function replacePlaceholders($text) {
109 $title = $this->wp->wpSpecialcharsDecode($this->wp->getOption('blogname'), ENT_QUOTES);
110 $address = $this->wp->wpParseUrl($this->wp->homeUrl(), PHP_URL_HOST);
111 $orderDate = date('Y-m-d');
112 return str_replace(
113 ['{site_title}', '{site_address}', '{order_date}', '{order_number}'],
114 [$title, $address, $orderDate, '0001'],
115 $text
116 );
117 }
118
119 public function getWCEmailSettings() {
120 $wcEmailSettings = [
121 'woocommerce_email_background_color' => '#f7f7f7',
122 'woocommerce_email_base_color' => '#333333',
123 'woocommerce_email_body_background_color' => '#ffffff',
124 'woocommerce_email_footer_text' => _x('Footer text', 'Default footer text for a WooCommerce transactional email', 'mailpoet'),
125 'woocommerce_email_header_image' => Env::$assetsUrl . '/img/newsletter_editor/wc-default-logo.png',
126 'woocommerce_email_text_color' => '#111111',
127 ];
128 $result = [];
129 foreach ($wcEmailSettings as $name => $default) {
130 $value = $this->wp->getOption($name);
131 $key = preg_replace('/^woocommerce_email_/', '', $name);
132 $result[$key] = $value ?: $default;
133 }
134 $result['base_text_color'] = $this->woocommerceHelper->wcLightOrDark($result['base_color'], '#202020', '#ffffff');
135 if ($this->woocommerceHelper->wcHexIsLight($result['body_background_color'])) {
136 $result['link_color'] = $this->woocommerceHelper->wcHexIsLight($result['base_color']) ? $result['base_text_color'] : $result['base_color'];
137 } else {
138 $result['link_color'] = $this->woocommerceHelper->wcHexIsLight($result['base_color']) ? $result['base_color'] : $result['base_text_color'];
139 }
140 $result['footer_text'] = $this->replacePlaceholders($result['footer_text']);
141 // 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
142 $result['footer_text'] = strip_tags($result['footer_text'], '<em><strong><br><a><span><s><del>');
143 return $result;
144 }
145 }
146