Skip to content

Commit f28c826

Browse files
committed
Merge remote-tracking branch 'origin/2.2-develop' into MAGETWO-86624
2 parents 624dedf + 9e8955c commit f28c826

File tree

66 files changed

+1251
-798
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1251
-798
lines changed

app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Gallery/Content.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Magento\Framework\Exception\FileSystemException;
2020
use Magento\Framework\App\ObjectManager;
2121
use Magento\Backend\Block\DataProviders\UploadConfig as ImageUploadConfigDataProvider;
22+
use Magento\MediaStorage\Helper\File\Storage\Database;
2223

2324
class Content extends \Magento\Backend\Block\Widget
2425
{
@@ -47,25 +48,34 @@ class Content extends \Magento\Backend\Block\Widget
4748
*/
4849
private $imageHelper;
4950

51+
/**
52+
* @var Database
53+
*/
54+
private $fileStorageDatabase;
55+
5056
/**
5157
* @param \Magento\Backend\Block\Template\Context $context
5258
* @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
5359
* @param \Magento\Catalog\Model\Product\Media\Config $mediaConfig
5460
* @param array $data
5561
* @param ImageUploadConfigDataProvider $imageUploadConfigDataProvider
62+
* @param Database $fileStorageDatabase
5663
*/
5764
public function __construct(
5865
\Magento\Backend\Block\Template\Context $context,
5966
\Magento\Framework\Json\EncoderInterface $jsonEncoder,
6067
\Magento\Catalog\Model\Product\Media\Config $mediaConfig,
6168
array $data = [],
62-
ImageUploadConfigDataProvider $imageUploadConfigDataProvider = null
69+
ImageUploadConfigDataProvider $imageUploadConfigDataProvider = null,
70+
Database $fileStorageDatabase = null
6371
) {
6472
$this->_jsonEncoder = $jsonEncoder;
6573
$this->_mediaConfig = $mediaConfig;
6674
parent::__construct($context, $data);
6775
$this->imageUploadConfigDataProvider = $imageUploadConfigDataProvider
6876
?: ObjectManager::getInstance()->get(ImageUploadConfigDataProvider::class);
77+
$this->fileStorageDatabase = $fileStorageDatabase
78+
?: ObjectManager::getInstance()->get(Database::class);
6979
}
7080

7181
/**
@@ -153,6 +163,13 @@ public function getImagesJson()
153163
$images = $this->sortImagesByPosition($value['images']);
154164
foreach ($images as &$image) {
155165
$image['url'] = $this->_mediaConfig->getMediaUrl($image['file']);
166+
if ($this->fileStorageDatabase->checkDbUsage() &&
167+
!$mediaDir->isFile($this->_mediaConfig->getMediaPath($image['file']))
168+
) {
169+
$this->fileStorageDatabase->saveFileToFilesystem(
170+
$this->_mediaConfig->getMediaPath($image['file'])
171+
);
172+
}
156173
try {
157174
$fileHandler = $mediaDir->stat($this->_mediaConfig->getMediaPath($image['file']));
158175
$image['size'] = $fileHandler['size'];

app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Helper/Form/Gallery/ContentTest.php

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Magento\Catalog\Model\Entity\Attribute;
1010
use Magento\Catalog\Model\Product;
1111
use Magento\Framework\Phrase;
12+
use Magento\MediaStorage\Helper\File\Storage\Database;
1213

1314
/**
1415
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -50,6 +51,11 @@ class ContentTest extends \PHPUnit\Framework\TestCase
5051
*/
5152
protected $imageHelper;
5253

54+
/**
55+
* @var \Magento\MediaStorage\Helper\File\Storage\Database|\PHPUnit_Framework_MockObject_MockObject
56+
*/
57+
protected $databaseMock;
58+
5359
/**
5460
* @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
5561
*/
@@ -71,13 +77,18 @@ public function setUp()
7177
->disableOriginalConstructor()
7278
->getMock();
7379

80+
$this->databaseMock = $this->getMockBuilder(Database::class)
81+
->disableOriginalConstructor()
82+
->getMock();
83+
7484
$this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
7585
$this->content = $this->objectManager->getObject(
7686
\Magento\Catalog\Block\Adminhtml\Product\Helper\Form\Gallery\Content::class,
7787
[
7888
'mediaConfig' => $this->mediaConfigMock,
7989
'jsonEncoder' => $this->jsonEncoderMock,
80-
'filesystem' => $this->fileSystemMock
90+
'filesystem' => $this->fileSystemMock,
91+
'fileStorageDatabase' => $this->databaseMock
8192
]
8293
);
8394
}
@@ -143,6 +154,13 @@ public function testGetImagesJson()
143154
$this->readMock->expects($this->any())->method('stat')->willReturnMap($sizeMap);
144155
$this->jsonEncoderMock->expects($this->once())->method('encode')->willReturnCallback('json_encode');
145156

