Sender.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Model\Order\Email;
  7. use Magento\Sales\Model\Order;
  8. use Magento\Sales\Model\Order\Email\Container\IdentityInterface;
  9. use Magento\Sales\Model\Order\Email\Container\Template;
  10. use Magento\Sales\Model\Order\Address\Renderer;
  11. /**
  12. * Class Sender
  13. * @api
  14. *
  15. * @since 100.0.2
  16. */
  17. abstract class Sender
  18. {
  19. /**
  20. * @var \Magento\Sales\Model\Order\Email\SenderBuilderFactory
  21. */
  22. protected $senderBuilderFactory;
  23. /**
  24. * @var Template
  25. */
  26. protected $templateContainer;
  27. /**
  28. * @var IdentityInterface
  29. */
  30. protected $identityContainer;
  31. /**
  32. * @var \Psr\Log\LoggerInterface
  33. */
  34. protected $logger;
  35. /**
  36. * @var Renderer
  37. */
  38. protected $addressRenderer;
  39. /**
  40. * @param Template $templateContainer
  41. * @param IdentityInterface $identityContainer
  42. * @param SenderBuilderFactory $senderBuilderFactory
  43. * @param \Psr\Log\LoggerInterface $logger
  44. * @param Renderer $addressRenderer
  45. */
  46. public function __construct(
  47. Template $templateContainer,
  48. IdentityInterface $identityContainer,
  49. \Magento\Sales\Model\Order\Email\SenderBuilderFactory $senderBuilderFactory,
  50. \Psr\Log\LoggerInterface $logger,
  51. Renderer $addressRenderer
  52. ) {
  53. $this->templateContainer = $templateContainer;
  54. $this->identityContainer = $identityContainer;
  55. $this->senderBuilderFactory = $senderBuilderFactory;
  56. $this->logger = $logger;
  57. $this->addressRenderer = $addressRenderer;
  58. }
  59. /**
  60. * Send order email if it is enabled in configuration.
  61. *
  62. * @param Order $order
  63. * @return bool
  64. */
  65. protected function checkAndSend(Order $order)
  66. {
  67. $this->identityContainer->setStore($order->getStore());
  68. if (!$this->identityContainer->isEnabled()) {
  69. return false;
  70. }
  71. $this->prepareTemplate($order);
  72. /** @var SenderBuilder $sender */
  73. $sender = $this->getSender();
  74. try {
  75. $sender->send();
  76. } catch (\Exception $e) {
  77. $this->logger->error($e->getMessage());
  78. return false;
  79. }
  80. try {
  81. $sender->sendCopyTo();
  82. } catch (\Exception $e) {
  83. $this->logger->error($e->getMessage());
  84. }
  85. return true;
  86. }
  87. /**
  88. * Populate order email template with customer information.
  89. *
  90. * @param Order $order
  91. * @return void
  92. */
  93. protected function prepareTemplate(Order $order)
  94. {
  95. $this->templateContainer->setTemplateOptions($this->getTemplateOptions());
  96. if ($order->getCustomerIsGuest()) {
  97. $templateId = $this->identityContainer->getGuestTemplateId();
  98. $customerName = $order->getBillingAddress()->getName();
  99. } else {
  100. $templateId = $this->identityContainer->getTemplateId();
  101. $customerName = $order->getCustomerName();
  102. }
  103. $this->identityContainer->setCustomerName($customerName);
  104. $this->identityContainer->setCustomerEmail($order->getCustomerEmail());
  105. $this->templateContainer->setTemplateId($templateId);
  106. }
  107. /**
  108. * Create Sender object using appropriate template and identity.
  109. *
  110. * @return Sender
  111. */
  112. protected function getSender()
  113. {
  114. return $this->senderBuilderFactory->create(
  115. [
  116. 'templateContainer' => $this->templateContainer,
  117. 'identityContainer' => $this->identityContainer,
  118. ]
  119. );
  120. }
  121. /**
  122. * Get template options.
  123. *
  124. * @return array
  125. */
  126. protected function getTemplateOptions()
  127. {
  128. return [
  129. 'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
  130. 'store' => $this->identityContainer->getStore()->getStoreId()
  131. ];
  132. }
  133. /**
  134. * Render shipping address into html.
  135. *
  136. * @param Order $order
  137. * @return string|null
  138. */
  139. protected function getFormattedShippingAddress($order)
  140. {
  141. return $order->getIsVirtual()
  142. ? null
  143. : $this->addressRenderer->format($order->getShippingAddress(), 'html');
  144. }
  145. /**
  146. * Render billing address into html.
  147. *
  148. * @param Order $order
  149. * @return string|null
  150. */
  151. protected function getFormattedBillingAddress($order)
  152. {
  153. return $this->addressRenderer->format($order->getBillingAddress(), 'html');
  154. }
  155. }