Skip to content

Commit 79bcd91

Browse files
author
Onischenko, Yaroslav(yonischenko)
committed
Merge pull request #565 from magento-nord/NORD_BUGS
[NORD] Bug fixes
2 parents 6378276 + 8b6283e commit 79bcd91

File tree

25 files changed

+402
-105
lines changed

25 files changed

+402
-105
lines changed

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

+28-9
Original file line numberDiff line numberDiff line change
@@ -122,21 +122,40 @@ public function getAddImagesButton()
122122
*/
123123
public function getImagesJson()
124124
{
125-
if (is_array($this->getElement()->getImages())) {
126-
$value = $this->getElement()->getImages();
125+
$value = $this->getElement()->getImages();
126+
if (is_array($value) &&
127+
array_key_exists('images', $value) &&
128+
is_array($value['images']) &&
129+
count($value['images'])
130+
) {
127131
$directory = $this->_filesystem->getDirectoryRead(DirectoryList::MEDIA);
128-
if (is_array($value['images']) && count($value['images']) > 0) {
129-
foreach ($value['images'] as &$image) {
130-
$image['url'] = $this->_mediaConfig->getMediaUrl($image['file']);
131-
$fileHandler = $directory->stat($this->_mediaConfig->getMediaPath($image['file']));
132-
$image['size'] = $fileHandler['size'];
133-
}
134-
return $this->_jsonEncoder->encode($value['images']);
132+
$images = $this->sortImagesByPosition($value['images']);
133+
foreach ($images as &$image) {
134+
$image['url'] = $this->_mediaConfig->getMediaUrl($image['file']);
135+
$fileHandler = $directory->stat($this->_mediaConfig->getMediaPath($image['file']));
136+
$image['size'] = $fileHandler['size'];
135137
}
138+
return $this->_jsonEncoder->encode($images);
136139
}
137140
return '[]';
138141
}
139142

143+
/**
144+
* Sort images array by position key
145+
*
146+
* @param array $images
147+
* @return array
148+
*/
149+
private function sortImagesByPosition($images)
150+
{
151+
if (is_array($images)) {
152+
usort($images, function ($imageA, $imageB) {
153+
return ($imageA['position'] < $imageB['position']) ? -1 : 1;
154+
});
155+
}
156+
return $images;
157+
}
158+
140159
/**
141160
* @return string
142161
*/

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

+33-11
Original file line numberDiff line numberDiff line change
@@ -82,37 +82,59 @@ public function testGetImagesJson()
8282
['file_1.jpg', 'catalog/product/image_1.jpg'],
8383
['file_2.jpg', 'catalog/product/image_2.jpg']
8484
];
85-
// @codingStandardsIgnoreStart
86-
$encodedString = '[{"value_id":"1","file":"image_1.jpg","media_type":"image","url":"http:\/\/magento2.dev\/pub\/media\/catalog\/product\/image_1.jpg","size":879394},{"value_id":"2","file":"image_2.jpg","media_type":"image","url":"http:\/\/magento2.dev\/pub\/media\/catalog\/product\/image`_2.jpg","size":399659}]';
87-
// @codingStandardsIgnoreEnd
85+
86+
$sizeMap = [
87+
['catalog/product/image_1.jpg', ['size' => 399659]],
88+
['catalog/product/image_2.jpg', ['size' => 879394]]
89+
];
90+
91+
$imagesResult = [
92+
[
93+
'value_id' => '2',
94+
'file' => 'file_2.jpg',
95+
'media_type' => 'image',
96+
'position' => '0',
97+
'url' => 'url_to_the_image/image_2.jpg',
98+
'size' => 879394
99+
],
100+
[
101+
'value_id' => '1',
102+
'file' => 'file_1.jpg',
103+
'media_type' => 'image',
104+
'position' => '1',
105+
'url' => 'url_to_the_image/image_1.jpg',
106+
'size' => 399659
107+
]
108+
];
109+
88110
$images = [
89111
'images' => [
90112
[
91113
'value_id' => '1',
92114
'file' => 'file_1.jpg',
93115
'media_type' => 'image',
116+
'position' => '1'
94117
] ,
95118
[
96119
'value_id' => '2',
97120
'file' => 'file_2.jpg',
98121
'media_type' => 'image',
122+
'position' => '0'
99123
]
100124
]
101125
];
102-
$firstStat = ['size' => 879394];
103-
$secondStat = ['size' => 399659];
126+
104127
$this->content->setElement($this->galleryMock);
105-
$this->galleryMock->expects($this->any())->method('getImages')->willReturn($images);
128+
$this->galleryMock->expects($this->once())->method('getImages')->willReturn($images);
106129
$this->fileSystemMock->expects($this->once())->method('getDirectoryRead')->willReturn($this->readMock);
107130

108131
$this->mediaConfigMock->expects($this->any())->method('getMediaUrl')->willReturnMap($url);
109-
$this->mediaConfigMock->expects($this->any())->method('getMediaPath')->willReturn($mediaPath);
132+
$this->mediaConfigMock->expects($this->any())->method('getMediaPath')->willReturnMap($mediaPath);
110133

111-
$this->readMock->expects($this->at(0))->method('stat')->willReturn($firstStat);
112-
$this->readMock->expects($this->at(1))->method('stat')->willReturn($secondStat);
113-
$this->jsonEncoderMock->expects($this->once())->method('encode')->willReturn($encodedString);
134+
$this->readMock->expects($this->any())->method('stat')->willReturnMap($sizeMap);
135+
$this->jsonEncoderMock->expects($this->once())->method('encode')->willReturnCallback('json_encode');
114136

115-
$this->assertSame($encodedString, $this->content->getImagesJson());
137+
$this->assertSame(json_encode($imagesResult), $this->content->getImagesJson());
116138
}
117139

