Skip to content

Commit f2bfdd9

Browse files
committed
11740: Sending emails from Admin in Multi-Store Environment defaults to Primary Store
1 parent ef03b52 commit f2bfdd9

File tree

6 files changed

+143
-38
lines changed

6 files changed

+143
-38
lines changed

app/code/Magento/Sales/Model/Order/Email/SenderBuilder.php

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

8+
use Magento\Framework\App\ObjectManager;
89
use Magento\Framework\Mail\Template\TransportBuilder;
10+
use Magento\Framework\Mail\Template\TransportBuilderByStore;
911
use Magento\Sales\Model\Order\Email\Container\IdentityInterface;
1012
use Magento\Sales\Model\Order\Email\Container\Template;
1113

@@ -26,19 +28,29 @@ class SenderBuilder
2628
*/
2729
protected $transportBuilder;
2830

31+
/**
32+
* @var TransportBuilderByStore
33+
*/
34+
private $transportBuilderByStore;
35+
2936
/**
3037
* @param Template $templateContainer
3138
* @param IdentityInterface $identityContainer
3239
* @param TransportBuilder $transportBuilder
40+
* @param TransportBuilderByStore $transportBuilderByStore
3341
*/
3442
public function __construct(
3543
Template $templateContainer,
3644
IdentityInterface $identityContainer,
37-
TransportBuilder $transportBuilder
45+
TransportBuilder $transportBuilder,
46+
TransportBuilderByStore $transportBuilderByStore = null
3847
) {
3948
$this->templateContainer = $templateContainer;
4049
$this->identityContainer = $identityContainer;
4150
$this->transportBuilder = $transportBuilder;
51+
$this->transportBuilderByStore = $transportBuilderByStore ?: ObjectManager::getInstance()->get(
52+
TransportBuilderByStore::class
53+
);
4254
}
4355

4456
/**
@@ -98,7 +110,7 @@ protected function configureEmailTemplate()
98110
$this->transportBuilder->setTemplateIdentifier($this->templateContainer->getTemplateId());
99111
$this->transportBuilder->setTemplateOptions($this->templateContainer->getTemplateOptions());
100112
$this->transportBuilder->setTemplateVars($this->templateContainer->getTemplateVars());
101-
$this->transportBuilder->setFromByStore(
113+
$this->transportBuilderByStore->setFromByStore(
102114
$this->identityContainer->getEmailIdentity(),
103115
$this->identityContainer->getStore()->getId()
104116
);

app/code/Magento/Sales/Test/Unit/Model/Order/Email/SenderBuilderTest.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
namespace Magento\Sales\Test\Unit\Model\Order\Email;
88

9+
use Magento\Framework\Mail\Template\TransportBuilderByStore;
910
use Magento\Sales\Model\Order\Email\SenderBuilder;
1011

1112
class SenderBuilderTest extends \PHPUnit\Framework\TestCase
@@ -35,6 +36,11 @@ class SenderBuilderTest extends \PHPUnit\Framework\TestCase
3536
*/
3637
private $storeMock;
3738

39+
/**
40+
* @var \PHPUnit_Framework_MockObject_MockObject
41+
*/
42+
private $transportBuilderByStore;
43+
3844
protected function setUp()
3945
{
4046
$templateId = 'test_template_id';
@@ -76,10 +82,11 @@ protected function setUp()
7682
'setTemplateIdentifier',
7783
'setTemplateOptions',
7884
'setTemplateVars',
79-
'setFromByStore',
8085
]
8186
);
8287

88+
$this->transportBuilderByStore = $this->createMock(TransportBuilderByStore::class);
89+
8390
$this->templateContainerMock->expects($this->once())
8491
->method('getTemplateId')
8592
->will($this->returnValue($templateId));
@@ -102,7 +109,7 @@ protected function setUp()
102109
$this->identityContainerMock->expects($this->once())
103110
->method('getEmailIdentity')
104111
->will($this->returnValue($emailIdentity));
105-
$this->transportBuilder->expects($this->once())
112+
$this->transportBuilderByStore->expects($this->once())
106113
->method('setFromByStore')
107114
->with($this->equalTo($emailIdentity));
108115

@@ -113,7 +120,8 @@ protected function setUp()
113120
$this->senderBuilder = new SenderBuilder(
114121
$this->templateContainerMock,
115122
$this->identityContainerMock,
116-
$this->transportBuilder
123+
$this->transportBuilder,
124+
$this->transportBuilderByStore
117125
);
118126
}
119127

lib/internal/Magento/Framework/Mail/Template/TransportBuilder.php

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -171,20 +171,6 @@ public function setFrom($from)
171171
return $this;
172172
}
173173

