InitializeGroupedProductLinks.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\GroupedProduct\Setup\Patch\Data;
  7. use Magento\Catalog\Model\Product;
  8. use Magento\Eav\Setup\EavSetup;
  9. use Magento\Eav\Setup\EavSetupFactory;
  10. use Magento\Framework\App\ResourceConnection;
  11. use Magento\Framework\Setup\Patch\DataPatchInterface;
  12. use Magento\Framework\Setup\Patch\PatchVersionInterface;
  13. /**
  14. * Class InitializeGroupedProductLinks
  15. * @package Magento\GroupedProduct\Setup\Patch
  16. */
  17. class InitializeGroupedProductLinks implements DataPatchInterface, PatchVersionInterface
  18. {
  19. /**
  20. * @var \Magento\Framework\Setup\ModuleDataSetupInterface
  21. */
  22. private $moduleDataSetup;
  23. /**
  24. * @var EavSetupFactory
  25. */
  26. private $eavSetupFactory;
  27. /**
  28. * InitializeGroupedProductLinks constructor.
  29. * @param \Magento\Framework\Setup\ModuleDataSetupInterface $moduleDataSetup
  30. * @param EavSetupFactory $eavSetupFactory
  31. */
  32. public function __construct(
  33. \Magento\Framework\Setup\ModuleDataSetupInterface $moduleDataSetup,
  34. EavSetupFactory $eavSetupFactory
  35. ) {
  36. $this->moduleDataSetup = $moduleDataSetup;
  37. $this->eavSetupFactory = $eavSetupFactory;
  38. }
  39. /**
  40. * {@inheritdoc}
  41. */
  42. public function apply()
  43. {
  44. /**
  45. * Install grouped product link type
  46. */
  47. $data = [
  48. 'link_type_id' => \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED,
  49. 'code' => 'super',
  50. ];
  51. $this->moduleDataSetup->getConnection()->insertOnDuplicate(
  52. $this->moduleDataSetup->getTable('catalog_product_link_type'),
  53. $data
  54. );
  55. /**
  56. * Install grouped product link attributes
  57. */
  58. $select = $this->moduleDataSetup->getConnection()
  59. ->select()
  60. ->from(
  61. ['c' => $this->moduleDataSetup->getTable('catalog_product_link_attribute')]
  62. )
  63. ->where(
  64. "c.link_type_id=?",
  65. \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
  66. );
  67. $result = $this->moduleDataSetup->getConnection()->fetchAll($select);
  68. if (!$result) {
  69. $data = [
  70. [
  71. 'link_type_id' => \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED,
  72. 'product_link_attribute_code' => 'position',
  73. 'data_type' => 'int',
  74. ],
  75. [
  76. 'link_type_id' => \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED,
  77. 'product_link_attribute_code' => 'qty',
  78. 'data_type' => 'decimal'
  79. ],
  80. ];
  81. $this->moduleDataSetup->getConnection()->insertMultiple(
  82. $this->moduleDataSetup->getTable('catalog_product_link_attribute'),
  83. $data
  84. );
  85. }
  86. /** @var EavSetup $eavSetup */
  87. $eavSetup = $this->eavSetupFactory->create(['setup' => $this->moduleDataSetup]);
  88. $field = 'country_of_manufacture';
  89. $applyTo = explode(',', $eavSetup->getAttribute(Product::ENTITY, $field, 'apply_to'));
  90. if (!in_array('grouped', $applyTo)) {
  91. $applyTo[] = 'grouped';
  92. $eavSetup->updateAttribute(Product::ENTITY, $field, 'apply_to', implode(',', $applyTo));
  93. }
  94. }
  95. /**
  96. * {@inheritdoc}
  97. */
  98. public static function getDependencies()
  99. {
  100. return [];
  101. }
  102. /**
  103. * {@inheritdoc}
  104. */
  105. public static function getVersion()
  106. {
  107. return '2.0.0';
  108. }
  109. /**
  110. * {@inheritdoc}
  111. */
  112. public function getAliases()
  113. {
  114. return [];
  115. }
  116. }