Skip to content

Commit d7bf23b

Browse files
committed
#27536: Updated plugins
1 parent 1ab7fca commit d7bf23b

File tree

3 files changed

+117
-53
lines changed

3 files changed

+117
-53
lines changed

app/code/Magento/MediaContent/Model/Plugin/MediaGalleryAssetDeleteByDirectoryPath.php

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
67

78
namespace Magento\MediaContent\Model\Plugin;
89

910
use Magento\Framework\App\ResourceConnection;
1011
use Magento\Framework\DB\Adapter\AdapterInterface;
1112
use Magento\Framework\Exception\CouldNotDeleteException;
13+
use Magento\MediaContent\Model\RemoveRelationsForAssetIds;
1214
use Magento\MediaGalleryApi\Model\Asset\Command\DeleteByDirectoryPathInterface;
1315
use Psr\Log\LoggerInterface;
1416

@@ -17,6 +19,8 @@
1719
*/
1820
class MediaGalleryAssetDeleteByDirectoryPath
1921
{
22+
private const TABLE_MEDIA_GALLERY_ASSET = 'media_gallery_asset';
23+
2024
/**
2125
* @var ResourceConnection
2226
*/
@@ -28,15 +32,21 @@ class MediaGalleryAssetDeleteByDirectoryPath
2832
private $logger;
2933

3034
/**
31-
* DeleteById constructor.
32-
*
35+
* @var RemoveRelationsForAssetIds
36+
*/
37+
private $removeRelationsForAssetIds;
38+
39+
/**
40+
* @param RemoveRelationsForAssetIds $removeRelationsForAssetIds
3341
* @param ResourceConnection $resourceConnection
3442
* @param LoggerInterface $logger
3543
*/
3644
public function __construct(
45+
RemoveRelationsForAssetIds $removeRelationsForAssetIds,
3746
ResourceConnection $resourceConnection,
3847
LoggerInterface $logger
3948
) {
49+
$this->removeRelationsForAssetIds = $removeRelationsForAssetIds;
4050
$this->resourceConnection = $resourceConnection;
4151
$this->logger = $logger;
4252
}
@@ -55,30 +65,28 @@ public function aroundExecute(
5565
\Closure $proceed,
5666
string $directoryPath
5767
) : void {
68+
$assetIds = $this->getAssetIdsByDirectoryPath($directoryPath);
69+
70+
$proceed();
71+
72+
$this->removeRelationsForAssetIds->execute($assetIds);
73+
}
74+
75+
/**
76+
* Get ids of media assets by directory path
77+
*
78+
* @param string $path
79+
* @return int[]
80+
*/
81+
private function getAssetIdsByDirectoryPath(string $path): array
82+
{
5883
/** @var AdapterInterface $connection */
5984
$connection = $this->resourceConnection->getConnection();
60-
$galleryAssetTableName = $this->resourceConnection->getTableName('media_gallery_asset');
61-
$mediaContentAssetTableName = $this->resourceConnection->getTableName('media_content_asset');
85+
$galleryAssetTableName = $this->resourceConnection->getTableName(self::TABLE_MEDIA_GALLERY_ASSET);
6286

6387
$select = $connection->select();
6488
$select->from($galleryAssetTableName, ['id']);
65-
$select->where('path LIKE ?', $directoryPath);
66-
$galleryAssetIds = $connection->fetchCol($select);
67-
68-
$proceed();
69-
70-
try {
71-
$connection->delete(
72-
$mediaContentAssetTableName,
73-
['asset_id IN(?)' => implode(', ', $galleryAssetIds)]
74-
);
75-
} catch (\Exception $exception) {
76-
$this->logger->critical($exception);
77-
$message = __(
78-
'Could not delete media content assets for media gallery asset with path %path: %error',
79-
['path' => $directoryPath, 'error' => $exception->getMessage()]
80-
);
81-
throw new CouldNotDeleteException($message, $exception);
82-
}
89+
$select->where('path LIKE ?', $path . '%');
90+
return $connection->fetchCol($select);
8391
}
8492
}

app/code/Magento/MediaContent/Model/Plugin/MediaGalleryAssetDeleteByPath.php

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
67

78
namespace Magento\MediaContent\Model\Plugin;
89

9-
use Magento\Framework\App\ResourceConnection;
10-
use Magento\Framework\DB\Adapter\AdapterInterface;
1110
use Magento\Framework\Exception\CouldNotDeleteException;
11+
use Magento\MediaContent\Model\RemoveRelationsForAssetIds;
1212
use Magento\MediaGalleryApi\Model\Asset\Command\DeleteByPathInterface;
13+
use Magento\MediaGalleryApi\Model\Asset\Command\GetByPathInterface;
1314
use Psr\Log\LoggerInterface;
1415

