Skip to content

Commit 47c5f72

Browse files
author
Graham Wharton
committed
Addressed review comments
1 parent 16afc09 commit 47c5f72

File tree

4 files changed

+138
-5
lines changed

4 files changed

+138
-5
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
namespace Magento\Sales\Model\Order\Email;
77

88
use Magento\Framework\Mail\Template\TransportBuilder;
9+
use Magento\Framework\Mail\Template\TransportBuilderByStore;
910
use Magento\Sales\Model\Order\Email\Container\IdentityInterface;
1011
use Magento\Sales\Model\Order\Email\Container\Template;
1112

@@ -30,11 +31,13 @@ class SenderBuilder
3031
* @param Template $templateContainer
3132
* @param IdentityInterface $identityContainer
3233
* @param TransportBuilder $transportBuilder
34+
* @param TransportBuilderByStore $transportBuilderByStore
3335
*/
3436
public function __construct(
3537
Template $templateContainer,
3638
IdentityInterface $identityContainer,
37-
TransportBuilder $transportBuilder
39+
TransportBuilder $transportBuilder,
40+
TransportBuilderByStore $transportBuilderByStore = null
3841
) {
3942
$this->templateContainer = $templateContainer;
4043
$this->identityContainer = $identityContainer;

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,16 +173,17 @@ public function setReplyTo($email, $name = null)
173173
/**
174174
* Set mail from address
175175
*
176-
* @deprecated Use setFromByStore
176+
* @deprecated This function sets the from address for the first store only.
177+
* new function setFromByStore introduced to allow setting of from address
178+
* based on store.
179+
* @see setFromByStore()
177180
*
178181
* @param string|array $from
179182
* @return $this
180183
*/
181184
public function setFrom($from)
182185
{
183-
$result = $this->_senderResolver->resolve($from);
184-
$this->message->setFrom($result['email'], $result['name']);
185-
return $this;
186+
return($this->setFromByStore($from));
186187
}
187188

188189
/**
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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+
/**
12+
* Class TransportBuilderByStore
13+
*
14+
* @deprecated The ability to set From address based on store is now available
15+
* in the \Magento\Framework\Mail\Template\TransportBuilder class
16+
* @see \Magento\Framework\Mail\Template\TransportBuilder::setFromByStore
17+
*/
18+
class TransportBuilderByStore
19+
{
20+
/**
21+
* Message.
22+
*
23+
* @var \Magento\Framework\Mail\Message
24+
*/
25+
protected $message;
26+
27+
/**
28+
* Sender resolver.
29+
*
30+
* @var \Magento\Framework\Mail\Template\SenderResolverInterface
31+
*/
32+
private $senderResolver;
33+
34+
/**
35+
* @param MessageInterface $message
36+
* @param SenderResolverInterface $senderResolver
37+
*/
38+
public function __construct(
39+
MessageInterface $message,
40+
SenderResolverInterface $senderResolver
41+
) {
42+
$this->message = $message;
43+
$this->senderResolver = $senderResolver;
44+
}
45+
46+
/**
47+
* Set mail from address by store.
48+
*
49+
* @param string|array $from
50+
* @param string|int $store
51+
*
52+
* @return $this
53+
*/
54+
public function setFromByStore($from, $store)
55+
{
56+
$result = $this->senderResolver->resolve($from, $store);
57+
$this->message->clearFrom();
58+
$this->message->setFrom($result['email'], $result['name']);
59+
60+
return $this;
61+
}
62+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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 testSetFromByStore()
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+
$this->messageMock->expects($this->once())
62+
->method('clearFrom')
63+
->willReturnSelf();
64+
65+
$this->model->setFromByStore($sender, $store);
66+
}
67+
}

0 commit comments

Comments
 (0)