157+
$this->readMock->expects($this->any())
158+
->method('isFile')
159+
->will($this->returnValue(true));
160+
$this->databaseMock->expects($this->any())
161+
->method('checkDbUsage')
162+
->will($this->returnValue(false));
163+
146164
$this->assertSame(json_encode($imagesResult), $this->content->getImagesJson());
147165
}
148166

@@ -221,6 +239,13 @@ public function testGetImagesJsonWithException()
221239
$this->imageHelper->expects($this->any())->method('getDefaultPlaceholderUrl')->willReturn($placeholderUrl);
222240
$this->jsonEncoderMock->expects($this->once())->method('encode')->willReturnCallback('json_encode');
223241

242+
$this->readMock->expects($this->any())
243+
->method('isFile')
244+
->will($this->returnValue(true));
245+
$this->databaseMock->expects($this->any())
246+
->method('checkDbUsage')
247+
->will($this->returnValue(false));
248+
224249
$this->assertSame(json_encode($imagesResult), $this->content->getImagesJson());
225250
}
226251

@@ -365,4 +390,52 @@ private function getMediaAttribute(string $label, string $attributeCode)
365390

366391
return $mediaAttribute;
367392
}
393+
394+
/**
395+
* Test GetImagesJson() calls MediaStorage functions to obtain image from DB prior to stat call
396+
*
397+
* @return void
398+
*/
399+
public function testGetImagesJsonMediaStorageMode()
400+
{
401+
$images = [
402+
'images' => [
403+
[
404+
'value_id' => '0',
405+
'file' => 'file_1.jpg',
406+
'media_type' => 'image',
407+
'position' => '0'
408+
]
409+
]
410+
];
411+
412+
$mediaPath = [
413+
['file_1.jpg', 'catalog/product/image_1.jpg']
414+
];
415+
416+
$this->content->setElement($this->galleryMock);
417+
418+
$this->galleryMock->expects($this->once())
419+
->method('getImages')
420+
->willReturn($images);
421+
$this->fileSystemMock->expects($this->once())
422+
->method('getDirectoryRead')
423+
->willReturn($this->readMock);
424+
$this->mediaConfigMock->expects($this->any())
425+
->method('getMediaPath')
426+
->willReturnMap($mediaPath);
427+
428+
$this->readMock->expects($this->any())
429+
->method('isFile')
430+
->will($this->returnValue(false));
431+
$this->databaseMock->expects($this->any())
432+
->method('checkDbUsage')
433+
->will($this->returnValue(true));
434+
435+
$this->databaseMock->expects($this->once())
436+
->method('saveFileToFilesystem')
437+
->with('catalog/product/image_1.jpg');
438+
439+
$this->content->getImagesJson();
440+
}
368441
}

