Нема описа

NewsletterEditor.php 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <?php
  2. namespace MailPoet\AdminPages\Pages;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\AdminPages\PageRenderer;
  5. use MailPoet\Config\Menu;
  6. use MailPoet\Config\ServicesChecker;
  7. use MailPoet\Entities\SubscriberEntity;
  8. use MailPoet\Newsletter\Shortcodes\ShortcodesHelper;
  9. use MailPoet\Services\Bridge;
  10. use MailPoet\Settings\SettingsController;
  11. use MailPoet\Settings\UserFlagsController;
  12. use MailPoet\Subscribers\SubscribersRepository;
  13. use MailPoet\WooCommerce\Helper as WooCommerceHelper;
  14. use MailPoet\WooCommerce\TransactionalEmailHooks;
  15. use MailPoet\WooCommerce\TransactionalEmails;
  16. use MailPoet\WP\Functions as WPFunctions;
  17. class NewsletterEditor {
  18. private const DATE_FORMAT = 'Y-m-d H:i:s';
  19. /** @var PageRenderer */
  20. private $pageRenderer;
  21. /** @var SettingsController */
  22. private $settings;
  23. /** @var UserFlagsController */
  24. private $userFlags;
  25. /** @var WooCommerceHelper */
  26. private $woocommerceHelper;
  27. /** @var WPFunctions */
  28. private $wp;
  29. /** @var TransactionalEmails */
  30. private $wcTransactionalEmails;
  31. /** @var ServicesChecker */
  32. private $servicesChecker;
  33. /** @var ShortcodesHelper */
  34. private $shortcodesHelper;
  35. /** @var SubscribersRepository */
  36. private $subscribersRepository;
  37. /** @var TransactionalEmailHooks */
  38. private $wooEmailHooks;
  39. public function __construct(
  40. PageRenderer $pageRenderer,
  41. SettingsController $settings,
  42. UserFlagsController $userFlags,
  43. WooCommerceHelper $woocommerceHelper,
  44. WPFunctions $wp,
  45. TransactionalEmails $wcTransactionalEmails,
  46. ShortcodesHelper $shortcodesHelper,
  47. ServicesChecker $servicesChecker,
  48. SubscribersRepository $subscribersRepository,
  49. TransactionalEmailHooks $wooEmailHooks
  50. ) {
  51. $this->pageRenderer = $pageRenderer;
  52. $this->settings = $settings;
  53. $this->userFlags = $userFlags;
  54. $this->woocommerceHelper = $woocommerceHelper;
  55. $this->wp = $wp;
  56. $this->wcTransactionalEmails = $wcTransactionalEmails;
  57. $this->servicesChecker = $servicesChecker;
  58. $this->shortcodesHelper = $shortcodesHelper;
  59. $this->subscribersRepository = $subscribersRepository;
  60. $this->wooEmailHooks = $wooEmailHooks;
  61. }
  62. public function render() {
  63. $newsletterId = (isset($_GET['id']) ? (int)$_GET['id'] : 0);
  64. $woocommerceTemplateId = (int)$this->settings->get(TransactionalEmails::SETTING_EMAIL_ID, null);
  65. if (
  66. $woocommerceTemplateId
  67. && $newsletterId === $woocommerceTemplateId
  68. && !$this->woocommerceHelper->isWooCommerceActive()
  69. ) {
  70. $location = 'admin.php?page=mailpoet-settings&enable-customizer-notice#woocommerce';
  71. if (headers_sent()) {
  72. echo '<script>window.location = "' . $location . '";</script>';
  73. } else {
  74. header('Location: ' . $location, true, 302);
  75. }
  76. exit;
  77. }
  78. $subscriber = $this->subscribersRepository->getCurrentWPUser();
  79. $subscriberData = $subscriber ? $this->formatSubscriber($subscriber) : [];
  80. $woocommerceData = [];
  81. if ($this->woocommerceHelper->isWooCommerceActive()) {
  82. // Activate hooks for Woo emails styles so that we always load styles set in Woo email customizer
  83. if ($newsletterId === (int)$this->settings->get(TransactionalEmails::SETTING_EMAIL_ID)) {
  84. $this->wooEmailHooks->overrideStylesForWooEmails();
  85. }
  86. $wcEmailSettings = $this->wcTransactionalEmails->getWCEmailSettings();
  87. $woocommerceData = [
  88. 'email_headings' => $this->wcTransactionalEmails->getEmailHeadings(),
  89. 'customizer_enabled' => (bool)$this->settings->get('woocommerce.use_mailpoet_editor'),
  90. ];
  91. $woocommerceData = array_merge($wcEmailSettings, $woocommerceData);
  92. }
  93. $data = [
  94. 'shortcodes' => $this->shortcodesHelper->getShortcodes(),
  95. 'settings' => $this->settings->getAll(),
  96. 'editor_tutorial_seen' => $this->userFlags->get('editor_tutorial_seen'),
  97. 'current_wp_user' => array_merge($subscriberData, $this->wp->wpGetCurrentUser()->to_array()),
  98. 'sub_menu' => Menu::MAIN_PAGE_SLUG,
  99. 'mss_active' => Bridge::isMPSendingServiceEnabled(),
  100. 'woocommerce' => $woocommerceData,
  101. 'is_wc_transactional_email' => $newsletterId === $woocommerceTemplateId,
  102. 'site_name' => $this->wp->wpSpecialcharsDecode($this->wp->getOption('blogname'), ENT_QUOTES),
  103. 'site_address' => $this->wp->wpParseUrl($this->wp->homeUrl(), PHP_URL_HOST),
  104. 'mss_key_pending_approval' => $this->servicesChecker->isMailPoetAPIKeyPendingApproval(),
  105. ];
  106. $this->wp->wpEnqueueMedia();
  107. $this->wp->wpEnqueueStyle('editor', $this->wp->includesUrl('css/editor.css'));
  108. $this->pageRenderer->displayPage('newsletter/editor.html', $data);
  109. }
  110. private function formatSubscriber(SubscriberEntity $subscriber): array {
  111. return [
  112. 'id' => $subscriber->getId(),
  113. 'wp_user_id' => $subscriber->getWpUserId(),
  114. 'is_woocommerce_user' => (string)$subscriber->getIsWoocommerceUser(), // BC compatibility
  115. 'first_name' => $subscriber->getFirstName(),
  116. 'last_name' => $subscriber->getLastName(),
  117. 'email' => $subscriber->getEmail(),
  118. 'status' => $subscriber->getStatus(),
  119. 'subscribed_ip' => $subscriber->getSubscribedIp(),
  120. 'confirmed_ip' => $subscriber->getConfirmedIp(),
  121. 'confirmed_at' => ($confirmedAt = $subscriber->getConfirmedAt()) ? $confirmedAt->format(self::DATE_FORMAT) : null,
  122. 'last_subscribed_at' => ($lastSubscribedAt = $subscriber->getLastSubscribedAt()) ? $lastSubscribedAt->format(self::DATE_FORMAT) : null,
  123. 'created_at' => $subscriber->getCreatedAt()->format(self::DATE_FORMAT),
  124. 'updated_at' => $subscriber->getUpdatedAt()->format(self::DATE_FORMAT),
  125. 'deleted_at' => ($deletedAt = $subscriber->getDeletedAt()) ? $deletedAt->format(self::DATE_FORMAT) : null,
  126. 'unconfirmed_data' => $subscriber->getUnconfirmedData(),
  127. 'source' => $subscriber->getSource(),
  128. 'count_confirmation' => $subscriber->getConfirmationsCount(),
  129. 'unsubscribe_token' => $subscriber->getUnsubscribeToken(),
  130. 'link_token' => $subscriber->getLinkToken(),
  131. ];
  132. }
  133. }