Skip to content

Commit fd950ac

Browse files
committed
Merge remote-tracking branch 'magento-l3/ACP2E-2093' into AUG102023_PR_pradeep
2 parents 4d78276 + 1516ff8 commit fd950ac

File tree

6 files changed

+528
-17
lines changed

6 files changed

+528
-17
lines changed

app/code/Magento/Catalog/Model/Product/Gallery/UpdateHandler.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,34 @@
1313
use Magento\Eav\Model\ResourceModel\AttributeValue;
1414
use Magento\Framework\App\ObjectManager;
1515
use Magento\Framework\EntityManager\MetadataPool;
16+
use Magento\Framework\Exception\FileSystemException;
17+
use Magento\Framework\Exception\LocalizedException;
1618
use Magento\Framework\Filesystem;
1719
use Magento\Framework\Json\Helper\Data;
1820
use Magento\MediaStorage\Helper\File\Storage\Database;
1921
use Magento\Store\Model\Store;
2022
use Magento\Store\Model\StoreManagerInterface;
23+
use Magento\Catalog\Model\Product\Image\RemoveDeletedImagesFromCache;
2124

2225
/**
2326
* Update handler for catalog product gallery.
2427
*
2528
* @api
2629
* @since 101.0.0
30+
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
2731
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2832
*/
2933
class UpdateHandler extends CreateHandler
3034
{
3135
/**
3236
* @var AttributeValue
3337
*/
34-
private $attributeValue;
38+
private AttributeValue $attributeValue;
39+
40+
/**
41+
* @var RemoveDeletedImagesFromCache
42+
*/
43+
private RemoveDeletedImagesFromCache $removeDeletedImagesFromCache;
3544

3645
/**
3746
* @param MetadataPool $metadataPool
@@ -43,6 +52,8 @@ class UpdateHandler extends CreateHandler
4352
* @param Database $fileStorageDb
4453
* @param StoreManagerInterface|null $storeManager
4554
* @param AttributeValue|null $attributeValue
55+
* @param RemoveDeletedImagesFromCache|null $removeDeletedImagesFromCache
56+
* @throws FileSystemException
4657
*/
4758
public function __construct(
4859
MetadataPool $metadataPool,
@@ -53,7 +64,8 @@ public function __construct(
5364
Filesystem $filesystem,
5465
Database $fileStorageDb,
5566
StoreManagerInterface $storeManager = null,
56-
?AttributeValue $attributeValue = null
67+
?AttributeValue $attributeValue = null,
68+
?RemoveDeletedImagesFromCache $removeDeletedImagesFromCache = null
5769
) {
5870
parent::__construct(
5971
$metadataPool,
@@ -66,6 +78,8 @@ public function __construct(
6678
$storeManager
6779
);
6880
$this->attributeValue = $attributeValue ?: ObjectManager::getInstance()->get(AttributeValue::class);
81+
$this->removeDeletedImagesFromCache = $removeDeletedImagesFromCache ?:
82+
ObjectManager::getInstance()->get(RemoveDeletedImagesFromCache::class);
6983
}
7084

7185
/**
@@ -102,6 +116,7 @@ protected function processDeletedImages($product, array &$images)
102116
$this->deleteMediaAttributeValues($product, $imagesToDelete);
103117
$this->resourceModel->deleteGallery($recordsToDelete);
104118
$this->removeDeletedImages($filesToDelete);
119+
$this->removeDeletedImagesFromCache->removeDeletedImagesFromCache($filesToDelete);
105120
}
106121

107122
/**
@@ -181,6 +196,7 @@ protected function extractStoreIds($product)
181196
*
182197
* @param array $files
183198
* @return null
199+
* @throws FileSystemException
184200
* @since 101.0.0
185201
*/
186202
protected function removeDeletedImages(array $files)
@@ -198,6 +214,7 @@ protected function removeDeletedImages(array $files)
198214
*
199215
* @param Product $product
200216
* @param string[] $images
217+
* @throws LocalizedException
201218
*/
202219
private function deleteMediaAttributeValues(Product $product, array $images): void
203220
{
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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\Catalog\Model\Product\Image;
9+
10+
/**
11+
* Convert array into string representation
12+
*/
13+
class ConvertImageMiscParamsToReadableFormat
14+
{
15+
/**
16+
* Converting bool into a string representation
17+
*
18+
* @param array $miscParams
19+
* @return array
20+
*/
21+
public function convertImageMiscParamsToReadableFormat(array $miscParams): array
22+
{
23+
$miscParams['image_height'] = 'h:' . ($miscParams['image_height'] ?? 'empty');
24+
$miscParams['image_width'] = 'w:' . ($miscParams['image_width'] ?? 'empty');
25+
$miscParams['quality'] = 'q:' . ($miscParams['quality'] ?? 'empty');
26+
$miscParams['angle'] = 'r:' . ($miscParams['angle'] ?? 'empty');
27+
$miscParams['keep_aspect_ratio'] = (!empty($miscParams['keep_aspect_ratio']) ? '' : 'non') . 'proportional';
28+
$miscParams['keep_frame'] = (!empty($miscParams['keep_frame']) ? '' : 'no') . 'frame';
29+
$miscParams['keep_transparency'] = (!empty($miscParams['keep_transparency']) ? '' : 'no') . 'transparency';
30+
$miscParams['constrain_only'] = (!empty($miscParams['constrain_only']) ? 'do' : 'not') . 'constrainonly';
31+
$miscParams['background'] = !empty($miscParams['background'])
32+
? 'rgb' . implode(',', $miscParams['background'])
33+
: 'nobackground';
34+
return $miscParams;
35+
}
36+
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
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\Catalog\Model\Product\Image;
9+
10+
use Magento\Catalog\Helper\Image;
11+
use Magento\Catalog\Model\Product\Media\Config;
12+
use Magento\Framework\App\Filesystem\DirectoryList;
13+
use Magento\Framework\Encryption\Encryptor;
14+
use Magento\Framework\Encryption\EncryptorInterface;
15+
use Magento\Framework\Filesystem;
16+
use Magento\Framework\Filesystem\Directory\WriteInterface;
17+
use Magento\Framework\View\ConfigInterface;
18+
19+
/**
20+
* Delete image from cache
21+
*/
22+
class RemoveDeletedImagesFromCache
23+
{
24+
/**
25+
* @var ConfigInterface
26+
*/
27+
private ConfigInterface $presentationConfig;
28+
29+
/**
30+
* @var EncryptorInterface
31+
*/
32+
private EncryptorInterface $encryptor;
33+
34+
/**
35+
* @var Config
36+
*/
37+
private Config $mediaConfig;
38+
39+
/**
40+
* @var WriteInterface
41+
*/
42+
private WriteInterface $mediaDirectory;
43+
44+
/**
45+
* @var ParamsBuilder
46+
*/
47+
private ParamsBuilder $imageParamsBuilder;
48+
49+
/**
50+
* @var ConvertImageMiscParamsToReadableFormat
51+
*/
52+
private ConvertImageMiscParamsToReadableFormat $convertImageMiscParamsToReadableFormat;
53+
54+
/**
55+
* @param ConfigInterface $presentationConfig
56+
* @param EncryptorInterface $encryptor
57+
* @param Config $mediaConfig
58+
* @param Filesystem $filesystem
59+
* @param ParamsBuilder $imageParamsBuilder
60+
* @param ConvertImageMiscParamsToReadableFormat $convertImageMiscParamsToReadableFormat
61+
*/
62+
public function __construct(
63+
ConfigInterface $presentationConfig,
64+
EncryptorInterface $encryptor,
65+
Config $mediaConfig,
66+
Filesystem $filesystem,
67+
ParamsBuilder $imageParamsBuilder,
68+
ConvertImageMiscParamsToReadableFormat $convertImageMiscParamsToReadableFormat
69+
) {
70+
$this->presentationConfig = $presentationConfig;
71+
$this->encryptor = $encryptor;
72+
$this->mediaConfig = $mediaConfig;
73+
$this->mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA);
74+
$this->imageParamsBuilder = $imageParamsBuilder;
75+
$this->convertImageMiscParamsToReadableFormat = $convertImageMiscParamsToReadableFormat;
76+
}
77+
78+
/**
79+
* Remove deleted images from cache.
80+
*
81+
* @param array $files
82+
*
83+
* @return void
84+
*/
85+
public function removeDeletedImagesFromCache(array $files): void
86+
{
87+
if (count($files) === 0) {
88+
return;
89+
}
90+
$images = $this->presentationConfig
91+
->getViewConfig(['area' => \Magento\Framework\App\Area::AREA_FRONTEND])
92+
->getMediaEntities(
93+
'Magento_Catalog',
94+
Image::MEDIA_TYPE_CONFIG_NODE
95+
);
96+
97+
$catalogPath = $this->mediaConfig->getBaseMediaPath();
98+
99+
foreach ($images as $imageData) {
100+
$imageMiscParams = $this->imageParamsBuilder->build($imageData);
101+
102+
if (isset($imageMiscParams['image_type'])) {
103+
unset($imageMiscParams['image_type']);
104+
}
105+
106+
$cacheId = $this->encryptor->hash(
107+
implode('_', $this->convertImageMiscParamsToReadableFormat
108+
->convertImageMiscParamsToReadableFormat($imageMiscParams)),
109+
Encryptor::HASH_VERSION_MD5
110+
);
111+
112+
foreach ($files as $filePath) {
113+
$this->mediaDirectory->delete(
114+
$catalogPath . '/cache/' . $cacheId . '/' . $filePath
115+
);
116+
}
117+
}
118+
}
119+
}

app/code/Magento/Catalog/Model/View/Asset/Image.php

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@
66

77
namespace Magento\Catalog\Model\View\Asset;
88

9+
use Magento\Catalog\Helper\Image as ImageHelper;
910
use Magento\Catalog\Model\Config\CatalogMediaConfig;
11+
use Magento\Catalog\Model\Product\Image\ConvertImageMiscParamsToReadableFormat;
1012
use Magento\Catalog\Model\Product\Media\ConfigInterface;
13+
use Magento\Framework\App\ObjectManager;
1114
use Magento\Framework\Encryption\Encryptor;
1215
use Magento\Framework\Encryption\EncryptorInterface;
1316
use Magento\Framework\Exception\LocalizedException;
1417
use Magento\Framework\View\Asset\ContextInterface;
1518
use Magento\Framework\View\Asset\LocalInterface;
16-
use Magento\Catalog\Helper\Image as ImageHelper;
17-
use Magento\Framework\App\ObjectManager;
1819
use Magento\Store\Model\StoreManagerInterface;
1920

2021
/**
@@ -78,6 +79,11 @@ class Image implements LocalInterface
7879
*/
7980
private $mediaFormatUrl;
8081

82+
/**
83+
* @var ConvertImageMiscParamsToReadableFormat
84+
*/
85+
private $convertImageMiscParamsToReadableFormat;
86+
8187
/**
8288
* Image constructor.
8389
*
@@ -89,6 +95,7 @@ class Image implements LocalInterface
8995
* @param ImageHelper $imageHelper
9096
* @param CatalogMediaConfig $catalogMediaConfig
9197
* @param StoreManagerInterface $storeManager
98+
* @param ConvertImageMiscParamsToReadableFormat $convertImageMiscParamsToReadableFormat
9299
*/
93100
public function __construct(
94101
ConfigInterface $mediaConfig,
@@ -98,7 +105,8 @@ public function __construct(
98105
array $miscParams,
99106
ImageHelper $imageHelper = null,
100107
CatalogMediaConfig $catalogMediaConfig = null,
101-
StoreManagerInterface $storeManager = null
108+
StoreManagerInterface $storeManager = null,
109+
?ConvertImageMiscParamsToReadableFormat $convertImageMiscParamsToReadableFormat = null
102110
) {
103111
if (isset($miscParams['image_type'])) {
104112
$this->sourceContentType = $miscParams['image_type'];
@@ -116,6 +124,8 @@ public function __construct(
116124

117125
$catalogMediaConfig = $catalogMediaConfig ?: ObjectManager::getInstance()->get(CatalogMediaConfig::class);
118126
$this->mediaFormatUrl = $catalogMediaConfig->getMediaUrlFormat();
127+
$this->convertImageMiscParamsToReadableFormat = $convertImageMiscParamsToReadableFormat ?:
128+
ObjectManager::getInstance()->get(ConvertImageMiscParamsToReadableFormat::class);
119129
}
120130

121131
/**
@@ -283,17 +293,6 @@ private function getImageInfo()
283293
*/
284294
private function convertToReadableFormat(array $miscParams)
285295
{
286-
$miscParams['image_height'] = 'h:' . ($miscParams['image_height'] ?? 'empty');
287-
$miscParams['image_width'] = 'w:' . ($miscParams['image_width'] ?? 'empty');
288-
$miscParams['quality'] = 'q:' . ($miscParams['quality'] ?? 'empty');
289-
$miscParams['angle'] = 'r:' . ($miscParams['angle'] ?? 'empty');
290-
$miscParams['keep_aspect_ratio'] = (!empty($miscParams['keep_aspect_ratio']) ? '' : 'non') . 'proportional';
291-
$miscParams['keep_frame'] = (!empty($miscParams['keep_frame']) ? '' : 'no') . 'frame';
292-
$miscParams['keep_transparency'] = (!empty($miscParams['keep_transparency']) ? '' : 'no') . 'transparency';
293-
$miscParams['constrain_only'] = (!empty($miscParams['constrain_only']) ? 'do' : 'not') . 'constrainonly';
294-
$miscParams['background'] = !empty($miscParams['background'])
295-
? 'rgb' . implode(',', $miscParams['background'])
296-
: 'nobackground';
297-
return $miscParams;
296+
return $this->convertImageMiscParamsToReadableFormat->convertImageMiscParamsToReadableFormat($miscParams);
298297
}
299298
}

0 commit comments

Comments
 (0)