Няма описание

SendPreviewController.php 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php declare(strict_types = 1);
  2. namespace MailPoet\Newsletter\Preview;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Entities\NewsletterEntity;
  5. use MailPoet\Entities\SubscriberEntity;
  6. use MailPoet\Mailer\Mailer;
  7. use MailPoet\Mailer\MetaInfo;
  8. use MailPoet\Newsletter\Renderer\Renderer;
  9. use MailPoet\Newsletter\Shortcodes\Shortcodes;
  10. use MailPoet\Subscribers\SubscribersRepository;
  11. use MailPoet\WP\Functions as WPFunctions;
  12. class SendPreviewController {
  13. /** @var Mailer */
  14. private $mailer;
  15. /** @var MetaInfo */
  16. private $mailerMetaInfo;
  17. /** @var WPFunctions */
  18. private $wp;
  19. /** @var Renderer */
  20. private $renderer;
  21. /** @var Shortcodes */
  22. private $shortcodes;
  23. /** @var SubscribersRepository */
  24. private $subscribersRepository;
  25. public function __construct(
  26. Mailer $mailer,
  27. MetaInfo $mailerMetaInfo,
  28. Renderer $renderer,
  29. WPFunctions $wp,
  30. SubscribersRepository $subscribersRepository,
  31. Shortcodes $shortcodes
  32. ) {
  33. $this->mailer = $mailer;
  34. $this->mailerMetaInfo = $mailerMetaInfo;
  35. $this->wp = $wp;
  36. $this->renderer = $renderer;
  37. $this->shortcodes = $shortcodes;
  38. $this->subscribersRepository = $subscribersRepository;
  39. }
  40. public function sendPreview(NewsletterEntity $newsletter, string $emailAddress) {
  41. $renderedNewsletter = $this->renderer->renderAsPreview($newsletter);
  42. $divider = '***MailPoet***';
  43. $dataForShortcodes = array_merge(
  44. [$newsletter->getSubject()],
  45. $renderedNewsletter
  46. );
  47. $body = implode($divider, $dataForShortcodes);
  48. $subscriber = $this->subscribersRepository->getCurrentWPUser();
  49. $this->shortcodes->setNewsletter($newsletter);
  50. if ($subscriber instanceof SubscriberEntity) {
  51. $this->shortcodes->setSubscriber($subscriber);
  52. }
  53. $this->shortcodes->setWpUserPreview(true);
  54. [
  55. $renderedNewsletter['subject'],
  56. $renderedNewsletter['body']['html'],
  57. $renderedNewsletter['body']['text'],
  58. ] = explode($divider, $this->shortcodes->replace($body));
  59. $renderedNewsletter['id'] = $newsletter->getId();
  60. $extraParams = [
  61. 'unsubscribe_url' => $this->wp->homeUrl(),
  62. 'meta' => $this->mailerMetaInfo->getPreviewMetaInfo(),
  63. ];
  64. $result = $this->mailer->send($renderedNewsletter, $emailAddress, $extraParams);
  65. if ($result['response'] === false) {
  66. $error = sprintf(
  67. __('The email could not be sent: %s', 'mailpoet'),
  68. $result['error']->getMessage()
  69. );
  70. throw new SendPreviewException($error);
  71. }
  72. }
  73. }