Skip to content

Commit 3a90a0f

Browse files
committed
MC-15295: refactoring interfaces and implementation acoarding to code review from Igor Menik
1 parent 8b3f427 commit 3a90a0f

20 files changed

+300
-364
lines changed

.graphqlconfig

Lines changed: 0 additions & 15 deletions
This file was deleted.

app/code/Magento/Email/Model/Transport.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
use Magento\Framework\App\Config\ScopeConfigInterface;
1111
use Magento\Framework\Exception\MailException;
12-
use Magento\Framework\Mail\MessageEnvelopeInterface;
12+
use Magento\Framework\Mail\EmailMessageInterface;
1313
use Magento\Framework\Mail\MessageInterface;
1414
use Magento\Framework\Mail\TransportInterface;
1515
use Magento\Framework\Phrase;
@@ -62,12 +62,12 @@ class Transport implements TransportInterface
6262
private $message;
6363

6464
/**
65-
* @param MessageEnvelopeInterface $message Email message object
65+
* @param EmailMessageInterface $message Email message object
6666
* @param ScopeConfigInterface $scopeConfig Core store config
6767
* @param null|string|array|\Traversable $parameters Config options for sendmail parameters
6868
*/
6969
public function __construct(
70-
MessageEnvelopeInterface $message,
70+
EmailMessageInterface $message,
7171
ScopeConfigInterface $scopeConfig,
7272
$parameters = null
7373
) {

app/code/Magento/Email/etc/di.xml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@
1010
<preference for="Magento\Framework\Mail\Template\FactoryInterface" type="Magento\Framework\Mail\Template\Factory" />
1111
<preference for="Magento\Framework\Mail\TransportInterface" type="Magento\Email\Model\Transport" />
1212
<preference for="Magento\Framework\Mail\MessageInterface" type="Magento\Framework\Mail\Message" />
13-
<preference for="Magento\Framework\Mail\MessageEnvelopeInterface" type="Magento\Framework\Mail\MessageEnvelope" />
14-
<preference for="Magento\Framework\Mail\MimeMessageInterface" type="Magento\Framework\Mail\MimeMessage" />
15-
<preference for="Magento\Framework\Mail\MimePartInterface" type="Magento\Framework\Mail\MimePart" />
1613
<preference for="Magento\Framework\Mail\Template\SenderResolverInterface" type="Magento\Email\Model\Template\SenderResolver" />
1714
<type name="Magento\Email\Model\BackendTemplate">
1815
<arguments>

app/code/Magento/Newsletter/Model/Queue/TransportBuilder.php

Lines changed: 172 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,24 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Newsletter\Model\Queue;
79

810
use Magento\Email\Model\AbstractTemplate;
11+
use Magento\Framework\Mail\EmailMessageInterfaceFactory;
12+
use Magento\Framework\Mail\MessageInterface;
13+
use Magento\Framework\Mail\MessageInterfaceFactory;
14+
use Magento\Framework\Mail\MimeMessageInterfaceFactory;
15+
use Magento\Framework\Mail\MimePartInterfaceFactory;
16+
use Magento\Framework\Mail\Template\FactoryInterface;
17+
use Magento\Framework\Mail\Template\SenderResolverInterface;
18+
use Magento\Framework\Mail\TransportInterfaceFactory;
19+
use Magento\Framework\ObjectManagerInterface;
920

21+
/**
22+
* Class TransportBuilder
23+
*/
1024
class TransportBuilder extends \Magento\Framework\Mail\Template\TransportBuilder
1125
{
1226
/**
@@ -16,6 +30,151 @@ class TransportBuilder extends \Magento\Framework\Mail\Template\TransportBuilder
1630
*/
1731
protected $templateData = [];
1832

33+
/**
34+
* Param that used for storing all message data until it will be used
35+
*
36+
* @var array
37+
*/
38+
private $messageData = [];
39+
40+
/**
41+
* @var EmailMessageInterfaceFactory
42+
*/
43+
private $emailMessageInterfaceFactory;
44+
45+
/**
46+
* @var MimeMessageInterfaceFactory
47+
*/
48+
private $mimeMessageInterfaceFactory;
49+
50+
/**
51+
* @var MimePartInterfaceFactory
52+
*/
53+
private $mimePartInterfaceFactory;
54+
55+
/**
56+
* TransportBuilder constructor
57+
*
58+
* @param FactoryInterface $templateFactory
59+
* @param MessageInterface $message
60+
* @param SenderResolverInterface $senderResolver
61+
* @param ObjectManagerInterface $objectManager
62+
* @param TransportInterfaceFactory $mailTransportFactory
63+
* @param MessageInterfaceFactory|null $messageFactory
64+
* @param EmailMessageInterfaceFactory|null $emailMessageInterfaceFactory
65+
* @param MimeMessageInterfaceFactory|null $mimeMessageInterfaceFactory
66+
* @param MimePartInterfaceFactory|null $mimePartInterfaceFactory
67+
*/
68+
public function __construct(
69+
FactoryInterface $templateFactory,
70+
MessageInterface $message,
71+
SenderResolverInterface $senderResolver,
72+
ObjectManagerInterface $objectManager,
73+
TransportInterfaceFactory $mailTransportFactory,
74+
MessageInterfaceFactory $messageFactory = null,
75+
EmailMessageInterfaceFactory $emailMessageInterfaceFactory = null,
76+
MimeMessageInterfaceFactory $mimeMessageInterfaceFactory = null,
77+
MimePartInterfaceFactory $mimePartInterfaceFactory = null
78+
) {
79+
parent::__construct(
80+
$templateFactory,
81+
$message,
82+
$senderResolver,
83+
$objectManager,
84+
$mailTransportFactory,
85+
$messageFactory,
86+
$emailMessageInterfaceFactory,
87+
$mimeMessageInterfaceFactory,
88+
$mimePartInterfaceFactory
89+
);
90+
$this->emailMessageInterfaceFactory = $emailMessageInterfaceFactory ?: $this->objectManager
91+
->get(EmailMessageInterfaceFactory::class);
92+
$this->mimeMessageInterfaceFactory = $mimeMessageInterfaceFactory ?: $this->objectManager
93+
->get(MimeMessageInterfaceFactory::class);
94+
$this->mimePartInterfaceFactory = $mimePartInterfaceFactory ?: $this->objectManager
95+
->get(MimePartInterfaceFactory::class);
96+
}
97+
98+
/**
99+
* @inheritDoc
100+
*/
101+
public function addCc($address, $name = '')
102+
{
103+
$this->messageData['cc'][$address] = $name;
104+
105+
return $this;
106+
}
107+
108+
/**
109+
* Add to address
110+
*
111+
* @param array|string $address
112+
* @param string $name
113+
* @return $this
114+
*/
115+
public function addTo($address, $name = '')
116+
{
117+
if (!$name) {
118+
$this->messageData['to'][] = $address;
119+
} else {
120+
$this->messageData['to'][$address] = $name;
121+
}
122+
123+
return $this;
124+
}
125+
126+
/**
127+
* @inheritDoc
128+
*/
129+
public function addBcc($address)
130+
{
131+
$this->messageData['bcc'] = $address;
132+
133+
return $this;
134+
}
135+
136+
/**
137+
* @inheritDoc
138+
*/
139+
public function setReplyTo($email, $name = null)
140+
{
141+
$this->messageData['replyTo'][$email] = $name;
142+
143+
return $this;
144+
}
145+
146+
/**
147+
* @inheritDoc
148+
*/
149+
public function setFrom($from)
150+
{
151+
return $this->setFromByScope($from, null);
152+
}
153+
154+
/**
155+
* @inheritDoc
156+
*/
157+
public function setFromByScope($from, $scopeId = null)
158+
{
159+
$result = $this->_senderResolver->resolve($from, $scopeId);
160+
$this->messageData['from'][$result['email']] = $result['name'];
161+
162+
return $this;
163+
}
164+
165+
/**
166+
* @inheritDoc
167+
*/
168+
protected function reset()
169+
{
170+
$this->messageData = [];
171+
$this->templateIdentifier = null;
172+
$this->templateVars = null;
173+
$this->templateOptions = null;
174+
175+
return $this;
176+
}
177+
19178
/**
20179
* Set template data
21180
*
@@ -25,11 +184,15 @@ class TransportBuilder extends \Magento\Framework\Mail\Template\TransportBuilder
25184
public function setTemplateData($data)
26185
{
27186
$this->templateData = $data;
187+
28188
return $this;
29189
}
30190

31191
/**
192+
* Sets up template filter
193+
*
32194
* @param AbstractTemplate $template
195+
*
33196
* @return void
34197
*/
35198
protected function setTemplateFilter(AbstractTemplate $template)
@@ -48,9 +211,16 @@ protected function prepareMessage()
48211
$template = $this->getTemplate()->setData($this->templateData);
49212
$this->setTemplateFilter($template);
50213
$part['content'] = $template->getProcessedTemplate($this->templateVars);
51-
$this->messageData['body'][] = $part;
52214
$this->messageData['subject'] = $template->getSubject();
53-
$this->message = $this->mailEnvelopeBuilder->buildByArray($this->messageData);
215+
216+
$this->messageData['body'] = $this->mimeMessageInterfaceFactory
217+
->create(['parts' => [$this->mimePartInterfaceFactory->create([$part])]]);
218+
219+
$this->messageData['subject'] = html_entity_decode(
220+
(string)$template->getSubject(),
221+
ENT_QUOTES
222+
);
223+
$this->message = $this->emailMessageInterfaceFactory->create($this->messageData);
54224

55225
return $this;
56226
}

app/code/Magento/Newsletter/Test/Unit/Model/Queue/TransportBuilderTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Newsletter\Test\Unit\Model\Queue;
79

810
use Magento\Framework\App\TemplateTypesInterface;
911
use Magento\Framework\Mail\MessageInterface;
1012

13+
/**
14+
* Class TransportBuilderTest
15+
*/
1116
class TransportBuilderTest extends \PHPUnit\Framework\TestCase
1217
{
1318
/**

app/etc/di.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1771,4 +1771,10 @@
17711771
<preference for="Magento\Framework\MessageQueue\PoisonPill\PoisonPillPutInterface" type="Magento\Framework\MessageQueue\PoisonPill\PoisonPillPut"/>
17721772
<preference for="Magento\Framework\MessageQueue\PoisonPill\PoisonPillReadInterface" type="Magento\Framework\MessageQueue\PoisonPill\PoisonPillRead"/>
17731773
<preference for="Magento\Framework\MessageQueue\CallbackInvokerInterface" type="Magento\Framework\MessageQueue\CallbackInvoker"/>
1774+
<preference for="Magento\Framework\Mail\EmailMessageInterface"
1775+
type="Magento\Framework\Mail\EmailMessage" />
1776+
<preference for="Magento\Framework\Mail\MimeMessageInterface"
1777+
type="Magento\Framework\Mail\MimeMessage" />
1778+
<preference for="Magento\Framework\Mail\MimePartInterface"
1779+
type="Magento\Framework\Mail\MimePart" />
17741780
</config>

0 commit comments

Comments
 (0)