118140
public function testGetImagesJsonWithoutImages()

app/code/Magento/CatalogImportExport/Model/Import/Product.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -1270,7 +1270,7 @@ protected function _saveProductCategories(array $categoriesData)
12701270
);
12711271
}
12721272
if ($categoriesIn) {
1273-
$this->_connection->insertOnDuplicate($tableName, $categoriesIn, ['position']);
1273+
$this->_connection->insertOnDuplicate($tableName, $categoriesIn, ['product_id', 'category_id']);
12741274
}
12751275
}
12761276
return $this;

app/code/Magento/Newsletter/Block/Adminhtml/Queue/Edit.php

+6-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,12 @@ protected function _prepareLayout()
161161
*/
162162
public function getPreviewUrl()
163163
{
164-
return $this->getUrl('*/*/preview');
164+
if ($this->getTemplateId()) {
165+
$params = ['template_id' => $this->getTemplateId()];
166+
} else {
167+
$params = ['id' => $this->getRequest()->getParam('id')];
168+
}
169+
return $this->getUrl('*/*/preview', $params);
165170
}
166171

167172
/**

app/code/Magento/Newsletter/Block/Adminhtml/Queue/Preview/Form.php

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ protected function _prepareForm()
3535
if ($data = $this->getFormData()) {
3636
$mapper = ['preview_store_id' => 'store_id'];
3737

38+
if (empty($data['id']) && !empty($data['text'])) {
39+
$this->_backendSession->setPreviewData($data);
40+
}
41+
3842
foreach ($data as $key => $value) {
3943
if (array_key_exists($key, $mapper)) {
4044
$name = $mapper[$key];

app/code/Magento/Newsletter/Block/Adminhtml/Template/Edit.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ public function getSaveUrl()
238238
*/
239239
public function getPreviewUrl()
240240
{
241-
return $this->getUrl('*/*/preview');
241+
return $this->getUrl('*/*/preview', ['id' => $this->getRequest()->getParam('id')]);
242242
}
243243

