ConvertSerializedData.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Wishlist\Setup\Patch\Data;
  7. use Magento\Framework\DB\FieldDataConverterFactory;
  8. use Magento\Framework\DB\DataConverter\SerializedToJson;
  9. use Magento\Framework\DB\Select\QueryModifierFactory;
  10. use Magento\Framework\DB\Query\Generator as QueryGenerator;
  11. use Magento\Framework\App\ResourceConnection;
  12. use Magento\Framework\Setup\Patch\DataPatchInterface;
  13. use Magento\Framework\Setup\Patch\PatchVersionInterface;
  14. /**
  15. * Class ConvertSerializedData
  16. * @package Magento\Wishlist\Setup\Patch
  17. */
  18. class ConvertSerializedData implements DataPatchInterface, PatchVersionInterface
  19. {
  20. /**
  21. * @var \Magento\Framework\Setup\ModuleDataSetupInterface
  22. */
  23. private $moduleDataSetup;
  24. /**
  25. * @var FieldDataConverterFactory
  26. */
  27. private $fieldDataConverterFactory;
  28. /**
  29. * @var QueryModifierFactory
  30. */
  31. private $queryModifierFactory;
  32. /**
  33. * @var QueryGenerator
  34. */
  35. private $queryGenerator;
  36. /**
  37. * ConvertSerializedData constructor.
  38. * @param \Magento\Framework\Setup\ModuleDataSetupInterface $moduleDataSetup
  39. * @param FieldDataConverterFactory $fieldDataConverterFactory
  40. * @param QueryModifierFactory $queryModifierFactory
  41. * @param QueryGenerator $queryGenerator
  42. */
  43. public function __construct(
  44. \Magento\Framework\Setup\ModuleDataSetupInterface $moduleDataSetup,
  45. FieldDataConverterFactory $fieldDataConverterFactory,
  46. QueryModifierFactory $queryModifierFactory,
  47. QueryGenerator $queryGenerator
  48. ) {
  49. $this->moduleDataSetup = $moduleDataSetup;
  50. $this->fieldDataConverterFactory = $fieldDataConverterFactory;
  51. $this->queryModifierFactory = $queryModifierFactory;
  52. $this->queryGenerator = $queryGenerator;
  53. }
  54. /**
  55. * {@inheritdoc}
  56. */
  57. public function apply()
  58. {
  59. $this->convertSerializedData();
  60. }
  61. /**
  62. * {@inheritdoc}
  63. */
  64. public static function getDependencies()
  65. {
  66. return [];
  67. }
  68. /**
  69. * {@inheritdoc}
  70. */
  71. public static function getVersion()
  72. {
  73. return '2.0.1';
  74. }
  75. /**
  76. * {@inheritdoc}
  77. */
  78. public function getAliases()
  79. {
  80. return [];
  81. }
  82. private function convertSerializedData()
  83. {
  84. $connection = $this->moduleDataSetup->getConnection();
  85. $fieldDataConverter = $this->fieldDataConverterFactory->create(SerializedToJson::class);
  86. $queryModifier = $this->queryModifierFactory->create(
  87. 'in',
  88. [
  89. 'values' => [
  90. 'code' => [
  91. 'parameters',
  92. 'info_buyRequest',
  93. 'bundle_option_ids',
  94. 'bundle_selection_ids',
  95. 'attributes',
  96. 'bundle_selection_attributes',
  97. ]
  98. ]
  99. ]
  100. );
  101. $fieldDataConverter->convert(
  102. $connection,
  103. $this->moduleDataSetup->getTable('wishlist_item_option'),
  104. 'option_id',
  105. 'value',
  106. $queryModifier
  107. );
  108. $select = $connection
  109. ->select()
  110. ->from(
  111. $this->moduleDataSetup->getTable('catalog_product_option'),
  112. ['option_id']
  113. )
  114. ->where('type = ?', 'file');
  115. $iterator = $this->queryGenerator->generate('option_id', $select);
  116. foreach ($iterator as $selectByRange) {
  117. $codes = $connection->fetchCol($selectByRange);
  118. $codes = array_map(
  119. function ($id) {
  120. return 'option_' . $id;
  121. },
  122. $codes
  123. );
  124. $queryModifier = $this->queryModifierFactory->create(
  125. 'in',
  126. [
  127. 'values' => [
  128. 'code' => $codes
  129. ]
  130. ]
  131. );
  132. $fieldDataConverter->convert(
  133. $connection,
  134. $this->moduleDataSetup->getTable('wishlist_item_option'),
  135. 'option_id',
  136. 'value',
  137. $queryModifier
  138. );
  139. }
  140. }
  141. }