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