Skip to content

Commit 46b9d30

Browse files
committed
ACP2E-47: Order emails contains data localized using Admin's locale instead of a customer's locale
1 parent c2c5ec4 commit 46b9d30

15 files changed

+163
-21
lines changed

app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoCommentSender.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*/
66
namespace Magento\Sales\Model\Order\Email\Sender;
77

8+
use Magento\Framework\App\Area;
9+
use Magento\Framework\App\ObjectManager;
810
use Magento\Sales\Model\Order;
911
use Magento\Sales\Model\Order\Creditmemo;
1012
use Magento\Sales\Model\Order\Email\Container\CreditmemoCommentIdentity;
@@ -13,6 +15,7 @@
1315
use Magento\Sales\Model\Order\Address\Renderer;
1416
use Magento\Framework\Event\ManagerInterface;
1517
use Magento\Framework\DataObject;
18+
use Magento\Store\Model\App\Emulation;
1619

1720
/**
1821
* Class CreditmemoCommentSender
@@ -31,25 +34,33 @@ class CreditmemoCommentSender extends NotifySender
3134
*/
3235
protected $eventManager;
3336

37+
/**
38+
* @var Emulation
39+
*/
40+
private $appEmulation;
41+
3442
/**
3543
* @param Template $templateContainer
3644
* @param CreditmemoCommentIdentity $identityContainer
3745
* @param Order\Email\SenderBuilderFactory $senderBuilderFactory
3846
* @param \Psr\Log\LoggerInterface $logger
3947
* @param Renderer $addressRenderer
4048
* @param ManagerInterface $eventManager
49+
* @param Emulation|null $appEmulation
4150
*/
4251
public function __construct(
4352
Template $templateContainer,
4453
CreditmemoCommentIdentity $identityContainer,
4554
\Magento\Sales\Model\Order\Email\SenderBuilderFactory $senderBuilderFactory,
4655
\Psr\Log\LoggerInterface $logger,
4756
Renderer $addressRenderer,
48-
ManagerInterface $eventManager
57+
ManagerInterface $eventManager,
58+
Emulation $appEmulation = null
4959
) {
5060
parent::__construct($templateContainer, $identityContainer, $senderBuilderFactory, $logger, $addressRenderer);
5161
$this->addressRenderer = $addressRenderer;
5262
$this->eventManager = $eventManager;
63+
$this->appEmulation = $appEmulation ?: ObjectManager::getInstance()->get(Emulation::class);
5364
}
5465

5566
/**
@@ -64,7 +75,7 @@ public function send(Creditmemo $creditmemo, $notify = true, $comment = '')
6475
{
6576
$order = $creditmemo->getOrder();
6677
$this->identityContainer->setStore($order->getStore());
67-
78+
$this->appEmulation->startEnvironmentEmulation($order->getStoreId(), Area::AREA_FRONTEND, true);
6879
$transport = [
6980
'order' => $order,
7081
'creditmemo' => $creditmemo,
@@ -79,6 +90,7 @@ public function send(Creditmemo $creditmemo, $notify = true, $comment = '')
7990
]
8091
];
8192
$transportObject = new DataObject($transport);
93+
$this->appEmulation->stopEnvironmentEmulation();
8294

8395
/**
8496
* Event argument `transport` is @deprecated. Use `transportObject` instead.

app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*/
66
namespace Magento\Sales\Model\Order\Email\Sender;
77

8+
use Magento\Framework\App\Area;
9+
use Magento\Framework\App\ObjectManager;
810
use Magento\Payment\Helper\Data as PaymentHelper;
911
use Magento\Sales\Model\Order;
1012
use Magento\Sales\Model\Order\Creditmemo;
@@ -15,6 +17,7 @@
1517
use Magento\Sales\Model\Order\Address\Renderer;
1618
use Magento\Framework\Event\ManagerInterface;
1719
use Magento\Framework\DataObject;
20+
use Magento\Store\Model\App\Emulation;
1821

1922
/**
2023
* Sends order creditmemo email to the customer.
@@ -52,6 +55,11 @@ class CreditmemoSender extends Sender
5255
*/
5356
protected $eventManager;
5457

