Skip to content

Commit 35a2d53

Browse files
author
Kovsher, Iurii(ikovsher)
committed
Merge pull request #474 from magento-tango/MAGETWO-38049
[Tango-API] Bug fix 38049 backend links in frontend emails
2 parents da06802 + 9db1988 commit 35a2d53

File tree

24 files changed

+116
-55
lines changed

24 files changed

+116
-55
lines changed

app/code/Magento/Customer/view/frontend/email/account_new.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
-->
77
<!--@subject Welcome to {{var store.getFrontendName()}} @-->
88
<!--@vars {
9-
"var store.getUrl('customer/account/')":"Customer Account URL",
9+
"var this.getUrl($store, 'customer/account/')":"Customer Account URL",
1010
"var customer.email":"Customer Email",
1111
"var customer.name":"Customer Name"
1212
} @-->
@@ -19,7 +19,7 @@
1919
{{trans
2020
'To sign in to our site, use these credentials during checkout or on the <a href="%customer_url">My Account</a> page:'
2121

22-
customer_url=$store.getUrl('customer/account/')
22+
customer_url=$this.getUrl($store,'customer/account/')
2323
|raw}}
2424
</p>
2525
<ul>
@@ -30,7 +30,7 @@
3030
{{trans
3131
'Forgot your account password? Click <a href="%reset_url">here</a> to reset it.'
3232

33-
reset_url="$store.getUrl('customer/account/createPassword/', [_query:[id:$customer.id, token:$customer.rp_token]])"
33+
reset_url="$this.getUrl($store,'customer/account/createPassword/',[_query:[id:$customer.id,token:$customer.rp_token]])"
3434
|raw}}
3535
</p>
3636
<p>{{trans "When you sign in to your account, you will be able to:"}}</p>

app/code/Magento/Customer/view/frontend/email/account_new_confirmation.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
-->
77
<!--@subject Please confirm your {{var store.getFrontendName()}} account @-->
88
<!--@vars {
9-
"var store.getUrl('customer/account/confirm/', [_query:[id:$customer.id, key:$customer.confirmation, back_url:$back_url]])":"Account Confirmation URL",
10-
"var store.getUrl('customer/account/')":"Customer Account URL",
9+
"var this.getUrl($store, 'customer/account/confirm/', [_query:[id:$customer.id, key:$customer.confirmation, back_url:$back_url]])":"Account Confirmation URL",
10+
"var this.getUrl($store, 'customer/account/')":"Customer Account URL",
1111
"var customer.email":"Customer Email",
1212
"var customer.name":"Customer Name"
1313
} @-->
@@ -23,7 +23,7 @@
2323
<table class="inner-wrapper" border="0" cellspacing="0" cellpadding="0" align="center">
2424
<tr>
2525
<td align="center">
26-
<a href="{{var store.getUrl('customer/account/confirm/', [_query:[id:$customer.id, key:$customer.confirmation, back_url:$back_url]])}}" target="_blank">{{trans "Confirm Your Account"}}</a>
26+
<a href="{{var this.getUrl($store,'customer/account/confirm/',[_query:[id:$customer.id,key:$customer.confirmation,back_url:$back_url]])}}" target="_blank">{{trans "Confirm Your Account"}}</a>
2727
</td>
2828
</tr>
2929
</table>

app/code/Magento/Customer/view/frontend/email/account_new_confirmed.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
-->
77
<!--@subject Welcome to {{var store.getFrontendName()}} @-->
88
<!--@vars {
9-
"var store.getUrl('customer/account/')":"Customer Account URL",
9+
"var this.getUrl($store, 'customer/account/')":"Customer Account URL",
1010
"var customer.email":"Customer Email",
1111
"var customer.name":"Customer Name"
1212
} @-->
@@ -18,7 +18,7 @@
1818
{{trans
1919
'To sign in to our site, use these credentials during checkout or on the <a href="%customer_url">My Account</a> page:'
2020

21-
customer_url=$store.getUrl('customer/account/')
21+
customer_url=$this.getUrl($store,'customer/account/')
2222
|raw}}
2323
</p>
2424
<ul>
@@ -29,7 +29,7 @@
2929
{{trans
3030
'Forgot your account password? Click <a href="%reset_url">here</a> to reset it.'
3131

32-
reset_url="$store.getUrl('customer/account/createPassword/', [_query:[id:$customer.id, token:$customer.rp_token]])"
32+
reset_url="$this.getUrl($store,'customer/account/createPassword/',[_query:[id:$customer.id,token:$customer.rp_token]])"
3333
|raw}}
3434
</p>
3535
<p>{{trans "When you sign in to your account, you will be able to:"}}</p>

