Skip to content

Commit 7725283

Browse files
🔃 [Magento Community Engineering] Community Contributions - 2.3-develop
Accepted Community Pull Requests: - #24425: resolve {{config path='trans_email/ident_support/email'}} does not display support email issue24419 (by @edenduong) - #24403: Resolve Vat ID not being included in Shipping Address issue24402 (by @edenduong) - #23021: [22928] Edit configurations can't save products (by @tnsezer) - #22123: Wrong currency sign on creditmemo_grid & sales_order_view > invoice grid (by @latenights) Fixed GitHub Issues: - #24419: {{config path='trans_email/ident_support/email'}} does not display support email (reported by @logicallimit) has been fixed in #24425 by @edenduong in 2.3-develop branch Related commits: 1. ba3a134 - #24402: Vat ID not being included in Shipping Address in Magento 2.3.2 (reported by @Jackcar) has been fixed in #24403 by @edenduong in 2.3-develop branch Related commits: 1. 0f38f03 - #22928: Edit configurations can't save products (reported by @duyetbv) has been fixed in #23021 by @tnsezer in 2.3-develop branch Related commits: 1. 869bd7e 2. daa96f4 3. 61fa2cc 4. 9e4e46e 5. f82e5a5 6. 3a45e91 7. cd9894a 8. 86df109 - #22490: Wrong currency sign on creditmemo_grid & sales_order_view > invoice grid (reported by @latenights) has been fixed in #22123 by @latenights in 2.3-develop branch Related commits: 1. da32829 2. 3142776 3. 18a6653 4. 6833c61 5. ae304ac 6. 4bda471
2 parents 7ba0c43 + 1f9933c commit 7725283

File tree

25 files changed

+595
-50
lines changed

25 files changed

+595
-50
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,8 +1192,10 @@ protected function _initTypeModels()
11921192
if ($model->isSuitable()) {
11931193
$this->_productTypeModels[$productTypeName] = $model;
11941194
}
1195+
// phpcs:disable Magento2.Performance.ForeachArrayMerge.ForeachArrayMerge
11951196
$this->_fieldsMap = array_merge($this->_fieldsMap, $model->getCustomFieldsMapping());
11961197
$this->_specialAttributes = array_merge($this->_specialAttributes, $model->getParticularAttributes());
1198+
// phpcs:enable
11971199
}
11981200
$this->_initErrorTemplates();
11991201
// remove doubles
@@ -2972,6 +2974,10 @@ private function formatStockDataForRow(array $rowData): array
29722974
$stockItemDo = $this->stockRegistry->getStockItem($row['product_id'], $row['website_id']);
29732975
$existStockData = $stockItemDo->getData();
29742976