58+
/**
59+
* @var Emulation
60+
*/
61+
private $appEmulation;
62+
5563
/**
5664
* @param Template $templateContainer
5765
* @param CreditmemoIdentity $identityContainer
@@ -62,6 +70,7 @@ class CreditmemoSender extends Sender
6270
* @param CreditmemoResource $creditmemoResource
6371
* @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
6472
* @param ManagerInterface $eventManager
73+
* @param Emulation|null $appEmulation
6574
*/
6675
public function __construct(
6776
Template $templateContainer,
@@ -72,14 +81,16 @@ public function __construct(
7281
PaymentHelper $paymentHelper,
7382
CreditmemoResource $creditmemoResource,
7483
\Magento\Framework\App\Config\ScopeConfigInterface $globalConfig,
75-
ManagerInterface $eventManager
84+
ManagerInterface $eventManager,
85+
Emulation $appEmulation = null
7686
) {
7787
parent::__construct($templateContainer, $identityContainer, $senderBuilderFactory, $logger, $addressRenderer);
7888
$this->paymentHelper = $paymentHelper;
7989
$this->creditmemoResource = $creditmemoResource;
8090
$this->globalConfig = $globalConfig;
8191
$this->addressRenderer = $addressRenderer;
8292
$this->eventManager = $eventManager;
93+
$this->appEmulation = $appEmulation ?: ObjectManager::getInstance()->get(Emulation::class);
8394
}
8495

8596
/**
@@ -105,6 +116,7 @@ public function send(Creditmemo $creditmemo, $forceSyncMode = false)
105116

106117
if (!$this->globalConfig->getValue('sales_email/general/async_sending') || $forceSyncMode) {
107118
$order = $creditmemo->getOrder();
119+
$this->appEmulation->startEnvironmentEmulation($order->getStoreId(), Area::AREA_FRONTEND, true);
108120
$transport = [
109121
'order' => $order,
110122
'order_id' => $order->getId(),
@@ -124,6 +136,7 @@ public function send(Creditmemo $creditmemo, $forceSyncMode = false)
124136
]
125137
];
126138
$transportObject = new DataObject($transport);
139+
$this->appEmulation->stopEnvironmentEmulation();
127140

128141
/**
129142
* Event argument `transport` is @deprecated. Use `transportObject` instead.

app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceCommentSender.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*/
66
namespace Magento\Sales\Model\Order\Email\Sender;
77

8+
use Magento\Framework\App\Area;
9+
use Magento\Framework\App\ObjectManager;
810
use Magento\Sales\Model\Order;
911
use Magento\Sales\Model\Order\Email\Container\InvoiceCommentIdentity;
1012
use Magento\Sales\Model\Order\Email\Container\Template;
@@ -13,6 +15,7 @@
1315
use Magento\Sales\Model\Order\Address\Renderer;
1416
use Magento\Framework\Event\ManagerInterface;
1517
use Magento\Framework\DataObject;
18+
use Magento\Store\Model\App\Emulation;
1619

1720
/**
1821
* Class InvoiceCommentSender
@@ -31,6 +34,11 @@ class InvoiceCommentSender extends NotifySender
3134
*/
3235
protected $eventManager;
3336

37+
/**
38+
* @var Emulation
39+
*/
40+
private $appEmulation;
41+
3442
/**
3543
* @param Template $templateContainer
3644
* @param InvoiceCommentIdentity $identityContainer
@@ -45,11 +53,13 @@ public function __construct(
4553
\Magento\Sales\Model\Order\Email\SenderBuilderFactory $senderBuilderFactory,
4654
\Psr\Log\LoggerInterface $logger,
4755
Renderer $addressRenderer,
48-
ManagerInterface $eventManager
56+
ManagerInterface $eventManager,
57+
Emulation $appEmulation = null
4958
) {
5059
parent::__construct($templateContainer, $identityContainer, $senderBuilderFactory, $logger, $addressRenderer);
5160
$this->addressRenderer = $addressRenderer;
5261
$this->eventManager = $eventManager;
62+
$this->appEmulation = $appEmulation ?: ObjectManager::getInstance()->get(Emulation::class);
5363
}
5464

5565
/**
@@ -65,6 +75,7 @@ public function send(Invoice $invoice, $notify = true, $comment = '')
6575
$order = $invoice->getOrder();
6676
$this->identityContainer->setStore($order->getStore());
6777

78+
$this->appEmulation->startEnvironmentEmulation($order->getStoreId(), Area::AREA_FRONTEND, true);
6879
$transport = [
6980
'order' => $order,
7081
'invoice' => $invoice,
@@ -79,6 +90,7 @@ public function send(Invoice $invoice, $notify = true, $comment = '')
7990
]
8091
];
8192
$transportObject = new DataObject($transport);
93+
$this->appEmulation->stopEnvironmentEmulation();
8294

8395
/**
8496
* Event argument `transport` is @deprecated. Use `transportObject` instead.

app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
namespace Magento\Sales\Model\Order\Email\Sender;
99

10+
use Magento\Framework\App\Area;
11+
use Magento\Framework\App\ObjectManager;
1012
use Magento\Framework\DataObject;
1113
use Magento\Framework\Event\ManagerInterface;
1214
use Magento\Payment\Helper\Data as PaymentHelper;
@@ -17,6 +19,7 @@
1719
use Magento\Sales\Model\Order\Email\Sender;
1820
use Magento\Sales\Model\Order\Invoice;
1921
use Magento\Sales\Model\ResourceModel\Order\Invoice as InvoiceResource;
22+
use Magento\Store\Model\App\Emulation;
2023

2124
/**
2225
* Sends order invoice email to the customer.
@@ -54,6 +57,11 @@ class InvoiceSender extends Sender
5457
*/
5558
protected $eventManager;
5659

60+
/**
61+
* @var Emulation
62+
*/
63+
private $appEmulation;
64+
5765
/**
5866
* @param Template $templateContainer
5967
* @param InvoiceIdentity $identityContainer
@@ -74,14 +82,16 @@ public function __construct(
7482
PaymentHelper $paymentHelper,
7583
InvoiceResource $invoiceResource,
7684
\Magento\Framework\App\Config\ScopeConfigInterface $globalConfig,
77-
ManagerInterface $eventManager
85+
ManagerInterface $eventManager,
86+
Emulation $appEmulation = null
7887
) {
7988
parent::__construct($templateContainer, $identityContainer, $senderBuilderFactory, $logger, $addressRenderer);
8089
$this->paymentHelper = $paymentHelper;
8190
$this->invoiceResource = $invoiceResource;
8291
$this->globalConfig = $globalConfig;
8392
$this->addressRenderer = $addressRenderer;
8493
$this->eventManager = $eventManager;
94+
$this->appEmulation = $appEmulation ?: ObjectManager::getInstance()->get(Emulation::class);
8595
}
8696

8797
/**
@@ -112,7 +122,7 @@ public function send(Invoice $invoice, $forceSyncMode = false)
112122
$order->setBaseTaxAmount((float) $invoice->getBaseTaxAmount());
113123
$order->setBaseShippingAmount((float) $invoice->getBaseShippingAmount());
114124
}
115-
125+
$this->appEmulation->startEnvironmentEmulation($order->getStoreId(), Area::AREA_FRONTEND, true);
116126
$transport = [
117127
'order' => $order,
118128
'order_id' => $order->getId(),
@@ -132,6 +142,7 @@ public function send(Invoice $invoice, $forceSyncMode = false)
132142
]
133143
];
134144
$transportObject = new DataObject($transport);
145+
$this->appEmulation->stopEnvironmentEmulation();
135146

136147
/**
137148
* Event argument `transport` is @deprecated. Use `transportObject` instead.

app/code/Magento/Sales/Model/Order/Email/Sender/OrderCommentSender.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
*/
66
namespace Magento\Sales\Model\Order\Email\Sender;
77

8+
use Magento\Framework\App\Area;
9+
use Magento\Framework\App\ObjectManager;
810
use Magento\Sales\Model\Order;
911
use Magento\Sales\Model\Order\Email\Container\OrderCommentIdentity;
1012
use Magento\Sales\Model\Order\Email\Container\Template;
1113
use Magento\Sales\Model\Order\Email\NotifySender;
1214
use Magento\Sales\Model\Order\Address\Renderer;
1315
use Magento\Framework\Event\ManagerInterface;
1416
use Magento\Framework\DataObject;
17+
use Magento\Store\Model\App\Emulation;
1518

1619
/**
1720
* Class OrderCommentSender
@@ -30,25 +33,33 @@ class OrderCommentSender extends NotifySender
3033
*/
3134
protected $eventManager;
3235

36+
/**
37+
* @var Emulation
38+
*/
39+
private $appEmulation;
40+
3341
/**
3442
* @param Template $templateContainer
3543
* @param OrderCommentIdentity $identityContainer
3644
* @param Order\Email\SenderBuilderFactory $senderBuilderFactory
3745
* @param \Psr\Log\LoggerInterface $logger
3846
* @param Renderer $addressRenderer
3947
* @param ManagerInterface $eventManager
48+
* @param Emulation|null $appEmulation
4049
*/
4150
public function __construct(
4251
Template $templateContainer,
4352
OrderCommentIdentity $identityContainer,
4453
\Magento\Sales\Model\Order\Email\SenderBuilderFactory $senderBuilderFactory,
4554
\Psr\Log\LoggerInterface $logger,
4655
Renderer $addressRenderer,
47-
ManagerInterface $eventManager
56+
ManagerInterface $eventManager,
57+
Emulation $appEmulation = null
4858
) {
4959
parent::__construct($templateContainer, $identityContainer, $senderBuilderFactory, $logger, $addressRenderer);
5060
$this->addressRenderer = $addressRenderer;
5161
$this->eventManager = $eventManager;
62+
$this->appEmulation = $appEmulation ?: ObjectManager::getInstance()->get(Emulation::class);
5263
}
5364

5465
/**
@@ -63,6 +74,7 @@ public function send(Order $order, $notify = true, $comment = '')
6374
{
6475
$this->identityContainer->setStore($order->getStore());
6576

77+
$this->appEmulation->startEnvironmentEmulation($order->getStoreId(), Area::AREA_FRONTEND, true);
6678
$transport = [
6779
'order' => $order,
6880
'comment' => $comment,
@@ -76,6 +88,7 @@ public function send(Order $order, $notify = true, $comment = '')
7688
]
7789
];
7890
$transportObject = new DataObject($transport);
91+
$this->appEmulation->stopEnvironmentEmulation();
7992

8093
/**
8194
* Event argument `transport` is @deprecated. Use `transportObject` instead.

0 commit comments

Comments
 (0)