174-
/**
175-
* Set mail from address by store.
176-
*
177-
* @param string|array $from
178-
* @param string|int $store
179-
* @return $this
180-
*/
181-
public function setFromByStore($from, $store)
182-
{
183-
$result = $this->_senderResolver->resolve($from, $store);
184-
$this->message->setFrom($result['email'], $result['name']);
185-
return $this;
186-
}
187-
188174
/**
189175
* Set template identifier
190176
*
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\Mail\Template;
8+
9+
use Magento\Framework\Mail\MessageInterface;
10+
11+
class TransportBuilderByStore
12+
{
13+
/**
14+
* Message.
15+
*
16+
* @var \Magento\Framework\Mail\Message
17+
*/
18+
protected $message;
19+
20+
/**
21+
* Sender resolver.
22+
*
23+
* @var \Magento\Framework\Mail\Template\SenderResolverInterface
24+
*/
25+
private $senderResolver;
26+
27+
/**
28+
* @param MessageInterface $message
29+
* @param SenderResolverInterface $senderResolver
30+
*/
31+
public function __construct(
32+
MessageInterface $message,
33+
SenderResolverInterface $senderResolver
34+
) {
35+
$this->message = $message;
36+
$this->senderResolver = $senderResolver;
37+
}
38+
39+
/**
40+
* Set mail from address by store.
41+
*
42+
* @param string|array $from
43+
* @param string|int $store
44+
*
45+
* @return $this
46+
*/
47+
public function setFromByStore($from, $store)
48+
{
49+
$result = $this->senderResolver->resolve($from, $store);
50+
$this->message->setFrom($result['email'], $result['name']);
51+
52+
return $this;
53+
}
54+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Framework\Mail\Test\Unit\Template;
8+
9+
use Magento\Framework\Mail\Template\TransportBuilderByStore;
10+
11+
class TransportBuilderByStoreTest extends \PHPUnit\Framework\TestCase
12+
{
13+
/**
14+
* @var \Magento\Framework\Mail\Template\TransportBuilderByStore
15+
*/
16+
protected $model;
17+
18+
/**
19+
* @var \Magento\Framework\Mail\Message | \PHPUnit_Framework_MockObject_MockObject
20+
*/
21+
protected $messageMock;
22+
23+
/**
24+
* @var \Magento\Framework\Mail\Template\SenderResolverInterface | \PHPUnit_Framework_MockObject_MockObject
25+
*/
26+
protected $senderResolverMock;
27+
28+
/**
29+
* @return void
30+
*/
31+
protected function setUp()
32+
{
33+
$objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
34+
$this->messageMock = $this->createMock(\Magento\Framework\Mail\Message::class);
35+
$this->senderResolverMock = $this->createMock(\Magento\Framework\Mail\Template\SenderResolverInterface::class);
36+
37+
$this->model = $objectManagerHelper->getObject(
38+
TransportBuilderByStore::class,
39+
[
40+
'message' => $this->messageMock,
41+
'senderResolver' => $this->senderResolverMock,
42+
]
43+
);
44+
}
45+
46+
/**
47+
* @return void
48+
*/
49+
public function setFromByStore()
50+
{
51+
$sender = ['email' => '[email protected]', 'name' => 'name'];
52+
$store = 1;
53+
$this->senderResolverMock->expects($this->once())
54+
->method('resolve')
55+
->with($sender, $store)
56+
->willReturn($sender);
57+
$this->messageMock->expects($this->once())
58+
->method('setFrom')
59+
->with('[email protected]', 'name')
60+
->willReturnSelf();
61+
62+
$this->model->setFromByStore($sender, $store);
63+
}
64+
}

lib/internal/Magento/Framework/Mail/Test/Unit/Template/TransportBuilderTest.php

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -168,25 +168,6 @@ public function testSetFrom()
168168
$this->builder->setFrom($sender);
169169
}
170170

171-
/**
172-
* @return void
173-
*/
174-
public function setFromByStore()
175-
{
176-
$sender = ['email' => '[email protected]', 'name' => 'name'];
177-
$store = 1;
178-
$this->senderResolverMock->expects($this->once())
179-
->method('resolve')
180-
->with($sender, $store)
181-
->willReturn($sender);
182-
$this->messageMock->expects($this->once())
183-
->method('setFrom')
184-
->with('[email protected]', 'name')
185-
->willReturnSelf();
186-
187-
$this->builder->setFromByStore($sender);
188-
}
189-
190171
/**
191172
* @return void
192173
*/

0 commit comments

Comments
 (0)