Skip to content

Commit 869bd7e

Browse files
committed
- Removed "skip duplicate image for first product" fixing from VariationHandler
- Added new plugin to clean tmp images after adding/updating configurations
1 parent 7120c6e commit 869bd7e

File tree

3 files changed

+130
-4
lines changed

3 files changed

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

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,6 @@ public function duplicateImagesForVariations($productsData)
238238

239239
foreach ($simpleProductData['media_gallery']['images'] as $imageId => $image) {
240240
$image['variation_id'] = $variationId;
241-
if (isset($imagesForCopy[$imageId][0])) {
242-
// skip duplicate image for first product
243-
unset($imagesForCopy[$imageId][0]);
244-
}
245241
$imagesForCopy[$imageId][] = $image;
246242
}
247243
}

app/code/Magento/ConfigurableProduct/etc/adminhtml/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<type name="Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper">
1010
<plugin name="configurable" type="Magento\ConfigurableProduct\Controller\Adminhtml\Product\Initialization\Helper\Plugin\Configurable" sortOrder="50" />
1111
<plugin name="updateConfigurations" type="Magento\ConfigurableProduct\Controller\Adminhtml\Product\Initialization\Helper\Plugin\UpdateConfigurations" sortOrder="60" />
12+
<plugin name="cleanConfigurationTmpImages" type="Magento\ConfigurableProduct\Controller\Adminhtml\Product\Initialization\Helper\Plugin\CleanConfigurationTmpImages" sortOrder="999" />
1213
</type>
1314
<type name="Magento\Catalog\Controller\Adminhtml\Product\Builder">
1415
<plugin name="configurable" type="Magento\ConfigurableProduct\Controller\Adminhtml\Product\Builder\Plugin" sortOrder="50" />

0 commit comments

Comments
 (0)