8
8
9
9
namespace Magento \Framework \Translate ;
10
10
11
- class Inline implements \Magento \Framework \Translate \InlineInterface
11
+ use Magento \Framework \App \Area ;
12
+ use Magento \Framework \App \ObjectManager ;
13
+ use Magento \Framework \App \ScopeInterface ;
14
+ use Magento \Framework \App \ScopeResolverInterface ;
15
+ use Magento \Framework \App \State ;
16
+ use Magento \Framework \Exception \LocalizedException ;
17
+ use Magento \Framework \Translate \Inline \ConfigInterface ;
18
+ use Magento \Framework \Translate \Inline \ParserInterface ;
19
+ use Magento \Framework \Translate \Inline \StateInterface ;
20
+ use Magento \Framework \UrlInterface ;
21
+ use Magento \Framework \View \Element \Template ;
22
+ use Magento \Framework \View \LayoutInterface ;
23
+
24
+ /**
25
+ * Translate Inline Class
26
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
27
+ */
28
+ class Inline implements InlineInterface
12
29
{
13
30
/**
14
31
* Indicator to hold state of whether inline translation is allowed
@@ -18,7 +35,7 @@ class Inline implements \Magento\Framework\Translate\InlineInterface
18
35
protected $ isAllowed ;
19
36
20
37
/**
21
- * @var \Magento\Framework\Translate\Inline\ ParserInterface
38
+ * @var ParserInterface
22
39
*/
23
40
protected $ parser ;
24
41
@@ -30,22 +47,22 @@ class Inline implements \Magento\Framework\Translate\InlineInterface
30
47
protected $ isScriptInserted = false ;
31
48
32
49
/**
33
- * @var \Magento\Framework\ UrlInterface
50
+ * @var UrlInterface
34
51
*/
35
52
protected $ url ;
36
53
37
54
/**
38
- * @var \Magento\Framework\View\ LayoutInterface
55
+ * @var LayoutInterface
39
56
*/
40
57
protected $ layout ;
41
58
42
59
/**
43
- * @var \Magento\Framework\Translate\Inline\ ConfigInterface
60
+ * @var ConfigInterface
44
61
*/
45
62
protected $ config ;
46
63
47
64
/**
48
- * @var \Magento\Framework\App\ ScopeResolverInterface
65
+ * @var ScopeResolverInterface
49
66
*/
50
67
protected $ scopeResolver ;
51
68
@@ -70,28 +87,39 @@ class Inline implements \Magento\Framework\Translate\InlineInterface
70
87
protected $ state ;
71
88
72
89
/**
73
- * Initialize inline translation model
74
- *
75
- * @param \Magento\Framework\App\ScopeResolverInterface $scopeResolver
76
- * @param \Magento\Framework\UrlInterface $url
77
- * @param \Magento\Framework\View\LayoutInterface $layout
90
+ * @var array
91
+ */
92
+ private $ allowedAreas = [Area::AREA_FRONTEND , Area::AREA_ADMINHTML ];
93
+
94
+ /**
95
+ * @var State
96
+ */
97
+ private $ appState ;
98
+
99
+ /**
100
+ * @param ScopeResolverInterface $scopeResolver
101
+ * @param UrlInterface $url
102
+ * @param LayoutInterface $layout
78
103
* @param Inline\ConfigInterface $config
79
104
* @param Inline\ParserInterface $parser
80
105
* @param Inline\StateInterface $state
81
106
* @param string $templateFileName
82
107
* @param string $translatorRoute
83
- * @param null $scope
108
+ * @param string|null $scope
109
+ * @param State|null $appState
110
+ * @SuppressWarnings(PHPMD.ExcessiveParameterList)
84
111
*/
85
112
public function __construct (
86
- \ Magento \ Framework \ App \ ScopeResolverInterface $ scopeResolver ,
87
- \ Magento \ Framework \ UrlInterface $ url ,
88
- \ Magento \ Framework \ View \ LayoutInterface $ layout ,
89
- \ Magento \ Framework \ Translate \ Inline \ ConfigInterface $ config ,
90
- \ Magento \ Framework \ Translate \ Inline \ ParserInterface $ parser ,
91
- \ Magento \ Framework \ Translate \ Inline \ StateInterface $ state ,
113
+ ScopeResolverInterface $ scopeResolver ,
114
+ UrlInterface $ url ,
115
+ LayoutInterface $ layout ,
116
+ ConfigInterface $ config ,
117
+ ParserInterface $ parser ,
118
+ StateInterface $ state ,
92
119
$ templateFileName = '' ,
93
120
$ translatorRoute = '' ,
94
- $ scope = null
121
+ $ scope = null ,
122
+ ?State $ appState = null
95
123
) {
96
124
$ this ->scopeResolver = $ scopeResolver ;
97
125
$ this ->url = $ url ;
@@ -102,6 +130,7 @@ public function __construct(
102
130
$ this ->templateFileName = $ templateFileName ;
103
131
$ this ->translatorRoute = $ translatorRoute ;
104
132
$ this ->scope = $ scope ;
133
+ $ this ->appState = $ appState ?: ObjectManager::getInstance ()->get (State::class);
105
134
}
106
135
107
136
/**
@@ -112,12 +141,13 @@ public function __construct(
112
141
public function isAllowed ()
113
142
{
114
143
if ($ this ->isAllowed === null ) {
115
- if (!$ this ->scope instanceof \Magento \Framework \App \ScopeInterface) {
116
- $ scope = $ this ->scopeResolver ->getScope ($ this ->scope );
117
- }
144
+ $ scope = $ this ->scope instanceof ScopeInterface ? null : $ this ->scopeResolver ->getScope ($ this ->scope );
145
+
118
146
$ this ->isAllowed = $ this ->config ->isActive ($ scope )
119
- && $ this ->config ->isDevAllowed ($ scope );
147
+ && $ this ->config ->isDevAllowed ($ scope )
148
+ && $ this ->isAreaAllowed ();
120
149
}
150
+
121
151
return $ this ->state ->isEnabled () && $ this ->isAllowed ;
122
152
}
123
153
@@ -134,7 +164,7 @@ public function getParser()
134
164
/**
135
165
* Replace translation templates with HTML fragments
136
166
*
137
- * @param array|string & $body
167
+ * @param array|string $body
138
168
* @param bool $isJson
139
169
* @return $this
140
170
*/
@@ -189,7 +219,9 @@ protected function addInlineScript()
189
219
return ;
190
220
}
191
221
if (!$ this ->isScriptInserted ) {
192
- $ this ->getParser ()->setContent (str_ireplace ('</body> ' , $ this ->getInlineScript () . '</body> ' , $ content ));
222
+ $ this ->getParser ()->setContent (
223
+ str_ireplace ('</body> ' , $ this ->getInlineScript () . '</body> ' , $ content )
224
+ );
193
225
$ this ->isScriptInserted = true ;
194
226
}
195
227
}
@@ -204,8 +236,8 @@ protected function addInlineScript()
204
236
*/
205
237
protected function getInlineScript ()
206
238
{
207
- /** @var $block \Magento\Framework\View\Element\ Template */
208
- $ block = $ this ->layout ->createBlock (\ Magento \ Framework \ View \ Element \ Template::class);
239
+ /** @var $block Template */
240
+ $ block = $ this ->layout ->createBlock (Template::class);
209
241
210
242
$ block ->setAjaxUrl ($ this ->getAjaxUrl ());
211
243
$ block ->setTemplate ($ this ->templateFileName );
@@ -238,15 +270,24 @@ protected function stripInlineTranslations(&$body)
238
270
foreach ($ body as &$ part ) {
239
271
$ this ->stripInlineTranslations ($ part );
240
272
}
241
- } else {
242
- if (is_string ($ body )) {
243
- $ body = preg_replace (
244
- '# ' . \Magento \Framework \Translate \Inline \ParserInterface::REGEXP_TOKEN . '# ' ,
245
- '$1 ' ,
246
- $ body
247
- );
248
- }
273
+ } elseif (is_string ($ body )) {
274
+ $ body = preg_replace ('# ' . ParserInterface::REGEXP_TOKEN . '# ' , '$1 ' , $ body );
249
275
}
276
+
250
277
return $ this ;
251
278
}
279
+
280
+ /**
281
+ * Indicates whether the current area is valid for inline translation
282
+ *
283
+ * @return bool
284
+ */
285
+ private function isAreaAllowed (): bool
286
+ {
287
+ try {
288
+ return in_array ($ this ->appState ->getAreaCode (), $ this ->allowedAreas , true );
289
+ } catch (LocalizedException $ e ) {
290
+ return false ;
291
+ }
292
+ }
252
293
}
0 commit comments