Skip to content

Commit 90f29d6

Browse files
committed
Merge remote-tracking branch 'tango/MC-34259' into Chaika-PR-2020-05-21
2 parents 5a31f81 + 7e3e145 commit 90f29d6

File tree

7 files changed

+118
-537
lines changed

7 files changed

+118
-537
lines changed

app/code/Magento/Catalog/Model/Product/SalabilityChecker.php

Lines changed: 0 additions & 57 deletions
This file was deleted.

app/code/Magento/Downloadable/Controller/Download/LinkSample.php

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77

88
namespace Magento\Downloadable\Controller\Download;
99

10-
use Magento\Catalog\Model\Product\SalabilityChecker;
1110
use Magento\Downloadable\Helper\Download as DownloadHelper;
11+
use Magento\Downloadable\Model\Link as LinkModel;
12+
use Magento\Downloadable\Model\RelatedProductRetriever;
1213
use Magento\Framework\App\Action\Context;
1314
use Magento\Framework\App\ResponseInterface;
1415

@@ -20,20 +21,21 @@
2021
class LinkSample extends \Magento\Downloadable\Controller\Download
2122
{
2223
/**
23-
* @var SalabilityChecker
24+
* @var RelatedProductRetriever
2425
*/
25-
private $salabilityChecker;
26+
private $relatedProductRetriever;
2627

2728
/**
2829
* @param Context $context
29-
* @param SalabilityChecker|null $salabilityChecker
30+
* @param RelatedProductRetriever $relatedProductRetriever
3031
*/
3132
public function __construct(
3233
Context $context,
33-
SalabilityChecker $salabilityChecker = null
34+
RelatedProductRetriever $relatedProductRetriever
3435
) {
3536
parent::__construct($context);
36-
$this->salabilityChecker = $salabilityChecker ?: $this->_objectManager->get(SalabilityChecker::class);
37+
38+
$this->relatedProductRetriever = $relatedProductRetriever;
3739
}
3840

3941
/**
@@ -44,9 +46,10 @@ public function __construct(
4446
public function execute()
4547
{
4648
$linkId = $this->getRequest()->getParam('link_id', 0);
47-
/** @var \Magento\Downloadable\Model\Link $link */
48-
$link = $this->_objectManager->create(\Magento\Downloadable\Model\Link::class)->load($linkId);
49-
if ($link->getId() && $this->salabilityChecker->isSalable($link->getProductId())) {
49+
/** @var LinkModel $link */
50+
$link = $this->_objectManager->create(LinkModel::class);
51+
$link->load($linkId);
52+
if ($link->getId() && $this->isProductSalable($link)) {
5053
$resource = '';
5154
$resourceType = '';
5255
if ($link->getSampleType() == DownloadHelper::LINK_TYPE_URL) {
@@ -74,4 +77,16 @@ public function execute()
7477

7578
return $this->getResponse()->setRedirect($this->_redirect->getRedirectUrl());
7679
}
80+
81+
/**
82+
* Check is related product salable.
83+
*
84+
* @param LinkModel $link
85+
* @return bool
86+
*/
87+
private function isProductSalable(LinkModel $link): bool
88+
{
89+
$product = $this->relatedProductRetriever->getProduct((int) $link->getProductId());
90+
return $product ? $product->isSalable() : false;
91+
}
7792
}

app/code/Magento/Downloadable/Controller/Download/Sample.php

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77

88
namespace Magento\Downloadable\Controller\Download;
99

10-
use Magento\Catalog\Model\Product\SalabilityChecker;
1110
use Magento\Downloadable\Helper\Download as DownloadHelper;
11+
use Magento\Downloadable\Model\RelatedProductRetriever;
12+
use Magento\Downloadable\Model\Sample as SampleModel;
1213
use Magento\Framework\App\Action\Context;
1314
use Magento\Framework\App\ResponseInterface;
1415

@@ -20,20 +21,21 @@
2021
class Sample extends \Magento\Downloadable\Controller\Download
2122
{
2223
/**
23-
* @var SalabilityChecker
24+
* @var RelatedProductRetriever
2425
*/
25-
private $salabilityChecker;
26+
private $relatedProductRetriever;
2627

2728
/**
2829
* @param Context $context
29-
* @param SalabilityChecker|null $salabilityChecker
30+
* @param RelatedProductRetriever $relatedProductRetriever
3031
*/
3132
public function __construct(
3233
Context $context,
33-
SalabilityChecker $salabilityChecker = null
34+
RelatedProductRetriever $relatedProductRetriever
3435
) {
3536
parent::__construct($context);
36-
$this->salabilityChecker = $salabilityChecker ?: $this->_objectManager->get(SalabilityChecker::class);
37+
38+
$this->relatedProductRetriever = $relatedProductRetriever;
3739
}
3840

3941
/**
@@ -44,9 +46,10 @@ public function __construct(
4446
public function execute()
4547
{
4648
$sampleId = $this->getRequest()->getParam('sample_id', 0);
47-
/** @var \Magento\Downloadable\Model\Sample $sample */
48-
$sample = $this->_objectManager->create(\Magento\Downloadable\Model\Sample::class)->load($sampleId);
49-
if ($sample->getId() && $this->salabilityChecker->isSalable($sample->getProductId())) {
49+
/** @var SampleModel $sample */
50+
$sample = $this->_objectManager->create(SampleModel::class);
51+
$sample->load($sampleId);
52+
if ($sample->getId() && $this->isProductSalable($sample)) {
5053
$resource = '';
5154
$resourceType = '';
5255
if ($sample->getSampleType() == DownloadHelper::LINK_TYPE_URL) {
@@ -71,4 +74,16 @@ public function execute()
7174

7275
return $this->getResponse()->setRedirect($this->_redirect->getRedirectUrl());
7376
}
77+
78+
/**
79+
* Check is related product salable.
80+
*
81+
* @param SampleModel $sample
82+
* @return bool
83+
*/
84+
private function isProductSalable(SampleModel $sample): bool
85+
{
86+
$product = $this->relatedProductRetriever->getProduct((int) $sample->getProductId());
87+
return $product ? $product->isSalable() : false;
88+
}
7489
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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\Downloadable\Model;
9+
10+
use Magento\Catalog\Api\Data\ProductInterface;
11+
use Magento\Catalog\Api\ProductRepositoryInterface;
12+
use Magento\Framework\Api\SearchCriteriaBuilder;
13+
use Magento\Framework\EntityManager\MetadataPool;
14+
15+
/**
16+
* Related parent product retriever.
17+
*/
18+
class RelatedProductRetriever
19+
{
20+
/**
21+
* @var ProductRepositoryInterface
22+
*/
23+
private $productRepository;
24+
25+
/**
26+
* @var SearchCriteriaBuilder
27+
*/
28+
private $searchCriteriaBuilder;
29+
30+
/**
31+
* @var MetadataPool
32+
*/
33+
private $metadataPool;
34+
35+
/**
36+
* @param ProductRepositoryInterface $productRepository
37+
* @param SearchCriteriaBuilder $searchCriteriaBuilder
38+
* @param MetadataPool $metadataPool
39+
*/
40+
public function __construct(
41+
ProductRepositoryInterface $productRepository,
42+
SearchCriteriaBuilder $searchCriteriaBuilder,
43+
MetadataPool $metadataPool
44+
) {
45+
$this->productRepository = $productRepository;
46+
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
47+
$this->metadataPool = $metadataPool;
48+
}
49+
50+
/**
51+
* Get related product.
52+
*
53+
* @param int $productId
54+
* @return ProductInterface|null
55+
*/
56+
public function getProduct(int $productId): ?ProductInterface
57+
{
58+
$productMetadata = $this->metadataPool->getMetadata(ProductInterface::class);
59+
60+
$searchCriteria = $this->searchCriteriaBuilder->addFilter($productMetadata->getLinkField(), $productId)
61+
->create();
62+
$items = $this->productRepository->getList($searchCriteria)
63+
->getItems();
64+
$product = $items ? array_shift($items) : null;
65+
66+
return $product;
67+
}
68+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class Sample extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
2424
/**
2525
* @param \Magento\Framework\Model\ResourceModel\Db\Context $context
2626
* @param \Magento\Framework\EntityManager\MetadataPool $metadataPool
27-
* @param null $connectionName
27+
* @param string|null $connectionName
2828
*/
2929
public function __construct(
3030
\Magento\Framework\Model\ResourceModel\Db\Context $context,
@@ -126,7 +126,7 @@ public function getSearchableData($productId, $storeId)
126126
)->join(
127127
['cpe' => $this->getTable('catalog_product_entity')],
128128
sprintf(
129-
'cpe.entity_id = m.product_id',
129+
'cpe.%s = m.product_id',
130130
$this->metadataPool->getMetadata(ProductInterface::class)->getLinkField()
131131
),
132132
[]

0 commit comments

Comments
 (0)