@@ -75,6 +75,11 @@ class Helper
75
75
*/
76
76
private $ dateTimeFilter ;
77
77
78
+ /**
79
+ * @var \Magento\Catalog\Model\Product\LinkTypeProvider
80
+ */
81
+ private $ linkTypeProvider ;
82
+
78
83
/**
79
84
* Helper constructor.
80
85
* @param \Magento\Framework\App\RequestInterface $request
@@ -83,21 +88,25 @@ class Helper
83
88
* @param ProductLinks $productLinks
84
89
* @param \Magento\Backend\Helper\Js $jsHelper
85
90
* @param \Magento\Framework\Stdlib\DateTime\Filter\Date $dateFilter
91
+ * @param \Magento\Catalog\Model\Product\LinkTypeProvider $linkTypeProvider
86
92
*/
87
93
public function __construct (
88
94
\Magento \Framework \App \RequestInterface $ request ,
89
95
\Magento \Store \Model \StoreManagerInterface $ storeManager ,
90
96
StockDataFilter $ stockFilter ,
91
97
\Magento \Catalog \Model \Product \Initialization \Helper \ProductLinks $ productLinks ,
92
98
\Magento \Backend \Helper \Js $ jsHelper ,
93
- \Magento \Framework \Stdlib \DateTime \Filter \Date $ dateFilter
99
+ \Magento \Framework \Stdlib \DateTime \Filter \Date $ dateFilter ,
100
+ \Magento \Catalog \Model \Product \LinkTypeProvider $ linkTypeProvider = null
94
101
) {
95
102
$ this ->request = $ request ;
96
103
$ this ->storeManager = $ storeManager ;
97
104
$ this ->stockFilter = $ stockFilter ;
98
105
$ this ->productLinks = $ productLinks ;
99
106
$ this ->jsHelper = $ jsHelper ;
100
107
$ this ->dateFilter = $ dateFilter ;
108
+ $ this ->linkTypeProvider = $ linkTypeProvider ?: \Magento \Framework \App \ObjectManager::getInstance ()
109
+ ->get (\Magento \Catalog \Model \Product \LinkTypeProvider::class);
101
110
}
102
111
103
112
/**
@@ -244,11 +253,17 @@ protected function setProductLinks(\Magento\Catalog\Model\Product $product)
244
253
245
254
$ product = $ this ->productLinks ->initializeLinks ($ product , $ links );
246
255
$ productLinks = $ product ->getProductLinks ();
247
- $ linkTypes = [
248
- 'related ' => $ product ->getRelatedReadonly (),
249
- 'upsell ' => $ product ->getUpsellReadonly (),
250
- 'crosssell ' => $ product ->getCrosssellReadonly ()
251
- ];
256
+ $ linkTypes = [];
257
+
258
+ /** @var \Magento\Catalog\Api\Data\ProductLinkTypeInterface $linkTypeObject */
259
+ foreach ($ this ->linkTypeProvider ->getItems () as $ linkTypeObject ) {
260
+ $ linkTypes [$ linkTypeObject ->getName ()] = $ product ->getData ($ linkTypeObject ->getName () . '_readonly ' );
261
+ }
262
+
263
+ // skip linkTypes that were already processed on initializeLinks plugins
264
+ foreach ($ productLinks as $ productLink ) {
265
+ unset($ linkTypes [$ productLink ->getLinkType ()]);
266
+ }
252
267
253
268
foreach ($ linkTypes as $ linkType => $ readonly ) {
254
269
if (isset ($ links [$ linkType ]) && !$ readonly ) {
0 commit comments