app/code/Magento/Checkout/Model/ShippingInformationManagement.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,9 @@ public function saveAddressInformation(
178178

179179
$shippingAddress = $quote->getShippingAddress();
180180

181-
if (!$shippingAddress->getShippingRateByCode($shippingAddress->getShippingMethod())) {
181+
if (!$quote->getIsVirtual()
182+
&& !$shippingAddress->getShippingRateByCode($shippingAddress->getShippingMethod())
183+
) {
182184
throw new NoSuchEntityException(
183185
__('Carrier with such method not found: %1, %2', $carrierCode, $methodCode)
184186
);

app/code/Magento/Customer/Model/Customer/DataProvider.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
use Magento\Framework\View\Element\UiComponent\DataProvider\FilterPool;
2828
use Magento\Ui\Component\Form\Field;
2929
use Magento\Ui\DataProvider\EavValidationRules;
30+
use Magento\Ui\Component\Form\Element\Multiline;
3031

3132
/**
3233
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -568,8 +569,14 @@ protected function prepareAddressData($addressId, array &$addresses, array $cust
568569
) {
569570
$addresses[$addressId]['default_shipping'] = $customer['default_shipping'];
570571
}
571-
if (isset($addresses[$addressId]['street']) && !is_array($addresses[$addressId]['street'])) {
572-
$addresses[$addressId]['street'] = explode("\n", $addresses[$addressId]['street']);
572+
573+
foreach ($this->meta['address']['children'] as $attributeName => $attributeMeta) {
574+
if ($attributeMeta['arguments']['data']['config']['dataType'] === Multiline::NAME
575+
&& isset($addresses[$addressId][$attributeName])
576+
&& !\is_array($addresses[$addressId][$attributeName])
577+
) {
578+
$addresses[$addressId][$attributeName] = explode("\n", $addresses[$addressId][$attributeName]);
579+
}
573580
}
574581
}
575582

app/code/Magento/Customer/Test/Unit/Model/Customer/DataProviderTest.php

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,25 @@ public function getAttributesMetaDataProvider()
249249
],
250250
],
251251
],
252-
]
252+
],
253+
'street' => [
254+
'arguments' => [
255+
'data' => [
256+
'config' => [
257+
'dataType' => 'multiline',
258+
'formElement' => 'multiline',
259+
'visible' => true,
260+
'required' => '1',
261+
'label' => __('Multiline address'),
262+
'sortOrder' => '70',
263+
'notice' => 'note',
264+
'default' => 'Default',
265+
'size' => '2',
266+
'componentType' => Field::NAME,
267+
],
268+
],
269+
],
270+
],
253271
],
254272
],
255273
]
@@ -477,6 +495,7 @@ protected function getAttributeMock($type = 'customer', $options = [])
477495
$this->injectVisibilityProps($attributeMock, $attributeBooleanMock, $options);
478496
if ($type == "address") {
479497
$mocks[] = $this->getCountryAttrMock();
498+
$mocks[] = $this->getStreetAttrMock();
480499
}
481500
return $mocks;
482501
}
@@ -544,6 +563,54 @@ function ($origName) {
544563
return $countryAttrMock;
545564
}
546565

566+
/**
567+
* @return AbstractAttribute|\PHPUnit_Framework_MockObject_MockObjec
568+
*/
569+
private function getStreetAttrMock()
570+
{
571+
$attributeMock = $this->getMockBuilder(AbstractAttribute::class)
572+
->setMethods(
573+
[
574+
'getAttributeCode',
575+
'getDataUsingMethod',
576+
'usesSource',
577+
'getFrontendInput',
578+
'getIsVisible',
579+
'getSource',
580+
'getIsUserDefined',
581+
'getUsedInForms',
582+
'getEntityType',
583+
]
584+
)
585+
->disableOriginalConstructor()
586+
->getMockForAbstractClass();
587+
588+
$map = [
589+
['frontend_input', null, 'multiline'],
590+
['is_required', null, '1'],
591+
['frontend_label', null, __('Multiline address')],
592+
['note', null, 'note'],
593+
['sort_order', null, '70'],
594+
['note', null, null],
595+
['default_value', null, 'Default'],
596+
['multiline_count', null, 2],
597+
];
598+
599+
$attributeMock->method('getDataUsingMethod')
600+
->will($this->returnValueMap($map));
601+
602+
$attributeMock->method('getAttributeCode')
603+
->willReturn('street');
604+
605+
$attributeMock->method('usesSource')
606+
->willReturn(false);
607+
608+
$attributeMock->method('getIsVisible')
609+
->willReturn(true);
610+
611+
return $attributeMock;
612+
}
613+
547614
/**
548615
* @return void
549616
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
@@ -1470,7 +1537,25 @@ private function getExpectationForVisibleAttributes()
14701537
],
14711538
],
14721539
],
1473-
]
1540+
],
1541+
'street' => [
1542+
'arguments' => [
1543+
'data' => [
1544+
'config' => [
1545+
'dataType' => 'multiline',
1546+
'formElement' => 'multiline',
1547+
'visible' => true,
1548+
'required' => '1',
1549+
'label' => __('Multiline address'),
1550+
'sortOrder' => '70',
1551+
'notice' => 'note',
1552+
'default' => 'Default',
1553+
'size' => '2',
1554+
'componentType' => Field::NAME,
1555+
],
1556+
],
1557+
],
1558+
],
14741559
],
14751560
],
14761561
];

app/code/Magento/Customer/view/frontend/layout/customer_account_forgotpassword.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
-->
88
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
99
<head>
10-
<title>Forgot Your Password</title>
10+
<title>Forgot Your Password?</title>
1111
</head>
1212
<body>
1313
<referenceBlock name="root">

app/code/Magento/Deploy/Package/Processor/PostProcessor/CssUrls.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,21 @@ private function parseCss(array $urlMap, $cssFilePath, $packagePath, $cssContent
124124
. str_repeat('../', count(explode('/', $cssFileBasePath)))
125125
. $this->minification->addMinifiedSign($matchedFile->getDeployedFilePath())
126126
];
127+
} else {
128+
$filePathInBase = $package->getArea() .
129+
'/' . Package::BASE_THEME .
130+
'/' . $package->getLocale() .
131+
'/' . $lookupFileId;
132+
if ($this->staticDir->isReadable($this->minification->addMinifiedSign($filePathInBase))) {
133+
$urlMap[$url][] = [
134+
'filePath' => $this->minification->addMinifiedSign($packagePath . '/' . $cssFilePath),
135+
'replace' => str_repeat('../', count(explode('/', $cssFileBasePath)) + 4)
136+
. $this->minification->addMinifiedSign($filePathInBase),
137+
];
138+
}
127139
}
128140
}
141+
129142
return $urlMap;
130143
}
131144

0 commit comments

Comments
 (0)