123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Sales\Model\Order\Email\Sender;
- use Magento\Payment\Helper\Data as PaymentHelper;
- use Magento\Sales\Model\Order;
- use Magento\Sales\Model\Order\Email\Container\OrderIdentity;
- use Magento\Sales\Model\Order\Email\Container\Template;
- use Magento\Sales\Model\Order\Email\Sender;
- use Magento\Sales\Model\ResourceModel\Order as OrderResource;
- use Magento\Sales\Model\Order\Address\Renderer;
- use Magento\Framework\Event\ManagerInterface;
- use Magento\Framework\DataObject;
- /**
- * Class OrderSender
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class OrderSender extends Sender
- {
- /**
- * @var PaymentHelper
- */
- protected $paymentHelper;
- /**
- * @var OrderResource
- */
- protected $orderResource;
- /**
- * Global configuration storage.
- *
- * @var \Magento\Framework\App\Config\ScopeConfigInterface
- */
- protected $globalConfig;
- /**
- * @var Renderer
- */
- protected $addressRenderer;
- /**
- * Application Event Dispatcher
- *
- * @var ManagerInterface
- */
- protected $eventManager;
- /**
- * @param Template $templateContainer
- * @param OrderIdentity $identityContainer
- * @param Order\Email\SenderBuilderFactory $senderBuilderFactory
- * @param \Psr\Log\LoggerInterface $logger
- * @param PaymentHelper $paymentHelper
- * @param OrderResource $orderResource
- * @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
- * @param Renderer $addressRenderer
- * @param ManagerInterface $eventManager
- */
- public function __construct(
- Template $templateContainer,
- OrderIdentity $identityContainer,
- \Magento\Sales\Model\Order\Email\SenderBuilderFactory $senderBuilderFactory,
- \Psr\Log\LoggerInterface $logger,
- Renderer $addressRenderer,
- PaymentHelper $paymentHelper,
- OrderResource $orderResource,
- \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig,
- ManagerInterface $eventManager
- ) {
- parent::__construct($templateContainer, $identityContainer, $senderBuilderFactory, $logger, $addressRenderer);
- $this->paymentHelper = $paymentHelper;
- $this->orderResource = $orderResource;
- $this->globalConfig = $globalConfig;
- $this->addressRenderer = $addressRenderer;
- $this->eventManager = $eventManager;
- }
- /**
- * Sends order email to the customer.
- *
- * Email will be sent immediately in two cases:
- *
- * - if asynchronous email sending is disabled in global settings
- * - if $forceSyncMode parameter is set to TRUE
- *
- * Otherwise, email will be sent later during running of
- * corresponding cron job.
- *
- * @param Order $order
- * @param bool $forceSyncMode
- * @return bool
- */
- public function send(Order $order, $forceSyncMode = false)
- {
- $order->setSendEmail(true);
- if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) {
- if ($this->checkAndSend($order)) {
- $order->setEmailSent(true);
- $this->orderResource->saveAttribute($order, ['send_email', 'email_sent']);
- return true;
- }
- } else {
- $order->setEmailSent(null);
- $this->orderResource->saveAttribute($order, 'email_sent');
- }
- $this->orderResource->saveAttribute($order, 'send_email');
- return false;
- }
- /**
- * Prepare email template with variables
- *
- * @param Order $order
- * @return void
- */
- protected function prepareTemplate(Order $order)
- {
- $transport = [
- 'order' => $order,
- 'billing' => $order->getBillingAddress(),
- 'payment_html' => $this->getPaymentHtml($order),
- 'store' => $order->getStore(),
- 'formattedShippingAddress' => $this->getFormattedShippingAddress($order),
- 'formattedBillingAddress' => $this->getFormattedBillingAddress($order),
- ];
- $transportObject = new DataObject($transport);
- /**
- * Event argument `transport` is @deprecated. Use `transportObject` instead.
- */
- $this->eventManager->dispatch(
- 'email_order_set_template_vars_before',
- ['sender' => $this, 'transport' => $transportObject, 'transportObject' => $transportObject]
- );
- $this->templateContainer->setTemplateVars($transportObject->getData());
- parent::prepareTemplate($order);
- }
- /**
- * Get payment info block as html
- *
- * @param Order $order
- * @return string
- */
- protected function getPaymentHtml(Order $order)
- {
- return $this->paymentHelper->getInfoBlockHtml(
- $order->getPayment(),
- $this->identityContainer->getStore()->getStoreId()
- );
- }
- }
|