app/code/Magento/Customer/view/frontend/email/password_new.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
-->
77
<!--@subject Reset your {{var store.getFrontendName()}} password @-->
88
<!--@vars {
9-
"var store.getUrl('customer/account/')":"Customer Account URL",
9+
"var this.getUrl(store, 'customer/account/')":"Customer Account URL",
1010
"var customer.name":"Customer Name"
1111
} @-->
1212
{{template config_path="design/email/header_template"}}
@@ -21,7 +21,7 @@
2121
<table class="inner-wrapper" border="0" cellspacing="0" cellpadding="0" align="center">
2222
<tr>
2323
<td align="center">
24-
<a href="{{var store.getUrl('customer/account/createPassword', [_query:[id:$customer.id, token:$customer.rp_token]])}}" target="_blank">{{trans "Reset Password"}}</a>
24+
<a href="{{var this.getUrl($store,'customer/account/createPassword',[_query:[id:$customer.id,token:$customer.rp_token]])}}" target="_blank">{{trans "Reset Password"}}</a>
2525
</td>
2626
</tr>
2727
</table>

app/code/Magento/Customer/view/frontend/email/password_reset_confirmation.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<!--@subject Reset your {{var store.getFrontendName()}} password @-->
88
<!--@vars {
99
"var customer.name":"Customer Name",
10-
"var store.getUrl('customer/account/createPassword/', [_query:[id:$customer.id, token:$customer.rp_token]])":"Reset Password URL"
10+
"var this.getUrl($store, 'customer/account/createPassword/', [_query:[id:$customer.id, token:$customer.rp_token]])":"Reset Password URL"
1111
} @-->
1212
{{template config_path="design/email/header_template"}}
1313

@@ -21,7 +21,7 @@
2121
<table class="inner-wrapper" border="0" cellspacing="0" cellpadding="0" align="center">
2222
<tr>
2323
<td align="center">
24-
<a href="{{var store.getUrl('customer/account/createPassword/', [_query:[id:$customer.id, token:$customer.rp_token]])}}" target="_blank">{{trans "Reset Password"}}</a>
24+
<a href="{{var this.getUrl($store,'customer/account/createPassword/',[_query:[id:$customer.id,token:$customer.rp_token]])}}" target="_blank">{{trans "Reset Password"}}</a>
2525
</td>
2626
</tr>
2727
</table>

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

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,11 @@ abstract class AbstractTemplate extends AbstractModel implements TemplateTypesIn
146146
*/
147147
protected $emailConfig;
148148

