| Current Path : /home/rtorresani/www/vendor/magento/module-sales/Model/Order/Email/Sender/ |
| Current File : //home/rtorresani/www/vendor/magento/module-sales/Model/Order/Email/Sender/OrderSender.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
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;
/**
* Sends order email to the customer.
*
* @api
* @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 Renderer $addressRenderer
* @param PaymentHelper $paymentHelper
* @param OrderResource $orderResource
* @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
* @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)
{
$this->identityContainer->setStore($order->getStore());
$order->setSendEmail($this->identityContainer->isEnabled());
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,
'order_id' => $order->getId(),
'billing' => $order->getBillingAddress(),
'payment_html' => $this->getPaymentHtml($order),
'store' => $order->getStore(),
'formattedShippingAddress' => $this->getFormattedShippingAddress($order),
'formattedBillingAddress' => $this->getFormattedBillingAddress($order),
'created_at_formatted' => $order->getCreatedAtFormatted(2),
'order_data' => [
'customer_name' => $order->getCustomerName(),
'is_not_virtual' => $order->getIsNotVirtual(),
'email_customer_note' => $order->getEmailCustomerNote(),
'frontend_status_label' => $order->getFrontendStatusLabel()
]
];
$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()
);
}
}