Skip to content

Commit 0753dfd

Browse files
author
Viktor Tymchynskyi
committed
Merge remote-tracking branch 'origin/MAGETWO-50828' into MPI-BUGFIXES
2 parents 5446b08 + 9e5f96f commit 0753dfd

File tree

3 files changed

+32
-12
lines changed

3 files changed

+32
-12
lines changed

app/code/Magento/Downloadable/Controller/Adminhtml/Product/Initialization/Helper/Plugin/Downloadable.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public function afterInitialize(
7777
if (!$linkData || (isset($linkData['is_delete']) && (bool)$linkData['is_delete'])) {
7878
continue;
7979
} else {
80-
unset($linkData['link_id']);
80+
//unset($linkData['link_id']);
8181
// TODO: need to implement setLinkFileContent()
8282
$link = $this->linkFactory->create(['data' => $linkData]);
8383
if (isset($linkData['type'])) {
@@ -89,7 +89,9 @@ public function afterInitialize(
8989
if (isset($linkData['file_content'])) {
9090
$link->setLinkFileContent($linkData['file_content']);
9191
}
92-
$link->setId(null);
92+
if (isset($linkData['link_id'])) {
93+
$link->setId($linkData['link_id']);
94+
}
9395
if (isset($linkData['sample']['type'])) {
9496
$link->setSampleType($linkData['sample']['type']);
9597
}
@@ -125,10 +127,11 @@ public function afterInitialize(
125127
if (!$sampleData || (isset($sampleData['is_delete']) && (bool)$sampleData['is_delete'])) {
126128
continue;
127129
} else {
128-
unset($sampleData['sample_id']);
129130
$sample = $this->sampleFactory->create(['data' => $sampleData]);
130-
$sample->setId(null);
131131
$sample->setStoreId($product->getStoreId());
132+
if (isset($sampleData['sample_id'])) {
133+
$sample->setId($sampleData['sample_id']);
134+
}
132135
if (isset($sampleData['type'])) {
133136
$sample->setSampleType($sampleData['type']);
134137
}

app/code/Magento/Downloadable/Model/Link/SaveHandler.php

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,26 @@ public function __construct(LinkRepository $linkRepository)
3636
*/
3737
public function execute($entityType, $entity, $arguments = [])
3838
{
39+
/** @var \Magento\Catalog\Api\Data\ProductInterface $entity */
3940
if ($entity->getTypeId() !== 'downloadable') {
4041
return $entity;
4142
}
42-
/** @var \Magento\Catalog\Api\Data\ProductInterface $entity */
43-
foreach ($this->linkRepository->getList($entity->getSku()) as $link) {
44-
$this->linkRepository->delete($link->getId());
45-
}
43+
44+
$oldLinks = $this->linkRepository->getList($entity->getSku());
4645
$links = $entity->getExtensionAttributes()->getDownloadableProductLinks() ?: [];
46+
$updatedLinkIds = [];
4747
foreach ($links as $link) {
48+
if ($link->getId()) {
49+
$updatedLinkIds[] = $link->getId();
50+
}
4851
$this->linkRepository->save($entity->getSku(), $link, !(bool)$entity->getStoreId());
4952
}
53+
foreach ($oldLinks as $link) {
54+
if (!in_array($link->getId(), $updatedLinkIds)) {
55+
$this->linkRepository->delete($link->getId());
56+
}
57+
}
58+
5059
return $entity;
5160
}
5261
}

app/code/Magento/Downloadable/Model/Sample/SaveHandler.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,22 @@ public function execute($entityType, $entity, $arguments = [])
3939
if ($entity->getTypeId() != \Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE) {
4040
return $entity;
4141
}
42-
/** @var \Magento\Catalog\Api\Data\ProductInterface $entity */
43-
foreach ($this->sampleRepository->getList($entity->getSku()) as $sample) {
44-
$this->sampleRepository->delete($sample->getId());
45-
}
42+
43+
$oldSamples = $this->sampleRepository->getList($entity->getSku());
4644
$samples = $entity->getExtensionAttributes()->getDownloadableProductSamples() ?: [];
45+
$updatedSampleIds = [];
4746
foreach ($samples as $sample) {
47+
if ($sample->getId()) {
48+
$updatedSampleIds[] = $sample->getId();
49+
}
4850
$this->sampleRepository->save($entity->getSku(), $sample, !(bool)$entity->getStoreId());
4951
}
52+
foreach ($oldSamples as $sample) {
53+
if (!in_array($sample->getId(), $updatedSampleIds)) {
54+
$this->sampleRepository->delete($sample->getId());
55+
}
56+
}
57+
5058
return $entity;
5159
}
5260
}

0 commit comments

Comments
 (0)