244244
/**

app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview.php

+31-3
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,11 @@ protected function _toHtml()
5858
if ($id = (int)$this->getRequest()->getParam('id')) {
5959
$this->loadTemplate($template, $id);
6060
} else {
61-
$template->setTemplateType($this->getRequest()->getParam('type'));
62-
$template->setTemplateText($this->getRequest()->getParam('text'));
63-
$template->setTemplateStyles($this->getRequest()->getParam('styles'));
61+
$previewData = $this->getPreviewData();
62+
63+
$template->setTemplateType($previewData['type']);
64+
$template->setTemplateText($previewData['text']);
65+
$template->setTemplateStyles($previewData['styles']);
6466
}
6567

6668
\Magento\Framework\Profiler::start($this->profilerName);
@@ -88,6 +90,32 @@ protected function _toHtml()
8890
return $templateProcessed;
8991
}
9092

93+
/**
94+
* Return template preview data
95+
*
96+
* @return array
97+
*/
98+
private function getPreviewData()
99+
{
100+
$previewData = [];
101+
$previewParams = ['type', 'text', 'styles'];
102+
103+
$sessionData = [];
104+
if ($this->_backendSession->hasPreviewData()) {
105+
$sessionData = $this->_backendSession->getPreviewData();
106+
}
107+
108+
foreach ($previewParams as $param) {
109+
if (isset($sessionData[$param])) {
110+
$previewData[$param] = $sessionData[$param];
111+
} else {
112+
$previewData[$param] = $this->getRequest()->getParam($param);
113+
}
114+
}
115+
116+
return $previewData;
117+
}
118+
91119
/**
92120
* Get Store Id from request or default
93121
*

app/code/Magento/Newsletter/Block/Adminhtml/Template/Preview/Form.php

+4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ protected function _prepareForm()
3535
if ($data = $this->getFormData()) {
3636
$mapper = ['preview_store_id' => 'store_id'];
3737

38+
if (empty($data['id']) && !empty($data['text'])) {
39+
$this->_backendSession->setPreviewData($data);
40+
}
41+
3842
foreach ($data as $key => $value) {
3943
if (array_key_exists($key, $mapper)) {
4044
$name = $mapper[$key];

app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Preview.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@ public function execute()
1717
{
1818
$this->_view->loadLayout();
1919
$data = $this->getRequest()->getParams();
20-
if (empty($data) || !isset($data['id'])) {
20+
21+
$isEmptyRequestData = empty($data) || !isset($data['id']);
22+
$isEmptyPreviewData = !$this->_getSession()->hasPreviewData() || empty($this->_getSession()->getPreviewData());
23+
24+
if ($isEmptyRequestData && $isEmptyPreviewData) {
2125
$this->_forward('noroute');
2226
return;
2327
}

app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Save.php

+1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public function execute()
8282

8383
$this->messageManager->addSuccess(__('You saved the newsletter queue.'));
8484
$this->_getSession()->setFormData(false);
85+
$this->_getSession()->unsPreviewData();
8586

8687
$this->_redirect('*/*');
8788
} catch (\Magento\Framework\Exception\LocalizedException $e) {

app/code/Magento/Newsletter/Controller/Adminhtml/Template/Preview.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ public function execute()
1818
$this->_view->loadLayout();
1919

2020
$data = $this->getRequest()->getParams();
21-
if (empty($data) || !isset($data['id'])) {
21+
$isEmptyRequestData = empty($data) || !isset($data['id']);
22+
$isEmptyPreviewData = !$this->_getSession()->hasPreviewData() || empty($this->_getSession()->getPreviewData());
23+
24+
if ($isEmptyRequestData && $isEmptyPreviewData) {
2225
$this->_forward('noroute');
2326
return $this;
2427
}

app/code/Magento/Newsletter/Controller/Adminhtml/Template/Save.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public function execute()
6363

6464
$this->messageManager->addSuccess(__('The newsletter template has been saved.'));
6565
$this->_getSession()->setFormData(false);
66-
66+
$this->_getSession()->unsPreviewData();
6767
$this->_redirect('*/template');
6868
return;
6969
} catch (LocalizedException $e) {

app/code/Magento/Newsletter/Test/Unit/Block/Adminhtml/Queue/PreviewTest.php

+6
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ protected function setUp()
6262
$appState = $this->getMock('Magento\Framework\App\State', [], [], '', false);
6363
$context->expects($this->once())->method('getAppState')->will($this->returnValue($appState));
6464

65+
$backendSession = $this->getMockBuilder('Magento\Backend\Model\Session')
66+
->disableOriginalConstructor()
67+
->getMock();
68+
69+
$context->expects($this->once())->method('getBackendSession')->willReturn($backendSession);
70+
6571
$templateFactory = $this->getMock('Magento\Newsletter\Model\TemplateFactory', ['create'], [], '', false);
6672
$this->template = $this->getMock('Magento\Newsletter\Model\Template', [], [], '', false);
6773
$templateFactory->expects($this->once())->method('create')->will($this->returnValue($this->template));

app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_preview.xml

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<attribute name="id" value="html-body"/>
1111
<attribute name="class" value="preview-window"/>
1212
<referenceContainer name="backend.page" remove="true"/>
13+
<referenceContainer name="menu.wrapper" remove="true"/>
1314
<referenceContainer name="root">
1415
<block name="preview.page.content" class="Magento\Backend\Block\Page" template="Magento_Newsletter::preview/iframeswitcher.phtml">
1516
<block class="Magento\Newsletter\Block\Adminhtml\Queue\Preview\Form" name="preview_form"/>

app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_preview.xml

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<attribute name="id" value="html-body"/>
1111
<attribute name="class" value="preview-window"/>
1212
<referenceContainer name="backend.page" remove="true"/>
13+
<referenceContainer name="menu.wrapper" remove="true"/>
1314
<referenceContainer name="root">
1415
<block name="preview.page.content" class="Magento\Backend\Block\Page" template="Magento_Newsletter::preview/iframeswitcher.phtml">
1516
<block class="Magento\Newsletter\Block\Adminhtml\Template\Preview\Form" name="preview_form"/>

app/code/Magento/Newsletter/view/adminhtml/templates/preview/iframeswitcher.phtml

+2-2
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ function unBlockPreview() {
4242
jQuery('body').trigger('hideLoadingPopup');
4343
}
4444

45-
Event.observe(window, 'load', preview);
46-
Event.observe(previewIframe, 'load', unBlockPreview);
45+
jQuery(document).ready(preview);
46+
jQuery(previewIframe).ready(unBlockPreview);
4747

4848
jQuery("#preview_iframe").load(function() {
4949
jQuery(this).height(jQuery(this).contents().find("html").height() );

app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -249,11 +249,7 @@ define([
249249
tmpVideoData.videoUrl = tmpInputData.videoUrl;
250250
}
251251

252-
if (tmpVideoData.isBase) {
253-
videoData.unshift(tmpVideoData);
254-
} else {
255-
videoData.push(tmpVideoData);
256-
}
252+
videoData.push(tmpVideoData);
257253
}
258254

259255
return videoData;

0 commit comments

Comments
 (0)