149+
/**
150+
* @var \Magento\Framework\UrlInterface
151+
*/
152+
private $urlModel;
153+
149154
/**
150155
* @param \Magento\Framework\Model\Context $context
151156
* @param \Magento\Framework\View\DesignInterface $design
@@ -157,6 +162,7 @@ abstract class AbstractTemplate extends AbstractModel implements TemplateTypesIn
157162
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
158163
* @param Template\Config $emailConfig
159164
* @param \Magento\Email\Model\TemplateFactory $templateFactory
165+
* @param \Magento\Framework\Url $urlModel
160166
* @param array $data
161167
*
162168
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -172,6 +178,7 @@ public function __construct(
172178
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
173179
Template\Config $emailConfig,
174180
TemplateFactory $templateFactory,
181+
\Magento\Framework\UrlInterface $urlModel,
175182
array $data = []
176183
) {
177184
$this->design = $design;
@@ -184,6 +191,7 @@ public function __construct(
184191
$this->scopeConfig = $scopeConfig;
185192
$this->emailConfig = $emailConfig;
186193
$this->templateFactory = $templateFactory;
194+
$this->urlModel = $urlModel;
187195
parent::__construct($context, $registry, null, null, $data);
188196
}
189197

@@ -645,11 +653,9 @@ public function getTemplateFilter()
645653
{
646654
if (empty($this->templateFilter)) {
647655
$this->templateFilter = $this->getFilterFactory()->create();
648-
$this->templateFilter->setUseAbsoluteLinks(
649-
$this->getUseAbsoluteLinks()
650-
)->setStoreId(
651-
$this->getDesignConfig()->getStore()
652-
);
656+
$this->templateFilter->setUseAbsoluteLinks($this->getUseAbsoluteLinks())
657+
->setStoreId($this->getDesignConfig()->getStore())
658+
->setUrlModel($this->urlModel);
653659
}
654660
return $this->templateFilter;
655661
}
@@ -716,4 +722,21 @@ abstract protected function getFilterFactory();
716722
* @return int|string
717723
*/
718724
abstract public function getType();
725+
726+
/**
727+
* Generate URL for the specified store.
728+
*
729+
* @param \Magento\Store\Model\Store $store
730+
* @param string $route
731+
* @param array $params
732+
* @return string
733+
*/
734+
public function getUrl(\Magento\Store\Model\Store $store, $route = '', $params = [])
735+
{
736+
$url = $this->urlModel->setScope($store);
737+
if ($this->storeManager->getStore()->getId() != $store->getId()) {
738+
$params['_scope_to_url'] = true;
739+
}
740+
return $url->getUrl($route, $params);
741+
}
719742
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class BackendTemplate extends Template
3030
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
3131
* @param \Magento\Email\Model\Template\Config $emailConfig
3232
* @param \Magento\Email\Model\TemplateFactory $templateFactory
33+
* @param \Magento\Framework\UrlInterface $urlModel
3334
* @param \Magento\Email\Model\Template\FilterFactory $filterFactory
3435
* @param \Magento\Config\Model\Config\Structure $structure
3536
* @param array $data
@@ -47,6 +48,7 @@ public function __construct(
4748
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
4849
\Magento\Email\Model\Template\Config $emailConfig,
4950
\Magento\Email\Model\TemplateFactory $templateFactory,
51+
\Magento\Framework\UrlInterface $urlModel,
5052
\Magento\Email\Model\Template\FilterFactory $filterFactory,
5153
\Magento\Config\Model\Config\Structure $structure,
5254
array $data = []
@@ -63,6 +65,7 @@ public function __construct(
6365
$scopeConfig,
6466
$emailConfig,
6567
$templateFactory,
68+
$urlModel,
6669
$filterFactory,
6770
$data
6871
);

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,15 @@ class Template extends AbstractTemplate implements \Magento\Framework\Mail\Templ
9898
protected $_sendingException = null;
9999

100100
/**
101-
* Constructor
102-
*
103101
* Email filter factory
104102
*
105103
* @var \Magento\Email\Model\Template\FilterFactory
106104
*/
107105
private $filterFactory;
108106

109107
/**
108+
* Initialize dependencies
109+
*
110110
* @param \Magento\Framework\Model\Context $context
111111
* @param \Magento\Framework\View\DesignInterface $design
112112
* @param \Magento\Framework\Registry $registry
@@ -117,6 +117,7 @@ class Template extends AbstractTemplate implements \Magento\Framework\Mail\Templ
117117
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
118118
* @param Template\Config $emailConfig
119119
* @param \Magento\Email\Model\TemplateFactory $templateFactory
120+
* @param \Magento\Framework\UrlInterface $urlModel
120121
* @param \Magento\Email\Model\Template\FilterFactory $filterFactory
121122
* @param array $data
122123
*
@@ -133,6 +134,7 @@ public function __construct(
133134
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
134135
\Magento\Email\Model\Template\Config $emailConfig,
135136
\Magento\Email\Model\TemplateFactory $templateFactory,
137+
\Magento\Framework\UrlInterface $urlModel,
136138
\Magento\Email\Model\Template\FilterFactory $filterFactory,
137139
array $data = []
138140
) {
@@ -148,6 +150,7 @@ public function __construct(
148150
$scopeConfig,
149151
$emailConfig,
150152
$templateFactory,
153+
$urlModel,
151154
$data
152155
);
153156
}

app/code/Magento/Email/Model/Template/Filter.php

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,9 @@ class Filter extends \Magento\Framework\Filter\Template
136136
protected $_appState;
137137

138138
/**
139-
* @var \Magento\Backend\Model\UrlInterface
139+
* @var \Magento\Framework\UrlInterface
140140
*/
141-
protected $backendUrlBuilder;
141+
protected $urlModel;
142142

143143
/**
144144
* @var \Pelago\Emogrifier
@@ -156,7 +156,7 @@ class Filter extends \Magento\Framework\Filter\Template
156156
* @param \Magento\Framework\View\LayoutInterface $layout
157157
* @param \Magento\Framework\View\LayoutFactory $layoutFactory
158158
* @param \Magento\Framework\App\State $appState
159-
* @param \Magento\Backend\Model\UrlInterface $backendUrlBuilder
159+
* @param \Magento\Framework\UrlInterface $urlModel
160160
* @param \Pelago\Emogrifier $emogrifier
161161
* @param array $variables
162162
*
@@ -173,7 +173,7 @@ public function __construct(
173173
\Magento\Framework\View\LayoutInterface $layout,
174174
\Magento\Framework\View\LayoutFactory $layoutFactory,
175175
\Magento\Framework\App\State $appState,
176-
\Magento\Backend\Model\UrlInterface $backendUrlBuilder,
176+
\Magento\Framework\UrlInterface $urlModel,
177177
\Pelago\Emogrifier $emogrifier,
178178
$variables = []
179179
) {
@@ -187,7 +187,7 @@ public function __construct(
187187
$this->_layout = $layout;
188188
$this->_layoutFactory = $layoutFactory;
189189
$this->_appState = $appState;
190-
$this->backendUrlBuilder = $backendUrlBuilder;
190+
$this->urlModel = $urlModel;
191191
$this->emogrifier = $emogrifier;
192192
parent::__construct($string, $variables);
193193
}
@@ -495,22 +495,19 @@ public function storeDirective($construction)
495495
unset($params['url']);
496496
}
497497

498-
return $this->getUrl($path, $params);
498+
return $this->urlModel->getUrl($path, $params);
499499
}
500500

501501
/**
502-
* @param string $path
503-
* @param array $params
504-
* @return string
502+
* Set current URL model, which will be used for URLs generation.
503+
*
504+
* @param \Magento\Framework\UrlInterface $urlModel
505+
* @return $this
505506
*/
506-
protected function getUrl($path, $params)
507+
public function setUrlModel(\Magento\Framework\UrlInterface $urlModel)
507508
{
508-
$isBackendStore = \Magento\Store\Model\Store::DEFAULT_STORE_ID === $this->getStoreId()
509-
|| \Magento\Store\Model\Store::ADMIN_CODE === $this->getStoreId();
510-
511-
return $isBackendStore
512-
? $this->backendUrlBuilder->getUrl($path, $params)
513-
: $this->_storeManager->getStore($this->getStoreId())->getUrl($path, $params);
509+
$this->urlModel = $urlModel;
510+
return $this;
514511
}
515512

516513
/**

app/code/Magento/Email/Test/Unit/Model/TemplateTest.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
6161
*/
6262
private $filterFactory;
6363

64+
/**
65+
* @var \Magento\Framework\Url|\PHPUnit_Framework_MockObject_MockObject
66+
*/
67+
private $urlModel;
68+
6469
/**
6570
* @var \Magento\Email\Model\Template\Config|\PHPUnit_Framework_MockObject_MockObject
6671
*/
@@ -103,6 +108,9 @@ public function setUp()
103108
$this->templateFactory = $this->getMockBuilder('Magento\Email\Model\TemplateFactory')
104109
->disableOriginalConstructor()
105110
->getMock();
111+
$this->urlModel = $this->getMockBuilder('Magento\Framework\Url')
112+
->disableOriginalConstructor()
113+
->getMock();
106114
$this->filterFactory = $this->getMockBuilder('Magento\Email\Model\Template\FilterFactory')
107115
->setMethods(['create'])
108116
->disableOriginalConstructor()
@@ -131,6 +139,7 @@ protected function getModelMock(array $mockedMethods = [])
131139
$this->scopeConfig,
132140
$this->emailConfig,
133141
$this->templateFactory,
142+
$this->urlModel,
134143
$this->filterFactory
135144
]
136145
)
@@ -160,7 +169,7 @@ public function testSetAndGetTemplateFilter()
160169
public function testGetTemplateFilterWithEmptyValue()
161170
{
162171
$filterTemplate = $this->getMockBuilder('Magento\Framework\Filter\Template')
163-
->setMethods(['setUseAbsoluteLinks', 'setStoreId'])
172+
->setMethods(['setUseAbsoluteLinks', 'setStoreId', 'setUrlModel'])
164173
->disableOriginalConstructor()
165174
->getMock();
166175
$filterTemplate->expects($this->once())
@@ -737,6 +746,7 @@ public function testGetType($templateType, $expectedResult)
737746
$this->getMock('Magento\Framework\App\Config\ScopeConfigInterface'),
738747
$emailConfig,
739748
$this->getMock('Magento\Email\Model\TemplateFactory', [], [], '', false),
749+
$this->getMock('Magento\Framework\Url', [], [], '', false),
740750
$this->getMock('Magento\Email\Model\Template\FilterFactory', [], [], '', false),
741751
['template_id' => 10],
742752
]

0 commit comments

Comments
 (0)