UpgradeWidgetData.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Catalog\Setup\Patch\Data;
  7. use Magento\Eav\Setup\EavSetup;
  8. use Magento\Eav\Setup\EavSetupFactory;
  9. use Magento\Framework\DB\AggregatedFieldDataConverter;
  10. use Magento\Framework\DB\FieldToConvert;
  11. use Magento\Framework\DB\Select\QueryModifierFactory;
  12. use Magento\Framework\Setup\ModuleDataSetupInterface;
  13. use Magento\Framework\Setup\Patch\DataPatchInterface;
  14. use Magento\Framework\Setup\Patch\PatchVersionInterface;
  15. use Magento\Widget\Setup\LayoutUpdateConverter;
  16. /**
  17. * Class UpgradeWidgetData.
  18. *
  19. * @package Magento\Catalog\Setup\Patch
  20. */
  21. class UpgradeWidgetData implements DataPatchInterface, PatchVersionInterface
  22. {
  23. /**
  24. * @var ModuleDataSetupInterface
  25. */
  26. private $moduleDataSetup;
  27. /**
  28. * @var EavSetup
  29. */
  30. private $eavSetup;
  31. /**
  32. * @var QueryModifierFactory
  33. */
  34. private $queryModifierFactory;
  35. /**
  36. * @var AggregatedFieldDataConverter
  37. */
  38. private $aggregatedFieldDataConverter;
  39. /**
  40. * PrepareInitialConfig constructor.
  41. * @param ModuleDataSetupInterface $moduleDataSetup
  42. * @param EavSetupFactory $eavSetupFactory
  43. * @param QueryModifierFactory $queryModifierFactory
  44. * @param AggregatedFieldDataConverter $aggregatedFieldDataConverter
  45. */
  46. public function __construct(
  47. ModuleDataSetupInterface $moduleDataSetup,
  48. EavSetupFactory $eavSetupFactory,
  49. QueryModifierFactory $queryModifierFactory,
  50. AggregatedFieldDataConverter $aggregatedFieldDataConverter
  51. ) {
  52. $this->moduleDataSetup = $moduleDataSetup;
  53. $this->eavSetup = $eavSetupFactory->create(['setup' => $moduleDataSetup]);
  54. $this->queryModifierFactory = $queryModifierFactory;
  55. $this->aggregatedFieldDataConverter = $aggregatedFieldDataConverter;
  56. }
  57. /**
  58. * {@inheritdoc}
  59. */
  60. public function apply()
  61. {
  62. $categoryTypeId = $this->eavSetup->getEntityTypeId(\Magento\Catalog\Model\Category::ENTITY);
  63. $categoryLayoutUpdateAttribute = $this->eavSetup->getAttribute($categoryTypeId, 'custom_layout_update');
  64. $categoryLayoutUpdateAttributeModifier = $this->queryModifierFactory->create(
  65. 'in',
  66. [
  67. 'values' => [
  68. 'attribute_id' => $categoryLayoutUpdateAttribute['attribute_id']
  69. ]
  70. ]
  71. );
  72. $layoutUpdateValueModifier = $this->queryModifierFactory->create(
  73. 'like',
  74. [
  75. 'values' => [
  76. 'value' => '%conditions_encoded%'
  77. ]
  78. ]
  79. );
  80. $categoryLayoutUpdateModifier = $this->queryModifierFactory->create(
  81. 'composite',
  82. [
  83. 'queryModifiers' => [
  84. $categoryLayoutUpdateAttributeModifier,
  85. $layoutUpdateValueModifier
  86. ]
  87. ]
  88. );
  89. $productTypeId = $this->eavSetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);
  90. $productLayoutUpdateAttribute = $this->eavSetup->getAttribute($productTypeId, 'custom_layout_update');
  91. $productLayoutUpdateAttributeModifier = $this->queryModifierFactory->create(
  92. 'in',
  93. [
  94. 'values' => [
  95. 'attribute_id' => $productLayoutUpdateAttribute['attribute_id']
  96. ]
  97. ]
  98. );
  99. $productLayoutUpdateModifier = $this->queryModifierFactory->create(
  100. 'composite',
  101. [
  102. 'queryModifiers' => [
  103. $productLayoutUpdateAttributeModifier,
  104. $layoutUpdateValueModifier
  105. ]
  106. ]
  107. );
  108. $this->aggregatedFieldDataConverter->convert(
  109. [
  110. new FieldToConvert(
  111. LayoutUpdateConverter::class,
  112. $this->eavSetup->getSetup()->getTable('catalog_category_entity_text'),
  113. 'value_id',
  114. 'value',
  115. $categoryLayoutUpdateModifier
  116. ),
  117. new FieldToConvert(
  118. LayoutUpdateConverter::class,
  119. $this->eavSetup->getSetup()->getTable('catalog_product_entity_text'),
  120. 'value_id',
  121. 'value',
  122. $productLayoutUpdateModifier
  123. ),
  124. ],
  125. $this->eavSetup->getSetup()->getConnection()
  126. );
  127. }
  128. /**
  129. * {@inheritdoc}
  130. */
  131. public static function getDependencies()
  132. {
  133. return [
  134. DisallowUsingHtmlForProductName::class,
  135. ];
  136. }
  137. /**
  138. * {@inheritdoc}
  139. */
  140. public static function getVersion()
  141. {
  142. return '2.2.1';
  143. }
  144. /**
  145. * {@inheritdoc}
  146. */
  147. public function getAliases()
  148. {
  149. return [];
  150. }
  151. }