Skip to content

Commit 197358b

Browse files
committed
Merge branch 'MC-29033' of https://github.com/magento-tango/magento2ce into PR-2019-12-02
2 parents 7a73fb6 + e4e33eb commit 197358b

File tree

6 files changed

+169
-19
lines changed

6 files changed

+169
-19
lines changed

lib/internal/Magento/Framework/View/Asset/Minification.php

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public function addMinifiedSign($filename)
8383
{
8484
$extension = pathinfo($filename, PATHINFO_EXTENSION);
8585

86-
if ($this->isEnabled($extension) &&
86+
if ($this->isEnabledForArea($filename) &&
8787
!$this->isExcluded($filename) &&
8888
!$this->isMinifiedFilename($filename)
8989
) {
@@ -102,7 +102,7 @@ public function removeMinifiedSign($filename)
102102
{
103103
$extension = pathinfo($filename, PATHINFO_EXTENSION);
104104

105-
if ($this->isEnabled($extension) &&
105+
if ($this->isEnabledForArea($filename) &&
106106
!$this->isExcluded($filename) &&
107107
$this->isMinifiedFilename($filename)
108108
) {
@@ -180,4 +180,49 @@ private function getMinificationExcludeValues($key)
180180
}
181181
return array_values($configValues);
182182
}
183+
184+
/**
185+
* Check whether asset minification is on for specified content type and for area
186+
*
187+
* @param string $filename
188+
* @return bool
189+
*/
190+
private function isEnabledForArea(string $filename): bool
191+
{
192+
$area = $this->getAreaFromPath($filename);
193+
$extension = pathinfo($filename, PATHINFO_EXTENSION);
194+
195+
if ($area !== 'adminhtml') {
196+
$result = $this->isEnabled($extension);
197+
} else {
198+
$cacheConfigKey = $area . '_' . $extension;
199+
if (!isset($this->configCache[self::XML_PATH_MINIFICATION_ENABLED][$cacheConfigKey])) {
200+
$this->configCache[self::XML_PATH_MINIFICATION_ENABLED][$cacheConfigKey] =
201+
$this->appState->getMode() != State::MODE_DEVELOPER &&
202+
$this->scopeConfig->isSetFlag(
203+
sprintf(self::XML_PATH_MINIFICATION_ENABLED, $extension),
204+
'default'
205+
);
206+
}
207+
208+
$result = $this->configCache[self::XML_PATH_MINIFICATION_ENABLED][$cacheConfigKey];
209+
}
210+
return $result;
211+
}
212+
213+
/**
214+
* Get area from the path
215+
*
216+
* @param string $filename
217+
* @return string
218+
*/
219+
private function getAreaFromPath(string $filename): string
220+
{
221+
$area = '';
222+
$pathParts = explode('/', $filename);
223+
if (!empty($pathParts) && isset($pathParts[0])) {
224+
$area = $pathParts[0];
225+
}
226+
return $area;
227+
}
183228
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare (strict_types=1);
7+
8+
namespace Magento\Framework\View\Asset\PreProcessor;
9+
10+
use Magento\Framework\App\Config\ScopeConfigInterface;
11+
use Magento\Framework\App\State;
12+
use Magento\Framework\View\Asset\Minification;
13+
14+
/**
15+
* Minification configuration provider
16+
*/
17+
class MinificationConfigProvider
18+
{
19+
/**
20+
* @var Minification
21+
*/
22+
private $minification;
23+
24+
/**
25+
* @var State
26+
*/
27+
private $appState;
28+
29+
/**
30+
* @var ScopeConfigInterface
31+
*/
32+
private $scopeConfig;
33+
34+
/**
35+
* @param Minification $minification
36+
* @param ScopeConfigInterface $scopeConfig
37+
* @param State $appState
38+
*/
39+
public function __construct(
40+
Minification $minification,
41+
ScopeConfigInterface $scopeConfig,
42+
State $appState
43+
) {
44+
$this->minification = $minification;
45+
$this->scopeConfig = $scopeConfig;
46+
$this->appState = $appState;
47+
}
48+
49+
/**
50+
* Check whether asset minification is on
51+
*
52+
* @param string $filename
53+
* @return bool
54+
*/
55+
public function isMinificationEnabled(string $filename): bool
56+
{
57+
$extension = pathinfo($filename, PATHINFO_EXTENSION);
58+
$result = $this->minification->isEnabled($extension);
59+
$pathParts = explode('/', $filename);
60+
if (!empty($pathParts) && isset($pathParts[0])) {
61+
$area = $pathParts[0];
62+
if ($area === 'adminhtml') {
63+
$result = $this->appState->getMode() != State::MODE_DEVELOPER &&
64+
$this->scopeConfig->isSetFlag(
65+
sprintf(Minification::XML_PATH_MINIFICATION_ENABLED, $extension),
66+
'default'
67+
);
68+
}
69+
}
70+
return $result;
71+
}
72+
}

lib/internal/Magento/Framework/View/Asset/PreProcessor/MinificationFilenameResolver.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,23 @@ class MinificationFilenameResolver implements FilenameResolverInterface
2222
*/
2323
private $minification;
2424

25+
/**
26+
* @var MinificationConfigProvider
27+
*/
28+
private $minificationConfig;
29+
2530
/**
2631
* Constructor
2732
*
2833
* @param Minification $minification
34+
* @param MinificationConfigProvider $minificationConfig
2935
*/
30-
public function __construct(Minification $minification)
31-
{
36+
public function __construct(
37+
Minification $minification,
38+
MinificationConfigProvider $minificationConfig
39+
) {
3240
$this->minification = $minification;
41+
$this->minificationConfig = $minificationConfig;
3342
}
3443

3544
/**
@@ -40,10 +49,11 @@ public function __construct(Minification $minification)
4049
*/
4150
public function resolve($path)
4251
{
43-
if (!$this->minification->isEnabled(pathinfo($path, PATHINFO_EXTENSION))) {
44-
return $path;
52+
$result = $path;
53+
if ($this->minificationConfig->isMinificationEnabled($path)) {
54+
$result = str_replace(self::FILE_PART, '.', $path);
4555
}
4656

47-
return str_replace(self::FILE_PART, '.', $path);
57+
return $result;
4858
}
4959
}

lib/internal/Magento/Framework/View/Asset/PreProcessor/Minify.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,24 @@ class Minify implements PreProcessorInterface
2525
*/
2626
protected $minification;
2727

28+
/**
29+
* @var MinificationConfigProvider
30+
*/
31+
private $minificationConfig;
32+
2833
/**
2934
* @param AdapterInterface $adapter
3035
* @param Minification $minification
36+
* @param MinificationConfigProvider $minificationConfig
3137
*/
32-
public function __construct(AdapterInterface $adapter, Minification $minification)
33-
{
38+
public function __construct(
39+
AdapterInterface $adapter,
40+
Minification $minification,
41+
MinificationConfigProvider $minificationConfig
42+
) {
3443
$this->adapter = $adapter;
3544
$this->minification = $minification;
45+
$this->minificationConfig = $minificationConfig;
3646
}
3747

3848
/**
@@ -43,7 +53,7 @@ public function __construct(AdapterInterface $adapter, Minification $minificatio
4353
*/
4454
public function process(PreProcessor\Chain $chain)
4555
{
46-
if ($this->minification->isEnabled(pathinfo($chain->getTargetAssetPath(), PATHINFO_EXTENSION)) &&
56+
if ($this->minificationConfig->isMinificationEnabled($chain->getTargetAssetPath()) &&
4757
$this->minification->isMinifiedFilename($chain->getTargetAssetPath()) &&
4858
!$this->minification->isMinifiedFilename($chain->getOrigAssetPath())
4959
) {

lib/internal/Magento/Framework/View/Test/Unit/Asset/PreProcessor/MinificationFilenameResolverTest.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
use Magento\Framework\View\Asset\Minification;
99
use Magento\Framework\View\Asset\PreProcessor\MinificationFilenameResolver;
10+
use Magento\Framework\View\Asset\PreProcessor\MinificationConfigProvider;
1011

1112
/**
1213
* Class MinificationFilenameResolverTest
@@ -29,13 +30,15 @@ public function testResolve($isMin, $input, $expected)
2930
$minificationMock = $this->getMockBuilder(Minification::class)
3031
->disableOriginalConstructor()
3132
->getMock();
32-
33-
$minificationMock->expects(self::once())
34-
->method('isEnabled')
35-
->with('ext')
33+
$minificationConfigMock = $this->getMockBuilder(MinificationConfigProvider::class)
34+
->disableOriginalConstructor()
35+
->getMock();
36+
$minificationConfigMock->expects(self::once())
37+
->method('isMinificationEnabled')
38+
->with($input)
3639
->willReturn($isMin);
3740

38-
$resolver = new MinificationFilenameResolver($minificationMock);
41+
$resolver = new MinificationFilenameResolver($minificationMock, $minificationConfigMock);
3942

4043
self::assertEquals($expected, $resolver->resolve($input));
4144
}

lib/internal/Magento/Framework/View/Test/Unit/Asset/PreProcessor/MinifyTest.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
namespace Magento\Framework\View\Test\Unit\Asset\PreProcessor;
88

99
use Magento\Framework\View\Asset\PreProcessor\Minify;
10+
use Magento\Framework\View\Asset\PreProcessor\MinificationConfigProvider;
1011

1112
/**
1213
* Unit test for Magento\Framework\View\Asset\PreProcessor\Minify
@@ -28,6 +29,11 @@ class MinifyTest extends \PHPUnit\Framework\TestCase
2829
*/
2930
protected $minificationMock;
3031

32+
/**
33+
* @var MinificationConfigProvider|\PHPUnit_Framework_MockObject_MockObject
34+
*/
35+
private $minificationConfigMock;
36+
3137
/**
3238
* {@inheritDoc}
3339
*/
@@ -40,10 +46,14 @@ protected function setUp()
4046
$this->minificationMock = $this->getMockBuilder(\Magento\Framework\View\Asset\Minification::class)
4147
->disableOriginalConstructor()
4248
->getMock();
49+
$this->minificationConfigMock = $this->getMockBuilder(MinificationConfigProvider::class)
50+
->disableOriginalConstructor()
51+
->getMock();
4352

4453
$this->minify = new Minify(
4554
$this->adapterMock,
46-
$this->minificationMock
55+
$this->minificationMock,
56+
$this->minificationConfigMock
4757
);
4858
}
4959

@@ -84,10 +94,10 @@ public function testProcess($targetPath, $originalPath, $minifyCalls, $setConten
8494
->with('original content')
8595
->willReturn('minified content');
8696

87-
$this->minificationMock
97+
$this->minificationConfigMock
8898
->expects($this->any())
89-
->method('isEnabled')
90-
->willReturnMap([['css', $isEnabled]]);
99+
->method('isMinificationEnabled')
100+
->willReturnMap([[$targetPath, $isEnabled]]);
91101

92102
$this->minificationMock
93103
->expects($this->any())

0 commit comments

Comments
 (0)