2977+
if (isset($rowData['qty']) && $rowData['qty'] == 0 && !isset($rowData['is_in_stock'])) {
2978+
$rowData['is_in_stock'] = 0;
2979+
}
2980+
29752981
$row = array_merge(
29762982
$this->defaultStockData,
29772983
array_intersect_key($existStockData, $this->defaultStockData),

app/code/Magento/ConfigurableProduct/Model/Product/VariationHandler.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public function generateSimpleProducts($parentProduct, $productsData)
106106
$this->fillSimpleProductData(
107107
$newSimpleProduct,
108108
$parentProduct,
109+
// phpcs:ignore Magento2.Performance.ForeachArrayMerge
109110
array_merge($simpleProductData, $configurableAttribute)
110111
);
111112
$newSimpleProduct->save();
@@ -238,10 +239,6 @@ public function duplicateImagesForVariations($productsData)
238239

239240
foreach ($simpleProductData['media_gallery']['images'] as $imageId => $image) {
240241
$image['variation_id'] = $variationId;
241-
if (isset($imagesForCopy[$imageId][0])) {
242-
// skip duplicate image for first product
243-
unset($imagesForCopy[$imageId][0]);
244-
}
245242
$imagesForCopy[$imageId][] = $image;
246243
}
247244
}
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
<?php
2+
declare(strict_types=1);
3+
/**
4+
* Product initialization helper
5+
*
6+
* Copyright © Magento, Inc. All rights reserved.
7+
* See COPYING.txt for license details.
8+
*/
9+
namespace Magento\ConfigurableProduct\Plugin\Product\Initialization;
10+
11+
use Magento\Framework\App\Filesystem\DirectoryList;
12+
13+
/**
14+
* Class CleanConfigurationTmpImages
15+
*
16+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
17+
* @SuppressWarnings(PHPCS.Magento2.Files.LineLength.MaxExceeded)
18+
*/
19+
class CleanConfigurationTmpImages
20+
{
21+
/**
22+
* @var \Magento\MediaStorage\Helper\File\Storage\Database
23+
*/
24+
private $fileStorageDb;
25+
26+
/**
27+
* @var \Magento\Catalog\Model\Product\Media\Config
28+
*/
29+
private $mediaConfig;
30+
31+
/**
32+
* @var \Magento\Framework\Filesystem\Directory\WriteInterface
33+
*/
34+
private $mediaDirectory;
35+
36+
/**
37+
* @var \Magento\Framework\App\RequestInterface
38+
*/
39+
private $request;
40+
41+
/**
42+
* @var \Magento\Framework\Serialize\Serializer\Json
43+
*/
44+
private $serialize;
45+
46+
/**
47+
* @param \Magento\Framework\App\RequestInterface $request
48+
* @param \Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDb
49+
* @param \Magento\Catalog\Model\Product\Media\Config $mediaConfig
50+
* @param \Magento\Framework\Filesystem $filesystem
51+
* @param \Magento\Framework\Serialize\Serializer\Json $serialize
52+
*
53+
* @throws \Magento\Framework\Exception\FileSystemException
54+
*/
55+
public function __construct(
56+
\Magento\Framework\App\RequestInterface $request,
57+
\Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDb,
58+
\Magento\Catalog\Model\Product\Media\Config $mediaConfig,
59+
\Magento\Framework\Filesystem $filesystem,
60+
\Magento\Framework\Serialize\Serializer\Json $serialize
61+
) {
62+
$this->request = $request;
63+
$this->fileStorageDb = $fileStorageDb;
64+
$this->mediaConfig = $mediaConfig;
65+
$this->serialize = $serialize;
66+
$this->mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA);
67+
}
68+
69+
/**
70+
* Clean Tmp configurable images
71+
*
72+
* @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject
73+
* @param \Magento\Catalog\Model\Product $configurableProduct
74+
*
75+
* @return \Magento\Catalog\Model\Product
76+
* @throws \Magento\Framework\Exception\FileSystemException
77+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
78+
*/
79+
public function afterInitialize(
80+
\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject,
81+
\Magento\Catalog\Model\Product $configurableProduct
82+
) {
83+
84+
$configurations = $this->getConfigurations();
85+
foreach ($configurations as $simpleProductData) {
86+
if (!isset($simpleProductData['media_gallery']['images'])) {
87+
continue;
88+
}
89+
90+
foreach ($simpleProductData['media_gallery']['images'] as $image) {
91+
$file = $this->getFilenameFromTmp($image['file']);
92+
if ($this->fileStorageDb->checkDbUsage()) {
93+
$filename = $this->mediaDirectory->getAbsolutePath($this->mediaConfig->getTmpMediaShortUrl($file));
94+
$this->fileStorageDb->deleteFile($filename);
95+
} else {
96+
$filename = $this->mediaConfig->getTmpMediaPath($file);
97+
$this->mediaDirectory->delete($filename);
98+
}
99+
}
100+
}
101+
102+
return $configurableProduct;
103+
}
104+
105+
/**
106+
* Trim .tmp ending from filename
107+
*
108+
* @param string $file
109+
* @return string
110+
*/
111+
private function getFilenameFromTmp($file)
112+
{
113+
return strrpos($file, '.tmp') === strlen($file) - 4 ? substr($file, 0, strlen($file) - 4) : $file;
114+
}
115+
116+
/**
117+
* Get configurations from request
118+
*
119+
* @return array
120+
*/
121+
private function getConfigurations()
122+
{
123+
$result = [];
124+
$configurableMatrix = $this->request->getParam('configurable-matrix-serialized', "[]");
125+
if (isset($configurableMatrix) && $configurableMatrix !== "") {
126+
$configurableMatrix = $this->serialize->unserialize($configurableMatrix) ?? [];
127+
128+
foreach ($configurableMatrix as $item) {
129+
if (empty($item['was_changed']) && empty($item['newProduct'])) {
130+
continue;
131+
}
132+
133+
$result[] = $item;
134+
}
135+
}
136+
137+
return $result;
138+
}
139+
}

app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/Initialization/Helper/Plugin/UpdateConfigurationsTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ public function testAfterInitialize()
187187
*
188188
* @param array $expectedData
189189
* @param bool $hasDataChanges
190+
* @param bool $wasChanged
190191
* @return Product|\PHPUnit_Framework_MockObject_MockObject
191192
*/
192193
protected function getProductMock(array $expectedData = null, $hasDataChanges = false, $wasChanged = false)

0 commit comments

Comments
 (0)