forked from magento/magento2
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCollection.php
More file actions
134 lines (125 loc) · 4.52 KB
/
Collection.php
File metadata and controls
134 lines (125 loc) · 4.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Downloadable\Model\ResourceModel\Link;
use Magento\Catalog\Api\Data\ProductInterface;
/**
* Downloadable links resource collection
*/
class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
{
/**
* @var \Magento\Framework\EntityManager\MetadataPool
*/
protected $metadataPool;
/**
* @param \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory
* @param \Psr\Log\LoggerInterface $logger
* @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
* @param \Magento\Framework\Event\ManagerInterface $eventManager
* @param \Magento\Framework\EntityManager\MetadataPool $metadataPool
* @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
* @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource
*/
public function __construct(
\Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
\Psr\Log\LoggerInterface $logger,
\Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
\Magento\Framework\Event\ManagerInterface $eventManager,
\Magento\Framework\EntityManager\MetadataPool $metadataPool,
?\Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
?\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
) {
$this->metadataPool = $metadataPool;
parent::__construct(
$entityFactory,
$logger,
$fetchStrategy,
$eventManager,
$connection,
$resource
);
}
/**
* Init resource model
*
* @return void
*/
protected function _construct()
{
$this->_init(\Magento\Downloadable\Model\Link::class, \Magento\Downloadable\Model\ResourceModel\Link::class);
}
/**
* Method for product filter
*
* @param \Magento\Catalog\Model\Product|array|integer|null $product
* @return $this
*/
public function addProductToFilter($product)
{
if (empty($product)) {
$this->addFieldToFilter('product_id', '');
} else {
$this->join(
['cpe' => $this->getTable('catalog_product_entity')],
sprintf(
'cpe.%s = main_table.product_id',
$this->metadataPool->getMetadata(ProductInterface::class)->getLinkField()
)
);
if ($product instanceof \Magento\Catalog\Model\Product) {
$this->addFieldToFilter('cpe.entity_id', $product->getEntityId());
} else {
$this->addFieldToFilter('cpe.entity_id', ['in' => $product]);
}
}
return $this;
}
/**
* Retrieve title for current store
*
* @param int $storeId
* @return $this
*/
public function addTitleToResult($storeId = 0)
{
$ifNullDefaultTitle = $this->getConnection()->getIfNullSql('st.title', 'd.title');
$this->getSelect()
->joinLeft(
['d' => $this->getTable('downloadable_link_title')],
'd.link_id = main_table.link_id AND d.store_id = 0',
['default_title' => 'title']
)->joinLeft(
['st' => $this->getTable('downloadable_link_title')],
'st.link_id=main_table.link_id AND st.store_id = ' . (int)$storeId,
[
'store_title' => 'title',
'title' => $ifNullDefaultTitle
]
)->order('main_table.sort_order ASC')
->order('title ASC');
return $this;
}
/**
* Retrieve price for current website
*
* @param int $websiteId
* @return $this
*/
public function addPriceToResult($websiteId)
{
$ifNullDefaultPrice = $this->getConnection()->getIfNullSql('stp.price', 'dp.price');
$this->getSelect()->joinLeft(
['dp' => $this->getTable('downloadable_link_price')],
'dp.link_id=main_table.link_id AND dp.website_id = 0',
['default_price' => 'price']
)->joinLeft(
['stp' => $this->getTable('downloadable_link_price')],
'stp.link_id=main_table.link_id AND stp.website_id = ' . (int)$websiteId,
['website_price' => 'price', 'price' => $ifNullDefaultPrice]
);
return $this;
}
}