ConvertSerializedData.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Widget\Setup\Patch\Data;
  7. use Magento\Framework\DB\AggregatedFieldDataConverter;
  8. use Magento\Framework\DB\FieldToConvert;
  9. use Magento\Framework\DB\Select\QueryModifierFactory;
  10. use Magento\Framework\DB\DataConverter\SerializedToJson;
  11. use Magento\Framework\App\ResourceConnection;
  12. use Magento\Framework\Setup\Patch\DataPatchInterface;
  13. use Magento\Framework\Setup\Patch\PatchVersionInterface;
  14. use Magento\Widget\Setup\LayoutUpdateConverter;
  15. /**
  16. * Class ConvertSerializedData
  17. * @package Magento\Widget\Setup\Patch
  18. */
  19. class ConvertSerializedData implements DataPatchInterface, PatchVersionInterface
  20. {
  21. /**
  22. * @var \Magento\Framework\Setup\ModuleDataSetupInterface
  23. */
  24. private $moduleDataSetup;
  25. /**
  26. * @var QueryModifierFactory
  27. */
  28. private $queryModifierFactory;
  29. /**
  30. * @var AggregatedFieldDataConverter
  31. */
  32. private $aggregatedFieldDataConverter;
  33. /**
  34. * ConvertSerializedData constructor.
  35. * @param \Magento\Framework\Setup\ModuleDataSetupInterface $moduleDataSetup
  36. */
  37. public function __construct(
  38. \Magento\Framework\Setup\ModuleDataSetupInterface $moduleDataSetup,
  39. QueryModifierFactory $queryModifierFactory,
  40. AggregatedFieldDataConverter $aggregatedFieldDataConverter
  41. ) {
  42. $this->moduleDataSetup = $moduleDataSetup;
  43. $this->queryModifierFactory = $queryModifierFactory;
  44. $this->aggregatedFieldDataConverter = $aggregatedFieldDataConverter;
  45. }
  46. /**
  47. * {@inheritdoc}
  48. */
  49. public function apply()
  50. {
  51. $this->convertSerializedData();
  52. }
  53. /**
  54. * {@inheritdoc}
  55. */
  56. public static function getDependencies()
  57. {
  58. return [UpgradeModelInstanceClassAliases::class];
  59. }
  60. /**
  61. * {@inheritdoc}
  62. */
  63. public static function getVersion()
  64. {
  65. return '2.0.1';
  66. }
  67. /**
  68. * {@inheritdoc}
  69. */
  70. public function getAliases()
  71. {
  72. return [];
  73. }
  74. /**
  75. * Convert native serialized data to json.
  76. */
  77. private function convertSerializedData()
  78. {
  79. $layoutUpdateQueryModifier = $this->queryModifierFactory->create(
  80. 'like',
  81. [
  82. 'values' => [
  83. 'xml' => '%conditions_encoded%'
  84. ]
  85. ]
  86. );
  87. $this->aggregatedFieldDataConverter->convert(
  88. [
  89. new FieldToConvert(
  90. SerializedToJson::class,
  91. $this->moduleDataSetup->getTable('widget_instance'),
  92. 'instance_id',
  93. 'widget_parameters'
  94. ),
  95. new FieldToConvert(
  96. LayoutUpdateConverter::class,
  97. $this->moduleDataSetup->getTable('layout_update'),
  98. 'layout_update_id',
  99. 'xml',
  100. $layoutUpdateQueryModifier
  101. ),
  102. ],
  103. $this->moduleDataSetup->getConnection()
  104. );
  105. }
  106. }