Açıklama Yok

TransactionalEmails.php 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace MailPoet\WooCommerce;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Config\Env;
  5. use MailPoet\Entities\NewsletterEntity;
  6. use MailPoet\Newsletter\NewslettersRepository;
  7. use MailPoet\Settings\SettingsController;
  8. use MailPoet\WooCommerce\TransactionalEmails\Template;
  9. use MailPoet\WP\Functions as WPFunctions;
  10. class TransactionalEmails {
  11. const SETTING_EMAIL_ID = 'woocommerce.transactional_email_id';
  12. /** @var WPFunctions */
  13. private $wp;
  14. /** @var SettingsController */
  15. private $settings;
  16. /** @var Template */
  17. private $template;
  18. /** @var Helper */
  19. private $woocommerceHelper;
  20. /** @var array */
  21. private $emailHeadings;
  22. /** @var NewslettersRepository */
  23. private $newslettersRepository;
  24. public function __construct(
  25. WPFunctions $wp,
  26. SettingsController $settings,
  27. Template $template,
  28. Helper $woocommerceHelper,
  29. NewslettersRepository $newslettersRepository
  30. ) {
  31. $this->wp = $wp;
  32. $this->settings = $settings;
  33. $this->template = $template;
  34. $this->woocommerceHelper = $woocommerceHelper;
  35. $this->newslettersRepository = $newslettersRepository;
  36. $this->emailHeadings = [
  37. 'new_account' => [
  38. 'option_name' => 'woocommerce_new_order_settings',
  39. 'default' => __('New Order: #{order_number}', 'woocommerce'),
  40. ],
  41. 'processing_order' => [
  42. 'option_name' => 'woocommerce_customer_processing_order_settings',
  43. 'default' => __('Thank you for your order', 'woocommerce'),
  44. ],
  45. 'completed_order' => [
  46. 'option_name' => 'woocommerce_customer_completed_order_settings',
  47. 'default' => __('Thanks for shopping with us', 'woocommerce'),
  48. ],
  49. 'customer_note' => [
  50. 'option_name' => 'woocommerce_customer_note_settings',
  51. 'default' => __('A note has been added to your order', 'woocommerce'),
  52. ],
  53. ];
  54. }
  55. public function init() {
  56. $savedEmailId = (bool)$this->settings->get(self::SETTING_EMAIL_ID, false);
  57. if (!$savedEmailId) {
  58. $email = $this->createNewsletter();
  59. $this->settings->set(self::SETTING_EMAIL_ID, $email->getId());
  60. }
  61. }
  62. public function getEmailHeadings() {
  63. $values = [];
  64. foreach ($this->emailHeadings as $name => $heading) {
  65. $settings = $this->wp->getOption($heading['option_name']);
  66. if (!$settings) {
  67. $values[$name] = $this->replacePlaceholders($heading['default']);
  68. } else {
  69. $value = !empty($settings['heading']) ? $settings['heading'] : $heading['default'];
  70. $values[$name] = $this->replacePlaceholders($value);
  71. }
  72. }
  73. return $values;
  74. }
  75. private function createNewsletter() {
  76. $wcEmailSettings = $this->getWCEmailSettings();
  77. $newsletter = new NewsletterEntity;
  78. $newsletter->setType(NewsletterEntity::TYPE_WC_TRANSACTIONAL_EMAIL);
  79. $newsletter->setSubject('WooCommerce Transactional Email');
  80. $newsletter->setBody($this->template->create($wcEmailSettings));
  81. $this->newslettersRepository->persist($newsletter);
  82. $this->newslettersRepository->flush();
  83. return $newsletter;
  84. }
  85. private function replacePlaceholders($text) {
  86. $title = $this->wp->wpSpecialcharsDecode($this->wp->getOption('blogname'), ENT_QUOTES);
  87. $address = $this->wp->wpParseUrl($this->wp->homeUrl(), PHP_URL_HOST);
  88. $orderDate = date('Y-m-d');
  89. return str_replace(
  90. ['{site_title}','{site_address}', '{order_date}', '{order_number}'],
  91. [$title, $address, $orderDate, '0001'],
  92. $text
  93. );
  94. }
  95. public function getWCEmailSettings() {
  96. $wcEmailSettings = [
  97. 'woocommerce_email_background_color' => '#f7f7f7',
  98. 'woocommerce_email_base_color' => '#333333',
  99. 'woocommerce_email_body_background_color' => '#ffffff',
  100. 'woocommerce_email_footer_text' => $this->wp->_x('Footer text', 'Default footer text for a WooCommerce transactional email', 'mailpoet'),
  101. 'woocommerce_email_header_image' => Env::$assetsUrl . '/img/newsletter_editor/wc-default-logo.png',
  102. 'woocommerce_email_text_color' => '#111111',
  103. ];
  104. $result = [];
  105. foreach ($wcEmailSettings as $name => $default) {
  106. $value = $this->wp->getOption($name);
  107. $key = preg_replace('/^woocommerce_email_/', '', $name);
  108. $result[$key] = $value ?: $default;
  109. }
  110. $result['base_text_color'] = $this->woocommerceHelper->wcLightOrDark($result['base_color'], '#202020', '#ffffff');
  111. if ($this->woocommerceHelper->wcHexIsLight($result['body_background_color'])) {
  112. $result['link_color'] = $this->woocommerceHelper->wcHexIsLight($result['base_color']) ? $result['base_text_color'] : $result['base_color'];
  113. } else {
  114. $result['link_color'] = $this->woocommerceHelper->wcHexIsLight($result['base_color']) ? $result['base_color'] : $result['base_text_color'];
  115. }
  116. $result['footer_text'] = $this->replacePlaceholders($result['footer_text']);
  117. // 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
  118. $result['footer_text'] = strip_tags($result['footer_text'], '<em><strong><br><a><span><s><del>');
  119. return $result;
  120. }
  121. }