From 22df83cd5e6b2bab973a0ee2ac13a1a80c08cded Mon Sep 17 00:00:00 2001
From: Igor Melnikov <imelnikov@magento.com>
Date: Tue, 3 Jan 2017 15:59:00 -0600
Subject: [PATCH] MAGETWO-62902: Bundle and custom options of type file not
 converted

- Use \Magento\Sales\Setup\SerializedDataConverter for sales_order_item.product_options
---
 .../Setup/ConvertSerializedDataToJson.php     | 36 ++++++++++++++++---
 1 file changed, 31 insertions(+), 5 deletions(-)

diff --git a/app/code/Magento/Sales/Setup/ConvertSerializedDataToJson.php b/app/code/Magento/Sales/Setup/ConvertSerializedDataToJson.php
index 52047d0e59d..7fe2e2743e1 100644
--- a/app/code/Magento/Sales/Setup/ConvertSerializedDataToJson.php
+++ b/app/code/Magento/Sales/Setup/ConvertSerializedDataToJson.php
@@ -7,6 +7,7 @@ namespace Magento\Sales\Setup;
 
 use Magento\Framework\DB\FieldDataConverterFactory;
 use Magento\Framework\DB\DataConverter\SerializedToJson;
+use Magento\Framework\DB\FieldDataConverter;
 
 /**
  *  Convert serialized data in sales tables to JSON
@@ -23,6 +24,11 @@ class ConvertSerializedDataToJson
      */
     private $fieldDataConverterFactory;
 
+    /**
+     * @var array
+     */
+    private $fieldDataConverters = [];
+
     /**
      * @var array
      */
@@ -30,22 +36,26 @@ class ConvertSerializedDataToJson
         [
             'table' => 'sales_order_item',
             'identifier' => 'item_id',
-            'title' => 'product_options'
+            'title' => 'product_options',
+            'data_converter' => SerializedDataConverter::class
         ],
         [
             'table' => 'sales_shipment',
             'identifier' => 'entity_id',
-            'title' => 'packages'
+            'title' => 'packages',
+            'data_converter' => SerializedToJson::class
         ],
         [
             'table' => 'sales_order_payment',
             'identifier' => 'entity_id',
-            'title' => 'additional_information'
+            'title' => 'additional_information',
+            'data_converter' => SerializedToJson::class
         ],
         [
             'table' => 'sales_payment_transaction',
             'identifier' => 'transaction_id',
-            'title' => 'additional_information'
+            'title' => 'additional_information',
+            'data_converter' => SerializedToJson::class
         ]
     ];
 
@@ -74,8 +84,8 @@ class ConvertSerializedDataToJson
      */
     public function convert()
     {
-        $fieldDataConverter = $this->fieldDataConverterFactory->create(SerializedToJson::class);
         foreach ($this->fieldsToUpdate as $field) {
+            $fieldDataConverter = $this->getFieldDataConverter($field['data_converter']);
             $fieldDataConverter->convert(
                 $this->salesSetup->getConnection(),
                 $this->salesSetup->getTable($field['table']),
@@ -84,4 +94,20 @@ class ConvertSerializedDataToJson
             );
         }
     }
+
+    /**
+     * Get field data converter
+     *
+     * @param string $dataConverterClassName
+     * @return FieldDataConverter
+     */
+    private function getFieldDataConverter($dataConverterClassName)
+    {
+        if (!isset($this->fieldDataConverters[$dataConverterClassName])) {
+            $this->fieldDataConverters[$dataConverterClassName] = $this->fieldDataConverterFactory->create(
+                $dataConverterClassName
+            );
+        }
+        return $this->fieldDataConverters[$dataConverterClassName];
+    }
 }
-- 
GitLab