1516
/**
@@ -18,26 +19,32 @@
1819
class MediaGalleryAssetDeleteByPath
1920
{
2021
/**
21-
* @var ResourceConnection
22+
* @var GetByPathInterface
2223
*/
23-
private $resourceConnection;
24+
private $getByPath;
2425

2526
/**
2627
* @var LoggerInterface
2728
*/
2829
private $logger;
2930

3031
/**
31-
* DeleteById constructor.
32-
*
33-
* @param ResourceConnection $resourceConnection
32+
* @var RemoveRelationsForAssetIds
33+
*/
34+
private $removeRelationsForAssetIds;
35+
36+
/**
37+
* @param RemoveRelationsForAssetIds $removeRelationsForAssetIds
38+
* @param GetByPathInterface $getByPath
3439
* @param LoggerInterface $logger
3540
*/
3641
public function __construct(
37-
ResourceConnection $resourceConnection,
42+
RemoveRelationsForAssetIds $removeRelationsForAssetIds,
43+
GetByPathInterface $getByPath,
3844
LoggerInterface $logger
3945
) {
40-
$this->resourceConnection = $resourceConnection;
46+
$this->removeRelationsForAssetIds = $removeRelationsForAssetIds;
47+
$this->getByPath = $getByPath;
4148
$this->logger = $logger;
4249
}
4350

@@ -55,30 +62,10 @@ public function aroundExecute(
5562
\Closure $proceed,
5663
string $mediaAssetPath
5764
) : void {
58-
/** @var AdapterInterface $connection */
59-
$connection = $this->resourceConnection->getConnection();
60-
$galleryAssetTableName = $this->resourceConnection->getTableName('media_gallery_asset');
61-
$mediaContentAssetTableName = $this->resourceConnection->getTableName('media_content_asset');
62-
63-
$select = $connection->select();
64-
$select->from($galleryAssetTableName, ['id']);
65-
$select->where('path = ?', $mediaAssetPath);
66-
$galleryAssetIds = $connection->fetchCol($select);
65+
$asset = $this->getByPath->execute($mediaAssetPath);
6766

6867
$proceed();
6968

70-
try {
71-
$connection->delete(
72-
$mediaContentAssetTableName,
73-
['asset_id IN(?)' => implode(', ', $galleryAssetIds)]
74-
);
75-
} catch (\Exception $exception) {
76-
$this->logger->critical($exception);
77-
$message = __(
78-
'Could not delete media content assets for media gallery asset with path %path: %error',
79-
['path' => $mediaAssetPath, 'error' => $exception->getMessage()]
80-
);
81-
throw new CouldNotDeleteException($message, $exception);
82-
}
69+
$this->removeRelationsForAssetIds->execute([$asset->getId()]);
8370
}
8471
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
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\MediaContent\Model;
9+
10+
use Magento\Framework\App\ResourceConnection;
11+
use Magento\Framework\Exception\CouldNotDeleteException;
12+
use Psr\Log\LoggerInterface;
13+
14+
/**
15+
* Used for saving relation between the media asset and media content where the media asset is used
16+
*/
17+
class RemoveRelationsForAssetIds
18+
{
19+
private const MEDIA_CONTENT_ASSET_TABLE_NAME = 'media_content_asset';
20+
private const ASSET_ID = 'asset_id';
21+
22+
/**
23+
* @var ResourceConnection
24+
*/
25+
private $resourceConnection;
26+
27+
/**
28+
* @var LoggerInterface
29+
*/
30+
private $logger;
31+
32+
/**
33+
* @param ResourceConnection $resourceConnection
34+
* @param LoggerInterface $logger
35+
*/
36+
public function __construct(ResourceConnection $resourceConnection, LoggerInterface $logger)
37+
{
38+
$this->resourceConnection = $resourceConnection;
39+
$this->logger = $logger;
40+
}
41+
42+
/**
43+
* Remove media content relations for media asset ids
44+
*
45+
* @param array $assetIds
46+
* @throws CouldNotDeleteException
47+
*/
48+
public function execute(array $assetIds): void
49+
{
50+
$commaSeparatedAssetIds = implode(', ', $assetIds);
51+
try {
52+
$this->resourceConnection->getConnection()->delete(
53+
$this->resourceConnection->getTableName(self::MEDIA_CONTENT_ASSET_TABLE_NAME),
54+
[
55+
self::ASSET_ID . ' IN (?)' => $commaSeparatedAssetIds
56+
]
57+
);
58+
} catch (\Exception $exception) {
59+
$this->logger->critical($exception);
60+
$message = __(
61+
'Could not remove media content relations for assets ids: %ids',
62+
[
63+
'ids' => $commaSeparatedAssetIds
64+
]
65+
);
66+
throw new CouldNotDeleteException($message, $exception);
67+
}
68+
}
69+
}

0 commit comments

Comments
 (0)