Нет описания

NewSubscriberNotificationMailer.php 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace MailPoet\Subscribers;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Config\Renderer;
  5. use MailPoet\Mailer\Mailer;
  6. use MailPoet\Mailer\MetaInfo;
  7. use MailPoet\Models\Segment;
  8. use MailPoet\Models\Subscriber;
  9. use MailPoet\Settings\SettingsController;
  10. use MailPoet\WP\Functions as WPFunctions;
  11. class NewSubscriberNotificationMailer {
  12. const SETTINGS_KEY = 'subscriber_email_notification';
  13. /** @var Mailer */
  14. private $mailer;
  15. /** @var Renderer */
  16. private $renderer;
  17. /** @var SettingsController */
  18. private $settings;
  19. /** @var MetaInfo */
  20. private $mailerMetaInfo;
  21. public function __construct(
  22. Mailer $mailer,
  23. Renderer $renderer,
  24. SettingsController $settings
  25. ) {
  26. $this->mailer = $mailer;
  27. $this->renderer = $renderer;
  28. $this->settings = $settings;
  29. $this->mailerMetaInfo = new MetaInfo();
  30. }
  31. /**
  32. * @param Subscriber $subscriber
  33. * @param Segment[] $segments
  34. *
  35. * @throws \Exception
  36. */
  37. public function send(Subscriber $subscriber, array $segments) {
  38. $settings = $this->settings->get(NewSubscriberNotificationMailer::SETTINGS_KEY);
  39. if ($this->isDisabled($settings)) {
  40. return;
  41. }
  42. try {
  43. $extraParams = [
  44. 'meta' => $this->mailerMetaInfo->getNewSubscriberNotificationMetaInfo(),
  45. ];
  46. $this->mailer->send($this->constructNewsletter($subscriber, $segments), $settings['address'], $extraParams);
  47. } catch (\Exception $e) {
  48. if (WP_DEBUG) {
  49. throw $e;
  50. }
  51. }
  52. }
  53. public static function isDisabled($settings) {
  54. if (!is_array($settings)) {
  55. return true;
  56. }
  57. if (!isset($settings['enabled'])) {
  58. return true;
  59. }
  60. if (!isset($settings['address'])) {
  61. return true;
  62. }
  63. if (empty(trim($settings['address']))) {
  64. return true;
  65. }
  66. return !(bool)$settings['enabled'];
  67. }
  68. /**
  69. * @param Subscriber $subscriber
  70. * @param Segment[] $segments
  71. *
  72. * @return array
  73. * @throws \Exception
  74. */
  75. private function constructNewsletter(Subscriber $subscriber, array $segments) {
  76. $segmentNames = $this->getSegmentNames($segments);
  77. $context = [
  78. 'subscriber_email' => $subscriber->get('email'),
  79. 'segments_names' => $segmentNames,
  80. 'link_settings' => WPFunctions::get()->getSiteUrl(null, '/wp-admin/admin.php?page=mailpoet-settings'),
  81. 'link_premium' => WPFunctions::get()->getSiteUrl(null, '/wp-admin/admin.php?page=mailpoet-premium'),
  82. ];
  83. return [
  84. 'subject' => sprintf(__('New subscriber to %s', 'mailpoet'), $segmentNames),
  85. 'body' => [
  86. 'html' => $this->renderer->render('emails/newSubscriberNotification.html', $context),
  87. 'text' => $this->renderer->render('emails/newSubscriberNotification.txt', $context),
  88. ],
  89. ];
  90. }
  91. /**
  92. * @param Segment[] $segments
  93. * @return string
  94. */
  95. private function getSegmentNames($segments) {
  96. $names = [];
  97. foreach ($segments as $segment) {
  98. $names[] = $segment->get('name');
  99. }
  100. return implode(', ', $names);
  101. }
  102. }