Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
EmailSender.php
Go to the documentation of this file.
1 <?php
7 
11 
17 class EmailSender extends Sender implements SenderInterface
18 {
22  private $paymentHelper;
23 
27  private $shipmentResource;
28 
32  private $globalConfig;
33 
37  private $eventManager;
38 
50  public function __construct(
51  \Magento\Sales\Model\Order\Email\Container\Template $templateContainer,
52  \Magento\Sales\Model\Order\Email\Container\ShipmentIdentity $identityContainer,
53  \Magento\Sales\Model\Order\Email\SenderBuilderFactory $senderBuilderFactory,
54  \Psr\Log\LoggerInterface $logger,
56  \Magento\Payment\Helper\Data $paymentHelper,
57  \Magento\Sales\Model\ResourceModel\Order\Shipment $shipmentResource,
58  \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig,
59  \Magento\Framework\Event\ManagerInterface $eventManager
60  ) {
61  parent::__construct(
65  $logger,
67  );
68 
69  $this->paymentHelper = $paymentHelper;
70  $this->shipmentResource = $shipmentResource;
71  $this->globalConfig = $globalConfig;
72  $this->eventManager = $eventManager;
73  }
74 
93  public function send(
94  \Magento\Sales\Api\Data\OrderInterface $order,
96  \Magento\Sales\Api\Data\ShipmentCommentCreationInterface $comment = null,
97  $forceSyncMode = false
98  ) {
99  $shipment->setSendEmail(true);
100 
101  if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) {
102  $transport = [
103  'order' => $order,
104  'shipment' => $shipment,
105  'comment' => $comment ? $comment->getComment() : '',
106  'billing' => $order->getBillingAddress(),
107  'payment_html' => $this->getPaymentHtml($order),
108  'store' => $order->getStore(),
109  'formattedShippingAddress' => $this->getFormattedShippingAddress($order),
110  'formattedBillingAddress' => $this->getFormattedBillingAddress($order)
111  ];
112  $transportObject = new DataObject($transport);
113 
117  $this->eventManager->dispatch(
118  'email_shipment_set_template_vars_before',
119  ['sender' => $this, 'transport' => $transportObject->getData(), 'transportObject' => $transportObject]
120  );
121 
122  $this->templateContainer->setTemplateVars($transportObject->getData());
123 
124  if ($this->checkAndSend($order)) {
125  $shipment->setEmailSent(true);
126 
127  $this->shipmentResource->saveAttribute($shipment, ['send_email', 'email_sent']);
128 
129  return true;
130  }
131  } else {
132  $shipment->setEmailSent(null);
133 
134  $this->shipmentResource->saveAttribute($shipment, 'email_sent');
135  }
136 
137  $this->shipmentResource->saveAttribute($shipment, 'send_email');
138 
139  return false;
140  }
141 
149  private function getPaymentHtml(\Magento\Sales\Api\Data\OrderInterface $order)
150  {
151  return $this->paymentHelper->getInfoBlockHtml(
152  $order->getPayment(),
153  $this->identityContainer->getStore()->getStoreId()
154  );
155  }
156 }
send(\Magento\Sales\Api\Data\OrderInterface $order, \Magento\Sales\Api\Data\ShipmentInterface $shipment, \Magento\Sales\Api\Data\ShipmentCommentCreationInterface $comment=null, $forceSyncMode=false)
Definition: EmailSender.php:93
$order
Definition: order.php:55
__construct(\Magento\Sales\Model\Order\Email\Container\Template $templateContainer, \Magento\Sales\Model\Order\Email\Container\ShipmentIdentity $identityContainer, \Magento\Sales\Model\Order\Email\SenderBuilderFactory $senderBuilderFactory, \Psr\Log\LoggerInterface $logger, \Magento\Sales\Model\Order\Address\Renderer $addressRenderer, \Magento\Payment\Helper\Data $paymentHelper, \Magento\Sales\Model\ResourceModel\Order\Shipment $shipmentResource, \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig, \Magento\Framework\Event\ManagerInterface $eventManager)
Definition: EmailSender.php:50
foreach($order->getItems() as $orderItem) $shipment